Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

244 lines
5.1 KiB

  1. #ifdef _DEBUG
  2. #ifndef WIN32_LEAN_AND_MEAN
  3. #define WIN32_LEAN_AND_MEAN
  4. #endif
  5. #include <windows.h>
  6. #include <windowsx.h>
  7. #include <commdlg.h>
  8. #include <stdarg.h>
  9. #include "dbg.h"
  10. static VOID DbgSetWinTextA(LPSTR lpstr);
  11. static VOID DbgSetWinTextW(LPWSTR lpwstr);
  12. #define PRINT_STRW //OutputDebugStringW
  13. #define PRINT_STRA //OutputDebugStringA
  14. //-------------------------------------------------------
  15. //Global String buffer
  16. //-------------------------------------------------------
  17. static WCHAR g_wchBuf[1024];
  18. static CHAR g_chBuf[1024];
  19. static LPSTR GetFileTitleStrA(LPSTR lpstrFile)
  20. {
  21. static CHAR tchJunk64[64];
  22. GetFileTitleA(lpstrFile, tchJunk64, sizeof(tchJunk64));
  23. return tchJunk64;
  24. }
  25. static LPWSTR GetFileTitleStrW(LPWSTR lpstrFile)
  26. {
  27. static WCHAR tchJunk64[64];
  28. GetFileTitleW(lpstrFile, tchJunk64, sizeof(tchJunk64));
  29. return tchJunk64;
  30. }
  31. ////////////////////////////////////////////////////////
  32. // Function : _plvDbgMBA
  33. // Type : VOID
  34. // Purpose : Popup Debug MessageBox
  35. // Args :
  36. // : LPSTR lpstrFile
  37. // : INT lineNo
  38. // : LPSTR lpstrMsg
  39. // Return :
  40. // DATE :
  41. /////////////////////////////////////////////////////////
  42. VOID _plvDbgMBA(LPSTR lpstrFile,
  43. INT lineNo,
  44. LPSTR lpstrMsg)
  45. {
  46. wsprintfA(g_chBuf,
  47. "%s(%d)%s",
  48. GetFileTitleStrA(lpstrFile),
  49. lineNo,
  50. lpstrMsg);
  51. MessageBoxA(NULL,
  52. g_chBuf,
  53. "#### IMEPAD ERROR MESSAGE #####",
  54. MB_ICONERROR | MB_OK | MB_APPLMODAL);
  55. return;
  56. }
  57. VOID _plvDbgMBW(LPWSTR lpstrFile,
  58. INT lineNo,
  59. LPWSTR lpstrMsg)
  60. {
  61. wsprintfW(g_wchBuf,
  62. L"%s(%d)%s",
  63. GetFileTitleStrW(lpstrFile),
  64. lineNo,
  65. lpstrMsg);
  66. MessageBoxW(NULL,
  67. lpstrFile,
  68. L"#### ERROR #####",
  69. MB_OK | MB_APPLMODAL);
  70. return;
  71. }
  72. ////////////////////////////////////////////////////////
  73. // Function : _plvDbgVaStrW
  74. // Type : LPWSTR
  75. // Purpose :
  76. // Args :
  77. // : LPWSTR lpstrFmt
  78. // Return :
  79. // DATE :
  80. /////////////////////////////////////////////////////////
  81. LPWSTR _plvDbgVaStrW(LPWSTR lpstrFmt, ...)
  82. {
  83. static WCHAR wchBuf[512];
  84. va_list ap;
  85. va_start(ap, lpstrFmt);
  86. wvsprintfW(wchBuf, lpstrFmt, ap);
  87. va_end(ap);
  88. return wchBuf;
  89. }
  90. LPSTR _plvDbgVaStrA(LPSTR lpstrFmt, ...)
  91. {
  92. static CHAR chBuf[512];
  93. va_list ap;
  94. va_start(ap, lpstrFmt);
  95. wvsprintfA(chBuf, lpstrFmt, ap);
  96. va_end(ap);
  97. return chBuf;
  98. }
  99. ////////////////////////////////////////////////////////
  100. // Function: _plvDbgPrint
  101. // Type : VOID
  102. // Purpose : variable args version of OutputDebugString
  103. // Args :
  104. // : LPSTR lpstrFmt
  105. // : ...
  106. // Return :
  107. // DATE :
  108. /////////////////////////////////////////////////////////
  109. VOID _plvDbgPrintA(LPSTR lpstrFmt, ...)
  110. {
  111. va_list ap;
  112. va_start(ap, lpstrFmt);
  113. wvsprintfA(g_chBuf, lpstrFmt, ap);
  114. va_end(ap);
  115. PRINT_STRA(g_chBuf);
  116. DbgSetWinTextA(g_chBuf);
  117. return;
  118. }
  119. VOID _plvDbgPrintW(LPWSTR lpstrFmt, ...)
  120. {
  121. va_list ap;
  122. va_start(ap, lpstrFmt);
  123. wvsprintfW(g_wchBuf, lpstrFmt, ap);
  124. va_end(ap);
  125. PRINT_STRW(g_wchBuf);
  126. DbgSetWinTextW(g_wchBuf);
  127. return;
  128. }
  129. ////////////////////////////////////////////////////////
  130. // Function: _plvDbg
  131. // Type : VOID
  132. // Purpose :
  133. // Args :
  134. // : LPSTR lpstrFile
  135. // : INT lineNo
  136. // : LPTSR lpstrMsg
  137. // Return :
  138. // DATE :
  139. /////////////////////////////////////////////////////////
  140. VOID _plvDbgA(LPSTR lpstrFile,
  141. INT lineNo,
  142. LPSTR lpstrMsg
  143. )
  144. {
  145. _plvDbgPrintA("(%s:%d) %s",
  146. GetFileTitleStrA(lpstrFile),
  147. lineNo,
  148. lpstrMsg);
  149. return;
  150. }
  151. VOID _plvDbgW(LPWSTR lpstrFile,
  152. INT lineNo,
  153. LPWSTR lpstrMsg
  154. )
  155. {
  156. _plvDbgPrintW(L"(%s:%d) %s",
  157. GetFileTitleStrW(lpstrFile),
  158. lineNo,
  159. lpstrMsg);
  160. return;
  161. }
  162. LPWSTR _plvDbgMulti2Wide(LPSTR lpstr)
  163. {
  164. MultiByteToWideChar(CP_ACP,
  165. MB_PRECOMPOSED,
  166. lpstr, -1,
  167. (WCHAR*)g_wchBuf, sizeof(g_wchBuf)/sizeof(WCHAR) );
  168. return g_wchBuf;
  169. }
  170. #define ID_EDITWIN 0x40
  171. #define ID_BTN_CLEAR 0x41
  172. static HWND g_hwndDbg;
  173. static VOID DbgSetWinTextA(LPSTR lpstr)
  174. {
  175. HWND hwndEdit;
  176. INT len;
  177. if(!g_hwndDbg) {
  178. return;
  179. }
  180. if(!lpstr) {
  181. return;
  182. }
  183. hwndEdit = GetDlgItem(g_hwndDbg, ID_EDITWIN);
  184. if(!hwndEdit) {
  185. return;
  186. }
  187. len = lstrlen(lpstr);
  188. if(lpstr[len-1] == '\n') {
  189. lpstr[len-1] = '\r';
  190. lpstr[len]='\n'; //lpstr is static enough size buffer's pointer.
  191. lpstr[len+1]=0x00;
  192. }
  193. Edit_SetSel(hwndEdit, (WPARAM)-2, (LPARAM)-2);
  194. Edit_ReplaceSel(hwndEdit, lpstr);
  195. return;
  196. }
  197. static VOID DbgSetWinTextW(LPWSTR lpwstr)
  198. {
  199. static CHAR szStr[512];
  200. WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK,
  201. lpwstr, -1,
  202. szStr,
  203. sizeof(szStr),
  204. NULL, NULL);
  205. DbgSetWinTextA(szStr);
  206. }
  207. VOID _plvDbgAssert(LPCTSTR fileName,
  208. INT line,
  209. BOOL flag,
  210. LPCTSTR pszExp)
  211. {
  212. if(!flag) {
  213. wsprintf(g_chBuf, " Assertion Faled %s(%d) %s\n",
  214. GetFileTitleStrA((CHAR *)fileName),
  215. line,
  216. pszExp != (LPCTSTR)NULL ? pszExp : "");
  217. PRINT_STRA(g_chBuf);
  218. DebugBreak();
  219. }
  220. }
  221. #endif // _DEBUG