--- xmil/MacOSX/xmil.cpp 2004/08/10 14:38:56 1.1 +++ xmil/MacOSX/xmil.cpp 2005/02/07 16:09:19 1.7 @@ -24,12 +24,22 @@ #include "fdd_ini.h" #include "x1f.h" #include "carbonevent.h" +#if defined(SUPPORT_RESUME) || defined(SUPPORT_STATSAVE) +#include "statsave.h" +#endif +#include "CarbonAboutBox.h" -// #define USE_RESUME - - - XMILOSCFG xmiloscfg = {100, 100, 0, 0, 0, 0, 0, 0}; + XMILOSCFG xmiloscfg = { 100, 100, + 0, 0, 0, + 0, 0, +#if defined(SUPPORT_RESUME) + 1, +#endif +#if defined(SUPPORT_STATSAVE) + 1, +#endif + 0}; WindowPtr hWndMain; BRESULT xmilrunning; @@ -42,7 +52,68 @@ static REG8 scrnmode; static char target[MAX_PATH] = DEFAULTPATH; -static const char np2resume[] = "sav"; + +static const char xmilapp[] = "xmil"; + + +// ---- stat save... + +#if defined(SUPPORT_RESUME) +static const char xmilresumeext[] = ".sav"; +#endif +#if defined(SUPPORT_STATSAVE) +static const char xmilflagext[] = ".sv%u"; +#endif + +#if defined(SUPPORT_RESUME) || defined(SUPPORT_STATSAVE) +static void getstatfilename(char *path, const char *ext, UINT size) { + + file_cpyname(path, file_getcd(xmilapp), size); + file_catname(path, ext, size); +} + +static void flagsave(const char *ext) { + + char path[MAX_PATH]; + + getstatfilename(path, ext, NELEMENTS(path)); + statsave_save(path); +} + +static void flagdelete(const char *ext) { + + char path[MAX_PATH]; + + getstatfilename(path, ext, NELEMENTS(path)); + file_delete(path); +} + +static int flagload(const char *ext, BRESULT force) { + + int ret; + char path[MAX_PATH]; + char buf[1024]; + int r; + + ret = IDOK; + getstatfilename(path, ext, NELEMENTS(path)); + r = statsave_check(path, buf, NELEMENTS(buf)); + if (r & (~STATFLAG_DISKCHG)) { + ResumeErrorDialogProc(); + ret = IDCANCEL; + } + else if ((!force) && (r & STATFLAG_DISKCHG)) { + ret = ResumeWarningDialogProc(buf); + } + else { + ret = IDOK; + } + if (ret == IDOK) { + statsave_load(path); + } + return(ret); +} +#endif // ---- おまじない @@ -60,59 +131,78 @@ static pascal OSErr handleQuitApp(const static void InitToolBox(void) { - FlushEvents(everyEvent, 0); InitCursor(); AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, AEProc(handleQuitApp), 0L, false); + + InitCarbonAboutBox(); } static void MenuBarInit(void) { - Handle hdl; - MenuHandle hmenu; + OSStatus err; + IBNibRef nibRef; + + err = CreateNibReference(CFSTR("main"), &nibRef); + if (err != noErr) ExitToShell(); + err = SetMenuBarFromNib(nibRef, CFSTR("MenuBar")); - hdl = GetNewMBar(IDM_MAINMENU); - if (hdl == NULL) { - ExitToShell(); - } - SetMenuBar(hdl); - hmenu = GetMenuHandle(IDM_APPLE); - if (hmenu) { - AppendResMenu(hmenu, 'DRVR'); + if (!xmiloscfg.Z80SAVE) { + DeleteMenuItem(GetMenuRef(IDM_OTHER), 7); } - if (!xmiloscfg.Z80SAVE) { - hmenu = GetMenuHandle(IDM_OTHER); - if (hmenu) { - DeleteMenuItem(hmenu, 7); - } + DisableAllMenuItems(GetMenuHandle(IDM_EDIT)); + + if (!(xmilcfg.fddequip & (1 << 3))) { + DeleteMenu(IDM_FDD3); + } else { + ChangeMenuAttributes(GetMenuRef(IDM_FDD3), 0, kMenuAttrHidden); + } + if (!(xmilcfg.fddequip & (1 << 2))) { + DeleteMenu(IDM_FDD2); + } else { + ChangeMenuAttributes(GetMenuRef(IDM_FDD2), 0, kMenuAttrHidden); + } + if (!(xmilcfg.fddequip & (1 << 1))) { + DeleteMenu(IDM_FDD1); + } + if (!(xmilcfg.fddequip & (1 << 0))) { + DeleteMenu(IDM_FDD0); } - hmenu = GetMenuHandle(IDM_FDD1); - SetItemCmd(hmenu, LoWord(IDM_FDD1OPEN), 'D'); - SetMenuItemModifiers(hmenu, LoWord(IDM_FDD1OPEN), kMenuShiftModifier); - SetItemCmd(hmenu, LoWord(IDM_FDD1EJECT), 'E'); - SetMenuItemModifiers(hmenu, LoWord(IDM_FDD1EJECT), kMenuShiftModifier); - EnableMenuItem(GetMenuHandle(IDM_DEVICE), LoWord(IDM_MOUSE)); +#if !defined(SUPPORT_TURBOZ) + DeleteMenuItem(GetMenuRef(IDM_IPLROM), 3); +#endif +#if !defined(SUPPORT_X1F) + DisableMenuItem(GetMenuRef(IDM_OTHER), 2); +#endif - DeleteMenu(IDM_FDD2); - DeleteMenu(IDM_FDD3); +#if defined(SUPPORT_STATSAVE) + if (!xmiloscfg.statsave) { +#endif + DeleteMenu(IDM_STATSAVE); +#if defined(SUPPORT_STATSAVE) + } +#endif - DrawMenuBar(); } static void HandleMenuChoice(long wParam) { UINT update; - Str255 applname; +#if defined(SUPPORT_STATSAVE) + UINT num; + char ext[16]; +#endif update = 0; switch(wParam) { +#if 0 case IDM_ABOUT: AboutDialogProc(); break; - +#endif case IDM_IPLRESET: pccore_reset(); break; @@ -139,6 +229,7 @@ static void HandleMenuChoice(long wParam case IDM_FDD0EJECT: diskdrv_setfdd(0, NULL, 0); + DisableMenuItem(GetMenuRef(IDM_FDD0), IDM_FDD0EJECT); break; case IDM_FDD1OPEN: @@ -147,6 +238,7 @@ static void HandleMenuChoice(long wParam case IDM_FDD1EJECT: diskdrv_setfdd(1, NULL, 0); + DisableMenuItem(GetMenuRef(IDM_FDD1), IDM_FDD1EJECT); break; case IDM_FDD2OPEN: @@ -155,6 +247,7 @@ static void HandleMenuChoice(long wParam case IDM_FDD2EJECT: diskdrv_setfdd(2, NULL, 0); + DisableMenuItem(GetMenuRef(IDM_FDD2), IDM_FDD2EJECT); break; case IDM_FDD3OPEN: @@ -163,13 +256,14 @@ static void HandleMenuChoice(long wParam case IDM_FDD3EJECT: diskdrv_setfdd(3, NULL, 0); + DisableMenuItem(GetMenuRef(IDM_FDD3), IDM_FDD3EJECT); break; - +#if defined(SUPPORT_TURBOZ) case IDM_TURBOZ: menu_setiplrom(3); update = SYS_UPDATECFG; break; - +#endif case IDM_TURBO: menu_setiplrom(2); update = SYS_UPDATECFG; @@ -201,26 +295,21 @@ static void HandleMenuChoice(long wParam break; case IDM_WIDTH80: - crtc.s.TXT_XL = 80; -// crtc.s.GRP_XL = 640; - vrambank_patch(); - scrnallflash = 1; + crtc_forcesetwidth(80); break; case IDM_WIDTH40: - crtc.s.TXT_XL = 40; -// crtc.s.GRP_XL = 320; - vrambank_patch(); - scrnallflash = 1; + crtc_forcesetwidth(40); break; case IDM_DISPSYNC: menu_setdispmode(xmilcfg.DISPSYNC ^ 1); break; -// case IDM_RASTER: -// menu_setraster(xmilcfg.RASTER ^ 1); -// break; + case IDM_RASTER: + menu_setraster(xmilcfg.RASTER ^ 1); + update = SYS_UPDATECFG; + break; case IDM_NOWAIT: menu_setwaitflg(xmiloscfg.NOWAIT ^ 1); @@ -254,51 +343,44 @@ static void HandleMenuChoice(long wParam case IDM_KEY: menu_setkey(0); -// keystat_resetjoykey(); update = SYS_UPDATECFG; break; case IDM_JOY1: menu_setkey(1); -// keystat_resetjoykey(); update = SYS_UPDATECFG; break; case IDM_JOY2: menu_setkey(2); -// keystat_resetjoykey(); update = SYS_UPDATECFG; break; -// case IDM_MOUSEKEY: -// menu_setkey(3); -// keystat_resetjoykey(); -// update = SYS_UPDATECFG; -// break; - case IDM_FMBOARD: menu_setsound(xmilcfg.SOUND_SW ^ 1); update = SYS_UPDATECFG; break; case IDM_MOUSE: + // mousemng_toggle(MOUSEPROC_SYSTEM); menu_setmouse(xmilcfg.MOUSE_SW ^ 1); update = SYS_UPDATECFG; break; - case IDM_8MHZ: - menu_setcpuspeed(xmilcfg.CPU8MHz ^ 1); - update = SYS_UPDATECFG; - break; - case IDM_SEEKSND: menu_setmotorflg(xmilcfg.MOTOR ^ 1); update = SYS_UPDATECFG; break; -// case IDM_BMPSAVE: -// dialog_writebmp(); -// break; + case IDM_BMPSAVE: + dialog_writebmp(); + break; + +#if defined(SUPPORT_X1F) + case IDM_OPMLOG: + dialog_x1f(); + break; +#endif case IDM_DISPCLOCK: menu_setdispclk(xmiloscfg.DISPCLK ^ 1); @@ -325,31 +407,25 @@ static void HandleMenuChoice(long wParam break; default: - if (HiWord(wParam) == IDM_APPLE) { - GetMenuItemText(GetMenuHandle(IDM_APPLE), - LoWord(wParam), applname); +#if defined(SUPPORT_STATSAVE) + if (HiWord(wParam) == IDM_STATSAVE) { + num = LoWord(wParam); + if ((num >= 1) && (num < (1 + 10))) { + OEMSPRINTF(ext, xmilflagext, num - 1); + flagsave(ext); + } + else if ((num >= 12) && (num < (12 + 10))) { + OEMSPRINTF(ext, xmilflagext, num - 12); + flagload(ext, TRUE); + } } +#endif break; } sysmng_update(update); HiliteMenu(0); } -static void HandleUpdateEvent(EventRecord *pevent) { - - WindowPtr hWnd; - - hWnd = (WindowPtr)pevent->message; - BeginUpdate(hWnd); - if (xmilrunning) { - scrndraw_redraw(); - } - else { -// np2open(); - } - EndUpdate(hWnd); -} - static void HandleMouseDown(EventRecord *pevent) { WindowPtr hWnd; @@ -364,120 +440,8 @@ static void HandleMouseDown(EventRecord soundmng_play(); } break; - - case inContent: - mousemng_buttonevent(MOUSEMNG_LEFTDOWN); - break; - } -} - -static void eventproc(EventRecord *event) { - - int keycode; - - keycode = (event->message & keyCodeMask) >> 8; - switch(event->what) { - case mouseDown: - HandleMouseDown(event); - break; - - case updateEvt: - HandleUpdateEvent(event); - break; - - case keyDown: - case autoKey: - if (!xmilrunning) { - break; - } - if ((keycode == 0x6f) && (xmiloscfg.F12KEY == 0)) { - HandleMenuChoice(IDM_MOUSE); - break; - } - if (event->modifiers & cmdKey) { -#if !TARGET_API_MAC_CARBON - if (mackbd_keydown(keycode, TRUE)) { - break; - } -#endif - soundmng_stop(); - mousemng_disable(MOUSEPROC_MACUI); - HandleMenuChoice(MenuEvent(event)); - mousemng_enable(MOUSEPROC_MACUI); - soundmng_play(); - } - else { - mackbd_keydown(keycode, FALSE); - } - break; - - case keyUp: - mackbd_keyup(keycode); - break; - - case mouseUp: - mousemng_buttonevent(MOUSEMNG_LEFTUP); - mousemng_buttonevent(MOUSEMNG_RIGHTUP); - break; - - case activateEvt: - mackbd_activate((event->modifiers & activeFlag)?TRUE:FALSE); - break; - } -} - - -#if 0 -// ---- - -static void getstatfilename(char *path, const char *ext, int size) { - - file_cpyname(path, file_getcd(np2app), size); - file_catname(path, str_dot, size); - file_catname(path, ext, size); -} - -static void flagsave(const char *ext) { - - char path[MAX_PATH]; - - getstatfilename(path, ext, sizeof(path)); - statsave_save(path); -} - -static void flagdelete(const char *ext) { - - char path[MAX_PATH]; - - getstatfilename(path, ext, sizeof(path)); - file_delete(path); -} - -static int flagload(const char *ext) { - - int ret; - char path[MAX_PATH]; - char buf[1024]; - int r; - - ret = IDOK; - getstatfilename(path, ext, sizeof(path)); - r = statsave_check(path, buf, sizeof(buf)); - if (r & (~STATFLAG_DISKCHG)) { - ResumeErrorDialogProc(); - ret = IDCANCEL; } - else if (r & STATFLAG_DISKCHG) { - ret = ResumeWarningDialogProc(buf); - } - if (ret == IDOK) { - statsave_load(path); - } - return(ret); } -#endif - - // ---- static UINT framecnt = 0; @@ -538,20 +502,7 @@ int main(int argc, char *argv[]) { dosio_term(); return(0); } -/* - SetRect(&wRect, xmiloscfg.posx, xmiloscfg.posy, 100, 100); - hWndMain = NewWindow(0, &wRect, "\pNekoe System", FALSE, - noGrowDocProc, (WindowPtr)-1, TRUE, 0); - if (!hWndMain) { - TRACETERM(); - macossub_term(); - dosio_term(); - return(0); - } - scrnmng_initialize(); - SizeWindow(hWndMain, 640, 400, TRUE); - ShowWindow(hWndMain); -*/ + menu_setiplrom(xmilcfg.ROM_TYPE); menu_setbootmedia(xmilcfg.DIP_SW); menu_setresolute(xmilcfg.DIP_SW); @@ -562,7 +513,6 @@ int main(int argc, char *argv[]) { menu_setkey(0); menu_setsound(xmilcfg.SOUND_SW); menu_setmouse(xmilcfg.MOUSE_SW); - menu_setcpuspeed(xmilcfg.CPU8MHz); menu_setmotorflg(xmilcfg.MOTOR); menu_setdispclk(xmiloscfg.DISPCLK); menu_setbtnmode(xmilcfg.BTN_MODE); @@ -599,9 +549,9 @@ int main(int argc, char *argv[]) { pccore_initialize(); pccore_reset(); -#if 0 - if (np2oscfg.resume) { - flagload(np2resume); +#if defined(SUPPORT_RESUME) + if (xmiloscfg.resume) { + flagload(xmilresumeext, FALSE); } #endif @@ -684,12 +634,12 @@ int main(int argc, char *argv[]) { xmilrunning = FALSE; -#if 0 - if (np2oscfg.resume) { - flagsave(np2resume); +#if defined(SUPPORT_RESUME) + if (xmiloscfg.resume) { + flagsave(xmilresumeext); } else { - flagdelete(np2resume); + flagdelete(xmilresumeext); } #endif @@ -714,10 +664,20 @@ int main(int argc, char *argv[]) { return(0); } - void wrapperMouseDown(EventRef event) { EventRecord eve; ConvertEventRefToEventRecord( event,&eve ); HandleMouseDown(&eve); } + +void wrapperKeyDown(EventRef event) { + EventRecord eve; + + ConvertEventRefToEventRecord( event,&eve ); + soundmng_stop(); + mousemng_disable(MOUSEPROC_MACUI); + HandleMenuChoice(MenuEvent(&eve)); + mousemng_enable(MOUSEPROC_MACUI); + soundmng_play(); +} \ No newline at end of file