1 /*
2 * VMS Message Source File Generator.
3 *
4 * 2007-01-29 SMS.
5 *
6 * Generates a VMS error message source file from data in "ziperr.h".
7 *
8 * On a VMS system, the standard builders should do the work. On a
9 * non-VMS system:
10 *
11 * cc -I. vms/vms_msg_gen.c -o vms_msg_gen
12 * ./vms_msg_gen > vms/zip_msg.msg
13 * rm ./vms_msg_gen
14 */
15
16 #include <stdio.h>
17 #include <string.h>
18
19 #define GLOBALS /* Include data for ziperrors[] in ziperr.h. */
20 #include "ziperr.h"
21
main()22 main()
23 {
24 int base_prev;
25 int code_vms;
26 int code_zip;
27 int i;
28
29 char *sev_str[ 8] = {
30 "/WARNING",
31 "/SUCCESS",
32 "/ERROR",
33 "/INFORMATIONAL",
34 "/FATAL",
35 "/??????",
36 "/???????",
37 "/????????"
38 };
39
40 char *text1[] = {
41 "! VMS Error Message Source File for Zip",
42 "!",
43 "! Because the facility code was formally assigned by HP, the .FACILITY",
44 "! directive below specifies /SYSTEM. Because the messages are, in",
45 "! general, specific to Zip, this file is not compiled with /SHARED.",
46 "! For example:",
47 "!",
48 "! MESSAGE /OBJECT = [.dest]ZIP_MSG.OBJ /NOSYMBOLS [.VMS]ZIP_MSG.MSG",
49 "!",
50 "! LINK /SHAREABLE = [.dest]ZIP_MSG.EXE [.dest]ZIP_MSG.OBJ",
51 "!",
52 "!-----------------------------------------------------------------------",
53 "",
54 ".TITLE Info-ZIP Zip Error Messages",
55 ".FACILITY IZ_ZIP, 1955 /SYSTEM",
56 NULL /* End-of-text marker. */
57 };
58
59 /* Initialize the .BASE counter. */
60 base_prev = -2;
61
62 /* Put out the header text. */
63 for (i = 0; text1[ i] != NULL; i++)
64 {
65 printf( "%s\n", text1[ i]);
66 }
67 printf( ".IDENT '%s'\n", VMS_MSG_IDENT);
68 printf( "\n");
69
70 /* Put out the error messages. */
71 for (code_zip = 0; code_zip <= ZE_MAXERR; code_zip++)
72 {
73 if ((ziperrors[ code_zip].string != NULL) &&
74 (strlen(ziperrors[ code_zip].string) != 0))
75 {
76 code_vms = 2* code_zip; /* 4-bit left-shift, not 3. */
77 if (code_vms != base_prev+ 1)
78 {
79 printf( ".BASE %d\n", code_vms);
80 }
81 printf( "%-7s %-13s <%s>\n",
82 ziperrors[ code_zip].name,
83 sev_str[ ziperrors[ code_zip].severity & 0x07],
84 ziperrors[ code_zip].string);
85 base_prev = code_vms;
86 }
87 }
88 /* Put out the .END directive. */
89 printf( "\n");
90 printf( ".END\n");
91 }
92