Diff for /np2/wince/w32/trace.cpp between versions 1.2 and 1.3

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
   

Removed from v.1.2  
changed lines
  Added in v.1.3


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