| version 1.15, 2005/03/24 04:40:33 | version 1.19, 2008/02/17 01:29:17 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 | #include        <stdarg.h> | #include        <stdarg.h> | 
 |  | #include        "resource.h" | 
 | #include        "strres.h" | #include        "strres.h" | 
 |  | #include        "textfile.h" | 
 |  | #include        "oemtext.h" | 
 | #include        "dosio.h" | #include        "dosio.h" | 
 | #include        "ini.h" | #include        "ini.h" | 
|  | #include        "menu.h" | 
 |  |  | 
 | #ifdef TRACE | #ifdef TRACE | 
 |  |  | 
 | // #define FILEBUFSIZE                  (1 << 20) |  | 
 | // #define FILELASTBUFONLY |  | 
 |  |  | 
 | #ifdef STRICT | #ifdef STRICT | 
 | #define SUBCLASSPROC    WNDPROC | #define SUBCLASSPROC    WNDPROC | 
 | #else | #else | 
| Line 23 | Line 23 | 
 | #define VIEW_TEXT               "£Í£Ó ¥´¥·¥Ã¥¯" | #define VIEW_TEXT               "£Í£Ó ¥´¥·¥Ã¥¯" | 
 | #define VIEW_SIZE               12 | #define VIEW_SIZE               12 | 
 |  |  | 
