--- np2/macosx/np2.cpp 2003/12/04 17:12:09 1.42 +++ np2/macosx/np2.cpp 2004/02/16 05:31:31 1.52 @@ -26,7 +26,6 @@ #include "s98.h" #include "diskdrv.h" #include "fddfile.h" -#include "statsave.h" #include "mousemng.h" #include "configure.h" #include "screenopt.h" @@ -46,7 +45,7 @@ // #define OPENING_WAIT 1500 - NP2OSCFG np2oscfg = {"Neko Project IIx", -1, -1, 0, 2, 0, 0, 0, 0, 0, 1, 0}; + NP2OSCFG np2oscfg = {"Neko Project IIx", -1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0}; WindowPtr hWndMain; BOOL np2running; @@ -136,14 +135,18 @@ static void MenuBarInit(void) { } InsertMenu(GetMenu(IDM_SASI1), -1); InsertMenu(GetMenu(IDM_SASI2), -1); + InsertMenu(GetMenu(IDM_SCSI0), -1); + InsertMenu(GetMenu(IDM_SCSI1), -1); + InsertMenu(GetMenu(IDM_SCSI2), -1); + InsertMenu(GetMenu(IDM_SCSI3), -1); InsertMenu(GetMenu(IDM_KEYBOARD), -1); InsertMenu(GetMenu(IDM_SOUND), -1); InsertMenu(GetMenu(IDM_MEMORY), -1); ChangeMenuAttributes(GetMenuRef(IDM_EDIT), kMenuAttrAutoDisable, 0); DisableAllMenuItems(GetMenuHandle(IDM_EDIT)); - SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2OPEN, kMenuOptionModifier); - SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2EJECT, kMenuOptionModifier); - SetMenuItemModifiers(GetMenuRef(IDM_SASI2), IDM_SASI2OPEN, kMenuOptionModifier); + SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2OPEN, kMenuShiftModifier); + SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2EJECT, kMenuShiftModifier); + SetMenuItemModifiers(GetMenuRef(IDM_SASI2), IDM_SASI2OPEN, kMenuShiftModifier); DrawMenuBar(); #else OSStatus err; @@ -250,6 +253,38 @@ static void HandleMenuChoice(long wParam diskdrv_sethdd(1, NULL); break; + case IDM_SCSI0OPEN: + dialog_changehdd(0x20); + break; + + case IDM_SCSI0REMOVE: + diskdrv_sethdd(0x20, NULL); + break; + + case IDM_SCSI1OPEN: + dialog_changehdd(0x21); + break; + + case IDM_SCSI1REMOVE: + diskdrv_sethdd(0x21, NULL); + break; + + case IDM_SCSI2OPEN: + dialog_changehdd(0x22); + break; + + case IDM_SCSI2REMOVE: + diskdrv_sethdd(0x22, NULL); + break; + + case IDM_SCSI3OPEN: + dialog_changehdd(0x23); + break; + + case IDM_SCSI3REMOVE: + diskdrv_sethdd(0x23, NULL); + break; + case IDM_FULLSCREEN: toggleFullscreen(); break; @@ -379,49 +414,61 @@ static void HandleMenuChoice(long wParam case IDM_F11KANA: menu_setf11key(0); - mackbd_resetf11f12(); + mackbd_resetf11(); update |= SYS_UPDATEOSCFG; break; case IDM_F11STOP: menu_setf11key(1); - mackbd_resetf11f12(); + mackbd_resetf11(); update |= SYS_UPDATEOSCFG; break; case IDM_F11EQU: menu_setf11key(2); - mackbd_resetf11f12(); + mackbd_resetf11(); update |= SYS_UPDATEOSCFG; break; case IDM_F11NFER: menu_setf11key(3); - mackbd_resetf11f12(); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F11USER: + menu_setf11key(4); + mackbd_resetf11(); update |= SYS_UPDATEOSCFG; break; case IDM_F12MOUSE: menu_setf12key(0); - mackbd_resetf11f12(); + mackbd_resetf12(); update |= SYS_UPDATEOSCFG; break; case IDM_F12COPY: menu_setf12key(1); - mackbd_resetf11f12(); + mackbd_resetf12(); update |= SYS_UPDATEOSCFG; break; case IDM_F12COMMA: menu_setf12key(2); - mackbd_resetf11f12(); + mackbd_resetf12(); update |= SYS_UPDATEOSCFG; break; case IDM_F12XFER: menu_setf12key(3); - mackbd_resetf11f12(); + mackbd_resetf12(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F12USER: + menu_setf12key(4); + mackbd_resetf12(); update |= SYS_UPDATEOSCFG; break; @@ -499,6 +546,11 @@ static void HandleMenuChoice(long wParam update |= SYS_UPDATECFG; break; + case IDM_JASTSOUND: + menu_setjastsound(np2oscfg.jastsnd ^ 1); + update |= SYS_UPDATEOSCFG; + break; + case IDM_SEEKSND: menu_setmotorflg(np2cfg.MOTOR ^ 1); update |= SYS_UPDATECFG; @@ -712,6 +764,7 @@ int main(int argc, char *argv[]) { menu_setf12key(np2oscfg.F12KEY); menu_setbeepvol(np2cfg.BEEP_VOL); menu_setsound(np2cfg.SOUND_SW); + menu_setjastsound(np2oscfg.jastsnd); menu_setmotorflg(np2cfg.MOTOR); menu_setextmem(np2cfg.EXTMEM); menu_setdispclk(np2oscfg.DISPCLK); @@ -737,10 +790,12 @@ int main(int argc, char *argv[]) { S98_init(); hid_init(); +#ifndef SUPPORT_WAVEMIX if (soundmng_initialize() == SUCCESS) { soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL); soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL); } +#endif #if defined(NP2GCC) mousemng_initialize(); @@ -827,13 +882,6 @@ int main(int argc, char *argv[]) { } } - GetWindowBounds(hWndMain, kWindowGlobalPortRgn, &bounds); - if ((np2oscfg.winx != bounds.left) || (np2oscfg.winy != bounds.top)) { - np2oscfg.winx = bounds.left; - np2oscfg.winy = bounds.top; - sysmng_update(SYS_UPDATEOSCFG); - } - np2running = FALSE; menu_setrecording(true); @@ -841,6 +889,13 @@ int main(int argc, char *argv[]) { toggleFullscreen(); } + GetWindowBounds(hWndMain, kWindowGlobalPortRgn, &bounds); + if ((np2oscfg.winx != bounds.left) || (np2oscfg.winy != bounds.top)) { + np2oscfg.winx = bounds.left; + np2oscfg.winy = bounds.top; + sysmng_update(SYS_UPDATEOSCFG); + } + pccore_cfgupdate(); #if defined(USE_RESUME) @@ -859,8 +914,9 @@ int main(int argc, char *argv[]) { #if defined(NP2GCC) mousemng_disable(MOUSEPROC_SYSTEM); #endif - +#ifndef SUPPORT_WAVEMIX soundmng_deinitialize(); +#endif scrnmng_destroy(); if (sys_updates & (SYS_UPDATECFG | SYS_UPDATEOSCFG)) { @@ -933,12 +989,13 @@ 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; break; case kEventMouseDown: - if (buttonKind == kEventMouseButtonSecondary | modif & controlKey) { + if (buttonKind == kEventMouseButtonSecondary || modif & cmdKey) { mousemng_buttonevent(MOUSEMNG_RIGHTDOWN); } else { @@ -947,7 +1004,7 @@ static pascal OSStatus np2appevent (Even result=noErr; break; case kEventMouseUp: - if (buttonKind == kEventMouseButtonSecondary | modif & controlKey) { + if (buttonKind == kEventMouseButtonSecondary || modif & cmdKey) { mousemng_buttonevent(MOUSEMNG_RIGHTUP); } else if (buttonKind == kEventMouseButtonTertiary) { @@ -967,6 +1024,22 @@ static pascal OSStatus np2appevent (Even } #endif 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)) { + keystat_senddata(0x71); + backup = modif; + } + result = noErr; + } + break; default: break; } @@ -988,7 +1061,6 @@ static pascal OSStatus np2windowevent(Ev eventClass = GetEventClass(event); whatHappened = GetEventKind(event); - static UInt32 backup = 0; switch (eventClass) { case kEventClassKeyboard: @@ -1019,19 +1091,6 @@ static pascal OSStatus np2windowevent(Ev } result = noErr; break; - case kEventRawKeyModifiersChanged: - 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)) { - keystat_senddata(0x71); - backup = modif; - } - result = noErr; - break; default: break; } @@ -1076,8 +1135,10 @@ static const EventTypeSpec appEventList[ {kEventClassMouse, kEventMouseDown}, #if defined(NP2GCC) {kEventClassMouse, kEventMouseMoved}, + {kEventClassMouse, kEventMouseDragged}, {kEventClassMouse, kEventMouseUp}, #endif + {kEventClassKeyboard, kEventRawKeyModifiersChanged}, }; static const EventTypeSpec windEventList[] = { @@ -1090,7 +1151,6 @@ static const EventTypeSpec windEventList {kEventClassKeyboard, kEventRawKeyDown}, {kEventClassKeyboard, kEventRawKeyUp}, {kEventClassKeyboard, kEventRawKeyRepeat}, - {kEventClassKeyboard, kEventRawKeyModifiersChanged}, }; @@ -1141,7 +1201,11 @@ static bool setupMainWindow(void) { setUpCarbonEvent(); if (backupwidth) scrnmng_setwidth(0, backupwidth); if (backupheight) scrnmng_setheight(0, backupheight); - SetWindowTitleWithCFString(hWndMain, CFStringCreateWithCString(NULL, np2oscfg.titles, kCFStringEncodingUTF8)); + CFStringRef title = CFStringCreateWithCString(NULL, np2oscfg.titles, kCFStringEncodingUTF8); + if (title) { + SetWindowTitleWithCFString(hWndMain, title); + CFRelease(title); + } ShowWindow(hWndMain); return(true); } @@ -1152,7 +1216,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)) { @@ -1160,8 +1224,12 @@ 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); DisableMenuItem(menu, IDM_ROLNORMAL);