--- xmil/MacOSX/xmil.cpp 2004/08/10 18:57:39 1.2 +++ xmil/MacOSX/xmil.cpp 2004/08/15 11:00:51 1.6 @@ -24,12 +24,24 @@ #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) + 0, +#endif +#if defined(SUPPORT_STATSAVE) + 1, +#endif + 0}; WindowPtr hWndMain; BRESULT xmilrunning; @@ -42,7 +54,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 // ---- おまじない @@ -64,6 +137,8 @@ static void InitToolBox(void) { AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, AEProc(handleQuitApp), 0L, false); + + InitCarbonAboutBox(); } static void MenuBarInit(void) { @@ -79,21 +154,50 @@ static void MenuBarInit(void) { DeleteMenuItem(GetMenuRef(IDM_OTHER), 7); } - DeleteMenu(IDM_FDD2); - DeleteMenu(IDM_FDD3); + 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); + } + +#if defined(SUPPORT_STATSAVE) + if (!xmiloscfg.statsave) { +#endif + DeleteMenu(IDM_STATSAVE); +#if defined(SUPPORT_STATSAVE) + } +#endif + } 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; @@ -120,6 +224,7 @@ static void HandleMenuChoice(long wParam case IDM_FDD0EJECT: diskdrv_setfdd(0, NULL, 0); + DisableMenuItem(GetMenuRef(IDM_FDD0), IDM_FDD0EJECT); break; case IDM_FDD1OPEN: @@ -128,6 +233,7 @@ static void HandleMenuChoice(long wParam case IDM_FDD1EJECT: diskdrv_setfdd(1, NULL, 0); + DisableMenuItem(GetMenuRef(IDM_FDD1), IDM_FDD1EJECT); break; case IDM_FDD2OPEN: @@ -136,6 +242,7 @@ static void HandleMenuChoice(long wParam case IDM_FDD2EJECT: diskdrv_setfdd(2, NULL, 0); + DisableMenuItem(GetMenuRef(IDM_FDD2), IDM_FDD2EJECT); break; case IDM_FDD3OPEN: @@ -144,6 +251,7 @@ static void HandleMenuChoice(long wParam case IDM_FDD3EJECT: diskdrv_setfdd(3, NULL, 0); + DisableMenuItem(GetMenuRef(IDM_FDD3), IDM_FDD3EJECT); break; case IDM_TURBOZ: @@ -182,17 +290,11 @@ 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: @@ -267,11 +369,6 @@ static void HandleMenuChoice(long wParam 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; @@ -306,27 +403,25 @@ static void HandleMenuChoice(long wParam break; default: +#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); } -#if 0 -static void HandleUpdateEvent(EventRecord *pevent) { - WindowPtr hWnd; - - hWnd = (WindowPtr)pevent->message; - BeginUpdate(hWnd); - if (xmilrunning) { - scrndraw_redraw(); - } - else { -// np2open(); - } - EndUpdate(hWnd); -} -#endif static void HandleMouseDown(EventRecord *pevent) { WindowPtr hWnd; @@ -343,114 +438,6 @@ static void HandleMouseDown(EventRecord break; } } -#if 0 -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; - } -} -#endif - -#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; @@ -535,7 +522,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); @@ -572,9 +558,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 @@ -657,12 +643,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 @@ -687,10 +673,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