--- np2/macosx/np2.cpp 2004/01/31 19:45:25 1.50 +++ np2/macosx/np2.cpp 2004/07/13 17:10:06 1.63 @@ -38,14 +38,42 @@ #include "np2opening.h" #include "toolwin.h" #include "aboutdlg.h" +#include "keystat.h" +#include "subwind.h" +#include "macclnd.h" -#include -#define USE_RESUME #define NP2OPENING // #define OPENING_WAIT 1500 - NP2OSCFG np2oscfg = {"Neko Project IIx", -1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0}; +#if !defined(SUPPORT_PC9821) + NP2OSCFG np2oscfg = {"Neko Project IIx", //titles +#else + NP2OSCFG np2oscfg = {"Neko Project 21x", //titles +#endif + -1, //winx + -1, //winy + 0, //NOWAIT + 0, //DRAW_SKIP + 0, //DISPCLK + 0, //F11KEY + 0, //F12KEY + 0, //MOUSE_SW + 0, //JOYPAD1 + {5, 0, 0x3e, 19200, "", "", "GM", ""}, //mpu + 0, //confirm + 0, //resume + 1, //toolwin +#if defined(SUPPORT_KEYDISP) + 0, //keydisp +#endif +#if defined(SUPPORT_SOFTKBD) + 0, //softkey +#endif + + 0, //jastsnd + 0, //I286SAVE + }; WindowPtr hWndMain; BOOL np2running; @@ -122,23 +150,30 @@ static void InitToolBox(void) { static void MenuBarInit(void) { #if 1 Handle hMenu; - MenuHandle happlemenu; hMenu = GetNewMBar(IDM_MAINMENU); if (!hMenu) { ExitToShell(); } SetMenuBar(hMenu); - happlemenu = GetMenuHandle(IDM_APPLE); - if (happlemenu) { - AppendResMenu(happlemenu, 'DRVR'); +#if !defined(SUPPORT_SCSI) + hmenu = GetMenuHandle(IDM_HDD); + if (hmenu) { + DeleteMenuItem(hmenu, 7); + DeleteMenuItem(hmenu, 6); + DeleteMenuItem(hmenu, 5); + DeleteMenuItem(hmenu, 4); + DeleteMenuItem(hmenu, 3); } +#endif InsertMenu(GetMenu(IDM_SASI1), -1); InsertMenu(GetMenu(IDM_SASI2), -1); +#if defined(SUPPORT_SCSI) InsertMenu(GetMenu(IDM_SCSI0), -1); InsertMenu(GetMenu(IDM_SCSI1), -1); InsertMenu(GetMenu(IDM_SCSI2), -1); InsertMenu(GetMenu(IDM_SCSI3), -1); +#endif InsertMenu(GetMenu(IDM_KEYBOARD), -1); InsertMenu(GetMenu(IDM_SOUND), -1); InsertMenu(GetMenu(IDM_MEMORY), -1); @@ -147,6 +182,41 @@ static void MenuBarInit(void) { SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2OPEN, kMenuShiftModifier); SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2EJECT, kMenuShiftModifier); SetMenuItemModifiers(GetMenuRef(IDM_SASI2), IDM_SASI2OPEN, kMenuShiftModifier); +#ifndef SUPPORT_KEYDISP + DisableMenuItem(GetMenuRef(IDM_OTHER), IDM_KEYDISP); +#endif +#ifndef SUPPORT_SOFTKBD + SetMenuItemTextWithCFString(GetMenuRef(IDM_OTHER), IDM_SOFTKBD, CFSTR("please wait for 0.80")); + DisableMenuItem(GetMenuRef(IDM_OTHER), IDM_SOFTKBD); +#endif + if (np2oscfg.I286SAVE) { + AppendMenuItemTextWithCFString(GetMenuRef(IDM_OTHER), CFCopyLocalizedString(CFSTR("i286 save"),"i286"), kMenuItemAttrIconDisabled, NULL,NULL); + } + +#if defined(SUPPORT_PC9821) + AppendMenuItemTextWithCFString(GetMenuRef(IDM_MEMORY), CFSTR("11.6MB"), kMenuItemAttrIconDisabled, NULL, NULL); + AppendMenuItemTextWithCFString(GetMenuRef(IDM_MEMORY), CFSTR("13.6MB"), kMenuItemAttrIconDisabled, NULL, NULL); + SetMenuItemTextWithCFString(GetMenuRef(IDM_HELP), IDM_NP2HELP, CFSTR("Neko Project 21x Help")); + SetMenuItemTextWithCFString(GetMenuRef(IDM_APPLE), IDM_ABOUT, CFSTR("About Neko Project 21x...")); + SetMenuItemTextWithCFString(GetMenuRef(IDM_OTHER), IDM_I286SAVE, CFSTR("i386 save")); +#endif + + if (!(np2cfg.fddequip & 1)) { + DisableAllMenuItems(GetMenuRef(IDM_FDD1)); + } + if (!(np2cfg.fddequip & 2)) { + DisableAllMenuItems(GetMenuRef(IDM_FDD2)); + } +#if 0 +//Later... + if (!(np2cfg.fddequip & 4)) { + DisableAllMenuItems(GetMenuRef(IDM_FDD3)); + } + if (!(np2cfg.fddequip & 8)) { + DisableAllMenuItems(GetMenuRef(IDM_FDD4)); + } +#endif + DrawMenuBar(); #else OSStatus err; @@ -185,7 +255,7 @@ static void changescreen(BYTE mode) { } } -static void HandleMenuChoice(long wParam) { +void HandleMenuChoice(long wParam) { UINT update; @@ -253,6 +323,7 @@ static void HandleMenuChoice(long wParam diskdrv_sethdd(1, NULL); break; +#if defined(SUPPORT_SCSI) case IDM_SCSI0OPEN: dialog_changehdd(0x20); break; @@ -284,6 +355,7 @@ static void HandleMenuChoice(long wParam case IDM_SCSI3REMOVE: diskdrv_sethdd(0x23, NULL); break; +#endif case IDM_FULLSCREEN: toggleFullscreen(); @@ -436,6 +508,12 @@ static void HandleMenuChoice(long wParam update |= SYS_UPDATEOSCFG; break; + case IDM_F11USER: + menu_setf11key(4); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; + break; + case IDM_F12MOUSE: menu_setf12key(0); mackbd_resetf12(); @@ -460,6 +538,12 @@ static void HandleMenuChoice(long wParam update |= SYS_UPDATEOSCFG; break; + case IDM_F12USER: + menu_setf12key(4); + mackbd_resetf12(); + update |= SYS_UPDATEOSCFG; + break; + case IDM_BEEPOFF: menu_setbeepvol(0); beep_setvol(0); @@ -564,6 +648,16 @@ static void HandleMenuChoice(long wParam update |= SYS_UPDATECFG; break; + case IDM_MEM116: + menu_setextmem(11); + update |= SYS_UPDATECFG; + break; + + case IDM_MEM136: + menu_setextmem(13); + update |= SYS_UPDATECFG; + break; + case IDM_BMPSAVE: dialog_writebmp(); break; @@ -571,6 +665,10 @@ static void HandleMenuChoice(long wParam case IDM_S98LOGGING: dialog_s98(); break; + + case IDM_CALENDAR: + initClnd(); + break; case IDM_DISPCLOCK: menu_setdispclk(np2oscfg.DISPCLK ^ 1); @@ -596,10 +694,33 @@ static void HandleMenuChoice(long wParam menu_setmsrapid(np2cfg.MOUSERAPID ^ 1); update |= SYS_UPDATECFG; break; + case IDM_RECORDING: menu_setrecording(false); break; +#if defined(SUPPORT_KEYDISP) + case IDM_KEYDISP: + menu_setkeydisp(np2oscfg.keydisp ^ 1); + if (np2oscfg.keydisp) { + kdispwin_create(); + } + else { + kdispwin_destroy(); + } + break; +#endif +#if defined(SUPPORT_SOFTKBD) + case IDM_SOFTKBD: + menu_setsoftwarekeyboard(np2oscfg.softkey ^ 1); + if (np2oscfg.softkey) { + skbdwin_create(); + } + else { + skbdwin_destroy(); + } + break; +#endif case IDM_I286SAVE: debugsub_status(); @@ -647,7 +768,9 @@ static void HandleMouseDown(EventRecord static void framereset(UINT waitcnt) { framecnt = 0; + kdispwin_draw((BYTE)waitcnt); toolwin_draw((BYTE)waitcnt); + skbdwin_process(); if (np2oscfg.DISPCLK & 3) { if (sysmng_workclockrenewal()) { sysmng_updatecaption(3); @@ -661,6 +784,7 @@ static void processwait(UINT waitcnt) { timing_setcount(0); framereset(waitcnt); } + soundmng_sync(); } static void getstatfilename(char *path, const char *ext, int size) { @@ -695,11 +819,11 @@ static void flagload(const char *ext) { ret = IDOK; getstatfilename(path, ext, sizeof(path)); r = statsave_check(path, buf, sizeof(buf)); - if (r & (~NP2FLAG_DISKCHG)) { + if (r & (~STATFLAG_DISKCHG)) { ResumeErrorDialogProc(); ret = IDCANCEL; } - else if (r & NP2FLAG_DISKCHG) { + else if (r & STATFLAG_DISKCHG) { ret = ResumeWarningDialogProc(buf); } if (ret == IDOK) { @@ -724,16 +848,22 @@ int main(int argc, char *argv[]) { InitToolBox(); macossub_init(); - MenuBarInit(); - initload(); + MenuBarInit(); + TRACEINIT(); - toolwin_readini(); + keystat_initialize(); + kdispwin_initialize(); + skbdwin_readini(); + + toolwin_readini(); + kdispwin_readini(); if (!(setupMainWindow())) { return(0); } + skbdwin_initialize(); #ifdef NP2OPENING openingNP2(); @@ -758,9 +888,12 @@ int main(int argc, char *argv[]) { menu_setdispclk(np2oscfg.DISPCLK); menu_setbtnrapid(np2cfg.BTN_RAPID); menu_setbtnmode(np2cfg.BTN_MODE); - if (np2oscfg.I286SAVE) { - AppendMenuItemTextWithCFString(GetMenuRef(IDM_OTHER), CFCopyLocalizedString(CFSTR("i286 save"),"i286"), kMenuItemAttrIconDisabled, NULL,NULL); - } +#if defined(SUPPORT_KEYDISP) + menu_setkeydisp(np2oscfg.keydisp); +#endif +#if defined(SUPPORT_SOFTKBD) + menu_setsoftwarekeyboard(np2oscfg.softkey); +#endif scrnmng_initialize(); if (scrnmng_create(scrnmode) != SUCCESS) { @@ -778,7 +911,7 @@ int main(int argc, char *argv[]) { S98_init(); hid_init(); -#ifndef SUPPORT_WAVEMIX +#ifndef SUPPORT_SWSEEKSND if (soundmng_initialize() == SUCCESS) { soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL); soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL); @@ -791,6 +924,7 @@ int main(int argc, char *argv[]) { mousemng_enable(MOUSEPROC_SYSTEM); } #endif + #ifdef OPENING_WAIT while((GETTICK() - tick) < OPENING_WAIT); #endif @@ -801,9 +935,19 @@ int main(int argc, char *argv[]) { flagload(np2resume); } #endif +#if defined(SUPPORT_KEYDISP) + if (np2oscfg.keydisp) { + kdispwin_create(); + } +#endif +#if defined(SUPPORT_SOFTKBD) + if (np2oscfg.softkey) { + skbdwin_create(); + } +#endif theTarget = GetEventDispatcherTarget(); - + np2running = TRUE; while(np2running) { if (ReceiveNextEvent(0, NULL,kEventDurationNoWait,true, &theEvent)== noErr) @@ -902,21 +1046,26 @@ int main(int argc, char *argv[]) { #if defined(NP2GCC) mousemng_disable(MOUSEPROC_SYSTEM); #endif -#ifndef SUPPORT_WAVEMIX +#ifndef SUPPORT_SWSEEKSND soundmng_deinitialize(); #endif scrnmng_destroy(); + kdispwin_destroy(); + skbdwin_destroy(); if (sys_updates & (SYS_UPDATECFG | SYS_UPDATEOSCFG)) { initsave(); // np2.cfg create toolwin_writeini(); // np2.cfg append + kdispwin_writeini(); + skbdwin_writeini(); } + skbdwin_deinitialize(); TRACETERM(); macossub_term(); dosio_term(); - DisposeWindow(hWndMain); toolwin_close(); + DisposeWindow(hWndMain); (void)argc; (void)argv; @@ -977,6 +1126,7 @@ static pascal OSStatus np2appevent (Even switch (whatHappened) { case kEventMouseMoved: + case kEventMouseDragged: GetEventParameter (event, kEventParamMouseDelta, typeHIPoint, NULL, sizeof(HIPoint), NULL, &delta); mousemng_callback(delta); result = noErr; @@ -1013,16 +1163,23 @@ static pascal OSStatus np2appevent (Even break; case kEventClassKeyboard: if (GetEventKind(event)==kEventRawKeyModifiersChanged) { - static UInt32 backup = 0; - if (modif & shiftKey) keystat_senddata(0x70); - else keystat_senddata(0x70 | 0x80); - if (modif & optionKey) keystat_senddata(0x73); - else keystat_senddata(0x73 | 0x80); - if (modif & controlKey) keystat_senddata(0x74); - else keystat_senddata(0x74 | 0x80); - if ((modif & alphaLock) != (backup & alphaLock)) { + static UInt32 backup = 0; + UInt32 change = backup ^ modif; + backup = modif; + if (change & shiftKey) { + if (modif & shiftKey) keystat_senddata(0x70); + else keystat_senddata(0x70 | 0x80); + } + if (change & optionKey) { + if (modif & optionKey) keystat_senddata(0x73); + else keystat_senddata(0x73 | 0x80); + } + if (change & controlKey) { + if (modif & controlKey) keystat_senddata(0x74); + else keystat_senddata(0x74 | 0x80); + } + if (change & alphaLock) { keystat_senddata(0x71); - backup = modif; } result = noErr; } @@ -1122,6 +1279,7 @@ static const EventTypeSpec appEventList[ {kEventClassMouse, kEventMouseDown}, #if defined(NP2GCC) {kEventClassMouse, kEventMouseMoved}, + {kEventClassMouse, kEventMouseDragged}, {kEventClassMouse, kEventMouseUp}, #endif {kEventClassKeyboard, kEventRawKeyModifiersChanged}, @@ -1202,7 +1360,7 @@ static void toggleFullscreen(void) { static bool toolwin = false; MenuRef menu = GetMenuRef(IDM_SCREEN); Rect bounds; - short w = 640, h = 480; + short w, h; soundmng_stop(); if (!(scrnmode & SCRNMODE_FULLSCREEN)) { @@ -1210,12 +1368,14 @@ static void toggleFullscreen(void) { GetWindowBounds(hWndMain, kWindowContentRgn, &bounds); backupwidth = bounds.right - bounds.left; backupheight = bounds.bottom - bounds.top; + w = backupwidth; + h = backupheight; toolwin = np2oscfg.toolwin; toolwin_close(); np2oscfg.winx = bounds.left; np2oscfg.winy = bounds.top; DisposeWindow(hWndMain); - BeginFullScreen(&bkfullscreen, 0, &w, &h, &hWndMain, NULL, fullScreenAllowEvents | fullScreenCaptureDisplay); + BeginFullScreen(&bkfullscreen, 0, &w, &h, &hWndMain, NULL, fullScreenAllowEvents); DisableMenuItem(menu, IDM_ROLNORMAL); DisableMenuItem(menu, IDM_ROLLEFT); DisableMenuItem(menu, IDM_ROLRIGHT); @@ -1248,7 +1408,3 @@ static void toggleFullscreen(void) { CheckMenuItem(GetMenuHandle(IDM_SCREEN), LoWord(IDM_FULLSCREEN), scrnmode & SCRNMODE_FULLSCREEN); soundmng_play(); } - -void recieveCommand(long param) { - HandleMenuChoice(param); -}