Leaked source code of windows server 2003

144 lines
2.9 KiB

  1. /*++
  2. Copyright (c) 1997-2000 Microsoft Corporation
  3. Module Name:
  4. EzParse.h
  5. Abstract:
  6. Poor man C/C++/any file parser declaration.
  7. Author:
  8. Gor Nishanov (gorn) 03-Apr-1999
  9. Revision History:
  10. Gor Nishanov (gorn) 03-Apr-1999 -- hacked together to prove that this can work
  11. ToDo:
  12. Clean it up
  13. --*/
  14. typedef struct STR_PAIR
  15. {
  16. LPCSTR beg;
  17. LPCSTR end;
  18. bool empty() const { return beg == end; }
  19. STR_PAIR():beg(0),end(0){}
  20. STR_PAIR(LPCSTR inBeg, LPCSTR inEnd):beg(inBeg),end(inEnd) {}
  21. } STR_PAIR, *PSTR_PAIR;
  22. typedef struct _EZPARSE_CONTEXT {
  23. LPCSTR start;
  24. LPCSTR currentStart;
  25. LPCSTR currentEnd;
  26. LPCSTR filename;
  27. LPCSTR lastScanned;
  28. UINT scannedLineCount;
  29. LPCSTR macroEnd;
  30. BOOL doubleParent;
  31. struct _EZPARSE_CONTEXT * previousContext;
  32. DWORD Options;
  33. } EZPARSE_CONTEXT, *PEZPARSE_CONTEXT;
  34. void ExParsePrintErrorPrefix(FILE* f, char* funcname);
  35. extern DWORD ErrorCount;
  36. #define ReportError ExParsePrintErrorPrefix(stdout, __FUNCTION__);printf
  37. typedef
  38. DWORD (*EZPARSE_CALLBACK) (PSTR_PAIR, INT, PVOID, PEZPARSE_CONTEXT);
  39. typedef
  40. DWORD (*PROCESSFILE_CALLBACK) (
  41. LPCSTR, LPCSTR, EZPARSE_CALLBACK,PVOID,PEZPARSE_CONTEXT);
  42. DWORD
  43. EzGetLineNo(
  44. IN LPCSTR Ptr,
  45. IN PEZPARSE_CONTEXT
  46. );
  47. DWORD
  48. EzParse(
  49. IN LPCSTR filename,
  50. IN EZPARSE_CALLBACK Callback,
  51. IN PVOID Context);
  52. DWORD
  53. EzParseWithOptions(
  54. IN LPCSTR filename,
  55. IN EZPARSE_CALLBACK Callback,
  56. IN PVOID Context,
  57. IN DWORD Options
  58. );
  59. DWORD
  60. EzParseEx(
  61. IN LPCSTR filename,
  62. IN PROCESSFILE_CALLBACK ProcessData,
  63. IN EZPARSE_CALLBACK Callback,
  64. IN PVOID Context,
  65. IN DWORD Options);
  66. DWORD
  67. EzParseResourceEx(
  68. IN LPCSTR ResName,
  69. IN PROCESSFILE_CALLBACK ProcessData,
  70. IN EZPARSE_CALLBACK Callback,
  71. IN PVOID Context);
  72. DWORD
  73. SmartScan(
  74. IN LPCSTR begin,
  75. IN LPCSTR end,
  76. IN EZPARSE_CALLBACK Callback,
  77. IN PVOID Context,
  78. IN OUT PEZPARSE_CONTEXT ParseContext
  79. );
  80. DWORD
  81. ScanForFunctionCalls(
  82. IN LPCSTR begin,
  83. IN LPCSTR end,
  84. IN EZPARSE_CALLBACK Callback,
  85. IN PVOID Context,
  86. IN OUT PEZPARSE_CONTEXT ParseContext
  87. );
  88. enum {
  89. NO_SEMICOLON = 0x01,
  90. IGNORE_CPP_COMMENT = 0x02,
  91. IGNORE_POUND_COMMENT = 0x04,
  92. IGNORE_COMMENT = IGNORE_CPP_COMMENT | IGNORE_POUND_COMMENT,
  93. };
  94. DWORD
  95. ScanForFunctionCallsEx(
  96. IN LPCSTR begin,
  97. IN LPCSTR end,
  98. IN EZPARSE_CALLBACK Callback,
  99. IN PVOID Context,
  100. IN OUT PEZPARSE_CONTEXT ParseContext,
  101. IN DWORD Options
  102. );
  103. __declspec(selectany) int DbgLevel = 0;
  104. enum DBG_LEVELS {
  105. DBG_UNUSUAL = 1,
  106. DBG_NOISE = 2,
  107. DBG_FLOOD = 3,
  108. };
  109. #define Always printf
  110. #define Flood (DbgLevel < DBG_FLOOD)?0:printf
  111. #define Noise (DbgLevel < DBG_NOISE)?0:printf
  112. #define Unusual (DbgLevel < DBG_UNUSUAL)?0:printf