home *** CD-ROM | disk | FTP | other *** search
/ s-gikan2.maizuru-ct.ac.jp / s-gikan2.maizuru-ct.ac.jp.zip / s-gikan2.maizuru-ct.ac.jp / pub / source / magdb141su.lzh / MagaDbgLib.c < prev    next >
C/C++ Source or Header  |  1999-07-19  |  3KB  |  147 lines

  1. /*
  2.     MagaDebug32 âfâoâbâOâcü[âï Ver1.41
  3.     ébî╛îΩû{æ╠
  4. */
  5. #include <stdio.h>
  6. #include <stdarg.h>
  7. #include "MagaDbgMsg.h"
  8.  
  9.  
  10. // öCê╙ò╢ÄÜù±ò\Ī
  11. // --------------------------------
  12. void Dbg_printf(char *s, ...) {
  13.  
  14.     HWND                hwnd;
  15.     COPYDATASTRUCT        cds;        // æùÉMùpì\æóæ╠
  16.     char                msg[STRLEN];
  17.     char                *pArg;
  18.     int                    len;
  19.  
  20.     if ( (hwnd=FindWindow(MAGADBGNAME, NULL))==NULL ) return;
  21.     pArg = (char *)&s + sizeof(s);
  22. #if defined(_MSC_VER)
  23.     if ( (len=_vsnprintf(msg, STRLEN, s, pArg)) == -1 ) {
  24. #else
  25.     if ( (len=vsprintf(msg, s, pArg)) == EOF ) {
  26. #endif
  27.         msg[STRLEN-1] = '\0';
  28.         len = STRLEN-1;
  29.     }
  30.     cds.dwData = DBG_CR;
  31.     cds.lpData = msg;
  32.     cds.cbData = len;
  33.     SendMessage(hwnd, WM_COPYDATA, 0, (LPARAM)&cds);
  34. }
  35.  
  36.  
  37. // âZâpâîü[â^æ}ôⁿ
  38. // --------------------------------
  39. void Dbg_sep(void) {
  40.     HWND    hwnd;
  41.     if ( (hwnd=FindWindow(MAGADBGNAME, NULL))==NULL ) return;
  42.     SendMessage(hwnd, WM_COMMAND, ID_INS_MARK, 0);
  43. }
  44.  
  45.  
  46. // öCê╙ò╢ÄÜù±ôⁿù═
  47. // --------------------------------
  48. BOOL Dbg_scanf(char *szIndata, char *szTitle) {
  49.  
  50.     HWND    hwnd;
  51.     HANDLE    hFileMap;
  52.     LPVOID    lpView;
  53.  
  54.     if ( szIndata==NULL ) return -1;
  55.     if ( (hwnd=FindWindow(MAGADBGNAME, NULL))==NULL ) return -1;
  56.  
  57.     hFileMap = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
  58.         PAGE_READWRITE, 0, STRLEN, MAGADBG_SCANF_MAP);
  59.     if ( hFileMap==NULL || GetLastError()==ERROR_ALREADY_EXISTS ) {
  60.         return -1;
  61.     }
  62.     lpView = MapViewOfFile(hFileMap, FILE_MAP_READ | FILE_MAP_WRITE,
  63.         0, 0, 0);
  64.     if ( (BYTE *)lpView == NULL ) {
  65.         CloseHandle(hFileMap);
  66.         return -1;
  67.     }
  68.     if ( szTitle != NULL )
  69.         lstrcpyn((LPTSTR)lpView, szTitle, STRLEN);
  70.     else
  71.         lstrcpy((LPTSTR)lpView, "");
  72.     UnmapViewOfFile(lpView);
  73.     if ( SendMessage(hwnd, WM_SCANF, 0, 0) == IDCANCEL ) {
  74.         CloseHandle(hFileMap);
  75.         return -1;
  76.     }
  77.     lpView = MapViewOfFile(hFileMap, FILE_MAP_READ | FILE_MAP_WRITE,
  78.         0, 0, 0);
  79.     if ( (BYTE *)lpView == NULL ) {
  80.         CloseHandle(hFileMap);
  81.         return -1;
  82.     }
  83.     lstrcpyn(szIndata, (LPCTSTR)lpView,
  84.         min(STRLEN, lstrlen((LPCTSTR)lpView)+1));
  85.     UnmapViewOfFile(lpView);
  86.     CloseHandle(hFileMap);
  87.     return 0;
  88. }
  89.  
  90.  
  91. // â_âôâvò\Ī
  92. // --------------------------------
  93. void Dbg_dump(void *lp, UINT byte, DWORD flg) {
  94.  
  95.     char    szbuf[STRLEN], szasc[32], sztmp[16];
  96.     UINT    i, ii, factor;
  97.  
  98.     factor = flg & DBG_OCTDUMP ? 8 : 16;
  99.     if ( !(flg & DBG_NOHEADERDUMP) ) {
  100.         if ( !(flg & DBG_NOADDRESSDUMP) )
  101.             lstrcpy(szbuf, "     ");
  102.         else
  103.             szbuf[0] = '\0';
  104.         for (i=0; i<factor; i++) {
  105.             wsprintf(sztmp, " +%X", i);
  106.             lstrcat(szbuf, sztmp);
  107.         }
  108.         Dbg_printf(szbuf);
  109.         if ( !(flg & DBG_NOADDRESSDUMP) )
  110.             lstrcpy(szbuf, "     ");
  111.         else
  112.             szbuf[0] = '\0';
  113.         for (i=0; i<factor; i++) lstrcat(szbuf, "---");
  114.         Dbg_printf(szbuf);
  115.     }
  116.  
  117.     ii = 0;
  118.     while ( ii < byte ) {
  119.         if ( !(flg & DBG_NOADDRESSDUMP) ) {
  120.             wsprintf(sztmp, "%04X ", ii);
  121.             lstrcpy(szbuf, sztmp);
  122.         }
  123.         else {
  124.             szbuf[0] = '\0';
  125.         }
  126.         i = 0;
  127.         while ( ii+i<byte && i<factor ) {
  128.             wsprintf(sztmp, " %02X", *((unsigned char *)lp+ii+i));
  129.             lstrcat(szbuf, sztmp);
  130.             if ( !(flg & DBG_NOCHRDUMP) ) {
  131.                 if ( *((unsigned char *)lp+ii+i)>=0x20 && *((unsigned char *)lp+ii+i)<=0x7e )
  132.                     szasc[i] = *((unsigned char *)lp+ii+i);
  133.                 else
  134.                     szasc[i] = '.';
  135.             }
  136.             i++;
  137.         }
  138.         if ( !(flg & DBG_NOCHRDUMP) ) {
  139.             szasc[i] = '\0';
  140.             for ( ; i<factor; i++) lstrcat(szbuf, "   ");
  141.             lstrcat(lstrcat(szbuf, "  "), szasc);
  142.         }
  143.         Dbg_printf(szbuf);
  144.         ii += factor;
  145.     }
  146. }
  147.