home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2000 January / VPR0001A.ISO / OLS / magdb142 / magdb142.lzh / MagaDbg.h < prev    next >
C/C++ Source or Header  |  1999-10-06  |  6KB  |  230 lines

  1. /*
  2.     MagaDebug32 デバッグツール Ver1.41
  3.     ヘッダーファイル
  4.     (C/C++共通)
  5. */
  6. #if !defined(___MAGADBGCLASS_H)
  7. #define    ___MAGADBGCLASS_H
  8.  
  9. /*
  10.     VisualC++ と BolandC++ に対応
  11. */
  12. #if !defined(_MSC_VER) && !defined(__BORLANDC__)
  13. #error This debug tool is much with VisualC++ and BorlandC++ only.
  14. #endif
  15. #if defined(__BORLANDC__) && defined(__MT__)
  16. #define _MT
  17. #endif
  18.  
  19. /*
  20.     コード生成をデバッグモードに強制 VC++ Only
  21.     (Ver1.41 以降は Release専用lib にて緩和)
  22. #if defined(_MSC_VER) && !defined(_DEBUG)
  23. #error This condition requires that the RuntimeLibrary for debug version should be designated.
  24. #endif
  25. */
  26.  
  27. #include <windows.h>
  28.  
  29. /* MagaDbg クラス名 (メッセージを受け取るプログラム) */
  30. #if !defined(MAGADBGNAME)
  31. #define MAGADBGNAME         "MagaDbg"
  32. #endif
  33.  
  34. /* ユーザ使用フラグ (C/C++共用)*/
  35. #define DBG_NOHEADERDUMP    0x0001    /* ダンプヘッダー非表示 */
  36. #define DBG_OCTDUMP            0x0002    /* 8バイトづつ */
  37. #define DBG_NOADDRESSDUMP    0x0004    /* アドレス非表示 */
  38. #define    DBG_NOCHRDUMP        0x0008    /* キャラクタ非表示 */
  39.  
  40.  
  41. #if defined(__cplusplus)
  42.  
  43. // Aliase of class name
  44. #if defined(_DEBUG)
  45. #if defined(_MT)
  46.     #if !defined(_DLL)
  47.         #define CMagaDbg            CMagaDbg_MT
  48.         #define CMagaDbgFile        CMagaDbgFile_MT
  49.         #define g_MagaDbgMapNumber    g_MagaDbgMapNumber_MT
  50.     #else
  51.         #define CMagaDbg            CMagaDbg_MD
  52.         #define CMagaDbgFile        CMagaDbgFile_MD
  53.         #define g_MagaDbgMapNumber    g_MagaDbgMapNumber_MD
  54.     #endif
  55. #endif
  56. #else    // Release
  57. #if defined(_MT)
  58.     #if !defined(_DLL)
  59.         #define CMagaDbg            CMagaDbg_MTR
  60.         #define CMagaDbgFile        CMagaDbgFile_MTR
  61.         #define g_MagaDbgMapNumber    g_MagaDbgMapNumber_MTR
  62.     #else
  63.         #define CMagaDbg            CMagaDbg_MDR
  64.         #define CMagaDbgFile        CMagaDbgFile_MDR
  65.         #define g_MagaDbgMapNumber    g_MagaDbgMapNumber_MDR
  66.     #endif
  67. #else
  68.     #define CMagaDbg            CMagaDbg_R
  69.     #define CMagaDbgFile        CMagaDbgFile_R
  70.     #define g_MagaDbgMapNumber    g_MagaDbgMapNumber_R
  71. #endif
  72. #endif
  73.  
  74. // ユーザ使用フラグ (C++のみ)
  75. const    BOOL    CR = TRUE;        // 表示後改行
  76. const    BOOL    CRNO = FALSE;    // 表示後非改行
  77. enum    dbgColor
  78.         {DBG_BLACK = 0, DBG_BLUE, DBG_GREEN, DBG_CYAN,
  79.         DBG_RED, DBG_MAGENTA, DBG_YELLOW, DBG_WHITE};
  80.                                 // 表示色
  81. //
  82. // 基本デバッグクラス宣言
  83. // ------------------------------
  84. class CMagaDbg {
  85.  
  86. private:
  87.     char*    m_lpszHead;        // 送信の度に付けるメッセージヘッダ
  88.     int        m_iHeadLen;        // その文字長
  89.     BOOL    m_fSep;            // 破棄されるときに区切り文字を入れるか
  90.     int        m_iColor;        // 表示色(int型で保持)
  91.     DWORD    m_nInterval;    // 表示後のインターバル
  92.  
  93.     COPYDATASTRUCT    m_cds;            // 送信用構造体
  94.     LONG            m_nMapNumber;    // DebugMessage MappingSeq No.
  95.     HANDLE            m_hDbgMap;        // DebugMessage MemoryMappedFile Handle
  96.     LPSTR            m_lpDbgMap;        // DebugMessage Mapping Pointer
  97. private:
  98.     void    CMagaDbgInit(char*, BOOL, dbgColor, DWORD = 0);
  99.  
  100. protected:
  101.     void    SetHeader(char*, CMagaDbg*);
  102.     int        AddHeader(char**, char*);
  103.     HWND    MagaDbgFind(void) {
  104.         return (FindWindow(MAGADBGNAME, NULL));
  105.     }
  106.     BOOL    GetSeparator(void) {
  107.         return m_fSep;
  108.     }
  109.     DWORD    GetInterval(void) {
  110.         return m_nInterval;
  111.     }
  112.  
  113. public:
  114.     CMagaDbg(void);
  115.     CMagaDbg(char*, BOOL = FALSE, dbgColor = DBG_BLACK, DWORD = 0);
  116.     CMagaDbg(char*, dbgColor);
  117.     CMagaDbg(char*, BOOL);
  118.     CMagaDbg(BOOL);
  119.     CMagaDbg(dbgColor);
  120.     CMagaDbg(BOOL, dbgColor);
  121.     virtual    ~CMagaDbg();
  122.  
  123. public:
  124.     virtual    void print(char*,    BOOL = CR);        // 127文字以内の文字列を表示
  125.     void    printf(char*, ...);                    // 127文字以内の任意文字列表示
  126.     void    printStruct(LPRECT, char* = NULL);    // よく使う構造体メンバの表示
  127.     void    printStruct(LPSIZE, char* = NULL);
  128.     void    printStruct(LPPOINT, char* = NULL);
  129.     void    dump(LPVOID, UINT, DWORD = 0);        // ダンプ表示
  130.     BOOL    scanf(char*, char* = NULL);            // 任意文字列入力
  131.     void    SetInterval(DWORD n) {
  132.         m_nInterval = n;
  133.     }
  134. };
  135.  
  136. #define    printRect(LPRECT)        printStruct(LPRECT)
  137. #define    printSize(LPSIZE)        printStruct(LPSIZE)
  138. #define    printPoint(LPPOINT)        printStruct(LPPOINT)
  139.  
  140.  
  141. // CMagaDbgFile用 オプション設定構造体
  142. // ------------------------------
  143. struct MAGADBGOPT {
  144.     char*        lpszFilename;    // ログファイル名
  145.     BOOL        fOverwrite;        // 上書:TRUE,追加:FALSE
  146.     BOOL        fDisplay;        // 表示も:TRUE,ファイル出力のみ:FALSE
  147.     char*        lpHead;            // 以下基本コンストラクタと同じ
  148.     BOOL        fSeparator;
  149.     dbgColor    eColor;
  150.     DWORD        nInterval;
  151. };
  152. #define    LPMAGADBGOPT    MAGADBGOPT*
  153.  
  154. //
  155. // 派生デバッグクラス宣言
  156. // ------------------------------
  157. class CMagaDbgFile : public CMagaDbg {
  158.  
  159. private:
  160.     void    CMagaDbgFileInit(LPMAGADBGOPT);
  161.     void    ErrorMsg(char*, DWORD);
  162.  
  163. private:
  164.     HANDLE    m_hFile;        // LogFile Handle
  165.     BOOL    m_fDisplay;        // 表示も行うかどうか
  166.  
  167. public:
  168.     CMagaDbgFile(LPMAGADBGOPT);
  169.     CMagaDbgFile(char*, BOOL = TRUE, BOOL = TRUE, char* = NULL, BOOL = FALSE, dbgColor = DBG_BLACK, DWORD = 0);
  170.     ~CMagaDbgFile();
  171.  
  172. public:
  173.     void print(char*,    BOOL = CR);    // オーバーライド
  174. };
  175.  
  176.     // End of C++ only
  177. #endif
  178.  
  179.  
  180. /* Aliase of function name */
  181. #if defined(_DEBUG)
  182. #if defined(_MT)
  183.     #if !defined(_DLL)
  184.         #define Dbg_printf    Dbg_printf_MT
  185.         #define Dbg_sep        Dbg_sep_MT
  186.         #define Dbg_scanf    Dbg_scanf_MT
  187.         #define Dbg_dump    Dbg_dump_MT
  188.     #else
  189.         #define Dbg_printf    Dbg_printf_MD
  190.         #define Dbg_sep        Dbg_sep_MD
  191.         #define Dbg_scanf    Dbg_scanf_MD
  192.         #define Dbg_dump    Dbg_dump_MD
  193.     #endif
  194. #endif
  195. #else    /* Release */
  196. #if defined(_MT)
  197.     #if !defined(_DLL)
  198.         #define Dbg_printf    Dbg_printf_MTR
  199.         #define Dbg_sep        Dbg_sep_MTR
  200.         #define Dbg_scanf    Dbg_scanf_MTR
  201.         #define Dbg_dump    Dbg_dump_MTR
  202.     #else
  203.         #define Dbg_printf    Dbg_printf_MDR
  204.         #define Dbg_sep        Dbg_sep_MDR
  205.         #define Dbg_scanf    Dbg_scanf_MDR
  206.         #define Dbg_dump    Dbg_dump_MDR
  207.     #endif
  208. #else
  209.     #define Dbg_printf    Dbg_printf_R
  210.     #define Dbg_sep        Dbg_sep_R
  211.     #define Dbg_scanf    Dbg_scanf_R
  212.     #define Dbg_dump    Dbg_dump_R
  213. #endif
  214. #endif
  215.  
  216. #if defined(__cplusplus)
  217. extern "C" {
  218. #endif
  219.  
  220. void Dbg_printf(char *, ...);
  221. void Dbg_sep(void);
  222. BOOL Dbg_scanf(char *, char *);
  223. void Dbg_dump(void *, UINT, DWORD);
  224.  
  225. #if defined(__cplusplus)
  226. }
  227. #endif
  228.  
  229. #endif
  230.