Diff for /np2/macosx/np2.cpp between versions 1.34 and 1.56

version 1.34, 2003/11/11 16:33:50 version 1.56, 2004/03/15 05:06:01
Line 26 Line 26
 #include        "s98.h"  #include        "s98.h"
 #include        "diskdrv.h"  #include        "diskdrv.h"
 #include        "fddfile.h"  #include        "fddfile.h"
 #include        "statsave.h"  
 #include        "mousemng.h"  #include        "mousemng.h"
 #include        "configure.h"  #include        "configure.h"
 #include        "screenopt.h"  #include        "screenopt.h"
Line 39 Line 38
 #include        "np2opening.h"  #include        "np2opening.h"
 #include        "toolwin.h"  #include        "toolwin.h"
 #include        "aboutdlg.h"  #include        "aboutdlg.h"
   #include        "keystat.h"
   #include        "kdispwin.h"
   
 #include        <QuickTime/QuickTime.h>  
 #define USE_RESUME  #define USE_RESUME
 #define NP2OPENING  #define NP2OPENING
 // #define      OPENING_WAIT    1500  // #define      OPENING_WAIT    1500
   
   
                 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;                  WindowPtr       hWndMain;
                 BOOL            np2running;                  BOOL            np2running;
 static  UINT            framecnt = 0;  static  UINT            framecnt = 0;
 static  UINT            waitcnt = 0;  static  UINT            waitcnt = 0;
 static  UINT            framemax = 1;  static  UINT            framemax = 1;
         BYTE            scrnmode;          BYTE            scrnmode = 0;
   
   
 #define DRAG_THRESHOLD          5  #define DRAG_THRESHOLD          5
Line 93  pascal OSErr OpenAppleEventHandler(const Line 112  pascal OSErr OpenAppleEventHandler(const
         DescType        rtype;          DescType        rtype;
         AEKeyword       key;          AEKeyword       key;
         AEDescList      dlist;          AEDescList      dlist;
       OSErr               err = noErr;
                   
         if(!AEGetParamDesc(event,keyDirectObject,typeAEList,&dlist))    {          if(!AEGetParamDesc(event,keyDirectObject,typeAEList,&dlist))    {
                 AECountItems( &dlist,&ct );                  AECountItems( &dlist,&ct );
                 for( i=1;i<=ct;i++ )    {                  for( i=1;i<=ct;i++ )    {
             pp=&fsc;              pp=&fsc;
                         if (!AEGetNthPtr( &dlist,i,typeFSS,&key,&rtype,(Ptr)pp,(long)sizeof(FSSpec),&len))      {                          if (!AEGetNthPtr( &dlist,i,typeFSS,&key,&rtype,(Ptr)pp,(long)sizeof(FSSpec),&len))      {
                 setDropFile(fsc, i-1);                  err = setDropFile(fsc, i-1);
                         }                          }
                 }                  }
                 AEDisposeDesc( &dlist );                  AEDisposeDesc( &dlist );
         }          }
         return( 0 );          return(err);
 }  }
   
   
Line 135  static void MenuBarInit(void) { Line 155  static void MenuBarInit(void) {
         }          }
         InsertMenu(GetMenu(IDM_SASI1), -1);          InsertMenu(GetMenu(IDM_SASI1), -1);
         InsertMenu(GetMenu(IDM_SASI2), -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_KEYBOARD), -1);
         InsertMenu(GetMenu(IDM_SOUND), -1);          InsertMenu(GetMenu(IDM_SOUND), -1);
         InsertMenu(GetMenu(IDM_MEMORY), -1);          InsertMenu(GetMenu(IDM_MEMORY), -1);
     ChangeMenuAttributes(GetMenuRef(IDM_EDIT), kMenuAttrAutoDisable, 0);      ChangeMenuAttributes(GetMenuRef(IDM_EDIT), kMenuAttrAutoDisable, 0);
     DisableAllMenuItems(GetMenuHandle(IDM_EDIT));      DisableAllMenuItems(GetMenuHandle(IDM_EDIT));
     SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2OPEN, kMenuOptionModifier);      SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2OPEN, kMenuShiftModifier);
     SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2EJECT, kMenuOptionModifier);      SetMenuItemModifiers(GetMenuRef(IDM_FDD2), IDM_FDD2EJECT, kMenuShiftModifier);
     SetMenuItemModifiers(GetMenuRef(IDM_SASI2), IDM_SASI2OPEN, kMenuOptionModifier);      SetMenuItemModifiers(GetMenuRef(IDM_SASI2), IDM_SASI2OPEN, kMenuShiftModifier);
   #ifndef SUPPORT_KEYDISP
           DisableMenuItem(GetMenuRef(IDM_OTHER), IDM_KEYDISP);
   #endif
         DrawMenuBar();          DrawMenuBar();
 #else  #else
     OSStatus    err;      OSStatus    err;
