--- np2/win9xc/np2.cpp 2004/02/18 06:19:01 1.17 +++ np2/win9xc/np2.cpp 2005/03/20 08:58:20 1.32 @@ -18,6 +18,7 @@ #include "winkbd.h" #include "ini.h" #include "menu.h" +#include "subwind.h" #include "dialog.h" #include "cpucore.h" #include "pccore.h" @@ -40,12 +41,14 @@ #define OPENING_WAIT 1500 #endif -#if defined(CPUCORE_IA32) - const char szAppCaption[] = "Neko Project II (IA-32)"; +#if defined(SUPPORT_PC9821) + const TCHAR szAppCaption[] = _T("Neko Project-21"); +#elif defined(CPUCORE_IA32) + const TCHAR szAppCaption[] = _T("Neko Project II (IA-32)"); #else - const char szAppCaption[] = "Neko Project II (C Version)"; + const TCHAR szAppCaption[] = _T("Neko Project II (C Version)"); #endif -static const char szClassName[] = "NP2-MainWindow"; +static const TCHAR szClassName[] = _T("NP2-MainWindow"); HWND hWndMain; HINSTANCE hInst; HINSTANCE hPrev; @@ -54,23 +57,23 @@ static const char szClassName[] = "NP2-M CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, KEY_UNKNOWN, 0, 0, 0, 0, {1, 2, 2, 1}, - 0, 0}; + 0, 0, 0}; - char modulefile[MAX_PATH]; - char fddfolder[MAX_PATH]; - char hddfolder[MAX_PATH]; - char bmpfilefolder[MAX_PATH]; + TCHAR modulefile[MAX_PATH]; + TCHAR fddfolder[MAX_PATH]; + TCHAR hddfolder[MAX_PATH]; + TCHAR bmpfilefolder[MAX_PATH]; static UINT framecnt = 0; static UINT waitcnt = 0; static UINT framemax = 1; static int np2opening = 1; static int np2quitmsg = 0; -static BYTE scrnmode; +static UINT8 scrnmode; -static const char np2help[] = "np2.chm"; -static const char np2flagext[] = "S%02d"; +static const TCHAR np2help[] = _T("np2.chm"); +static const TCHAR np2flagext[] = _T("S%02d"); static void winuienter(void) { @@ -85,10 +88,10 @@ static void winuileave(void) { soundmng_enable(SNDPROC_MAIN); } -static void changescreen(BYTE newmode) { +static void changescreen(UINT8 newmode) { - BYTE change; - BYTE renewal; + UINT8 change; + UINT8 renewal; change = scrnmode ^ newmode; renewal = (change & SCRNMODE_FULLSCREEN); @@ -121,6 +124,75 @@ static void changescreen(BYTE newmode) { } +// ---- resume and statsave + +#define SUPPORT_RESUME + +#if defined(SUPPORT_RESUME) || defined(SUPPORT_STATSAVE) +static void getstatfilename(TCHAR *path, const TCHAR *ext, int size) { + + file_cpyname(path, modulefile, size); + file_cutext(path); + file_catname(path, str_dot, size); + file_catname(path, ext, size); +} + +static int flagsave(const TCHAR *ext) { + + int ret; + TCHAR path[MAX_PATH]; + + getstatfilename(path, ext, NELEMENTS(path)); + soundmng_stop(); + ret = statsave_save(path); + if (ret) { + file_delete(path); + } + soundmng_play(); + return(ret); +} + +static void flagdelete(const TCHAR *ext) { + + TCHAR path[MAX_PATH]; + + getstatfilename(path, ext, NELEMENTS(path)); + file_delete(path); +} + +static int flagload(const TCHAR *ext, const TCHAR *title, BOOL force) { + + int ret; + int id; + TCHAR path[MAX_PATH]; + TCHAR buf[1024]; + + getstatfilename(path, ext, NELEMENTS(path)); + winuienter(); + id = IDYES; + ret = statsave_check(path, buf, NELEMENTS(buf)); + if (ret & (~STATFLAG_DISKCHG)) { + MessageBox(hWndMain, _T("Couldn't restart"), title, + MB_OK | MB_ICONSTOP); + id = IDNO; + } + else if ((!force) && (ret & STATFLAG_DISKCHG)) { + TCHAR buf2[1024 + 256]; + wsprintf(buf2, _T("Conflict!\n\n%s\nContinue?"), buf); + id = MessageBox(hWndMain, buf2, title, + MB_YESNOCANCEL | MB_ICONQUESTION); + } + if (id == IDYES) { + statsave_load(path); + } + sysmng_workclockreset(); + sysmng_updatecaption(); + winuileave(); + return(id); +} +#endif + + // ---- proc static void np2cmd(HWND hWnd, UINT16 cmd) { @@ -441,6 +513,16 @@ static void np2cmd(HWND hWnd, UINT16 cmd 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); @@ -471,13 +553,20 @@ static void np2cmd(HWND hWnd, UINT16 cmd dialog_writebmp(hWnd); winuileave(); break; - +#if defined(SUPPPORT_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_CALENDAR: winuienter(); DialogBox(hInst, MAKEINTRESOURCE(IDD_CALENDAR), @@ -576,7 +665,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)); @@ -612,6 +701,12 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT } break; + case WM_SIZE: + if (wParam == SIZE_RESTORED) { + scrnmng_restoresize(); + } + break; + case WM_ENTERMENULOOP: winuienter(); if (scrnmng_isfullscreen()) { @@ -731,6 +826,8 @@ static void framereset(void) { framecnt = 0; sysmng_updatecaption(); + memdbg_process(); + skbdwin_process(); } static void processwait(UINT cnt) { @@ -758,11 +855,13 @@ int WINAPI WinMain(HINSTANCE hInstance, _MEM_INIT(); - GetModuleFileName(NULL, modulefile, sizeof(modulefile)); + GetModuleFileName(NULL, modulefile, NELEMENTS(modulefile)); dosio_init(); file_setcd(modulefile); - np2arg_analize(lpszCmdLine); + np2arg_analize(); initload(); + memdbg_readini(); + skbdwin_readini(); rand_setseed((unsigned)time(NULL)); @@ -789,7 +888,7 @@ int WINAPI WinMain(HINSTANCE hInstance, np2oscfg.KEYBOARD = KEY_KEY106; } } - keystat_reset(); + keystat_initialize(); if (!hPreInst) { wc.style = CS_BYTEALIGNCLIENT | CS_HREDRAW | CS_VREDRAW; @@ -806,6 +905,8 @@ int WINAPI WinMain(HINSTANCE hInstance, return(FALSE); } } + memdbg_initialize(hInstance); + skbdwin_initialize(hInstance); mousemng_initialize(); @@ -863,7 +964,7 @@ int WINAPI WinMain(HINSTANCE hInstance, if (scrnmng_create(scrnmode) != SUCCESS) { scrnmode ^= SCRNMODE_FULLSCREEN; if (scrnmng_create(scrnmode) != SUCCESS) { - MessageBox(hWnd, "Couldn't create DirectDraw Object", + MessageBox(hWnd, _T("Couldn't create DirectDraw Object"), szAppCaption, MB_OK | MB_ICONSTOP); return(FALSE); } @@ -891,6 +992,29 @@ 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; + } + else if (id == IDCANCEL) { + DestroyWindow(hWnd); + mousemng_disable(MOUSEPROC_WINUI); + S98_trash(); + pccore_term(); + soundmng_deinitialize(); + scrnmng_destroy(); + TRACETERM(); + dosio_term(); + return(0); + } + } +#endif + // リセットしてから… コマンドラインのディスク挿入。 // ver0.29 for (i=0; i<4; i++) { if (np2arg.disk[i]) { @@ -899,6 +1023,9 @@ int WINAPI WinMain(HINSTANCE hInstance, } } + memdbg_create(); + skbdwin_create(); + while(1) { if (PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE)) { if (!GetMessage(&msg, NULL, 0, 0)) { @@ -979,15 +1106,30 @@ int WINAPI WinMain(HINSTANCE hInstance, mousemng_disable(MOUSEPROC_WINUI); S98_trash(); +#if defined(SUPPORT_RESUME) + if (np2oscfg.resume) { + flagsave(str_sav); + } + else { + flagdelete(str_sav); + } +#endif + pccore_term(); + memdbg_destroy(); + skbdwin_destroy(); soundmng_deinitialize(); scrnmng_destroy(); if (sys_updates & (SYS_UPDATECFG | SYS_UPDATEOSCFG)) { initsave(); + memdbg_writeini(); + skbdwin_writeini(); } + skbdwin_deinitialize(); + TRACETERM(); _MEM_USED("report.txt"); dosio_term();