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