diff --git a/TypeCobol.Test/Parser/Preprocessor/DirectiveResultFiles/CblProcess.txt b/TypeCobol.Test/Parser/Preprocessor/DirectiveResultFiles/CblProcess.txt index 400a00b97..081993dff 100644 --- a/TypeCobol.Test/Parser/Preprocessor/DirectiveResultFiles/CblProcess.txt +++ b/TypeCobol.Test/Parser/Preprocessor/DirectiveResultFiles/CblProcess.txt @@ -115,33 +115,36 @@ *** DIRECTIVE CBL|NOSUPPRESS|NOZC|TEST ([8,31:CBL NOSUPPRESS NOZC TEST]) *** -- Line 39 -- -[8,33:Invalid/not allowed syntax] +*** DIRECTIVE CBL|VSAMOPENFS=SUCC|VS=C ([8,33:CBL VSAMOPENFS(SUCC) VS(C)]) *** -- Line 40 -- -*** DIRECTIVE INVALID SYNTAX -> CBL|AMODE=64 ([8,20:CBL AMODE(64)]) *** +[8,33:Invalid/not allowed syntax] -- Line 41 -- -*** DIRECTIVE INVALID SYNTAX -> CBL|ALOWCOPYLOC ([8,22:CBL ALOWCOPYLOC]) *** +*** DIRECTIVE INVALID SYNTAX -> CBL|AMODE=64 ([8,20:CBL AMODE(64)]) *** -- Line 42 -- -*** DIRECTIVE INVALID SYNTAX -> CBL|ALOWDEFINE ([8,21:CBL ALOWDEFINE]) *** +*** DIRECTIVE INVALID SYNTAX -> CBL|ALOWCOPYLOC ([8,22:CBL ALOWCOPYLOC]) *** -- Line 43 -- -*** DIRECTIVE INVALID SYNTAX -> CBL|LP=64 ([8,17:CBL LP(64)]) *** +*** DIRECTIVE INVALID SYNTAX -> CBL|ALOWDEFINE ([8,21:CBL ALOWDEFINE]) *** -- Line 44 -- +*** DIRECTIVE INVALID SYNTAX -> CBL|LP=64 ([8,17:CBL LP(64)]) *** + +-- Line 45 -- [8,21:IDENTIFICATION] [23,30:DIVISION] [31,32:. ] --- Line 45 -- +-- Line 46 -- [8,72:-Reason : AMEELIORATION PROCESS ACTIMAT ] --- Line 46 -- +-- Line 47 -- [17,23:PERFORM] [25,49:PROCESSUS-INDEXATION-IMMO] [50,51:. ] --- Line 47 -- +-- Line 48 -- [8,72:*** PROCESSUS DE MENAGE ] diff --git a/TypeCobol.Test/Parser/Preprocessor/DirectiveTestFiles/CblProcess.cbl b/TypeCobol.Test/Parser/Preprocessor/DirectiveTestFiles/CblProcess.cbl index 6983ecd51..280b038bb 100644 --- a/TypeCobol.Test/Parser/Preprocessor/DirectiveTestFiles/CblProcess.cbl +++ b/TypeCobol.Test/Parser/Preprocessor/DirectiveTestFiles/CblProcess.cbl @@ -36,6 +36,7 @@ CBL COPYLOC, DEFINE(compilation-variable = 1), INITCHECK(LAX), INITIAL PROCESS SSRANGE,OFFSET 000100 CBL NOCPLC, NODEF, NOIC, INVD(FNC,NOCS), NONUMCHECK, NONC 000110 CBL NOSUPPRESS NOZC TEST +000111 CBL VSAMOPENFS(SUCC) VS(C) 000120*Invalid/not allowed syntax 000130 CBL AMODE(64) 000140 CBL ALOWCOPYLOC diff --git a/TypeCobol.Test/Parser/Scanner/ResultFiles/CblProcessCompilerDirective.txt b/TypeCobol.Test/Parser/Scanner/ResultFiles/CblProcessCompilerDirective.txt index bfc7a226b..f7243a1ac 100644 --- a/TypeCobol.Test/Parser/Scanner/ResultFiles/CblProcessCompilerDirective.txt +++ b/TypeCobol.Test/Parser/Scanner/ResultFiles/CblProcessCompilerDirective.txt @@ -191,3 +191,9 @@ Line 0[1,15] <25, Error, Directives> - Invalid syntax for a CBL or PROCESS compi *** DIRECTIVE INVALID SYNTAX -> CBL|ALOWDEFINE ([1,14:CBL ALOWDEFINE]) *** Line 0[1,14] <25, Error, Directives> - Invalid syntax for a CBL or PROCESS compiler directive : each option should be separated by space or comma, and option parameters should be enclosed in parentheses +-- Line 61 -- +*** DIRECTIVE CBL|VSAMOPENFS=S ([1,17:CBL VSAMOPENFS(S)]) *** + +-- Line 62 -- +*** DIRECTIVE CBL|VS=COMPAT ([1,14:CBL VS(COMPAT)]) *** + diff --git a/TypeCobol.Test/Parser/Scanner/TestTokenTypes.cs b/TypeCobol.Test/Parser/Scanner/TestTokenTypes.cs index 7621c1fd4..11a07c5b4 100644 --- a/TypeCobol.Test/Parser/Scanner/TestTokenTypes.cs +++ b/TypeCobol.Test/Parser/Scanner/TestTokenTypes.cs @@ -478,7 +478,9 @@ public static void CheckCblProcessCompilerDirective() "CBL OFFSET", "CBL AMODE(64)", "CBL ALOWCOPYLOC", - "CBL ALOWDEFINE" + "CBL ALOWDEFINE", + "CBL VSAMOPENFS(S)", + "CBL VS(COMPAT)" }; string result = ScannerUtils.ScanLines(testLines); ScannerUtils.CheckWithResultFile(result, testName); diff --git a/TypeCobol/Compiler/Directives/IBMCompilerOptions.cs b/TypeCobol/Compiler/Directives/IBMCompilerOptions.cs index cbc1c42d7..34fcb3282 100644 --- a/TypeCobol/Compiler/Directives/IBMCompilerOptions.cs +++ b/TypeCobol/Compiler/Directives/IBMCompilerOptions.cs @@ -92,6 +92,7 @@ namespace TypeCobol.Compiler.Directives // “MDECK” on page 332 NOMDECK NOMD|MD|MD(C|NOC) // “OPTFILE” on page 338 None None // “THREAD” on page 356 NOTHREAD None + // “VSAMOPENFS” on page 389 VSAMOPENFS(COMPAT) VS(C | S) // --- Deprecated --- // “LIB” @@ -197,6 +198,7 @@ internal IBMCompilerOptionStatus(IBMCompilerOptionName name) case IBMCompilerOptionName.THREAD: IsActivated = false; Value = null; break; case IBMCompilerOptionName.TRUNC: IsActivated = true; Value = "STD"; break; case IBMCompilerOptionName.VBREF: IsActivated = false; Value = null; break; + case IBMCompilerOptionName.VSAMOPENFS: IsActivated = true; Value = "COMPAT"; break; case IBMCompilerOptionName.WORD: IsActivated = false; Value = null; break; case IBMCompilerOptionName.XREF: IsActivated = true; Value = "FULL"; break; case IBMCompilerOptionName.ZONECHECK: IsActivated = false; Value = null; break; @@ -597,6 +599,12 @@ public class IBMCompilerOptions /// public IBMCompilerOptionStatus VBREF { get; private set; } + /// + /// The VSAMOPENFS option affects the user file status reported from successful VSAM OPEN statements that + /// require verified file integrity check. + /// + public IBMCompilerOptionStatus VSAMOPENFS { get; private set; } + /// /// Use WORD(xxxx) to specify that an alternate reserved-word table is to be used during compilation. /// @@ -623,7 +631,7 @@ public class IBMCompilerOptions public IBMCompilerOptionStatus ZWB { get; private set; } // Conversion of option words in source text to option name enumeration - private readonly IDictionary optionWordToOptionName = new Dictionary(194, StringComparer.OrdinalIgnoreCase); + private readonly IDictionary optionWordToOptionName = new Dictionary(196, StringComparer.OrdinalIgnoreCase); // Deprecated options which are not supported anymore with the corresponding warning message to be displayed private static readonly IDictionary deprecatedOptions = new Dictionary(1, StringComparer.OrdinalIgnoreCase); @@ -705,6 +713,7 @@ public IBMCompilerOptions() THREAD = new IBMCompilerOptionStatus(IBMCompilerOptionName.THREAD); TRUNC = new IBMCompilerOptionStatus(IBMCompilerOptionName.TRUNC); VBREF = new IBMCompilerOptionStatus(IBMCompilerOptionName.VBREF); + VSAMOPENFS = new IBMCompilerOptionStatus(IBMCompilerOptionName.VSAMOPENFS); WORD = new IBMCompilerOptionStatus(IBMCompilerOptionName.WORD); XREF = new IBMCompilerOptionStatus(IBMCompilerOptionName.XREF); ZONECHECK = new IBMCompilerOptionStatus(IBMCompilerOptionName.ZONECHECK); @@ -779,6 +788,7 @@ public IBMCompilerOptions() optionWordToOptionName["THREAD"] = THREAD; optionWordToOptionName["NOTHREAD"] = THREAD; optionWordToOptionName["TRUNC"] = TRUNC; optionWordToOptionName["VBREF"] = VBREF; optionWordToOptionName["NOVBREF"] = VBREF; + optionWordToOptionName["VSAMOPENFS"] = VSAMOPENFS; optionWordToOptionName["VS"] = VSAMOPENFS; optionWordToOptionName["WORD"] = WORD; optionWordToOptionName["WD"] = WORD; optionWordToOptionName["NOWORD"] = WORD; optionWordToOptionName["NOWD"] = WORD; optionWordToOptionName["XREF"] = XREF; optionWordToOptionName["X"] = XREF; optionWordToOptionName["NOXREF"] = XREF; optionWordToOptionName["NOX"] = XREF; optionWordToOptionName["ZONECHECK"] = ZONECHECK; optionWordToOptionName["ZC"] = ZONECHECK; optionWordToOptionName["NOZONECHECK"] = ZONECHECK; optionWordToOptionName["NOZC"] = ZONECHECK; @@ -992,6 +1002,8 @@ public enum IBMCompilerOptionName TRUNC, /* Use VBREF to get a cross-reference between all verbs used in the source program and the line numbers in which they are used. VBREF also produces a summary of the number of times each verb was used in the program. */ VBREF, + /* The VSAMOPENFS option affects the user file status reported from successful VSAM OPEN statements that require verified file integrity check. */ + VSAMOPENFS, /* Use WORD(xxxx) to specify that an alternate reserved-word table is to be used during compilation. */ WORD, /* Use XREF to produce a sorted cross-reference listing. */