--- np2/win9x/subwind.cpp 2004/03/25 10:41:13 1.2 +++ np2/win9x/subwind.cpp 2007/11/11 07:11:27 1.15 @@ -10,6 +10,7 @@ #include "subwind.h" #include "np2class.h" #include "keydisp.h" +#include "memdbg32.h" #include "softkbd.h" @@ -19,7 +20,7 @@ static void wintypechange(HWND hWnd, UIN WINLOCEX wlex; - wlex = np2_winlocexallwin(hWndMain); + wlex = np2_winlocexallwin(g_hWndMain); winlocex_setholdwnd(wlex, hWnd); np2class_windowtype(hWnd, type); winlocex_move(wlex); @@ -43,38 +44,41 @@ typedef struct { HWND hwnd; WINLOCEX wlex; DD2HDL dd2hdl; -} KDWIN; +} KDISPWIN; typedef struct { int posx; int posy; - BYTE mode; - BYTE type; + UINT8 mode; + UINT8 type; } KDISPCFG; -static KDWIN kdwin; +static KDISPWIN kdispwin; static KDISPCFG kdispcfg; -static const char np2kdcaption[] = "Key Display"; -static const char np2kdclass[] = "NP2-KeyDispWin"; -static const char str_kdclose[] = "&Close"; +static const TCHAR kdisptitle[] = _T("Key Display"); +static const TCHAR kdispclass[] = _T("NP2-KeyDispWin"); +static const TCHAR str_kdclose[] = _T("&Close"); -static const UINT32 kdwinpal[KEYDISP_PALS] = +static const UINT32 kdisppal[KEYDISP_PALS] = {0x00000000, 0xffffffff, 0xf9ff0000}; -static const char np2kdapp[] = "NP2 keydisp"; - -static const INITBL np2kdini[] = { - {"WindposX", INITYPE_SINT32, &kdispcfg.posx, 0}, - {"WindposY", INITYPE_SINT32, &kdispcfg.posy, 0}, - {"keydmode", INITYPE_UINT8, &kdispcfg.mode, 0}, - {"windtype", INITYPE_BOOL, &kdispcfg.type, 0}}; +#if defined(OSLANG_UTF8) +static const OEMCHAR kdispapp[] = OEMTEXT("Key Display"); +#else +#define kdispapp kdisptitle +#endif +static const PFTBL kdispini[] = { + PFVAL("WindposX", PFTYPE_SINT32, &kdispcfg.posx), + PFVAL("WindposY", PFTYPE_SINT32, &kdispcfg.posy), + PFVAL("keydmode", PFTYPE_UINT8, &kdispcfg.mode), + PFVAL("windtype", PFTYPE_BOOL, &kdispcfg.type)}; -static BYTE kdgetpal8(CMNPALFN *self, UINT num) { +static UINT8 kdgetpal8(CMNPALFN *self, UINT num) { if (num < KEYDISP_PALS) { - return(kdwinpal[num] >> 24); + return(kdisppal[num] >> 24); } return(0); } @@ -82,7 +86,7 @@ static BYTE kdgetpal8(CMNPALFN *self, UI static UINT32 kdgetpal32(CMNPALFN *self, UINT num) { if (num < KEYDISP_PALS) { - return(kdwinpal[num] & 0xffffff); + return(kdisppal[num] & 0xffffff); } return(0); } @@ -106,11 +110,11 @@ static void kddrawkeys(HWND hWnd, BOOL r if ((draw.right <= 0) || (draw.bottom <= 0)) { return; } - vram = dd2_bsurflock(kdwin.dd2hdl); + vram = dd2_bsurflock(kdispwin.dd2hdl); if (vram) { keydisp_paint(vram, redraw); - dd2_bsurfunlock(kdwin.dd2hdl); - dd2_blt(kdwin.dd2hdl, NULL, &draw); + dd2_bsurfunlock(kdispwin.dd2hdl); + dd2_blt(kdispwin.dd2hdl, NULL, &draw); } } @@ -120,20 +124,20 @@ static void kdsetwinsize(void) { int height; WINLOCEX wlex; - wlex = np2_winlocexallwin(hWndMain); - winlocex_setholdwnd(wlex, kdwin.hwnd); + wlex = np2_winlocexallwin(g_hWndMain); + winlocex_setholdwnd(wlex, kdispwin.hwnd); keydisp_getsize(&width, &height); - winloc_setclientsize(kdwin.hwnd, width, height); + winloc_setclientsize(kdispwin.hwnd, width, height); winlocex_move(wlex); winlocex_destroy(wlex); } -static void kdsetdispmode(BYTE mode) { +static void kdsetdispmode(UINT8 mode) { HMENU hmenu; keydisp_setmode(mode); - hmenu = np2class_gethmenu(kdwin.hwnd); + hmenu = np2class_gethmenu(kdispwin.hwnd); CheckMenuItem(hmenu, IDM_KDISPFM, ((mode == KEYDISP_MODEFM)?MF_CHECKED:MF_UNCHECKED)); CheckMenuItem(hmenu, IDM_KDISPMIDI, @@ -222,7 +226,7 @@ static LRESULT CALLBACK kdproc(HWND hWnd case WM_KEYDOWN: case WM_KEYUP: - SendMessage(hWndMain, msg, wp, lp); + SendMessage(g_hWndMain, msg, wp, lp); break; case WM_ENTERMENULOOP: @@ -235,17 +239,17 @@ static LRESULT CALLBACK kdproc(HWND hWnd case WM_ENTERSIZEMOVE: soundmng_disable(SNDPROC_SUBWIND); - winlocex_destroy(kdwin.wlex); - kdwin.wlex = np2_winlocexallwin(hWnd); + winlocex_destroy(kdispwin.wlex); + kdispwin.wlex = np2_winlocexallwin(hWnd); break; case WM_MOVING: - winlocex_moving(kdwin.wlex, (RECT *)lp); + winlocex_moving(kdispwin.wlex, (RECT *)lp); break; case WM_EXITSIZEMOVE: - winlocex_destroy(kdwin.wlex); - kdwin.wlex = NULL; + winlocex_destroy(kdispwin.wlex); + kdispwin.wlex = NULL; soundmng_enable(SNDPROC_SUBWIND); break; @@ -268,8 +272,8 @@ static LRESULT CALLBACK kdproc(HWND hWnd case WM_DESTROY: np2class_wmdestroy(hWnd); - dd2_release(kdwin.dd2hdl); - kdwin.hwnd = NULL; + dd2_release(kdispwin.dd2hdl); + kdispwin.hwnd = NULL; kdsetdispmode(KEYDISP_MODENONE); break; @@ -279,50 +283,45 @@ static LRESULT CALLBACK kdproc(HWND hWnd return(0L); } - -// ---- - -BOOL kdispwin_initialize(HINSTANCE hPreInst) { +BOOL kdispwin_initialize(HINSTANCE hInstance) { WNDCLASS wc; - if (!hPreInst) { - ZeroMemory(&wc, sizeof(wc)); - wc.style = CS_BYTEALIGNCLIENT | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; - wc.lpfnWndProc = kdproc; - wc.cbClsExtra = 0; - wc.cbWndExtra = NP2GWL_SIZE; - wc.hInstance = hInst; - wc.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON2)); - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH); - wc.lpszMenuName = MAKEINTRESOURCE(IDR_KEYDISP); - wc.lpszClassName = np2kdclass; - if (!RegisterClass(&wc)) { - return(FAILURE); - } + ZeroMemory(&wc, sizeof(wc)); + wc.style = CS_BYTEALIGNCLIENT | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; + wc.lpfnWndProc = kdproc; + wc.cbClsExtra = 0; + wc.cbWndExtra = NP2GWLP_SIZE; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON2)); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH); + wc.lpszMenuName = MAKEINTRESOURCE(IDR_KEYDISP); + wc.lpszClassName = kdispclass; + if (!RegisterClass(&wc)) { + return(FAILURE); } keydisp_initialize(); return(SUCCESS); } -void kdispwin_create(void) { +void kdispwin_create(HINSTANCE hInstance) { HWND hwnd; - BYTE mode; + UINT8 mode; CMNPALFN palfn; - if (kdwin.hwnd != NULL) { + if (kdispwin.hwnd != NULL) { return; } - ZeroMemory(&kdwin, sizeof(kdwin)); - hwnd = CreateWindow(np2kdclass, np2kdcaption, + ZeroMemory(&kdispwin, sizeof(kdispwin)); + hwnd = CreateWindow(kdispclass, kdisptitle, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, kdispcfg.posx, kdispcfg.posy, - CW_USEDEFAULT, CW_USEDEFAULT, - NULL, NULL, hInst, NULL); - kdwin.hwnd = hwnd; + KEYDISP_WIDTH, KEYDISP_HEIGHT, + NULL, NULL, hInstance, NULL); + kdispwin.hwnd = hwnd; if (hwnd == NULL) { goto kdcre_err1; } @@ -339,17 +338,17 @@ void kdispwin_create(void) { kdsetdispmode(mode); ShowWindow(hwnd, SW_SHOWNOACTIVATE); UpdateWindow(hwnd); - kdwin.dd2hdl = dd2_create(hwnd, KEYDISP_WIDTH, KEYDISP_HEIGHT); - if (kdwin.dd2hdl == NULL) { + kdispwin.dd2hdl = dd2_create(hwnd, KEYDISP_WIDTH, KEYDISP_HEIGHT); + if (kdispwin.dd2hdl == NULL) { goto kdcre_err2; } palfn.get8 = kdgetpal8; palfn.get32 = kdgetpal32; palfn.cnv16 = kdcnvpal16; - palfn.userdata = (long)kdwin.dd2hdl; + palfn.userdata = (long)kdispwin.dd2hdl; keydisp_setpal(&palfn); kdispwin_draw(0); - SetForegroundWindow(hWndMain); + SetForegroundWindow(g_hWndMain); return; kdcre_err2: @@ -362,21 +361,21 @@ kdcre_err1: void kdispwin_destroy(void) { - if (kdwin.hwnd != NULL) { - DestroyWindow(kdwin.hwnd); + if (kdispwin.hwnd != NULL) { + DestroyWindow(kdispwin.hwnd); } } HWND kdispwin_gethwnd(void) { - return(kdwin.hwnd); + return(kdispwin.hwnd); } -void kdispwin_draw(BYTE cnt) { +void kdispwin_draw(UINT8 cnt) { - BYTE flag; + UINT8 flag; - if (kdwin.hwnd) { + if (kdispwin.hwnd) { if (!cnt) { cnt = 1; } @@ -384,27 +383,303 @@ void kdispwin_draw(BYTE cnt) { if (flag & KEYDISP_FLAGSIZING) { kdsetwinsize(); } - kddrawkeys(kdwin.hwnd, FALSE); + kddrawkeys(kdispwin.hwnd, FALSE); } } void kdispwin_readini(void) { - char path[MAX_PATH]; + OEMCHAR path[MAX_PATH]; ZeroMemory(&kdispcfg, sizeof(kdispcfg)); kdispcfg.posx = CW_USEDEFAULT; kdispcfg.posy = CW_USEDEFAULT; - initgetfile(path, sizeof(path)); - ini_read(path, np2kdapp, np2kdini, sizeof(np2kdini)/sizeof(INITBL)); + initgetfile(path, NELEMENTS(path)); + ini_read(path, kdispapp, kdispini, NELEMENTS(kdispini)); } void kdispwin_writeini(void) { - char path[MAX_PATH]; + OEMCHAR path[MAX_PATH]; + + initgetfile(path, NELEMENTS(path)); + ini_write(path, kdispapp, kdispini, NELEMENTS(kdispini)); +} +#endif + + +// ---- memdbg + +#if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) + +typedef struct { + HWND hwnd; + WINLOCEX wlex; + DD2HDL dd2hdl; + int width; + int height; +} MDBGWIN; + +typedef struct { + int posx; + int posy; + UINT8 type; +} MDBGCFG; + +static MDBGWIN mdbgwin; +static MDBGCFG mdbgcfg; + +static const TCHAR mdbgtitle[] = _T("Memory Map"); +static const TCHAR mdbgclass[] = _T("NP2-MemDbgWin"); + +#if defined(OSLANG_UTF8) +static const OEMCHAR mdbgapp[] = OEMTEXT("Memory Map"); +#else +#define mdbgapp mdbgtitle +#endif +static const PFTBL mdbgini[] = { + PFVAL("WindposX", PFTYPE_SINT32, &mdbgcfg.posx), + PFVAL("WindposY", PFTYPE_SINT32, &mdbgcfg.posy), + PFVAL("windtype", PFTYPE_BOOL, &mdbgcfg.type)}; + + +static void mdpalcnv(CMNPAL *dst, const RGB32 *src, UINT pals, UINT bpp) { + + UINT i; + + switch(bpp) { +#if defined(SUPPORT_16BPP) + case 16: + for (i=0; i