| typedef struct { | typedef struct | 
| UINT8   en; | { | 
| FILEH   fh; | UINT8           en; | 
| HWND    hwnd; | TEXTFILEH       tf; | 
|  | HWND            hwnd; | 
 | } TRACEWIN; | } TRACEWIN; | 
 |  |  | 
 | typedef struct { | typedef struct { | 
| Line 36  typedef struct { | Line 37  typedef struct { | 
 | int             height; | int             height; | 
 | } TRACECFG; | } TRACECFG; | 
 |  |  | 
| extern  HINSTANCE       hInst; | extern  HINSTANCE       g_hInstance; | 
| extern  HINSTANCE       hPrev; |  | 
|  |  | 
| enum { |  | 
| IDM_TRACE1              = 3300, |  | 
| IDM_TRACE2, |  | 
| IDM_TRACEEN, |  | 
| IDM_TRACEFH, |  | 
| IDM_TRACECL |  | 
| }; |  | 
 |  |  | 
 | static const TCHAR ProgTitle[] = _T("console"); | static const TCHAR ProgTitle[] = _T("console"); | 
 | static const TCHAR ClassName[] = _T("TRACE-console"); | static const TCHAR ClassName[] = _T("TRACE-console"); | 
 | static const TCHAR ClassEdit[] = _T("EDIT"); | static const TCHAR ClassEdit[] = _T("EDIT"); | 
| static const TCHAR trace1[] = _T("TRACE"); | static const TCHAR viewfont[] = _T(VIEW_TEXT); | 
| static const TCHAR trace2[] = _T("VERBOSE"); |  | 
| static const TCHAR traceen[] = _T("Enable"); | static const OEMCHAR crlf[] = OEMTEXT("\r\n"); | 
| static const TCHAR tracefh[] = _T("File out"); |  | 
| static const TCHAR tracecl[] = _T("Clear"); |  | 
| static const TCHAR fontface[] = _T(VIEW_TEXT); |  | 
| static const TCHAR crlf[] = _T("\r\n"); |  | 
 |  |  | 
 | static  TRACEWIN        tracewin; | static  TRACEWIN        tracewin; | 
| static  HWND            hView = NULL; | static  HWND            s_hView = NULL; | 
| static  HFONT           hfView = NULL; | static  HFONT           s_hfView = NULL; | 
| static  HBRUSH          hBrush = NULL; | static  HBRUSH          s_hBrush = NULL; | 
 | static  int                     viewpos; | static  int                     viewpos; | 
 | static  int                     viewleng; | static  int                     viewleng; | 
 | static  TCHAR           viewbuf[VIEW_BUFFERSIZE * 2]; | static  TCHAR           viewbuf[VIEW_BUFFERSIZE * 2]; | 
| Line 91  static void View_ClrString(void) { | Line 79  static void View_ClrString(void) { | 
 | viewpos = 0; | viewpos = 0; | 
 | viewleng = 0; | viewleng = 0; | 
 | viewbuf[0] = '\0'; | viewbuf[0] = '\0'; | 
| SetWindowText(hView, viewbuf); | SetWindowText(s_hView, viewbuf); | 
 | } | } | 
 |  |  | 
| static void View_AddString(const TCHAR *string) { | static void View_AddString(const OEMCHAR *string) { | 
 |  |  | 
 | int             slen; | int             slen; | 
 | int             vpos; | int             vpos; | 
 | int             vlen; | int             vlen; | 
 | TCHAR   c; | TCHAR   c; | 
 |  |  | 
 |  | #if defined(OEMCHAR_SAME_TCHAR) | 
 | slen = lstrlen(string); | slen = lstrlen(string); | 
 |  | #else | 
 |  | slen = oemtotchar(NULL, 0, string, (UINT)-1) - 1; | 
 |  | #endif | 
 | if ((slen == 0) || ((slen + 3) > VIEW_BUFFERSIZE)) { | if ((slen == 0) || ((slen + 3) > VIEW_BUFFERSIZE)) { | 
 | return; | return; | 
 | } | } | 
| Line 123  static void View_AddString(const TCHAR * | Line 115  static void View_AddString(const TCHAR * | 
 | viewpos = 0; | viewpos = 0; | 
 | } | } | 
 | } | } | 
 |  | #if defined(OEMCHAR_SAME_TCHAR) | 
 | CopyMemory(viewbuf + vpos + vlen, string, slen * sizeof(TCHAR)); | CopyMemory(viewbuf + vpos + vlen, string, slen * sizeof(TCHAR)); | 
 |  | #else | 
 |  | oemtotchar(viewbuf + vpos + vlen, slen + 1, string, (UINT)-1); | 
 |  | #endif | 
 | vlen += slen; | vlen += slen; | 
 | viewbuf[vpos + vlen + 0] = '\r'; | viewbuf[vpos + vlen + 0] = '\r'; | 
 | viewbuf[vpos + vlen + 1] = '\n'; | viewbuf[vpos + vlen + 1] = '\n'; | 
 | viewbuf[vpos + vlen + 2] = '\0'; | viewbuf[vpos + vlen + 2] = '\0'; | 
 | viewleng = vlen + 2; | viewleng = vlen + 2; | 
| SetWindowText(hView, viewbuf + vpos); | SetWindowText(s_hView, viewbuf + vpos); | 
| View_ScrollToBottom(hView); | View_ScrollToBottom(s_hView); | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
| #if defined(FILEBUFSIZE) | static LRESULT onCreate(HWND hWnd) | 
| static  TCHAR   filebuf[FILEBUFSIZE]; | { | 
| static  UINT32  filebufpos; | HMENU   hMenu; | 
| #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 OEMCHAR *fname) { |  | 
|  |  | 
| trfh_close(); |  | 
| tracewin.fh = file_create(fname); |  | 
| #if defined(FILEBUFSIZE) |  | 
| filebufpos = 0; |  | 
| #endif |  | 
| } |  | 
|  |  | 
| static void trfh_add(const TCHAR *buf) { |  | 
|  |  | 
| UINT    size; |  | 
|  |  | 
| size = lstrlen(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) { |  | 
|  |  | 
 | RECT    rc; | RECT    rc; | 
 | HMENU   hmenu; |  | 
 |  |  | 
| switch (msg) { | hMenu = GetSystemMenu(hWnd, FALSE); | 
| case WM_CREATE: | menu_addmenures(hMenu, 0, IDR_TRACE, FALSE); | 
| hmenu = GetSystemMenu(hWnd, FALSE); |  | 
| InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING, |  | 
| IDM_TRACE1, trace1); |  | 
| InsertMenu(hmenu, 1, MF_BYPOSITION | MF_STRING, |  | 
| IDM_TRACE2, trace2); |  | 
| 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_TRACE1, | CheckMenuItem(hMenu, IDM_TRACE_TRACE, | 
 | (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); | (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); | 
| CheckMenuItem(hmenu, IDM_TRACE2, | CheckMenuItem(hMenu, IDM_TRACE_VERBOSE, | 
 | (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); | (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); | 
| CheckMenuItem(hmenu, IDM_TRACEEN, | CheckMenuItem(hMenu, IDM_TRACE_ENABLE, | 
 | (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); | (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); | 
 |  |  | 
| GetClientRect(hWnd, &rc); | GetClientRect(hWnd, &rc); | 
| hView = CreateWindowEx(WS_EX_CLIENTEDGE, | s_hView = CreateWindowEx(WS_EX_CLIENTEDGE, | 
 | ClassEdit, NULL, | ClassEdit, NULL, | 
 | WS_CHILD | WS_VISIBLE | ES_READONLY | ES_LEFT | | WS_CHILD | WS_VISIBLE | ES_READONLY | ES_LEFT | | 
 | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL, | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL, | 
 | 0, 0, rc.right, rc.bottom, | 0, 0, rc.right, rc.bottom, | 
| hWnd, (HMENU)IDC_VIEW, hInst, NULL); | hWnd, (HMENU)IDC_VIEW, g_hInstance, NULL); | 
| if (!hView) { | SendMessage(s_hView, EM_SETLIMITTEXT, (WPARAM)VIEW_BUFFERSIZE, 0); | 
| break; |  | 
| } |  | 
| SendMessage(hView, EM_SETLIMITTEXT, (WPARAM)VIEW_BUFFERSIZE, 0); |  | 
 |  |  | 
| hfView = CreateFont(VIEW_SIZE, 0, 0, 0, 0, 0, 0, 0, | s_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, fontface); | DEFAULT_QUALITY, FIXED_PITCH, viewfont); | 
| if (!hfView) { | if (s_hfView) | 
| break; | { | 
| } | SendMessage(s_hView, WM_SETFONT, (WPARAM)s_hfView, | 
| SendMessage(hView, WM_SETFONT, (WPARAM)hfView, |  | 
 | MAKELPARAM(TRUE, 0)); | MAKELPARAM(TRUE, 0)); | 
| hBrush = CreateSolidBrush(VIEW_BGCOLOR); | } | 
| SetFocus(hView); |  | 
| return(TRUE); |  | 
 |  |  | 
| case WM_SYSCOMMAND: | s_hBrush = CreateSolidBrush(VIEW_BGCOLOR); | 
| switch(wp) { | SetFocus(s_hView); | 
| case IDM_TRACE1: |  | 
| tracewin.en ^= 1; | return TRUE; | 
| hmenu = GetSystemMenu(hWnd, FALSE); | } | 
| CheckMenuItem(hmenu, IDM_TRACE1, |  | 
|  | static LRESULT onSysCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) | 
|  | { | 
|  | HMENU   hMenu; | 
|  |  | 
|  | hMenu = GetSystemMenu(hWnd, FALSE); | 
|  | switch(wParam) | 
|  | { | 
|  | case IDM_TRACE_TRACE: | 
|  | tracewin.en ^= 1; | 
|  | CheckMenuItem(hMenu, IDM_TRACE_TRACE, | 
 | (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); | (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); | 
| break; | break; | 
 |  |  | 
| case IDM_TRACE2: | case IDM_TRACE_VERBOSE: | 
| tracewin.en ^= 2; | tracewin.en ^= 2; | 
| hmenu = GetSystemMenu(hWnd, FALSE); | CheckMenuItem(hMenu, IDM_TRACE_VERBOSE, | 
| CheckMenuItem(hmenu, IDM_TRACE2, |  | 
 | (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); | (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); | 
| break; | break; | 
 |  |  | 
| case IDM_TRACEEN: | case IDM_TRACE_ENABLE: | 
| tracewin.en ^= 4; | tracewin.en ^= 4; | 
| hmenu = GetSystemMenu(hWnd, FALSE); | CheckMenuItem(hMenu, IDM_TRACE_ENABLE, | 
| CheckMenuItem(hmenu, IDM_TRACEEN, |  | 
 | (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); | (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); | 
| break; | break; | 
|  |  | 
| case IDM_TRACEFH: |  | 
| if (tracewin.fh != FILEH_INVALID) { |  | 
| trfh_close(); |  | 
| } |  | 
| else { |  | 
| trfh_open(OEMTEXT("traceout.txt")); |  | 
| } |  | 
| hmenu = GetSystemMenu(hWnd, FALSE); |  | 
| CheckMenuItem(hmenu, IDM_TRACEFH, |  | 
| (tracewin.fh != FILEH_INVALID)? |  | 
| MF_CHECKED:MF_UNCHECKED); |  | 
| break; |  | 
|  |  | 
| case IDM_TRACECL: |  | 
| View_ClrString(); |  | 
| break; |  | 
 |  |  | 
| default: | case IDM_TRACE_FILEOUT: | 
| return(DefWindowProc(hWnd, msg, wp, lp)); | if (tracewin.tf != NULL) | 
|  | { | 
|  | textfile_close(tracewin.tf); | 
|  | tracewin.tf = NULL; | 
|  | } | 
|  | else | 
|  | { | 
|  | tracewin.tf = textfile_create(OEMTEXT("traceout.txt"), | 
|  | 0x800); | 
 | } | } | 
 |  | CheckMenuItem(hMenu, IDM_TRACE_FILEOUT, | 
 |  | (tracewin.tf)?MF_CHECKED:MF_UNCHECKED); | 
 | break; | break; | 
 |  |  | 
 |  | case IDM_TRACE_CLEAR: | 
 |  | View_ClrString(); | 
 |  | break; | 
 |  |  | 
 |  | default: | 
 |  | return DefWindowProc(hWnd, WM_SYSCOMMAND, wParam, lParam); | 
 |  | } | 
 |  | return FALSE; | 
 |  | } | 
 |  |  | 
 |  | static LRESULT CALLBACK traceproc(HWND hWnd, UINT uMsg, | 
 |  | WPARAM wParam, LPARAM lParam) | 
 |  | { | 
 |  | RECT    rc; | 
 |  |  | 
 |  | switch(uMsg) | 
 |  | { | 
 |  | case WM_CREATE: | 
 |  | return onCreate(hWnd); | 
 |  |  | 
 |  | case WM_SYSCOMMAND: | 
 |  | return onSysCommand(hWnd, wParam, lParam); | 
 |  |  | 
 | case WM_MOVE: | case WM_MOVE: | 
 | if (!(GetWindowLong(hWnd, GWL_STYLE) & | if (!(GetWindowLong(hWnd, GWL_STYLE) & | 
| (WS_MAXIMIZE | WS_MINIMIZE))) { | (WS_MAXIMIZE | WS_MINIMIZE))) | 
|  | { | 
 | GetWindowRect(hWnd, &rc); | GetWindowRect(hWnd, &rc); | 
 | tracecfg.posx = rc.left; | tracecfg.posx = rc.left; | 
 | tracecfg.posy = rc.top; | tracecfg.posy = rc.top; | 
| Line 312  static LRESULT CALLBACK traceproc(HWND h | Line 246  static LRESULT CALLBACK traceproc(HWND h | 
 |  |  | 
 | case WM_SIZE:                                                   // window resize | case WM_SIZE:                                                   // window resize | 
 | if (!(GetWindowLong(hWnd, GWL_STYLE) & | if (!(GetWindowLong(hWnd, GWL_STYLE) & | 
| (WS_MAXIMIZE | WS_MINIMIZE))) { | (WS_MAXIMIZE | WS_MINIMIZE))) | 
|  | { | 
 | GetWindowRect(hWnd, &rc); | GetWindowRect(hWnd, &rc); | 
 | tracecfg.width = rc.right - rc.left; | tracecfg.width = rc.right - rc.left; | 
 | tracecfg.height = rc.bottom - rc.top; | tracecfg.height = rc.bottom - rc.top; | 
 | } | } | 
| MoveWindow(hView, 0, 0, LOWORD(lp), HIWORD(lp), TRUE); | MoveWindow(s_hView, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); | 
| View_ScrollToBottom(hView); | View_ScrollToBottom(s_hView); | 
 | break; | break; | 
 |  |  | 
 | case WM_SETFOCUS: | case WM_SETFOCUS: | 
| SetFocus(hView); | SetFocus(s_hView); | 
 | return(0L); | return(0L); | 
 |  |  | 
 | case WM_CTLCOLORSTATIC: | case WM_CTLCOLORSTATIC: | 
 | case WM_CTLCOLOREDIT: | case WM_CTLCOLOREDIT: | 
| SetTextColor((HDC)wp, VIEW_FGCOLOR); | SetTextColor((HDC)wParam, VIEW_FGCOLOR); | 
| SetBkColor((HDC)wp, VIEW_BGCOLOR); | SetBkColor((HDC)wParam, VIEW_BGCOLOR); | 
| return((LRESULT)hBrush); | return((LRESULT)s_hBrush); | 
 |  |  | 
 | case WM_CLOSE: | case WM_CLOSE: | 
 | break; | break; | 
 |  |  | 
 | case WM_DESTROY: | case WM_DESTROY: | 
| if (hBrush) { | if (s_hBrush) | 
| DeleteObject(hBrush); | { | 
| } | DeleteObject(s_hBrush); | 
| if (hfView) { | } | 
| DeleteObject(hfView); | if (s_hfView) | 
|  | { | 
|  | DeleteObject(s_hfView); | 
 | } | } | 
 | break; | break; | 
 | #if 0 | #if 0 | 
| Line 348  static LRESULT CALLBACK traceproc(HWND h | Line 285  static LRESULT CALLBACK traceproc(HWND h | 
 | break; | break; | 
 |  |  | 
 | case WM_MOVING: | case WM_MOVING: | 
| winloc_movingproc((RECT *)lp); | winloc_movingproc((RECT *)lParam); | 
 | break; | break; | 
 |  |  | 
 | case WM_ERASEBKGND: | case WM_ERASEBKGND: | 
| return(FALSE); | return FALSE; | 
 | #endif | #endif | 
 | default: | default: | 
| return(DefWindowProc(hWnd, msg, wp, lp)); | return DefWindowProc(hWnd, uMsg, wParam, lParam); | 
 | } | } | 
| return(0L); | return FALSE; | 
 | } | } | 
 |  |  | 
 |  |  | 
| Line 368  void trace_init(void) { | Line 305  void trace_init(void) { | 
 | HWND    hwnd; | HWND    hwnd; | 
 |  |  | 
 | ZeroMemory(&tracewin, sizeof(tracewin)); | ZeroMemory(&tracewin, sizeof(tracewin)); | 
| if (!hPrev) { | WNDCLASS wc; | 
| WNDCLASS wc; | wc.style = CS_HREDRAW | CS_VREDRAW; | 
| wc.style = CS_HREDRAW | CS_VREDRAW; | wc.lpfnWndProc = traceproc; | 
| wc.lpfnWndProc = traceproc; | wc.cbClsExtra = 0; | 
| wc.cbClsExtra = 0; | wc.cbWndExtra = 0; | 
| wc.cbWndExtra = 0; | wc.hInstance = g_hInstance; | 
| wc.hInstance = hInst; | wc.hIcon = NULL; | 
| wc.hIcon = NULL; | 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 = ClassName; | 
| wc.lpszClassName = (LPCTSTR)ClassName; | if (!RegisterClass(&wc)) { | 
| if (!RegisterClass(&wc)) { | return; | 
| return; |  | 
| } |  | 
 | } | } | 
 |  |  | 
 | #if 1 | #if 1 | 
 | tracewin.en = 4; | tracewin.en = 4; | 
 | #else | #else | 
| tracewin.en = 0; | tracewin.en = 1; | 
|  | tracewin.tf = textfile_create(OEMTEXT("traceout.txt"), 0x800); | 
 | #endif | #endif | 
 | tracewin.fh = FILEH_INVALID; |  | 
 |  |  | 
 | tracecfg.posx = CW_USEDEFAULT; | tracecfg.posx = CW_USEDEFAULT; | 
 | tracecfg.posy = CW_USEDEFAULT; | tracecfg.posy = CW_USEDEFAULT; | 
 | tracecfg.width = CW_USEDEFAULT; | tracecfg.width = CW_USEDEFAULT; | 
 | tracecfg.height = CW_USEDEFAULT; | tracecfg.height = CW_USEDEFAULT; | 
| ini_read(file_getcd(np2trace), inititle, initbl, 4); | ini_read(file_getcd(np2trace), inititle, initbl, NELEMENTS(initbl)); | 
 |  |  | 
 | hwnd = CreateWindowEx(WS_EX_CONTROLPARENT, | hwnd = CreateWindowEx(WS_EX_CONTROLPARENT, | 
 | ClassName, ProgTitle, | ClassName, ProgTitle, | 
 | WS_OVERLAPPEDWINDOW, | WS_OVERLAPPEDWINDOW, | 
 | tracecfg.posx, tracecfg.posy, | tracecfg.posx, tracecfg.posy, | 
 | tracecfg.width, tracecfg.height, | tracecfg.width, tracecfg.height, | 
| NULL, NULL, hInst, NULL); | NULL, NULL, g_hInstance, NULL); | 
 | tracewin.hwnd = hwnd; | tracewin.hwnd = hwnd; | 
 | if (hwnd == NULL) { | if (hwnd == NULL) { | 
 | return; | return; | 
| Line 414  void trace_init(void) { | Line 349  void trace_init(void) { | 
 |  |  | 
 | void trace_term(void) { | void trace_term(void) { | 
 |  |  | 
| if (tracewin.fh != FILEH_INVALID) { | if (tracewin.tf != NULL) { | 
| trfh_close(); | textfile_close(tracewin.tf); | 
|  | tracewin.tf = NULL; | 
 | } | } | 
 | if (tracewin.hwnd) { | if (tracewin.hwnd) { | 
 | DestroyWindow(tracewin.hwnd); | DestroyWindow(tracewin.hwnd); | 
 | tracewin.hwnd = NULL; | tracewin.hwnd = NULL; | 
| ini_write(file_getcd(np2trace), inititle, initbl, 4); | ini_write(file_getcd(np2trace), inititle, initbl, NELEMENTS(initbl)); | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 431  void trace_fmt(const char *fmt, ...) { | Line 367  void trace_fmt(const char *fmt, ...) { | 
 | OEMCHAR buf[0x1000]; | OEMCHAR buf[0x1000]; | 
 |  |  | 
 | en = (tracewin.en & 1) && | en = (tracewin.en & 1) && | 
| ((tracewin.en & 4) || (tracewin.fh != FILEH_INVALID)); | ((tracewin.en & 4) || (tracewin.tf != NULL)); | 
 | if (en) { | if (en) { | 
 | va_start(ap, fmt); | va_start(ap, fmt); | 
| #if defined(_UNICODE) | #if defined(OSLANG_UCS2) | 
| TCHAR cnvfmt[0x800]; | OEMCHAR cnvfmt[0x800]; | 
 | MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, fmt, -1, | MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, fmt, -1, | 
 | cnvfmt, NELEMENTS(cnvfmt)); | cnvfmt, NELEMENTS(cnvfmt)); | 
 | vswprintf(buf, cnvfmt, ap); | vswprintf(buf, cnvfmt, ap); | 
| Line 443  void trace_fmt(const char *fmt, ...) { | Line 379  void trace_fmt(const char *fmt, ...) { | 
 | vsprintf(buf, fmt, ap); | vsprintf(buf, fmt, ap); | 
 | #endif | #endif | 
 | va_end(ap); | va_end(ap); | 
| if ((tracewin.en & 4) && (hView)) { | if ((tracewin.en & 4) && (s_hView)) { | 
 | View_AddString(buf); | View_AddString(buf); | 
 | } | } | 
| if (tracewin.fh != FILEH_INVALID) { | if (tracewin.tf != NULL) { | 
| trfh_add(buf); | textfile_write(tracewin.tf, buf); | 
| trfh_add(crlf); | textfile_write(tracewin.tf, crlf); | 
 | } | } | 
 | } | } | 
 | } | } | 
| Line 460  void trace_fmt2(const char *fmt, ...) { | Line 396  void trace_fmt2(const char *fmt, ...) { | 
 | OEMCHAR buf[0x1000]; | OEMCHAR buf[0x1000]; | 
 |  |  | 
 | en = (tracewin.en & 2) && | en = (tracewin.en & 2) && | 
| ((tracewin.en & 4) || (tracewin.fh != FILEH_INVALID)); | ((tracewin.en & 4) || (tracewin.tf != NULL)); | 
 | if (en) { | if (en) { | 
 | va_start(ap, fmt); | va_start(ap, fmt); | 
| #if defined(_UNICODE) | #if defined(OSLANG_UCS2) | 
| TCHAR cnvfmt[0x800]; | OEMCHAR cnvfmt[0x800]; | 
 | MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, fmt, -1, | MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, fmt, -1, | 
 | cnvfmt, NELEMENTS(cnvfmt)); | cnvfmt, NELEMENTS(cnvfmt)); | 
 | vswprintf(buf, cnvfmt, ap); | vswprintf(buf, cnvfmt, ap); | 
| Line 472  void trace_fmt2(const char *fmt, ...) { | Line 408  void trace_fmt2(const char *fmt, ...) { | 
 | vsprintf(buf, fmt, ap); | vsprintf(buf, fmt, ap); | 
 | #endif | #endif | 
 | va_end(ap); | va_end(ap); | 
| if ((tracewin.en & 4) && (hView)) { | if ((tracewin.en & 4) && (s_hView)) { | 
 | View_AddString(buf); | View_AddString(buf); | 
 | } | } | 
| if (tracewin.fh != FILEH_INVALID) { | if (tracewin.tf != FILEH_INVALID) { | 
| trfh_add(buf); | textfile_write(tracewin.tf, buf); | 
| trfh_add(crlf); | textfile_write(tracewin.tf, crlf); | 
 | } | } | 
 | } | } | 
 | } | } | 
| Line 487  void trace_char(char c) { | Line 423  void trace_char(char c) { | 
 | if ((c == 0x0a) || (c == 0x0d)) { | if ((c == 0x0a) || (c == 0x0d)) { | 
 | if (devpos) { | if (devpos) { | 
 | devstr[devpos] = '\0'; | devstr[devpos] = '\0'; | 
| #if defined(_UNICODE) | #if defined(OSLANG_UCS2) | 
 | TCHAR pdevstr[0x800]; | TCHAR pdevstr[0x800]; | 
 | MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, devstr, -1, | MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, devstr, -1, | 
 | pdevstr, NELEMENTS(pdevstr)); | pdevstr, NELEMENTS(pdevstr)); | 
 | #else | #else | 
| const TCHAR *pdevstr = devstr; | const OEMCHAR *pdevstr = devstr; | 
 | #endif | #endif | 
| if ((tracewin.en & 4) && (hView)) { | if ((tracewin.en & 4) && (s_hView)) | 
|  | { | 
 | View_AddString(pdevstr); | View_AddString(pdevstr); | 
 | } | } | 
| if (tracewin.fh != FILEH_INVALID) { | if (tracewin.tf != NULL) { | 
| trfh_add(pdevstr); | textfile_write(tracewin.tf, pdevstr); | 
| trfh_add(crlf); | textfile_write(tracewin.tf, crlf); | 
 | } | } | 
 | devpos = 0; | devpos = 0; | 
 | } | } |