1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS EventCreate Command
4 * FILE: base/applications/cmdutils/eventcreate/evtmsggen.c
5 * PURPOSE: Generator for the event message string templates file.
6 * Creates the message string file in the current directory.
7 * PROGRAMMER: Hermes Belusca-Maito
8 *
9 * You can compile this generator:
10 * with GCC : $ gcc -o evtmsggen.exe evtmsggen.c
11 * with MSVC: $ cl evtmsggen.c (or: $ cl /Fe"evtmsggen.exe" evtmsggen.c)
12 */
13
14 #include <stdio.h>
15
16 /*
17 * Enable/disable this option to use "English" for the message table language.
18 * The default behaviour when the option is disabled selects "Neutral" language.
19 */
20 // #define ENGLISH
21
22 /* The default End-Of-Line control for the message file */
23 #define EOL "\r\n"
24
25
usage(char * name)26 static void usage(char* name)
27 {
28 fprintf(stdout, "Usage: %s ID_min ID_max outfile.mc\n", name);
29 }
30
main(int argc,char * argv[])31 int main(int argc, char* argv[])
32 {
33 FILE* outFile;
34 unsigned int id_min, id_max;
35 unsigned int i;
36
37 /* Validate the arguments */
38 if (argc != 4)
39 {
40 usage(argv[0]);
41 return -1;
42 }
43
44 id_min = (unsigned int)atoi(argv[1]);
45 id_max = (unsigned int)atoi(argv[2]);
46 if (id_min > id_max)
47 {
48 fprintf(stderr, "ERROR: Min ID %u cannot be strictly greater than Max ID %u !\n", id_min, id_max);
49 return -1;
50 }
51
52 /* Open the file */
53 outFile = fopen(argv[3], "wb");
54 if (!outFile)
55 {
56 fprintf(stderr, "ERROR: Could not create output file '%s'.\n", argv[3]);
57 return -1;
58 }
59
60 /* Generate the file */
61
62 /* Write the header */
63 fprintf(outFile,
64 ";/*" EOL
65 "; * %s" EOL
66 "; * Contains event message string templates for the EventCreate Command." EOL
67 "; *" EOL
68 "; * This file is autogenerated, do not edit." EOL
69 "; * Generated with:" EOL
70 "; * %s %u %u %s" EOL
71 "; */" EOL
72 EOL
73 #ifdef ENGLISH
74 "LanguageNames=(English=0x409:MSG00409)" EOL
75 #else
76 "LanguageNames=(Neutral=0x0000:MSG00000)" EOL
77 #endif
78 "MessageIdTypedef=DWORD" EOL
79 EOL,
80 argv[3],
81 argv[0], id_min /* argv[1] */, id_max /* argv[2] */, argv[3]);
82
83 /* Write the message string templates */
84 for (i = id_min; i <= id_max; ++i)
85 {
86 fprintf(outFile,
87 "MessageId=0x%X" EOL
88 #ifdef ENGLISH
89 "Language=English" EOL
90 #else
91 "Language=Neutral" EOL
92 #endif
93 "%%1" EOL
94 "." EOL
95 EOL,
96 i);
97 }
98
99 /* Close the file */
100 fclose(outFile);
101
102 return 0;
103 }
104
105 /* EOF */
106