Diff for /np2/win9x/np2.cpp between versions 1.33 and 1.62

version 1.33, 2003/12/25 03:02:40 version 1.62, 2005/03/20 23:48:02
Line 25 Line 25
 #include        "sstpmsg.h"  #include        "sstpmsg.h"
 #include        "dclock.h"  #include        "dclock.h"
 #include        "toolwin.h"  #include        "toolwin.h"
 #ifdef USE_ROMEO  
 #include        "juliet.h"  #include        "juliet.h"
 #endif  
 #include        "np2class.h"  #include        "np2class.h"
 #include        "dialog.h"  #include        "dialog.h"
 #include        "memory.h"  #include        "cpucore.h"
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "pc9861k.h"  #include        "pc9861k.h"
Line 43 Line 41
 #include        "diskdrv.h"  #include        "diskdrv.h"
 #include        "fddfile.h"  #include        "fddfile.h"
 #include        "timing.h"  #include        "timing.h"
 #include        "statsave.h"  #include        "keystat.h"
 #include        "debugsub.h"  #include        "debugsub.h"
 #include        "keydisp.h"  #include        "subwind.h"
 #include        "kdispwin.h"  
 #include        "viewer.h"  #include        "viewer.h"
   
   
Line 54 Line 51
 #define         OPENING_WAIT            1500  #define         OPENING_WAIT            1500
 #endif  #endif
   
 #define STATSAVEMAX             10  static  TCHAR           szClassName[] = _T("NP2-MainWindow");
   
 static  char            szClassName[] = "NP2-MainWindow";  
                 HWND            hWndMain;                  HWND            hWndMain;
                 HINSTANCE       hInst;                  HINSTANCE       hInst;
                 HINSTANCE       hPrev;                  HINSTANCE       hPrev;
                 int                     mmxflag;                  int                     mmxflag;
                 BYTE            np2break = 0;                                                                   // ver0.30                  UINT8           np2break = 0;                                                                   // ver0.30
                 BOOL            winui_en;                  BOOL            winui_en;
   
                 NP2OSCFG        np2oscfg = {                  NP2OSCFG        np2oscfg = {
                                                 "Neko Project II", "NP2",  #if !defined(SUPPORT_PC9821)
                                                 CW_USEDEFAULT, CW_USEDEFAULT, 1, 1, 0, 1, 0, 2,                                                  OEMTEXT("Neko Project II"),
   #else
                                                   OEMTEXT("Neko Project 21"),
   #endif
                                                   OEMTEXT("NP2"),
                                                   CW_USEDEFAULT, CW_USEDEFAULT, 1, 1, 0, 1, 0, 0,
                                                 0, 0, KEY_UNKNOWN, 0,                                                  0, 0, KEY_UNKNOWN, 0,
                                                 0, 0, 0, {1, 2, 2, 1},                                                  0, 0, 0, {1, 2, 2, 1},
                                                 {5, 0, 0x3e, 19200, "", "", "", ""},            // ver0.34                                                  {5, 0, 0x3e, 19200,
                                                 {0, 0, 0x3e, 19200, "", "", "", ""},            // ver0.34                                                   OEMTEXT(""), OEMTEXT(""), OEMTEXT(""), OEMTEXT("")},
                                                 {0, 0, 0x3e, 19200, "", "", "", ""},            // ver0.34                                                  {0, 0, 0x3e, 19200,
                                                 {0, 0, 0x3e, 19200, "", "", "", ""},            // ver0.34                                                   OEMTEXT(""), OEMTEXT(""), OEMTEXT(""), OEMTEXT("")},
                                                   {0, 0, 0x3e, 19200,
                                                    OEMTEXT(""), OEMTEXT(""), OEMTEXT(""), OEMTEXT("")},
                                                   {0, 0, 0x3e, 19200,
                                                    OEMTEXT(""), OEMTEXT(""), OEMTEXT(""), OEMTEXT("")},
                                                 0xffffff, 0xffbf6a, 0, 0,                                                  0xffffff, 0xffbf6a, 0, 0,
                                                 0, 1, 0, 9801, 0, 0, 0, 0, 0, 0, 0, 0, 0};      // ver0.73                                                  0, 1, 0, 9801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   
                 char            fddfolder[MAX_PATH];                  OEMCHAR         fddfolder[MAX_PATH];
                 char            hddfolder[MAX_PATH];                  OEMCHAR         hddfolder[MAX_PATH];
                 char            bmpfilefolder[MAX_PATH];                  OEMCHAR         bmpfilefolder[MAX_PATH];
                 char            modulefile[MAX_PATH];                  OEMCHAR         modulefile[MAX_PATH];
   
 static  UINT            framecnt = 0;  static  UINT            framecnt = 0;
 static  UINT            waitcnt = 0;  static  UINT            waitcnt = 0;
 static  UINT            framemax = 1;  static  UINT            framemax = 1;
 static  BYTE            np2stopemulate = 0;  static  UINT8           np2stopemulate = 0;
 static  int                     np2opening = 1;  static  int                     np2opening = 1;
 static  int                     np2quitmsg = 0;  static  int                     np2quitmsg = 0;
 static  HMENU           hStat = NULL;  static  HMENU           hStat = NULL;
 static  BYTE            scrnmode;  static  UINT8           scrnmode;
 static  WINLOCEX        smwlex;  static  WINLOCEX        smwlex;
   
 static const char np2help[] = "np2.chm";  static const OEMCHAR np2help[] = OEMTEXT("np2.chm");
 static const char np2flagext[] = "S%02d";  static const OEMCHAR np2flagext[] = OEMTEXT("S%02d");
   
   
 static void winuienter(void) {  static void winuienter(void) {
Line 111  static void winuileave(void) { Line 115  static void winuileave(void) {
   
 WINLOCEX np2_winlocexallwin(HWND base) {  WINLOCEX np2_winlocexallwin(HWND base) {
   
         HWND    list[3];  
         UINT    i;          UINT    i;
           UINT    cnt;
           HWND    list[5];
   
         list[0] = hWndMain;          cnt = 0;
         list[1] = toolwin_gethwnd();          list[cnt++] = hWndMain;
         list[2] = kdispwin_gethwnd();          list[cnt++] = toolwin_gethwnd();
         for (i=0; i<3; i++) {          list[cnt++] = kdispwin_gethwnd();
           list[cnt++] = skbdwin_gethwnd();
           list[cnt++] = mdbgwin_gethwnd();
           for (i=0; i<cnt; i++) {
                 if (list[i] == base) {                  if (list[i] == base) {
                         list[i] = NULL;                          list[i] = NULL;
                 }                  }
Line 125  WINLOCEX np2_winlocexallwin(HWND base) { Line 133  WINLOCEX np2_winlocexallwin(HWND base) {
         if (base != hWndMain) {         // hWndMainのみ全体移動          if (base != hWndMain) {         // hWndMainのみ全体移動
                 base = NULL;                  base = NULL;
         }          }
         return(winlocex_create(base, list, 3));          return(winlocex_create(base, list, cnt));
 }  }
   
 static void changescreen(BYTE newmode) {  static void changescreen(UINT8 newmode) {
   
         BYTE            change;          UINT8           change;
         BYTE            renewal;          UINT8           renewal;
         WINLOCEX        wlex;          WINLOCEX        wlex;
   
         change = scrnmode ^ newmode;          change = scrnmode ^ newmode;
Line 147  static void changescreen(BYTE newmode) { Line 155  static void changescreen(BYTE newmode) {
                 if (renewal & SCRNMODE_FULLSCREEN) {                  if (renewal & SCRNMODE_FULLSCREEN) {
                         toolwin_destroy();                          toolwin_destroy();
                         kdispwin_destroy();                          kdispwin_destroy();
                           skbdwin_destroy();
                           mdbgwin_destroy();
                 }                  }
                 else if (renewal & SCRNMODE_ROTATEMASK) {                  else if (renewal & SCRNMODE_ROTATEMASK) {
                         wlex = np2_winlocexallwin(hWndMain);                          wlex = np2_winlocexallwin(hWndMain);
Line 208  static void wincentering(HWND hWnd) { Line 218  static void wincentering(HWND hWnd) {
         MoveWindow(hWndMain, np2oscfg.winx, np2oscfg.winy, width, height, TRUE);          MoveWindow(hWndMain, np2oscfg.winx, np2oscfg.winy, width, height, TRUE);
 }  }
   
 void np2active_renewal(void) {                                                                  // ver0.30  void np2active_renewal(void) {                                                                          // ver0.30
   
         if (np2break & (~NP2BREAK_MAIN)) {          if (np2break & (~NP2BREAK_MAIN)) {
                 np2stopemulate = 2;                  np2stopemulate = 2;
Line 234  void np2active_renewal(void) {         / Line 244  void np2active_renewal(void) {         /
         }          }
 }  }
   
 static void getstatfilename(char *path, const char *ext, int size) {  
   // ---- resume and statsave
   
   #if defined(SUPPORT_RESUME) || defined(SUPPORT_STATSAVE)
   static void getstatfilename(OEMCHAR *path, const OEMCHAR *ext, int size) {
   
         file_cpyname(path, modulefile, size);          file_cpyname(path, modulefile, size);
         file_cutext(path);          file_cutext(path);
Line 242  static void getstatfilename(char *path,  Line 256  static void getstatfilename(char *path, 
         file_catname(path, ext, size);          file_catname(path, ext, size);
 }  }
   
 static int flagsave(const char *ext) {  static int flagsave(const OEMCHAR *ext) {
   
         int             ret;          int             ret;
         char    path[MAX_PATH];          OEMCHAR path[MAX_PATH];
   
         getstatfilename(path, ext, sizeof(path));          getstatfilename(path, ext, NELEMENTS(path));
         soundmng_stop();          soundmng_stop();
         ret = statsave_save(path);          ret = statsave_save(path);
         if (ret) {          if (ret) {
Line 257  static int flagsave(const char *ext) { Line 271  static int flagsave(const char *ext) {
         return(ret);          return(ret);
 }  }
   
 static void flagdelete(const char *ext) {  static void flagdelete(const OEMCHAR *ext) {
   
         char    path[MAX_PATH];          OEMCHAR path[MAX_PATH];
   
         getstatfilename(path, ext, sizeof(path));          getstatfilename(path, ext, NELEMENTS(path));
         file_delete(path);          file_delete(path);
 }  }
   
 static int flagload(const char *ext, const char *title, BOOL force) {  static int flagload(const OEMCHAR *ext, const OEMCHAR *title, BOOL force) {
   
         int             ret;          int             ret;
         int             id;          int             id;
         char    path[MAX_PATH];          OEMCHAR path[MAX_PATH];
         char    buf[1024];          OEMCHAR buf[1024];
   
         getstatfilename(path, ext, sizeof(path));          getstatfilename(path, ext, NELEMENTS(path));
         winuienter();          winuienter();
         id = IDYES;          id = IDYES;
         ret = statsave_check(path, buf, sizeof(buf));          ret = statsave_check(path, buf, NELEMENTS(buf));
         if (ret & (~NP2FLAG_DISKCHG)) {          if (ret & (~STATFLAG_DISKCHG)) {
                 MessageBox(hWndMain, "Couldn't restart", title, MB_OK | MB_ICONSTOP);                  MessageBox(hWndMain, _T("Couldn't restart"), title,
                                                                                   MB_OK | MB_ICONSTOP);
                 id = IDNO;                  id = IDNO;
         }          }
         else if ((!force) && (ret & NP2FLAG_DISKCHG)) {          else if ((!force) && (ret & STATFLAG_DISKCHG)) {
                 char buf2[1024 + 256];                  OEMCHAR buf2[1024 + 256];
                 wsprintf(buf2, "Conflict!\n\n%s\nContinue?", buf);                  OEMSPRINTF(buf2, OEMTEXT("Conflict!\n\n%s\nContinue?"), buf);
                 id = MessageBox(hWndMain, buf2, title,                  id = MessageBox(hWndMain, buf2, title,
                                                                                 MB_YESNOCANCEL | MB_ICONQUESTION);                                                                                  MB_YESNOCANCEL | MB_ICONQUESTION);
         }          }
Line 296  static int flagload(const char *ext, con Line 311  static int flagload(const char *ext, con
         winuileave();          winuileave();
         return(id);          return(id);
 }  }
   #endif
   
   
 // ---- proc  // ---- proc
Line 319  static void np2popup(HWND hWnd, LPARAM l Line 335  static void np2popup(HWND hWnd, LPARAM l
         DestroyMenu(hMenu);          DestroyMenu(hMenu);
 }  }
   
   static void np2cmd(HWND hWnd, UINT16 cmd) {
   
           UINT    update;
           BOOL    b;
   
           update = 0;
           switch(cmd) {
                   case IDM_RESET:
                           b = FALSE;
                           if (!np2oscfg.comfirm) {
                                   b = TRUE;
                           }
                           else if (sstpconfirm_reset()) {
                                   winuienter();
                                   if (MessageBox(hWnd, OEMTEXT("Sure?"), OEMTEXT("Reset"),
                                                                           MB_ICONQUESTION | MB_YESNO) == IDYES) {
                                           b = TRUE;
                                   }
                                   winuileave();
                           }
                           if (b) {
                                   sstpmsg_reset();
                                   juliet_YMF288Reset();
                                   pccore_cfgupdate();
                                   pccore_reset();
                           }
                           break;
   
                   case IDM_CONFIG:
                           winuienter();
                           sstpmsg_config();
                           DialogBox(hInst, MAKEINTRESOURCE(IDD_CONFIG),
                                                                           hWnd, (DLGPROC)CfgDialogProc);
                           if (!scrnmng_isfullscreen()) {
                                   UINT8 thick;
                                   thick = (GetWindowLong(hWnd, GWL_STYLE) & WS_THICKFRAME)?1:0;
                                   if (thick != np2oscfg.thickframe) {
                                           WINLOCEX wlex;
                                           wlex = np2_winlocexallwin(hWnd);
                                           winlocex_setholdwnd(wlex, hWnd);
                                           np2class_frametype(hWnd, np2oscfg.thickframe);
                                           winlocex_move(wlex);
                                           winlocex_destroy(wlex);
                                   }
                           }
                           winuileave();
                           break;
   
                   case IDM_NEWDISK:
                           winuienter();
                           dialog_newdisk(hWnd);
                           winuileave();
                           break;
   
                   case IDM_CHANGEFONT:
                           winuienter();
                           dialog_font(hWnd);
                           winuileave();
                           break;
   
                   case IDM_EXIT:
                           SendMessage(hWnd, WM_CLOSE, 0, 0L);
                           break;
   
                   case IDM_FDD1OPEN:
                           winuienter();
                           dialog_changefdd(hWnd, 0);
                           winuileave();
                           break;
   
                   case IDM_FDD1EJECT:
                           diskdrv_setfdd(0, NULL, 0);
                           toolwin_setfdd(0, NULL);
                           break;
   
                   case IDM_FDD2OPEN:
                           winuienter();
                           dialog_changefdd(hWnd, 1);
                           winuileave();
                           break;
   
                   case IDM_FDD2EJECT:
                           diskdrv_setfdd(1, NULL, 0);
                           toolwin_setfdd(1, NULL);
                           break;
   
                   case IDM_FDD3OPEN:
                           winuienter();
                           dialog_changefdd(hWnd, 2);
                           winuileave();
                           break;
   
                   case IDM_FDD3EJECT:
                           diskdrv_setfdd(2, NULL, 0);
                           toolwin_setfdd(2, NULL);
                           break;
   
                   case IDM_FDD4OPEN:
                           winuienter();
                           dialog_changefdd(hWnd, 3);
                           winuileave();
                           break;
   
                   case IDM_FDD4EJECT:
                           diskdrv_setfdd(3, NULL, 0);
                           toolwin_setfdd(3, NULL);
                           break;
   
                   case IDM_SASI1OPEN:
                           winuienter();
                           dialog_changehdd(hWnd, 0x00);
                           winuileave();
                           break;
   
                   case IDM_SASI1EJECT:
                           diskdrv_sethdd(0x00, NULL);
                           break;
   
                   case IDM_SASI2OPEN:
                           winuienter();
                           dialog_changehdd(hWnd, 0x01);
                           winuileave();
                           break;
   
                   case IDM_SASI2EJECT:
                           diskdrv_sethdd(0x01, NULL);
                           break;
   #if defined(SUPPORT_SCSI)
                   case IDM_SCSI0OPEN:
                           winuienter();
                           dialog_changehdd(hWnd, 0x20);
                           winuileave();
                           break;
   
                   case IDM_SCSI0EJECT:
                           diskdrv_sethdd(0x20, NULL);
                           break;
   
                   case IDM_SCSI1OPEN:
                           winuienter();
                           dialog_changehdd(hWnd, 0x21);
                           winuileave();
                           break;
   
                   case IDM_SCSI1EJECT:
                           diskdrv_sethdd(0x21, NULL);
                           break;
   
                   case IDM_SCSI2OPEN:
                           winuienter();
                           dialog_changehdd(hWnd, 0x22);
                           winuileave();
                           break;
   
                   case IDM_SCSI2EJECT:
                           diskdrv_sethdd(0x22, NULL);
                           break;
   
                   case IDM_SCSI3OPEN:
                           winuienter();
                           dialog_changehdd(hWnd, 0x23);
                           winuileave();
                           break;
   
                   case IDM_SCSI3EJECT:
                           diskdrv_sethdd(0x23, NULL);
                           break;
   #endif
                   case IDM_WINDOW:
                           changescreen(scrnmode & (~SCRNMODE_FULLSCREEN));
                           break;
   
                   case IDM_FULLSCREEN:
                           changescreen(scrnmode | SCRNMODE_FULLSCREEN);
                           break;
   
                   case IDM_ROLNORMAL:
                           xmenu_setroltate(0);
                           changescreen(scrnmode & (~SCRNMODE_ROTATEMASK));
                           break;
   
                   case IDM_ROLLEFT:
                           xmenu_setroltate(1);
                           changescreen((scrnmode & (~SCRNMODE_ROTATEMASK)) |
                                                                                                                   SCRNMODE_ROTATELEFT);
                           break;
   
                   case IDM_ROLRIGHT:
                           xmenu_setroltate(2);
                           changescreen((scrnmode & (~SCRNMODE_ROTATEMASK)) |
                                                                                                                   SCRNMODE_ROTATERIGHT);
                           break;
   
                   case IDM_DISPSYNC:
                           xmenu_setdispmode(np2cfg.DISPSYNC ^ 1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_RASTER:
                           xmenu_setraster(np2cfg.RASTER ^ 1);
                           if (np2cfg.RASTER) {
                                   changescreen(scrnmode | SCRNMODE_HIGHCOLOR);
                           }
                           else {
                                   changescreen(scrnmode & (~SCRNMODE_HIGHCOLOR));
                           }
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_NOWAIT:
                           xmenu_setwaitflg(np2oscfg.NOWAIT ^ 1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_AUTOFPS:
                           xmenu_setframe(0);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_60FPS:
                           xmenu_setframe(1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_30FPS:
                           xmenu_setframe(2);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_20FPS:
                           xmenu_setframe(3);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_15FPS:
                           xmenu_setframe(4);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_SCREENOPT:
                           winuienter();
                           dialog_scropt(hWnd);
                           winuileave();
                           break;
   
                   case IDM_KEY:
                           xmenu_setkey(0);
                           keystat_resetjoykey();
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_JOY1:
                           xmenu_setkey(1);
                           keystat_resetjoykey();
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_JOY2:
                           xmenu_setkey(2);
                           keystat_resetjoykey();
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_XSHIFT:
                           xmenu_setxshift(np2cfg.XSHIFT ^ 1);
                           keystat_forcerelease(0x70);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_XCTRL:
                           xmenu_setxshift(np2cfg.XSHIFT ^ 2);
                           keystat_forcerelease(0x74);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_XGRPH:
                           xmenu_setxshift(np2cfg.XSHIFT ^ 4);
                           keystat_forcerelease(0x73);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_F12MOUSE:
                           xmenu_setf12copy(0);
                           winkbd_resetf12();
                           winkbd_setf12(0);
                           update |= SYS_UPDATEOSCFG;
                           break;
   
                   case IDM_F12COPY:
                           xmenu_setf12copy(1);
                           winkbd_resetf12();
                           winkbd_setf12(1);
                           update |= SYS_UPDATEOSCFG;
                           break;
   
                   case IDM_F12STOP:
                           xmenu_setf12copy(2);
                           winkbd_resetf12();
                           winkbd_setf12(2);
                           update |= SYS_UPDATEOSCFG;
                           break;
   
                   case IDM_F12EQU:
                           xmenu_setf12copy(3);
                           winkbd_resetf12();
                           winkbd_setf12(3);
                           update |= SYS_UPDATEOSCFG;
                           break;
   
                   case IDM_F12COMMA:
                           xmenu_setf12copy(4);
                           winkbd_resetf12();
                           winkbd_setf12(4);
                           update |= SYS_UPDATEOSCFG;
                           break;
   
                   case IDM_USERKEY1:
                           xmenu_setf12copy(5);
                           winkbd_resetf12();
                           winkbd_setf12(5);
                           update |= SYS_UPDATEOSCFG;
                           break;
   
                   case IDM_USERKEY2:
                           xmenu_setf12copy(6);
                           winkbd_resetf12();
                           winkbd_setf12(6);
                           update |= SYS_UPDATEOSCFG;
                           break;
   
                   case IDM_BEEPOFF:
                           xmenu_setbeepvol(0);
                           beep_setvol(0);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_BEEPLOW:
                           xmenu_setbeepvol(1);
                           beep_setvol(1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_BEEPMID:
                           xmenu_setbeepvol(2);
                           beep_setvol(2);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_BEEPHIGH:
                           xmenu_setbeepvol(3);
                           beep_setvol(3);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_NOSOUND:
                           xmenu_setsound(0x00);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_PC9801_14:
                           xmenu_setsound(0x01);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_PC9801_26K:
                           xmenu_setsound(0x02);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_PC9801_86:
                           xmenu_setsound(0x04);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_PC9801_26_86:
                           xmenu_setsound(0x06);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_PC9801_86_CB:
                           xmenu_setsound(0x14);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_PC9801_118:
                           xmenu_setsound(0x08);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_SPEAKBOARD:
                           xmenu_setsound(0x20);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_SPARKBOARD:
                           xmenu_setsound(0x40);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_AMD98:
                           xmenu_setsound(0x80);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_JASTSOUND:
                           xmenu_setjastsound(np2oscfg.jastsnd ^ 1);
                           update |= SYS_UPDATEOSCFG;
                           break;
   
                   case IDM_SEEKSND:
                           xmenu_setmotorflg(np2cfg.MOTOR ^ 1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_MEM640:
                           xmenu_setextmem(0);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_MEM16:
                           xmenu_setextmem(1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_MEM36:
                           xmenu_setextmem(3);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_MEM76:
                           xmenu_setextmem(7);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_MEM116:
                           xmenu_setextmem(11);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_MEM136:
                           xmenu_setextmem(13);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_MOUSE:
                           mousemng_toggle(MOUSEPROC_SYSTEM);
                           xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_SERIAL1:
                           winuienter();
                           dialog_serial(hWnd);
                           winuileave();
                           break;
   
                   case IDM_MPUPC98:
                           winuienter();
                           DialogBox(hInst, MAKEINTRESOURCE(IDD_MPUPC98),
                                                                                           hWnd, (DLGPROC)MidiDialogProc);
                           winuileave();
                           break;
   
                   case IDM_MIDIPANIC:
                           rs232c_midipanic();
                           mpu98ii_midipanic();
                           pc9861k_midipanic();
                           break;
   
                   case IDM_SNDOPT:
                           winuienter();
                           dialog_sndopt(hWnd);
                           winuileave();
                           break;
   
                   case IDM_BMPSAVE:
                           winuienter();
                           dialog_writebmp(hWnd);
                           winuileave();
                           break;
   #if defined(SUPPORT_S98)
                   case IDM_S98LOGGING:
                           winuienter();
                           dialog_s98(hWnd);
                           winuileave();
                           break;
   #endif
   #if defined(SUPPORT_WAVEREC)
                   case IDM_WAVEREC:
                           winuienter();
                           dialog_waverec(hWnd);
                           winuileave();
                           break;
   #endif
                   case IDM_DISPCLOCK:
                           xmenu_setdispclk(np2oscfg.DISPCLK ^ 1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_DISPFRAME:
                           xmenu_setdispclk(np2oscfg.DISPCLK ^ 2);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_CALENDAR:
                           winuienter();
                           DialogBox(hInst, MAKEINTRESOURCE(IDD_CALENDAR),
                                                                                           hWnd, (DLGPROC)ClndDialogProc);
                           winuileave();
                           break;
   
                   case IDM_ALTENTER:
                           xmenu_setshortcut(np2oscfg.shortcut ^ 1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_ALTF4:
                           xmenu_setshortcut(np2oscfg.shortcut ^ 2);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_JOYX:
                           xmenu_setbtnmode(np2cfg.BTN_MODE ^ 1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_RAPID:
                           xmenu_setbtnrapid(np2cfg.BTN_RAPID ^ 1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_MSRAPID:
                           xmenu_setmsrapid(np2cfg.MOUSERAPID ^ 1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_SSTP:
                           xmenu_setsstp(np2oscfg.sstp ^ 1);
                           update |= SYS_UPDATECFG;
                           break;
   
                   case IDM_I286SAVE:
                           debugsub_status();
                           break;
   
                   case IDM_HELP:
                           ShellExecute(hWnd, NULL, file_getcd(np2help),
                                                                           NULL, NULL, SW_SHOWNORMAL);
                           break;
   
                   case IDM_ABOUT:
                           sstpmsg_about();
                           if (sstp_result() != SSTP_SENDING) {
                                   winuienter();
                                   DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT),
                                                                   hWnd, (DLGPROC)AboutDialogProc);
                                   winuileave();
                           }
                           break;
   
                   default:
   #if defined(SUPPORT_STATSAVE)
                           if ((cmd >= IDM_FLAGSAVE) &&
                                   (cmd < (IDM_FLAGSAVE + SUPPORT_STATSAVE))) {
                                   OEMCHAR ext[4];
                                   OEMSPRINTF(ext, np2flagext, cmd - IDM_FLAGSAVE);
                                   flagsave(ext);
                           }
                           else if ((cmd >= IDM_FLAGLOAD) &&
                                   (cmd < (IDM_FLAGLOAD + SUPPORT_STATSAVE))) {
                                   OEMCHAR ext[4];
                                   OEMSPRINTF(ext, np2flagext, cmd - IDM_FLAGLOAD);
                                   flagload(ext, OEMTEXT("Status Load"), TRUE);
                           }
   #endif
                           break;
           }
           sysmng_update(update);
   }
   
 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {  LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
   
         PAINTSTRUCT     ps;          PAINTSTRUCT     ps;
Line 353  LRESULT CALLBACK WndProc(HWND hWnd, UINT Line 949  LRESULT CALLBACK WndProc(HWND hWnd, UINT
                                         update |= SYS_UPDATEOSCFG;                                          update |= SYS_UPDATEOSCFG;
                                         break;                                          break;
   
   #if defined(SUPPORT_KEYDISP)
                                 case IDM_KEYDISP:                                  case IDM_KEYDISP:
                                         sysmenu_setkeydisp(np2oscfg.keydisp ^ 1);                                          sysmenu_setkeydisp(np2oscfg.keydisp ^ 1);
                                         if (np2oscfg.keydisp) {                                          if (np2oscfg.keydisp) {
Line 362  LRESULT CALLBACK WndProc(HWND hWnd, UINT Line 959  LRESULT CALLBACK WndProc(HWND hWnd, UINT
                                                 kdispwin_destroy();                                                  kdispwin_destroy();
                                         }                                          }
                                         break;                                          break;
   #endif
   #if defined(SUPPORT_SOFTKBD)
                                   case IDM_SOFTKBD:
                                           skbdwin_create();
                                           break;
   #endif
   #if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32)
                                   case IDM_MEMDBG32:
                                           mdbgwin_create();
                                           break;
   #endif
                                 case IDM_SCREENCENTER:                                  case IDM_SCREENCENTER:
                                         if ((!scrnmng_isfullscreen()) &&                                          if ((!scrnmng_isfullscreen()) &&
                                                 (!(GetWindowLong(hWnd, GWL_STYLE) &                                                  (!(GetWindowLong(hWnd, GWL_STYLE) &
Line 397  LRESULT CALLBACK WndProc(HWND hWnd, UINT Line 1004  LRESULT CALLBACK WndProc(HWND hWnd, UINT
                                         viewer_open();                                          viewer_open();
                                         break;                                          break;
   
                                 case IDM_SCRNMUL4:                                                              // ver0.26                                  case IDM_SCRNMUL4:
                                 case IDM_SCRNMUL6:                                  case IDM_SCRNMUL6:
                                 case IDM_SCRNMUL8:                                  case IDM_SCRNMUL8:
                                 case IDM_SCRNMUL10:                                  case IDM_SCRNMUL10:
Line 425  LRESULT CALLBACK WndProc(HWND hWnd, UINT Line 1032  LRESULT CALLBACK WndProc(HWND hWnd, UINT
                                         if (subwin) {                                          if (subwin) {
                                                 ShowWindow(subwin, SW_SHOWNOACTIVATE);                                                  ShowWindow(subwin, SW_SHOWNOACTIVATE);
                                         }                                          }
                                           subwin = skbdwin_gethwnd();
                                           if (subwin) {
                                                   ShowWindow(subwin, SW_SHOWNOACTIVATE);
                                           }
                                           subwin = mdbgwin_gethwnd();
                                           if (subwin) {
                                                   ShowWindow(subwin, SW_SHOWNOACTIVATE);
                                           }
                                         return(DefWindowProc(hWnd, msg, wParam, lParam));                                          return(DefWindowProc(hWnd, msg, wParam, lParam));
   
                                 default:                                  default:
Line 434  LRESULT CALLBACK WndProc(HWND hWnd, UINT Line 1049  LRESULT CALLBACK WndProc(HWND hWnd, UINT
                         break;                          break;
   
                 case WM_COMMAND:                  case WM_COMMAND:
                         update = 0;                          np2cmd(hWnd, LOWORD(wParam));
                         switch(LOWORD(wParam)) {  
                                 case IDM_RESET:  
                                         b = FALSE;  
                                         if (!np2oscfg.comfirm) {  
                                                 b = TRUE;  
                                         }  
                                         else if (sstpconfirm_reset()) {  
                                                 winuienter();  
                                                 if (MessageBox(hWnd, "Sure?", "Reset",  
                                                                         MB_ICONQUESTION | MB_YESNO) == IDYES) {  
                                                         b = TRUE;  
                                                 }  
                                                 winuileave();  
                                         }  
                                         if (b) {  
                                                 sstpmsg_reset();  
                                                 pccore_cfgupdate();  
                                                 pccore_reset();  
                                         }  
                                         break;  
   
                                 case IDM_CONFIG:  
                                         winuienter();  
                                         sstpmsg_config();  
                                         DialogBox(hInst, MAKEINTRESOURCE(IDD_CONFIG),  
                                                                         hWnd, (DLGPROC)CfgDialogProc);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_NEWDISK:  
                                         winuienter();  
                                         dialog_newdisk(hWnd);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_CHANGEFONT:  
                                         winuienter();  
                                         dialog_font(hWnd);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_EXIT:  
                                         SendMessage(hWnd, WM_CLOSE, 0, 0L);  
                                         break;  
   
                                 case IDM_FDD1OPEN:  
                                         winuienter();  
                                         dialog_changefdd(hWnd, 0);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_FDD1EJECT:  
                                         diskdrv_setfdd(0, NULL, 0);  
                                         toolwin_setfdd(0, NULL);  
                                         break;  
   
                                 case IDM_FDD2OPEN:  
                                         winuienter();  
                                         dialog_changefdd(hWnd, 1);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_FDD2EJECT:  
                                         diskdrv_setfdd(1, NULL, 0);  
                                         toolwin_setfdd(1, NULL);  
                                         break;  
   
                                 case IDM_SASI1OPEN:  
                                         winuienter();  
                                         dialog_changehdd(hWnd, 0);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_SASI1EJECT:  
                                         diskdrv_sethdd(0, NULL);  
                                         break;  
   
                                 case IDM_SASI2OPEN:  
                                         winuienter();  
                                         dialog_changehdd(hWnd, 1);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_SASI2EJECT:  
                                         diskdrv_sethdd(1, NULL);  
                                         break;  
   
                                 case IDM_WINDOW:  
                                         changescreen(scrnmode & (~SCRNMODE_FULLSCREEN));  
                                         break;  
   
                                 case IDM_FULLSCREEN:  
                                         changescreen(scrnmode | SCRNMODE_FULLSCREEN);  
                                         break;  
   
                                 case IDM_ROLNORMAL:  
                                         xmenu_setroltate(0);  
                                         changescreen(scrnmode & (~SCRNMODE_ROTATEMASK));  
                                         break;  
   
                                 case IDM_ROLLEFT:  
                                         xmenu_setroltate(1);  
                                         changescreen((scrnmode & (~SCRNMODE_ROTATEMASK)) |  
                                                                                                                 SCRNMODE_ROTATELEFT);  
                                         break;  
   
                                 case IDM_ROLRIGHT:  
                                         xmenu_setroltate(2);  
                                         changescreen((scrnmode & (~SCRNMODE_ROTATEMASK)) |  
                                                                                                                 SCRNMODE_ROTATERIGHT);  
                                         break;  
   
                                 case IDM_DISPSYNC:  
                                         xmenu_setdispmode(np2cfg.DISPSYNC ^ 1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_RASTER:  
                                         xmenu_setraster(np2cfg.RASTER ^ 1);  
                                         if (np2cfg.RASTER) {  
                                                 changescreen(scrnmode | SCRNMODE_HIGHCOLOR);  
                                         }  
                                         else {  
                                                 changescreen(scrnmode & (~SCRNMODE_HIGHCOLOR));  
                                         }  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_NOWAIT:  
                                         xmenu_setwaitflg(np2oscfg.NOWAIT ^ 1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_AUTOFPS:  
                                         xmenu_setframe(0);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_60FPS:  
                                         xmenu_setframe(1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_30FPS:  
                                         xmenu_setframe(2);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_20FPS:  
                                         xmenu_setframe(3);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_15FPS:  
                                         xmenu_setframe(4);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_SCREENOPT:  
                                         winuienter();  
                                         dialog_scropt(hWnd);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_KEY:  
                                         xmenu_setkey(0);  
                                         keystat_resetjoykey();  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_JOY1:  
                                         xmenu_setkey(1);  
                                         keystat_resetjoykey();  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_JOY2:  
                                         xmenu_setkey(2);  
                                         keystat_resetjoykey();  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_XSHIFT:  
                                         xmenu_setxshift(np2cfg.XSHIFT ^ 1);  
                                         keystat_forcerelease(0x70);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_XCTRL:  
                                         xmenu_setxshift(np2cfg.XSHIFT ^ 2);  
                                         keystat_forcerelease(0x74);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_XGRPH:  
                                         xmenu_setxshift(np2cfg.XSHIFT ^ 4);  
                                         keystat_forcerelease(0x73);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_F12MOUSE:  
                                         xmenu_setf12copy(0);  
                                         winkbd_resetf12();  
                                         update |= SYS_UPDATEOSCFG;  
                                         break;  
   
                                 case IDM_F12COPY:  
                                         xmenu_setf12copy(1);  
                                         winkbd_resetf12();  
                                         update |= SYS_UPDATEOSCFG;  
                                         break;  
   
                                 case IDM_F12STOP:  
                                         xmenu_setf12copy(2);  
                                         winkbd_resetf12();  
                                         update |= SYS_UPDATEOSCFG;  
                                         break;  
   
                                 case IDM_F12EQU:  
                                         xmenu_setf12copy(3);  
                                         winkbd_resetf12();  
                                         update |= SYS_UPDATEOSCFG;  
                                         break;  
   
                                 case IDM_F12COMMA:  
                                         xmenu_setf12copy(4);  
                                         winkbd_resetf12();  
                                         update |= SYS_UPDATEOSCFG;  
                                         break;  
   
                                 case IDM_BEEPOFF:  
                                         xmenu_setbeepvol(0);  
                                         beep_setvol(0);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_BEEPLOW:  
                                         xmenu_setbeepvol(1);  
                                         beep_setvol(1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_BEEPMID:  
                                         xmenu_setbeepvol(2);  
                                         beep_setvol(2);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_BEEPHIGH:  
                                         xmenu_setbeepvol(3);  
                                         beep_setvol(3);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_NOSOUND:  
                                         xmenu_setsound(0x00);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_PC9801_14:  
                                         xmenu_setsound(0x01);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_PC9801_26K:  
                                         xmenu_setsound(0x02);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_PC9801_86:  
                                         xmenu_setsound(0x04);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_PC9801_26_86:  
                                         xmenu_setsound(0x06);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_PC9801_86_CB:  
                                         xmenu_setsound(0x14);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_PC9801_118:  
                                         xmenu_setsound(0x08);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_SPEAKBOARD:  
                                         xmenu_setsound(0x20);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_SPARKBOARD:  
                                         xmenu_setsound(0x40);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_AMD98:  
                                         xmenu_setsound(0x80);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_JASTSOUND:  
                                         xmenu_setjastsound(np2oscfg.jastsnd ^ 1);  
                                         update |= SYS_UPDATEOSCFG;  
                                         break;  
   
                                 case IDM_SEEKSND:  
                                         xmenu_setmotorflg(np2cfg.MOTOR ^ 1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_MEM640:  
                                         xmenu_setextmem(0);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_MEM16:  
                                         xmenu_setextmem(1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_MEM36:  
                                         xmenu_setextmem(3);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_MEM76:  
                                         xmenu_setextmem(7);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_MOUSE:  
                                         mousemng_toggle(MOUSEPROC_SYSTEM);  
                                         xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_SERIAL1:  
                                         winuienter();  
                                         dialog_serial(hWnd);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_MPUPC98:  
                                         winuienter();  
                                         DialogBox(hInst, MAKEINTRESOURCE(IDD_MPUPC98),  
                                                                                         hWnd, (DLGPROC)MidiDialogProc);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_MIDIPANIC:                                                                     // ver0.29  
                                         rs232c_midipanic();  
                                         mpu98ii_midipanic();  
                                         pc9861k_midipanic();  
                                         break;  
   
                                 case IDM_SNDOPT:  
                                         winuienter();  
                                         dialog_sndopt(hWnd);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_BMPSAVE:  
                                         winuienter();  
                                         dialog_writebmp(hWnd);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_S98LOGGING:  
                                         winuienter();  
                                         dialog_s98(hWnd);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_DISPCLOCK:  
                                         xmenu_setdispclk(np2oscfg.DISPCLK ^ 1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_DISPFRAME:  
                                         xmenu_setdispclk(np2oscfg.DISPCLK ^ 2);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_CALENDAR:  
                                         winuienter();  
                                         DialogBox(hInst, MAKEINTRESOURCE(IDD_CALENDAR),  
                                                                                         hWnd, (DLGPROC)ClndDialogProc);  
                                         winuileave();  
                                         break;  
   
                                 case IDM_ALTENTER:  
                                         xmenu_setshortcut(np2oscfg.shortcut ^ 1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_ALTF4:  
                                         xmenu_setshortcut(np2oscfg.shortcut ^ 2);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_JOYX:  
                                         xmenu_setbtnmode(np2cfg.BTN_MODE ^ 1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_RAPID:  
                                         xmenu_setbtnrapid(np2cfg.BTN_RAPID ^ 1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_MSRAPID:  
                                         xmenu_setmsrapid(np2cfg.MOUSERAPID ^ 1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_SSTP:  
                                         xmenu_setsstp(np2oscfg.sstp ^ 1);  
                                         update |= SYS_UPDATECFG;  
                                         break;  
   
                                 case IDM_I286SAVE:  
                                         debugsub_status();  
                                         break;  
   
                                 case IDM_HELP:  
                                         ShellExecute(hWnd, NULL, file_getcd(np2help),  
                                                                                         NULL, NULL, SW_SHOWNORMAL);  
                                         break;  
   
                                 case IDM_ABOUT:  
                                         sstpmsg_about();  
                                         if (sstp_result() != SSTP_SENDING) {  
                                                 winuienter();  
                                                 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT),  
                                                                                 hWnd, (DLGPROC)AboutDialogProc);  
                                                 winuileave();  
                                         }  
                                         break;  
   
                                 default:  
                                         if ((LOWORD(wParam) >= IDM_FLAGSAVE) &&  
                                                 (LOWORD(wParam) < IDM_FLAGSAVE + STATSAVEMAX)) {  
                                                 char ext[4];  
                                                 wsprintf(ext, np2flagext,  
                                                                         (LOWORD(wParam) - IDM_FLAGSAVE) % 100);  
                                                 flagsave(ext);  
                                         }  
                                         if ((LOWORD(wParam) >= IDM_FLAGLOAD) &&  
                                                 (LOWORD(wParam) < IDM_FLAGLOAD + STATSAVEMAX)) {  
                                                 char ext[4];  
                                                 wsprintf(ext, np2flagext,  
                                                                         (LOWORD(wParam) - IDM_FLAGLOAD) % 100);  
                                                 flagload(ext, "Status Load", TRUE);  
                                         }  
                                         break;  
                         }  
                         sysmng_update(update);  
                         break;                          break;
   
                 case WM_ACTIVATE:                  case WM_ACTIVATE:
Line 927  LRESULT CALLBACK WndProc(HWND hWnd, UINT Line 1081  LRESULT CALLBACK WndProc(HWND hWnd, UINT
                                 GetClientRect(hWnd, &rect);                                  GetClientRect(hWnd, &rect);
                                 width = rect.right - rect.left;                                  width = rect.right - rect.left;
                                 height = rect.bottom - rect.top;                                  height = rect.bottom - rect.top;
                                 hbmp = LoadBitmap(hinst, "NP2BMP");                                  hbmp = LoadBitmap(hinst, _T("NP2BMP"));
                                 GetObject(hbmp, sizeof(BITMAP), &bmp);                                  GetObject(hbmp, sizeof(BITMAP), &bmp);
                                 hbrush = (HBRUSH)SelectObject(hdc,                                  hbrush = (HBRUSH)SelectObject(hdc,
                                                                                                 GetStockObject(BLACK_BRUSH));                                                                                                  GetStockObject(BLACK_BRUSH));
Line 953  LRESULT CALLBACK WndProc(HWND hWnd, UINT Line 1107  LRESULT CALLBACK WndProc(HWND hWnd, UINT
                         break;                          break;
   
                 case WM_MOVE:                  case WM_MOVE:
                         if (!scrnmng_isfullscreen()) {                          if ((!scrnmng_isfullscreen()) &&
                                 if (!(GetWindowLong(hWnd, GWL_STYLE) &                                  (!(GetWindowLong(hWnd, GWL_STYLE) &
                                                                                         (WS_MAXIMIZE | WS_MINIMIZE))) {                                                                          (WS_MAXIMIZE | WS_MINIMIZE)))) {
                                         GetWindowRect(hWnd, &rc);                                  GetWindowRect(hWnd, &rc);
                                         np2oscfg.winx = rc.left;                                  np2oscfg.winx = rc.left;
                                         np2oscfg.winy = rc.top;                                  np2oscfg.winy = rc.top;
                                         sysmng_update(SYS_UPDATEOSCFG);                                  sysmng_update(SYS_UPDATEOSCFG);
                                 }  
                         }                          }
                         break;                          break;
   
Line 1079  LRESULT CALLBACK WndProc(HWND hWnd, UINT Line 1232  LRESULT CALLBACK WndProc(HWND hWnd, UINT
                         }                          }
                         break;                          break;
   
                 case WM_MBUTTONDOWN:                                                                    // ver0.26                  case WM_MBUTTONDOWN:
                         mousemng_toggle(MOUSEPROC_SYSTEM);                          mousemng_toggle(MOUSEPROC_SYSTEM);
                         xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1);                          xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1);
                         sysmng_update(SYS_UPDATECFG);                          sysmng_update(SYS_UPDATECFG);
Line 1131  LRESULT CALLBACK WndProc(HWND hWnd, UINT Line 1284  LRESULT CALLBACK WndProc(HWND hWnd, UINT
                         }                          }
                         else if (sstpconfirm_exit()) {                          else if (sstpconfirm_exit()) {
                                 winuienter();                                  winuienter();
                                 if (MessageBox(hWnd, "Sure?", "Exit",                                  if (MessageBox(hWnd, _T("Sure?"), _T("Exit"),
                                                                         MB_ICONQUESTION | MB_YESNO) == IDYES) {                                                                          MB_ICONQUESTION | MB_YESNO) == IDYES) {
                                         b = TRUE;                                          b = TRUE;
                                 }                                  }
Line 1162  LRESULT CALLBACK WndProc(HWND hWnd, UINT Line 1315  LRESULT CALLBACK WndProc(HWND hWnd, UINT
                                         break;                                          break;
   
                                 case NP2CMD_RESET:                                  case NP2CMD_RESET:
                                           juliet_YMF288Reset();
                                         pccore_cfgupdate();                                          pccore_cfgupdate();
                                         pccore_reset();                                          pccore_reset();
                                         break;                                          break;
Line 1212  static void framereset(UINT cnt) { Line 1366  static void framereset(UINT cnt) {
   
         framecnt = 0;          framecnt = 0;
         scrnmng_dispclock();          scrnmng_dispclock();
         kdispwin_draw((BYTE)cnt);          kdispwin_draw((UINT8)cnt);
         toolwin_draw((BYTE)cnt);          skbdwin_process();
           mdbgwin_process();
           toolwin_draw((UINT8)cnt);
         viewer_allreload(FALSE);          viewer_allreload(FALSE);
         if (np2oscfg.DISPCLK & 3) {          if (np2oscfg.DISPCLK & 3) {
                 if (sysmng_workclockrenewal()) {                  if (sysmng_workclockrenewal()) {
Line 1239  int WINAPI WinMain(HINSTANCE hInstance,  Line 1395  int WINAPI WinMain(HINSTANCE hInstance, 
                                                                                 LPSTR lpszCmdLine, int nCmdShow) {                                                                                  LPSTR lpszCmdLine, int nCmdShow) {
         WNDCLASS        wc;          WNDCLASS        wc;
         MSG                     msg;          MSG                     msg;
         HMENU           hMenu;  
         HWND            hWnd;          HWND            hWnd;
         UINT            i;          UINT            i;
           DWORD           style;
 #ifdef OPENING_WAIT  #ifdef OPENING_WAIT
         UINT32          tick;          UINT32          tick;
 #endif  #endif
           BOOL            xrollkey;
   
         _MEM_INIT();          _MEM_INIT();
   
         GetModuleFileName(NULL, modulefile, sizeof(modulefile));          GetModuleFileName(NULL, modulefile, NELEMENTS(modulefile));
         dosio_init();          dosio_init();
         file_setcd(modulefile);          file_setcd(modulefile);
         np2arg_analize(lpszCmdLine);          np2arg_analize();
         initload();          initload();
         toolwin_readini();          toolwin_readini();
         kdispwin_readini();          kdispwin_readini();
           skbdwin_readini();
           mdbgwin_readini();
   
         rand_setseed((unsigned)time(NULL));          rand_setseed((unsigned)time(NULL));
   
         CopyMemory(szClassName, np2oscfg.winid, 3);          szClassName[0] = (TCHAR)np2oscfg.winid[0];
           szClassName[1] = (TCHAR)np2oscfg.winid[1];
           szClassName[2] = (TCHAR)np2oscfg.winid[2];
   
         if ((hWnd = FindWindow(szClassName, NULL)) != NULL) {          if ((hWnd = FindWindow(szClassName, NULL)) != NULL) {
                 sstpmsg_running();                  sstpmsg_running();
Line 1274  int WINAPI WinMain(HINSTANCE hInstance,  Line 1435  int WINAPI WinMain(HINSTANCE hInstance, 
         mmxflag += (np2oscfg.disablemmx)?MMXFLAG_DISABLE:0;          mmxflag += (np2oscfg.disablemmx)?MMXFLAG_DISABLE:0;
         TRACEINIT();          TRACEINIT();
   
         if (np2oscfg.KEYBOARD >= KEY_TYPEMAX) {                                                 // ver0.28          xrollkey = (np2oscfg.xrollkey == 0);
           if (np2oscfg.KEYBOARD >= KEY_TYPEMAX) {
                 int keytype = GetKeyboardType(1);                  int keytype = GetKeyboardType(1);
                 if ((keytype & 0xff00) == 0x0d00) {                  if ((keytype & 0xff00) == 0x0d00) {
                         np2oscfg.KEYBOARD = KEY_PC98;                          np2oscfg.KEYBOARD = KEY_PC98;
                           xrollkey = !xrollkey;
                 }                  }
                 else if (!keytype) {                  else if (!keytype) {
                         np2oscfg.KEYBOARD = KEY_KEY101;                          np2oscfg.KEYBOARD = KEY_KEY101;
Line 1286  int WINAPI WinMain(HINSTANCE hInstance,  Line 1449  int WINAPI WinMain(HINSTANCE hInstance, 
                         np2oscfg.KEYBOARD = KEY_KEY106;                          np2oscfg.KEYBOARD = KEY_KEY106;
                 }                  }
         }          }
         keystat_reset();          winkbd_roll(xrollkey);
           winkbd_setf12(np2oscfg.F12COPY);
           keystat_initialize();
   
         np2class_initialize(hInstance);          np2class_initialize(hInstance);
         if (!hPreInst) {          if (!hPreInst) {
Line 1306  int WINAPI WinMain(HINSTANCE hInstance,  Line 1471  int WINAPI WinMain(HINSTANCE hInstance, 
         }          }
         toolwin_initapp(hInstance);          toolwin_initapp(hInstance);
         kdispwin_initialize(hPreInst);          kdispwin_initialize(hPreInst);
         viewer_init(hPreInst);                                                                          // ver0.30          skbdwin_initialize(hPreInst);
           mdbgwin_initialize(hPreInst);
           viewer_init(hPreInst);
   
           mousemng_initialize();
   
         hWndMain = CreateWindow(szClassName, np2oscfg.titles,          style = WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX;
                                                 WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION |          if (np2oscfg.thickframe) {
                                                 WS_THICKFRAME | WS_MINIMIZEBOX,                  style |= WS_THICKFRAME;
           }
           hWnd = CreateWindowEx(0, szClassName, np2oscfg.titles, style,
                                                 np2oscfg.winx, np2oscfg.winy, 640, 400,                                                  np2oscfg.winx, np2oscfg.winy, 640, 400,
                                                 NULL, NULL, hInstance, NULL);                                                  NULL, NULL, hInstance, NULL);
         hWnd = hWndMain;          hWndMain = hWnd;
         scrnmng_initialize();          scrnmng_initialize();
   
         xmenu_setroltate(0);          xmenu_setroltate(0);
Line 1338  int WINAPI WinMain(HINSTANCE hInstance,  Line 1509  int WINAPI WinMain(HINSTANCE hInstance, 
         xmenu_setbtnrapid(np2cfg.BTN_RAPID);          xmenu_setbtnrapid(np2cfg.BTN_RAPID);
         xmenu_setmsrapid(np2cfg.MOUSERAPID);          xmenu_setmsrapid(np2cfg.MOUSERAPID);
         xmenu_setsstp(np2oscfg.sstp);          xmenu_setsstp(np2oscfg.sstp);
         xmenu_seti286save(np2oscfg.I286SAVE);  
   
         ShowWindow(hWnd, nCmdShow);          ShowWindow(hWnd, nCmdShow);
         UpdateWindow(hWnd);          UpdateWindow(hWnd);
Line 1347  int WINAPI WinMain(HINSTANCE hInstance,  Line 1517  int WINAPI WinMain(HINSTANCE hInstance, 
         tick = GetTickCount();          tick = GetTickCount();
 #endif  #endif
   
         // めにゅー追加  
         if (np2oscfg.statsave) {  
                 char buf[16];  
                 hMenu = GetMenu(hWnd);  
                 hStat = CreatePopupMenu();  
                 for (i=0; i<STATSAVEMAX; i++) {  
                         wsprintf(buf, "Save %d", i);  
                         AppendMenu(hStat, MF_STRING, IDM_FLAGSAVE + i, buf);  
                 }  
                 AppendMenu(hStat, MF_MENUBARBREAK, 0, NULL);  
                 for (i=0; i<STATSAVEMAX; i++) {  
                         wsprintf(buf, "Load %d", i);  
                         AppendMenu(hStat, MF_STRING, IDM_FLAGLOAD + i, buf);  
                 }  
                 InsertMenu(hMenu, 1, MF_BYPOSITION | MF_POPUP, (UINT)hStat, "S&tat");  
         }  
         sysmenu_initialize();          sysmenu_initialize();
           xmenu_initialize();
         DrawMenuBar(hWnd);          DrawMenuBar(hWnd);
   
         // ver0.30          if (file_attr_c(np2help) == (short)-1) {                                                // ver0.30
         if (file_attr_c(np2help) == (short)-1) {  
                 EnableMenuItem(GetMenu(hWnd), IDM_HELP, MF_GRAYED);                  EnableMenuItem(GetMenu(hWnd), IDM_HELP, MF_GRAYED);
         }          }
   
Line 1376  int WINAPI WinMain(HINSTANCE hInstance,  Line 1530  int WINAPI WinMain(HINSTANCE hInstance, 
         sysmenu_setwinsnap(np2oscfg.WINSNAP);          sysmenu_setwinsnap(np2oscfg.WINSNAP);
         sysmenu_setbackground(np2oscfg.background);          sysmenu_setbackground(np2oscfg.background);
         sysmenu_setbgsound(np2oscfg.background);          sysmenu_setbgsound(np2oscfg.background);
         sysmenu_setscrnmul(8);                                                                          // ver0.26          sysmenu_setscrnmul(8);
   
         scrnmode = 0;          scrnmode = 0;
         if (np2arg.fullscreen) {          if (np2arg.fullscreen) {
Line 1389  int WINAPI WinMain(HINSTANCE hInstance,  Line 1543  int WINAPI WinMain(HINSTANCE hInstance, 
                 scrnmode ^= SCRNMODE_FULLSCREEN;                  scrnmode ^= SCRNMODE_FULLSCREEN;
                 if (scrnmng_create(scrnmode) != SUCCESS) {                  if (scrnmng_create(scrnmode) != SUCCESS) {
                         if (sstpmsg_dxerror()) {                          if (sstpmsg_dxerror()) {
                                 MessageBox(hWnd, "Couldn't create DirectDraw Object",                                  MessageBox(hWnd, _T("Couldn't create DirectDraw Object"),
                                                                                 np2oscfg.titles, MB_OK | MB_ICONSTOP);                                                                                  np2oscfg.titles, MB_OK | MB_ICONSTOP);
                         }                          }
                         return(FALSE);                          return(FALSE);
Line 1397  int WINAPI WinMain(HINSTANCE hInstance,  Line 1551  int WINAPI WinMain(HINSTANCE hInstance, 
         }          }
   
         if (soundmng_initialize() == SUCCESS) {          if (soundmng_initialize() == SUCCESS) {
                 soundmng_pcmload(SOUND_PCMSEEK, "SEEKWAV", EXTROMIO_RES);                  soundmng_pcmload(SOUND_PCMSEEK, OEMTEXT("SEEKWAV"), EXTROMIO_RES);
                 soundmng_pcmload(SOUND_PCMSEEK1, "SEEK1WAV", EXTROMIO_RES);                  soundmng_pcmload(SOUND_PCMSEEK1, OEMTEXT("SEEK1WAV"), EXTROMIO_RES);
                 soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL);                  soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL);
                 soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL);                  soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL);
         }          }
   
 #ifdef USE_ROMEO          if (np2oscfg.useromeo) {
         juliet_load();                  juliet_initialize();
         juliet_prepare();          }
 #endif  
   
         mousemng_initialize();  
         if (np2oscfg.MOUSE_SW) {                                                                                // ver0.30          if (np2oscfg.MOUSE_SW) {                                                                                // ver0.30
                 mousemng_enable(MOUSEPROC_SYSTEM);                  mousemng_enable(MOUSEPROC_SYSTEM);
         }          }
 //      mousemng_enable(MOUSEPROC_WINUI);  
 //      mousemng_enable(MOUSEPROC_BG);  
   
         commng_initialize();          commng_initialize();
         sysmng_initialize();          sysmng_initialize();
   
         joy_init();          joymng_initialize();
         pccore_init();          pccore_init();
         S98_init();          S98_init();
   
Line 1435  int WINAPI WinMain(HINSTANCE hInstance,  Line 1585  int WINAPI WinMain(HINSTANCE hInstance, 
         np2opening = 0;          np2opening = 0;
   
         // れじうむ          // れじうむ
   #if defined(SUPPORT_RESUME)
         if (np2oscfg.resume) {          if (np2oscfg.resume) {
                 int             id;                  int             id;
   
                 id = flagload(str_sav, str_resume, FALSE);                  id = flagload(str_sav, str_resume, FALSE);
                 if (id == IDYES) {                  if (id == IDYES) {
                         for (i=0; i<4; i++) np2arg.disk[i] = NULL;                          for (i=0; i<4; i++) {
                                   np2arg.disk[i] = NULL;
                           }
                 }                  }
                 else if (id == IDCANCEL) {                  else if (id == IDCANCEL) {
                         DestroyWindow(hWnd);                          DestroyWindow(hWnd);
Line 1456  int WINAPI WinMain(HINSTANCE hInstance,  Line 1609  int WINAPI WinMain(HINSTANCE hInstance, 
                         return(0);                          return(0);
                 }                  }
         }          }
   #endif
   
 //      リセットしてから… コマンドラインのディスク挿入。                               // ver0.29  //      リセットしてから… コマンドラインのディスク挿入。
         for (i=0; i<4; i++) {          for (i=0; i<4; i++) {
                 if (np2arg.disk[i]) {                  if (np2arg.disk[i]) {
                         milstr_ncpy(diskdrv_fname[i], np2arg.disk[i], MAX_PATH);                          diskdrv_readyfdd((REG8)i, np2arg.disk[i], 0);
                         diskdrv_delay[i] = 1;  
                 }                  }
         }          }
   
Line 1489  int WINAPI WinMain(HINSTANCE hInstance,  Line 1642  int WINAPI WinMain(HINSTANCE hInstance, 
                         }                          }
                         else {                          else {
                                 if (np2oscfg.NOWAIT) {                                  if (np2oscfg.NOWAIT) {
                                         joy_flash();                                          joymng_sync();
                                         mousemng_callback();                                          mousemng_sync();
                                         pccore_exec(framecnt == 0);                                          pccore_exec(framecnt == 0);
                                         dclock_callback();                                          dclock_callback();
                                         if (np2oscfg.DRAW_SKIP) {               // nowait frame skip                                          if (np2oscfg.DRAW_SKIP) {               // nowait frame skip
Line 1508  int WINAPI WinMain(HINSTANCE hInstance,  Line 1661  int WINAPI WinMain(HINSTANCE hInstance, 
                                 }                                  }
                                 else if (np2oscfg.DRAW_SKIP) {          // frame skip                                  else if (np2oscfg.DRAW_SKIP) {          // frame skip
                                         if (framecnt < np2oscfg.DRAW_SKIP) {                                          if (framecnt < np2oscfg.DRAW_SKIP) {
                                                 joy_flash();                                                  joymng_sync();
                                                 mousemng_callback();                                                  mousemng_sync();
                                                 pccore_exec(framecnt == 0);                                                  pccore_exec(framecnt == 0);
                                                 dclock_callback();                                                  dclock_callback();
                                                 framecnt++;                                                  framecnt++;
Line 1521  int WINAPI WinMain(HINSTANCE hInstance,  Line 1674  int WINAPI WinMain(HINSTANCE hInstance, 
                                 else {                                                          // auto skip                                  else {                                                          // auto skip
                                         if (!waitcnt) {                                          if (!waitcnt) {
                                                 UINT cnt;                                                  UINT cnt;
                                                 joy_flash();                                                  joymng_sync();
                                                 mousemng_callback();                                                  mousemng_sync();
                                                 pccore_exec(framecnt == 0);                                                  pccore_exec(framecnt == 0);
                                                 dclock_callback();                                                  dclock_callback();
                                                 framecnt++;                                                  framecnt++;
Line 1564  int WINAPI WinMain(HINSTANCE hInstance,  Line 1717  int WINAPI WinMain(HINSTANCE hInstance, 
         }          }
         toolwin_destroy();          toolwin_destroy();
         kdispwin_destroy();          kdispwin_destroy();
           skbdwin_destroy();
           mdbgwin_destroy();
   
         pccore_cfgupdate();          pccore_cfgupdate();
   
         mousemng_disable(MOUSEPROC_WINUI);          mousemng_disable(MOUSEPROC_WINUI);
         S98_trash();          S98_trash();
   
   #if defined(SUPPORT_RESUME)
         if (np2oscfg.resume) {          if (np2oscfg.resume) {
                 flagsave(str_sav);                  flagsave(str_sav);
         }          }
         else {          else {
                 flagdelete(str_sav);                  flagdelete(str_sav);
         }          }
   #endif
   
 #ifdef USE_ROMEO  
         juliet_YMF288Reset();          juliet_YMF288Reset();
 #endif  
         pccore_term();          pccore_term();
   
         sstp_destruct();          sstp_destruct();
   
 #ifdef USE_ROMEO          juliet_deinitialize();
         juliet_unload();  
 #endif  
   
         soundmng_deinitialize();          soundmng_deinitialize();
         scrnmng_destroy();          scrnmng_destroy();
Line 1595  int WINAPI WinMain(HINSTANCE hInstance,  Line 1748  int WINAPI WinMain(HINSTANCE hInstance, 
                 initsave();                  initsave();
                 toolwin_writeini();                  toolwin_writeini();
                 kdispwin_writeini();                  kdispwin_writeini();
                   skbdwin_writeini();
                   mdbgwin_writeini();
         }          }
           skbdwin_deinitialize();
   
         TRACETERM();          TRACETERM();
         _MEM_USED("report.txt");          _MEM_USED("report.txt");
         dosio_term();          dosio_term();
   
         viewer_term();                                                                                          // ver0.30          viewer_term();                                                                                                  // ver0.30
   
         return(msg.wParam);          return(msg.wParam);
 }  }

Removed from v.1.33  
changed lines
  Added in v.1.62


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