--- xmil/macos9/xmil.cpp 2004/08/08 16:40:02 1.2 +++ xmil/macos9/xmil.cpp 2005/02/13 22:27:53 1.7 @@ -17,6 +17,9 @@ #include "iocore.h" #include "timing.h" #include "keystat.h" +#if defined(SUPPORT_RESUME) || defined(SUPPORT_STATSAVE) +#include "statsave.h" +#endif #include "debugsub.h" #include "scrndraw.h" #include "makescrn.h" @@ -28,7 +31,16 @@ // #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; @@ -44,13 +56,67 @@ static REG8 scrnmode; #endif static char target[MAX_PATH] = DEFAULTPATH; -#if !defined(SUPPORT_PC9821) -static const char np2app[] = "np2"; -#else -static const char np2app[] = "np21"; + +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) { -static const char np2resume[] = "sav"; + 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) { + + char path[MAX_PATH]; + char buf[1024]; + int r; + int ret; + + 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 // ---- おまじない @@ -114,6 +180,13 @@ static void MenuBarInit(void) { } } +#if !defined(SUPPORT_TURBOZ) + hmenu = GetMenuHandle(IDM_IPLROM); + if (hmenu) { + DeleteMenuItem(hmenu, 3); + } +#endif + #if TARGET_API_MAC_CARBON hmenu = GetMenuHandle(IDM_FDD1); SetItemCmd(hmenu, LoWord(IDM_FDD1OPEN), 'D'); @@ -124,8 +197,26 @@ static void MenuBarInit(void) { EnableItem(GetMenuHandle(IDM_DEVICE), LoWord(IDM_MOUSE)); #endif - DeleteMenu(IDM_FDD2); - DeleteMenu(IDM_FDD3); + if (!(xmilcfg.fddequip & (1 << 3))) { + DeleteMenu(IDM_FDD3); + } + if (!(xmilcfg.fddequip & (1 << 2))) { + DeleteMenu(IDM_FDD2); + } + 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 DrawMenuBar(); } @@ -134,6 +225,10 @@ static void HandleMenuChoice(long wParam UINT update; Str255 applname; +#if defined(SUPPORT_STATSAVE) + UINT num; + char ext[16]; +#endif update = 0; switch(wParam) { @@ -193,8 +288,8 @@ static void HandleMenuChoice(long wParam diskdrv_setfdd(3, NULL, 0); break; - case IDM_TURBOZ: - menu_setiplrom(3); + case IDM_X1ROM: + menu_setiplrom(1); update = SYS_UPDATECFG; break; @@ -203,10 +298,12 @@ static void HandleMenuChoice(long wParam update = SYS_UPDATECFG; break; - case IDM_X1ROM: - menu_setiplrom(1); +#if defined(SUPPORT_TURBOZ) + case IDM_TURBOZ: + menu_setiplrom(3); update = SYS_UPDATECFG; break; +#endif case IDM_BOOT2D: menu_setbootmedia(0); @@ -229,17 +326,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: @@ -314,19 +405,14 @@ 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; break; -// case IDM_BMPSAVE: -// dialog_writebmp(); -// break; + case IDM_BMPSAVE: + dialog_writebmp(); + break; case IDM_DISPCLOCK: menu_setdispclk(xmiloscfg.DISPCLK ^ 1); @@ -360,6 +446,19 @@ static void HandleMenuChoice(long wParam (void)OpenDeskAcc(applname); #endif } +#if defined(SUPPORT_STATSAVE) + else 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); @@ -487,57 +586,6 @@ static void eventproc(EventRecord *event } -#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; @@ -592,8 +640,10 @@ int main(int argc, char *argv[]) { // keystat_initialize(); SetRect(&wRect, xmiloscfg.posx, xmiloscfg.posy, 100, 100); - hWndMain = NewWindow(0, &wRect, "\pNekoe System", FALSE, + hWndMain = NewWindow(0, &wRect, "\pX millennium", FALSE, noGrowDocProc, (WindowPtr)-1, TRUE, 0); +// hWndMain = NewWindow(0, &wRect, "\pNekoe System", FALSE, +// noGrowDocProc, (WindowPtr)-1, TRUE, 0); if (!hWndMain) { TRACETERM(); macossub_term(); @@ -614,7 +664,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); @@ -650,9 +699,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 @@ -737,12 +786,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