--- np2/win9x/np2.cpp 2004/02/03 08:24:40 1.37 +++ np2/win9x/np2.cpp 2005/03/23 08:07:48 1.63 @@ -28,7 +28,7 @@ #include "juliet.h" #include "np2class.h" #include "dialog.h" -#include "memory.h" +#include "cpucore.h" #include "pccore.h" #include "iocore.h" #include "pc9861k.h" @@ -41,9 +41,9 @@ #include "diskdrv.h" #include "fddfile.h" #include "timing.h" +#include "keystat.h" #include "debugsub.h" -#include "keydisp.h" -#include "kdispwin.h" +#include "subwind.h" #include "viewer.h" @@ -51,43 +51,52 @@ #define OPENING_WAIT 1500 #endif -static char szClassName[] = "NP2-MainWindow"; +static TCHAR szClassName[] = _T("NP2-MainWindow"); HWND hWndMain; HINSTANCE hInst; HINSTANCE hPrev; int mmxflag; - BYTE np2break = 0; // ver0.30 + UINT8 np2break = 0; // ver0.30 BOOL winui_en; NP2OSCFG np2oscfg = { - "Neko Project II", "NP2", +#if !defined(SUPPORT_PC9821) + 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, 0, {1, 2, 2, 1}, - {5, 0, 0x3e, 19200, "", "", "", ""}, // ver0.34 - {0, 0, 0x3e, 19200, "", "", "", ""}, // ver0.34 - {0, 0, 0x3e, 19200, "", "", "", ""}, // ver0.34 - {0, 0, 0x3e, 19200, "", "", "", ""}, // ver0.34 + {5, 0, 0x3e, 19200, + OEMTEXT(""), OEMTEXT(""), OEMTEXT(""), OEMTEXT("")}, + {0, 0, 0x3e, 19200, + OEMTEXT(""), OEMTEXT(""), OEMTEXT(""), OEMTEXT("")}, + {0, 0, 0x3e, 19200, + OEMTEXT(""), OEMTEXT(""), OEMTEXT(""), OEMTEXT("")}, + {0, 0, 0x3e, 19200, + OEMTEXT(""), OEMTEXT(""), OEMTEXT(""), OEMTEXT("")}, 0xffffff, 0xffbf6a, 0, 0, - 0, 1, 0, 9801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + 0, 1, 0, 9801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - char fddfolder[MAX_PATH]; - char hddfolder[MAX_PATH]; - char bmpfilefolder[MAX_PATH]; - char modulefile[MAX_PATH]; + OEMCHAR fddfolder[MAX_PATH]; + OEMCHAR hddfolder[MAX_PATH]; + OEMCHAR bmpfilefolder[MAX_PATH]; + OEMCHAR modulefile[MAX_PATH]; static UINT framecnt = 0; static UINT waitcnt = 0; static UINT framemax = 1; -static BYTE np2stopemulate = 0; +static UINT8 np2stopemulate = 0; static int np2opening = 1; static int np2quitmsg = 0; static HMENU hStat = NULL; -static BYTE scrnmode; +static UINT8 scrnmode; static WINLOCEX smwlex; -static const char np2help[] = "np2.chm"; -static const char np2flagext[] = "S%02d"; +static const OEMCHAR np2help[] = OEMTEXT("np2.chm"); +static const OEMCHAR np2flagext[] = OEMTEXT("S%02d"); static void winuienter(void) { @@ -106,13 +115,17 @@ static void winuileave(void) { WINLOCEX np2_winlocexallwin(HWND base) { - HWND list[3]; UINT i; + UINT cnt; + HWND list[5]; - list[0] = hWndMain; - list[1] = toolwin_gethwnd(); - list[2] = kdispwin_gethwnd(); - for (i=0; i<3; i++) { + cnt = 0; + list[cnt++] = hWndMain; + list[cnt++] = toolwin_gethwnd(); + list[cnt++] = kdispwin_gethwnd(); + list[cnt++] = skbdwin_gethwnd(); + list[cnt++] = mdbgwin_gethwnd(); + for (i=0; i= IDM_FLAGSAVE) && - (cmd < (IDM_FLAGSAVE + STATSAVEMAX))) { - char ext[4]; - wsprintf(ext, np2flagext, cmd - IDM_FLAGSAVE); + (cmd < (IDM_FLAGSAVE + SUPPORT_STATSAVE))) { + OEMCHAR ext[4]; + OEMSPRINTF(ext, np2flagext, cmd - IDM_FLAGSAVE); flagsave(ext); } - if ((cmd >= IDM_FLAGLOAD) && - (cmd < (IDM_FLAGLOAD + STATSAVEMAX))) { - char ext[4]; - wsprintf(ext, np2flagext, cmd - IDM_FLAGLOAD); - flagload(ext, "Status Load", TRUE); + 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); @@ -858,6 +949,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT update |= SYS_UPDATEOSCFG; break; +#if defined(SUPPORT_KEYDISP) case IDM_KEYDISP: sysmenu_setkeydisp(np2oscfg.keydisp ^ 1); if (np2oscfg.keydisp) { @@ -867,7 +959,17 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT kdispwin_destroy(); } 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: if ((!scrnmng_isfullscreen()) && (!(GetWindowLong(hWnd, GWL_STYLE) & @@ -902,7 +1004,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT viewer_open(); break; - case IDM_SCRNMUL4: // ver0.26 + case IDM_SCRNMUL4: case IDM_SCRNMUL6: case IDM_SCRNMUL8: case IDM_SCRNMUL10: @@ -930,6 +1032,14 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT if (subwin) { 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)); default: @@ -971,7 +1081,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT GetClientRect(hWnd, &rect); width = rect.right - rect.left; height = rect.bottom - rect.top; - hbmp = LoadBitmap(hinst, "NP2BMP"); + hbmp = LoadBitmap(hinst, _T("NP2BMP")); GetObject(hbmp, sizeof(BITMAP), &bmp); hbrush = (HBRUSH)SelectObject(hdc, GetStockObject(BLACK_BRUSH)); @@ -997,14 +1107,13 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT break; case WM_MOVE: - if (!scrnmng_isfullscreen()) { - if (!(GetWindowLong(hWnd, GWL_STYLE) & - (WS_MAXIMIZE | WS_MINIMIZE))) { - GetWindowRect(hWnd, &rc); - np2oscfg.winx = rc.left; - np2oscfg.winy = rc.top; - sysmng_update(SYS_UPDATEOSCFG); - } + if ((!scrnmng_isfullscreen()) && + (!(GetWindowLong(hWnd, GWL_STYLE) & + (WS_MAXIMIZE | WS_MINIMIZE)))) { + GetWindowRect(hWnd, &rc); + np2oscfg.winx = rc.left; + np2oscfg.winy = rc.top; + sysmng_update(SYS_UPDATEOSCFG); } break; @@ -1123,7 +1232,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT } break; - case WM_MBUTTONDOWN: // ver0.26 + case WM_MBUTTONDOWN: mousemng_toggle(MOUSEPROC_SYSTEM); xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); @@ -1175,7 +1284,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT } else if (sstpconfirm_exit()) { winuienter(); - if (MessageBox(hWnd, "Sure?", "Exit", + if (MessageBox(hWnd, _T("Sure?"), _T("Exit"), MB_ICONQUESTION | MB_YESNO) == IDYES) { b = TRUE; } @@ -1257,8 +1366,10 @@ static void framereset(UINT cnt) { framecnt = 0; scrnmng_dispclock(); - kdispwin_draw((BYTE)cnt); - toolwin_draw((BYTE)cnt); + kdispwin_draw((UINT8)cnt); + skbdwin_process(); + mdbgwin_process(); + toolwin_draw((UINT8)cnt); viewer_allreload(FALSE); if (np2oscfg.DISPCLK & 3) { if (sysmng_workclockrenewal()) { @@ -1286,23 +1397,29 @@ int WINAPI WinMain(HINSTANCE hInstance, MSG msg; HWND hWnd; UINT i; + DWORD style; #ifdef OPENING_WAIT UINT32 tick; #endif + BOOL xrollkey; _MEM_INIT(); - GetModuleFileName(NULL, modulefile, sizeof(modulefile)); + GetModuleFileName(NULL, modulefile, NELEMENTS(modulefile)); dosio_init(); file_setcd(modulefile); - np2arg_analize(lpszCmdLine); + np2arg_analize(); initload(); toolwin_readini(); kdispwin_readini(); + skbdwin_readini(); + mdbgwin_readini(); 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) { sstpmsg_running(); @@ -1318,10 +1435,12 @@ int WINAPI WinMain(HINSTANCE hInstance, mmxflag += (np2oscfg.disablemmx)?MMXFLAG_DISABLE:0; TRACEINIT(); - if (np2oscfg.KEYBOARD >= KEY_TYPEMAX) { // ver0.28 + xrollkey = (np2oscfg.xrollkey == 0); + if (np2oscfg.KEYBOARD >= KEY_TYPEMAX) { int keytype = GetKeyboardType(1); if ((keytype & 0xff00) == 0x0d00) { np2oscfg.KEYBOARD = KEY_PC98; + xrollkey = !xrollkey; } else if (!keytype) { np2oscfg.KEYBOARD = KEY_KEY101; @@ -1330,7 +1449,9 @@ int WINAPI WinMain(HINSTANCE hInstance, np2oscfg.KEYBOARD = KEY_KEY106; } } - keystat_reset(); + winkbd_roll(xrollkey); + winkbd_setf12(np2oscfg.F12COPY); + keystat_initialize(); np2class_initialize(hInstance); if (!hPreInst) { @@ -1350,24 +1471,20 @@ int WINAPI WinMain(HINSTANCE hInstance, } toolwin_initapp(hInstance); kdispwin_initialize(hPreInst); + skbdwin_initialize(hPreInst); + mdbgwin_initialize(hPreInst); viewer_init(hPreInst); -#if 1 - hWndMain = CreateWindowEx(0, - szClassName, np2oscfg.titles, - WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | - WS_THICKFRAME | WS_MINIMIZEBOX, - np2oscfg.winx, np2oscfg.winy, 640, 400, - NULL, NULL, hInstance, NULL); -#else // テスト - hWndMain = CreateWindowEx(0, - szClassName, np2oscfg.titles, - WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | - WS_MINIMIZEBOX, + mousemng_initialize(); + + style = WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX; + if (np2oscfg.thickframe) { + style |= WS_THICKFRAME; + } + hWnd = CreateWindowEx(0, szClassName, np2oscfg.titles, style, np2oscfg.winx, np2oscfg.winy, 640, 400, NULL, NULL, hInstance, NULL); -#endif - hWnd = hWndMain; + hWndMain = hWnd; scrnmng_initialize(); xmenu_setroltate(0); @@ -1392,7 +1509,6 @@ int WINAPI WinMain(HINSTANCE hInstance, xmenu_setbtnrapid(np2cfg.BTN_RAPID); xmenu_setmsrapid(np2cfg.MOUSERAPID); xmenu_setsstp(np2oscfg.sstp); - xmenu_seti286save(np2oscfg.I286SAVE); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); @@ -1405,8 +1521,7 @@ int WINAPI WinMain(HINSTANCE hInstance, xmenu_initialize(); DrawMenuBar(hWnd); - // ver0.30 - if (file_attr_c(np2help) == (short)-1) { + if (file_attr_c(np2help) == (short)-1) { // ver0.30 EnableMenuItem(GetMenu(hWnd), IDM_HELP, MF_GRAYED); } @@ -1415,7 +1530,7 @@ int WINAPI WinMain(HINSTANCE hInstance, sysmenu_setwinsnap(np2oscfg.WINSNAP); sysmenu_setbackground(np2oscfg.background); sysmenu_setbgsound(np2oscfg.background); - sysmenu_setscrnmul(8); // ver0.26 + sysmenu_setscrnmul(8); scrnmode = 0; if (np2arg.fullscreen) { @@ -1428,7 +1543,7 @@ int WINAPI WinMain(HINSTANCE hInstance, scrnmode ^= SCRNMODE_FULLSCREEN; if (scrnmng_create(scrnmode) != SUCCESS) { if (sstpmsg_dxerror()) { - MessageBox(hWnd, "Couldn't create DirectDraw Object", + MessageBox(hWnd, _T("Couldn't create DirectDraw Object"), np2oscfg.titles, MB_OK | MB_ICONSTOP); } return(FALSE); @@ -1436,8 +1551,8 @@ int WINAPI WinMain(HINSTANCE hInstance, } if (soundmng_initialize() == SUCCESS) { - soundmng_pcmload(SOUND_PCMSEEK, "SEEKWAV", EXTROMIO_RES); - soundmng_pcmload(SOUND_PCMSEEK1, "SEEK1WAV", EXTROMIO_RES); + soundmng_pcmload(SOUND_PCMSEEK, OEMTEXT("SEEKWAV"), EXTROMIO_RES); + soundmng_pcmload(SOUND_PCMSEEK1, OEMTEXT("SEEK1WAV"), EXTROMIO_RES); soundmng_pcmvolume(SOUND_PCMSEEK, np2cfg.MOTORVOL); soundmng_pcmvolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL); } @@ -1446,17 +1561,14 @@ int WINAPI WinMain(HINSTANCE hInstance, juliet_initialize(); } - mousemng_initialize(); if (np2oscfg.MOUSE_SW) { // ver0.30 mousemng_enable(MOUSEPROC_SYSTEM); } -// mousemng_enable(MOUSEPROC_WINUI); -// mousemng_enable(MOUSEPROC_BG); commng_initialize(); sysmng_initialize(); - joy_init(); + joymng_initialize(); pccore_init(); S98_init(); @@ -1473,12 +1585,15 @@ int WINAPI WinMain(HINSTANCE hInstance, np2opening = 0; // れじうむ +#if defined(SUPPORT_RESUME) if (np2oscfg.resume) { int id; id = flagload(str_sav, str_resume, FALSE); 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) { DestroyWindow(hWnd); @@ -1494,12 +1609,12 @@ int WINAPI WinMain(HINSTANCE hInstance, return(0); } } +#endif -// リセットしてから… コマンドラインのディスク挿入。 // ver0.29 +// リセットしてから… コマンドラインのディスク挿入。 for (i=0; i<4; i++) { if (np2arg.disk[i]) { - milstr_ncpy(diskdrv_fname[i], np2arg.disk[i], MAX_PATH); - diskdrv_delay[i] = 1; + diskdrv_readyfdd((REG8)i, np2arg.disk[i], 0); } } @@ -1527,8 +1642,8 @@ int WINAPI WinMain(HINSTANCE hInstance, } else { if (np2oscfg.NOWAIT) { - joy_flash(); - mousemng_callback(); + joymng_sync(); + mousemng_sync(); pccore_exec(framecnt == 0); dclock_callback(); if (np2oscfg.DRAW_SKIP) { // nowait frame skip @@ -1546,8 +1661,8 @@ int WINAPI WinMain(HINSTANCE hInstance, } else if (np2oscfg.DRAW_SKIP) { // frame skip if (framecnt < np2oscfg.DRAW_SKIP) { - joy_flash(); - mousemng_callback(); + joymng_sync(); + mousemng_sync(); pccore_exec(framecnt == 0); dclock_callback(); framecnt++; @@ -1559,8 +1674,8 @@ int WINAPI WinMain(HINSTANCE hInstance, else { // auto skip if (!waitcnt) { UINT cnt; - joy_flash(); - mousemng_callback(); + joymng_sync(); + mousemng_sync(); pccore_exec(framecnt == 0); dclock_callback(); framecnt++; @@ -1602,18 +1717,22 @@ int WINAPI WinMain(HINSTANCE hInstance, } toolwin_destroy(); kdispwin_destroy(); + skbdwin_destroy(); + mdbgwin_destroy(); pccore_cfgupdate(); mousemng_disable(MOUSEPROC_WINUI); S98_trash(); +#if defined(SUPPORT_RESUME) if (np2oscfg.resume) { flagsave(str_sav); } else { flagdelete(str_sav); } +#endif juliet_YMF288Reset(); pccore_term(); @@ -1629,13 +1748,16 @@ int WINAPI WinMain(HINSTANCE hInstance, initsave(); toolwin_writeini(); kdispwin_writeini(); + skbdwin_writeini(); + mdbgwin_writeini(); } + skbdwin_deinitialize(); TRACETERM(); _MEM_USED("report.txt"); dosio_term(); - viewer_term(); // ver0.30 + viewer_term(); // ver0.30 return(msg.wParam); }