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

Windows编程

开发平台:

Visual C++

  1. /*++
  2. Copyright (c) 1991-1997 Microsoft Corporation
  3. Module Name:
  4.     mc.h
  5. Abstract:
  6.     This is the main include file for the Win32 Message Compiler (MC)
  7. Author:
  8.     Steve Wood (stevewo) 21-Aug-1991
  9. Revision History:
  10. --*/
  11. #if 0
  12. #include <nt.h>
  13. #include <ntrtl.h>
  14. #include <nturtl.h>
  15. #endif
  16. #include <process.h>
  17. #include <stdio.h>
  18. #include <stddef.h>
  19. #include <stdlib.h>
  20. #include <stdarg.h>
  21. #include <limits.h>
  22. #include <malloc.h>
  23. #include <errno.h>
  24. #include <ctype.h>
  25. #include <signal.h>
  26. #include <string.h>
  27. #include <time.h>
  28. #include <io.h>
  29. #include <fcntl.h>
  30. #include <conio.h>
  31. #include <systypes.h>
  32. #include <sysstat.h>
  33. #ifdef TOOL
  34. #define MAX_PATH 265
  35. #else
  36. #include <windows.h>
  37. #endif
  38. //
  39. // Global constants
  40. //
  41. #define MCCHAR_END_OF_LINE_COMMENT    ';'
  42. #define MCTOK_END_OF_FILE             0x00
  43. #define MCTOK_NUMBER                  0x01
  44. #define MCTOK_NAME                    0x02
  45. #define MCTOK_EQUAL                   0x03
  46. #define MCTOK_LEFT_PAREN              0x04
  47. #define MCTOK_RIGHT_PAREN             0x05
  48. #define MCTOK_COLON                   0x06
  49. #define MCTOK_PLUS                    0x07
  50. #define MCTOK_END_OF_LINE_COMMENT     0x08
  51. #define MCTOK_MSGIDTYPE_KEYWORD       0x11
  52. #define MCTOK_SEVNAMES_KEYWORD        0x12
  53. #define MCTOK_FACILITYNAMES_KEYWORD   0x13
  54. #define MCTOK_LANGNAMES_KEYWORD       0x14
  55. #define MCTOK_MESSAGEID_KEYWORD       0x15
  56. #define MCTOK_SEVERITY_KEYWORD        0x16
  57. #define MCTOK_FACILITY_KEYWORD        0x17
  58. #define MCTOK_SYMBOLNAME_KEYWORD      0x18
  59. #define MCTOK_LANGUAGE_KEYWORD        0x19
  60. //
  61. // Global data types
  62. //
  63. typedef struct _LANGUAGE_INFO {
  64.     struct _LANGUAGE_INFO *Next;
  65.     ULONG Id;
  66.     ULONG Length;
  67.     PCHAR Text;
  68. } LANGUAGE_INFO, *PLANGUAGE_INFO;
  69. typedef struct _MESSAGE_INFO {
  70.     struct _MESSAGE_INFO *Next;
  71.     ULONG Id;
  72.     ULONG Method;
  73.     PCHAR SymbolicName;
  74.     PCHAR EndOfLineComment;
  75.     PLANGUAGE_INFO MessageText;
  76. } MESSAGE_INFO, *PMESSAGE_INFO;
  77. #define MSG_PLUS_ONE 0
  78. #define MSG_PLUS_VALUE 1
  79. #define MSG_ABSOLUTE 2
  80. typedef struct _MESSAGE_BLOCK {
  81.     struct _MESSAGE_BLOCK *Next;
  82.     ULONG LowId;
  83.     ULONG HighId;
  84.     ULONG InfoLength;
  85.     PMESSAGE_INFO LowInfo;
  86. } MESSAGE_BLOCK, *PMESSAGE_BLOCK;
  87. typedef struct _NAME_INFO {
  88.     struct _NAME_INFO *Next;
  89.     ULONG LastId;
  90.     ULONG Id;
  91.     PVOID Value;
  92.     BOOLEAN Used;
  93.     char Name[ 1 ];
  94. } NAME_INFO, *PNAME_INFO;
  95. //
  96. // Global variables
  97. //
  98. int VerboseOutput;
  99. int WarnOs2Compatible;
  100. int InsertSymbolicName;
  101. int GenerateDecimalValues;
  102. int ResultCode;
  103. ULONG CustomerMsgIdBit;
  104. FILE *MessageFile;
  105. char MessageFileName[ MAX_PATH ];
  106. unsigned int MessageFileLineNumber;
  107. unsigned int Token;
  108. char TokenCharValue[ 256 ];
  109. ULONG TokenNumericValue;
  110. PNAME_INFO TokenKeyword;
  111. FILE *HeaderFile;
  112. char HeaderFileName[ MAX_PATH ];
  113. FILE *RcInclFile;
  114. char RcInclFileName[ MAX_PATH ];
  115. FILE *BinaryMessageFile;
  116. char BinaryMessageFileName[ MAX_PATH ];
  117. char *MessageIdTypeName;
  118. PNAME_INFO FacilityNames;
  119. PNAME_INFO CurrentFacilityName;
  120. PNAME_INFO SeverityNames;
  121. PNAME_INFO CurrentSeverityName;
  122. PNAME_INFO LanguageNames;
  123. PNAME_INFO CurrentLanguageName;
  124. PMESSAGE_INFO Messages;
  125. PMESSAGE_INFO CurrentMessage;
  126. //
  127. // Functions defined in mc.c
  128. //
  129. void
  130. McPrintUsage( void );
  131. //
  132. // Functions defined in mcparse.c
  133. //
  134. BOOLEAN
  135. McParseFile( void );
  136. BOOLEAN
  137. McParseMessageDefinition( void );
  138. BOOLEAN
  139. McParseMessageText(
  140.     PMESSAGE_INFO MessageInfo
  141.     );
  142. BOOLEAN
  143. McParseNameList(
  144.     PNAME_INFO *NameListHead,
  145.     BOOLEAN ValueRequired,
  146.     ULONG MaximumValue
  147.     );
  148. BOOLEAN
  149. McParseName(
  150.     PNAME_INFO NameListHead,
  151.     PNAME_INFO *Result
  152.     );
  153. //
  154. // Functions defined in mcout.c
  155. //
  156. BOOLEAN
  157. McBlockMessages( void );
  158. BOOLEAN
  159. McWriteBinaryFiles( void );
  160. //
  161. // Functions defined in mclex.c
  162. //
  163. BOOLEAN
  164. McInitLexer( void );
  165. BOOLEAN
  166. McOpenInputFile( void );
  167. void
  168. McFlushComments( void );
  169. void
  170. McCloseInputFile( void );
  171. void
  172. McCloseOutputFiles( void );
  173. void
  174. McInputError(
  175.     char *Message,
  176.     BOOLEAN Error,
  177.     PVOID Argument
  178.     );
  179. char *
  180. McGetLine( void );
  181. void
  182. McSkipLine( void );
  183. char
  184. McGetChar(
  185.     BOOLEAN SkipWhiteSpace
  186.     );
  187. void
  188. McUnGetChar(
  189.     char c
  190.     );
  191. unsigned int
  192. McGetToken(
  193.     BOOLEAN KeywordExpected
  194.     );
  195. void
  196. McUnGetToken( void );
  197. char *
  198. McSkipWhiteSpace(
  199.     char *s
  200.     );
  201. //
  202. // Functions defined in mcutil.c
  203. //
  204. PNAME_INFO
  205. McAddName(
  206.     PNAME_INFO *NameListHead,
  207.     char *Name,
  208.     ULONG Id,
  209.     PVOID Value
  210.     );
  211. PNAME_INFO
  212. McFindName(
  213.     PNAME_INFO NameListHead,
  214.     char *Name
  215.     );
  216. BOOLEAN
  217. McCharToInteger(
  218.     PCHAR String,
  219.     int Base,
  220.     PULONG Value
  221.     );
  222. char *
  223. McMakeString(
  224.     char *String
  225.     );