|
|
1.1 ! root 1: /*++ ! 2: ! 3: Copyright (c) 1991 Microsoft Corporation ! 4: ! 5: Module Name: ! 6: ! 7: mc.c ! 8: ! 9: Abstract: ! 10: ! 11: This is the main source file for the Win32 Message Compiler (MC) ! 12: ! 13: --*/ ! 14: ! 15: #include "mc.h" ! 16: ! 17: #include "windows.h" ! 18: ! 19: ! 20: void ! 21: ConvertAppToOem( unsigned argc, char* argv[] ) ! 22: /*++ ! 23: ! 24: Routine Description: ! 25: ! 26: Converts the command line from ANSI to OEM, and force the app ! 27: to use OEM APIs ! 28: ! 29: Arguments: ! 30: ! 31: argc - Standard C argument count. ! 32: ! 33: argv - Standard C argument strings. ! 34: ! 35: Return Value: ! 36: ! 37: None. ! 38: ! 39: --*/ ! 40: ! 41: { ! 42: unsigned i; ! 43: ! 44: for( i=0; i<argc; i++ ) { ! 45: CharToOem( argv[i], argv[i] ); ! 46: } ! 47: SetFileApisToOEM(); ! 48: } ! 49: ! 50: ! 51: ! 52: ! 53: void ! 54: McPrintUsage( void ) ! 55: { ! 56: fprintf( stderr, "usage: MC [-?vws] [-h dirspec] [-r dirspec] filename.mc\n" ); ! 57: fprintf( stderr, " -? - displays this message\n" ); ! 58: fprintf( stderr, " -v - gives verbose output.\n" ); ! 59: fprintf( stderr, " -c - sets the Customer bit in all the message Ids.\n" ); ! 60: fprintf( stderr, " -d - numeric values in header file in decimal.\n" ); ! 61: fprintf( stderr, " -w - warns if message text contains non-OS/2 compatible inserts.\n" ); ! 62: fprintf( stderr, " -s - insert symbolic name as first line of each message.\n" ); ! 63: fprintf( stderr, " -h pathspec - gives the path of where to create the C include file\n" ); ! 64: fprintf( stderr, " Default is .\\\n" ); ! 65: fprintf( stderr, " -r pathspec - gives the path of where to create the RC include file\n" ); ! 66: fprintf( stderr, " and the binary message resource files it includes.\n" ); ! 67: fprintf( stderr, " Default is .\\\n" ); ! 68: fprintf( stderr, " filename.mc - gives the names of a message text file\n" ); ! 69: fprintf( stderr, " to compile.\n" ); ! 70: } ! 71: ! 72: ! 73: int ! 74: _CRTAPI1 main( ! 75: int argc, ! 76: char *argv[] ! 77: ) ! 78: { ! 79: char c, *s, *s1; ! 80: int ShowUsage; ! 81: ! 82: ! 83: ConvertAppToOem( argc, argv ); ! 84: FacilityNames = NULL; ! 85: SeverityNames = NULL; ! 86: LanguageNames = NULL; ! 87: ! 88: MessageIdTypeName = NULL; ! 89: ! 90: CurrentFacilityName = ! 91: McAddName( &FacilityNames, "Application", 0x0, NULL ); ! 92: CurrentSeverityName = ! 93: McAddName( &SeverityNames, "Success", 0x0, NULL ); ! 94: ! 95: McAddName( &SeverityNames, "Informational", 0x1, NULL ); ! 96: McAddName( &SeverityNames, "Warning", 0x2, NULL ); ! 97: McAddName( &SeverityNames, "Error", 0x3, NULL ); ! 98: ! 99: McAddName( &LanguageNames, ! 100: "English", ! 101: MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), ! 102: "MSG00001" ! 103: ); ! 104: ! 105: strcpy( HeaderFileName, ".\\" ); ! 106: strcpy( RcInclFileName, ".\\" ); ! 107: strcpy( BinaryMessageFileName, ".\\" ); ! 108: MessageFileName[ 0 ] = '\0'; ! 109: ! 110: McInitLexer(); ! 111: ! 112: VerboseOutput = FALSE; ! 113: WarnOs2Compatible = FALSE; ! 114: GenerateDecimalValues = FALSE; ! 115: ShowUsage = FALSE; ! 116: while (--argc) { ! 117: s = *++argv; ! 118: if (*s == '-' || *s == '/') { ! 119: while (c = *++s) { ! 120: switch( c ) { ! 121: case '?': ! 122: McPrintUsage(); ! 123: exit( 0 ); ! 124: break; ! 125: ! 126: case 'c': ! 127: CustomerMsgIdBit = 0x1 << 29; ! 128: break; ! 129: ! 130: case 'v': ! 131: VerboseOutput = TRUE; ! 132: break; ! 133: ! 134: case 'd': ! 135: GenerateDecimalValues = TRUE; ! 136: break; ! 137: ! 138: case 'w': ! 139: WarnOs2Compatible = TRUE; ! 140: break; ! 141: ! 142: case 's': ! 143: InsertSymbolicName = TRUE; ! 144: break; ! 145: ! 146: case 'h': ! 147: if (--argc) { ! 148: strcpy( s1 = HeaderFileName, *++argv ); ! 149: s1 += strlen( s1 ) - 1; ! 150: if (*s1 != '\\' && *s1 != '/') { ! 151: *++s1 = '\\'; ! 152: *++s1 = '\0'; ! 153: } ! 154: } ! 155: else { ! 156: argc++; ! 157: fprintf( stderr, "MC: missing argument for -%c switch\n", (USHORT)c ); ! 158: ShowUsage = TRUE; ! 159: } ! 160: break; ! 161: ! 162: case 'r': ! 163: if (--argc) { ! 164: strcpy( s1 = RcInclFileName, *++argv ); ! 165: s1 += strlen( s1 ) - 1; ! 166: if (*s1 != '\\' && *s1 != '/') { ! 167: *++s1 = '\\'; ! 168: *++s1 = '\0'; ! 169: } ! 170: ! 171: strcpy( BinaryMessageFileName, RcInclFileName ); ! 172: } ! 173: else { ! 174: argc++; ! 175: fprintf( stderr, "MC: missing argument for -%c switch\n", (USHORT)c ); ! 176: ShowUsage = TRUE; ! 177: } ! 178: break; ! 179: ! 180: default: ! 181: fprintf( stderr, "MC: Invalid switch: %c\n", (USHORT)c ); ! 182: ShowUsage = TRUE; ! 183: break; ! 184: } ! 185: } ! 186: } ! 187: else ! 188: if (strlen( MessageFileName )) { ! 189: fprintf( stderr, "MC: may only specify one message file to compile.\n" ); ! 190: ShowUsage = TRUE; ! 191: } ! 192: else { ! 193: strcpy( MessageFileName, s ); ! 194: } ! 195: } ! 196: ! 197: if (ShowUsage) { ! 198: McPrintUsage(); ! 199: exit( 1 ); ! 200: } ! 201: ! 202: ResultCode = 1; ! 203: if (McParseFile() && McBlockMessages() && McWriteBinaryFiles()) { ! 204: ResultCode = 0; ! 205: } ! 206: else { ! 207: McCloseInputFile(); ! 208: McCloseOutputFiles(); ! 209: } ! 210: ! 211: return( ResultCode ); ! 212: } ! 213:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.