DEBUG.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. //==========================================================================;
  2. //
  3. //  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  4. //  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  5. //  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  6. //  PURPOSE.
  7. //
  8. //  Copyright (C) 1992 - 1997 Microsoft Corporation.  All Rights Reserved.
  9. //
  10. //--------------------------------------------------------------------------;
  11. //
  12. //  debug.c
  13. //
  14. //  Description:
  15. //      This file contains code yanked from several places to provide debug
  16. //      support that works in win 16 and win 32.
  17. //
  18. //
  19. //==========================================================================;
  20. #ifdef DEBUG
  21. #include <windows.h>
  22. #include <windowsx.h>
  23. #include <mmsystem.h>
  24. #include <stdarg.h>
  25. #include "debug.h"
  26. BOOL    __gfDbgEnabled          = TRUE;         // master enable
  27. UINT    __guDbgLevel            = 0;            // current debug level
  28. //--------------------------------------------------------------------------;
  29. //
  30. //  void DbgVPrintF
  31. //
  32. //  Description:
  33. //
  34. //
  35. //  Arguments:
  36. //      LPSTR szFormat:
  37. //
  38. //      va_list va:
  39. //
  40. //  Return (void):
  41. //      No value is returned.
  42. //
  43. //--------------------------------------------------------------------------;
  44. void FAR CDECL DbgVPrintF
  45. (
  46.     LPSTR                   szFormat,
  47.     va_list                 va
  48. )
  49. {
  50.     char                ach[DEBUG_MAX_LINE_LEN];
  51.     BOOL                fDebugBreak = FALSE;
  52.     BOOL                fPrefix     = TRUE;
  53.     BOOL                fCRLF       = TRUE;
  54.     ach[0] = '';
  55.     for (;;)
  56.     {
  57.         switch (*szFormat)
  58.         {
  59.             case '!':
  60.                 fDebugBreak = TRUE;
  61.                 szFormat++;
  62.                 continue;
  63.             case '`':
  64.                 fPrefix = FALSE;
  65.                 szFormat++;
  66.                 continue;
  67.             case '~':
  68.                 fCRLF = FALSE;
  69.                 szFormat++;
  70.                 continue;
  71.         }
  72.         break;
  73.     }
  74.     if (fDebugBreak)
  75.     {
  76.         ach[0] = '07';
  77.         ach[1] = '';
  78.     }
  79.     if (fPrefix)
  80.     {
  81.         lstrcatA(ach, DEBUG_MODULE_NAME ": ");
  82.     }
  83.     wvsprintfA(ach + lstrlenA(ach), szFormat, va);
  84.     if (fCRLF)
  85.     {
  86.         lstrcatA(ach, "rn");
  87.     }
  88.     OutputDebugStringA(ach);
  89.     if (fDebugBreak)
  90.     {
  91.         DebugBreak();
  92.     }
  93. } // DbgVPrintF()
  94. //--------------------------------------------------------------------------;
  95. //
  96. //  void dprintf
  97. //
  98. //  Description:
  99. //      dprintf() is called by the DPF() macro if DEBUG is defined at compile
  100. //      time. It is recommended that you only use the DPF() macro to call
  101. //      this function--so you don't have to put #ifdef DEBUG around all
  102. //      of your code.
  103. //
  104. //  Arguments:
  105. //      UINT uDbgLevel:
  106. //
  107. //      LPSTR szFormat:
  108. //
  109. //  Return (void):
  110. //      No value is returned.
  111. //
  112. //--------------------------------------------------------------------------;
  113. void FAR CDECL dprintf
  114. (
  115.     UINT                    uDbgLevel,
  116.     LPSTR                   szFormat,
  117.     ...
  118. )
  119. {
  120.     va_list va;
  121.     if (!__gfDbgEnabled || (__guDbgLevel < uDbgLevel))
  122.         return;
  123.     va_start(va, szFormat);
  124.     DbgVPrintF(szFormat, va);
  125.     va_end(va);
  126. } // dprintf()
  127. //--------------------------------------------------------------------------;
  128. //
  129. //  BOOL DbgEnable
  130. //
  131. //  Description:
  132. //
  133. //
  134. //  Arguments:
  135. //      BOOL fEnable:
  136. //
  137. //  Return (BOOL):
  138. //      Returns the previous debugging state.
  139. //
  140. //--------------------------------------------------------------------------;
  141. BOOL WINAPI DbgEnable
  142. (
  143.     BOOL                    fEnable
  144. )
  145. {
  146.     BOOL                fOldState;
  147.     fOldState      = __gfDbgEnabled;
  148.     __gfDbgEnabled = fEnable;
  149.     return (fOldState);
  150. } // DbgEnable()
  151. //--------------------------------------------------------------------------;
  152. //
  153. //  UINT DbgSetLevel
  154. //
  155. //  Description:
  156. //
  157. //
  158. //  Arguments:
  159. //      UINT uLevel:
  160. //
  161. //  Return (UINT):
  162. //      Returns the previous debugging level.
  163. //
  164. //--------------------------------------------------------------------------;
  165. UINT WINAPI DbgSetLevel
  166. (
  167.     UINT                    uLevel
  168. )
  169. {
  170.     UINT                uOldLevel;
  171.     uOldLevel    = __guDbgLevel;
  172.     __guDbgLevel = uLevel;
  173.     return (uOldLevel);
  174. } // DbgSetLevel()
  175. //--------------------------------------------------------------------------;
  176. //
  177. //  UINT DbgGetLevel
  178. //
  179. //  Description:
  180. //
  181. //
  182. //  Arguments:
  183. //      None.
  184. //
  185. //  Return (UINT):
  186. //      Returns the current debugging level.
  187. //
  188. //--------------------------------------------------------------------------;
  189. UINT WINAPI DbgGetLevel
  190. (
  191.     void
  192. )
  193. {
  194.     return (__guDbgLevel);
  195. } // DbgGetLevel()
  196. //--------------------------------------------------------------------------;
  197. //
  198. //  UINT DbgInitialize
  199. //
  200. //  Description:
  201. //
  202. //
  203. //  Arguments:
  204. //      BOOL fEnable:
  205. //
  206. //  Return (UINT):
  207. //      Returns the debugging level that was set.
  208. //
  209. //--------------------------------------------------------------------------;
  210. UINT WINAPI DbgInitialize
  211. (
  212.     BOOL                    fEnable
  213. )
  214. {
  215.     UINT                uLevel;
  216.     uLevel = GetProfileIntA(DEBUG_SECTION, DEBUG_MODULE_NAME, (UINT)-1);
  217.     if ((UINT)-1 == uLevel)
  218.     {
  219.         //
  220.         //  if the debug key is not present, then force debug output to
  221.         //  be disabled. this way running a debug version of a component
  222.         //  on a non-debugging machine will not generate output unless
  223.         //  the debug key exists.
  224.         //
  225.         uLevel  = 0;
  226.         fEnable = FALSE;
  227.     }
  228.     DbgSetLevel(uLevel);
  229.     DbgEnable(fEnable);
  230.     return (__guDbgLevel);
  231. } // DbgInitialize()
  232. #endif // #ifdef DEBUG