--- np2/macosx/np2.cpp 2003/10/28 16:44:44 1.23 +++ np2/macosx/np2.cpp 2004/04/20 16:54:07 1.60 @@ -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" @@ -34,25 +33,45 @@ #include "macnewdisk.h" #include "fdefine.h" #include "hid.h" +#include "midiopt.h" +#include "macalert.h" +#include "np2opening.h" +#include "toolwin.h" +#include "aboutdlg.h" +#include "keystat.h" +#include "subwind.h" -#define USE_RESUME #define NP2OPENING - -#ifdef NP2OPENING -#include // #define OPENING_WAIT 1500 -#endif - - NP2OSCFG np2oscfg = {0, 2, 0, 0, 0, 0, 1, 0}; + NP2OSCFG np2oscfg = {"Neko Project IIx", //titles + -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 + 0, //jastsnd + 0, //I286SAVE +#ifdef SUPPORT_KEYDISP + 1, //keydisp +#endif + }; WindowPtr hWndMain; BOOL np2running; static UINT framecnt = 0; static UINT waitcnt = 0; static UINT framemax = 1; -static BYTE scrnmode; + BYTE scrnmode = 0; #define DRAG_THRESHOLD 5 @@ -92,27 +111,19 @@ pascal OSErr OpenAppleEventHandler(const DescType rtype; AEKeyword key; AEDescList dlist; + OSErr err = noErr; - if( ! AEGetParamDesc( event,keyDirectObject,typeAEList,&dlist ) ) { + if(!AEGetParamDesc(event,keyDirectObject,typeAEList,&dlist)) { AECountItems( &dlist,&ct ); for( i=1;i<=ct;i++ ) { pp=&fsc; - if( ! AEGetNthPtr( &dlist,i,typeFSS,&key,&rtype,(Ptr)pp,(long)sizeof(FSSpec),&len ) ) { - char fname[MAX_PATH]; - int ftype; - fsspec2path(&fsc, fname, MAX_PATH); - ftype = file_getftype(fname); - if ((ftype != FTYPE_D88) && (ftype != FTYPE_BETA)) { - diskdrv_sethdd(0, fname); - } - else { - diskdrv_setfdd(i-1, fname, 0); - } + if (!AEGetNthPtr( &dlist,i,typeFSS,&key,&rtype,(Ptr)pp,(long)sizeof(FSSpec),&len)) { + err = setDropFile(fsc, i-1); } } AEDisposeDesc( &dlist ); } - return( 0 ); + return(err); } @@ -130,22 +141,64 @@ 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); + ChangeMenuAttributes(GetMenuRef(IDM_EDIT), kMenuAttrAutoDisable, 0); + DisableAllMenuItems(GetMenuHandle(IDM_EDIT)); + 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 + DisableMenuItem(GetMenuRef(IDM_OTHER), IDM_SOFTKBD); +#endif + if (np2oscfg.I286SAVE) { + AppendMenuItemTextWithCFString(GetMenuRef(IDM_OTHER), CFCopyLocalizedString(CFSTR("i286 save"),"i286"), kMenuItemAttrIconDisabled, NULL,NULL); + } + + 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; @@ -172,13 +225,11 @@ static void changescreen(BYTE mode) { } if (renewal) { soundmng_stop(); - mouse_running(MOUSE_STOP); scrnmng_destroy(); if (scrnmng_create(mode) == SUCCESS) { scrnmode = mode; } scrndraw_redraw(); - mouse_running(MOUSE_CONT); soundmng_play(); } else { @@ -186,7 +237,7 @@ static void changescreen(BYTE mode) { } } -static void HandleMenuChoice(long wParam) { +void HandleMenuChoice(long wParam) { UINT update; @@ -198,8 +249,10 @@ static void HandleMenuChoice(long wParam break; case IDM_RESET: - pccore_cfgupdate(); - pccore_reset(); + if (ResetWarningDialogProc()) { + pccore_cfgupdate(); + pccore_reset(); + } break; case IDM_CONFIGURE: @@ -209,17 +262,13 @@ static void HandleMenuChoice(long wParam case IDM_NEWDISK: newdisk(); break; -#if 0 - case IDM_NEWHDD: - newhdddisk(); - break; -#endif + case IDM_FONT: dialog_font(); break; case IDM_EXIT: - np2running = FALSE; + taskmng_exit(); break; case IDM_FDD1OPEN: @@ -228,6 +277,7 @@ static void HandleMenuChoice(long wParam case IDM_FDD1EJECT: diskdrv_setfdd(0, NULL, 0); + toolwin_setfdd(0, NULL); break; case IDM_FDD2OPEN: @@ -236,6 +286,7 @@ static void HandleMenuChoice(long wParam case IDM_FDD2EJECT: diskdrv_setfdd(1, NULL, 0); + toolwin_setfdd(1, NULL); break; case IDM_SASI1OPEN: @@ -254,6 +305,40 @@ static void HandleMenuChoice(long wParam diskdrv_sethdd(1, NULL); break; +#if defined(SUPPORT_SCSI) + 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; +#endif + case IDM_FULLSCREEN: toggleFullscreen(); break; @@ -320,12 +405,15 @@ static void HandleMenuChoice(long wParam break; case IDM_MOUSE: - mouse_running(MOUSE_XOR); + mousemng_toggle(MOUSEPROC_SYSTEM); menu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); - toggleMenubar(); break; + case IDM_MIDIOPT: + initMidiOpt(); + break; + case IDM_MIDIPANIC: rs232c_midipanic(); mpu98ii_midipanic(); @@ -339,54 +427,103 @@ static void HandleMenuChoice(long wParam case IDM_KEY: menu_setkey(0); keystat_resetjoykey(); + update |= SYS_UPDATECFG; break; case IDM_JOY1: menu_setkey(1); keystat_resetjoykey(); + update |= SYS_UPDATECFG; break; case IDM_JOY2: menu_setkey(2); keystat_resetjoykey(); + update |= SYS_UPDATECFG; break; case IDM_MOUSEKEY: menu_setkey(3); keystat_resetjoykey(); + update |= SYS_UPDATECFG; break; case IDM_XSHIFT: menu_setxshift(np2cfg.XSHIFT ^ 1); keystat_forcerelease(0x70); + update |= SYS_UPDATECFG; break; case IDM_XCTRL: menu_setxshift(np2cfg.XSHIFT ^ 2); keystat_forcerelease(0x74); + update |= SYS_UPDATECFG; break; case IDM_XGRPH: menu_setxshift(np2cfg.XSHIFT ^ 4); keystat_forcerelease(0x73); + update |= SYS_UPDATECFG; + break; + + case IDM_F11KANA: + menu_setf11key(0); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F11STOP: + menu_setf11key(1); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F11EQU: + menu_setf11key(2); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F11NFER: + menu_setf11key(3); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F11USER: + menu_setf11key(4); + mackbd_resetf11(); + update |= SYS_UPDATEOSCFG; break; case IDM_F12MOUSE: - menu_setf12copy(0); - keystat_resetcopyhelp(); - update |= SYS_UPDATECFG; + menu_setf12key(0); + mackbd_resetf12(); + update |= SYS_UPDATEOSCFG; break; case IDM_F12COPY: - menu_setf12copy(1); - keystat_resetcopyhelp(); - update |= SYS_UPDATECFG; + menu_setf12key(1); + mackbd_resetf12(); + update |= SYS_UPDATEOSCFG; break; - case IDM_F12STOP: - menu_setf12copy(2); - keystat_resetcopyhelp(); - update |= SYS_UPDATECFG; + case IDM_F12COMMA: + menu_setf12key(2); + mackbd_resetf12(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F12XFER: + menu_setf12key(3); + mackbd_resetf12(); + update |= SYS_UPDATEOSCFG; + break; + + case IDM_F12USER: + menu_setf12key(4); + mackbd_resetf12(); + update |= SYS_UPDATEOSCFG; break; case IDM_BEEPOFF: @@ -458,6 +595,16 @@ static void HandleMenuChoice(long wParam update |= SYS_UPDATECFG; break; + case IDM_AMD98: + menu_setsound(0x80); + 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; @@ -487,11 +634,9 @@ static void HandleMenuChoice(long wParam dialog_writebmp(); break; -#if 0 case IDM_S98LOGGING: - menu_sets98logging(S98_logging()); + dialog_s98(); break; -#endif case IDM_DISPCLOCK: menu_setdispclk(np2oscfg.DISPCLK ^ 1); @@ -513,12 +658,54 @@ static void HandleMenuChoice(long wParam update |= SYS_UPDATECFG; break; + case IDM_MSRAPID: + 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(); break; - - case IDM_RECORDING: - menu_setrecording(false); + + case IDM_NP2HELP: + { + ICInstance inst; + long start, fin; + const char urlStr[] = "http://retropc.net/tk800/np2x/help/help.html"; + + ICStart(&inst, 'SMil'); + start = 0; + fin = strlen(urlStr); + ICLaunchURL(inst, "\p", urlStr, strlen(urlStr), &start, &fin); + ICStop(inst); + } break; default: @@ -532,28 +719,40 @@ static void HandleMouseDown(EventRecord WindowPtr hWnd; - soundmng_stop(); - switch(FindWindow(pevent->where, &hWnd)) { - case inMenuBar: - HandleMenuChoice(MenuSelect(pevent->where)); - break; - } + if (FindWindow(pevent->where, &hWnd) == inMenuBar) { + soundmng_stop(); + mousemng_disable(MOUSEPROC_MACUI); + HandleMenuChoice(MenuSelect(pevent->where)); + mousemng_enable(MOUSEPROC_MACUI); + } + else { + mousemng_buttonevent(MOUSEMNG_LEFTDOWN); + } } // ---- +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); + } + } +} + static void processwait(UINT waitcnt) { if (timing_getcount() >= waitcnt) { - framecnt = 0; timing_setcount(0); - if (np2oscfg.DISPCLK & 3) { - if (sysmng_workclockrenewal()) { - sysmng_updatecaption(3); - } - } + framereset(waitcnt); } + soundmng_sync(); } static void getstatfilename(char *path, const char *ext, int size) { @@ -583,80 +782,56 @@ static void flagload(const char *ext) { char path[MAX_PATH]; char buf[1024]; - int ret; + int ret, 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 & (~STATFLAG_DISKCHG)) { + ResumeErrorDialogProc(); + ret = IDCANCEL; + } + else if (r & STATFLAG_DISKCHG) { + ret = ResumeWarningDialogProc(buf); + } + if (ret == IDOK) { statsave_load(path); + toolwin_setfdd(0, fdd_diskname(0)); + toolwin_setfdd(1, fdd_diskname(1)); } + return; } -#ifdef NP2OPENING -static void openingNP2(void) { - Rect srt, bounds; - GrafPtr port; - CFURLRef openingURL; - char buffer[1024]; - FSRef fsr; - FSSpec fsc; - PicHandle pict; - GraphicsImportComponent gi; - - GetPort(&port); - SetPortWindowPort(hWndMain); - const RGBColor col = {0, 0, 0}; - SetRect(&bounds, 0, 0, 640, 400); - RGBBackColor(&col); - EraseRect(&bounds); - - openingURL=CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("nekop2"), CFSTR("bmp"), NULL); - if (openingURL) { - if (CFURLGetFSRef(openingURL, &fsr)) { - FSPathMakeRef((const UInt8*)buffer, &fsr, NULL); - FSGetCatalogInfo(&fsr, kFSCatInfoNone, NULL, NULL, &fsc, NULL); - if (!GetGraphicsImporterForFile(&fsc, &gi)) { - if (!GraphicsImportGetNaturalBounds(gi, &srt)) { - OffsetRect( &srt, -srt.left, -srt.top); - GraphicsImportSetBoundsRect(gi, &srt); - GraphicsImportGetAsPicture(gi, &pict); - OffsetRect(&srt, (640-srt.right)/2, (400-srt.bottom)/2); - DrawPicture(pict,&srt); - QDFlushPortBuffer(GetWindowPort(hWndMain), NULL); - KillPicture(pict); - } - CloseComponent(gi); - } - } - CFRelease(openingURL); - } - SetPort(port); -} -#endif - - int main(int argc, char *argv[]) { EventRef theEvent; EventTargetRef theTarget; + Rect bounds; #ifdef OPENING_WAIT UINT32 tick; #endif - + dosio_init(); file_setcd(target); InitToolBox(); macossub_init(); - MenuBarInit(); - initload(); + MenuBarInit(); + TRACEINIT(); + + keystat_initialize(); + kdispwin_initialize(); + skbdwin_readini(); + toolwin_readini(); + kdispwin_readini(); if (!(setupMainWindow())) { return(0); } + skbdwin_initialize(); #ifdef NP2OPENING openingNP2(); @@ -671,16 +846,24 @@ int main(int argc, char *argv[]) { menu_setframe(np2oscfg.DRAW_SKIP); menu_setkey(0); menu_setxshift(0); - menu_setf12copy(np2oscfg.F12COPY); + menu_setf11key(np2oscfg.F11KEY); + 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); menu_setbtnrapid(np2cfg.BTN_RAPID); menu_setbtnmode(np2cfg.BTN_MODE); +#if defined(SUPPORT_KEYDISP) + menu_setkeydisp(np2oscfg.keydisp); +#endif +#if defined(SUPPORT_SOFTKBD) + menu_setsoftwarekeyboard(np2oscfg.softkey); +#endif - scrnmode = 0; + scrnmng_initialize(); if (scrnmng_create(scrnmode) != SUCCESS) { TRACETERM(); macossub_term(); @@ -696,16 +879,20 @@ int main(int argc, char *argv[]) { S98_init(); hid_init(); +#ifndef SUPPORT_SWSEEKSND if (soundmng_initialize() == SUCCESS) { soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL); soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL); } +#endif #if defined(NP2GCC) + mousemng_initialize(); if (np2oscfg.MOUSE_SW) { // ver0.30 - mouse_running(MOUSE_ON); + mousemng_enable(MOUSEPROC_SYSTEM); } #endif + #ifdef OPENING_WAIT while((GETTICK() - tick) < OPENING_WAIT); #endif @@ -716,9 +903,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) @@ -774,7 +971,7 @@ int main(int argc, char *argv[]) { else { timing_setcount(cnt - framecnt); } - processwait(0); + framereset(0); } } else { @@ -784,6 +981,7 @@ int main(int argc, char *argv[]) { } } } + np2running = FALSE; menu_setrecording(true); @@ -791,6 +989,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) @@ -807,19 +1012,27 @@ int main(int argc, char *argv[]) { hid_clear(); #if defined(NP2GCC) - mouse_running(MOUSE_OFF); + mousemng_disable(MOUSEPROC_SYSTEM); #endif - +#ifndef SUPPORT_SWSEEKSND soundmng_deinitialize(); +#endif scrnmng_destroy(); + kdispwin_destroy(); + skbdwin_destroy(); if (sys_updates & (SYS_UPDATECFG | SYS_UPDATEOSCFG)) { - initsave(); + initsave(); // np2.cfg create + toolwin_writeini(); // np2.cfg append + kdispwin_writeini(); + skbdwin_writeini(); } + skbdwin_deinitialize(); TRACETERM(); macossub_term(); dosio_term(); + toolwin_close(); DisposeWindow(hWndMain); (void)argc; @@ -830,80 +1043,118 @@ int main(int argc, char *argv[]) { //以下、ごっそりIIxからマージ static pascal OSStatus np2appevent (EventHandlerCallRef myHandlerChain, EventRef event, void* userData) { - UInt32 whatHappened; - OSStatus result = eventNotHandledErr; + OSStatus result = eventNotHandledErr; long eventClass; - + UInt32 whatHappened; eventClass = GetEventClass(event); whatHappened = GetEventKind(event); - EventRecord eve; + EventRecord eve; ConvertEventRefToEventRecord( event,&eve ); - if (IsDialogEvent(&eve)) return result; - UInt32 modif; + UInt32 modif; GetEventParameter (event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modif); #if defined(NP2GCC) - HIPoint delta; + HIPoint delta; EventMouseButton buttonKind; GetEventParameter (event, kEventParamMouseButton, typeMouseButton, NULL, sizeof(EventMouseButton), NULL, &buttonKind); - - BYTE ret; #endif switch (eventClass) - { - case kEventClassAppleEvent: - if (whatHappened == kEventAppleEvent) { - AEProcessAppleEvent(&eve); - } - break; + { + case kEventClassCommand: + if (GetEventKind(event)==kEventCommandProcess) { + HICommand cmd; + GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &cmd); + if (cmd.commandID == kHICommandAppHelp) { + ICInstance inst; + long start, fin; + const char urlStr[] = "http://retropc.net/tk800/np2x/help/help.html"; + + ICStart(&inst, 'SMil'); + start = 0; + fin = strlen(urlStr); + ICLaunchURL(inst, "\p", urlStr, strlen(urlStr), &start, &fin); + ICStop(inst); + } + } + break; - case kEventClassMouse: + case kEventClassAppleEvent: + if (whatHappened == kEventAppleEvent) { + AEProcessAppleEvent(&eve); + } + break; + + case kEventClassMouse: #if defined(NP2GCC) - switch (whatHappened) - { - case kEventMouseMoved: - GetEventParameter (event, kEventParamMouseDelta, typeHIPoint, NULL, sizeof(HIPoint), NULL, &delta); - mouse_callback(delta); - result = noErr; - break; - case kEventMouseDown: - if (buttonKind == kEventMouseButtonSecondary | modif & controlKey) { - ret=mouse_btn(MOUSE_RIGHTDOWN); - } - else { - HandleMouseDown(&eve); - } - result=noErr; - break; - case kEventMouseUp: - if (buttonKind == kEventMouseButtonSecondary | modif & controlKey) { - ret=mouse_btn(MOUSE_RIGHTUP); - } - else if (buttonKind == kEventMouseButtonTertiary) { - mouse_running(MOUSE_XOR); - menu_setmouse(np2oscfg.MOUSE_SW ^ 1); - sysmng_update(SYS_UPDATECFG); - } - else { - ret=mouse_btn(MOUSE_LEFTUP); - } - result=noErr; - break; - } + 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 & cmdKey) { + mousemng_buttonevent(MOUSEMNG_RIGHTDOWN); + } + else { + HandleMouseDown(&eve); + } + result=noErr; + break; + case kEventMouseUp: + if (buttonKind == kEventMouseButtonSecondary || modif & cmdKey) { + mousemng_buttonevent(MOUSEMNG_RIGHTUP); + } + else if (buttonKind == kEventMouseButtonTertiary) { + mousemng_toggle(MOUSEPROC_SYSTEM); + menu_setmouse(np2oscfg.MOUSE_SW ^ 1); + sysmng_update(SYS_UPDATECFG); + } + else { + mousemng_buttonevent(MOUSEMNG_LEFTUP); + } + result=noErr; + break; + } #else - if (whatHappened == kEventMouseDown) { - HandleMouseDown(&eve); - } + if (whatHappened == kEventMouseDown) { + HandleMouseDown(&eve); + } #endif - break; - default: - break; - } + break; + case kEventClassKeyboard: + if (GetEventKind(event)==kEventRawKeyModifiersChanged) { + 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); + } + result = noErr; + } + break; + default: + break; + } (void)myHandlerChain; (void)userData; @@ -916,7 +1167,6 @@ static pascal OSStatus np2windowevent(Ev UInt32 whatHappened; OSStatus result = eventNotHandledErr; long eventClass; - static UInt32 backup = 0; GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL, sizeof(window), NULL, &window); @@ -924,67 +1174,67 @@ static pascal OSStatus np2windowevent(Ev whatHappened = GetEventKind(event); switch (eventClass) - { - case kEventClassWindow: - switch (whatHappened) - { - case kEventWindowClose: - np2running = FALSE; - result = noErr; - break; - case kEventWindowShowing: - scrndraw_redraw(); - break; - case kEventWindowActivated: - DisableAllMenuItems(GetMenuHandle(IDM_EDIT)); - break; - } - break; - case kEventClassKeyboard: - UInt32 key; - GetEventParameter (event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &key); - UInt32 modif; - GetEventParameter (event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modif); - switch (whatHappened) - { - case kEventRawKeyUp: - mackbd_f12up(key); - result = noErr; - break; - case kEventRawKeyRepeat: - mackbd_f12down(key); - result = noErr; - break; - case kEventRawKeyDown: - if (modif & cmdKey) { - EventRecord eve; - ConvertEventRefToEventRecord( event,&eve ); - HandleMenuChoice(MenuEvent(&eve)); - } - else { - mackbd_f12down(key); - } - 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; - } - default: - break; - } + { + case kEventClassKeyboard: + UInt32 key; + GetEventParameter (event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &key); + UInt32 modif; + GetEventParameter (event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modif); + switch (whatHappened) + { + case kEventRawKeyUp: + mackbd_keyup(key); + result = noErr; + break; + case kEventRawKeyRepeat: + mackbd_keydown(key); + result = noErr; + break; + case kEventRawKeyDown: + if (modif & cmdKey) { + EventRecord eve; + ConvertEventRefToEventRecord( event,&eve ); + mousemng_disable(MOUSEPROC_MACUI); + HandleMenuChoice(MenuEvent(&eve)); + mousemng_enable(MOUSEPROC_MACUI); + } + else { + mackbd_keydown(key); + } + result = noErr; + break; + default: + break; + } + break; + + case kEventClassWindow: + switch (whatHappened) + { + case kEventWindowClose: + taskmng_exit(); + result = noErr; + break; + case kEventWindowActivated: + DisableAllMenuItems(GetMenuHandle(IDM_EDIT)); + break; + case kEventWindowToolbarSwitchMode: + toolwin_open(); + break; + case kEventWindowDragStarted: + soundmng_stop(); + break; + case kEventWindowDragCompleted: + soundmng_play(); + break; + case kEventWindowShown: + scrndraw_redraw(); + break; + } + break; + default: + break; + } (void)myHandler; (void)userData; @@ -992,22 +1242,27 @@ static pascal OSStatus np2windowevent(Ev } static const EventTypeSpec appEventList[] = { + {kEventClassCommand, kEventCommandProcess }, {kEventClassAppleEvent, kEventAppleEvent}, {kEventClassMouse, kEventMouseDown}, #if defined(NP2GCC) {kEventClassMouse, kEventMouseMoved}, + {kEventClassMouse, kEventMouseDragged}, {kEventClassMouse, kEventMouseUp}, #endif + {kEventClassKeyboard, kEventRawKeyModifiersChanged}, }; static const EventTypeSpec windEventList[] = { {kEventClassWindow, kEventWindowClose}, - {kEventClassWindow, kEventWindowShowing}, {kEventClassWindow, kEventWindowActivated}, + {kEventClassWindow, kEventWindowToolbarSwitchMode}, + {kEventClassWindow, kEventWindowDragStarted}, + {kEventClassWindow, kEventWindowDragCompleted}, + {kEventClassWindow, kEventWindowShown}, {kEventClassKeyboard, kEventRawKeyDown}, {kEventClassKeyboard, kEventRawKeyUp}, {kEventClassKeyboard, kEventRawKeyRepeat}, - {kEventClassKeyboard, kEventRawKeyModifiersChanged}, }; @@ -1020,11 +1275,24 @@ static void setUpCarbonEvent(void) { InstallWindowEventHandler(hWndMain, NewEventHandlerUPP(np2windowevent), GetEventTypeCount(windEventList), windEventList, 0, NULL); - InstallStandardEventHandler(GetWindowEventTarget(hWndMain)); } -bool setupMainWindow(void) { -#if defined(NP2GCC) && 0 +static short backupwidth=0, backupheight=0; + +static bool setupMainWindow(void) { +#if defined(NP2GCC) + OSStatus err; + IBNibRef nibRef; + + err = CreateNibReference(CFSTR("np2"), &nibRef); + if (err ==noErr ) { + CreateWindowFromNib(nibRef, CFSTR("MainWindow"), &hWndMain); + DisposeNibReference ( nibRef); + } + else { + return(false); + } + #else Rect wRect; @@ -1039,8 +1307,17 @@ bool setupMainWindow(void) { } SizeWindow(hWndMain, 640, 400, TRUE); #endif - scrnmng_initialize(); + if (np2oscfg.winx != -1 && np2oscfg.winy != -1) { + MoveWindow(hWndMain, np2oscfg.winx, np2oscfg.winy, false); + } setUpCarbonEvent(); + if (backupwidth) scrnmng_setwidth(0, backupwidth); + if (backupheight) scrnmng_setheight(0, backupheight); + CFStringRef title = CFStringCreateWithCString(NULL, np2oscfg.titles, kCFStringEncodingUTF8); + if (title) { + SetWindowTitleWithCFString(hWndMain, title); + CFRelease(title); + } ShowWindow(hWndMain); return(true); } @@ -1048,18 +1325,33 @@ bool setupMainWindow(void) { static void toggleFullscreen(void) { static Ptr bkfullscreen; static BYTE mouse = 0; + static bool toolwin = false; + MenuRef menu = GetMenuRef(IDM_SCREEN); + Rect bounds; + short w, h; soundmng_stop(); - if (!scrnmode & SCRNMODE_FULLSCREEN) { - RGBColor col = {0, 0, 0}; - short w=640, h=480; + if (!(scrnmode & SCRNMODE_FULLSCREEN)) { + HandleMenuChoice(IDM_ROLNORMAL); + 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,&col,(fullScreenAllowEvents | fullScreenDontChangeMenuBar)); + BeginFullScreen(&bkfullscreen, 0, &w, &h, &hWndMain, NULL, fullScreenAllowEvents); + DisableMenuItem(menu, IDM_ROLNORMAL); + DisableMenuItem(menu, IDM_ROLLEFT); + DisableMenuItem(menu, IDM_ROLRIGHT); HideMenuBar(); setUpCarbonEvent(); if (!np2oscfg.MOUSE_SW) { mouse = np2oscfg.MOUSE_SW; - mouse_running(MOUSE_ON); + mousemng_enable(MOUSEPROC_SYSTEM); menu_setmouse(1); } changescreen(scrnmode | SCRNMODE_FULLSCREEN); @@ -1070,23 +1362,17 @@ static void toggleFullscreen(void) { setupMainWindow(); changescreen(scrnmode & (~SCRNMODE_FULLSCREEN)); if (!mouse) { - mouse_running(MOUSE_OFF); + mousemng_disable(MOUSEPROC_SYSTEM); menu_setmouse(0); } + EnableMenuItem(menu, IDM_ROLNORMAL); + EnableMenuItem(menu, IDM_ROLLEFT); + EnableMenuItem(menu, IDM_ROLRIGHT); ShowMenuBar(); + if (toolwin) { + toolwin_open(); + } } CheckMenuItem(GetMenuHandle(IDM_SCREEN), LoWord(IDM_FULLSCREEN), scrnmode & SCRNMODE_FULLSCREEN); soundmng_play(); } - -void toggleMenubar(void) { - if (scrnmode & SCRNMODE_FULLSCREEN) { - if (!np2oscfg.MOUSE_SW) { - ShowMenuBar(); - } - else { - HideMenuBar(); - } - } -} -