| version 1.2, 2003/11/13 15:33:06 | version 1.14, 2004/04/08 13:08:23 | 
| 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 char       ProgTitle[] = "console"; | 
 | static const char       ClassName[] = "TRACE-console"; | static const char       ClassName[] = "TRACE-console"; | 
 | static const char       ClassEdit[] = "EDIT"; | static const char       ClassEdit[] = "EDIT"; | 
 |  | static const char       trace1[] = "TRACE"; | 
 |  | static const char       trace2[] = "VERBOSE"; | 
 | static const char       traceen[] = "Enable"; | static const char       traceen[] = "Enable"; | 
 | static const char       tracefh[] = "File out"; | static const char       tracefh[] = "File out"; | 
 |  | static const char       tracecl[] = "Clear"; | 
 | static const char       crlf[] = "\r\n"; | static const char       crlf[] = "\r\n"; | 
 |  |  | 
 | static  TRACEWIN        tracewin; | static  TRACEWIN        tracewin; | 
| Line 72  static void View_ScrollToBottom(HWND hWn | Line 81  static void View_ScrollToBottom(HWND hWn | 
 | PostMessage(hWnd, EM_LINESCROLL, 0, MaxPos); | PostMessage(hWnd, EM_LINESCROLL, 0, MaxPos); | 
 | } | } | 
 |  |  | 
 |  | static void View_ClrString(void) { | 
 |  |  | 
 |  | szView[0] = '\0'; | 
 |  | SetWindowText(hView, szView); | 
 |  | } | 
 |  |  | 
 | static void View_AddString(const char *lpszString) { | static void View_AddString(const char *lpszString) { | 
 |  |  | 
 | int             len, vlen; | int             len, vlen; | 
| Line 98  static void View_AddString(const char *l | Line 113  static void View_AddString(const char *l | 
 | 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 193  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 141  static LRESULT CALLBACK traceproc(HWND h | Line 238  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 272  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 250  void trace_init(void) { | Line 364  void trace_init(void) { | 
 | } | } | 
 | } | } | 
 |  |  | 
| 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 396  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 411  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) { | 
|  | 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); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | 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) { | 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); | 
 | } | } | 
 | } | } | 
 | } | } |