Skip to main content

ironwork_syntax/
messages.rs

1//! ironwork's message catalogue: each compile-time message's id, the severity it is given and its
2//! text, the parts a site fills in between braces. rt::refusal holds the run-time half, and
3//! docs/messages.md is written from both. Once released, an id keeps its meaning and is never given
4//! to another message; its wording may change.
5
6use crate::{Error, Pos, Severity};
7
8/// Why something is refused before its place is known: the catalogue's message and its text.
9pub type Refused = (Message, String);
10
11/// A refusal as a line shows it: `IWJ0001-S text`.
12pub fn labelled((message, text): &Refused) -> String {
13    format!("{}-{} {text}", message.id, message.severity.letter())
14}
15
16#[derive(Clone, Copy, Debug, PartialEq, Eq)]
17pub struct Message {
18    pub id: &'static str,
19    pub severity: Severity,
20    pub text: &'static str,
21}
22
23impl Message {
24    /// The message at `pos`, its text as the site words it.
25    pub fn at(&self, pos: Pos, text: impl Into<String>) -> Error {
26        Error { id: Some(self.id), ..Error::at(pos, text).graded(self.severity) }
27    }
28}
29
30/// The area an id's third letter names.
31pub const AREAS: &[(char, &str)] = &[
32    ('S', "Source form, lexing, COPY and REPLACE, and syntax"),
33    ('C', "Enterprise COBOL's compile rules"),
34    ('O', "CBL and PROCESS options, and compiler flags"),
35    ('P', "EXEC SQL, EXEC CICS, EXEC DLI, BMS and CSD"),
36    ('R', "An Enterprise COBOL construct ironwork does not run yet, refused by name"),
37    ('L', "ironwork's own limits"),
38    ('X', "An extension `--compliance extended` reads (docs/compliance.md)"),
39    ('J', "JCL a job run refuses"),
40];
41
42macro_rules! catalogue {
43    ($($id:ident $severity:ident $text:literal;)*) => {
44        $(pub const $id: Message = Message { id: stringify!($id), severity: Severity::$severity, text: $text };)*
45        /// Every message, in id order.
46        pub const CATALOGUE: &[Message] = &[$($id),*];
47    };
48}
49
50catalogue! {
51    IWC0001 Severe "{name} is not defined";
52    IWC0002 Severe "{name} is ambiguous; qualify it with OF or IN";
53    IWC0003 Severe "no paragraph or section named {name}";
54    IWC0004 Severe "{name} names more than one paragraph; qualify it with OF and its section";
55    IWC0005 Severe "CLASS {clause}: {message}";
56    IWC0006 Severe "{verb} CORRESPONDING {name}: {why}";
57    IWC0007 Severe "CORRESPONDING {group ref}: {name} in it cannot be named uniquely";
58    IWC0008 Severe "USE AFTER EXCEPTION/ERROR ON {name}: {why}";
59    IWC0009 Severe "USE AFTER EXCEPTION/ERROR ON {mode}: another procedure is for the same open mode";
60    IWC0010 Severe "USE FOR DEBUGGING is not allowed in a program compiled with THREAD";
61    IWC0011 Severe "USE FOR DEBUGGING ON ALL PROCEDURES: it may be written once, and no other USE FOR DEBUGGING may name a procedure";
62    IWC0012 Severe "USE FOR DEBUGGING ON {name}: {why}";
63    IWC0013 Severe "{name}: a debugging section may refer only to declarative procedures";
64    IWC0014 Severe "{name}: only a debugging section may refer to a procedure in a debugging section";
65    IWC0015 Severe "PERFORM ... THRU: a declarative procedure and the other end of the range must be in the same declarative section";
66    IWC0016 Severe "FUNCTION-ID {name}: {name} is not an 01 or 77 item of the LINKAGE SECTION";
67    IWC0017 Severe "FUNCTION-ID {name}: a user-defined function needs PROCEDURE DIVISION RETURNING";
68    IWC0018 Severe "EXEC {kind}: SQL and CICS cannot be used with user-defined functions, so neither in one nor in a program after one in its source (assumption C273)";
69    IWC0019 Severe "PROCEDURE DIVISION USING BY VALUE {file}: a function's BY VALUE parameter is binary, floating-point, a pointer, or one alphanumeric or national character";
70    IWC0020 Severe "FUNCTION-ID {id}: {why} from the prototype at line {line}";
71    IWC0021 Severe "FUNCTION {name} takes {params} arguments, not {args}";
72    IWC0022 Severe "FUNCTION {name}: a user-defined function's argument is an identifier, a literal or an arithmetic expression";
73    IWC0023 Severe "FUNCTION {name}: only an alphanumeric or national function's value can be reference-modified";
74    IWC0024 Severe "FUNCTION {name} argument {k}: a function's argument is not a figurative constant";
75    IWC0025 Severe "FUNCTION {name} argument {k}: {formal} is numeric, and takes an argument COMPUTE could send it (assumption C272)";
76    IWC0026 Severe "FUNCTION {name} argument {k} ({name}): {why}";
77    IWC0027 Severe "OCCURS at level {level}: Enterprise COBOL takes OCCURS only at levels 02 to 49";
78    IWC0028 Severe "a level-88 entry after a level-66 entry: a RENAMES item cannot be a conditional variable";
79    IWC0029 Severe "a level-88 entry with no item before it";
80    IWC0030 Severe "a level-88 entry needs a name";
81    IWC0031 Severe "RENAMES goes with level 66, and level 66 with RENAMES";
82    IWC0032 Severe "a level-66 entry must follow the entries of a level-01 record";
83    IWC0033 Severe "a level-66 entry has a name and a RENAMES clause, and nothing else";
84    IWC0034 Severe "level {level} is not a data level";
85    IWC0035 Severe "level {level} after a level-66 entry: a record's RENAMES entries follow its last entry";
86    IWC0036 Severe "level {level} with no group to belong to";
87    IWC0037 Severe "REDEFINES {target}: no earlier 01-level item of that name";
88    IWC0038 Severe "OCCURS 0 is not a table";
89    IWC0039 Severe "RENAMES {name}: {message}";
90    IWC0040 Severe "RENAMES {first}: a level-66 entry cannot rename a level-01 record";
91    IWC0041 Severe "RENAMES {first} THRU {last}: the last item cannot be within the first";
92    IWC0042 Severe "RENAMES {first} THRU {last}: the last item must start and end no earlier than the first";
93    IWC0043 Severe "RENAMES {first} THRU {last}: no OCCURS DEPENDING ON between them";
94    IWC0044 Severe "REDEFINES {target}: no earlier item of that name at this level";
95    IWC0045 Severe "a SYNCHRONIZED item at the start of a REDEFINES would need {slack} slack bytes: the redefined item must be on a {message}-byte boundary";
96    IWC0046 Severe "{clause} names {name}, which is not a file";
97    IWC0048 Severe "OCCURS DEPENDING ON {object}: the object cannot follow an OCCURS DEPENDING ON table in its record";
98    IWC0049 Severe "OCCURS DEPENDING ON {object}: not a numeric data item";
99    IWC0050 Severe "PROCEDURE DIVISION USING {param}: not an 01 or 77 item of the LINKAGE SECTION";
100    IWC0051 Severe "PROCEDURE DIVISION RETURNING {name}: not an 01 or 77 item of the LINKAGE SECTION";
101    IWC0052 Severe "ASSIGN USING or DYNAMIC {name}: a Micro Focus and GnuCOBOL form; --compliance extended reads it";
102    IWC0053 Severe "ASSIGN {name}: not a data item";
103    IWC0054 Severe "ASSIGN {name}: the item holding the file's name must be alphanumeric or a group";
104    IWC0055 Warning "no STOP RUN, GOBACK or EXIT PROGRAM in the program: check that it ends";
105    IWC0056 Warning "CALL 'CEECBLDY' under INTDATE(LILIAN): CEECBLDY gives an ANSI integer date, which nothing can use under LILIAN, so the CALL is to CEEDAYS";
106    IWC0057 Severe "ENTRY '{item}': a program with PROCEDURE DIVISION RETURNING cannot have ENTRY statements";
107    IWC0058 Severe "ENTRY '{item}': the name is already the program's or another ENTRY's";
108    IWC0059 Severe "ENTRY '{item}' USING {param}: not an 01 or 77 item of the LINKAGE SECTION";
109    IWC0060 Severe "ENTRY '{name}' must be a sentence of its own, not inside another statement";
110    IWC0061 Severe "a GO TO with no procedure-name cannot be used in {why}";
111    IWC0062 Severe "a GO TO with no procedure-name must be its paragraph's only sentence";
112    IWC0063 Severe "ALTER cannot be used in {why}";
113    IWC0064 Severe "ALTER {name}: a section, where ALTER names a paragraph";
114    IWC0065 Severe "ALTER {name}: the paragraph must hold one sentence, a GO TO without DEPENDING ON";
115    IWC0066 Severe "{name}: a DBCS item's VALUE is a DBCS literal of at most {size} characters, SPACE or ALL with a DBCS literal";
116    IWC0067 Severe "{name}: a DBCS literal can be the VALUE of a DBCS item only";
117    IWC0068 Severe "VALUE of {name}: {what}, where a numeric item's VALUE literal must be numeric";
118    IWC0069 Severe "PICTURE {name}: {positions} digit positions, more than the {max} {option} allows";
119    IWC0070 Severe "the literal {t} has more than the {max} digits {option} allows";
120    IWC0071 Severe "a condition as the WHEN object of a value subject";
121    IWC0072 Severe "a value as the WHEN object of a TRUE, FALSE or condition subject";
122    IWC0073 Severe "DISPLAY UPON {upon}: {why}";
123    IWC0074 Severe "CLOSE {name}: REEL, UNIT and NO REWIND are not valid for an indexed or relative file";
124    IWC0075 Severe "{verb} {record}: not a record of a file";
125    IWC0076 Severe "START KEY takes =, >, NOT < or >=";
126    IWC0077 Severe "INITIALIZE {name}: a level-66 RENAMES item cannot be initialized";
127    IWC0078 Severe "INITIALIZE {name}: a variably located item, or a group holding one, cannot be initialized (Language Reference p. 351)";
128    IWC0079 Severe "SET {name} TO FALSE: the condition-name has no WHEN SET TO FALSE value";
129    IWC0080 Severe "{exit} must be inside an inline PERFORM";
130    IWC0081 Severe "PERFORM VARYING {var}: not a numeric elementary item or an index-name";
131    IWC0082 Severe "PERFORM VARYING {var} {phrase}: an arithmetic expression, where {phrase} takes an identifier, index-name or literal";
132    IWC0083 Severe "no file named {name}";
133    IWC0084 Severe "{verb} {name}: not an indexed or relative file";
134    IWC0085 Severe "{verb} {name}: the file's ACCESS MODE is RANDOM";
135    IWC0086 Severe "class-name {name} tests a data item, not an expression";
136    IWC0087 Severe "class-name {name} tests a data item of USAGE DISPLAY, and {name} is not one";
137    IWC0088 Severe "{key}: not a key of {file}";
138    IWC0089 Severe "{file}: an indexed file needs a RECORD KEY";
139    IWC0090 Severe "{name}: a key of {file} must be in its records";
140    IWC0091 Severe "{name}: the RELATIVE KEY of {file} must not be in its records";
141    IWC0092 Severe "{file}: random or dynamic access needs a RELATIVE KEY";
142    IWC0093 Severe "{name}: the DEPENDING ON item of {file} must be an elementary unsigned integer";
143    IWC0094 Severe "{name}: the PASSWORD of {file} must be an alphabetic, alphanumeric or alphanumeric-edited item of WORKING-STORAGE";
144    IWC0095 Severe "{name} is a condition-name, not a data item";
145    IWC0096 Severe "{name}: only a debugging section may reference DEBUG-ITEM";
146    IWC0097 Severe "{name} takes {dims} subscripts, not {subscripts}";
147    IWC0098 Warning "INITIALIZE {name}: none of its items is of a category REPLACING names ({categories}), so it is not initialized";
148    IWC0099 Severe "INSPECT FUNCTION {name}: an integer or numeric function can be used only where an arithmetic expression can, not as the inspected item";
149    IWC0100 Severe "INSPECT FUNCTION {name} {phrase}: {phrase} stores into the inspected item, and a function-identifier cannot be a receiving operand";
150    IWC0101 Severe "DISPLAY FUNCTION {name}: an integer or numeric function can be used only where an arithmetic expression can, and DISPLAY takes none";
151    IWC0102 Severe "MOVE FUNCTION {name}: an integer or numeric function can be used only where an arithmetic expression can, not as a MOVE's sender";
152    IWC0103 Severe "INSPECT {name}: {operand} cannot be an operand here, since {why}";
153    IWC0104 Severe "SEARCH {table} VARYING {value}: not an index-name, an index data item or an elementary integer item";
154    IWC0105 Severe "the literal {t} has more than {min} digits";
155    IWC0106 Severe "FUNCTION {file}: neither an intrinsic function nor a user-defined function defined or prototyped before this program";
156    // IWC0107 is not given to another message: releases up to 0.8.0 used it for what IWR0075 says.
157    IWC0108 Severe "WRITE ... END-OF-PAGE: the FD of {file} has no LINAGE clause";
158    IWC0109 Severe "LINAGE-COUNTER can be read, but no statement can change it";
159    IWC0110 Severe "NUMCHECK: {name} {why} wherever this statement reads it: its VALUE clauses give it X'{hex}' and no statement changes it, so the test is removed (see {NUMCHECK ALWAYS FAILS})";
160    IWC0111 Warning "NORENT conflicts with {and}, which IBM compiles only as RENT (see {OO OPTIONS REQUIRED})";
161    IWC0112 Warning "{who} uses object-oriented syntax, which IBM compiles only with THREAD, DLL, RENT and DBCS: {missing} missing from its CBL or PROCESS cards (see {OO OPTIONS REQUIRED} and {OO OPTIONS SEVERITY})";
162    IWC0113 Warning "INITIAL conflicts with THREAD, which IBM compiles only as NOINITIAL (see {INITIAL UNDER THREAD})";
163    IWC0114 Severe "{who} is compiled with THREAD, which requires RECURSIVE in its PROGRAM-ID paragraph";
164    IWC0115 Severe "{who} is INITIAL, which THREAD does not allow";
165    IWC0116 Severe "{who} contains program {inner}, and THREAD does not allow nested programs";
166    IWC0117 Severe "{verb} is not allowed in a program compiled with THREAD";
167    IWC0118 Severe "not a class definition";
168    IWC0119 Severe "{inherits}: the class a class INHERITS must be named in its REPOSITORY paragraph";
169    IWC0120 Severe "class {def} cannot inherit from itself";
170    IWC0121 Severe "{factory} method \"{message}\" has the same parameter types as {factory} method \"{twin}\"";
171    IWC0122 Severe "method \"{name}\" receives {param} BY REFERENCE: a method's parameters are BY VALUE";
172    IWC0123 Severe "method \"{name}\" parameter {param}: {message}";
173    IWC0124 Severe "method \"{name}\" parameter {param}: not a record of the method's own LINKAGE SECTION";
174    IWC0125 Severe "SET ADDRESS OF {name}: FACTORY and OBJECT data is WORKING-STORAGE, not LINKAGE";
175    IWC0126 Severe "method \"{name}\" RETURNING {name}: {message}";
176    IWC0127 Severe "method \"{name}\" RETURNING {name}: not a record of the method's own LINKAGE SECTION";
177    IWC0128 Severe "OBJECT REFERENCE {character}: the class must be named in the REPOSITORY paragraph";
178    IWC0129 Severe "a class definition cannot contain EXEC statements";
179    IWC0130 Severe "EXIT METHOD can be used only in a method";
180    IWC0131 Severe "EXIT PROGRAM cannot be used in a method: use EXIT METHOD or GOBACK";
181    IWC0132 Severe "SELF can be used only in a method";
182    IWC0133 Severe "{name} is {what}: it can be used only in SET, INVOKE, CALL and a relation condition";
183    IWC0134 Severe "JNIENVPTR cannot receive a value";
184    IWC0135 Severe "SELF cannot receive a value";
185    IWC0136 Severe "object references and function-pointers compare only as equal or not equal";
186    IWC0137 Severe "an object reference compares with another object reference, SELF or NULL; a function-pointer with another or NULL";
187    IWC0138 Severe "SET {name} TO ENTRY: the receiver must be a procedure-pointer or function-pointer";
188    IWC0139 Severe "SET {names} TO ENTRY: {fault}";
189    IWC0140 Severe "SET {name} TO: {message}";
190    IWC0141 Severe "FUNCTION {file}: a figurative constant is an argument only inside an arithmetic expression";
191    IWC0142 Severe "FUNCTION {file}: {name} is a pointer or object reference, where an argument is alphabetic, alphanumeric, national or numeric";
192    IWC0143 Severe "{first} compared with {second}: an arithmetic expression or a numeric function is compared only with a numeric operand";
193    IWC0144 Severe "WRITE ... ADVANCING: {file} is not a sequential file";
194    IWC0145 Severe "WRITE ... BEFORE ADVANCING, or ADVANCING a mnemonic-name, is not allowed for the line-sequential file {file}";
195    IWC0146 Severe "report {name} is named in no FD's REPORT clause";
196    IWC0147 Severe "report {ri}: a line reaches column {end}, beyond the {width} bytes of the report file's record";
197    IWC0148 Severe "report {ri}: a line reaches column {end}, beyond LINE LIMIT {limit}";
198    IWC0149 Severe "a group entry in a report group cannot have COLUMN, PICTURE, SOURCE, VALUE or SUM";
199    IWC0150 Severe "a SUM entry needs a PICTURE";
200    IWC0151 Severe "a VALUE entry with a figurative constant or ALL needs a PICTURE";
201    IWC0152 Severe "a printed SOURCE entry needs a PICTURE";
202    IWC0153 Severe "a report entry with no SOURCE, VALUE or SUM needs a data-name for the program to fill it";
203    IWC0154 Severe "BLANK WHEN ZERO needs a numeric PICTURE";
204    IWC0155 Severe "a SUM entry needs a numeric PICTURE";
205    IWC0156 Severe "a COLUMN with no LINE above it";
206    IWC0157 Severe "a report field that starts left of column 1";
207    IWC0158 Severe "USE BEFORE REPORTING {group}: the program has no REPORT SECTION";
208    IWC0159 Severe "USE BEFORE REPORTING {group}: no report group has that name";
209    IWC0160 Severe "USE BEFORE REPORTING {group}: more than one report group has that name; qualify it with IN";
210    IWC0161 Severe "an arithmetic SOURCE, or ROUNDED, needs a numeric PICTURE";
211    IWC0162 Severe "an absolute LINE needs a PAGE LIMIT";
212    IWC0163 Severe "a report group whose first LINE is relative must have only relative LINEs";
213    IWC0164 Severe "absolute LINE numbers in a report group must increase";
214    IWC0165 Severe "NEXT PAGE needs a PAGE LIMIT";
215    IWC0166 Severe "a PAGE HEADING or PAGE FOOTING cannot begin on the NEXT PAGE";
216    IWC0167 Severe "report {name}: its report control area could not be laid out";
217    IWC0168 Severe "a CONTROL HEADING or FOOTING must name its control when the report has several";
218    IWC0169 Severe "a CONTROL HEADING or FOOTING names a control that is not in the report's CONTROL clause";
219    IWC0170 Severe "report {name} has two {kind} groups for the same level";
220    IWC0171 Severe "a PAGE HEADING or PAGE FOOTING needs a PAGE LIMIT";
221    IWC0172 Severe "NEXT GROUP with a line or NEXT PAGE needs a PAGE LIMIT";
222    IWC0173 Severe "NEXT GROUP is not allowed in a PAGE HEADING or REPORT FOOTING";
223    IWC0174 Severe "report {name} has no CONTROL HEADING, DETAIL or CONTROL FOOTING group";
224    IWC0175 Severe "RESET ON names a control that is not in the report's CONTROL clause";
225    IWC0176 Severe "SUM ... UPON {name}: not a DETAIL group of report {name}";
226    IWC0177 Severe "SUM {operand}: the entry summed must be numeric";
227    IWC0178 Severe "SUM {operand}: an entry the program fills itself cannot be summed";
228    IWC0179 Severe "SUM {operand}: not a numeric data item";
229    IWC0180 Severe "SUM entries of a report group total each other in a circle";
230    IWC0181 Severe "HEADING, FIRST DETAIL, LAST DETAIL and FOOTING need a PAGE LIMIT";
231    IWC0182 Severe "report {name}: the page regions must run HEADING <= FIRST DETAIL <= LAST DETAIL <= FOOTING <= PAGE LIMIT";
232    IWC0183 Severe "{number} is not a report of this program";
233    IWC0184 Severe "GENERATE {name}: summary reporting needs a CONTROL HEADING or CONTROL FOOTING group";
234    IWC0185 Severe "GENERATE {name}: not a DETAIL group";
235    IWC0186 Severe "GENERATE {name}: no report or DETAIL group of that name";
236    IWC0187 Severe "GENERATE {name}: more than one report has a DETAIL group of that name; qualify it with IN";
237    IWC0188 Severe "{name} is a reserved word, so it cannot name {what}";
238    IWC0189 Severe "{name}: EXTERNAL is not allowed in the {section} SECTION";
239    IWC0190 Severe "{name}: EXTERNAL goes on a level-01 entry";
240    IWC0191 Severe "{name}: EXTERNAL and REDEFINES cannot be in the same entry";
241    IWC0192 Severe "an EXTERNAL record needs a data-name, not FILLER";
242    IWC0193 Severe "{name}: another EXTERNAL record of the program has the same name";
243    IWC0194 Severe "{name}: GLOBAL goes on a level-01 entry";
244    IWC0195 Severe "a GLOBAL record needs a data-name, not FILLER";
245    IWC0196 Severe "{name}: another GLOBAL record of the DATA DIVISION has the same name";
246    IWC0197 Severe "{name}: an item of EXTERNAL record {name} takes no VALUE clause";
247    IWC0198 Severe "FD {file}: a record of an EXTERNAL or GLOBAL file needs a data-name, not FILLER";
248    IWC0199 Severe "{item}: {size} bytes, larger than the EXTERNAL record {name} it redefines";
249    IWC0200 Severe "SET ADDRESS OF {name}: an EXTERNAL or GLOBAL record is not a LINKAGE record of the program";
250    IWC0201 Severe "RELEASE {record}: not a record of a sort file (SD)";
251    IWC0202 Severe "no file named {file}";
252    IWC0203 Severe "RETURN {file}: not a sort or merge file (SD)";
253    IWC0204 Severe "COLLATING SEQUENCE {alphabet}: not an alphabet-name of SPECIAL-NAMES";
254    IWC0205 Severe "SET {name} TO {OFF}: {name} is not the mnemonic-name of an UPSI switch";
255    IWC0206 Severe "{name} is the mnemonic-name of UPSI-{number}: only SET ... TO ON or OFF and a condition-name's qualifier can name it";
256    IWC0207 Severe "SET {name} TO TRUE: the UPSI switch's entry has no mnemonic-name, which would be its conditional variable";
257    IWC0208 Severe "{verb} {name}: not a sort or merge file (SD)";
258    IWC0209 Severe "{verb} {name}: no ASCENDING or DESCENDING KEY";
259    IWC0210 Severe "{verb} {name}: KEY needs a data name";
260    IWC0211 Severe "{key}: a key of {verb} {name} must be in its records";
261    IWC0212 Severe "{key}: a sort key cannot be in a table";
262    IWC0213 Severe "{key}: a sort key cannot follow an OCCURS DEPENDING ON table in its record";
263    IWC0214 Severe "{key}: a POINTER, INDEX, object reference or function-pointer item cannot be a sort key";
264    IWC0215 Severe "{verb} {name}: no {phrase} or {procedure}";
265    IWC0216 Severe "{phrase} {file}: a sort or merge file (SD) cannot be one";
266    IWC0217 Severe "{phrase} {file}: the file's ACCESS MODE is RANDOM";
267    IWC0218 Severe "MERGE {name}: USING names at least two files";
268    IWC0219 Severe "MERGE {name}: not a merge file (SD)";
269    IWC0220 Severe "SORT {name}: a table SORT takes no USING, GIVING or procedures";
270    IWC0221 Severe "SORT {name}: not a table";
271    IWC0222 Severe "no file or table named {name}";
272    IWC0223 Severe "SORT {name}: not a table (no OCCURS)";
273    IWC0224 Severe "SORT {name}: a subscript for each table that contains it, and none for itself";
274    IWC0225 Severe "SORT {name}: no KEY phrase, and its OCCURS has none";
275    IWC0226 Severe "{key}: a key of SORT {name} must be its element or an item within it";
276    IWC0227 Severe "{key}: a table SORT key cannot be in a table within the element";
277    IWC0228 Severe "{file}: LINAGE is for a sequential file, not a line-sequential one";
278    IWC0229 Severe "{file}: LINAGE is for a sequential file, not an indexed or relative one";
279    IWC0230 Severe "{file}: {phrase} {number} is more than the {MOST} lines LINAGE allows";
280    IWC0231 Severe "{file}: {phrase} {name} is not an unsigned integer data item";
281    IWC0232 Severe "{file}: LINAGE 0: the page body needs at least one line";
282    IWC0233 Severe "{file}: FOOTING 0: the footing starts at line 1 or later";
283    IWC0234 Severe "{file}: FOOTING {footing} is past the page body of {body} lines";
284    IWC0235 Severe "an elementary item needs a PICTURE";
285    IWC0236 Severe "a group item cannot have a PICTURE";
286    IWC0237 Severe "an object reference, function-pointer or procedure-pointer takes no PICTURE and only VALUE NULL";
287    IWC0238 Severe "POINTER and INDEX items take no PICTURE";
288    IWC0239 Severe "COMP-1 and COMP-2 items take no PICTURE";
289    IWC0240 Severe "BLANK WHEN ZERO needs a numeric or numeric-edited item of USAGE DISPLAY or NATIONAL";
290    IWC0241 Severe "a binary item holds at most 18 digits";
291    IWC0242 Severe "JUSTIFIED cannot be given for a DBCS item whose PICTURE has B";
292    IWC0243 Severe "a PICTURE with G needs USAGE DISPLAY-1 (Language Reference SC27-8713-03, p. 214)";
293    IWC0244 Severe "a SIGN clause needs an S in the PICTURE";
294    IWC0245 Severe "INVOKE {target}: SELF and SUPER can be used only in a method";
295    IWC0246 Severe "INVOKE {target}: not an object reference or a class named in the REPOSITORY paragraph";
296    IWC0247 Severe "INVOKE {target} NEW: NEW takes a class-name from the REPOSITORY paragraph";
297    IWC0248 Severe "INVOKE ... NEW needs RETURNING an object reference";
298    IWC0249 Severe "INVOKE ... NEW RETURNING {name}: not an object reference";
299    IWC0250 Severe "INVOKE with an empty method name";
300    IWC0251 Severe "INVOKE ... {name}: a method name is held in an alphanumeric or national item";
301    IWC0252 Severe "INVOKE {target} {name}: a method named by a data item is invoked on a universal object reference";
302    IWC0253 Severe "INVOKE argument: {message}";
303    IWC0254 Severe "INVOKE ... RETURNING {name}: not reference-modified";
304    IWC0255 Severe "INVOKE ... RETURNING {name}: {message}";
305    IWC0256 Severe "ACCEPT ... ON EXCEPTION: of the ACCEPT statements, only ACCEPT ... FROM ARGUMENT-VALUE under --compliance extended has an exception";
306    IWC0257 Severe "ACCEPT ... FROM {name}: Micro Focus's and GnuCOBOL's, not Enterprise COBOL's; --compliance extended reads it from the job step's PARM";
307    IWC0258 Severe "DISPLAY UPON ARGUMENT-NUMBER: Micro Focus's and GnuCOBOL's, not Enterprise COBOL's; --compliance extended reads it";
308    IWC0259 Severe "DISPLAY UPON ARGUMENT-NUMBER: it shows one numeric item or literal, the number of the argument the next ACCEPT ... FROM ARGUMENT-VALUE takes";
309    IWC0260 Severe "PICTURE {picture}: P must be one string of scaling positions at the left or right end of the digits";
310    IWC0261 Severe "PICTURE {picture}: {character} is not a PICTURE symbol";
311    IWC0262 Severe "PICTURE {picture}: more than 134217727 character positions";
312    IWC0263 Severe "PICTURE {picture}: more than 31 digits";
313    IWC0264 Severe "PICTURE {picture}: mixes symbols of different categories";
314    IWC0265 Severe "PICTURE {picture}: {character} cannot be in a PICTURE of {symbol}, which takes {symbol} and B only";
315    IWC0266 Severe "PICTURE {picture}: more character positions than a DBCS item holds";
316    IWC0267 Severe "BLANK WHEN ZERO cannot be given for a PICTURE with S";
317    IWC0268 Severe "PICTURE {picture}: an edited PICTURE longer than 4096 positions";
318    IWC0269 Severe "PICTURE {picture}: S and N are not allowed in an edited PICTURE";
319    IWC0270 Severe "PICTURE {picture}: an alphanumeric-edited PICTURE takes only X, A, 9, B, 0 and /";
320    IWC0271 Severe "PICTURE {picture}: two floating insertion strings";
321    IWC0272 Severe "PICTURE {picture}: {character} is not a numeric-edited symbol";
322    IWC0273 Severe "PICTURE {picture}: more than one decimal point";
323    IWC0274 Severe "PICTURE {picture}: a numeric-edited PICTURE needs 1 to 31 digit positions";
324    IWC0275 Severe "PICTURE {picture}: bad repetition ({count})";
325    IWC0276 Severe "PICTURE {picture}: a repetition with nothing to repeat";
326    IWC0277 Severe "PICTURE {picture}: two different currency symbols";
327    IWC0278 Severe "PICTURE {picture}: '$' is not a currency symbol of this program, whose CURRENCY SIGN clauses or CURRENCY option name others";
328    IWC0279 Severe "{ALPHABET or PROGRAM COLLATING SEQUENCE and its name}: not an alphabet-name of SPECIAL-NAMES";
329    IWC0280 Severe "{ALPHABET or PROGRAM COLLATING SEQUENCE and its name}: the character X'{hex}' is given more than one position";
330    IWC0281 Severe "{ALPHABET or PROGRAM COLLATING SEQUENCE and its name}: {number} is not an ordinal position from 1 to 256";
331    IWC0282 Severe "{ALPHABET or PROGRAM COLLATING SEQUENCE and its name}: NULL cannot be in an ALPHABET clause";
332    IWC0283 Severe "{ALPHABET or PROGRAM COLLATING SEQUENCE and its name}: a national literal cannot be in an ALPHABET clause";
333    IWC0284 Severe "{ALPHABET or PROGRAM COLLATING SEQUENCE and its name}: a DBCS literal cannot be in an ALPHABET clause";
334    IWC0285 Severe "{ALPHABET or PROGRAM COLLATING SEQUENCE and its name}: ALL cannot be in an ALPHABET clause";
335    IWC0286 Severe "{ALPHABET or PROGRAM COLLATING SEQUENCE and its name}: a literal of THROUGH or ALSO must be one character";
336    IWC0287 Severe "FUNCTION {name}: an ALL subscript stands for a varying number of arguments, and {name} takes {count}";
337    IWC0288 Severe "FUNCTION {name}: {class} and {class} arguments, where all must be of the same class";
338    IWC0289 Warning "INITCHECK(STRICT): {item} may be used uninitialized: a path to this statement does not set {it} (see {analysis})";
339    IWC0290 Warning "INITCHECK: {item} may be used uninitialized: no path to this statement sets {it} (see {analysis})";
340    IWC0291 Severe "{ALPHABET or PROGRAM COLLATING SEQUENCE and its name}: {a character the program's code page does not hold}";
341    IWC0292 Severe "VALUE of {name}: a numeric literal, where a numeric-edited item's VALUE is an alphanumeric literal or a figurative constant written in edited form; --compliance extended edits the number into it";
342    IWC0293 Severe "BINARY-CHAR: Micro Focus's and GnuCOBOL's one-byte binary, not Enterprise COBOL's; --compliance extended reads it";
343    IWC0294 Severe "BINARY-CHAR takes no PICTURE";
344    IWC0295 Severe "{name}: two programs of {program} have this name, and the programs of a separately compiled program each need their own (--program-scope=flexible allows it)";
345    IWC0296 Severe "CALL '{name}': no program of the compilation has this name, and --unresolved-calls=fail refuses a static CALL the binder could not resolve";
346    IWC0297 Severe "FUNCTION {name}: {argument} is numeric, where {name} takes an alphabetic, alphanumeric or national argument";
347    IWC0298 Severe "{DISPLAY or ACCEPT on the screen, or the SCREEN SECTION}: Micro Focus's and GnuCOBOL's, not Enterprise COBOL's; --compliance extended reads it";
348    IWC0299 Severe "{a locking phrase}: Micro Focus's and GnuCOBOL's, not Enterprise COBOL's; --compliance extended reads it";
349    IWC0300 Severe "CALL ... RETURNING {OMITTED, NOTHING or NULL}: GnuCOBOL's, not Enterprise COBOL's, whose RETURNING names a data item; --compliance extended reads it";
350    IWC0301 Severe "COMP-X: Micro Focus's binary in the fewest bytes its digits need, not Enterprise COBOL's; --compliance extended reads it";
351    IWC0302 Severe "PIC X(n) COMP-5: Micro Focus's and GnuCOBOL's binary of n bytes, where Enterprise COBOL's COMP-5 takes a numeric PICTURE; --compliance extended reads it";
352    IWC0303 Severe "PIC X({n}) {COMP-X or COMP-5}: {n} bytes of binary, and ironwork's binary items hold at most eight";
353    IWC0304 Severe "{paragraph or section} FOREVER: under --compliance extended PERFORM FOREVER is Micro Focus's and GnuCOBOL's endless loop, not a PERFORM of it; compile the program under strict";
354    IWC0305 Severe "FUNCTION MODULE-CALLER-ID: GnuCOBOL's, not Enterprise COBOL's; --compliance extended reads it";
355    IWC0306 Severe "{STOP RUN or GOBACK} {RETURNING or GIVING}: GnuCOBOL's and Micro Focus's, not Enterprise COBOL's, where a MOVE to RETURN-CODE comes first; --compliance extended reads it";
356    IWC0307 Severe "{name} [NOT] OMITTED: GnuCOBOL's and Micro Focus's, not Enterprise COBOL's, which writes ADDRESS OF {name} = NULL; --compliance extended reads it";
357    IWC0308 Severe "ANY LENGTH: GnuCOBOL's and Micro Focus's, not Enterprise COBOL's; --compliance extended reads it";
358    IWC0309 Severe "PERFORM UNTIL EXIT: GnuCOBOL's and Micro Focus's, not Enterprise COBOL's; --compliance extended reads it";
359    IWC0310 Severe "a file description with no FILE SECTION header: Micro Focus's and GnuCOBOL's, not Enterprise COBOL's; --compliance extended reads it";
360    IWC0311 Severe "KEY IS {name} = ...: Micro Focus's split key, not Enterprise COBOL's; --compliance extended reads it";
361    IWC0312 Severe "FUNCTION STORED-CHAR-LENGTH: GnuCOBOL's, not Enterprise COBOL's; --compliance extended reads it";
362    IWC0313 Severe "DELETE FILE: Micro Focus's and GnuCOBOL's, not Enterprise COBOL's; --compliance extended reads it";
363    IWC0314 Severe "PROGRAM-POINTER: GnuCOBOL's and Micro Focus's, not Enterprise COBOL's; --compliance extended reads it as PROCEDURE-POINTER";
364    IWC0316 Severe "BASED: GnuCOBOL's and Micro Focus's, not Enterprise COBOL's; --compliance extended reads it";
365    IWC0317 Severe "FREE {name}: GnuCOBOL's FREE of a record, not Enterprise COBOL's, which frees through a pointer; --compliance extended reads it";
366    IWC0318 Severe "conditional compilation: {why}";
367    IWC0319 Severe "FUNCTION CONCATENATE: GnuCOBOL's, not Enterprise COBOL's; --compliance extended reads it";
368    IWC0320 Severe "PROCEDURE DIVISION CHAINING: GnuCOBOL's and Micro Focus's, not Enterprise COBOL's; --compliance extended reads it";
369    IWC0323 Severe "{verb} {item}: a receiving operand of an arithmetic statement must be numeric or numeric-edited, and {item} is {class}";
370    IWC0324 Severe "LABEL RECORDS {name}: not defined as a data-name";
371    IWC0325 Severe "FD {file}: RECORDING MODE F, but its records are {shortest} to {longest} bytes";
372    IWJ0001 Severe "a quoted value continued onto the next line is not supported yet";
373    IWJ0002 Severe "an unbalanced ) in {text}";
374    IWJ0003 Severe "unbalanced parentheses or quotes in {text}";
375    IWJ0004 Severe "& is not followed by a symbolic parameter name in {text}";
376    IWJ0005 Severe "&SYSUID is the user ID the job runs under: USER= on the JOB statement, or the user that submitted it";
377    IWJ0006 Severe "symbolic parameter &{name} has no value";
378    IWJ0007 Severe "the statement is continued past the end of the job";
379    IWJ0008 Severe "a continuation line must start with // and a blank";
380    IWJ0009 Severe "a continued operand must start in columns 4 to 16";
381    IWJ0010 Severe "IF has no THEN";
382    IWJ0011 Severe "no JOB statement";
383    IWJ0012 Severe "the first statement is not a JOB statement";
384    IWJ0013 Severe "the JOB statement needs a job name of one to eight characters";
385    IWJ0014 Severe "a symbolic parameter in the JOB statement's COND is not supported yet";
386    IWJ0015 Severe "COND on the JOB statement takes (code,operator) tests only";
387    IWJ0016 Severe "RESTART is not supported yet";
388    IWJ0017 Severe "TYPRUN is not supported yet";
389    IWJ0018 Severe "JOB keyword {k} is not supported yet";
390    IWJ0019 Severe "{op} is not NAME=value";
391    IWJ0020 Severe "no procedure library holds member {name}";
392    IWJ0021 Severe "member {name}: {item}";
393    IWJ0022 Severe "procedures and INCLUDE members nest more than 15 deep";
394    IWJ0023 Severe "an in-stream PROC needs a name";
395    IWJ0024 Severe "{operation} is out of place";
396    IWJ0025 Severe "JCLLIB takes ORDER=";
397    IWJ0026 Severe "{bad} is not a data set name";
398    IWJ0027 Severe "INCLUDE takes MEMBER=name";
399    IWJ0028 Severe "a DD statement that follows no EXEC statement";
400    IWJ0029 Severe "a second JOB statement; give one job a file";
401    IWJ0030 Severe "{op} statements are not supported yet";
402    IWJ0031 Severe "{op} is not a JCL statement";
403    IWJ0032 Severe "EXEC starts with PGM=, PROC= or a procedure name";
404    IWJ0033 Severe "{name} is not a procedure name";
405    IWJ0034 Severe "an EXEC operand {op} this reader does not know";
406    IWJ0035 Severe "PARMDD is not supported yet";
407    IWJ0036 Severe "procedure {name} does not use symbolic parameter {key}";
408    IWJ0037 Severe "EXEC keyword {key} is not supported yet";
409    IWJ0038 Severe "procedure {name} has no steps";
410    IWJ0039 Severe "PARM.{text}: procedure {name} has no step {text}";
411    IWJ0040 Severe "COND.{text}: procedure {name} has no step {text}";
412    IWJ0041 Severe "{dd} is not a DD name";
413    IWJ0042 Severe "an unnamed DD statement with nothing to concatenate to";
414    IWJ0043 Severe "{number} is not a step name";
415    IWJ0044 Severe "EXEC needs PGM= or a procedure";
416    IWJ0045 Severe "PGM=*.stepname.ddname is not supported yet";
417    IWJ0046 Severe "{value} is not a program name";
418    IWJ0047 Severe "EXEC keyword {k} is not supported yet";
419    IWJ0048 Severe "an EXEC operand {value} this reader does not know";
420    IWJ0049 Severe "*.{path} is not *.ddname, *.stepname.ddname or *.stepname.procstepname.ddname";
421    IWJ0050 Severe "{value} is not a data set name";
422    IWJ0051 Severe "{value} is not a generation of a generation data group";
423    IWJ0052 Severe "{message} is not a member name";
424    IWJ0053 Severe "&&{temp} is not a temporary data set name";
425    IWJ0054 Severe "{base} is not a data set name";
426    IWJ0055 Severe "DISP={value} has more than three subparameters";
427    IWJ0056 Severe "{text} is not a DISP status";
428    IWJ0057 Severe "{text} is not a DISP {normal} disposition";
429    IWJ0058 Severe "LRECL={value} is not a record length";
430    IWJ0059 Severe "a DD operand {value} this reader does not know";
431    IWJ0060 Severe "DLM takes two characters";
432    IWJ0061 Severe "DD keyword {k} is not supported yet";
433    IWJ0062 Severe "DISP applies to a data set";
434    IWJ0063 Severe "the DD statement names no data set, in-stream data, DUMMY or SYSOUT";
435    IWJ0064 Severe "DD {number} overrides a procedure step, but the EXEC before it runs a program";
436    IWJ0065 Severe "{number} is not a DD name";
437    IWJ0066 Severe "DD {number} appears twice in the step";
438    IWJ0067 Severe "*.{path} names a DD that is no data set";
439    IWJ0068 Severe "*.{path} names no earlier DD";
440    IWJ0069 Severe "IF statements nest more than 15 deep";
441    IWJ0070 Severe "a second ELSE for one IF";
442    IWJ0071 Severe "ELSE without IF";
443    IWJ0072 Severe "ENDIF without IF";
444    IWJ0073 Severe "IF without ENDIF";
445    IWJ0074 Severe "{text} is not a return code from 0 to 4095";
446    IWJ0075 Severe "{text} is not a COND operator (GT, GE, EQ, NE, LT or LE)";
447    IWJ0076 Severe "COND test ({text}) is not (code,operator) or (code,operator,stepname)";
448    IWJ0077 Severe "COND={text} is not in parentheses";
449    IWJ0078 Severe "{item} must come last in COND";
450    IWJ0079 Severe "{t} in COND is not a test in parentheses";
451    IWJ0080 Severe "COND takes at most eight tests";
452    IWJ0081 Severe "{character} has no meaning in an IF expression";
453    IWJ0082 Severe "parentheses in an IF expression nest more than 15 deep";
454    IWJ0083 Severe "an IF expression is missing a )";
455    IWJ0084 Severe "an IF expression has {t} where a keyword belongs";
456    IWJ0085 Severe "an IF expression ends early";
457    IWJ0086 Severe "RC needs a comparison operator and a number";
458    IWJ0087 Severe "{word} needs a number after it";
459    IWJ0088 Severe "{value} is not TRUE or FALSE";
460    IWJ0089 Severe "ABENDCC={value} is not Sxxx or Unnnn";
461    IWJ0090 Severe "stepname.ABENDCC is not supported yet";
462    IWJ0091 Severe "{word} is not RC, ABEND, ABENDCC or a stepname.RC, .ABEND or .RUN";
463    IWJ0092 Severe "an IF expression has {at} after its end";
464    IWJ0093 Severe "a {statement} statement inside a procedure";
465    IWJ0094 Severe "PROC {name} has no PEND";
466    IWJ0095 Severe "a {statement} statement in an INCLUDE member is not supported";
467    IWJ0096 Severe "procedure {name} has no step {step}";
468    IWJ0097 Severe "{generation} is not a relative generation";
469    IWJ0098 Severe "a comment is not closed with */";
470    IWJ0099 Severe "a parenthesis is not closed";
471    IWJ0100 Severe "{character} has no meaning here";
472    IWJ0101 Severe "{text} is not a condition code from 0 to 16";
473    IWJ0102 Severe "DO has no END";
474    IWJ0103 Severe "END without DO";
475    IWJ0104 Severe "ELSE inside DO with no IF";
476    IWJ0105 Severe "a command, found {word}";
477    IWJ0106 Severe "SET takes MAXCC=n or LASTCC=n";
478    IWJ0107 Severe "{verb} is out of place";
479    IWJ0108 Severe "the IDCAMS command {value} is not supported yet";
480    IWJ0109 Severe "IF needs a comparison operator";
481    IWJ0110 Severe "IF needs THEN";
482    IWJ0111 Severe "DELETE of a generic name ({word}) is not supported yet";
483    IWJ0112 Severe "DELETE parameter {k} is not supported yet";
484    IWJ0113 Severe "DELETE has {word} where a name belongs";
485    IWJ0114 Severe "DELETE names no entry";
486    IWJ0115 Severe "REPRO parameter {k} is not supported yet";
487    IWJ0116 Severe "REPRO parameter {word} is not supported yet";
488    IWJ0117 Severe "REPRO has {word} where a parameter belongs";
489    IWJ0118 Severe "REPRO needs INFILE or INDATASET, and OUTFILE or OUTDATASET";
490    IWJ0119 Severe "BLDINDEX parameter {k} is not supported yet";
491    IWJ0120 Severe "BLDINDEX parameter {word} is not supported yet";
492    IWJ0121 Severe "BLDINDEX has {word} where a parameter belongs";
493    IWJ0122 Severe "BLDINDEX needs INFILE or INDATASET, and OUTFILE or OUTDATASET";
494    IWJ0123 Severe "{value} is not a DD name";
495    IWJ0124 Severe "KEYS({value}) has a length that is not from 1 to 255";
496    IWJ0125 Severe "RECORDSIZE({value}) needs an average from 1 to the maximum";
497    IWJ0126 Severe "{value} is not an even number of hexadecimal digits";
498    IWJ0127 Severe "{value} is not a key of 1 to 255 characters";
499    IWJ0128 Severe "PRINT writes to OUTFILE, not OUTDATASET";
500    IWJ0129 Severe "PRINT parameter {k} is not supported yet";
501    IWJ0130 Severe "PRINT parameter {word} is not supported yet";
502    IWJ0131 Severe "PRINT has {word} where a parameter belongs";
503    IWJ0132 Severe "{value} is not a data set name or a generic name";
504    IWJ0133 Severe "LEVEL({value}) must not end with *";
505    IWJ0134 Severe "LISTCAT parameter {k} is not supported yet";
506    IWJ0135 Severe "LISTCAT parameter {word} is not supported yet";
507    IWJ0136 Severe "LISTCAT has {word} where a parameter belongs";
508    IWJ0137 Severe "LISTCAT ENTRIES names no entry";
509    IWJ0138 Severe "LIMIT({value}) is not from 1 to 255";
510    IWJ0139 Severe "DEFINE GDG parameter {k} is not supported yet";
511    IWJ0140 Severe "DEFINE GDG has {word} where a parameter belongs";
512    IWJ0141 Severe "{name} is not a generation data group name of 35 characters or fewer";
513    IWJ0142 Severe "DEFINE GDG needs NAME and LIMIT";
514    IWJ0143 Severe "DEFINE CLUSTER {k} is not supported yet";
515    IWJ0144 Severe "{name}: KEYS({length} {offset}) does not fit in a record of {maximum} bytes";
516    IWJ0145 Severe "DEFINE ALTERNATEINDEX {k} is not supported yet";
517    IWJ0146 Severe "DEFINE PATH RECATALOG is not supported yet";
518    IWJ0147 Severe "DEFINE {k} is not supported yet; DEFINE CLUSTER, ALTERNATEINDEX, PATH and GDG are";
519    IWJ0148 Severe "DEFINE has {word} where a parameter belongs";
520    IWJ0149 Severe "DEFINE needs CLUSTER, ALTERNATEINDEX, PATH or GDG";
521    IWJ0150 Severe "the field format {file} is not supported yet";
522    IWJ0151 Severe "{text} is not a {what}";
523    IWJ0152 Severe "X'{text}' is not pairs of hexadecimal digits";
524    IWJ0153 Severe "the constant {token} is not supported yet; C'...', X'...' and decimal numbers are";
525    IWJ0154 Severe "the edit pattern {text} is longer than 44 characters";
526    IWJ0155 Severe "SIGNS=({inner}) has more than four signs";
527    IWJ0156 Severe "the sign {part} is not one character";
528    IWJ0157 Severe "FIELDS=({inner}) is not position, length{format}, order for each field";
529    IWJ0158 Severe "an E order (an exit's own) is not supported yet";
530    IWJ0159 Severe "{o} is not A or D";
531    IWJ0160 Severe "the field format {format} in a condition is not supported yet; CH, BI, FI, ZD and PD are";
532    IWJ0161 Severe "a {format} field of {length} bytes is longer than DFSORT compares";
533    IWJ0162 Severe "comparing {position},{length},{format} with {number} is not supported yet";
534    IWJ0163 Severe "{extra} in a condition is not AND or OR";
535    IWJ0164 Severe "LENGTH={number} is longer than 44";
536    IWJ0165 Severe "{key}: the two digit characters must differ";
537    IWJ0166 Severe "arithmetic in {what} ({key}) is not supported yet";
538    IWJ0167 Severe "a {what} number is either edited or converted, not both";
539    IWJ0168 Severe "SIGNS goes with an edit mask, not TO, in {what}";
540    IWJ0169 Severe "{character} is not a column or a symbol for one";
541    IWJ0170 Severe "the {what} item {token} is not supported yet";
542    IWJ0171 Severe "{what} editing of {file} fields is not supported yet";
543    IWJ0172 Severe "a {file} field of {length} bytes is not one {what} edits";
544    IWJ0173 Severe "arithmetic in {what} ({next}) is not supported yet";
545    IWJ0174 Severe "{what} field conversion and editing ({next}) is not supported yet";
546    IWJ0175 Severe "{what}=() has no items";
547    IWJ0176 Severe "{what}={number} is longer than 15 digits";
548    IWJ0177 Severe "the PUSH item {token} is not supported yet; p,m, ID=n and SEQ=n are";
549    IWJ0178 Severe "PUSH=() has no items";
550    IWJ0179 Severe "KEYBEGIN={value} is not (p,m)";
551    IWJ0180 Severe "{verb} IFTHEN {key} is not supported yet";
552    IWJ0181 Severe "{k} is not an operand of this {verb} IFTHEN clause";
553    IWJ0182 Severe "an IFTHEN clause takes one of BUILD and OVERLAY, in {verb}";
554    IWJ0183 Severe "{verb} IFTHEN WHEN=GROUP needs PUSH=";
555    IWJ0184 Severe "{verb} IFTHEN WHEN=GROUP needs BEGIN, KEYBEGIN, END or RECORDS";
556    IWJ0185 Severe "{verb} IFTHEN WHEN=ANY needs a WHEN=(cond) clause before it";
557    IWJ0186 Severe "{verb} has more than one of BUILD, FIELDS, OUTREC and OVERLAY";
558    IWJ0187 Severe "{verb} takes IFTHEN clauses or BUILD, FIELDS and OVERLAY, not both";
559    IWJ0188 Severe "{verb} IFOUTLEN goes with IFTHEN clauses";
560    IWJ0189 Severe "OUTFIL takes one of INCLUDE, OMIT and SAVE";
561    IWJ0190 Severe "the OUTFIL parameter {k} is not supported yet";
562    IWJ0191 Severe "{bad} is not a ddname";
563    IWJ0192 Severe "more than one SORT or MERGE statement";
564    IWJ0193 Severe "{verb} operand {word} is not supported yet";
565    IWJ0194 Severe "SUM of fields is not supported yet; SUM FIELDS=NONE is";
566    IWJ0195 Severe "OPTION {number} is not supported yet";
567    IWJ0196 Severe "RECORD TYPE={t} is not supported yet";
568    IWJ0197 Severe "more than one INCLUDE or OMIT statement; INCLUDE and OMIT are mutually exclusive";
569    IWJ0198 Severe "the {verb} parameter {word} is not supported yet";
570    IWJ0199 Severe "{verb} needs FIELDS=, BUILD=, OVERLAY= or IFTHEN=";
571    IWJ0200 Severe "more than one {verb} statement";
572    IWJ0201 Severe "the DFSORT {value} statement is not supported yet";
573    IWJ0202 Severe "{value} is not a DFSORT control statement";
574    IWJ0203 Severe "no SORT, MERGE or OPTION COPY statement";
575    IWJ0204 Severe "SYMNAMES line {line}: {text} is not a {what} from 1 to 32752";
576    IWJ0205 Severe "SYMNAMES line {line}: {statement} is not symbol,value";
577    IWJ0206 Severe "SYMNAMES line {line}: ALIGN takes H, F or D, not {value}";
578    IWJ0207 Severe "SYMNAMES line {line}: {name} is not a symbol, or is a reserved word";
579    IWJ0208 Severe "SYMNAMES line {line}: {name} is defined twice";
580    IWJ0209 Severe "SYMNAMES line {line}: {value} is not a closed string";
581    IWJ0210 Severe "SYMNAMES line {line}: {value} is not a decimal number";
582    IWJ0211 Severe "SYMNAMES line {line}: {file} is not a field format";
583    IWJ0212 Severe "SYMNAMES line {line}: {value} is not p,m,f";
584    IWJ0213 Severe "the symbol {name} stands for {what}, which these statements do not model yet";
585    IWJ0214 Severe "the symbol {token} has no format, and no FORMAT= gives one";
586    IWJ0215 Severe "the symbol {token} is a constant, not a field to sort on";
587    IWJ0216 Severe "IF takes MAXCC or LASTCC";
588    IWJ0217 Severe "IF needs a condition code";
589    IWJ0218 Severe "{keyword}({value}) needs {N} whole numbers";
590    IWJ0219 Severe "PRINT needs INFILE or INDATASET";
591    IWJ0220 Severe "DEFINE CLUSTER needs NAME";
592    IWJ0221 Severe "DEFINE ALTERNATEINDEX needs NAME";
593    IWJ0222 Severe "DEFINE ALTERNATEINDEX needs RELATE";
594    IWJ0223 Severe "DEFINE PATH needs NAME";
595    IWJ0224 Severe "DEFINE PATH needs PATHENTRY";
596    IWJ0225 Severe "{verb} needs FIELDS=";
597    IWJ0226 Severe "{verb} needs COND=";
598    IWJ0227 Severe "{token} is not a decimal constant";
599    IWJ0228 Severe "the edit pattern {value} is not in parentheses";
600    IWJ0229 Severe "SIGNS={value} is not in parentheses";
601    IWJ0230 Severe "FIELDS={value} is not in parentheses";
602    IWJ0231 Severe "the field {position},{length} has no format, and no FORMAT= gives one";
603    IWJ0232 Severe "a comparison has no relation";
604    IWJ0233 Severe "{op} is not EQ, NE, GT, GE, LT or LE";
605    IWJ0234 Severe "a comparison has nothing after its relation";
606    IWJ0235 Severe "a condition ends early";
607    IWJ0236 Severe "COND={value} is not in parentheses";
608    IWJ0237 Severe "TO={value} is not BI, FI, PD, PDC, PDF, ZD, ZDF, ZDC, CSF or FS";
609    IWJ0238 Severe "{what}={value} is not in parentheses";
610    IWJ0239 Severe "PUSH={value} is not in parentheses";
611    IWJ0240 Severe "IFTHEN={value} is not in parentheses";
612    IWJ0241 Severe "IFTHEN=({inner}) does not begin with WHEN=";
613    IWJ0242 Severe "SYMNAMES line {line}: = for a position before any position was set";
614    IWJ0243 Severe "SYMNAMES line {line}: = for a length before any length was set";
615    IWJ0244 Severe "SYMNAMES line {line}: = for a format before any format was set";
616    IWJ0245 Severe "a comparison ends early";
617    IWJ0246 Severe "PGM={pgm} is not supported yet";
618    IWJ0247 Severe "PARM for PGM={pgm} is not supported yet";
619    IWJ0248 Severe "DD {dd} concatenates in-stream data with data sets of z/OS records";
620    IWJ0249 Severe "IDCAMS SYSIN from data sets of z/OS records is not supported yet";
621    IWJ0250 Severe "IEBGENER control statements are not supported yet";
622    IWJ0251 Severe "IEBGENER between UTF-8 lines and z/OS records needs a record length, which DCB is not read for yet";
623    IWL0001 Severe "lowering: {table} exceeds the LIR's limit";
624    IWL0002 Severe "lowering: the lowered program is invalid: {why}";
625    IWL0003 Severe "LOCAL-STORAGE exceeds the interpreter's {MAX STORAGE} bytes";
626    IWL0004 Severe "storage exceeds the interpreter's {MAX STORAGE} bytes";
627    IWL0005 Severe "WORKING-STORAGE exceeds the interpreter's {MAX STORAGE} bytes";
628    IWL0006 Severe "an item larger than the interpreter's {MAX STORAGE} bytes";
629    IWO0001 Severe "CBL {option}: {why}";
630    IWO0002 Error "CBL CURRENCY: code page {codepage} reads its byte as {character}, which cannot be a currency symbol";
631    IWO0003 Warning "CBL NODBCS: NSYMBOL(NATIONAL) requires DBCS, which is in effect";
632    IWO0004 Severe "SOURCE_DATE_EPOCH={value}: not a whole number of seconds from 0 to 253402300799";
633    IWO0005 Severe "{a flag this compiler does not take}";
634    IWP0001 Severe "no mapset {to ascii uppercase} among the {sets} in the file";
635    IWP0002 Informational "IGYPS2091-W not given: the program ends with EXEC CICS {command}, which the CICS translator turns into a CALL; --cics-return-warning=always gives the warning, =never drops this note";
636    IWP0003 Severe "EXEC SQL {command}: {why}";
637    IWP0004 Severe "EXEC DLI {command} is not an EXEC DLI command";
638    IWP0005 Severe "EXEC DLI {command}: {name} is not one of its options";
639    IWP0006 Severe "EXEC DLI {command} WHERE({t}): {why}";
640    IWP0007 Severe "EXEC CICS {command} {option}({label}): {message}";
641    IWP0008 Severe "a program that uses object-oriented syntax cannot contain EXEC CICS";
642    IWP0009 Severe "a continuation line is missing";
643    IWP0010 Severe "a label with no macro";
644    IWP0011 Severe "a quoted string is not closed";
645    IWP0012 Severe "a parenthesised list is not closed";
646    IWP0013 Severe "{key} takes one value";
647    IWP0014 Severe "{key} takes a quoted string";
648    IWP0015 Severe "{key}={word} is not a number from {low} to {high}";
649    IWP0016 Severe "{key}={word}: YES or NO";
650    IWP0017 Severe "DSATTS={a} is not an extended attribute";
651    IWP0018 Severe "EXTATT={word}: NO, MAPONLY or YES";
652    IWP0019 Severe "DFHMSD TYPE=FINAL with no mapset open";
653    IWP0020 Severe "DFHMDI outside a DFHMSD";
654    IWP0021 Severe "DFHMDF outside a DFHMDI map";
655    IWP0022 Severe "unknown macro {word}";
656    IWP0023 Severe "{what} needs a name";
657    IWP0024 Severe "{what} name {name} is longer than {max} characters";
658    IWP0025 Severe "TYPE={t}: DSECT, MAP, FINAL or &SYSPARM";
659    IWP0026 Severe "MODE={word}: IN, OUT or INOUT";
660    IWP0027 Severe "SIZE=(lines,columns), each 1 to 240";
661    IWP0028 Severe "{key}={word} is not a number from 1 to 240";
662    IWP0029 Severe "ATTRB={word} is not an attribute";
663    IWP0030 Severe "XINIT takes an even number of hexadecimal digits";
664    IWP0031 Severe "XINIT takes hexadecimal digits";
665    IWP0032 Severe "GRPNAME needs a labelled field and does not go with OCCURS";
666    IWP0033 Severe "GRPNAME is longer than 30 characters";
667    IWP0034 Severe "LENGTH=0 is allowed only on an unlabelled field, where it delimits an input field";
668    IWP0035 Severe "LENGTH is missing, or is not from 1 to 256";
669    IWP0036 Severe "JUSTIFY={word}: LEFT or RIGHT, BLANK or ZERO";
670    IWP0037 Severe "COLOR={character} is not a colour";
671    IWP0038 Severe "HILIGHT={h} is not a highlight";
672    IWP0039 Severe "POS is an offset within the map, or (line,column) inside it";
673    IWP0040 Severe "unbalanced '(' in DEFINE";
674    IWP0041 Severe "DEFINE names no KIND(NAME)";
675    IWP0042 Severe "{kind}({name}): a {kind} name is at most {limit} characters";
676    IWP0043 Severe "attribute value for '{key}' exceeds 256 characters";
677    IWP0044 Severe "unbalanced '(' in attribute value";
678    IWP0045 Severe "{why the BMS source cannot be read}";
679    IWP0046 Severe "EXEC SQL {command}: {name} in the INTO list has no colon, which Db2 requires before every host variable";
680    IWR0001 Severe "XML PARSE VALIDATING WITH {schema}: the schema is in IBM's Optimized Schema Representation (OSR), which ironwork does not read";
681    IWR0002 Severe "{verb} is not a statement ironwork for COBOL supports yet";
682    IWR0003 Severe "{clause} is not a data description clause ironwork for COBOL supports yet";
683    IWR0004 Severe "USAGE {usage} is not supported yet";
684    IWR0005 Severe "VALUE {literal}: a floating-point VALUE of more than 31 digits in fixed point is not supported yet";
685    IWR0006 Severe "the {section} SECTION is not supported yet";
686    IWR0007 Severe "ORGANIZATION {organization} is not supported yet";
687    IWR0008 Severe "{clause} is not a SELECT clause ironwork for COBOL supports yet";
688    IWR0009 Severe "INDEXED BY in FACTORY or OBJECT data is not supported yet";
689    IWR0010 Severe "{item}: EXTERNAL in FACTORY or OBJECT WORKING-STORAGE is not supported yet";
690    IWR0011 Severe "a method's FILE SECTION can define only EXTERNAL files, which ironwork for COBOL does not support yet";
691    IWR0012 Severe "items after an OCCURS DEPENDING ON table in the same record are not supported yet";
692    IWR0013 Severe "ADVANCING {mnemonic}: stacker selection ({environment}) on a card punch is not supported yet";
693    IWR0014 Severe "WRITE ... ADVANCING {mnemonic} on {file}, whose FD has LINAGE, is not supported yet";
694    IWR0015 Severe "{item}: INDEXED BY in a GLOBAL record, in a program that contains others, is not supported yet";
695    IWR0016 Severe "FD {file}: LINAGE on an EXTERNAL file is not supported yet";
696    IWR0017 Severe "FD {file}: REPORT on an EXTERNAL file is not supported yet";
697    IWR0018 Severe "FD {file}: LINAGE or REPORT on a GLOBAL file, in a program that contains others, is not supported yet";
698    IWR0019 Severe "{item}: a GLOBAL record of FD {file}, which is not GLOBAL, in a program that contains others, is not supported yet";
699    IWR0020 Severe "{file}, a GLOBAL file of {declarer}: its {clause} {item} is not a GLOBAL name of {declarer}, which is not supported yet";
700    IWR0021 Severe "SET ADDRESS OF {record}, a GLOBAL LINKAGE record of {program}, in a program it contains is not supported yet";
701    IWR0022 Severe "ASSIGN {item}: a file SORT or MERGE reads, writes or describes taking its name from a data item is not supported yet";
702    IWR0023 Severe "USE GLOBAL BEFORE REPORTING {group} for a report group of a contained program is not supported yet";
703    IWR0024 Severe "report {report} in more than one FD (INITIATE ... UPON) is not supported yet";
704    IWR0025 Severe "NEXT PAGE on a LINE other than a group's first (MULTIPLE PAGE) is not supported yet";
705    IWR0026 Severe "CONTROL {control}: a subscripted or reference-modified control is not supported yet";
706    IWR0027 Severe "GROUP INDICATE outside a DETAIL group is not supported yet";
707    IWR0028 Severe "a SUM of an entry in another report is not supported yet";
708    IWR0029 Severe "REPORTS ARE ALL is not supported yet";
709    IWR0030 Severe "INITIATE ... UPON is not supported yet";
710    IWR0031 Severe "a GLOBAL report is not supported yet";
711    IWR0032 Severe "CODE with a mnemonic-name or an identifier is not supported yet";
712    IWR0033 Severe "LAST DETAIL with an identifier is not supported yet";
713    IWR0034 Severe "LINE LIMIT with an identifier is not supported yet";
714    IWR0035 Severe "the {clause} clause of an RD is not supported yet";
715    IWR0036 Severe "{clause} is not an RD clause ironwork for COBOL supports yet";
716    IWR0037 Severe "a level-{level} entry in the REPORT SECTION is not supported yet";
717    IWR0038 Severe "multiple SOURCES is not supported yet";
718    IWR0039 Severe "multiple VALUES is not supported yet";
719    IWR0040 Severe "GROUP LIMIT is not supported yet";
720    IWR0041 Severe "USAGE {usage} in a report group is not supported yet";
721    IWR0042 Severe "{a report group clause ironwork does not run} is not supported yet";
722    IWR0043 Severe "{clause} is not a report group clause ironwork for COBOL supports yet";
723    IWR0044 Severe "an entry with more than one SOURCE, VALUE or SUM (a multiple-choice entry) is not supported yet";
724    IWR0045 Severe "a SUM or COUNT term in a SOURCE expression is not supported yet";
725    IWR0046 Severe "CONTROL FOOTING FOR ALL is not supported yet";
726    IWR0047 Severe "CONTROL HEADING ... OR PAGE is not supported yet";
727    IWR0048 Severe "a CONTROL FOOTING for more than one control is not supported yet";
728    IWR0049 Severe "multiple LINES is not supported yet";
729    IWR0050 Severe "multiple COLUMNS is not supported yet";
730    IWR0051 Severe "SUM of an arithmetic expression is not supported yet";
731    IWR0052 Severe "lowering: {construct} is not lowered yet";
732    IWR0053 Severe "{file}: LINAGE on a report file is not supported yet";
733    IWR0054 Severe "BLANK WHEN ZERO on a USAGE NATIONAL item is not supported yet";
734    IWR0055 Severe "a national-edited PICTURE is not supported yet";
735    IWR0056 Severe "a {category} PICTURE with USAGE {usage} is not supported yet";
736    IWR0057 Severe "{a SCREEN SECTION form ironwork does not run} is not supported yet";
737    IWR0075 Severe "FUNCTION {name}: a user-defined function is not supported here yet";
738    IWR0076 Severe "ANY LENGTH on {name}: ironwork reads it on an alphanumeric 01 or 77 parameter, and {why}";
739    IWR0077 Severe "BASED on {name}: ironwork reads BASED on an 01 or 77 entry";
740    IWS0001 Severe "{what the syntax takes there}, found {the word or token there}";
741    IWS0002 Severe "{COPY or a translator's INCLUDE} {name}: no such member in the copy libraries";
742    IWS0003 Severe "COPY: {message}";
743    IWS0004 Severe "COPY {text}: the name ends in a period; the period that ends a COPY statement is the one followed by a space";
744    IWS0005 Severe "{verb}: {message}";
745    IWS0006 Severe "{verb} {name}: {display}";
746    IWS0007 Severe "more than 65535 copy members";
747    IWS0008 Severe "{verb} {name}: copies itself, or nests deeper than {MAX DEPTH}";
748    IWS0009 Severe "REPLACE OFF: a period to end the statement";
749    IWS0010 Severe "REPLACE ALSO and REPLACE LAST OFF are the 2014 COBOL standard's; Enterprise COBOL has REPLACE pseudo-text BY pseudo-text and REPLACE OFF";
750    IWS0011 Severe "REPLACE: a period to end the statement";
751    IWS0012 Severe "COPY {display}: {item}";
752    IWS0013 Severe "& with no literal after it";
753    IWS0014 Severe "constant {name}: {why}";
754    IWS0016 Severe "& joins two alphanumeric or hexadecimal literals, or two national literals, either of which may be a level-78 constant standing for one";
755    IWS0017 Severe "X'{text}' is not an even number of hex digits";
756    IWS0018 Severe "NX'{text}': a national hexadecimal literal is 4 to 320 hex digits, four to each UTF-16 code unit";
757    IWS0019 Severe "a sign must be followed by a number";
758    IWS0020 Severe "literal concatenation with & is not Enterprise COBOL's";
759    IWS0021 Severe "unexpected character {character}";
760    IWS0022 Severe "EXEC with no END-EXEC";
761    IWS0023 Severe "a DBCS literal holds 1 to {DBCS LITERAL MAX} characters, not {count}";
762    IWS0024 Severe "an unterminated literal";
763    IWS0025 Error "non-COBOL character {character}: the character was accepted";
764    IWS0026 Severe "unexpected '.'";
765    IWS0027 Severe "PICTURE with no character-string";
766    IWS0028 Severe "{file} has no SELECT ... ASSIGN";
767    IWS0029 Severe "a user-defined function or prototype cannot be nested within a program, function, method or class";
768    IWS0030 Severe "ENTRY cannot be used in a nested program";
769    IWS0031 Severe "FUNCTION-ID {name}: {why}";
770    IWS0032 Severe "FUNCTION-ID {name}: a user-defined function cannot be named {name}";
771    IWS0033 Severe "a second definition of user-defined function {name}";
772    IWS0034 Severe "FUNCTION-ID {name}: a user-defined function contains no programs, but {inner} is inside it";
773    IWS0035 Severe "END FUNCTION {end} ends function {name}";
774    IWS0036 Severe "a second CURRENCY SIGN clause for the currency symbol {symbol}";
775    IWS0037 Severe "UPSI-{number}: a second {which} STATUS phrase";
776    IWS0038 Severe "UPSI-{number}: a mnemonic-name or an ON or OFF STATUS phrase must follow it";
777    IWS0039 Severe "CURRENCY SIGN needs a nonempty alphanumeric literal";
778    IWS0040 Severe "CURRENCY SIGN {bytes} is not one character that can be a PICTURE currency symbol";
779    IWS0041 Severe "CURRENCY SIGN {value} is not one character that can be a PICTURE currency symbol";
780    IWS0042 Severe "CURRENCY SIGN {value} contains a digit, +, -, . or ,";
781    IWS0043 Severe "PICTURE SYMBOL {symbol} is not one character that can be a PICTURE currency symbol";
782    IWS0044 Severe "RECORD DELIMITER on {file}: the clause is for a file of ORGANIZATION SEQUENTIAL";
783    IWS0045 Severe "{indicator} {name} has no SELECT";
784    IWS0046 Severe "SD {name}: a sort or merge file takes no REPORT clause";
785    IWS0047 Severe "SD {name}: a sort or merge file takes no EXTERNAL or GLOBAL clause";
786    IWS0048 Severe "{indicator} {name}: LINAGE is given twice";
787    IWS0049 Severe "{indicator} {name}: EXTERNAL goes on the FD, not on a record of the FILE SECTION";
788    IWS0050 Severe "LINAGE: {phrase} {name} takes no subscript or reference modification";
789    IWS0051 Severe "a floating-point VALUE literal is for a COMP-1 or COMP-2 item, not a fixed-point one";
790    IWS0052 Severe "{written}: a floating-point literal's mantissa has at most 16 digits";
791    IWS0053 Severe "{written}: not an exponent";
792    IWS0054 Severe "{written}: the literal after ALL is alphanumeric, national or a figurative constant other than ALL";
793    IWS0055 Severe "ACCEPT ... FROM ENVIRONMENT is GnuCOBOL's, not Enterprise COBOL's";
794    IWS0056 Severe "EXIT FUNCTION: Enterprise COBOL does not yet support the format 4 EXIT statement; GOBACK ends a user-defined function";
795    IWS0057 Severe "CORRESPONDING takes one receiving group";
796    IWS0058 Severe "an inline PERFORM cannot have AFTER phrases: Enterprise COBOL takes them only when PERFORM names a procedure";
797    IWS0059 Severe "INITIALIZE: {word} is named twice in the {phrase} phrase";
798    IWS0060 Severe "ACCEPT ... FROM {name}: {why}";
799    IWS0061 Severe "SET ENVIRONMENT is GnuCOBOL's, not Enterprise COBOL's";
800    IWS0062 Severe "DFHRESP({condition}): not a CICS condition ironwork for COBOL knows";
801    IWS0063 Severe "DFHVALUE({name}): not a CVDA ironwork for COBOL knows";
802    IWS0064 Severe "NOT cannot follow the left parenthesis that distributes a relational operator";
803    IWS0065 Severe "<> is not an Enterprise COBOL relational operator: it writes NOT =";
804    IWS0066 Informational "{section} SECTION: no paragraph-name after its USE statement";
805    IWS0067 Severe "USE FOR DEBUGGING ON ALL: Enterprise COBOL debugs procedures, by name or as ALL PROCEDURES, and no other items";
806    IWS0068 Severe "USE FOR DEBUGGING is not allowed in a method";
807    IWS0069 Severe "USE FOR DEBUGGING is not allowed in a RECURSIVE program";
808    IWS0070 Severe "USE FOR DEBUGGING in a contained program: debugging sections are allowed only in the outermost program";
809    IWS0071 Severe "a REPOSITORY paragraph belongs to the outermost program only";
810    IWS0072 Severe "a class definition must be alone in its source file";
811    IWS0073 Severe "END CLASS {end} ends class {name}";
812    IWS0074 Severe "CLASS {name} IS \"{text}\": not a Java class name";
813    IWS0075 Severe "class {name} is named twice in the REPOSITORY paragraph";
814    IWS0076 Severe "WHEN-COMPILED is a special register too, so the REPOSITORY paragraph cannot name it";
815    IWS0077 Severe "FUNCTION {name} INTRINSIC: {name} is not an intrinsic function ironwork for COBOL knows";
816    IWS0078 Severe "FUNCTION {name}: a user-defined function in the REPOSITORY paragraph cannot be named {name}";
817    IWS0079 Severe "FUNCTION ALL: INTRINSIC follows ALL, which names every intrinsic function";
818    IWS0080 Severe "FUNCTION {name}: the REPOSITORY paragraph lists {name} with INTRINSIC, so no user-defined function takes its name here";
819    IWS0081 Severe "{section}: the DATA DIVISION of a {kind} paragraph has only a WORKING-STORAGE SECTION";
820    IWS0082 Severe "a class definition cannot contain EXEC statements";
821    IWS0083 Severe "method \"{name}\" contains a program: a method cannot contain nested programs";
822    IWS0084 Severe "method \"{name}\" has a REPOSITORY paragraph: the class's applies to its methods";
823    IWS0085 Severe "INVOKE passes its arguments BY VALUE, not BY {word}";
824    IWS0086 Severe "INVOKE passes its arguments BY VALUE: write USING BY VALUE";
825    IWS0087 Severe "level {level} is not a data level";
826    IWS0088 Severe "TYPE and NEXT GROUP belong on a report group's 01-level entry";
827    IWS0089 Severe "a report group entry needs an 01-level entry before it";
828    IWS0090 Severe "SUM with SOURCE or VALUE in one entry";
829    IWS0091 Severe "COLUMN RIGHT and CENTER take an absolute column";
830    IWS0092 Severe "a literal runs to the end of the line with no continuation";
831    IWS0093 Severe "a continued literal must resume with its quote";
832    IWS0094 Severe "{shown}: the source-format directives >>SOURCE and $SET SOURCEFORMAT, giving FREE or FIXED, are the only compiler directives ironwork reads";
833    IWS0095 Severe "CURRENCY SIGN {literal} is {character} in the program's code page, which cannot be a PICTURE currency symbol";
834    IWS0096 Severe "CURRENCY SIGN {literal} is {value} in the program's code page, which contains a digit, +, -, . or ,";
835    IWS0097 Severe "{END-DISPLAY or END-ACCEPT}: Micro Focus's and GnuCOBOL's scope terminator, a word Enterprise COBOL does not reserve; --compliance extended reads it";
836    IWS0098 Severe "VALUES in a level-{level} entry: Enterprise COBOL writes VALUES only in a level-88 entry, and VALUE in any other; --compliance extended reads it as VALUE";
837    IWS0099 Error "{word}: a user-defined word has at most 30 characters, and this one has {count}; it is read as its first 30, {the first 30}";
838    IWS0100 Error "{word} begins in Area A, where Enterprise COBOL puts no statement: it is read as though it began in Area B";
839    IWS0101 Severe "{FLOAT-SHORT or FLOAT-LONG}: GnuCOBOL's and Micro Focus's floating point, not Enterprise COBOL's; --compliance extended reads it as {COMP-1 or COMP-2}";
840    IWS0102 Severe "the Communication feature ({a COMMUNICATION SECTION item or statement}) is not part of Enterprise COBOL, which does not compile it";
841    IWS0104 Error "{terminator}: an explicit scope terminator with no verb open for it; it was discarded";
842    IWS0105 Error "a period was required before {word}: one was assumed";
843    IWX0001 Warning "free-form source (Micro Focus and GnuCOBOL; Enterprise COBOL reads fixed form alone): {why the file is read in free form}";
844    IWX0002 Warning "constant entry (Micro Focus and GnuCOBOL; Enterprise COBOL has no level 78 and no CONSTANT clause): {name} stands for its value wherever it is used after this entry";
845    IWX0003 Warning "<> (Micro Focus and GnuCOBOL; Enterprise COBOL writes NOT =) is read as NOT =";
846    IWX0004 Warning "literal concatenation with & (Micro Focus and GnuCOBOL; Enterprise COBOL has none): the literals on either side are one literal";
847    IWX0005 Warning "{the COBOL 2002 or GnuCOBOL binary usage}: {usage} is read as PIC {picture} COMP-5";
848    IWX0006 Warning "PROGRAM-ID with no IDENTIFICATION DIVISION header before it (COBOL 2002, Micro Focus and GnuCOBOL; Enterprise COBOL requires the header): the program reads as though IDENTIFICATION DIVISION. came before it";
849    IWX0007 Warning "ASSIGN to a data item (Micro Focus and GnuCOBOL; Enterprise COBOL's assignment-name is never a data item): each OPEN of {file} takes its DD name from {item}";
850    IWX0008 Warning "an integer or numeric function as a MOVE's sender (GnuCOBOL; Enterprise COBOL takes one only where an arithmetic expression can be): FUNCTION {name} is moved as its value";
851    IWX0009 Warning "PROCEDURE DIVISION RETURNING OMITTED (GnuCOBOL; Enterprise COBOL's RETURNING names an 01 or 77 item of the LINKAGE SECTION): the program is read with no RETURNING phrase, and returns its RETURN-CODE to its caller as any program does";
852    IWX0010 Warning "{ACCEPT ... FROM COMMAND-LINE, ARGUMENT-NUMBER or ARGUMENT-VALUE, or DISPLAY ... UPON ARGUMENT-NUMBER} (Micro Focus and GnuCOBOL; Enterprise COBOL reads no command line): {what the job step's PARM program arguments give}";
853    IWX0011 Warning "an INTO name written without its colon (Db2 13 for z/OS requires the colon before every host variable): {name} is read as a host variable";
854    IWX0012 Warning "a numeric literal as a numeric-edited item's VALUE (Micro Focus and GnuCOBOL; Enterprise COBOL takes an alphanumeric literal in edited form): {name} starts as the literal moved to it";
855    IWX0013 Warning "{END-DISPLAY or END-ACCEPT} (Micro Focus and GnuCOBOL; Enterprise COBOL does not reserve the word): it ends the {DISPLAY or ACCEPT} statement";
856    IWX0014 Warning "VALUES outside a level-88 entry (Micro Focus; Enterprise COBOL writes VALUE there): it is read as VALUE";
857    IWX0015 Warning "a user-defined word of more than 30 characters (Micro Focus and GnuCOBOL; Enterprise COBOL reads its first 30): {word} is read whole";
858    IWX0016 Warning "BINARY-CHAR (Micro Focus and GnuCOBOL; Enterprise COBOL's binary items are two, four or eight bytes): {name} is one byte of binary, {range}";
859    IWX0017 Warning "a statement in Area A (Micro Focus and GnuCOBOL; Enterprise COBOL puts statements in Area B): {word} is read as though it began in Area B";
860    IWX0018 Warning "a numeric argument to FUNCTION {name} (GnuCOBOL; Enterprise COBOL takes an alphabetic, alphanumeric or national one): {item}'s digits are read as its characters";
861    IWX0019 Warning "OCCURS at level {level} (Micro Focus and GnuCOBOL; Enterprise COBOL takes OCCURS only at levels 02 to 49): {name} is read as a table in a record of its own";
862    IWX0020 Warning "{DISPLAY or ACCEPT} on the screen (Micro Focus and GnuCOBOL; Enterprise COBOL has none): at {where}";
863    IWX0021 Warning "{the environment form} (Micro Focus and GnuCOBOL; Enterprise COBOL reads and sets no environment variable): {what it does}";
864    IWX0022 Warning "{a locking phrase} (Micro Focus and GnuCOBOL; Enterprise COBOL has no record locks of its own): the run unit is the file's only user, so nothing it locks waits and the phrase changes nothing";
865    IWX0023 Warning "INSPECT ... TRAILING (GnuCOBOL; Enterprise COBOL has ALL, LEADING, FIRST and CHARACTERS): the occurrences that run on to the end of the phrase's region";
866    IWX0024 Warning "CALL ... RETURNING {OMITTED, NOTHING or NULL} (GnuCOBOL; Enterprise COBOL's RETURNING names a data item): the CALL leaves the caller's RETURN-CODE as it was";
867    IWX0025 Warning "COMP-X (Micro Focus; Enterprise COBOL's binary items are two, four or eight bytes): {name} is {n} bytes of binary, {range}, shown in {digits} digits";
868    IWX0026 Warning "PIC X(n) COMP-5 (Micro Focus and GnuCOBOL; Enterprise COBOL's COMP-5 takes a numeric PICTURE): {name} is {n} bytes of binary, {range}";
869    IWX0027 Warning "{FLOAT-SHORT or FLOAT-LONG} (GnuCOBOL and Micro Focus; Enterprise COBOL writes COMP-1 and COMP-2): it is read as {COMP-1 or COMP-2}, IBM's hexadecimal floating point";
870    IWX0028 Warning "PERFORM ... FOREVER (Micro Focus and GnuCOBOL; Enterprise COBOL has no FOREVER phrase): it repeats until EXIT PERFORM, GO TO, GOBACK or STOP RUN leaves it";
871    IWX0029 Warning "ACCEPT ... FROM {LINES, COLUMNS or COLS} (GnuCOBOL; Enterprise COBOL has no screen): the screen's {24 lines or 80 columns}";
872    IWX0030 Warning "WRITE ... BEFORE ADVANCING on the line-sequential file {file} (GnuCOBOL and Micro Focus; Enterprise COBOL allows only AFTER there): the line, then the lines or page it names";
873    IWX0031 Warning "FUNCTION MODULE-CALLER-ID (GnuCOBOL; Enterprise COBOL has no such function): the PROGRAM-ID of the program that called this one, empty in the main program";
874    IWX0032 Warning "a level-66 entry before the end of its record (GnuCOBOL's IBM and Micro Focus dialects; Enterprise COBOL writes a record's RENAMES entries after its last entry): {name} is read as following {record}'s last entry";
875    IWX0033 Warning "{STOP RUN or GOBACK} {RETURNING or GIVING} (GnuCOBOL and Micro Focus; Enterprise COBOL moves the value to RETURN-CODE first): the value is moved to RETURN-CODE, then {STOP RUN or GOBACK} ends the program";
876    IWX0034 Warning "{name} [NOT] OMITTED (GnuCOBOL and Micro Focus; Enterprise COBOL writes ADDRESS OF {name} = NULL): it is read as ADDRESS OF {name} = NULL, true when the caller passed OMITTED or no argument there";
877    IWX0035 Warning "ANY LENGTH (GnuCOBOL and Micro Focus; Enterprise COBOL's parameters have the length their entries give): {name} is as long as the argument each CALL passes for it";
878    IWX0036 Warning "START KEY {< or NOT > or <=} (Micro Focus and GnuCOBOL; Enterprise COBOL's START takes =, >, NOT < or >=): the file is positioned at the last record whose key is {that} the value, which READ NEXT or READ PREVIOUS reads first";
879    IWX0037 Warning "a file description with no FILE SECTION header (Micro Focus and GnuCOBOL; Enterprise COBOL writes FILE SECTION first): it is read as though FILE SECTION came first";
880    IWX0038 Warning "PERFORM UNTIL EXIT (GnuCOBOL and Micro Focus; Enterprise COBOL has no such condition): it repeats until EXIT PERFORM, GO TO, GOBACK or STOP RUN leaves it";
881    IWX0039 Warning "ASSIGN TO DISK (Micro Focus and GnuCOBOL; Enterprise COBOL's ASSIGN names a DD): DISK is the device, and what follows names the file";
882    IWX0040 Warning "KEY IS {name} = ... (Micro Focus; Enterprise COBOL's key is one data item): the key joins {n} items of the record, in the order written";
883    IWX0041 Warning "periods after a period (GnuCOBOL and Micro Focus; Enterprise COBOL ends a sentence with one): the periods after the first are ignored";
884    IWX0042 Warning "FUNCTION STORED-CHAR-LENGTH (GnuCOBOL; Enterprise COBOL has no such function): the argument's length in characters without its trailing spaces";
885    IWX0043 Warning "DELETE FILE (Micro Focus and GnuCOBOL; Enterprise COBOL has no such statement): each closed file's data set is removed";
886    IWX0044 Warning "PROGRAM-POINTER (GnuCOBOL and Micro Focus; Enterprise COBOL writes PROCEDURE-POINTER): it is read as PROCEDURE-POINTER, set by SET ... TO ENTRY and called by CALL";
887    IWX0046 Warning "BASED (GnuCOBOL and Micro Focus; Enterprise COBOL describes such an item in the LINKAGE SECTION): {name} has no storage until SET ADDRESS OF gives it some";
888    IWX0047 Warning "FREE {name} (GnuCOBOL; Enterprise COBOL frees through a pointer): the storage ADDRESS OF {name} names is released, and the record has none";
889    IWX0048 Warning "{>>DEFINE or >>IF} (COBOL 2002 and GnuCOBOL; Enterprise COBOL 6.3 has it too): {what it does}";
890    IWX0049 Warning ">>{directive} (COBOL 2002 and GnuCOBOL; Enterprise COBOL has no such directive): it is read and has no effect";
891    IWX0050 Warning ">>D (GnuCOBOL; Enterprise COBOL marks a debugging line with D in column 7): the line is a debugging line, compiled only WITH DEBUGGING MODE";
892    IWX0051 Warning "an inline PERFORM with AFTER phrases (GnuCOBOL and Micro Focus; Enterprise COBOL takes them only when PERFORM names a procedure): the body runs for each combination, the last AFTER varying fastest";
893    IWX0052 Warning "INITIALISE (Micro Focus and GnuCOBOL; Enterprise COBOL spells it INITIALIZE): it is read as INITIALIZE";
894    IWX0053 Warning "FUNCTION CONCATENATE (GnuCOBOL; Enterprise COBOL has no such function): its arguments' characters joined, a number's as its digits";
895    IWX0054 Warning "COPY {name}. (GnuCOBOL and Micro Focus; Enterprise COBOL reads the name as {name}.): the member is {name}, and the periods after it end the statement";
896    IWX0055 Warning "PROCEDURE DIVISION CHAINING (GnuCOBOL and Micro Focus; Enterprise COBOL's main program takes its PARM through USING): each item takes the run's argument in its position, its bytes left-justified, where one is given";
897    IWX0056 Warning "DISPLAY UPON SYSERR (GnuCOBOL and Micro Focus; Enterprise COBOL has no such device): the line is written to the run's standard error";
898    IWX0057 Warning "COB-CRT-STATUS (GnuCOBOL's special register; Enterprise COBOL has no screen ACCEPT): it holds the key that ended the last screen ACCEPT, as GnuCOBOL's screenio.cpy numbers the keys";
899}
900
901/// docs/messages.md: the areas and every message, with the severity it is given.
902pub fn document() -> String {
903    let mut out = String::from(
904        "# ironwork's compiler messages\n\n<!-- Generated from crates/syntax/src/messages.rs by its tests; do not edit. -->\n\n\
905         Each message a compile gives carries an id: `IW`, an area's letter and four digits, then the\n\
906         severity it was given, as in `IWR0001-S`. A site fills in the parts between braces. Once\n\
907         released, an id keeps its meaning and is never given to another message; its wording may change.\n\n\
908         ## Areas\n\n| Letter | Area |\n|---|---|\n",
909    );
910    for (letter, area) in AREAS {
911        out.push_str(&format!("| {letter} | {area} |\n"));
912    }
913    out.push_str("\n## Messages\n\n| Id | Severity | Text |\n|---|---|---|\n");
914    for m in CATALOGUE {
915        out.push_str(&format!("| {} | {} | `{}` |\n", m.id, m.severity.letter(), m.text.replace('|', "\\|")));
916    }
917    out.push_str(
918        "\n## Run-time refusals\n\n\
919         A run that reaches a construct ironwork does not run ends with one of these, its id and\n\
920         severity S before the text, under the abend code IRONWORK, EXEC or JAVA.\n\n\
921         | Id | Severity | Text |\n|---|---|---|\n",
922    );
923    for r in rt::refusal::RUNTIME {
924        out.push_str(&format!("| {} | S | `{}` |\n", r.id, r.text.replace('|', "\\|")));
925    }
926    out
927}
928
929#[cfg(test)]
930mod tests {
931    use super::*;
932
933    fn sources(dir: &std::path::Path, out: &mut Vec<(std::path::PathBuf, String)>) {
934        for entry in std::fs::read_dir(dir).unwrap() {
935            let path = entry.unwrap().path();
936            if path.is_dir() {
937                if path.file_name().is_some_and(|n| n != "tests") {
938                    sources(&path, out);
939                }
940            } else if path.extension().is_some_and(|e| e == "rs") && path.file_name().is_some_and(|n| n != "tests.rs" && n != "messages.rs") {
941                let text = std::fs::read_to_string(&path).unwrap().replace("\r\n", "\n");
942                let code = text.find("#[cfg(test)]\nmod tests {").map_or(text.as_str(), |at| &text[..at]).to_owned();
943                out.push((path, code));
944            }
945        }
946    }
947
948    #[test]
949    fn syntax_compile_and_code_generation_build_every_message_from_the_catalogue() {
950        let crates = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("..");
951        let mut files = Vec::new();
952        for krate in ["syntax", "compile", "exec"] {
953            sources(&crates.join(krate).join("src"), &mut files);
954        }
955        let uncatalogued: Vec<String> = files
956            .iter()
957            .flat_map(|(path, code)| code.lines().enumerate().filter(|(_, l)| l.contains("Error::at(") || l.contains("Error::warning(")).map(move |(n, l)| format!("{}:{}: {}", path.display(), n + 1, l.trim())))
958            .collect();
959        assert!(uncatalogued.is_empty(), "give these an entry in syntax::messages and build them with it:\n{}", uncatalogued.join("\n"));
960    }
961
962    #[test]
963    fn a_run_refuses_a_construct_by_a_catalogued_id() {
964        let crates = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("..");
965        let mut files = Vec::new();
966        for krate in ["rt", "exec"] {
967            sources(&crates.join(krate).join("src"), &mut files);
968        }
969        let uncatalogued: Vec<String> = files
970            .iter()
971            .flat_map(|(path, code)| {
972                code.lines().enumerate().filter(|(_, l)| l.contains("Abend::ironwork(") && (l.contains("not supported") || l.contains("does not run") || l.contains("does not provide"))).map(move |(n, l)| format!("{}:{}: {}", path.display(), n + 1, l.trim()))
973            })
974            .collect();
975        assert!(uncatalogued.is_empty(), "give these an entry in rt::refusal and build them with it:\n{}", uncatalogued.join("\n"));
976    }
977
978    #[test]
979    fn docs_messages_is_the_catalogue() {
980        let committed = include_str!("../../../docs/messages.md").replace('\r', "");
981        let written = document();
982        assert!(committed == written, "docs/messages.md is not the catalogue; write it as:\n{written}");
983    }
984
985    #[test]
986    fn ids_are_unique_in_order_and_name_an_area() {
987        let ids: Vec<&str> = CATALOGUE.iter().map(|m| m.id).collect();
988        assert!(ids.windows(2).all(|w| w[0] < w[1]), "{ids:?}");
989        let runtime: Vec<&str> = rt::refusal::RUNTIME.iter().map(|r| r.id).collect();
990        assert!(runtime.windows(2).all(|w| w[0] < w[1]), "{runtime:?}");
991        let shared: Vec<&&str> = runtime.iter().filter(|id| ids.contains(id)).collect();
992        assert!(shared.is_empty(), "both halves of the catalogue give {shared:?}");
993        for id in ids.into_iter().chain(runtime) {
994            assert!(id.len() == 7 && id.starts_with("IW") && id[3..].bytes().all(|b| b.is_ascii_digit()), "{id}");
995            assert!(AREAS.iter().any(|(letter, _)| id.as_bytes()[2] == *letter as u8), "{id}");
996        }
997    }
998
999    #[test]
1000    fn a_catalogued_message_carries_its_id_and_severity() {
1001        let pos = Pos { file: 0, line: 3, col: 8 };
1002        let warned = IWX0003.at(pos, IWX0003.text);
1003        assert_eq!((warned.id, warned.severity), (Some("IWX0003"), Severity::Warning));
1004        assert_eq!(warned.place("p.cbl"), "p.cbl:3:8: warning: IWX0003-W <> (Micro Focus and GnuCOBOL; Enterprise COBOL writes NOT =) is read as NOT =");
1005        let refused = IWR0001.at(pos, "XML PARSE VALIDATING WITH X: why");
1006        assert_eq!(refused.place("p.cbl"), "p.cbl:3:8: IWR0001-S XML PARSE VALIDATING WITH X: why");
1007        assert_eq!(refused.graded(Severity::Error).labelled(), "IWR0001-E XML PARSE VALIDATING WITH X: why");
1008    }
1009}