--- np2/macosx/np2.cpp 2003/10/17 07:17:20 1.4 +++ np2/macosx/np2.cpp 2003/10/22 19:57:39 1.11 @@ -27,11 +27,19 @@ #include "fddfile.h" #include "statsave.h" +#if defined(NP2GCC) +#include "mousemng.h" +#endif +#include "configure.h" #define USE_RESUME +#if defined(NP2GCC) + NP2OSCFG np2oscfg = {0, 2, 0, 0, 0, 0}; +#else NP2OSCFG np2oscfg = {0, 2, 0, 0, 0}; +#endif WindowPtr hWndMain; BOOL np2running; @@ -62,6 +70,8 @@ static const char np2resume[] = "sav"; #define AEProc(fn) NewAEEventHandlerProc(fn) #endif +static void setUpCarbonEvent(void); + #ifdef TARGET_API_MAC_CARBON static pascal OSErr handleQuitApp(const AppleEvent *event, AppleEvent *reply, long refcon) { @@ -94,7 +104,7 @@ static void InitToolBox(void) { } static void MenuBarInit(void) { - +#if 0 Handle hMenu; MenuHandle happlemenu; @@ -113,15 +123,20 @@ static void MenuBarInit(void) { InsertMenu(GetMenu(IDM_SOUND), -1); InsertMenu(GetMenu(IDM_MEMORY), -1); DrawMenuBar(); +#endif + OSStatus err; + IBNibRef nibRef; + err = CreateNibReference(CFSTR("np2"), &nibRef); + if (err!=noErr) return; + err = SetMenuBarFromNib(nibRef, CFSTR("MainMenu")); + DisposeNibReference(nibRef); } - static void changescreen(BYTE mode) { (void)mode; } - static void HandleMenuChoice(long wParam) { UINT update; @@ -137,6 +152,10 @@ static void HandleMenuChoice(long wParam pccore_cfgupdate(); pccore_reset(); break; + + case IDM_CONFIGURE: + initConfig(); + break; #if 0 case IDM_NEWFDD: @@ -241,6 +260,14 @@ 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); + break; +#endif + case IDM_KEY: menu_setkey(0); keystat_resetjoykey(); @@ -463,6 +490,14 @@ static void HandleMouseDown(EventRecord break; case inContent: +#if defined(NP2GCC) + if (controlKey & GetCurrentKeyModifiers() ) { + mouse_btn(MOUSE_RIGHTDOWN); + } + else { + mouse_btn(MOUSE_LEFTDOWN); + } +#endif break; case inGoAway: @@ -472,6 +507,7 @@ static void HandleMouseDown(EventRecord } } +#if 0 static void eventproc(EventRecord *event) { switch(event->what) { @@ -485,22 +521,31 @@ static void eventproc(EventRecord *event case keyDown: case autoKey: + mackbd_f12down(((event->message) & keyCodeMask) >> 8); if (event->modifiers & cmdKey) { - if (!mackbd_down(1, ((event->message) & keyCodeMask) >> 8)) { - HandleMenuChoice(MenuKey(event->message & charCodeMask)); - } - } - else { - mackbd_down(0, ((event->message) & keyCodeMask) >> 8); + HandleMenuChoice(MenuKey(event->message & charCodeMask)); } break; case keyUp: - mackbd_up(((event->message) & keyCodeMask) >> 8); + mackbd_f12up(((event->message) & keyCodeMask) >> 8); break; + +#if defined(NP2GCC) + case mouseUp: + if (controlKey & GetCurrentKeyModifiers()) { + mouse_btn(MOUSE_RIGHTUP); + } + else { + mouse_btn(MOUSE_LEFTUP); + } + break; +#endif } } +#endif +// ---- static void processwait(UINT waitcnt) { @@ -546,7 +591,11 @@ static void flagload(const char *ext) { int main(int argc, char *argv[]) { Rect wRect; +#if 0 EventRecord event; +#endif + EventRef theEvent; + EventTargetRef theTarget; dosio_init(); file_setcd(target); @@ -557,16 +606,20 @@ int main(int argc, char *argv[]) { initload(); + TRACEINIT(); + SetRect(&wRect, 100, 100, 100, 100); hWndMain = NewWindow(0, &wRect, "\pNeko Project II", FALSE, noGrowDocProc, (WindowPtr)-1, TRUE, 0); if (!hWndMain) { + TRACETERM(); macossub_term(); dosio_term(); return(0); } scrnmng_initialize(); SizeWindow(hWndMain, 640, 400, TRUE); + setUpCarbonEvent(); ShowWindow(hWndMain); menu_setrotate(0); @@ -586,6 +639,7 @@ int main(int argc, char *argv[]) { scrnmode = 0; if (scrnmng_create(scrnmode) != SUCCESS) { + TRACETERM(); macossub_term(); dosio_term(); DisposeWindow(hWndMain); @@ -593,9 +647,15 @@ int main(int argc, char *argv[]) { } sysmng_initialize(); + mackbd_initialize(); pccore_init(); S98_init(); +#if defined(NP2GCC) + if (np2oscfg.MOUSE_SW) { // ver0.30 + mouse_running(MOUSE_ON); + } +#endif scrndraw_redraw(); pccore_reset(); @@ -603,16 +663,31 @@ int main(int argc, char *argv[]) { flagload(np2resume); #endif +#if 0 SetEventMask(everyEvent); - +#endif + theTarget = GetEventDispatcherTarget(); + np2running = TRUE; while(np2running) { + if (ReceiveNextEvent(0, NULL,kEventDurationNoWait,true, &theEvent)== noErr) + { + SendEventToEventTarget (theEvent, theTarget); + ReleaseEvent(theEvent); + } +#if 0 if (WaitNextEvent(everyEvent, &event, 0, 0)) { eventproc(&event); } +#endif else { if (np2oscfg.NOWAIT) { +#if defined(NP2GCC) && 0 + mouse_callback(); +#endif +#if 1 mackbd_callback(); +#endif pccore_exec(framecnt == 0); if (np2oscfg.DRAW_SKIP) { // nowait frame skip framecnt++; @@ -629,7 +704,12 @@ int main(int argc, char *argv[]) { } else if (np2oscfg.DRAW_SKIP) { // frame skip if (framecnt < np2oscfg.DRAW_SKIP) { - mackbd_callback(); +#if defined(NP2GCC) && 0 + mouse_callback(); +#endif +#if 1 + mackbd_callback(); +#endif pccore_exec(framecnt == 0); framecnt++; } @@ -639,20 +719,34 @@ int main(int argc, char *argv[]) { } else { // auto skip if (!waitcnt) { - mackbd_callback(); + UINT cnt; +#if defined(NP2GCC) && 0 + mouse_callback(); +#endif +#if 1 + mackbd_callback(); +#endif pccore_exec(framecnt == 0); framecnt++; - if (timing_getcount() < framecnt) { + // テスト + cnt = timing_getcount(); + if (framecnt > cnt) { waitcnt = framecnt; if (framemax > 1) { framemax--; } } else if (framecnt >= framemax) { - waitcnt = framecnt; if (framemax < 12) { framemax++; } + if (cnt >= 12) { + timing_init(); + } + else { + timing_setcount(cnt - framecnt); + } + framecnt = 0; } } else { @@ -673,6 +767,10 @@ int main(int argc, char *argv[]) { pccore_term(); S98_trash(); +#if defined(NP2GCC) + mouse_running(MOUSE_OFF); +#endif + scrnmng_destroy(); if (sys_updates & (SYS_UPDATECFG | SYS_UPDATEOSCFG)) { @@ -689,3 +787,171 @@ int main(int argc, char *argv[]) { return(0); } +//以下、ごっそりIIxからマージ +static pascal OSStatus MyAppEventHandler (EventHandlerCallRef myHandlerChain, EventRef event, void* userData) +{ + UInt32 whatHappened; + OSStatus result = eventNotHandledErr; + + long eventClass; + + eventClass = GetEventClass(event); + whatHappened = GetEventKind(event); + + EventRecord eve; + ConvertEventRefToEventRecord( event,&eve ); + + if (IsDialogEvent(&eve)) return result; + + UInt32 modif; + EventMouseButton buttonKind; + GetEventParameter (event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modif); + GetEventParameter (event, kEventParamMouseButton, typeMouseButton, NULL, sizeof(EventMouseButton), NULL, &buttonKind); + BYTE ret; + + switch (eventClass) + { + case kEventClassAppleEvent: + if (whatHappened == kEventAppleEvent) { + AEProcessAppleEvent(&eve); + } + break; + case kEventClassMouse: + switch (whatHappened) + { + case kEventMouseMoved: +#if 0 + if (isFullScreen) + { + HIPoint delta; + Point pt; + GetEventParameter (event, kEventParamMouseDelta, typeHIPoint, NULL, sizeof(HIPoint), NULL, &delta); + pt.h=(short)delta.x; + pt.v=(short)delta.y; + mouse_callback(pt); + } + else { + mouse_callback(eve.where); + } +#endif + mouse_callback(); + 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 & cmdKey) { + ret=mouse_btn(MOUSE_RIGHTUP); + } + else { + ret=mouse_btn(MOUSE_LEFTUP); + } + result=noErr; + break; + } + } + break; + default: + break; + } + return result; +} + +static pascal OSStatus MyWindowEventHandler(EventHandlerCallRef myHandler, EventRef event, void* userData) +{ + WindowRef window; + UInt32 whatHappened; + OSStatus result = eventNotHandledErr; + long eventClass; + + GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL, + sizeof(window), NULL, &window); + eventClass = GetEventClass(event); + whatHappened = GetEventKind(event); + + switch (eventClass) + { + case kEventClassWindow: + if (whatHappened == kEventWindowClose) { + np2running = FALSE; + result = noErr; + } + 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: + //mackeyup((int)key); + mackbd_f12up(key); + result = noErr; + break; + case kEventRawKeyRepeat: + //mackeydown(0, (int)key); + mackbd_f12down(key); + result = noErr; + break; + case kEventRawKeyDown: + mackbd_f12down(key); + if (modif & cmdKey) { + //if (!mackeydown(1, (int)key)) { + char para; + GetEventParameter (event, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(char), NULL, ¶); + HandleMenuChoice(MenuKey(para)); + //} + } + else { + //mackeydown(0, (int)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) keystat_senddata(0x79); + else keystat_senddata(0x79 | 0x80); + result = noErr; + break; + default: + break; + } + default: + break; + } + + return result; +} + +static void setUpCarbonEvent(void) +{ + InstallStandardEventHandler(GetWindowEventTarget(hWndMain)); + EventTypeSpec appEventList[] ={ { kEventClassAppleEvent, kEventAppleEvent }, + { kEventClassMouse, kEventMouseDown}, + { kEventClassMouse, kEventMouseMoved}, + { kEventClassMouse, kEventMouseUp} + }; + EventTypeSpec windEventList[] ={ { kEventClassWindow, kEventWindowClose}, + { kEventClassKeyboard, kEventRawKeyDown}, + { kEventClassKeyboard, kEventRawKeyUp}, + { kEventClassKeyboard, kEventRawKeyRepeat}, + { kEventClassKeyboard, kEventRawKeyModifiersChanged} + }; + InstallApplicationEventHandler(NewEventHandlerUPP(MyAppEventHandler), 4, appEventList, 0, NULL); + InstallWindowEventHandler(hWndMain, NewEventHandlerUPP(MyWindowEventHandler), 5, windEventList, 0, NULL); + +}