|
|
| version 1.2, 2003/11/21 06:51:16 | version 1.3, 2004/06/14 13:35:40 |
|---|---|
| Line 7 | Line 7 |
| #ifdef TRACE | #ifdef TRACE |
| #define FILEBUFSIZE (1 << 20) | |
| // #define FILELASTBUFONLY | |
| #ifdef STRICT | #ifdef STRICT |
| #define SUBCLASSPROC WNDPROC | #define SUBCLASSPROC WNDPROC |
| #else | #else |
| Line 37 extern HINSTANCE hInst; | Line 40 extern HINSTANCE hInst; |
| extern HINSTANCE hPrev; | extern HINSTANCE hPrev; |
| enum { | enum { |
| IDM_TRACEEN = 3300, | IDM_TRACE1 = 3300, |
| IDM_TRACEFH | IDM_TRACE2, |
| IDM_TRACEEN, | |
| IDM_TRACEFH, | |
| IDM_TRACECL | |
| }; | }; |
| static const char ProgTitle[] = "console"; | static const TCHAR ProgTitle[] = STRLITERAL("console"); |
| static const char ClassName[] = "TRACE-console"; | static const TCHAR ClassName[] = STRLITERAL("TRACE-console"); |
| static const char ClassEdit[] = "EDIT"; | static const TCHAR ClassEdit[] = STRLITERAL("EDIT"); |
| static const char traceen[] = "Enable"; | static const TCHAR viewfont[] = STRLITERAL(VIEW_TEXT); |
| static const char tracefh[] = "File out"; | static const TCHAR trace1[] = STRLITERAL("TRACE"); |
| static const char crlf[] = "\r\n"; | static const TCHAR trace2[] = STRLITERAL("VERBOSE"); |
| static const TCHAR traceen[] = STRLITERAL("Enable"); | |
| static const TCHAR tracefh[] = STRLITERAL("File out"); | |
| static const TCHAR tracecl[] = STRLITERAL("Clear"); | |
| static const char crlf[] = "\r\n"; | |
| static TRACEWIN tracewin; | static TRACEWIN tracewin; |
| static HWND hView = NULL; | static HWND hView = NULL; |
| static HFONT hfView = NULL; | static HFONT hfView = NULL; |
| static HBRUSH hBrush = NULL; | static HBRUSH hBrush = NULL; |
| static char szView[VIEW_BUFFERSIZE]; | static TCHAR szView[VIEW_BUFFERSIZE]; |
| static TRACECFG tracecfg; | static TRACECFG tracecfg; |
| static const char np2trace[] = "np2trace.ini"; | static const char np2trace[] = "np2trace.ini"; |
| Line 72 static void View_ScrollToBottom(HWND hWn | Line 82 static void View_ScrollToBottom(HWND hWn |
| PostMessage(hWnd, EM_LINESCROLL, 0, MaxPos); | PostMessage(hWnd, EM_LINESCROLL, 0, MaxPos); |
| } | } |
| static void View_AddString(const char *lpszString) { | static void View_ClrString(void) { |
| szView[0] = '\0'; | |
| SetWindowText(hView, szView); | |
| } | |
| int len, vlen; | static void View_AddString(const char *lpszString) { |
| char *p; | |
| int len; | |
| int vlen; | |
| int overleng; | |
| TCHAR *p; | |
| #if defined(UNICODE) | |
| len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszString, -1, | |
| NULL, 0) - 1; | |
| #else | |
| len = strlen(lpszString); | len = strlen(lpszString); |
| if ((!len) || ((len + 3) > VIEW_BUFFERSIZE)) { | #endif |
| if ((len <= 0) || ((len + 3) > VIEW_BUFFERSIZE)) { | |
| return; | return; |
| } | } |
| vlen = strlen(szView); | vlen = lstrlen(szView); |
| if ((vlen + len + 3) > VIEW_BUFFERSIZE) { | if ((vlen + len + 3) > VIEW_BUFFERSIZE) { |
| p = szView; | overleng = vlen + len + 3 - VIEW_BUFFERSIZE; |
| while(*p) { | p = szView + overleng; |
| vlen -= overleng; | |
| while(vlen) { | |
| vlen--; | vlen--; |
| if ((*p++ == 0x0a) && ((vlen + len + 3) <= VIEW_BUFFERSIZE)) { | if (*p++ == 0x0a) { |
| break; | break; |
| } | } |
| } | } |
| strcpy(szView, p); | if (vlen) { |
| CopyMemory(szView, p, vlen * sizeof(TCHAR)); | |
| } | |
| } | } |
| strcat(szView, lpszString); | p = szView + vlen; |
| strcat(szView, crlf); | #if defined(UNICODE) |
| MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszString, -1, p, len); | |
| #else | |
| CopyMemory(p, lpszString, len); | |
| #endif | |
| p += len; | |
| p[0] = '\r'; | |
| p[1] = '\n'; | |
| p[2] = '\0'; | |
| SetWindowText(hView, szView); | SetWindowText(hView, szView); |
| View_ScrollToBottom(hView); | View_ScrollToBottom(hView); |
| } | } |
| // ---- | |
| #if defined(FILEBUFSIZE) | |
| static char filebuf[FILEBUFSIZE]; | |
| static UINT32 filebufpos; | |
| #endif | |
| static void trfh_close(void) { | |
| FILEH fh; | |
| fh = tracewin.fh; | |
| tracewin.fh = FILEH_INVALID; | |
| if (fh != FILEH_INVALID) { | |
| #if defined(FILEBUFSIZE) | |
| UINT size = filebufpos & (FILEBUFSIZE - 1); | |
| #if defined(FILELASTBUFONLY) | |
| if (filebufpos >= FILEBUFSIZE) { | |
| file_write(fh, filebuf + size, FILEBUFSIZE - size); | |
| } | |
| #endif | |
| if (size) { | |
| file_write(fh, filebuf, size); | |
| } | |
| #endif | |
| file_close(fh); | |
| } | |
| } | |
| static void trfh_open(const char *fname) { | |
| trfh_close(); | |
| tracewin.fh = file_create(fname); | |
| #if defined(FILEBUFSIZE) | |
| filebufpos = 0; | |
| #endif | |
| } | |
| static void trfh_add(const char *buf) { | |
| UINT size; | |
| size = strlen(buf); | |
| #if defined(FILEBUFSIZE) | |
| while(size) { | |
| UINT pos = filebufpos & (FILEBUFSIZE - 1); | |
| UINT rem = FILEBUFSIZE - pos; | |
| if (size >= rem) { | |
| CopyMemory(filebuf + pos, buf, rem); | |
| filebufpos += rem; | |
| buf += rem; | |
| size -= rem; | |
| #if !defined(FILELASTBUFONLY) | |
| file_write(tracewin.fh, filebuf, FILEBUFSIZE); | |
| #endif | |
| } | |
| else { | |
| CopyMemory(filebuf + pos, buf, size); | |
| filebufpos += size; | |
| break; | |
| } | |
| } | |
| #else | |
| file_write(tracewin.fh, buf, size); | |
| #endif | |
| } | |
| // ---- | |
| static LRESULT CALLBACK traceproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { | static LRESULT CALLBACK traceproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { |
| RECT rc; | RECT rc; |
| Line 107 static LRESULT CALLBACK traceproc(HWND h | Line 213 static LRESULT CALLBACK traceproc(HWND h |
| case WM_CREATE: | case WM_CREATE: |
| hmenu = GetSystemMenu(hWnd, FALSE); | hmenu = GetSystemMenu(hWnd, FALSE); |
| InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING, | InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING, |
| IDM_TRACEEN, traceen); | IDM_TRACE1, trace1); |
| InsertMenu(hmenu, 1, MF_BYPOSITION | MF_STRING, | InsertMenu(hmenu, 1, MF_BYPOSITION | MF_STRING, |
| IDM_TRACEFH, tracefh); | IDM_TRACE2, trace2); |
| InsertMenu(hmenu, 2, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); | InsertMenu(hmenu, 2, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); |
| InsertMenu(hmenu, 3, MF_BYPOSITION | MF_STRING, | |
| IDM_TRACEEN, traceen); | |
| InsertMenu(hmenu, 4, MF_BYPOSITION | MF_STRING, | |
| IDM_TRACEFH, tracefh); | |
| InsertMenu(hmenu, 5, MF_BYPOSITION | MF_STRING, | |
| IDM_TRACECL, tracecl); | |
| InsertMenu(hmenu, 6, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); | |
| CheckMenuItem(hmenu, IDM_TRACEEN, | CheckMenuItem(hmenu, IDM_TRACE1, |
| (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); | (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); |
| CheckMenuItem(hmenu, IDM_TRACE2, | |
| (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); | |
| CheckMenuItem(hmenu, IDM_TRACEEN, | |
| (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); | |
| GetClientRect(hWnd, &rc); | GetClientRect(hWnd, &rc); |
| hView = CreateWindowEx(WS_EX_CLIENTEDGE, | hView = CreateWindowEx(WS_EX_CLIENTEDGE, |
| Line 129 static LRESULT CALLBACK traceproc(HWND h | Line 246 static LRESULT CALLBACK traceproc(HWND h |
| hfView = CreateFont(VIEW_SIZE, 0, 0, 0, 0, 0, 0, 0, | hfView = CreateFont(VIEW_SIZE, 0, 0, 0, 0, 0, 0, 0, |
| SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, | SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, |
| DEFAULT_QUALITY, FIXED_PITCH, VIEW_TEXT); | DEFAULT_QUALITY, FIXED_PITCH, viewfont); |
| if (!hfView) { | if (!hfView) { |
| break; | break; |
| } | } |
| Line 141 static LRESULT CALLBACK traceproc(HWND h | Line 258 static LRESULT CALLBACK traceproc(HWND h |
| case WM_SYSCOMMAND: | case WM_SYSCOMMAND: |
| switch(wp) { | switch(wp) { |
| case IDM_TRACEEN: | case IDM_TRACE1: |
| tracewin.en ^= 1; | tracewin.en ^= 1; |
| hmenu = GetSystemMenu(hWnd, FALSE); | hmenu = GetSystemMenu(hWnd, FALSE); |
| CheckMenuItem(hmenu, IDM_TRACEEN, | CheckMenuItem(hmenu, IDM_TRACE1, |
| (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); | (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); |
| break; | break; |
| case IDM_TRACE2: | |
| tracewin.en ^= 2; | |
| hmenu = GetSystemMenu(hWnd, FALSE); | |
| CheckMenuItem(hmenu, IDM_TRACE2, | |
| (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); | |
| break; | |
| case IDM_TRACEEN: | |
| tracewin.en ^= 4; | |
| hmenu = GetSystemMenu(hWnd, FALSE); | |
| CheckMenuItem(hmenu, IDM_TRACEEN, | |
| (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); | |
| break; | |
| case IDM_TRACEFH: | case IDM_TRACEFH: |
| if (tracewin.fh != FILEH_INVALID) { | if (tracewin.fh != FILEH_INVALID) { |
| file_close(tracewin.fh); | trfh_close(); |
| tracewin.fh = FILEH_INVALID; | |
| } | } |
| else { | else { |
| tracewin.fh = file_create("traceout.txt"); | trfh_open("traceout.txt"); |
| } | } |
| hmenu = GetSystemMenu(hWnd, FALSE); | hmenu = GetSystemMenu(hWnd, FALSE); |
| CheckMenuItem(hmenu, IDM_TRACEFH, | CheckMenuItem(hmenu, IDM_TRACEFH, |
| Line 162 static LRESULT CALLBACK traceproc(HWND h | Line 292 static LRESULT CALLBACK traceproc(HWND h |
| MF_CHECKED:MF_UNCHECKED); | MF_CHECKED:MF_UNCHECKED); |
| break; | break; |
| case IDM_TRACECL: | |
| View_ClrString(); | |
| break; | |
| default: | default: |
| return(DefWindowProc(hWnd, msg, wp, lp)); | return(DefWindowProc(hWnd, msg, wp, lp)); |
| } | } |
| Line 244 void trace_init(void) { | Line 378 void trace_init(void) { |
| wc.hCursor = LoadCursor(NULL, IDC_ARROW); | wc.hCursor = LoadCursor(NULL, IDC_ARROW); |
| wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); | wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); |
| wc.lpszMenuName = NULL; | wc.lpszMenuName = NULL; |
| wc.lpszClassName = (LPCSTR)ClassName; | wc.lpszClassName = ClassName; |
| if (!RegisterClass(&wc)) { | if (!RegisterClass(&wc)) { |
| return; | return; |
| } | } |
| } | } |
| tracewin.en = 1; | #if 1 |
| tracewin.en = 0; | |
| tracewin.fh = FILEH_INVALID; | tracewin.fh = FILEH_INVALID; |
| #else | |
| tracewin.en = 0; | |
| tracewin.fh = FILEH_INVALID; | |
| trfh_open("traces.txt"); | |
| #endif | |
| tracecfg.posx = CW_USEDEFAULT; | tracecfg.posx = CW_USEDEFAULT; |
| tracecfg.posy = CW_USEDEFAULT; | tracecfg.posy = CW_USEDEFAULT; |
| Line 276 void trace_init(void) { | Line 416 void trace_init(void) { |
| void trace_term(void) { | void trace_term(void) { |
| if (tracewin.fh != FILEH_INVALID) { | if (tracewin.fh != FILEH_INVALID) { |
| file_close(tracewin.fh); | trfh_close(); |
| tracewin.fh = FILEH_INVALID; | |
| } | } |
| if (tracewin.hwnd) { | if (tracewin.hwnd) { |
| DestroyWindow(tracewin.hwnd); | DestroyWindow(tracewin.hwnd); |
| Line 292 void trace_fmt(const char *fmt, ...) { | Line 431 void trace_fmt(const char *fmt, ...) { |
| va_list ap; | va_list ap; |
| char buf[0x1000]; | char buf[0x1000]; |
| en = (tracewin.en & 1) || (tracewin.fh != FILEH_INVALID); | en = (tracewin.en & 1) && |
| ((tracewin.en & 4) || (tracewin.fh != FILEH_INVALID)); | |
| if (en) { | if (en) { |
| va_start(ap, fmt); | va_start(ap, fmt); |
| vsprintf(buf, fmt, ap); | vsprintf(buf, fmt, ap); |
| va_end(ap); | va_end(ap); |
| if ((tracewin.en & 1) && (hView)) { | if ((tracewin.en & 4) && (hView)) { |
| View_AddString(buf); | View_AddString(buf); |
| } | } |
| if (tracewin.fh != FILEH_INVALID) { | if (tracewin.fh != FILEH_INVALID) { |
| file_write(tracewin.fh, buf, strlen(buf)); | trfh_add(buf); |
| file_write(tracewin.fh, crlf, strlen(crlf)); | trfh_add(crlf); |
| } | } |
| } | } |
| } | } |
| void trace_fmt2(const char *fmt, ...) { | |
| BOOL en; | |
| va_list ap; | |
| char buf[0x1000]; | |
| en = (tracewin.en & 2) && | |
| ((tracewin.en & 4) || (tracewin.fh != FILEH_INVALID)); | |
| if (en) { | |
| va_start(ap, fmt); | |
| vsprintf(buf, fmt, ap); | |
| va_end(ap); | |
| if ((tracewin.en & 4) && (hView)) { | |
| View_AddString(buf); | |
| } | |
| if (tracewin.fh != FILEH_INVALID) { | |
| trfh_add(buf); | |
| trfh_add(crlf); | |
| } | |
| } | |
| } | |
| #endif | #endif |