--- np2/macos9/np2.cpp 2003/10/23 12:58:44 1.3 +++ np2/macos9/np2.cpp 2003/11/13 07:47:17 1.14 @@ -3,6 +3,8 @@ #include "strres.h" #include "np2.h" #include "dosio.h" +#include "commng.h" +#include "mousemng.h" #include "scrnmng.h" #include "soundmng.h" #include "sysmng.h" @@ -10,6 +12,7 @@ #include "mackbd.h" #include "ini.h" #include "menu.h" +#include "np2open.h" #include "dialog.h" #include "memory.h" #include "pccore.h" @@ -27,18 +30,11 @@ #include "fddfile.h" #include "statsave.h" -#if defined(NP2GCC) -#include "mousemng.h" -#endif #define USE_RESUME -#if defined(NP2GCC) - NP2OSCFG np2oscfg = {0, 2, 0, 0, 0, 0}; -#else - NP2OSCFG np2oscfg = {0, 2, 0, 0, 0}; -#endif + NP2OSCFG np2oscfg = {100, 100, 0, 2, 0, 0, 0, 0, 0}; WindowPtr hWndMain; BOOL np2running; @@ -102,23 +98,37 @@ static void InitToolBox(void) { static void MenuBarInit(void) { - Handle hMenu; - MenuHandle happlemenu; + Handle hdl; + MenuHandle hmenu; - hMenu = GetNewMBar(IDM_MAINMENU); - if (!hMenu) { + hdl = GetNewMBar(IDM_MAINMENU); + if (hdl == NULL) { ExitToShell(); } - SetMenuBar(hMenu); - happlemenu = GetMenuHandle(IDM_APPLE); - if (happlemenu) { - AppendResMenu(happlemenu, 'DRVR'); + SetMenuBar(hdl); + hmenu = GetMenuHandle(IDM_APPLE); + if (hmenu) { + AppendResMenu(hmenu, 'DRVR'); } InsertMenu(GetMenu(IDM_SASI1), -1); InsertMenu(GetMenu(IDM_SASI2), -1); InsertMenu(GetMenu(IDM_KEYBOARD), -1); InsertMenu(GetMenu(IDM_SOUND), -1); InsertMenu(GetMenu(IDM_MEMORY), -1); + +#if TARGET_API_MAC_CARBON + hmenu = GetMenuHandle(IDM_FDD2); + SetItemCmd(hmenu, LoWord(IDM_FDD2OPEN), 'D'); + SetMenuItemModifiers(hmenu, LoWord(IDM_FDD2OPEN), kMenuOptionModifier); + SetItemCmd(hmenu, LoWord(IDM_FDD2EJECT), 'E'); + SetMenuItemModifiers(hmenu, LoWord(IDM_FDD2EJECT), kMenuOptionModifier); + hmenu = GetMenuHandle(IDM_SASI2); + SetItemCmd(hmenu, LoWord(IDM_FDD2OPEN), 'O'); + SetMenuItemModifiers(hmenu, LoWord(IDM_SASI2OPEN), kMenuOptionModifier); +#else + EnableItem(GetMenuHandle(IDM_DEVICE), LoWord(IDM_MOUSE)); + EnableItem(GetMenuHandle(IDM_KEYBOARD), LoWord(IDM_F12MOUSE)); +#endif DrawMenuBar(); } @@ -143,6 +153,10 @@ static void HandleMenuChoice(long wParam pccore_reset(); break; + case IDM_CONFIGURE: + ConfigDialogProc(); + break; + case IDM_NEWDISK: dialog_newdisk(); break; @@ -244,13 +258,21 @@ static void HandleMenuChoice(long wParam update |= SYS_UPDATECFG; break; -#if defined(NP2GCC) - case IDM_MOUSE: - mouse_running(MOUSE_XOR); - menu_setmouse(np2oscfg.MOUSE_SW ^ 1); - sysmng_update(SYS_UPDATECFG); + case IDM_SCREENOPT: + dialog_scropt(); + break; + + case IDM_MOUSE: + mousemng_toggle(MOUSEPROC_SYSTEM); + menu_setmouse(np2oscfg.MOUSE_SW ^ 1); + update |= SYS_UPDATECFG; + break; + + case IDM_MIDIPANIC: + rs232c_midipanic(); + mpu98ii_midipanic(); + pc9861k_midipanic(); break; -#endif case IDM_KEY: menu_setkey(0); @@ -374,6 +396,11 @@ static void HandleMenuChoice(long wParam update |= SYS_UPDATECFG; break; + case IDM_AMD98: + menu_setsound(0x80); + update |= SYS_UPDATECFG; + break; + case IDM_SEEKSND: menu_setmotorflg(np2cfg.MOTOR ^ 1); update |= SYS_UPDATECFG; @@ -447,7 +474,12 @@ static void HandleUpdateEvent(EventRecor hWnd = (WindowPtr)pevent->message; BeginUpdate(hWnd); - scrndraw_redraw(); + if (np2running) { + scrndraw_redraw(); + } + else { + np2open(); + } EndUpdate(hWnd); } @@ -458,7 +490,13 @@ static void HandleMouseDown(EventRecord switch(FindWindow(pevent->where, &hWnd)) { case inMenuBar: - HandleMenuChoice(MenuSelect(pevent->where)); + if (np2running) { + soundmng_stop(); + mousemng_disable(MOUSEPROC_MACUI); + HandleMenuChoice(MenuSelect(pevent->where)); + mousemng_enable(MOUSEPROC_MACUI); + soundmng_play(); + } break; case inDrag: @@ -478,14 +516,8 @@ static void HandleMouseDown(EventRecord break; case inContent: -#if defined(NP2GCC) - if (controlKey & GetCurrentKeyModifiers() ) { - mouse_btn(MOUSE_RIGHTDOWN); - } - else { - mouse_btn(MOUSE_LEFTDOWN); - } -#endif + mousemng_buttonevent((pevent->modifiers & (1 << 12)) + ?MOUSEMNG_RIGHTDOWN:MOUSEMNG_LEFTDOWN); break; case inGoAway: @@ -497,6 +529,9 @@ static void HandleMouseDown(EventRecord static void eventproc(EventRecord *event) { + int keycode; + + keycode = (event->message & keyCodeMask) >> 8; switch(event->what) { case mouseDown: HandleMouseDown(event); @@ -508,42 +543,56 @@ static void eventproc(EventRecord *event case keyDown: case autoKey: - mackbd_f12down(((event->message) & keyCodeMask) >> 8); + if (!np2running) { + break; + } +#if !TARGET_API_MAC_CARBON + if ((keycode == 0x6f) && (np2oscfg.F12COPY == 0)) { + HandleMenuChoice(IDM_MOUSE); + break; + } +#endif if (event->modifiers & cmdKey) { + soundmng_stop(); + mousemng_disable(MOUSEPROC_MACUI); HandleMenuChoice(MenuKey(event->message & charCodeMask)); + mousemng_enable(MOUSEPROC_MACUI); + soundmng_play(); + } + else { + mackbd_keydown(keycode); } break; case keyUp: - mackbd_f12up(((event->message) & keyCodeMask) >> 8); + mackbd_keyup(keycode); break; -#if defined(NP2GCC) - case mouseUp: - if (controlKey & GetCurrentKeyModifiers()) { - mouse_btn(MOUSE_RIGHTUP); - } - else { - mouse_btn(MOUSE_LEFTUP); - } + case mouseUp: + mousemng_buttonevent(MOUSEMNG_LEFTUP); + mousemng_buttonevent(MOUSEMNG_RIGHTUP); break; -#endif } } // ---- +static void framereset(void) { + + framecnt = 0; + if (np2oscfg.DISPCLK & 3) { + if (sysmng_workclockrenewal()) { + sysmng_updatecaption(3); + } + } +} + static void processwait(UINT waitcnt) { if (timing_getcount() >= waitcnt) { timing_setcount(0); - framecnt = 0; - if (np2oscfg.DISPCLK & 3) { - if (sysmng_workclockrenewal()) { - sysmng_updatecaption(3); - } - } + framereset(); } } @@ -562,23 +611,44 @@ static void flagsave(const char *ext) { statsave_save(path); } -static void flagload(const char *ext) { +static void flagdelete(const char *ext) { char path[MAX_PATH]; - char buf[1024]; + + 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)); - ret = statsave_check(path, buf, sizeof(buf)); - if (ret == NP2FLAG_SUCCESS) { + r = statsave_check(path, buf, sizeof(buf)); + if (r & (~NP2FLAG_DISKCHG)) { + ResumeErrorDialogProc(); + ret = IDCANCEL; + } + else if (r & NP2FLAG_DISKCHG) { + ret = ResumeWarningDialogProc(buf); + } + if (ret == IDOK) { statsave_load(path); } + return(ret); } int main(int argc, char *argv[]) { Rect wRect; EventRecord event; + UINT t; + GrafPtr saveport; + Point pt; dosio_init(); file_setcd(target); @@ -591,7 +661,7 @@ int main(int argc, char *argv[]) { TRACEINIT(); - SetRect(&wRect, 100, 100, 100, 100); + SetRect(&wRect, np2oscfg.posx, np2oscfg.posy, 100, 100); hWndMain = NewWindow(0, &wRect, "\pNeko Project II", FALSE, noGrowDocProc, (WindowPtr)-1, TRUE, 0); if (!hWndMain) { @@ -628,22 +698,30 @@ int main(int argc, char *argv[]) { return(0); } + np2open(); + t = GETTICK(); + while((GETTICK() - t) < 100) { + if (WaitNextEvent(everyEvent, &event, 0, 0)) { + eventproc(&event); + } + } + + commng_initialize(); sysmng_initialize(); mackbd_initialize(); pccore_init(); S98_init(); -#if defined(NP2GCC) + mousemng_initialize(); if (np2oscfg.MOUSE_SW) { // ver0.30 - mouse_running(MOUSE_ON); + mousemng_enable(MOUSEPROC_SYSTEM); } -#endif - scrndraw_redraw(); +// scrndraw_redraw(); pccore_reset(); -#if defined(USE_RESUME) - flagload(np2resume); -#endif + if (np2oscfg.resume) { + flagload(np2resume); + } SetEventMask(everyEvent); @@ -654,10 +732,8 @@ int main(int argc, char *argv[]) { } else { if (np2oscfg.NOWAIT) { -#if defined(NP2GCC) - mouse_callback(); -#endif mackbd_callback(); + mousemng_callback(); pccore_exec(framecnt == 0); if (np2oscfg.DRAW_SKIP) { // nowait frame skip framecnt++; @@ -674,10 +750,8 @@ int main(int argc, char *argv[]) { } else if (np2oscfg.DRAW_SKIP) { // frame skip if (framecnt < np2oscfg.DRAW_SKIP) { -#if defined(NP2GCC) - mouse_callback(); -#endif mackbd_callback(); + mousemng_callback(); pccore_exec(framecnt == 0); framecnt++; } @@ -688,10 +762,8 @@ int main(int argc, char *argv[]) { else { // auto skip if (!waitcnt) { UINT cnt; -#if defined(NP2GCC) - mouse_callback(); -#endif mackbd_callback(); + mousemng_callback(); pccore_exec(framecnt == 0); framecnt++; cnt = timing_getcount(); @@ -711,7 +783,7 @@ int main(int argc, char *argv[]) { else { timing_setcount(cnt - framecnt); } - framecnt = 0; + framereset(); } } else { @@ -721,20 +793,38 @@ int main(int argc, char *argv[]) { } } } + + GetPort(&saveport); +#if TARGET_API_MAC_CARBON + SetPortWindowPort(hWndMain); +#else + SetPort(hWndMain); +#endif + pt.h = 0; + pt.v = 0; + LocalToGlobal(&pt); + SetPort(saveport); + if ((np2oscfg.posx != pt.h) || (np2oscfg.posy != pt.v)) { + np2oscfg.posx = pt.h; + np2oscfg.posy = pt.v; + sysmng_update(SYS_UPDATEOSCFG); + } + np2running = FALSE; pccore_cfgupdate(); -#if defined(USE_RESUME) - flagsave(np2resume); -#endif + if (np2oscfg.resume) { + flagsave(np2resume); + } + else { + flagdelete(np2resume); + } pccore_term(); S98_trash(); -#if defined(NP2GCC) - mouse_running(MOUSE_OFF); -#endif + mousemng_disable(MOUSEPROC_SYSTEM); scrnmng_destroy();