Diff for /np2/wince/w32/trace.cpp between versions 1.6 and 1.7

version 1.6, 2005/03/24 04:40:33 version 1.7, 2005/04/01 15:35:50
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        <stdarg.h>  #include        <stdarg.h>
 #include        "strres.h"  #include        "strres.h"
 #if defined(UNICODE) && defined(OSLANG_UTF8)  #include        "textfile.h"
 #include        "codecnv.h"  #include        "oemtext.h"
 #endif  
 #include        "dosio.h"  #include        "dosio.h"
 #include        "ini.h"  #include        "ini.h"
   
   
 #ifdef TRACE  #ifdef TRACE
   
 #define FILEBUFSIZE                     (1 << 20)  
 // #define FILELASTBUFONLY  
   
 #ifdef STRICT  #ifdef STRICT
 #define SUBCLASSPROC    WNDPROC  #define SUBCLASSPROC    WNDPROC
 #else  #else
Line 27 Line 23
 #define VIEW_SIZE               12  #define VIEW_SIZE               12
   
 typedef struct {  typedef struct {
         BYTE    en;          UINT8           en;
         FILEH   fh;          TEXTFILEH       tf;
         HWND    hwnd;          HWND            hwnd;
 } TRACEWIN;  } TRACEWIN;
   
 typedef struct {  typedef struct {
Line 65  static TRACEWIN tracewin; Line 61  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  TCHAR           szView[VIEW_BUFFERSIZE];  static  int                     viewpos;
   static  int                     viewleng;
   static  TCHAR           viewbuf[VIEW_BUFFERSIZE * 2];
 static  TRACECFG        tracecfg;  static  TRACECFG        tracecfg;
   
 static const OEMCHAR np2trace[] = OEMTEXT("np2trace.ini");  static const OEMCHAR np2trace[] = OEMTEXT("np2trace.ini");
Line 87  static void View_ScrollToBottom(HWND hWn Line 85  static void View_ScrollToBottom(HWND hWn
   
 static void View_ClrString(void) {  static void View_ClrString(void) {
   
         szView[0] = '\0';          viewpos = 0;
         SetWindowText(hView, szView);          viewleng = 0;
           viewbuf[0] = '\0';
           SetWindowText(hView, viewbuf);
 }  }
   
 static void View_AddString(const OEMCHAR *lpszString) {  static void View_AddString(const OEMCHAR *string) {
   
         int             len;          int             slen;
           int             vpos;
         int             vlen;          int             vlen;
         int             overleng;          TCHAR   c;
         TCHAR   *p;  
   
 #if defined(UNICODE) && defined(OSLANG_SJIS)  #if defined(OEMCHAR_SAME_TCHAR)
         len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszString, -1,          slen = lstrlen(string);
                                                                                                                                 NULL, 0) - 1;  
 #elif defined(UNICODE) && defined(OSLANG_UTF8)  
         len = codecnv_utf8toucs2(NULL, 0, lpszString, (UINT)-1) - 1;  
 #else  #else
         len = lstrlen(lpszString);          slen = oemtotchar(NULL, 0, string, (UINT)-1) - 1;
 #endif  #endif
         if ((len <= 0) || ((len + 3) > VIEW_BUFFERSIZE)) {          if ((slen == 0) || ((slen + 3) > VIEW_BUFFERSIZE)) {
                 return;                  return;
         }          }
         vlen = lstrlen(szView);          vpos = viewpos;
         if ((vlen + len + 3) > VIEW_BUFFERSIZE) {          vlen = viewleng;
                 overleng = vlen + len + 3 - VIEW_BUFFERSIZE;          if ((vpos + vlen + slen + 3) > (VIEW_BUFFERSIZE * 2)) {
                 p = szView + overleng;                  while(vlen > 0) {
                 vlen -= overleng;  
                 while(vlen) {  
                         vlen--;                          vlen--;
                         if (*p++ == 0x0a) {                          c = viewbuf[vpos++];
                           if ((c == 0x0a) && ((vlen + slen + 3) <= VIEW_BUFFERSIZE)) {
                                 break;                                  break;
                         }                          }
                 }                  }
                 if (vlen) {                  if (vpos >= VIEW_BUFFERSIZE) {
                         CopyMemory(szView, p, vlen * sizeof(TCHAR));                          if (vlen) {
                                   CopyMemory(viewbuf, viewbuf + vpos, vlen * sizeof(TCHAR));
                           }
                           vpos = 0;
                           viewpos = 0;
                 }                  }
         }          }
         p = szView + vlen;  #if defined(OEMCHAR_SAME_TCHAR)
 #if defined(UNICODE) && defined(OSLANG_SJIS)          CopyMemory(viewbuf + vpos + vlen, string, slen * sizeof(TCHAR));
         MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszString, -1, p, len + 1);  
 #elif defined(UNICODE) && defined(OSLANG_UTF8)  
         codecnv_utf8toucs2(p, len + 1, lpszString, (UINT)-1);  
 #else  #else
         CopyMemory(p, lpszString, len * sizeof(TCHAR));          oemtotchar(viewbuf + vpos + vlen, slen + 1, string, (UINT)-1);
 #endif  #endif
         p += len;          vlen += slen;
         p[0] = '\r';          viewbuf[vpos + vlen + 0] = '\r';
         p[1] = '\n';          viewbuf[vpos + vlen + 1] = '\n';
         p[2] = '\0';          viewbuf[vpos + vlen + 2] = '\0';
         SetWindowText(hView, szView);          viewleng = vlen + 2;
           SetWindowText(hView, viewbuf + vpos);
         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 OEMCHAR *fname) {  
   
         trfh_close();  
         tracewin.fh = file_create(fname);  
 #if defined(FILEBUFSIZE)  
         filebufpos = 0;  
 #endif  
 }  
   
 static void trfh_add(const OEMCHAR *buf) {  
   
         UINT    size;  
   
         size = OEMSTRLEN(buf);  
         size *= sizeof(OEMCHAR);  
 #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 288  static LRESULT CALLBACK traceproc(HWND h Line 217  static LRESULT CALLBACK traceproc(HWND h
                                         break;                                          break;
   
                                 case IDM_TRACEFH:                                  case IDM_TRACEFH:
                                         if (tracewin.fh != FILEH_INVALID) {                                          if (tracewin.tf != NULL) {
                                                 trfh_close();                                                  textfile_close(tracewin.tf);
                                                   tracewin.tf = NULL;
                                         }                                          }
                                         else {                                          else {
                                                 trfh_open(OEMTEXT("traceout.txt"));                                                  tracewin.tf = textfile_create(OEMTEXT("traceout.txt"),
                                                                                                                                                   0x800);
                                         }                                          }
                                         hmenu = GetSystemMenu(hWnd, FALSE);                                          hmenu = GetSystemMenu(hWnd, FALSE);
                                         CheckMenuItem(hmenu, IDM_TRACEFH,                                          CheckMenuItem(hmenu, IDM_TRACEFH,
                                                                         (tracewin.fh != FILEH_INVALID)?                                                                          (tracewin.tf)?MF_CHECKED:MF_UNCHECKED);
                                                                                                         MF_CHECKED:MF_UNCHECKED);  
                                         break;                                          break;
   
                                 case IDM_TRACECL:                                  case IDM_TRACECL:
Line 375  void trace_init(void) { Line 305  void trace_init(void) {
   
         HWND    hwnd;          HWND    hwnd;
   
           ZeroMemory(&tracewin, sizeof(tracewin));
         if (!hPrev) {          if (!hPrev) {
                 WNDCLASS wc;                  WNDCLASS wc;
                 wc.style = CS_HREDRAW | CS_VREDRAW;                  wc.style = CS_HREDRAW | CS_VREDRAW;
Line 392  void trace_init(void) { Line 323  void trace_init(void) {
                 }                  }
         }          }
   
 #if 1          tracewin.en = 4;
         tracewin.en = 0;  
         tracewin.fh = FILEH_INVALID;  
 #else  
         tracewin.en = 0;  
         tracewin.fh = FILEH_INVALID;  
         trfh_open(OEMTEXT("traces.txt"));  
 #endif  
   
         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,
Line 423  void trace_init(void) { Line 347  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 440  void trace_fmt(const char *fmt, ...) { Line 365  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) && defined(OSLANG_UCS2)  #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 455  void trace_fmt(const char *fmt, ...) { Line 380  void trace_fmt(const char *fmt, ...) {
                 if ((tracewin.en & 4) && (hView)) {                  if ((tracewin.en & 4) && (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 469  void trace_fmt2(const char *fmt, ...) { Line 394  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) && defined(OSLANG_UCS2)  #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 484  void trace_fmt2(const char *fmt, ...) { Line 409  void trace_fmt2(const char *fmt, ...) {
                 if ((tracewin.en & 4) && (hView)) {                  if ((tracewin.en & 4) && (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);
                 }                  }
         }          }
 }  }

Removed from v.1.6  
changed lines
  Added in v.1.7


RetroPC.NET-CVS <cvs@retropc.net>