Line 169  static void changescreen(BYTE mode) { Line 196  static void changescreen(BYTE mode) {
         }          }
         if (renewal) {          if (renewal) {
                 soundmng_stop();                  soundmng_stop();
                 mouse_running(MOUSE_STOP);  
                 scrnmng_destroy();                  scrnmng_destroy();
                 if (scrnmng_create(mode) == SUCCESS) {                  if (scrnmng_create(mode) == SUCCESS) {
                         scrnmode = mode;                          scrnmode = mode;
                 }                  }
                 scrndraw_redraw();                  scrndraw_redraw();
                 mouse_running(MOUSE_CONT);  
                 soundmng_play();                  soundmng_play();
         }          }
         else {          else {
Line 183  static void changescreen(BYTE mode) { Line 208  static void changescreen(BYTE mode) {
         }          }
 }  }
   
 static void HandleMenuChoice(long wParam) {  void HandleMenuChoice(long wParam) {
   
         UINT    update;          UINT    update;
   
Line 251  static void HandleMenuChoice(long wParam Line 276  static void HandleMenuChoice(long wParam
                         diskdrv_sethdd(1, NULL);                          diskdrv_sethdd(1, NULL);
                         break;                          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:                  case IDM_FULLSCREEN:
             toggleFullscreen();              toggleFullscreen();
             break;              break;
Line 317  static void HandleMenuChoice(long wParam Line 374  static void HandleMenuChoice(long wParam
                         break;                          break;
   
         case IDM_MOUSE:          case IDM_MOUSE:
             mouse_running(MOUSE_XOR);                          mousemng_toggle(MOUSEPROC_SYSTEM);
             menu_setmouse(np2oscfg.MOUSE_SW ^ 1);              menu_setmouse(np2oscfg.MOUSE_SW ^ 1);
             sysmng_update(SYS_UPDATECFG);              sysmng_update(SYS_UPDATECFG);
                         break;                          break;
Line 339  static void HandleMenuChoice(long wParam Line 396  static void HandleMenuChoice(long wParam
                 case IDM_KEY:                  case IDM_KEY:
                         menu_setkey(0);                          menu_setkey(0);
                         keystat_resetjoykey();                          keystat_resetjoykey();
                           update |= SYS_UPDATECFG;
                         break;                          break;
   
                 case IDM_JOY1:                  case IDM_JOY1:
                         menu_setkey(1);                          menu_setkey(1);
                         keystat_resetjoykey();                          keystat_resetjoykey();
                           update |= SYS_UPDATECFG;
                         break;                          break;
   
                 case IDM_JOY2:                  case IDM_JOY2:
                         menu_setkey(2);                          menu_setkey(2);
                         keystat_resetjoykey();                          keystat_resetjoykey();
                           update |= SYS_UPDATECFG;
                         break;                          break;
   
                 case IDM_MOUSEKEY:                  case IDM_MOUSEKEY:
                         menu_setkey(3);                          menu_setkey(3);
                         keystat_resetjoykey();                          keystat_resetjoykey();
                           update |= SYS_UPDATECFG;
                         break;                          break;
   
                 case IDM_XSHIFT:                  case IDM_XSHIFT:
                         menu_setxshift(np2cfg.XSHIFT ^ 1);                          menu_setxshift(np2cfg.XSHIFT ^ 1);
                         keystat_forcerelease(0x70);                          keystat_forcerelease(0x70);
                           update |= SYS_UPDATECFG;
                         break;                          break;
   
                 case IDM_XCTRL:                  case IDM_XCTRL:
                         menu_setxshift(np2cfg.XSHIFT ^ 2);                          menu_setxshift(np2cfg.XSHIFT ^ 2);
                         keystat_forcerelease(0x74);                          keystat_forcerelease(0x74);
                           update |= SYS_UPDATECFG;
                         break;                          break;
   
                 case IDM_XGRPH:                  case IDM_XGRPH:
                         menu_setxshift(np2cfg.XSHIFT ^ 4);                          menu_setxshift(np2cfg.XSHIFT ^ 4);
                         keystat_forcerelease(0x73);                          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;                          break;
   
                 case IDM_F12MOUSE:                  case IDM_F12MOUSE:
                         menu_setf12copy(0);                          menu_setf12key(0);
                         mackbd_resetf12();                          mackbd_resetf12();
                         update |= SYS_UPDATECFG;                          update |= SYS_UPDATEOSCFG;
                         break;                          break;
   
                 case IDM_F12COPY:                  case IDM_F12COPY:
                         menu_setf12copy(1);                          menu_setf12key(1);
                         mackbd_resetf12();                          mackbd_resetf12();
                         update |= SYS_UPDATECFG;                          update |= SYS_UPDATEOSCFG;
                         break;                          break;
   
                 case IDM_F12STOP:                  case IDM_F12COMMA:
                         menu_setf12copy(2);                          menu_setf12key(2);
                         mackbd_resetf12();                          mackbd_resetf12();
                         update |= SYS_UPDATECFG;                          update |= SYS_UPDATEOSCFG;
                         break;                          break;
   
                 case IDM_F12EQU:                  case IDM_F12XFER:
                         menu_setf12copy(3);                          menu_setf12key(3);
                         mackbd_resetf12();                          mackbd_resetf12();
                         update |= SYS_UPDATECFG;                          update |= SYS_UPDATEOSCFG;
                         break;                          break;
   
                 case IDM_F12COMMA:                  case IDM_F12USER:
                         menu_setf12copy(4);                          menu_setf12key(4);
                         mackbd_resetf12();                          mackbd_resetf12();
                         update |= SYS_UPDATECFG;                          update |= SYS_UPDATEOSCFG;
                         break;                          break;
   
                 case IDM_BEEPOFF:                  case IDM_BEEPOFF:
Line 475  static void HandleMenuChoice(long wParam Line 569  static void HandleMenuChoice(long wParam
                         update |= SYS_UPDATECFG;                          update |= SYS_UPDATECFG;
                         break;                          break;
   
                   case IDM_JASTSOUND:
                           menu_setjastsound(np2oscfg.jastsnd ^ 1);
                           update |= SYS_UPDATEOSCFG;
                           break;
   
                 case IDM_SEEKSND:                  case IDM_SEEKSND:
                         menu_setmotorflg(np2cfg.MOTOR ^ 1);                          menu_setmotorflg(np2cfg.MOTOR ^ 1);
                         update |= SYS_UPDATECFG;                          update |= SYS_UPDATECFG;
Line 532  static void HandleMenuChoice(long wParam Line 631  static void HandleMenuChoice(long wParam
             menu_setmsrapid(np2cfg.MOUSERAPID ^ 1);              menu_setmsrapid(np2cfg.MOUSERAPID ^ 1);
             update |= SYS_UPDATECFG;              update |= SYS_UPDATECFG;
             break;              break;
                           
         case IDM_RECORDING:          case IDM_RECORDING:
             menu_setrecording(false);              menu_setrecording(false);
             break;              break;
   
   #if defined(SUPPORT_KEYDISP)
                   case IDM_KEYDISP:
                           menu_setkeydisp(np2oscfg.keydisp ^ 1);
                           if (np2oscfg.keydisp) {
                                   kdispwin_create();
                           }
                           else {
                                   kdispwin_destroy();
                           }
                           break;
   #endif
   
                 case IDM_I286SAVE:                  case IDM_I286SAVE:
                         debugsub_status();                          debugsub_status();
Line 545  static void HandleMenuChoice(long wParam Line 656  static void HandleMenuChoice(long wParam
             {              {
                 ICInstance inst;                  ICInstance inst;
                 long start, fin;                  long start, fin;
                 const char      urlStr[] = "http://retropc.net/tk800/np2x/help.html";                  const char      urlStr[] = "http://retropc.net/tk800/np2x/help/help.html";
   
                 ICStart(&inst, 'SMil');                  ICStart(&inst, 'SMil');
                 start = 0;                  start = 0;
Line 565  static void HandleMenuChoice(long wParam Line 676  static void HandleMenuChoice(long wParam
 static void HandleMouseDown(EventRecord *pevent) {  static void HandleMouseDown(EventRecord *pevent) {
   
         WindowPtr       hWnd;          WindowPtr       hWnd;
     BYTE                ret;  
   
         if (FindWindow(pevent->where, &hWnd) == inMenuBar) {          if (FindWindow(pevent->where, &hWnd) == inMenuBar) {
         soundmng_stop();          soundmng_stop();
           mousemng_disable(MOUSEPROC_MACUI);
         HandleMenuChoice(MenuSelect(pevent->where));          HandleMenuChoice(MenuSelect(pevent->where));
           mousemng_enable(MOUSEPROC_MACUI);
     }      }
     else {      else {
         ret=mouse_btn(MOUSE_LEFTDOWN);          mousemng_buttonevent(MOUSEMNG_LEFTDOWN);
     }      }
 }  }
   
Line 582  static void HandleMouseDown(EventRecord  Line 694  static void HandleMouseDown(EventRecord 
 static void framereset(UINT waitcnt) {  static void framereset(UINT waitcnt) {
   
         framecnt = 0;          framecnt = 0;
           kdispwin_draw((BYTE)waitcnt);
         toolwin_draw((BYTE)waitcnt);          toolwin_draw((BYTE)waitcnt);
         if (np2oscfg.DISPCLK & 3) {          if (np2oscfg.DISPCLK & 3) {
                 if (sysmng_workclockrenewal()) {                  if (sysmng_workclockrenewal()) {
Line 596  static void processwait(UINT waitcnt) { Line 709  static void processwait(UINT waitcnt) {
                 timing_setcount(0);                  timing_setcount(0);
                 framereset(waitcnt);                  framereset(waitcnt);
         }          }
           soundmng_sync();
 }  }
   
 static void getstatfilename(char *path, const char *ext, int size) {  static void getstatfilename(char *path, const char *ext, int size) {
Line 630  static void flagload(const char *ext) { Line 744  static void flagload(const char *ext) {
     ret = IDOK;      ret = IDOK;
         getstatfilename(path, ext, sizeof(path));          getstatfilename(path, ext, sizeof(path));
         r = statsave_check(path, buf, sizeof(buf));          r = statsave_check(path, buf, sizeof(buf));
         if (r & (~NP2FLAG_DISKCHG)) {          if (r & (~STATFLAG_DISKCHG)) {
                 ResumeErrorDialogProc();                  ResumeErrorDialogProc();
                 ret = IDCANCEL;                  ret = IDCANCEL;
         }          }
         else if (r & NP2FLAG_DISKCHG) {          else if (r & STATFLAG_DISKCHG) {
                 ret = ResumeWarningDialogProc(buf);                  ret = ResumeWarningDialogProc(buf);
         }          }
         if (ret == IDOK) {          if (ret == IDOK) {
Line 649  int main(int argc, char *argv[]) { Line 763  int main(int argc, char *argv[]) {
   
     EventRef            theEvent;      EventRef            theEvent;
     EventTargetRef      theTarget;      EventTargetRef      theTarget;
       Rect                        bounds;
 #ifdef OPENING_WAIT  #ifdef OPENING_WAIT
         UINT32          tick;          UINT32          tick;
 #endif  #endif
Line 664  int main(int argc, char *argv[]) { Line 779  int main(int argc, char *argv[]) {
   
         TRACEINIT();          TRACEINIT();
           
     toolwin_readini();          keystat_initialize();
           kdispwin_initialize();
   
           toolwin_readini();
           kdispwin_readini();
     if (!(setupMainWindow())) {      if (!(setupMainWindow())) {
         return(0);          return(0);
     }      }
Line 682  int main(int argc, char *argv[]) { Line 801  int main(int argc, char *argv[]) {
         menu_setframe(np2oscfg.DRAW_SKIP);          menu_setframe(np2oscfg.DRAW_SKIP);
         menu_setkey(0);          menu_setkey(0);
         menu_setxshift(0);          menu_setxshift(0);
         menu_setf12copy(np2oscfg.F12COPY);          menu_setf11key(np2oscfg.F11KEY);
           menu_setf12key(np2oscfg.F12KEY);
         menu_setbeepvol(np2cfg.BEEP_VOL);          menu_setbeepvol(np2cfg.BEEP_VOL);
         menu_setsound(np2cfg.SOUND_SW);          menu_setsound(np2cfg.SOUND_SW);
           menu_setjastsound(np2oscfg.jastsnd);
         menu_setmotorflg(np2cfg.MOTOR);          menu_setmotorflg(np2cfg.MOTOR);
         menu_setextmem(np2cfg.EXTMEM);          menu_setextmem(np2cfg.EXTMEM);
         menu_setdispclk(np2oscfg.DISPCLK);          menu_setdispclk(np2oscfg.DISPCLK);
         menu_setbtnrapid(np2cfg.BTN_RAPID);          menu_setbtnrapid(np2cfg.BTN_RAPID);
         menu_setbtnmode(np2cfg.BTN_MODE);          menu_setbtnmode(np2cfg.BTN_MODE);
   #if defined(SUPPORT_KEYDISP)
           menu_setkeydisp(np2oscfg.keydisp);
   #endif
     if (np2oscfg.I286SAVE) {      if (np2oscfg.I286SAVE) {
         AppendMenuItemTextWithCFString(GetMenuRef(IDM_OTHER), CFCopyLocalizedString(CFSTR("i286 save"),"i286"), kMenuItemAttrIconDisabled, NULL,NULL);          AppendMenuItemTextWithCFString(GetMenuRef(IDM_OTHER), CFCopyLocalizedString(CFSTR("i286 save"),"i286"), kMenuItemAttrIconDisabled, NULL,NULL);
     }      }
   
         scrnmode = 0;          scrnmng_initialize();
         if (scrnmng_create(scrnmode) != SUCCESS) {          if (scrnmng_create(scrnmode) != SUCCESS) {
                 TRACETERM();                  TRACETERM();
                 macossub_term();                  macossub_term();
Line 710  int main(int argc, char *argv[]) { Line 834  int main(int argc, char *argv[]) {
         S98_init();          S98_init();
   
     hid_init();      hid_init();
   #ifndef SUPPORT_SWSEEKSND
         if (soundmng_initialize() == SUCCESS) {          if (soundmng_initialize() == SUCCESS) {
                 soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL);                  soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL);
                 soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL);                  soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL);
         }          }
   #endif
   
 #if defined(NP2GCC)  #if defined(NP2GCC)
           mousemng_initialize();
         if (np2oscfg.MOUSE_SW) {                                                                                // ver0.30          if (np2oscfg.MOUSE_SW) {                                                                                // ver0.30
                 mouse_running(MOUSE_ON);                  mousemng_enable(MOUSEPROC_SYSTEM);
         }          }
 #endif  #endif
   
 #ifdef OPENING_WAIT  #ifdef OPENING_WAIT
         while((GETTICK() - tick) < OPENING_WAIT);          while((GETTICK() - tick) < OPENING_WAIT);
 #endif  #endif
Line 730  int main(int argc, char *argv[]) { Line 858  int main(int argc, char *argv[]) {
         flagload(np2resume);          flagload(np2resume);
     }      }
 #endif  #endif
     if (np2oscfg.toolwin) {  #if defined(SUPPORT_KEYDISP)
         toolwin_open();          if (np2oscfg.keydisp) {
     }                  kdispwin_create();
           }
   #endif
   
     theTarget = GetEventDispatcherTarget();      theTarget = GetEventDispatcherTarget();
       
         np2running = TRUE;          np2running = TRUE;
         while(np2running) {          while(np2running) {
         if (ReceiveNextEvent(0, NULL,kEventDurationNoWait,true, &theEvent)== noErr)          if (ReceiveNextEvent(0, NULL,kEventDurationNoWait,true, &theEvent)== noErr)
Line 801  int main(int argc, char *argv[]) { Line 931  int main(int argc, char *argv[]) {
                         }                          }
                 }                  }
         }          }
       
         np2running = FALSE;          np2running = FALSE;
     menu_setrecording(true);      menu_setrecording(true);
   
Line 808  int main(int argc, char *argv[]) { Line 939  int main(int argc, char *argv[]) {
         toggleFullscreen();          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();          pccore_cfgupdate();
   
 #if defined(USE_RESUME)  #if defined(USE_RESUME)
Line 824  int main(int argc, char *argv[]) { Line 962  int main(int argc, char *argv[]) {
   
     hid_clear();      hid_clear();
 #if defined(NP2GCC)  #if defined(NP2GCC)
         mouse_running(MOUSE_OFF);          mousemng_disable(MOUSEPROC_SYSTEM);
 #endif  #endif
   #ifndef SUPPORT_SWSEEKSND
         soundmng_deinitialize();          soundmng_deinitialize();
   #endif
         scrnmng_destroy();          scrnmng_destroy();
   
           kdispwin_destroy();
         if (sys_updates & (SYS_UPDATECFG | SYS_UPDATEOSCFG)) {          if (sys_updates & (SYS_UPDATECFG | SYS_UPDATEOSCFG)) {
                 initsave();                                             // np2.cfg create                  initsave();                                             // np2.cfg create
             toolwin_writeini();                         // np2.cfg append              toolwin_writeini();                         // np2.cfg append
                   kdispwin_writeini();
         }          }
         TRACETERM();          TRACETERM();
         macossub_term();          macossub_term();
         dosio_term();          dosio_term();
   
         DisposeWindow(hWndMain);  
     toolwin_close();      toolwin_close();
           DisposeWindow(hWndMain);
   
         (void)argc;          (void)argc;
         (void)argv;          (void)argv;
Line 867  static pascal OSStatus np2appevent (Even Line 1008  static pascal OSStatus np2appevent (Even
     HIPoint             delta;      HIPoint             delta;
     EventMouseButton buttonKind;      EventMouseButton buttonKind;
     GetEventParameter (event, kEventParamMouseButton, typeMouseButton, NULL, sizeof(EventMouseButton), NULL, &buttonKind);      GetEventParameter (event, kEventParamMouseButton, typeMouseButton, NULL, sizeof(EventMouseButton), NULL, &buttonKind);
   
         BYTE ret;  
 #endif  #endif
                   
     switch (eventClass)      switch (eventClass)
Line 880  static pascal OSStatus np2appevent (Even Line 1019  static pascal OSStatus np2appevent (Even
                 if (cmd.commandID == kHICommandAppHelp) {                  if (cmd.commandID == kHICommandAppHelp) {
                     ICInstance inst;                      ICInstance inst;
                     long start, fin;                      long start, fin;
                     const char  urlStr[] = "http://retropc.net/tk800/np2x/help.html";                      const char  urlStr[] = "http://retropc.net/tk800/np2x/help/help.html";
   
                     ICStart(&inst, '????');                      ICStart(&inst, 'SMil');
                     start = 0;                      start = 0;
                     fin = strlen(urlStr);                      fin = strlen(urlStr);
                     ICLaunchURL(inst, "\p", urlStr, strlen(urlStr), &start, &fin);                      ICLaunchURL(inst, "\p", urlStr, strlen(urlStr), &start, &fin);
Line 902  static pascal OSStatus np2appevent (Even Line 1041  static pascal OSStatus np2appevent (Even
             switch (whatHappened)              switch (whatHappened)
             {              {
                 case kEventMouseMoved:                  case kEventMouseMoved:
                   case kEventMouseDragged:
                     GetEventParameter (event, kEventParamMouseDelta, typeHIPoint, NULL, sizeof(HIPoint), NULL, &delta);                      GetEventParameter (event, kEventParamMouseDelta, typeHIPoint, NULL, sizeof(HIPoint), NULL, &delta);
                     mouse_callback(delta);                      mousemng_callback(delta);
                     result = noErr;                      result = noErr;
                     break;                      break;
                 case kEventMouseDown:                  case kEventMouseDown:
                     if (buttonKind == kEventMouseButtonSecondary | modif & controlKey) {                      if (buttonKind == kEventMouseButtonSecondary || modif & cmdKey) {
                         ret=mouse_btn(MOUSE_RIGHTDOWN);                          mousemng_buttonevent(MOUSEMNG_RIGHTDOWN);
                     }                      }
                     else {                      else {
                         HandleMouseDown(&eve);                          HandleMouseDown(&eve);
Line 916  static pascal OSStatus np2appevent (Even Line 1056  static pascal OSStatus np2appevent (Even
                     result=noErr;                      result=noErr;
                     break;                      break;
                 case kEventMouseUp:                  case kEventMouseUp:
                     if (buttonKind == kEventMouseButtonSecondary | modif & controlKey) {                      if (buttonKind == kEventMouseButtonSecondary || modif & cmdKey) {
                         ret=mouse_btn(MOUSE_RIGHTUP);                          mousemng_buttonevent(MOUSEMNG_RIGHTUP);
                     }                      }
                     else if (buttonKind == kEventMouseButtonTertiary) {                      else if (buttonKind == kEventMouseButtonTertiary) {
                         mouse_running(MOUSE_XOR);                          mousemng_toggle(MOUSEPROC_SYSTEM);
                         menu_setmouse(np2oscfg.MOUSE_SW ^ 1);                          menu_setmouse(np2oscfg.MOUSE_SW ^ 1);
                         sysmng_update(SYS_UPDATECFG);                          sysmng_update(SYS_UPDATECFG);
                     }                      }
                     else {                      else {
                         ret=mouse_btn(MOUSE_LEFTUP);                          mousemng_buttonevent(MOUSEMNG_LEFTUP);
                     }                      }
                     result=noErr;                      result=noErr;
                     break;                          break;    
Line 936  static pascal OSStatus np2appevent (Even Line 1076  static pascal OSStatus np2appevent (Even
                 }                  }
 #endif  #endif
                 break;                  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:          default:
             break;               break; 
     }      }
Line 957  static pascal OSStatus np2windowevent(Ev Line 1113  static pascal OSStatus np2windowevent(Ev
     eventClass = GetEventClass(event);      eventClass = GetEventClass(event);
     whatHappened = GetEventKind(event);      whatHappened = GetEventKind(event);
                   
     static UInt32 backup = 0;  
     switch (eventClass)      switch (eventClass)
     {              {        
         case kEventClassKeyboard:          case kEventClassKeyboard:
Line 979  static pascal OSStatus np2windowevent(Ev Line 1134  static pascal OSStatus np2windowevent(Ev
                     if (modif & cmdKey) {                      if (modif & cmdKey) {
                         EventRecord     eve;                          EventRecord     eve;
                         ConvertEventRefToEventRecord( event,&eve );                          ConvertEventRefToEventRecord( event,&eve );
                           mousemng_disable(MOUSEPROC_MACUI);
                         HandleMenuChoice(MenuEvent(&eve));                          HandleMenuChoice(MenuEvent(&eve));
                           mousemng_enable(MOUSEPROC_MACUI);
                     }                      }
                     else {                      else {
                         mackbd_keydown(key);                          mackbd_keydown(key);
                     }                      }
                     result = noErr;                      result = noErr;
                     break;                      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:                   default: 
                     break;                                   break;             
             }              }
Line 1043  static const EventTypeSpec appEventList[ Line 1187  static const EventTypeSpec appEventList[
                                 {kEventClassMouse,              kEventMouseDown},                                  {kEventClassMouse,              kEventMouseDown},
 #if defined(NP2GCC)  #if defined(NP2GCC)
                                 {kEventClassMouse,              kEventMouseMoved},                                  {kEventClassMouse,              kEventMouseMoved},
                                   {kEventClassMouse,              kEventMouseDragged},
                                 {kEventClassMouse,              kEventMouseUp},                                  {kEventClassMouse,              kEventMouseUp},
 #endif  #endif
                                   {kEventClassKeyboard,   kEventRawKeyModifiersChanged},
                         };                          };
   
 static const EventTypeSpec windEventList[] = {  static const EventTypeSpec windEventList[] = {
Line 1057  static const EventTypeSpec windEventList Line 1203  static const EventTypeSpec windEventList
                                 {kEventClassKeyboard,   kEventRawKeyDown},                                  {kEventClassKeyboard,   kEventRawKeyDown},
                                 {kEventClassKeyboard,   kEventRawKeyUp},                                  {kEventClassKeyboard,   kEventRawKeyUp},
                                 {kEventClassKeyboard,   kEventRawKeyRepeat},                                  {kEventClassKeyboard,   kEventRawKeyRepeat},
                                 {kEventClassKeyboard,   kEventRawKeyModifiersChanged},  
                         };                          };
   
   
Line 1072  static void setUpCarbonEvent(void) { Line 1217  static void setUpCarbonEvent(void) {
                                                                 windEventList, 0, NULL);                                                                  windEventList, 0, NULL);
 }  }
   
   static short    backupwidth=0, backupheight=0;
   
 static bool setupMainWindow(void) {  static bool setupMainWindow(void) {
 #if defined(NP2GCC)  #if defined(NP2GCC)
     OSStatus    err;      OSStatus    err;
Line 1100  static bool setupMainWindow(void) { Line 1247  static bool setupMainWindow(void) {
         }          }
         SizeWindow(hWndMain, 640, 400, TRUE);          SizeWindow(hWndMain, 640, 400, TRUE);
 #endif  #endif
         scrnmng_initialize();      if (np2oscfg.winx != -1 && np2oscfg.winy != -1) {
           MoveWindow(hWndMain, np2oscfg.winx, np2oscfg.winy, false);
       }
     setUpCarbonEvent();      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);          ShowWindow(hWndMain);
     return(true);      return(true);
 }  }
Line 1109  static bool setupMainWindow(void) { Line 1265  static bool setupMainWindow(void) {
 static void toggleFullscreen(void) {  static void toggleFullscreen(void) {
     static Ptr  bkfullscreen;      static Ptr  bkfullscreen;
     static BYTE mouse = 0;      static BYTE mouse = 0;
       static bool toolwin = false;
       MenuRef     menu = GetMenuRef(IDM_SCREEN);
       Rect        bounds;
       short       w, h;
   
     soundmng_stop();      soundmng_stop();
     if (!scrnmode & SCRNMODE_FULLSCREEN) {      if (!(scrnmode & SCRNMODE_FULLSCREEN)) {
         RGBColor col = {0, 0, 0};          HandleMenuChoice(IDM_ROLNORMAL);
         short   w=640, h=480;          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);          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();          HideMenuBar();
         setUpCarbonEvent();          setUpCarbonEvent();
         if (!np2oscfg.MOUSE_SW) {          if (!np2oscfg.MOUSE_SW) {
             mouse = np2oscfg.MOUSE_SW;              mouse = np2oscfg.MOUSE_SW;
             mouse_running(MOUSE_ON);              mousemng_enable(MOUSEPROC_SYSTEM);
             menu_setmouse(1);              menu_setmouse(1);
         }          }
         changescreen(scrnmode | SCRNMODE_FULLSCREEN);          changescreen(scrnmode | SCRNMODE_FULLSCREEN);
Line 1131  static void toggleFullscreen(void) { Line 1302  static void toggleFullscreen(void) {
         setupMainWindow();          setupMainWindow();
         changescreen(scrnmode & (~SCRNMODE_FULLSCREEN));          changescreen(scrnmode & (~SCRNMODE_FULLSCREEN));
         if (!mouse) {          if (!mouse) {
             mouse_running(MOUSE_OFF);              mousemng_disable(MOUSEPROC_SYSTEM);
             menu_setmouse(0);              menu_setmouse(0);
         }          }
           EnableMenuItem(menu, IDM_ROLNORMAL);
           EnableMenuItem(menu, IDM_ROLLEFT);
           EnableMenuItem(menu, IDM_ROLRIGHT);
         ShowMenuBar();          ShowMenuBar();
           if (toolwin) {
               toolwin_open();
           }
     }      }
     CheckMenuItem(GetMenuHandle(IDM_SCREEN), LoWord(IDM_FULLSCREEN), scrnmode & SCRNMODE_FULLSCREEN);      CheckMenuItem(GetMenuHandle(IDM_SCREEN), LoWord(IDM_FULLSCREEN), scrnmode & SCRNMODE_FULLSCREEN);
     soundmng_play();      soundmng_play();
 }  }
   
 void recieveCommand(long param) {  
     HandleMenuChoice(param);  
 }  

Removed from v.1.34  
changed lines
  Added in v.1.56


RetroPC.NET-CVS <cvs@retropc.net>