tinycobol/test.code/t20/test20c.cob

226 lines
4.9 KiB
COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. TEST20c.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
* SPECIAL-NAMES.
* DECIMAL-POINT IS PERIOD.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT TEST-FILE-IN1 ASSIGN TO WS-FILENAME-IN1
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT TEST-FILE-IN2 ASSIGN TO WS-FILENAME-IN2
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD TEST-FILE-IN1.
* LABEL RECORDS ARE STANDARD.
01 TEST-RECORD-IN1 PIC X(10).
* 01 TEST-RECORD-IN1.
* 05 FILLER PIC X(10).
FD TEST-FILE-IN2.
* LABEL RECORDS ARE STANDARD.
01 TEST-RECORD-IN2 PIC X(10).
* 01 TEST-RECORD-IN2.
* 05 FILLER PIC X(10).
WORKING-STORAGE SECTION.
01 WS-FILENAME-IN1 PIC X(11) VALUE "TCfile1.txt".
01 WS-FILENAME-IN2 PIC X(11) VALUE "TCfile2.txt".
01 WS-IDX PIC 9(3).
01 WS-IDX1 PIC 9(3).
01 WS-IDX2 PIC 9(3).
* 01 IDX2 PIC 9(3) COMP.
* 01 IDX1 PIC 9(3) COMP.
01 WS-RCODE PIC Z(4)9 VALUE ZERO.
01 EOF-SW1 PIC X(1) VALUE 'N'.
01 WS-REC-COUNTER-IN1 PIC 9(5) VALUE 0.
01 EOF-SW2 PIC X(1) VALUE 'N'.
01 WS-REC-COUNTER-IN2 PIC 9(5) VALUE 0.
* File: TEST-FILE-IN1
01 WS-TABLE1-ENTRIES.
* copy 'TCtable2.cpy'.
* 01 WS-TABLE1 REDEFINES WS-TABLE1-ENTRIES.
05 WS-TABLE1-ENTRY OCCURS 167 TIMES
DESCENDING KEY IS WS-TABLE1-IDX
INDEXED BY IDX1.
10 WS-TABLE1-IDX PIC X(3).
10 WS-TABLE1-DATA PIC X(7).
* File: TEST-FILE-IN2
01 WS-TABLE2-ENTRIES.
* copy 'TCtable3.cpy'.
* 01 WS-TABLE2 REDEFINES WS-TABLE2-ENTRIES.
05 WS-TABLE2-ENTRY OCCURS 167 TIMES
ASCENDING KEY IS WS-TABLE2-IDX
INDEXED BY IDX2.
10 WS-TABLE2-IDX PIC 9(3).
10 WS-TABLE2-DATA PIC X(7).
PROCEDURE DIVISION.
A-000.
PERFORM A-050.
MOVE 1 TO WS-IDX1.
PERFORM A-100.
MOVE 500 TO WS-IDX1.
PERFORM A-100.
MOVE 2 TO WS-IDX1.
PERFORM A-100.
MOVE 479 TO WS-IDX1.
PERFORM A-100.
MOVE 8 TO WS-IDX2.
PERFORM A-200.
MOVE 1 TO WS-IDX2.
PERFORM A-200.
MOVE 136 TO WS-IDX2.
PERFORM A-200.
MOVE 499 TO WS-IDX2.
PERFORM A-200.
MOVE RETURN-CODE TO WS-RCODE.
DISPLAY "WS-RCODE=" WS-RCODE.
STOP RUN.
A-050.
SET IDX1 TO 1.
SET IDX2 TO 1.
OPEN INPUT TEST-FILE-IN1.
PERFORM A-910.
DISPLAY "TEST-RECORD-IN1 (1)=" TEST-RECORD-IN1 ":".
DISPLAY "WS-TABLE1-ENTRY (1)=" WS-TABLE1-ENTRY (1) ":".
PERFORM A-910 UNTIL EOF-SW1 = 'Y'.
CLOSE TEST-FILE-IN1.
DISPLAY "Records read for file " WS-FILENAME-IN1 " is " WS-REC-COUNTER-IN1.
OPEN INPUT TEST-FILE-IN2.
PERFORM A-920.
DISPLAY "TEST-RECORD-IN2 (1)=" TEST-RECORD-IN2 ":".
DISPLAY "WS-TABLE2-ENTRY (1)=" WS-TABLE2-ENTRY (1) ":".
DISPLAY "WS-TABLE2-IDX (1) =" WS-TABLE2-IDX (1) ":".
DISPLAY "WS-TABLE2-DATA (1)=" WS-TABLE2-DATA (1) ":".
PERFORM A-920 UNTIL EOF-SW2 = 'Y'.
CLOSE TEST-FILE-IN2.
DISPLAY "Records read for file " WS-FILENAME-IN2 " is " WS-REC-COUNTER-IN2.
DISPLAY "WS-TABLE2-ENTRY (1)=" WS-TABLE2-ENTRY (1) ":".
DISPLAY "WS-TABLE2-IDX (1) =" WS-TABLE2-IDX (1) ":".
DISPLAY "WS-TABLE2-DATA (1)=" WS-TABLE2-DATA (1) ":".
A-100.
DISPLAY "ENTER A-100".
SEARCH ALL WS-TABLE1-ENTRY
AT END PERFORM A-400
WHEN WS-IDX1 = WS-TABLE1-IDX (IDX1)
PERFORM A-300.
* NEXT SENTENCE.
DISPLAY "EXIT A-100".
A-200.
DISPLAY "ENTER A-200".
SEARCH ALL WS-TABLE2-ENTRY
AT END PERFORM A-600
WHEN WS-IDX2 = WS-TABLE2-IDX (IDX2)
PERFORM A-500.
* NEXT SENTENCE.
DISPLAY "EXIT A-200".
A-300.
DISPLAY "ENTER A-300".
MOVE IDX1 TO WS-RCODE.
DISPLAY "Data WS-IDX1 =" WS-IDX1 " found IDX1=" WS-RCODE " in table WS-TABLE1".
DISPLAY "WS-TABLE1-IDX =" WS-TABLE1-IDX (IDX1) ":".
DISPLAY "WS-TABLE1-DATA =" WS-TABLE1-DATA (IDX1) ":".
DISPLAY "EXIT A-300".
A-400.
DISPLAY "ENTER A-400".
DISPLAY "Data WS-IDX1 =" WS-IDX1 " not found in table WS-TABLE1".
MOVE IDX1 TO WS-RCODE.
DISPLAY "Index max IDX1 =" WS-RCODE.
DISPLAY "EXIT A-400".
A-500.
DISPLAY "ENTER A-500".
MOVE IDX2 TO WS-RCODE.
DISPLAY "Data WS-IDX2 =" WS-IDX2 " found IDX2=" WS-RCODE " in table WS-TABLE2".
DISPLAY "WS-TABLE2-IDX =" WS-TABLE2-IDX (IDX2) ":".
DISPLAY "WS-TABLE2-DATA =" WS-TABLE2-DATA (IDX2) ":".
DISPLAY "EXIT A-500".
A-600.
DISPLAY "ENTER A-600".
DISPLAY "Data WS-IDX2 =" WS-IDX2 " not found in table WS-TABLE2".
MOVE IDX2 TO WS-RCODE.
DISPLAY "Index max IDX2 =" WS-RCODE.
DISPLAY "EXIT A-600".
A-910.
* DISPLAY "ENTER A-910".
READ TEST-FILE-IN1
AT END MOVE 'Y' TO EOF-SW1.
IF EOF-SW1 = 'N'
MOVE TEST-RECORD-IN1 TO WS-TABLE1-ENTRY (IDX1)
SET IDX1 UP BY 1
ADD 1 TO WS-REC-COUNTER-IN1.
* DISPLAY "EXIT A-910".
A-920.
* DISPLAY "ENTER A-920".
READ TEST-FILE-IN2
AT END MOVE 'Y' TO EOF-SW2.
IF EOF-SW2 = 'N'
MOVE TEST-RECORD-IN2 TO WS-TABLE2-ENTRY (IDX2)
SET IDX2 UP BY 1
ADD 1 TO WS-REC-COUNTER-IN2.
* DISPLAY "EXIT A-920".