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 
26 static void usage(char* name)
27 {
28     fprintf(stdout, "Usage: %s ID_min ID_max outfile.mc\n", name);
29 }
30 
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