diff --git a/gcc/cobol/charmaps.cc b/gcc/cobol/charmaps.cc index df1bb6c19b800b824ce97698d81b8f4589252e89..c61d2055441d2b24282758dadee59c40d51de4ee 100644 --- a/gcc/cobol/charmaps.cc +++ b/gcc/cobol/charmaps.cc @@ -85,8 +85,6 @@ // internal codeset is ASCII/CP1252 or EBCDIC/CP1140. bool __gg__ebcdic_codeset_in_use = false ; -int __gg__squished_characters = 0; - static text_codeset_t source_codeset = cs_cp1252_e; static text_codeset_t console_codeset = cs_default_e; @@ -342,7 +340,6 @@ extract_next_code_point(const unsigned char *utf8, // We have a poorly-constructed UTF-8 encoding goto done; } - __gg__squished_characters += countdown; while( countdown-- ) { ch = utf8[position++]; @@ -405,7 +402,6 @@ __gg__raw_to_ascii(char **dest, size_t *dest_size, const char *in, size_t length // This is the byte position of the input size_t position = 0; - __gg__squished_characters = 0; while( index < length ) { // In the case of "display "âêîôû", when the source code is encoded in @@ -476,7 +472,6 @@ __gg__raw_to_ebcdic(char **dest, size_t *dest_size, const char *in, size_t lengt size_t position = 0; size_t code_point; - __gg__squished_characters = 0; while( index < length ) { // See comments in __gg__raw_to_ascii diff --git a/gcc/cobol/charmaps.h b/gcc/cobol/charmaps.h index 52a9cc3158f7271ef4ca3808e1067f62f0f5c79b..1adf3540439d52ea1e1f0f76c5392e8bc5bf0cb8 100644 --- a/gcc/cobol/charmaps.h +++ b/gcc/cobol/charmaps.h @@ -307,9 +307,6 @@ extern const unsigned short __gg__cp1140_to_cp1252_values[256]; extern const unsigned short __gg__cp1252_to_ebcdic_collation[256]; extern const unsigned short __gg__ebcdic_to_cp1252_collation[256]; -extern int __gg__squished_characters; // When converting "âê" it gets squished -// // from four bytes down to two - // As described above, we have a number of operations we need to accomplish. But // the actual routines are dependent on whether EBCDIC or ASCII is in use. We // implement that by having a function pointer for each function; those pointers diff --git a/gcc/cobol/failures/nc250/Makefile b/gcc/cobol/failures/nc250/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f77e46b3451abf45cb70ed9dc161be56b3b063c7 --- /dev/null +++ b/gcc/cobol/failures/nc250/Makefile @@ -0,0 +1 @@ +include ../Makefile.inc diff --git a/gcc/cobol/failures/nc250/NC250A.cbl b/gcc/cobol/failures/nc250/NC250A.cbl new file mode 100644 index 0000000000000000000000000000000000000000..4d588cfcc538c8b0f7a8ab0e7824095427f51563 --- /dev/null +++ b/gcc/cobol/failures/nc250/NC250A.cbl @@ -0,0 +1,1973 @@ + *>EADER,COBOL,NC250A + IDENTIFICATION DIVISION. + PROGRAM-ID. + NC250A. + + *>************************************************************** + *> * + *> VALIDATION FOR:- * + *> * + *> "ON-SITE VALIDATION, NATIONAL INSTITUTE OF STD & TECH. ". + *> * + *> "COBOL 85 VERSION 4.2, Apr 1993 SSVG ". + *> * + *>************************************************************** + *> * + *> X-CARDS USED BY THIS PROGRAM ARE :- * + *> * + *> X-55 - SYSTEM PRINTER NAME. * + *> X-82 - SOURCE COMPUTER NAME. * + *> X-83 - OBJECT COMPUTER NAME. * + *> * + *>************************************************************** + *> + *> PROGRAM NC250A TESTS THE GENERAL FORMAT OF THE "IF" STATEMENT + *> A VARIETY OF QUALIFIED DATA-NAMES AND CONDITION-NAMES + *> ARE USED. + *> + + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. + GNU-Linux. + OBJECT-COMPUTER. + GNU-Linux. + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT PRINT-FILE ASSIGN TO + "NC250A.rpt". + DATA DIVISION. + FILE SECTION. + FD PRINT-FILE. + 01 PRINT-REC PICTURE X(120). + 01 DUMMY-RECORD PICTURE X(120). + WORKING-STORAGE SECTION. + 01 WRK-DU-1V0-1 PIC 9 VALUE 1. + 01 WRK-DU-1V0-2 PIC 9 VALUE 2. + 01 WRK-DU-1V0-3 PIC 9 VALUE 3. + 01 WRK-DU-1V0-4 PIC 9 VALUE ZERO. + 01 WRK-DU-2V0-1 PIC 99 VALUE 10. + 01 WRK-DU-2V0-2 PIC 99 VALUE 11. + 01 WRK-DU-2V0-3 PIC 99 VALUE 12. + 77 SMALL-VALU PICTURE 99 VALUE 7. + 77 SMALLER-VALU PICTURE 99 VALUE 6. + 77 SMALLEST-VALU PICTURE 99 VALUE 5. + 77 EVEN-SMALLER PICTURE 99 VALUE 1. + 77 WRK-DS-02V00 PICTURE S99. + 88 TEST-2NUC-COND-99 VALUE 99. + 77 WRK-DS-06V06 PICTURE S9(6)V9(6). + 77 WRK-DS-12V00-S REDEFINES WRK-DS-06V06 + PICTURE S9(12). + 77 A02TWOS-DS-02V00 PICTURE S99 VALUE 22. + 77 WRK-DS-01V00 PICTURE S9. + 77 A02TWOS-DS-03V02 PICTURE S999V99 VALUE +022.00. + 77 A990-DS-0201P PICTURE S99P VALUE 990. + 77 A02ONES-DS-02V00 PICTURE S99 VALUE 11. + 77 A01ONE-DS-P0801 PICTURE SP(8)9 VALUE .000000001. + 77 ATWO-DS-01V00 PICTURE S9 VALUE 2. + 77 WRK-XN-00001 PICTURE X. + 77 WRK-XN-00005 PICTURE X(5). + 77 TWO PICTURE 9 VALUE 2. + 77 THREE PICTURE 9 VALUE 3. + 77 SEVEN PICTURE 9 VALUE 7. + 77 EIGHT PICTURE 9 VALUE 8. + 77 NINE PICTURE 9 VALUE 9. + 77 TEN PICTURE 99 VALUE 10. + 77 TWENTY PICTURE 99 VALUE 20. + 77 ALTERCOUNT PICTURE 999 VALUE ZERO. + 77 XRAY PICTURE IS X. + 77 IF-D1 PICTURE S9(4)V9(2) VALUE 0. + 77 IF-D2 PICTURE S9(4)V9(2) VALUE ZERO. + 77 IF-D3 PICTURE X(10) VALUE "0000000000". + 77 IF-D4 PICTURE X(15) VALUE " ". + 77 IF-D5 PICTURE X(10) VALUE ALL QUOTE. + 77 IF-D6 PICTURE A(10) VALUE "BABABABABA". + 77 IF-D7 PICTURE S9(6)V9(4) VALUE +123.45. + 77 IF-D8 PICTURE 9(6)V9(4) VALUE 12300. + 77 IF-D9 PICTURE X(3) VALUE "123". + 77 IF-D11 PICTURE X(6) VALUE "ABCDEF". + 77 IF-D13 PICTURE 9(6)V9(4) VALUE 12300. + 77 IF-D14 PICTURE S9(4)V9(2) VALUE +123.45. + 77 IF-D15 PICTURE S999PP VALUE 12300. + 77 IF-D16 PICTURE PP99 VALUE .0012. + 77 IF-D17 PICTURE SV9(4) VALUE .0012. + 77 IF-D18 PICTURE X(10) VALUE "BABABABABA". + 77 IF-D19 PICTURE X(10) VALUE "ABCDEF ". + 77 IF-D23 PICTURE $9,9B9.90+. + 77 IF-D24 PICTURE X(10) VALUE "$1,2 3.40+". + 77 IF-D25 PICTURE ABABX0A. + 77 IF-D26 PICTURE X(8) VALUE "A C D0E". + 77 IF-D27 PICTURE IS 9(6)V9(4) VALUE IS 2137.45 + USAGE IS COMPUTATIONAL. + 77 IF-D28 PICTURE IS 999999V9999 VALUE IS 2137.45. + 77 IF-D31 PICTURE S9(6) VALUE -123. + 77 IF-D32 PICTURE S9(4)V99. + 88 A VALUE 1. + 88 B VALUES ARE 2 THRU 4. + 88 C VALUE IS ZERO. + 88 D VALUE IS +12.34. + 88 E VALUE IS .01, .11, .21 .81. + 88 F VALUE IS 100 THRU 128 1000 THRU 1280 -9 THRU -2. + 88 G VALUE IS 8765.43 1234 THRU 5678 5 -9999 THRU 10. + 77 IF-D33 PICTURE X(4). + 88 B VALUE QUOTE. + 88 C VALUE SPACE. + 88 D VALUE ALL "BAC". + 77 IF-D34 PICTURE A(4). + 88 B VALUE "A A ". + 77 IF-D37 PICTURE 9(5) VALUE 12345. + 77 IF-D38 PICTURE X(9) VALUE "12345 ". + 77 CCON-1 PICTURE 99 VALUE 11. + 77 CCON-2 PICTURE 99 VALUE 12. + 77 CCON-3 PICTURE 99 VALUE 13. + 77 COMP-SGN1 PICTURE S9(1) VALUE +9 COMPUTATIONAL. + 77 COMP-SGN2 PICTURE S9(18) VALUE +3 COMPUTATIONAL. + 77 COMP-SGN3 PICTURE S9(1) VALUE -5 COMPUTATIONAL. + 77 COMP-SGN4 PICTURE S9(18) VALUE -3167598765431 COMPUTATIONAL. + 77 START-POINT PICTURE 9(6) COMPUTATIONAL. + 77 INC-VALUE PICTURE 9(6) COMPUTATIONAL. + 77 SWITCH-PFM-1 PICTURE 9 VALUE ZERO. + 77 SWITCH-PFM-2 PICTURE 9 VALUE ZERO. + 77 PFM-11-COUNTER PICTURE 999 VALUE ZERO. + 77 PFM-12-COUNTER PICTURE 999 VALUE 100. + 77 PFM-12-ANS1 PICTURE 999 VALUE ZERO. + 77 PFM-12-ANS2 PICTURE 999 VALUE ZERO. + 01 SUBSCRIPT-6 PICTURE 99999 VALUE ZERO. + 01 IF-TABLE. + 02 IF-ELEM PICTURE X OCCURS 12 TIMES. + 01 QUOTE-DATA. + 02 QU-1 PICTURE X(3) VALUE "123". + 02 QU-2 PICTURE X VALUE QUOTE. + 02 QU-3 PICTURE X(6) VALUE "ABC456". + 01 IF-D10. + 02 D1 PICTURE X(2) VALUE "01". + 02 D2 PICTURE X(2) VALUE "23". + 02 D3. + 03 D4 PICTURE X(4) VALUE "4567". + 03 D5 PICTURE X(4) VALUE "8912". + 01 IF-D12. + 02 D1 PICTURE X(3) VALUE "ABC". + 02 D2. + 03 D3. + 04 D4 PICTURE XX VALUE "DE". + 04 D5 PICTURE X VALUE "F". + 01 IF-D20. + 02 FILLER PICTURE 9(5) VALUE ZERO. + 02 D1 PICTURE 9(2) VALUE 12. + 02 D2 PICTURE 9 VALUE 3. + 02 D3 PICTURE 9(2) VALUE 45. + 01 IF-D21. + 02 D1 PICTURE 9(5) VALUE ZEROS. + 02 D2 PICTURE 9(5) VALUE 12345. + 01 IF-D22. + 02 D1 PICTURE A(2) VALUE "AB". + 02 D2 PICTURE A(4) VALUE "CDEF". + 01 IF-D35. + 02 AA PICTURE X(2). + 88 A1 VALUE "AA". + 88 A2 VALUE "AB". + 02 BB PICTURE IS X(2). + 88 B1 VALUE "CC". + 88 B2 VALUE "CD". + 02 BB-2 REDEFINES BB. + 03 AAA PICTURE X. + 88 AA1 VALUE "A". + 88 AA2 VALUE "C". + 03 BBB PICTURE X. + 88 BB1 VALUE "B". + 88 BB2 VALUE "D". + 01 IF-D36 PICTURE X(120) VALUE IS "ABCDEFGHIJKLMNOPQRSTUVWXY + - "Z1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLM + - "NOPQRSTUVWXYZ1234567890ABCDEFGHIJKL". + 01 IF-D40 PICTURE 9(5) VALUE 12345 + COMPUTATIONAL SYNCHRONIZED RIGHT. + 88 IF-D40A VALUE ZERO THRU 10000. + 88 IF-D40B VALUE 10001 THRU 99999. + 88 IF-D40C VALUE 99999. + 01 PERFORM1 PICTURE XXX VALUE SPACES. + 01 PERFORM2 PICTURE S999 VALUE 20. + 01 PERFORM3 PICTURE 9 VALUE 5. + 01 PERFORM4 PICTURE S99V9. + 01 PERFORM5 PICTURE S99V9 VALUE 10.0. + 01 PERFORM6 PICTURE 99V9. + 01 PERFORM7. + 02 PERFORM8 OCCURS 7 TIMES PICTURE 99V9. + 01 PERFORM9 PICTURE 9 VALUE 3. + 01 PERFORM10 PICTURE S9 VALUE -1. + 01 PERFORM11 PICTURE 99 VALUE 6. + 01 PERFORM12. + 02 PERFORM13 OCCURS 4 TIMES. + 03 PERFORM14 OCCURS 20 TIMES PICTURE 99V9. + 03 PERFORM15 OCCURS 10 TIMES. + 04 PERFORM16 OCCURS 5 TIMES PICTURE 99V9. + 01 PERFORM17 PICTURE 9(6) COMPUTATIONAL. + 01 PERFORM18 PICTURE 9(6) COMPUTATIONAL. + 01 PERFORM-KEY PICTURE 9. + 01 PERFORM-SEVEN-LEVEL-TABLE. + 03 PFM71 OCCURS 2. + 05 PFM72 OCCURS 2. + 07 PFM73 OCCURS 2. + 09 PFM74 OCCURS 2. + 11 PFM75 OCCURS 2. + 13 PFM76 OCCURS 2. + 15 PFM77 OCCURS 2. + 17 PFM77-1 PIC X. + 01 S1 PIC S9(3) COMP. + 01 S2 PIC S9(3) COMP. + 01 S3 PIC S9(3) COMP. + 01 S4 PIC S9(3) COMP. + 01 S5 PIC S9(3) COMP. + 01 S6 PIC S9(3) COMP. + 01 S7 PIC S9(3) COMP. + 01 PFM-7-TOT PIC S9(3) COMP. + 01 PFM-F4-24-TOT PIC S9(3) COMP. + 01 PFM-A PIC S9(3) COMP. + 01 PFM-B PIC S9(3) COMP. + 01 FILLER-A. + 03 PFM-F4-25-A PIC S9(3) COMP OCCURS 10. + 01 FILLER-B. + 03 PFM-F4-25-B PIC S9(3) COMP OCCURS 10. + 01 FILLER-C. + 03 PFM-F4-25-C PIC S9(3) COMP OCCURS 10. + 01 RECEIVING-TABLE. + 03 TBL-ELEMEN-A. + 05 TBL-ELEMEN-B PICTURE X(18). + 05 TBL-ELEMEN-C PICTURE X(18). + 03 TBL-ELEMEN-D. + 05 TBL-ELEMEN-E PICTURE X OCCURS 36 TIMES. + 01 LITERAL-SPLITTER. + 02 PART1 PICTURE X(20). + 02 PART2 PICTURE X(20). + 02 PART3 PICTURE X(20). + 02 PART4 PICTURE X(20). + 01 LITERAL-TABLE REDEFINES LITERAL-SPLITTER. + 02 80PARTS PICTURE X OCCURS 80 TIMES. + 01 GRP-FOR-88-LEVELS. + 03 WRK-DS-02V00-COND PICTURE 99. + 88 COND-1 VALUE IS 01 THRU 05. + 88 COND-2 VALUES ARE 06 THRU 10 + 16 THRU 20 00. + 88 COND-3 VALUES 11 THRU 15. + 01 GRP-MOVE-CONSTANTS. + 03 GRP-GROUP-MOVE-FROM. + 04 GRP-ALPHABETIC. + 05 ALPHABET-AN-00026 PICTURE A(26) + VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZ". + 04 GRP-NUMERIC. + 05 DIGITS-DV-10V00 PICTURE 9(10) VALUE 0123456789. + 05 DIGITS-DU-06V04-S REDEFINES DIGITS-DV-10V00 + PICTURE 9(6)V9999. + 04 GRP-ALPHANUMERIC. + 05 ALPHANUMERIC-XN-00049 PICTURE X(50) + VALUE "ABCDEFGHIJKLMNOPQRSTUVWXYZ+-><=$,;.()/* 0123456789". + 05 FILLER PICTURE X VALUE QUOTE. + 01 GRP-FOR-2N058. + 02 SUB-GRP-FOR-2N058-A. + 03 ELEM-FOR-2N058-A PICTURE 999 VALUE ZEROES. + 03 ELEM-FOR-2N058-B PICTURE XXX VALUE ZEROS. + 03 ELEM-FOR-2N058-C PICTURE XXX VALUE SPACES. + 03 ELEM-FOR-2N058-D PICTURE X(6) VALUE ALL "ABC". + 03 ELEM-FOR-2N058-E PICTURE XXX VALUE ALL "Z". + 03 ELEM-FOR-2N058-F PICTURE XXX VALUE ALL SPACES. + 03 ELEM-FOR-2N058-G PICTURE XXX VALUE ALL ZEROES. + 03 ELEM-FOR-2N058-H PICTURE 999 VALUE ALL ZEROS. + 03 ELEM-FOR-2N058-I PICTURE XXX VALUE QUOTES. + 03 ELEM-FOR-2N058-J PICTURE XXX VALUE ALL QUOTES. + 03 ELEM-FOR-2N058-K PICTURE XXX VALUE ALL HIGH-VALUES. + 03 ELEM-FOR-2N058-L PICTURE XXX VALUE ALL LOW-VALUES. + 03 ELEM-FOR-2N058-M PICTURE XXX VALUE HIGH-VALUES. + 03 ELEM-FOR-2N058-N PICTURE XXX VALUE LOW-VALUES. + 02 SUB-GRP-FOR-2N058-B. + 03 SUB-SUB-BA. + 04 ELEM-FOR-2N058-A PICTURE 999. + 04 ELEM-FOR-2N058-B PICTURE XXX. + 04 ELEM-FOR-2N058-C PICTURE XXX. + 04 ELEM-FOR-2N058-D PICTURE X(6). + 03 SUB-SUB-BB. + 04 ELEM-FOR-2N058-E PICTURE XXX. + 04 ELEM-FOR-2N058-F PICTURE XXX. + 04 ELEM-FOR-2N058-G PICTURE XXX. + 04 ELEM-FOR-2N058-H PICTURE 999. + 03 SUB-SUB-BC. + 04 ELEM-FOR-2N058-I PICTURE XXX. + 04 ELEM-FOR-2N058-J PICTURE XXX. + 04 ELEM-FOR-2N058-K PICTURE XXX. + 04 ELEM-FOR-2N058-L PICTURE XXX. + 04 ELEM-FOR-2N058-M PICTURE XXX. + 04 ELEM-FOR-2N058-N PICTURE XXX. + 01 CHARACTER-BREAKDOWN-S. + 02 FIRST-20S PICTURE X(20). + 02 SECOND-20S PICTURE X(20). + 02 THIRD-20S PICTURE X(20). + 02 FOURTH-20S PICTURE X(20). + 02 FIFTH-20S PICTURE X(20). + 02 SIXTH-20S PICTURE X(20). + 02 SEVENTH-20S PICTURE X(20). + 02 EIGHTH-20S PICTURE X(20). + 02 NINTH-20S PICTURE X(20). + 02 TENTH-20S PICTURE X(20). + 01 CHARACTER-BREAKDOWN-R. + 02 FIRST-20R PICTURE X(20). + 02 SECOND-20R PICTURE X(20). + 02 THIRD-20R PICTURE X(20). + 02 FOURTH-20R PICTURE X(20). + 02 FIFTH-20R PICTURE X(20). + 02 SIXTH-20R PICTURE X(20). + 02 SEVENTH-20R PICTURE X(20). + 02 EIGHTH-20R PICTURE X(20). + 02 NINTH-20R PICTURE X(20). + 02 TENTH-20R PICTURE X(20). + 01 TABLE-80. + 02 ELMT OCCURS 3 TIMES PIC 9. + 88 A80 VALUES ARE ZERO THRU 7. + 88 B80 VALUE 8. + 88 C80 VALUES ARE 7, 8 THROUGH 9. + + 01 TABLE-86. + 88 A86 VALUE "ABC". + 88 B86 VALUE "ABCABC". + 88 C86 VALUE " ABC". + 02 DATANAME-86 PIC XXX VALUE "ABC". + 02 DNAME-86. + 03 FILLER PIC X VALUE "A". + 03 FILLER PIC X VALUE "B". + 03 FILLER PIC X VALUE "C". + 01 FIGCON-DATA. + 02 SPACE-X PICTURE X(10) VALUE " ". + 02 QUOTE-X PICTURE X(5) VALUE QUOTE. + 02 LOW-VAL PICTURE X(5) VALUE LOW-VALUE. + 02 ABC PICTURE XXX VALUE "ABC". + 02 ONE23 PICTURE 9999 VALUE 123. + 02 ZERO-C PICTURE 9(10) VALUE 0 COMPUTATIONAL. + 02 ZERO-D PICTURE 9 VALUE ZERO USAGE DISPLAY. + 01 TEST-RESULTS. + 02 FILLER PIC X VALUE SPACE. + 02 FEATURE PIC X(20) VALUE SPACE. + 02 FILLER PIC X VALUE SPACE. + 02 P-OR-F PIC X(5) VALUE SPACE. + 02 FILLER PIC X VALUE SPACE. + 02 PAR-NAME. + 03 FILLER PIC X(19) VALUE SPACE. + 03 PARDOT-X PIC X VALUE SPACE. + 03 DOTVALUE PIC 99 VALUE ZERO. + 02 FILLER PIC X(8) VALUE SPACE. + 02 RE-MARK PIC X(61). + 01 TEST-COMPUTED. + 02 FILLER PIC X(30) VALUE SPACE. + 02 FILLER PIC X(17) VALUE + " COMPUTED=". + 02 COMPUTED-X. + 03 COMPUTED-A PIC X(20) VALUE SPACE. + 03 COMPUTED-N REDEFINES COMPUTED-A + PIC -9(9).9(9). + 03 COMPUTED-0V18 REDEFINES COMPUTED-A PIC -.9(18). + 03 COMPUTED-4V14 REDEFINES COMPUTED-A PIC -9(4).9(14). + 03 COMPUTED-14V4 REDEFINES COMPUTED-A PIC -9(14).9(4). + 03 CM-18V0 REDEFINES COMPUTED-A. + 04 COMPUTED-18V0 PIC -9(18). + 04 FILLER PIC X. + 03 FILLER PIC X(50) VALUE SPACE. + 01 TEST-CORRECT. + 02 FILLER PIC X(30) VALUE SPACE. + 02 FILLER PIC X(17) VALUE " CORRECT =". + 02 CORRECT-X. + 03 CORRECT-A PIC X(20) VALUE SPACE. + 03 CORRECT-N REDEFINES CORRECT-A PIC -9(9).9(9). + 03 CORRECT-0V18 REDEFINES CORRECT-A PIC -.9(18). + 03 CORRECT-4V14 REDEFINES CORRECT-A PIC -9(4).9(14). + 03 CORRECT-14V4 REDEFINES CORRECT-A PIC -9(14).9(4). + 03 CR-18V0 REDEFINES CORRECT-A. + 04 CORRECT-18V0 PIC -9(18). + 04 FILLER PIC X. + 03 FILLER PIC X(2) VALUE SPACE. + 03 COR-ANSI-REFERENCE PIC X(48) VALUE SPACE. + 01 CCVS-C-1. + 02 FILLER PIC IS X(99) VALUE IS " FEATURE PA + - "SS PARAGRAPH-NAME + - " REMARKS". + 02 FILLER PIC X(20) VALUE SPACE. + 01 CCVS-C-2. + 02 FILLER PIC X VALUE SPACE. + 02 FILLER PIC X(6) VALUE "TESTED". + 02 FILLER PIC X(15) VALUE SPACE. + 02 FILLER PIC X(4) VALUE "FAIL". + 02 FILLER PIC X(94) VALUE SPACE. + 01 REC-SKL-SUB PIC 9(2) VALUE ZERO. + 01 REC-CT PIC 99 VALUE ZERO. + 01 DELETE-COUNTER PIC 999 VALUE ZERO. + 01 ERROR-COUNTER PIC 999 VALUE ZERO. + 01 INSPECT-COUNTER PIC 999 VALUE ZERO. + 01 PASS-COUNTER PIC 999 VALUE ZERO. + 01 TOTAL-ERROR PIC 999 VALUE ZERO. + 01 ERROR-HOLD PIC 999 VALUE ZERO. + 01 DUMMY-HOLD PIC X(120) VALUE SPACE. + 01 RECORD-COUNT PIC 9(5) VALUE ZERO. + 01 ANSI-REFERENCE PIC X(48) VALUE SPACES. + 01 CCVS-H-1. + 02 FILLER PIC X(39) VALUE SPACES. + 02 FILLER PIC X(42) VALUE + "OFFICIAL COBOL COMPILER VALIDATION SYSTEM". + 02 FILLER PIC X(39) VALUE SPACES. + 01 CCVS-H-2A. + 02 FILLER PIC X(40) VALUE SPACE. + 02 FILLER PIC X(7) VALUE "CCVS85 ". + 02 FILLER PIC XXXX VALUE + "4.2 ". + 02 FILLER PIC X(28) VALUE + " COPY - NOT FOR DISTRIBUTION". + 02 FILLER PIC X(41) VALUE SPACE. + + 01 CCVS-H-2B. + 02 FILLER PIC X(15) VALUE + "TEST RESULT OF ". + 02 TEST-ID PIC X(9). + 02 FILLER PIC X(4) VALUE + " IN ". + 02 FILLER PIC X(12) VALUE + " HIGH ". + 02 FILLER PIC X(22) VALUE + " LEVEL VALIDATION FOR ". + 02 FILLER PIC X(58) VALUE + "ON-SITE VALIDATION, NATIONAL INSTITUTE OF STD & TECH. ". + 01 CCVS-H-3. + 02 FILLER PIC X(34) VALUE + " FOR OFFICIAL USE ONLY ". + 02 FILLER PIC X(58) VALUE + "COBOL 85 VERSION 4.2, Apr 1993 SSVG ". + 02 FILLER PIC X(28) VALUE + " COPYRIGHT 1985 ". + 01 CCVS-E-1. + 02 FILLER PIC X(52) VALUE SPACE. + 02 FILLER PIC X(14) VALUE IS "END OF TEST- ". + 02 ID-AGAIN PIC X(9). + 02 FILLER PIC X(45) VALUE SPACES. + 01 CCVS-E-2. + 02 FILLER PIC X(31) VALUE SPACE. + 02 FILLER PIC X(21) VALUE SPACE. + 02 CCVS-E-2-2. + 03 ERROR-TOTAL PIC XXX VALUE SPACE. + 03 FILLER PIC X VALUE SPACE. + 03 ENDER-DESC PIC X(44) VALUE + "ERRORS ENCOUNTERED". + 01 CCVS-E-3. + 02 FILLER PIC X(22) VALUE + " FOR OFFICIAL USE ONLY". + 02 FILLER PIC X(12) VALUE SPACE. + 02 FILLER PIC X(58) VALUE + "ON-SITE VALIDATION, NATIONAL INSTITUTE OF STD & TECH. ". + 02 FILLER PIC X(13) VALUE SPACE. + 02 FILLER PIC X(15) VALUE + " COPYRIGHT 1985". + 01 CCVS-E-4. + 02 CCVS-E-4-1 PIC XXX VALUE SPACE. + 02 FILLER PIC X(4) VALUE " OF ". + 02 CCVS-E-4-2 PIC XXX VALUE SPACE. + 02 FILLER PIC X(40) VALUE + " TESTS WERE EXECUTED SUCCESSFULLY". + 01 XXINFO. + 02 FILLER PIC X(19) VALUE + "*** INFORMATION ***". + 02 INFO-TEXT. + 04 FILLER PIC X(8) VALUE SPACE. + 04 XXCOMPUTED PIC X(20). + 04 FILLER PIC X(5) VALUE SPACE. + 04 XXCORRECT PIC X(20). + 02 INF-ANSI-REFERENCE PIC X(48). + 01 HYPHEN-LINE. + 02 FILLER PIC IS X VALUE IS SPACE. + 02 FILLER PIC IS X(65) VALUE IS "************************ + - "*****************************************". + 02 FILLER PIC IS X(54) VALUE IS "************************ + - "******************************". + 01 CCVS-PGM-ID PIC X(9) VALUE + "NC250A". + PROCEDURE DIVISION. + CCVS1 SECTION. + OPEN-FILES. + OPEN OUTPUT PRINT-FILE. + MOVE CCVS-PGM-ID TO TEST-ID. MOVE CCVS-PGM-ID TO ID-AGAIN. + MOVE SPACE TO TEST-RESULTS. + PERFORM HEAD-ROUTINE THRU COLUMN-NAMES-ROUTINE. + GO TO CCVS1-EXIT. + CLOSE-FILES. + PERFORM END-ROUTINE THRU END-ROUTINE-13. CLOSE PRINT-FILE. + TERMINATE-CCVS. + STOP RUN. + INSPT. MOVE "INSPT" TO P-OR-F. ADD 1 TO INSPECT-COUNTER. + PASS. MOVE "PASS " TO P-OR-F. ADD 1 TO PASS-COUNTER. + FAIL. MOVE "FAIL*" TO P-OR-F. ADD 1 TO ERROR-COUNTER. + DE-LETE. MOVE "*****" TO P-OR-F. ADD 1 TO DELETE-COUNTER. + MOVE "****TEST DELETED****" TO RE-MARK. + PRINT-DETAIL. + IF REC-CT NOT EQUAL TO ZERO + MOVE "." TO PARDOT-X + MOVE REC-CT TO DOTVALUE. + MOVE TEST-RESULTS TO PRINT-REC. PERFORM WRITE-LINE. + IF P-OR-F EQUAL TO "FAIL*" PERFORM WRITE-LINE + PERFORM FAIL-ROUTINE THRU FAIL-ROUTINE-EX + ELSE PERFORM BAIL-OUT THRU BAIL-OUT-EX. + MOVE SPACE TO P-OR-F. MOVE SPACE TO COMPUTED-X. + MOVE SPACE TO CORRECT-X. + IF REC-CT EQUAL TO ZERO MOVE SPACE TO PAR-NAME. + MOVE SPACE TO RE-MARK. + HEAD-ROUTINE. + MOVE CCVS-H-1 TO DUMMY-RECORD. PERFORM WRITE-LINE 2 TIMES. + MOVE CCVS-H-2A TO DUMMY-RECORD. PERFORM WRITE-LINE 2 TIMES. + MOVE CCVS-H-2B TO DUMMY-RECORD. PERFORM WRITE-LINE 3 TIMES. + MOVE CCVS-H-3 TO DUMMY-RECORD. PERFORM WRITE-LINE 3 TIMES. + COLUMN-NAMES-ROUTINE. + MOVE CCVS-C-1 TO DUMMY-RECORD. PERFORM WRITE-LINE. + MOVE CCVS-C-2 TO DUMMY-RECORD. PERFORM WRITE-LINE 2 TIMES. + MOVE HYPHEN-LINE TO DUMMY-RECORD. PERFORM WRITE-LINE. + END-ROUTINE. + MOVE HYPHEN-LINE TO DUMMY-RECORD. PERFORM WRITE-LINE 5 TIMES. + END-RTN-EXIT. + MOVE CCVS-E-1 TO DUMMY-RECORD. PERFORM WRITE-LINE 2 TIMES. + END-ROUTINE-1. + ADD ERROR-COUNTER TO ERROR-HOLD ADD INSPECT-COUNTER TO + ERROR-HOLD. ADD DELETE-COUNTER TO ERROR-HOLD. + ADD PASS-COUNTER TO ERROR-HOLD. + *> IF PASS-COUNTER EQUAL TO ERROR-HOLD GO TO END-ROUTINE-12. + MOVE PASS-COUNTER TO CCVS-E-4-1. + MOVE ERROR-HOLD TO CCVS-E-4-2. + MOVE CCVS-E-4 TO CCVS-E-2-2. + MOVE CCVS-E-2 TO DUMMY-RECORD PERFORM WRITE-LINE. + END-ROUTINE-12. + MOVE "TEST(S) FAILED" TO ENDER-DESC. + IF ERROR-COUNTER IS EQUAL TO ZERO + MOVE "NO " TO ERROR-TOTAL + ELSE + MOVE ERROR-COUNTER TO ERROR-TOTAL. + MOVE CCVS-E-2 TO DUMMY-RECORD. + PERFORM WRITE-LINE. + END-ROUTINE-13. + IF DELETE-COUNTER IS EQUAL TO ZERO + MOVE "NO " TO ERROR-TOTAL ELSE + MOVE DELETE-COUNTER TO ERROR-TOTAL. + MOVE "TEST(S) DELETED " TO ENDER-DESC. + MOVE CCVS-E-2 TO DUMMY-RECORD. PERFORM WRITE-LINE. + IF INSPECT-COUNTER EQUAL TO ZERO + MOVE "NO " TO ERROR-TOTAL + ELSE MOVE INSPECT-COUNTER TO ERROR-TOTAL. + MOVE "TEST(S) REQUIRE INSPECTION" TO ENDER-DESC. + MOVE CCVS-E-2 TO DUMMY-RECORD. PERFORM WRITE-LINE. + MOVE CCVS-E-3 TO DUMMY-RECORD. PERFORM WRITE-LINE. + WRITE-LINE. + ADD 1 TO RECORD-COUNT. + IF RECORD-COUNT GREATER 50 + MOVE DUMMY-RECORD TO DUMMY-HOLD + MOVE SPACE TO DUMMY-RECORD + WRITE DUMMY-RECORD AFTER ADVANCING PAGE + MOVE CCVS-C-1 TO DUMMY-RECORD PERFORM WRT-LN + MOVE CCVS-C-2 TO DUMMY-RECORD PERFORM WRT-LN 2 TIMES + MOVE HYPHEN-LINE TO DUMMY-RECORD PERFORM WRT-LN + MOVE DUMMY-HOLD TO DUMMY-RECORD + MOVE ZERO TO RECORD-COUNT. + PERFORM WRT-LN. + WRT-LN. + WRITE DUMMY-RECORD AFTER ADVANCING 1 LINES. + MOVE SPACE TO DUMMY-RECORD. + BLANK-LINE-PRINT. + PERFORM WRT-LN. + FAIL-ROUTINE. + IF COMPUTED-X NOT EQUAL TO SPACE GO TO FAIL-ROUTINE-WRITE. + IF CORRECT-X NOT EQUAL TO SPACE GO TO FAIL-ROUTINE-WRITE. + MOVE ANSI-REFERENCE TO INF-ANSI-REFERENCE. + MOVE "NO FURTHER INFORMATION, SEE PROGRAM." TO INFO-TEXT. + MOVE XXINFO TO DUMMY-RECORD. PERFORM WRITE-LINE 2 TIMES. + MOVE SPACES TO INF-ANSI-REFERENCE. + GO TO FAIL-ROUTINE-EX. + FAIL-ROUTINE-WRITE. + MOVE TEST-COMPUTED TO PRINT-REC PERFORM WRITE-LINE + MOVE ANSI-REFERENCE TO COR-ANSI-REFERENCE. + MOVE TEST-CORRECT TO PRINT-REC PERFORM WRITE-LINE 2 TIMES. + MOVE SPACES TO COR-ANSI-REFERENCE. + FAIL-ROUTINE-EX. EXIT. + BAIL-OUT. + IF COMPUTED-A NOT EQUAL TO SPACE GO TO BAIL-OUT-WRITE. + IF CORRECT-A EQUAL TO SPACE GO TO BAIL-OUT-EX. + BAIL-OUT-WRITE. + MOVE CORRECT-A TO XXCORRECT. MOVE COMPUTED-A TO XXCOMPUTED. + MOVE ANSI-REFERENCE TO INF-ANSI-REFERENCE. + MOVE XXINFO TO DUMMY-RECORD. PERFORM WRITE-LINE 2 TIMES. + MOVE SPACES TO INF-ANSI-REFERENCE. + BAIL-OUT-EX. EXIT. + CCVS1-EXIT. + EXIT. + SECT-NC201A-001 SECTION. + *> + IF--INIT-A. + MOVE "VI-89 6.15" TO ANSI-REFERENCE. + PERFORM END-ROUTINE. + MOVE SPACE TO TEST-RESULTS. + MOVE "THE FOLLOWING TESTS " TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE "COMPARE FIGURATIVE " TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE "CONSTANTS, SIGN OF DATA, " TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE "AND CONDITION-NAMES " TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE "IN VARYING COMBINATIONS. " TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE "COMPARE-- " TO FEATURE. + PERFORM PRINT-DETAIL. + MOVE " FIG. CONSTANTS " TO FEATURE. + IF--TEST-1. + IF ZEROES IS EQUAL TO IF-D3 PERFORM PASS ELSE PERFORM FAIL. + *> NOTE FIGURATIVE ZEROES VS ALPHANUMERIC FIELD. + GO TO IF--WRITE-1. + IF--DELETE-1. + PERFORM DE-LETE. + IF--WRITE-1. + MOVE "IF--TEST-1 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-2. + IF SPACES EQUAL TO IF-D4 PERFORM PASS ELSE PERFORM FAIL. + *> NOTE FIGURATIVE SPACES VS ALPHANUMERIC FIELD. + GO TO IF--WRITE-2. + IF--DELETE-2. + PERFORM DE-LETE. + IF--WRITE-2. + MOVE "IF--TEST-2 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-3. + IF QUOTES EQUAL TO IF-D5 PERFORM PASS ELSE PERFORM FAIL. + *> NOTE FIGURATIVE QUOTES VS ALPHANUMERIC FIELD. + GO TO IF--WRITE-3. + IF--DELETE-3. + PERFORM DE-LETE. + IF--WRITE-3. + MOVE "IF--TEST-3 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-4. + IF IF-D6 EQUAL TO ALL "BA" PERFORM PASS ELSE PERFORM FAIL. + *> NOTE ALL ANY LITERAL VS ALPHANUMERIC FIELD. + GO TO IF--WRITE-4. + IF--DELETE-4. + PERFORM DE-LETE. + IF--WRITE-4. + MOVE "IF--TEST-4 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-5. + IF IF-D4 GREATER THAN SPACES PERFORM FAIL ELSE + PERFORM PASS. + *> NOTE FIG-SPACES VS ALPHANUMERIC FIELD. + GO TO IF--WRITE-5. + IF--DELETE-5. + PERFORM DE-LETE. + IF--WRITE-5. + MOVE "IF--TEST-5 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-6. + IF QUOTES GREATER THAN IF-D5 PERFORM FAIL ELSE PERFORM PASS. + *> NOTE FIG-QUOTES VS ALPHANUMERIC FIELD. + GO TO IF--WRITE-6. + IF--DELETE-6. + PERFORM DE-LETE. + IF--WRITE-6. + MOVE "IF--TEST-6 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-7. + IF ALL "BA" GREATER THAN IF-D6 PERFORM FAIL + ELSE PERFORM PASS. + *> NOTE ALL ANY LITERAL VS ALPHA FIELD. + GO TO IF--WRITE-7. + IF--DELETE-7. + PERFORM DE-LETE. + IF--WRITE-7. + MOVE "IF--TEST-7 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-B. + MOVE " UNEQUAL LENGTHS " TO FEATURE. + IF--TEST-8. + IF IF-D22 GREATER THAN IF-D19 PERFORM FAIL ELSE PERFORM PASS. + *> NOTE ALPHANUMERIC GROUP VS ALPHANUMERIC FIELD. + *> NOTE UNEQUAL LENGTHS. + GO TO IF--WRITE-8. + IF--DELETE-8. + PERFORM DE-LETE. + IF--WRITE-8. + MOVE "IF--TEST-8 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-C. + MOVE " POSITIVE " TO FEATURE. + IF--TEST-9. + IF IF-D1 IS NOT POSITIVE PERFORM PASS ELSE PERFORM FAIL. + *> NOTE POSITIVE TEST ON ZERO VALUE. + GO TO IF--WRITE-9. + IF--DELETE-9. + PERFORM DE-LETE. + IF--WRITE-9. + MOVE "IF--TEST-9 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-10. + IF IF-D8 POSITIVE PERFORM PASS ELSE PERFORM FAIL. + *> NOTE POSITIVE TEST ON UNSIGNED VALUE. + GO TO IF--WRITE-10. + IF--DELETE-10. + PERFORM DE-LETE. + IF--WRITE-10. + MOVE "IF--TEST-10" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-11. + IF IF-D16 POSITIVE PERFORM PASS ELSE PERFORM FAIL. + *> NOTE POSITIVE TEST ON SCALED VALUE. + GO TO IF--WRITE-11. + IF--DELETE-11. + PERFORM DE-LETE. + IF--WRITE-11. + MOVE "IF--TEST-11" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-12. + IF IF-D27 POSITIVE PERFORM PASS ELSE PERFORM FAIL. + *> NOTE POSITIVE TEST ON COMPUTATIONAL FIELD. + GO TO IF--WRITE-12. + IF--DELETE-12. + PERFORM DE-LETE. + IF--WRITE-12. + MOVE "IF--TEST-12" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-13. + IF IF-D28 POSITIVE PERFORM PASS ELSE PERFORM FAIL. + *> NOTE POSITIVE TEST ON NUMERIC DISPLAY IFELD. + GO TO IF--WRITE-13. + IF--DELETE-13. + PERFORM DE-LETE. + IF--WRITE-13. + MOVE "IF--TEST-13" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-14. + IF IF-D31 IS POSITIVE PERFORM FAIL ELSE PERFORM PASS. + *> NOTE POSITIVE TEST ON NEGATIVE FIELD. + GO TO IF--WRITE-14. + IF--DELETE-14. + PERFORM DE-LETE. + IF--WRITE-14. + MOVE "IF--TEST-14" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-15. + IF IF-D31 IS NOT POSITIVE PERFORM PASS ELSE PERFORM FAIL. + *> NOTE NOT POSITIVE TEST ON NEGATIVE VALUE. + GO TO IF--WRITE-15. + IF--DELETE-15. + PERFORM DE-LETE. + IF--WRITE-15. + MOVE "IF--TEST-15" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-16. + IF IF-D28 IS NOT POSITIVE PERFORM FAIL ELSE PERFORM PASS. + *> NOTE NOT POSITIVE TEST ON UNSIGNED FIELD. + GO TO IF--WRITE-16. + IF--DELETE-16. + PERFORM DE-LETE. + IF--WRITE-16. + MOVE "IF--TEST-16" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-D. + MOVE " NEGATIVE " TO FEATURE. + IF--TEST-17. + IF IF-D31 IS NEGATIVE PERFORM PASS ELSE PERFORM FAIL. + *> NOTE NEGATIVE TEST ON NEGATIVE VALUE. + GO TO IF--WRITE-17. + IF--DELETE-17. + PERFORM DE-LETE. + IF--WRITE-17. + MOVE "IF--TEST-17" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-18. + IF IF-D31 IS NOT NEGATIVE PERFORM FAIL ELSE PERFORM PASS. + *> NOTE NOT NEGATIVE TEST ON NEGATIVE VALUE. + GO TO IF--WRITE-18. + IF--DELETE-18. + PERFORM DE-LETE. + IF--WRITE-18. + MOVE "IF--TEST-18" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-19. + IF IF-D16 NOT NEGATIVE PERFORM PASS ELSE PERFORM FAIL. + *> NOTE NOT NEGATIVE TEST ON UNSIGNED FIELD. + GO TO IF--WRITE-19. + IF--DELETE-19. + PERFORM DE-LETE. + IF--WRITE-19. + MOVE "IF--TEST-19" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-E. + MOVE " ZERO " TO FEATURE. + IF--TEST-20. + IF IF-D1 IS ZERO PERFORM PASS ELSE PERFORM FAIL. + *> NOTE ZERO TEST ON ZERO VALUE. + GO TO IF--WRITE-20. + IF--DELETE-20. + PERFORM DE-LETE. + IF--WRITE-20. + MOVE "IF--TEST-20" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-21. + IF IF-D10 NOT EQUAL TO ZERO + PERFORM PASS ELSE + MOVE IF-D10 TO COMPUTED-A + MOVE ZERO TO CORRECT-N + PERFORM FAIL. + *> NOTE NOT EQUAL TO ZERO TEST ON NON-ZERO VALUE. + GO TO IF--WRITE-21. + IF--DELETE-21. + PERFORM DE-LETE. + IF--WRITE-21. + MOVE "IF--TEST-21" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-F. + MOVE " CONDITION-NAMES " TO FEATURE. + IF--TEST-22. + MOVE 1 TO IF-D32. IF A OF IF-D32 PERFORM PASS + ELSE PERFORM FAIL. + *> NOTE TEST OF SIGNED NUMERIC FIELD FOR SINGLE VALUE. + GO TO IF--WRITE-22. + IF--DELETE-22. + PERFORM DE-LETE. + IF--WRITE-22. + MOVE "IF--TEST-22" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-23. + MOVE 3 TO IF-D32. IF B OF IF-D32 PERFORM PASS + ELSE PERFORM FAIL. + *> NOTE TEST OF SIGNED NUMERIC FIELD FOR MULTIPLE VALUES. + GO TO IF--WRITE-23. + IF--DELETE-23. + PERFORM DE-LETE. + IF--WRITE-23. + MOVE "IF--TEST-23" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-24. + MOVE ZERO TO IF-D32. IF C OF IF-D32 PERFORM PASS + ELSE PERFORM FAIL. + *> NOTE TEST OF SIGNED NUMERIC FIELD FOR FIG-ZERO. + GO TO IF--WRITE-24. + IF--DELETE-24. + PERFORM DE-LETE. + IF--WRITE-24. + MOVE "IF--TEST-24" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-25. + MOVE +12.34 TO IF-D32. + IF D OF IF-D32 PERFORM PASS ELSE PERFORM FAIL. + *> NOTE SIGNED CONDITION-NAME. + GO TO IF--WRITE-25. + IF--DELETE-25. + PERFORM DE-LETE. + IF--WRITE-25. + MOVE "IF--TEST-25" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-26. + MOVE QUOTE TO IF-D33. IF B OF IF-D33 AND NOT B OF IF-D32 + PERFORM PASS ELSE PERFORM FAIL. + *> NOTE TEST OF ALPHANUMERIC FIELD FOR FIG-QUOTES. + GO TO IF--WRITE-26. + IF--DELETE-26. + PERFORM DE-LETE. + IF--WRITE-26. + MOVE "IF--TEST-26" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-27. + MOVE SPACE TO IF-D33. IF C OF IF-D33 PERFORM PASS + ELSE PERFORM FAIL. + *> NOTE TEST OF ALPHANUMERIC FIELD FOR FIG-SPACES. + GO TO IF--WRITE-27. + IF--DELETE-27. + PERFORM DE-LETE. + IF--WRITE-27. + MOVE "IF--TEST-27" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-28. + MOVE "BACB" TO IF-D33. IF D OF IF-D33 PERFORM PASS + ELSE PERFORM FAIL. + *> NOTE TEST OF ALPHANUMERIC FIELD FOR ALL ANY LITERAL. + GO TO IF--WRITE-28. + IF--DELETE-28. + PERFORM DE-LETE. + IF--WRITE-28. + MOVE "IF--TEST-28" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-29. + IF NOT B OF IF-D34 PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-29. + IF--DELETE-29. + PERFORM DE-LETE. + IF--WRITE-29. + MOVE "IF--TEST-29" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-30. + MOVE "ABCD" TO IF-D35. + IF A2 AND B2 PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-30. + IF--DELETE-30. + PERFORM DE-LETE. + IF--WRITE-30. + MOVE "IF--TEST-30" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-31. + MOVE .21 TO IF-D32. + IF E PERFORM PASS ELSE PERFORM FAIL. + *> NOTE TESTS VALUE SERIES. + GO TO IF--WRITE-31. + IF--DELETE-31. + PERFORM DE-LETE. + IF--WRITE-31. + MOVE "IF--TEST-31" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-32. + MOVE 1279.99 TO IF-D32. + IF F PERFORM PASS ELSE PERFORM FAIL. + *> NOTE TESTS VALUE RANGE SERIES. + GO TO IF--WRITE-32. + IF--DELETE-32. + PERFORM DE-LETE. + IF--WRITE-32. + MOVE "IF--TEST-32" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-33. + MOVE -4321.88 TO IF-D32. + IF G PERFORM PASS ELSE PERFORM FAIL. + *> NOTE TESTS VALUE SERIES RANGE SERIES. + GO TO IF--WRITE-33. + IF--DELETE-33. + PERFORM DE-LETE. + IF--WRITE-33. + MOVE "IF--TEST-33" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-G. + PERFORM END-ROUTINE. + MOVE SPACES TO FEATURE. + MOVE "THE FOLLOWING TESTS USE ARITHMETIC-EXPRESSIONS" + TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE "IN RELATION OR SIGN CONDITIONS." + TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE " EQUAL " TO FEATURE. + IF--TEST-34. + IF 1 + (TWO * 3) EQUAL TO (TWO * 3) + 1 + PERFORM PASS + ELSE + PERFORM FAIL. + GO TO IF--WRITE-34. + IF--DELETE-34. + PERFORM DE-LETE. + IF--WRITE-34. + MOVE "IF--TEST-34" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-35. + IF 9 + TWO + 2 * 3 EQUAL TO 2 * 3 + TWO + 9 + PERFORM PASS + ELSE + PERFORM FAIL. + GO TO IF--WRITE-35. + IF--DELETE-35. + PERFORM DE-LETE. + IF--WRITE-35. + MOVE "IF--TEST-35" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-36. + IF NINE ** 2 EQUAL TO 9 ** 2 + PERFORM PASS + ELSE + PERFORM FAIL. + GO TO IF--WRITE-36. + IF--DELETE-36. + PERFORM DE-LETE. + IF--WRITE-36. + MOVE "IF--TEST-36" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-37. + IF 100 + (TWENTY + 3.4) + .05 EQUAL TO + .05 + (100 + TWENTY) + 3.4 + PERFORM PASS + ELSE + PERFORM FAIL. + GO TO IF--WRITE-37. + IF--DELETE-37. + PERFORM DE-LETE. + IF--WRITE-37. + MOVE "IF--TEST-37" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-H. + MOVE " GREATER " TO FEATURE. + IF--TEST-38. + IF NINE * 8 IS GREATER THAN 9 * 7 + 8 PERFORM PASS + ELSE PERFORM FAIL. + GO TO IF--WRITE-38. + IF--DELETE-38. + PERFORM DE-LETE. + IF--WRITE-38. + MOVE "IF--TEST-38" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-39. + IF 10 ** 2 + 25 GREATER THAN IF-D14 PERFORM PASS ELSE + PERFORM FAIL. + GO TO IF--WRITE-39. + IF--DELETE-39. + PERFORM DE-LETE. + IF--WRITE-39. + MOVE "IF--TEST-39" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-40. + IF 1000 GREATER THAN TEN ** 3 - 1 PERFORM PASS ELSE PERFORM + FAIL. + GO TO IF--WRITE-40. + IF--DELETE-40. + PERFORM DE-LETE. + IF--WRITE-40. + MOVE "IF--TEST-40" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-I. + MOVE " LESS " TO FEATURE. + IF--TEST-41. + IF 1000 LESS THAN 10 ** THREE + 1 PERFORM PASS ELSE + PERFORM FAIL. + GO TO IF--WRITE-41. + IF--DELETE-41. + PERFORM DE-LETE. + IF--WRITE-41. + MOVE "IF--TEST-41" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-42. + IF 10 ** 2 + 20 LESS THAN IF-D14 PERFORM PASS ELSE + PERFORM FAIL. + GO TO IF--WRITE-42. + IF--DELETE-42. + PERFORM DE-LETE. + IF--WRITE-42. + MOVE "IF--TEST-42" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-43. + IF 9 * 8 LESS THAN 9 * 7 + TEN PERFORM PASS ELSE PERFORM + FAIL. + GO TO IF--WRITE-43. + IF--DELETE-43. + PERFORM DE-LETE. + IF--WRITE-43. + MOVE "IF--TEST-43" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-44-45. + MOVE SPACES TO TEST-RESULTS. + MOVE "NOT USED" TO RE-MARK. + MOVE "IF--TEST-44" TO PAR-NAME. + PERFORM PRINT-DETAIL. + MOVE "NOT USED" TO RE-MARK. + MOVE "IF--TEST-45" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-J. + MOVE " NOT EQUAL " TO FEATURE. + PERFORM PRINT-DETAIL. + IF--TEST-46. + IF NINE * 9 - 7 * SEVEN NOT EQUAL - (SEVEN * 7) + 9 * NINE + PERFORM FAIL + ELSE + PERFORM PASS. + + GO TO IF--WRITE-46. + IF--DELETE-46. + PERFORM DE-LETE. + IF--WRITE-46. + MOVE "IF--TEST-46" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-47. + IF IF-D14 - IF-D7 NOT EQUAL - IF-D7 + IF-D14 + PERFORM FAIL ELSE PERFORM PASS. + GO TO IF--WRITE-47. + IF--DELETE-47. + PERFORM DE-LETE. + IF--WRITE-47. + MOVE "IF--TEST-47" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-K. + MOVE " NOT GREATER " TO FEATURE. + IF--TEST-48. + IF NINE * 8 IS NOT GREATER THAN 9 * SEVEN + 8 THEN + PERFORM FAIL + ELSE + PERFORM PASS. + GO TO IF--WRITE-48. + IF--DELETE-48. + PERFORM DE-LETE. + IF--WRITE-48. + MOVE "IF--TEST-48" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-49. + IF 10 ** 2 + 25 NOT GREATER THAN IF-D14 PERFORM FAIL ELSE + PERFORM PASS. + GO TO IF--WRITE-49. + IF--DELETE-49. + PERFORM DE-LETE. + IF--WRITE-49. + MOVE "IF--TEST-49" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-50. + IF 1000 NOT GREATER THAN 10 ** THREE - 1 PERFORM FAIL ELSE + PERFORM PASS. + GO TO IF--WRITE-50. + IF--DELETE-50. + PERFORM DE-LETE. + IF--WRITE-50. + MOVE "IF--TEST-50" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-L. + MOVE " NOT LESS " TO FEATURE. + IF--TEST-51. + IF 1000 NOT LESS THAN TEN ** 3 + 1 PERFORM FAIL ELSE + PERFORM PASS. + GO TO IF--WRITE-51. + IF--DELETE-51. + PERFORM DE-LETE. + IF--WRITE-51. + MOVE "IF--TEST-51" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-52. + IF 10 ** 2 + 20 NOT LESS THAN IF-D14 PERFORM FAIL ELSE + PERFORM PASS. + GO TO IF--WRITE-52. + IF--DELETE-52. + PERFORM DE-LETE. + IF--WRITE-52. + MOVE "IF--TEST-52" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-53. + IF NINE * 8 NOT LESS THAN 9 * 7 + TEN PERFORM FAIL ELSE + PERFORM PASS. + GO TO IF--WRITE-53. + IF--DELETE-53. + PERFORM DE-LETE. + IF--WRITE-53. + MOVE "IF--TEST-53" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-M. + MOVE " POS, NEG, ZERO " TO FEATURE. + IF--TEST-54. + IF 9 ** TWO + (180 - 90) IS NOT POSITIVE PERFORM FAIL ELSE + PERFORM PASS. + GO TO IF--WRITE-54. + IF--DELETE-54. + PERFORM DE-LETE. + IF--WRITE-54. + MOVE "IF--TEST-54" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-55. + IF NINE ** 2 + (90 - 180) IS POSITIVE PERFORM FAIL ELSE + PERFORM PASS. + GO TO IF--WRITE-55. + IF--DELETE-55. + PERFORM DE-LETE. + IF--WRITE-55. + MOVE "IF--TEST-55" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-56. + IF 8 * EIGHT - 8 * 8 NOT ZERO + PERFORM FAIL ELSE PERFORM PASS. + GO TO IF--WRITE-56. + IF--DELETE-56. + PERFORM DE-LETE. + IF--WRITE-56. + MOVE "IF--TEST-56" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-57-58. + MOVE SPACES TO TEST-RESULTS. + MOVE "NOT USED" TO RE-MARK. + MOVE "IF--TEST-57" TO PAR-NAME. + PERFORM PRINT-DETAIL. + MOVE "NOT USED" TO RE-MARK. + MOVE "IF--TEST-58" TO PAR-NAME. + PERFORM PRINT-DETAIL. + MOVE " POS, NEG, ZERO " TO FEATURE. + IF--TEST-59. + IF 10 ** THREE + 99 - (1500 - 400) IS NEGATIVE PERFORM PASS + ELSE PERFORM FAIL. + GO TO IF--WRITE-59. + IF--DELETE-59. + PERFORM DE-LETE. + IF--WRITE-59. + MOVE "IF--TEST-59" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-60. + IF TEN ** 3 + 99 - (1500 - 400) IS NOT POSITIVE PERFORM PASS + ELSE PERFORM FAIL. + GO TO IF--WRITE-60. + IF--DELETE-60. + PERFORM DE-LETE. + IF--WRITE-60. + MOVE "IF--TEST-60" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-61. + IF 8 * EIGHT - 8 * 8 IS ZERO + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-61. + IF--DELETE-61. + PERFORM DE-LETE. + IF--WRITE-61. + MOVE "IF--TEST-61" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-62. + MOVE SPACES TO TEST-RESULTS. + MOVE "NOT USED" TO RE-MARK. + MOVE "IF--TEST-62" TO PAR-NAME. + PERFORM PRINT-DETAIL. + MOVE "POS, NEG, ZERO " TO FEATURE. + IF--TEST-63. + IF 10 ** THREE + 99 - (1500 - 400) IS NOT NEGATIVE + PERFORM FAIL ELSE PERFORM PASS. + GO TO IF--WRITE-63. + IF--DELETE-63. + PERFORM DE-LETE. + IF--WRITE-63. + MOVE "IF--TEST-63" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-N. + MOVE " SYMBOLS > < = " TO FEATURE. + IF--TEST-64. + IF TEN * 10 - 10 * 10 = - TEN * 10 + 10 * 10 + PERFORM PASS + ELSE + PERFORM FAIL. + GO TO IF--WRITE-64. + IF--DELETE-64. + PERFORM DE-LETE. + IF--WRITE-64. + MOVE "IF--TEST-64" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-65. + IF NINE * 8 > 9 * 7 + 8 PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-65. + IF--DELETE-65. + PERFORM DE-LETE. + IF--WRITE-65. + MOVE "IF--TEST-65" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-66. + IF 1000 < 10 ** THREE + 1 PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-66. + IF--DELETE-66. + PERFORM DE-LETE. + IF--WRITE-66. + MOVE "IF--TEST-66" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-67. + IF 100 + TWENTY + 3.4 + .05 NOT = 100 + TWENTY + 3.4 + 0.6 + PERFORM PASS + ELSE + PERFORM FAIL. + GO TO IF--WRITE-67. + IF--DELETE-67. + PERFORM DE-LETE. + IF--WRITE-67. + MOVE "IF--TEST-67" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-68. + IF NINE * 8 NOT > 9 * 7 + 8 PERFORM FAIL ELSE PERFORM PASS. + GO TO IF--WRITE-68. + IF--DELETE-68. + PERFORM DE-LETE. + IF--WRITE-68. + MOVE "IF--TEST-68" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-69. + IF 1000 NOT < 10 ** THREE + 1 PERFORM FAIL ELSE PERFORM PASS. + GO TO IF--WRITE-69. + IF--DELETE-69. + PERFORM DE-LETE. + IF--WRITE-69. + MOVE "IF--TEST-69" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-70. + MOVE SPACES TO TEST-RESULTS. + MOVE "NOT USED" TO RE-MARK. + MOVE "IF--TEST-70" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-N1. + PERFORM END-ROUTINE. + MOVE SPACES TO FEATURE. + MOVE "THE FOLLOWING TESTS COMBINATIONS OF" + TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE "RELATIONAL AND SIZE ERROR CONDITIONS." + TO RE-MARK. + PERFORM PRINT-DETAIL. + IF--TEST-71. + MOVE "X" TO WRK-XN-00001. + MOVE ZERO TO WRK-DS-01V00. + IF WRK-XN-00001 IS EQUAL TO "X" + MOVE "Z" TO WRK-XN-00001 + ADD 1 TO WRK-DS-01V00 ON SIZE ERROR + MOVE "Y" TO WRK-XN-00001 + ELSE + ADD 2 TO WRK-DS-01V00 ON SIZE ERROR + MOVE "W" TO WRK-XN-00001. + IF WRK-XN-00001 EQUAL TO "Z" AND + WRK-DS-01V00 EQUAL TO 1 + PERFORM PASS ELSE PERFORM FAIL. + *> NOTE COMBINATION OF RELATIONAL AND SIZE ERROR CONDITIONS. + GO TO IF--WRITE-71. + IF--DELETE-71. + PERFORM DE-LETE. + IF--WRITE-71. + MOVE " INCL SIZE ERROR" TO FEATURE. + MOVE "IF--TEST-71" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-O. + MOVE " UNEQUAL LENGTHS" TO FEATURE. + IF--TEST-73. + MOVE "X" TO WRK-XN-00001. + MOVE "X " TO WRK-XN-00005. + IF WRK-XN-00001 IS EQUAL TO WRK-XN-00005 + PERFORM PASS ELSE PERFORM FAIL. + *> NOTE EQUAL QUANTITIES IN UNEQUAL LENGTH FIELDS. + GO TO IF--WRITE-73. + IF--DELETE-73. + PERFORM DE-LETE. + IF--WRITE-73. + MOVE "IF--TEST-73" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-74. + MOVE "X" TO WRK-XN-00001. + MOVE "Y " TO WRK-XN-00005. + IF WRK-XN-00001 IS NOT EQUAL TO WRK-XN-00005 + PERFORM PASS ELSE PERFORM FAIL. + *> NOTE UNEQUAL QUANTITIES IN UNEQUAL LENGTH FIELDS. + GO TO IF--WRITE-74. + IF--DELETE-74. + PERFORM DE-LETE. + IF--WRITE-74. + MOVE "IF--TEST-74" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-75. + MOVE "X" TO WRK-XN-00001. + MOVE "X X" TO WRK-XN-00005. + IF WRK-XN-00001 IS NOT EQUAL TO WRK-XN-00005 + PERFORM PASS ELSE PERFORM FAIL. + *> NOTE UNEQUAL QUANTITIES IN UNEQUAL LENGTH FIELDS. + GO TO IF--WRITE-75. + IF--DELETE-75. + PERFORM DE-LETE. + IF--WRITE-75. + MOVE "IF--TEST-75" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-P. + MOVE " UNEQUAL LENGTHS" TO FEATURE. + IF--TEST-77. + IF IF-D37 NOT EQUAL TO IF-D21 + PERFORM PASS GO TO IF--WRITE-77. + *> NOTE NUMERIC VS GROUP COMPARISON, UNEQUAL LENGTHS. + GO TO IF--FAIL-77. + IF--DELETE-77. + PERFORM DE-LETE. + GO TO IF--WRITE-11. + IF--FAIL-77. + PERFORM FAIL. + MOVE "IF-D37 SHOULD PAD ON RIGHT" TO RE-MARK. + IF--WRITE-77. + MOVE "IF--TEST-77" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-78. + IF IF-D37 EQUAL TO IF-D38 + PERFORM PASS GO TO IF--WRITE-78. + *> NOTE NUMERIC VS ALPHANUMERIC COMPARISON, UNEQUAL LENGTHS. + GO TO IF--FAIL-78. + IF--DELETE-78. + PERFORM DE-LETE. + GO TO IF--WRITE-78. + IF--FAIL-78. + PERFORM FAIL. + MOVE "IF-D37 SHOULD PAD ON RIGHT" TO RE-MARK. + IF--WRITE-78. + MOVE "IF--TEST-78" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-79. + MOVE ZERO TO IF-D10. + IF D3 OF IF-D10 EQUAL TO "00000000" + PERFORM PASS + GO TO IF-WRITE-79. + MOVE D3 IN IF-D10 TO COMPUTED-A. + MOVE "00000000" TO CORRECT-A. + PERFORM FAIL. + GO TO IF-WRITE-79. + IF-DELETE-79. + PERFORM DE-LETE. + IF-WRITE-79. + MOVE "QUALIFIED GROUP " TO FEATURE. + MOVE "IF--TEST-79 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-80. + PERFORM END-ROUTINE. + MOVE SPACES TO FEATURE. + MOVE "THESE SPECIAL CONDITION- " TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE "NAME TESTS VERIFY THE " TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE "ABILITY OF THE COMPILER TO " TO RE-MARK. + PERFORM PRINT-DETAIL. + MOVE "ACCEPT SUBSCRIPTED 88 LEVEL" TO RE-MARK. + PERFORM PRINT-DETAIL. + *> NOTE ******* ****** ********* + *> ***** A NOTE AS THE FIRST STATEMENT IN THIS ****** + *> PARAGRAPH WILL BYPASS ALL THE SPECIAL ***** + *> CONDITION-NAME TESTS, BUT A NOTE STATEMENT + *> MIGHT NEED TO BE INSERTED IN EACH TEST + *> SO THE SYNTAX WOULD BE IGNORED BY THE COMPILER. + MOVE "OCCURS WITH 88 LEVEL" TO FEATURE. + MOVE 123 TO TABLE-80. + GO TO IF--TEST-80. + IF-DELETE-80. + PERFORM DE-LETE. + MOVE "IF--TEST-80" TO PAR-NAME. + MOVE "TEST-80 THRU 85 DELETED " TO RE-MARK. + PERFORM PRINT-DETAIL. + ADD 5 TO DELETE-COUNTER. + GO TO IF--TEST-86. + IF--TEST-80. + IF A80 (2) + PERFORM PASS ELSE + PERFORM FAIL. + *> NOTE ELMT(2) SHOULD CONTAIN A 2 WHICH IS CONTAINED IN + *> THE VALUE OF THE A80 88 LEVEL. + GO TO IF-WRITE-80. + IF--DELETE-80. + PERFORM DE-LETE. + IF-WRITE-80. + MOVE "IF--TEST-80" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-81. + IF C80 (1) + PERFORM FAIL ELSE + PERFORM PASS. + *> NOTE ELMT(1) SHOULD CONTAIN A 1 WHICH IS NOT CONTAINED + *> IN THE VALUE OF THE C80 88 LEVEL. + GO TO IF-WRITE-81. + IF-DELETE-81. + PERFORM DE-LETE. + IF-WRITE-81. + MOVE "IF--TEST-81" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-82. + IF B80 (3) + PERFORM FAIL ELSE + PERFORM PASS. + *> NOTE ELMT(3) SHOULD CONTAIN A 3 WHICH IS NOT CONTAINED + *> IN THE VALUE OF THE B80 88 LEVEL. + GO TO IF-WRITE-82. + IF-DELETE-82. + PERFORM DE-LETE. + IF-WRITE-82. + MOVE "IF--TEST-82" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-83. + IF NOT A80 OF TABLE-80 (3) + PERFORM FAIL ELSE + PERFORM PASS. + *> NOTE ELMT(3) SHOULD CONTAIN A 3 BUT THE NOT CONDITION + *> SHOULD CAUSE THE TEST TO FAIL EVEN THOUGH THE A80 + *> VALUE INCLUDES THE VALUE 3. + GO TO IF-WRITE-83. + IF-DELETE-83. + PERFORM DE-LETE. + IF-WRITE-83. + MOVE "IF--TEST-83" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-84. + IF NOT B80 (1) + PERFORM PASS ELSE + PERFORM FAIL. + *> NOTE ELMT(1) CONTAINS A 1 AND THE VALUE OF B80 IS 8 + *> SO, SAYING NOT 8 IS TRUE. + GO TO IF-WRITE-84. + IF-DELETE-84. + PERFORM DE-LETE. + IF-WRITE-84. + MOVE "IF--TEST-84" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-85. + IF C80 OF TABLE-80 (2) + PERFORM FAIL ELSE + PERFORM PASS. + *> NOTE ELMT(2) IS 2 AND THE VALUES OF C80 DO NOT CONTAIN A 2. + GO TO IF-WRITE-85. + IF-DELETE-85. + PERFORM DE-LETE. + IF-WRITE-85. + MOVE "IF--TEST-85" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-86. + IF A86 + PERFORM FAIL ELSE + PERFORM PASS. + *> NOTE A86 (ABC ) SHOULD NOT EQUAL TABLE-86 (ABCABC). + GO TO IF-WRITE-86. + IF-DELETE-86. + PERFORM DE-LETE. + IF-WRITE-86. + MOVE "IF--TEST-86" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-87. + IF NOT B86 + PERFORM FAIL ELSE + PERFORM PASS. + *> NOTE B86 (ABCABC) SHOULD EQUAL TABLE-86 (ABCABC) THUS + *> FAILING THE TEST. + GO TO IF-WRITE-87. + IF-DELETE-87. + PERFORM DE-LETE. + IF-WRITE-87. + MOVE "IF--TEST-87" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-88. + MOVE SPACES TO DATANAME-86. + IF C86 + PERFORM PASS ELSE + PERFORM FAIL. + *> NOTE TABLE-86 ( ABC) SHOULD EQUAL C86 ( ABC). + GO TO IF-WRITE-88. + IF-DELETE-88. + PERFORM DE-LETE. + IF-WRITE-88. + MOVE "IF--TEST-88" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-R. + MOVE "FIGCON < = > D-NAME" TO FEATURE. + IF--TEST-89. + IF ZEROS NOT < LOW-VAL + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-89. + IF--DELETE-89. + PERFORM DE-LETE. + IF--WRITE-89. + MOVE "IF--TEST-89 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-90. + IF ZEROS < ONE23 + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-90. + IF--DELETE-90. + PERFORM DE-LETE. + IF--WRITE-90. + MOVE "IF--TEST-90 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-91. + IF ZEROS = ZERO-C + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-91. + IF--DELETE-91. + PERFORM DE-LETE. + IF--WRITE-91. + MOVE "IF--TEST-91 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-92. + IF ZEROS NOT = ZERO-D + PERFORM FAIL ELSE PERFORM PASS. + GO TO IF--WRITE-92. + IF--DELETE-92. + PERFORM DE-LETE. + IF--WRITE-92. + MOVE "IF--TEST-92 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-93. + IF SPACES = SPACE-X + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-93. + IF--DELETE-93. + PERFORM DE-LETE. + IF--WRITE-93. + MOVE "IF--TEST-93 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-94. + IF SPACES NOT = QUOTE-X + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-94. + IF--DELETE-94. + PERFORM DE-LETE. + IF--WRITE-94. + MOVE "IF--TEST-94 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-95. + IF SPACES > ABC OR < ABC + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-95. + IF--DELETE-95. + PERFORM DE-LETE. + IF--WRITE-95. + MOVE "IF--TEST-95 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-96. + IF QUOTES NOT > QUOTE-X + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-96. + IF--DELETE-96. + PERFORM DE-LETE. + IF--WRITE-96. + MOVE "IF--TEST-96 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-97. + IF QUOTES NOT = ZERO-D + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-97. + IF--DELETE-97. + PERFORM DE-LETE. + IF--WRITE-97. + MOVE "IF--TEST-97 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-98. + IF HIGH-VALUES > LOW-VAL + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-98. + IF--DELETE-98. + PERFORM DE-LETE. + IF--WRITE-98. + MOVE "IF--TEST-98 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-99. + IF HIGH-VALUES > ABC + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-99. + IF--DELETE-99. + PERFORM DE-LETE. + IF--WRITE-99. + MOVE "IF--TEST-99 " TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-100. + IF HIGH-VALUES NOT > ONE23 + PERFORM FAIL ELSE PERFORM PASS. + GO TO IF--WRITE-100. + IF--DELETE-100. + PERFORM DE-LETE. + IF--WRITE-100. + MOVE "IF--TEST-100" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-101. + IF HIGH-VALUES = ZERO-D + PERFORM FAIL ELSE PERFORM PASS. + GO TO IF--WRITE-101. + IF--DELETE-101. + PERFORM DE-LETE. + IF--WRITE-101. + MOVE "IF--TEST-101" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-102. + IF LOW-VALUES = LOW-VAL + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-102. + IF--DELETE-102. + PERFORM DE-LETE. + IF--WRITE-102. + MOVE "IF--TEST-102" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-103. + IF LOW-VALUES < ABC + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-103. + IF--DELETE-103. + PERFORM DE-LETE. + IF--WRITE-103. + MOVE "IF--TEST-103" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-104. + IF ALL "00" < ONE23 + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-104. + IF--DELETE-104. + PERFORM DE-LETE. + IF--WRITE-104. + MOVE "IF--TEST-104" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-105. + IF ALL ZEROES = ZERO-D + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-105. + IF--DELETE-105. + PERFORM DE-LETE. + IF--WRITE-105. + MOVE "IF--TEST-105" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-106. + IF ALL "00" NOT > ZERO-D + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-106. + IF--DELETE-106. + PERFORM DE-LETE. + IF--WRITE-106. + MOVE "IF--TEST-106" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-107. + IF ALL "A" = SPACE-X + PERFORM FAIL ELSE PERFORM PASS. + GO TO IF--WRITE-107. + IF--DELETE-107. + PERFORM DE-LETE. + IF--WRITE-107. + MOVE "IF--TEST-107" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-108. + IF ALL "A" > ABC + PERFORM FAIL ELSE PERFORM PASS. + GO TO IF--WRITE-108. + IF--DELETE-108. + PERFORM DE-LETE. + IF--WRITE-108. + MOVE "IF--TEST-108" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-109. + IF IF-D4 ALPHABETIC + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-109. + IF--DELETE-109. + PERFORM DE-LETE. + IF--WRITE-109. + MOVE "CLASS --- ALPHABETIC" TO FEATURE. + MOVE "IF--TEST-109" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-S. + MOVE "SIGN --- ZERO" TO FEATURE. + IF--TEST-110. + IF SMALLEST-VALU GREATER THAN SMALL-VALU + AND IS NOT LESS THAN EVEN-SMALLER OR SMALLER-VALU + MOVE "CONDITION FALSE" TO CORRECT-A + MOVE "CONDITION TRUE " TO COMPUTED-A + PERFORM FAIL + GO TO IF--WRITE-110. + PERFORM PASS. + GO TO IF--WRITE-110. + IF--DELETE-110. + PERFORM DE-LETE. + IF--WRITE-110. + MOVE "IF--TEST-110" TO PAR-NAME. + MOVE "ABBREV CONDITIONS" TO FEATURE. + PERFORM PRINT-DETAIL. + IF--TEST-111. + IF SMALLEST-VALU LESS THAN SMALL-VALU AND + (SMALLEST-VALU GREATER THAN EVEN-SMALLER OR SMALLER-VALU) + PERFORM PASS GO TO IF--WRITE-111. + MOVE "CONDITION TRUE" TO CORRECT-A. + MOVE "CONDITION FALSE" TO COMPUTED-A. + PERFORM FAIL. + GO TO IF--WRITE-111. + IF--DELETE-111. + PERFORM DE-LETE. + IF--WRITE-111. + MOVE "IF--TEST-111" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-112. + IF IF-D40B + PERFORM PASS ELSE PERFORM FAIL. + GO TO IF--WRITE-112. + IF--DELETE-112. + PERFORM DE-LETE. + IF--WRITE-112. + MOVE "CONDITION---NAME" TO FEATURE. + MOVE "IF--TEST-112" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--INIT-T. + MOVE "ABBREV---CONDITION" TO FEATURE. + IF--TEST-113. + IF SMALLEST-VALU LESS THAN SMALL-VALU AND (SMALLEST-VALU NOT + GREATER THAN EVEN-SMALLER OR SMALLER-VALU) + PERFORM PASS + GO TO IF--WRITE-113. + MOVE "CONDITION TRUE" TO CORRECT-A. + MOVE "CONDITION FALSE" TO COMPUTED-A. + PERFORM FAIL. + GO TO IF--WRITE-113. + IF--DELETE-113. + PERFORM DE-LETE. + IF--WRITE-113. + MOVE "IF--TEST-113" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-114. + IF SMALLEST-VALU LESS THAN SMALL-VALU + AND NOT EVEN-SMALLER OR SMALLER-VALU + PERFORM PASS + GO TO IF--WRITE-114 + ELSE + PERFORM FAIL + MOVE "CONDITION FALSE" TO CORRECT-A + MOVE "CONDITION TRUE" TO COMPUTED-A + GO TO IF--WRITE-114. + IF--DELETE-114. + PERFORM DE-LETE. + IF--WRITE-114. + MOVE "IF--TEST-114" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-115. + IF COMP-SGN1 IS POSITIVE + PERFORM PASS + GO TO IF--WRITE-115. + MOVE "POSITIVE EXPECTED" TO CORRECT-A. + MOVE COMP-SGN1 TO COMPUTED-14V4. + PERFORM FAIL. + GO TO IF--WRITE-115. + IF--DELETE-115. + PERFORM DE-LETE. + IF--WRITE-115. + MOVE "POS/NEG SIGN TEST" TO FEATURE. + MOVE "IF--TEST-115" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-116. + IF COMP-SGN2 NOT POSITIVE + MOVE COMP-SGN2 TO COMPUTED-14V4 + MOVE "POSITIVE EXPECTED" TO CORRECT-A + PERFORM FAIL + GO TO IF--WRITE-116. + PERFORM PASS. + GO TO IF--WRITE-116. + IF--DELETE-116. + PERFORM DE-LETE. + IF--WRITE-116. + MOVE "IF--TEST-116" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-117. + IF COMP-SGN3 NOT NEGATIVE + MOVE COMP-SGN3 TO COMPUTED-14V4 + MOVE "NEGATIVE EXPECTED" TO CORRECT-A + PERFORM FAIL + GO TO IF--WRITE-117. + PERFORM PASS. + GO TO IF--WRITE-117. + IF--DELETE-117. + PERFORM DE-LETE. + IF--WRITE-117. + MOVE "IF--TEST-117" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-118. + IF COMP-SGN4 NOT POSITIVE + PERFORM PASS + GO TO IF--WRITE-118. + MOVE COMP-SGN4 TO COMPUTED-14V4. + MOVE "NEGATIVE EXPECTED" TO CORRECT-A. + PERFORM FAIL. + GO TO IF--WRITE-118. + IF--DELETE-118. + PERFORM DE-LETE. + IF--WRITE-118. + MOVE "IF--TEST-118" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-119. + MOVE SPACES TO TEST-RESULTS. + MOVE "NOT USED" TO RE-MARK. + MOVE "IF--TEST-119" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF--TEST-120. + MOVE -10 TO WRK-DS-06V06. + ADD +10 TO WRK-DS-06V06. + IF WRK-DS-06V06 NEGATIVE + PERFORM FAIL-120-121 + MOVE "NEGATIVE ZERO DETECTED" TO RE-MARK + GO TO IF--WRITE-120. + IF WRK-DS-06V06 POSITIVE + PERFORM FAIL-120-121 + MOVE "POSITIVE ZERO DETECTED" TO RE-MARK + GO TO IF--WRITE-120. + IF WRK-DS-06V06 ZERO + PERFORM PASS GO TO IF--WRITE-120. + PERFORM FAIL-120-121. + MOVE "NEITHER POS, NEG, NOR ZERO" TO RE-MARK. + GO TO IF--WRITE-120. + IF--DELETE-120. + PERFORM DE-LETE. + IF--WRITE-120. + MOVE "SIGN TEST ON ZERO" TO FEATURE. + MOVE "IF--TEST-120" TO PAR-NAME. + PERFORM PRINT-DETAIL. + GO TO IF--EXIT-120. + FAIL-120-121. + PERFORM FAIL. + MOVE WRK-DS-06V06 TO COMPUTED-N. + MOVE ZERO TO CORRECT-N. + IF--EXIT-120. + EXIT. + IF--TEST-121. + MOVE 10 TO WRK-DS-06V06. + SUBTRACT 10 FROM WRK-DS-06V06. + IF WRK-DS-06V06 NEGATIVE + PERFORM FAIL-120-121 + MOVE "NEGATIVE ZERO DETECTED" TO RE-MARK + GO TO IF--WRITE-121. + IF WRK-DS-06V06 POSITIVE + PERFORM FAIL-120-121 + MOVE "POSITIVE ZERO DETECTED" TO RE-MARK + GO TO IF--WRITE-121. + + IF WRK-DS-06V06 ZERO + PERFORM PASS GO TO IF--WRITE-121. + PERFORM FAIL-120-121. + MOVE "NEITHER POS, NEG, NOR ZERO" TO RE-MARK. + GO TO IF--WRITE-120. + IF--DELETE-121. + PERFORM DE-LETE. + IF--WRITE-121. + MOVE "IF--TEST-121" TO PAR-NAME. + PERFORM PRINT-DETAIL. + IF-INIT-122. + MOVE "VI-89 6.15" TO ANSI-REFERENCE. + MOVE 1 TO WRK-DU-1V0-1. + MOVE 2 TO WRK-DU-1V0-2. + MOVE 3 TO WRK-DU-1V0-3. + MOVE 0 TO WRK-DU-1V0-4. + IF-TEST-122. + IF NOT (WRK-DU-1V0-1 NOT GREATER WRK-DU-1V0-2 AND + WRK-DU-1V0-3 AND NOT WRK-DU-1V0-4) GO TO BUMMER-122 + ELSE NEXT SENTENCE. + PERFORM PASS. + GO TO IF-WRITE-122. + IF-DELETE-122. + PERFORM DE-LETE. + GO TO IF-WRITE-122. + BUMMER-122. + PERFORM FAIL. + MOVE "RESULT TRUE" TO COMPUTED-A. + MOVE "SHOULD BE FALSE" TO CORRECT-A. + IF-WRITE-122. + MOVE "IF-TEST-122" TO PAR-NAME. + MOVE "ABR. COM. REL. CONDT" TO FEATURE. + PERFORM PRINT-DETAIL. + IF-INIT-123. + MOVE "VI-89 6.15" TO ANSI-REFERENCE. + MOVE 9 TO WRK-DU-1V0-1. + MOVE 8 TO WRK-DU-1V0-2. + MOVE 7 TO WRK-DU-1V0-3. + IF-LOGICAL-CONN-TEST-123. + IF WRK-DU-1V0-1 > WRK-DU-1V0-2 AND NOT < WRK-DU-2V0-1 OR + WRK-DU-2V0-2 OR NOT WRK-DU-2V0-3 AND WRK-DU-1V0-3 + PERFORM PASS + ELSE + PERFORM FAIL MOVE "FALSE RESULT FOUND" TO COMPUTED-A + MOVE "SHOULD BE TRUE" TO CORRECT-A. + GO TO IF-WRITE-123. + IF-DELETE-123. + PERFORM DE-LETE. + IF-WRITE-123. + MOVE "IF-TEST-123" TO PAR-NAME. + MOVE "LOGICAL CONNECTIVES" TO FEATURE. + PERFORM PRINT-DETAIL. + PERFORM END-ROUTINE. + MOVE " COLLATING-AND-ALPHABET-TEST-9 SYNTAX CHECK IN OBJE + - "CT-COMPUTER AND SPECIAL-NAMES" TO TEST-RESULTS. + PERFORM PRINT-DETAIL. + MOVE SPACE TO TEST-RESULTS. + IF-INIT-124. + *> ===--> ARITHMETIC EXPRESSION CONTAINING ZERO <--=== + MOVE "VI-58 6.3.1.5 AND VI-51 6.2" TO ANSI-REFERENCE. + MOVE 4 TO WRK-DU-1V0-1. + MOVE "IF-TEST-124" TO PAR-NAME. + IF-TEST-124. + IF ZERO - WRK-DU-1V0-1 IS NEGATIVE + PERFORM PASS + ELSE + PERFORM FAIL + MOVE "POSITIVE RESULT FOUND" TO COMPUTED-A + MOVE "SHOULD BE NEGATIVE" TO CORRECT-A. + GO TO IF-WRITE-124. + IF-DELETE-124. + PERFORM DE-LETE. + IF-WRITE-124. + MOVE "IF-TEST-124" TO PAR-NAME. + MOVE "LOGICAL CONNECTIVES" TO FEATURE. + PERFORM PRINT-DETAIL. + CCVS-EXIT SECTION. + CCVS-999999. + GO TO CLOSE-FILES. + *>ND-OF,NC250A diff --git a/gcc/cobol/failures/nc250/input.txt b/gcc/cobol/failures/nc250/input.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/gcc/cobol/gcobolio.h b/gcc/cobol/gcobolio.h index 2bf4a4505a62f61d2f9e837a86db86a14c750956..c617008ae1ec211082818437c97500f534ab7016 100644 --- a/gcc/cobol/gcobolio.h +++ b/gcc/cobol/gcobolio.h @@ -46,6 +46,7 @@ typedef struct cblc_field_t { + // This structure must match the code in structs.cc unsigned char *data; // The runtime data. There is no null terminator size_t capacity; // The size of "data" size_t allocated; // The number of bytes available for capacity @@ -87,6 +88,7 @@ enum cblc_file_prior_op_t typedef struct cblc_file_t { + // This structure must match the code in structs.cc char *name; // This is the name of the structure; might be the name of an environment variable char *filename; // The name of the file to be opened FILE *file_pointer; // The FILE *pointer @@ -115,7 +117,8 @@ typedef struct cblc_file_t int flags; // cblc_file_flags_t int recent_char; // This is the most recent char sent to the file int recent_key; - cblc_file_prior_op_t prior_op; + cblc_file_prior_op_t prior_op; // run-time type is INT + int dummy; } cblc_file_t; #endif diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc index a549db5cd8c08f4525c685b4e35109a8b2bd23f5..bdd16530de9c19804ca34c5c6693cfba35c534b8 100644 --- a/gcc/cobol/genapi.cc +++ b/gcc/cobol/genapi.cc @@ -159,8 +159,8 @@ trace1_init() if( first_time ) { first_time = false; - trace_handle = gg_define_variable(INT, vs_static); - trace_indent = gg_define_variable(INT, vs_static); + trace_handle = gg_define_variable(INT, "trace_handle", vs_static); + trace_indent = gg_define_variable(INT, "trace_indent", vs_static); bTRACE1 = getenv("TRACE1") ? getenv("TRACE1") : gv_trace_switch; @@ -5124,12 +5124,15 @@ parser_exit(void) // The byte array to be returned is in returning, which is a local // variable on the stack. We need to make a copy of it to avoid the // error of returning a pointer to data on the stack. + + // Create a buffer that grows in size, as needed, to accommodate the + // data that needs to be returned. + +#pragma warning "Fix me" tree array_type = build_array_type_nelts(UCHAR, current_function->returning->data.capacity); - tree retval = gg_define_variable(array_type, - NULL, - vs_static); + tree retval = gg_define_variable(array_type, vs_static); gg_memcpy(gg_get_address_of(retval), member(current_function->returning->var_decl_node, "data"), member(current_function->returning->var_decl_node, "capacity")); @@ -13398,13 +13401,21 @@ mh_source_is_group( cbl_refer_t &destref, { // We are moving a group to a something. The rule here is just move as // many bytes as you can, and if you need to fill with spaces - refer_fill_dest(destref); refer_fill_source(sourceref); refer_fill_dest(destref); tree tdest = member(destref.refer_decl_node, "qual_data"); tree tsource = member(sourceref.refer_decl_node, "qual_data"); tree dbytes = member(destref.refer_decl_node, "qual_size"); tree sbytes = member(sourceref.refer_decl_node, "qual_size"); + + // gg_printf("mh_source_is_group(): %p/%ld -> %p/%ld (%s)\n", + // tsource, + // sbytes, + // tdest, + // dbytes, + // tsource, + // NULL_TREE); + IF( sbytes, ge_op, dbytes ) { // There are too many source bytes @@ -14021,18 +14032,10 @@ initial_from_float128(cbl_field_t *field, _Float128 value) size_t length = (size_t)field->data.capacity; memset(retval, internal_space, length); raw_to_internal(&retval, &buffer_size, field->data.initial, length); - - if(strlen(field->data.initial)-1 == length && length>1) - { - // This is a VALUE clause with the trailing '!' - memset( retval + length - __gg__squished_characters, - internal_space, - __gg__squished_characters); - } - else if( strlen(field->data.initial) - __gg__squished_characters < length ) + if( strlen(field->data.initial) < length ) { // If this is true, then the initial string must've been Z'xyz' - retval[strlen(field->data.initial)-__gg__squished_characters] = '\0'; + retval[strlen(field->data.initial)] = '\0'; } } retval[field->data.capacity] = '\0'; @@ -14443,7 +14446,7 @@ psa_new_var_decl(cbl_field_t *new_var, const char *external_record_base) else if( new_var->attr & (temporary_e | intermediate_e) ) { static size_t temp_count = 1; - sprintf(base_name, "%s_%zd", "_temporary", temp_count++); + sprintf(base_name, "%s_%zd_%s", "_temporary_", temp_count++, new_var->name); } else { @@ -14917,7 +14920,7 @@ parser_symbol_add(struct cbl_field_t *new_var ) char achDataName[256]; if( *external_record_base ) { - sprintf(achDataName, "..%s_vardata", external_record_base); + sprintf(achDataName, "__%s_vardata", external_record_base); } tree array_type = build_array_type_nelts(UCHAR, new_var->data.capacity); new_var->data_decl_node = gg_define_variable( @@ -14992,7 +14995,9 @@ parser_symbol_add(struct cbl_field_t *new_var ) if( bytes_to_allocate ) { - if( new_var->attr & (temporary_e | intermediate_e) ) + if( new_var->attr & (temporary_e | intermediate_e) + && new_var->type != FldLiteralN + && new_var->type != FldLiteralA ) { // We'll malloc() data in initialize_variable data_area = null_pointer_node; @@ -15001,7 +15006,7 @@ parser_symbol_add(struct cbl_field_t *new_var ) { // We need a unique name for the allocated data for this COBOL variable: char achDataName[256]; - sprintf(achDataName, "..vardata_%lu", sv_data_name_counter++); + sprintf(achDataName, "_%s_data_%lu", new_var->name, sv_data_name_counter++); tree array_type = build_array_type_nelts(UCHAR, bytes_to_allocate); new_var->data_decl_node = gg_define_variable( @@ -15014,8 +15019,6 @@ parser_symbol_add(struct cbl_field_t *new_var ) } } - // This is a true hack. When converting UTF-8 to CP1252, - __gg__squished_characters = 0; new_initial = initial_from_float128(new_var, new_var->data.value); if( new_initial ) { @@ -15028,7 +15031,6 @@ parser_symbol_add(struct cbl_field_t *new_var ) break; default: - __gg__squished_characters = 0; length_of_initial_string = new_var->data.capacity; break; } @@ -15057,25 +15059,16 @@ parser_symbol_add(struct cbl_field_t *new_var ) // new_initial = buffer; // length_of_initial_string = strlen(new_var->data.initial)+1; } - - __gg__squished_characters = 0; } } - if( !(new_var->attr & temporary_e) ) - { - __gg__squished_characters = 0; - } - actual_allocate: - new_var->data.capacity -= __gg__squished_characters; actually_create_the_static_field( new_var, data_area, length_of_initial_string, new_initial, immediate_parent, new_var_decl); - __gg__squished_characters = 0; if( level_88_string ) { diff --git a/gcc/cobol/gengen.cc b/gcc/cobol/gengen.cc index ea413956fee9f695ef2c210de1a46a6ed28d00aa..370ea00abbe3b11559d36be968731d7281356e3f 100644 --- a/gcc/cobol/gengen.cc +++ b/gcc/cobol/gengen.cc @@ -1030,7 +1030,7 @@ gg_declare_variable(tree type_decl, // static variables have to have names: static int counter = 1; char ach[32]; - sprintf(ach, "..unnamed_static_variable_%d", counter++); + sprintf(ach, "__unnamed_static_variable_%d", counter++); var_name = get_identifier(ach); } var_decl = build_decl(UNKNOWN_LOCATION, diff --git a/gcc/cobol/genmath.cc b/gcc/cobol/genmath.cc index e2796172da3ee844a4d68223730301791b57c053..066e2f986f5fe977c11089fad7ebe18cb10fe1e1 100644 --- a/gcc/cobol/genmath.cc +++ b/gcc/cobol/genmath.cc @@ -155,7 +155,7 @@ arithmetic_operation2(size_t nC, cbl_num_result_t *C, cbl_refer_t *results = (cbl_refer_t *)xmalloc((nC+1) * sizeof( cbl_refer_t )); int ncount = 0; - tree rounds = gg_define_variable(build_pointer_type(INT), vs_static); + tree rounds = gg_define_variable(build_pointer_type(INT), vs_stack); gg_assign( rounds, gg_cast(build_pointer_type(INT), gg_malloc((nC+1) * sizeof(int)))); @@ -366,7 +366,7 @@ arithmetic_operation( size_t nC, cbl_num_result_t *C, cbl_refer_t *results = (cbl_refer_t *)xmalloc((nC+1) * sizeof( cbl_refer_t )); int ncount = 0; - tree rounds = gg_define_variable(build_pointer_type(INT), vs_static); + tree rounds = gg_define_variable(build_pointer_type(INT), vs_stack); gg_assign( rounds, gg_cast(build_pointer_type(INT), gg_malloc((nC+1) * sizeof(int)))); diff --git a/gcc/cobol/genutil.cc b/gcc/cobol/genutil.cc index c8b1a32c2dda72fc6f9e64e817584b7ff1d262d0..6e82bb92fdbc2da6f8c767af760754c6fee2e068 100644 --- a/gcc/cobol/genutil.cc +++ b/gcc/cobol/genutil.cc @@ -2423,7 +2423,23 @@ refer_fill_internal(cbl_refer_t &refer, refer_type_t refer_type) { //fprintf(stderr, "refer_fill_internal: %s %s\n", refer.field->name, cbl_field_type_str(refer.field->type)); tree retval = gg_define_int(0); - refer.refer_decl_node = gg_define_variable(cblc_refer_type_node, vs_static); + + static int counter=1; + char ach[128]; + sprintf(ach, + "_%s_field_%d", + refer.field ? refer.field->name : "noname", + counter++); + + //// Trying to switch the next statement to vs_stack rather than vs_static. + //// That's a work in progress; at this time putting these on the stack results + //// in intermittent errors. Apparently such data sometimes, but not always, + //// gets lost before it is used. RJD 2024-04-07 + refer.refer_decl_node = gg_define_variable(cblc_refer_type_node, ach, vs_static); +// refer.refer_decl_node = gg_define_variable(cblc_refer_type_node, ach, vs_stack); + gg_memset(gg_get_address_of(refer.refer_decl_node), + integer_zero_node, + build_int_cst_type(SIZE_T, sizeof(cblc_refer_t))); if( refer.field ) { gg_assign(member(refer.refer_decl_node, "field"), diff --git a/gcc/cobol/libgcobol.h b/gcc/cobol/libgcobol.h index 5ee5c64a5363b81822f613928c4319b22fe868c7..6545c91e66ae05d1a458f3ac3bdb784347ec1cf2 100644 --- a/gcc/cobol/libgcobol.h +++ b/gcc/cobol/libgcobol.h @@ -117,6 +117,7 @@ struct cblc_subscript_t typedef struct cblc_refer_t { + // This structure must match the code in structs.cc cblc_field_t *field; // When flags::VAR_DECL_INT128 is on, this is a pointer to an __int128 unsigned char *qual_data; // As qualified by subscripts or refmods size_t qual_size; // As qualified by refmods or depending_on diff --git a/gcc/cobol/structs.cc b/gcc/cobol/structs.cc index 3f1148dfc5b35c10421661339b2e4f9097dcafd7..d21d32365b8fdebf50678291afbd012339c9cab2 100644 --- a/gcc/cobol/structs.cc +++ b/gcc/cobol/structs.cc @@ -248,10 +248,10 @@ typedef struct cblc_file_t char *name; // This is the name of the structure; might be the name of an environment variable char *filename; // The name of the file to be opened FILE *file_pointer; // The FILE *pointer - cblc_field_t *default_record; // This is needed by EXTFH at file_open time + cblc_field_t *default_record; // The record_area size_t record_area_min; // The size of the smallest 01 record in the FD size_t record_area_max; // The size of the largest 01 record in the FD - cblc_field_t *keys; // For relative and indexed files. The first is the primary key. Null-terminated. + cblc_field_t **keys; // For relative and indexed files. The first is the primary key. Null-terminated. int *key_numbers; // One per key -- each key has a number. This table is key_number + 1 int *uniques; // One per key cblc_field_t *password; // @@ -260,24 +260,27 @@ typedef struct cblc_file_t cblc_field_t *vsam_status; // cblc_field_t *record_length; // supplemental_t *supplemental; // + void *implementation; // reserved for any implementation size_t reserve; // From I-O section RESERVE clause - long prior_read_location; // Needed for DELETE in RELATIVE files in SEQUENTIAL access mode + long prior_read_location; // Location of immediately preceding successful read cbl_file_org_t org; // from ORGANIZATION clause cbl_file_access_t access; // from ACCESS MODE clause int mode_char; // 'r', 'w', '+', or 'a' from FILE OPEN statement int errnum; // most recent errno; can't reuse "errno" as the name - int io_status; // See 2014 standard, section 9.1.12 + file_status_t io_status; // See 2014 standard, section 9.1.12 int padding; // Actually a char int delimiter; // ends a record; defaults to '\n'. int flags; // cblc_file_flags_t int recent_char; // This is the most recent char sent to the file int recent_key; + cblc_file_prior_op_t prior_op; + int dummy // We need an even number of INT } cblc_file_t; */ tree retval = NULL_TREE; retval = gg_get_filelevel_struct_type_decl( "cblc_file_t", - 27, + 30, CHAR_P, "name", CHAR_P, "filename", FILE_P, "file_pointer", @@ -305,7 +308,9 @@ typedef struct cblc_file_t INT, "delimiter", INT, "flags", INT, "recent_char", - INT, "recent_key"); + INT, "recent_key", + INT, "prior_op", + INT, "dummy"); retval = TREE_TYPE(retval); return retval; }