--- np2/win9x/np2.cpp 2003/11/04 15:44:59 1.24 +++ np2/win9x/np2.cpp 2004/01/22 01:10:05 1.35 @@ -43,9 +43,9 @@ #include "diskdrv.h" #include "fddfile.h" #include "timing.h" -#include "statsave.h" #include "debugsub.h" #include "keydisp.h" +#include "kdispwin.h" #include "viewer.h" @@ -65,7 +65,7 @@ static char szClassName[] = "NP2-MainWi NP2OSCFG np2oscfg = { "Neko Project II", "NP2", - CW_USEDEFAULT, CW_USEDEFAULT, 1, 1, 0, 1, 0, 2, + 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 @@ -73,7 +73,7 @@ static char szClassName[] = "NP2-MainWi {0, 0, 0x3e, 19200, "", "", "", ""}, // ver0.34 {0, 0, 0x3e, 19200, "", "", "", ""}, // ver0.34 0xffffff, 0xffbf6a, 0, 0, - 0, 1, 0, 9801, 0, 0, 0, 0, 0, 0, 0, 0}; // ver0.38 + 0, 1, 0, 9801, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // ver0.73 char fddfolder[MAX_PATH]; char hddfolder[MAX_PATH]; @@ -92,8 +92,6 @@ static WINLOCEX smwlex; static const char np2help[] = "np2.chm"; static const char np2flagext[] = "S%02d"; -static const char np2resumeext[] = "sav"; - static void winuienter(void) { @@ -117,7 +115,7 @@ WINLOCEX np2_winlocexallwin(HWND base) { list[0] = hWndMain; list[1] = toolwin_gethwnd(); - list[2] = keydisp_gethwnd(); + list[2] = kdispwin_gethwnd(); for (i=0; i<3; i++) { if (list[i] == base) { list[i] = NULL; @@ -147,10 +145,11 @@ static void changescreen(BYTE newmode) { if (renewal) { if (renewal & SCRNMODE_FULLSCREEN) { toolwin_destroy(); - keydisp_destroy(); + kdispwin_destroy(); } else if (renewal & SCRNMODE_ROTATEMASK) { wlex = np2_winlocexallwin(hWndMain); + winlocex_setholdwnd(wlex, hWndMain); } soundmng_stop(); mousemng_disable(MOUSEPROC_WINUI); @@ -171,7 +170,7 @@ static void changescreen(BYTE newmode) { toolwin_create(); } if (np2oscfg.keydisp) { - keydisp_create(); + kdispwin_create(); } } } @@ -300,6 +299,27 @@ static int flagload(const char *ext, con // ---- proc +static void np2popup(HWND hWnd, LPARAM lp) { + + HMENU mainmenu; + HMENU hMenu; + POINT pt; + + mainmenu = (HMENU)GetWindowLong(hWnd, NP2GWL_HMENU); + if (mainmenu == NULL) { + return; + } + hMenu = CreatePopupMenu(); + menu_addmenubar(hMenu, mainmenu); + pt.x = LOWORD(lp); + pt.y = HIWORD(lp); + ClientToScreen(hWnd, &pt); + TrackPopupMenu(hMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL); + DestroyMenu(hMenu); +} + +// extern "C" void iptrace_out(void); + LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; @@ -337,10 +357,10 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT case IDM_KEYDISP: sysmenu_setkeydisp(np2oscfg.keydisp ^ 1); if (np2oscfg.keydisp) { - keydisp_create(); + kdispwin_create(); } else { - keydisp_destroy(); + kdispwin_destroy(); } break; @@ -402,7 +422,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT if (subwin) { ShowWindow(subwin, SW_SHOWNOACTIVATE); } - subwin = keydisp_gethwnd(); + subwin = kdispwin_gethwnd(); if (subwin) { ShowWindow(subwin, SW_SHOWNOACTIVATE); } @@ -485,22 +505,22 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT case IDM_SASI1OPEN: winuienter(); - dialog_changehdd(hWnd, 0); + dialog_changehdd(hWnd, 0x00); winuileave(); break; case IDM_SASI1EJECT: - diskdrv_sethdd(0, NULL); + diskdrv_sethdd(0x00, NULL); break; case IDM_SASI2OPEN: winuienter(); - dialog_changehdd(hWnd, 1); + dialog_changehdd(hWnd, 0x01); winuileave(); break; case IDM_SASI2EJECT: - diskdrv_sethdd(1, NULL); + diskdrv_sethdd(0x01, NULL); break; case IDM_WINDOW: @@ -583,61 +603,67 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT 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_UPDATECFG; + update |= SYS_UPDATEOSCFG; break; case IDM_F12COPY: xmenu_setf12copy(1); winkbd_resetf12(); - update |= SYS_UPDATECFG; + update |= SYS_UPDATEOSCFG; break; case IDM_F12STOP: xmenu_setf12copy(2); winkbd_resetf12(); - update |= SYS_UPDATECFG; + update |= SYS_UPDATEOSCFG; break; case IDM_F12EQU: xmenu_setf12copy(3); winkbd_resetf12(); - update |= SYS_UPDATECFG; + update |= SYS_UPDATEOSCFG; break; case IDM_F12COMMA: xmenu_setf12copy(4); winkbd_resetf12(); - update |= SYS_UPDATECFG; + update |= SYS_UPDATEOSCFG; break; case IDM_BEEPOFF: @@ -665,66 +691,38 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT break; case IDM_NOSOUND: - xmenu_setsound(0); + xmenu_setsound(0x00); update |= SYS_UPDATECFG; break; case IDM_PC9801_14: - xmenu_setsound(1); + xmenu_setsound(0x01); update |= SYS_UPDATECFG; break; case IDM_PC9801_26K: - { - BYTE sw; - sw = np2cfg.SOUND_SW; - if (sw & 4) { - sw &= 6; - sw ^= 2; - } - else { - sw = 2; - } - xmenu_setsound(sw); - update |= SYS_UPDATECFG; - } + xmenu_setsound(0x02); + update |= SYS_UPDATECFG; break; case IDM_PC9801_86: - { - BYTE sw; - sw = np2cfg.SOUND_SW; - if (sw & 2) { - sw &= 6; - sw ^= 4; - } - else if (!(sw & 4)) { - sw = 4; - } - xmenu_setsound(sw); - update |= SYS_UPDATECFG; - } + xmenu_setsound(0x04); + update |= SYS_UPDATECFG; break; - case IDM_PC9801_118: - xmenu_setsound(8); + case IDM_PC9801_26_86: + xmenu_setsound(0x06); update |= SYS_UPDATECFG; break; - case IDM_CHIBIOTO: - { - BYTE sw; - sw = np2cfg.SOUND_SW; - if (sw & 4) { - sw &= 0x14; - sw ^= 0x10; - } - else { - sw = 0x14; - } - xmenu_setsound(sw); - update |= SYS_UPDATECFG; - } + 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: @@ -742,10 +740,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT update |= SYS_UPDATECFG; break; - case IDM_SNDOPT: - winuienter(); - dialog_sndopt(hWnd); - winuileave(); + case IDM_JASTSOUND: + xmenu_setjastsound(np2oscfg.jastsnd ^ 1); + update |= SYS_UPDATEOSCFG; break; case IDM_SEEKSND: @@ -798,6 +795,12 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT pc9861k_midipanic(); break; + case IDM_SNDOPT: + winuienter(); + dialog_sndopt(hWnd); + winuileave(); + break; + case IDM_BMPSAVE: winuienter(); dialog_writebmp(hWnd); @@ -859,6 +862,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT case IDM_I286SAVE: debugsub_status(); +// iptrace_out(); break; case IDM_HELP: @@ -1085,8 +1089,11 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT case WM_RBUTTONDOWN: if (!mousemng_buttonevent(MOUSEMNG_RIGHTDOWN)) { - if (scrnmng_isfullscreen()) { - POINT p; + if (!scrnmng_isfullscreen()) { + np2popup(hWnd, lParam); + } + else { + POINT p; if ((GetCursorPos(&p)) && (p.y >= 466) && (np2oscfg.clk_x)) { np2oscfg.clk_fnt++; @@ -1111,6 +1118,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT np2oscfg.wintype = 0; } wlex = np2_winlocexallwin(hWnd); + winlocex_setholdwnd(wlex, hWnd); np2class_windowtype(hWnd, np2oscfg.wintype); winlocex_move(wlex); winlocex_destroy(wlex); @@ -1132,7 +1140,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT winuileave(); } if (b) { - keydisp_destroy(); viewer_allclose(); DestroyWindow(hWnd); } @@ -1203,24 +1210,30 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT } +static void framereset(UINT cnt) { + + framecnt = 0; + scrnmng_dispclock(); + kdispwin_draw((BYTE)cnt); + toolwin_draw((BYTE)cnt); + viewer_allreload(FALSE); + if (np2oscfg.DISPCLK & 3) { + if (sysmng_workclockrenewal()) { + sysmng_updatecaption(3); + } + } +} + static void processwait(UINT cnt) { if (timing_getcount() >= cnt) { timing_setcount(0); - framecnt = 0; - scrnmng_dispclock(); - keydisp_draw((BYTE)cnt); - toolwin_draw((BYTE)cnt); - viewer_allreload(FALSE); - if (np2oscfg.DISPCLK & 3) { - if (sysmng_workclockrenewal()) { - sysmng_updatecaption(3); - } - } + framereset(cnt); } else { Sleep(1); } + soundmng_sync(); } @@ -1229,28 +1242,30 @@ int WINAPI WinMain(HINSTANCE hInstance, WNDCLASS wc; MSG msg; HMENU hMenu; - HWND hwndorg; + HWND hWnd; UINT i; #ifdef OPENING_WAIT UINT32 tick; #endif + _MEM_INIT(); + GetModuleFileName(NULL, modulefile, sizeof(modulefile)); dosio_init(); file_setcd(modulefile); np2arg_analize(lpszCmdLine); initload(); toolwin_readini(); - keydisp_readini(); + kdispwin_readini(); rand_setseed((unsigned)time(NULL)); CopyMemory(szClassName, np2oscfg.winid, 3); - if ((hwndorg = FindWindow(szClassName, NULL)) != NULL) { + if ((hWnd = FindWindow(szClassName, NULL)) != NULL) { sstpmsg_running(); - ShowWindow(hwndorg, SW_RESTORE); - SetForegroundWindow(hwndorg); + ShowWindow(hWnd, SW_RESTORE); + SetForegroundWindow(hWnd); dosio_term(); return(FALSE); } @@ -1292,39 +1307,53 @@ int WINAPI WinMain(HINSTANCE hInstance, } } toolwin_initapp(hInstance); - keydisp_initialize(hPreInst); - viewer_init(hPreInst); // ver0.30 + kdispwin_initialize(hPreInst); + viewer_init(hPreInst); - hWndMain = CreateWindow(szClassName, np2oscfg.titles, +#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, + np2oscfg.winx, np2oscfg.winy, 640, 400, + NULL, NULL, hInstance, NULL); +#endif + hWnd = hWndMain; scrnmng_initialize(); - xmenu_setsound(np2cfg.SOUND_SW); - xmenu_setbeepvol(np2cfg.BEEP_VOL); - xmenu_setkey(0); - xmenu_setbtnrapid(np2cfg.BTN_RAPID); - xmenu_setbtnmode(np2cfg.BTN_MODE); - xmenu_setmsrapid(np2cfg.MOUSERAPID); + xmenu_setroltate(0); + xmenu_setdispmode(np2cfg.DISPSYNC); + xmenu_setraster(np2cfg.RASTER); xmenu_setwaitflg(np2oscfg.NOWAIT); xmenu_setframe(np2oscfg.DRAW_SKIP); - xmenu_setdispmode(np2cfg.DISPSYNC); - xmenu_setdispclk(np2oscfg.DISPCLK); - xmenu_seti286save(np2oscfg.I286SAVE); - xmenu_setmotorflg(np2cfg.MOTOR); - xmenu_setroltate(0); + + xmenu_setkey(0); xmenu_setxshift(0); xmenu_setf12copy(np2oscfg.F12COPY); + xmenu_setbeepvol(np2cfg.BEEP_VOL); + xmenu_setsound(np2cfg.SOUND_SW); + xmenu_setjastsound(np2oscfg.jastsnd); + xmenu_setmotorflg(np2cfg.MOTOR); xmenu_setextmem(np2cfg.EXTMEM); - xmenu_setraster(np2cfg.RASTER); - xmenu_setshortcut(np2oscfg.shortcut); // ver0.30 - xmenu_setsstp(np2oscfg.sstp); xmenu_setmouse(np2oscfg.MOUSE_SW); - ShowWindow(hWndMain, nCmdShow); - UpdateWindow(hWndMain); + xmenu_setshortcut(np2oscfg.shortcut); + xmenu_setdispclk(np2oscfg.DISPCLK); + xmenu_setbtnmode(np2cfg.BTN_MODE); + xmenu_setbtnrapid(np2cfg.BTN_RAPID); + xmenu_setmsrapid(np2cfg.MOUSERAPID); + xmenu_setsstp(np2oscfg.sstp); + xmenu_seti286save(np2oscfg.I286SAVE); + + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); #ifdef OPENING_WAIT tick = GetTickCount(); @@ -1333,7 +1362,7 @@ int WINAPI WinMain(HINSTANCE hInstance, // めにゅー追加 if (np2oscfg.statsave) { char buf[16]; - hMenu = GetMenu(hWndMain); + hMenu = GetMenu(hWnd); hStat = CreatePopupMenu(); for (i=0; i