* $$ JOB JNM=COB05,CLASS=V,DISP=L,PRI=3 * $$ LST CLASS=O,DISP=D,JSEP=0,DEST=(*,BILLB) // JOB COB05 // EXEC LIBR ACC S=TSTLIB.WHB IDENTIFICATION DIVISION. PROGRAM-ID. COB05. AUTHOR. BILL BLASINGIM. REMARKS. THIS PROGRAM READS PC IMAGE UNFORMATTED FILE AND CREATES A FORMATTED KEYED FILE. DATE-WRITTEN. JUL. 06, 1993. DATE-COMPILED. ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SORT-FILE ASSIGN TO SYS001-DA-3380-S-SORTWK1. SELECT VSAM-IN ASSIGN TO SYS010-VSAMIN ORGANIZATION IS INDEXED ACCESS MODE IS SEQUENTIAL RECORD KEY IS VSAM-IN-KEY FILE STATUS IS VSAM-IN-STATUS. SELECT VSAM-OUT ASSIGN TO SYS010-VSAMOUT ORGANIZATION IS INDEXED ACCESS MODE IS SEQUENTIAL RECORD KEY IS VSAM-KEY FILE STATUS IS VSAM-STATUS. DATA DIVISION. FILE SECTION. FD VSAM-IN RECORD CONTAINS 4 TO 2052 CHARACTERS LABEL RECORDS ARE STANDARD. 01 VSAM-IN-RECORD. 05 VSAM-IN-KEY PIC X(04). 05 VSAM-REC-IN PIC X(80). 05 FILLER PIC X(1968). FD VSAM-OUT LABEL RECORDS ARE STANDARD. 01 VSAM-RECORD. 05 VSAM-KEY. 10 VSAM-ACCOUNT PIC X(10). 10 VSAM-SEQUENCE PIC 9(02). 05 VSAM-BYTES PIC 9(6). SD SORT-FILE. 01 SORT-RECORD. 05 SORT-ACCOUNT PIC X(10). 05 SORT-SEQUENCE PIC 9(02). 05 SORT-BYTES PIC X(06). WORKING-STORAGE SECTION. 01 WORK-AREA. 05 VSAM-STATUS PIC 99. 05 VSAM-IN-STATUS PIC 99. 05 PAGE-CNT PIC S9(3) VALUE +0 COMP-3. 05 LINE-CNT PIC S9(3) VALUE +0 COMP-3. 05 KEY-SEQUENCE PIC S9(3) VALUE +0 COMP-3. 05 RECIN-CNT PIC S9(7) VALUE +0 COMP-3. 05 RECOUT-CNT PIC S9(7) VALUE +0 COMP-3. 05 LAST-ACCOUNT PIC X(10). 05 COMP-133 PIC S9(4) COMP VALUE +133. 05 FILLER REDEFINES COMP-133. 10 FILLER PIC X(01). 10 LOWER-E PIC X(01). 05 COMP-168 PIC S9(4) COMP VALUE +168. 05 FILLER REDEFINES COMP-168. 10 FILLER PIC X(01). 10 LOWER-Y PIC X(01). 05 WS-SEARCH. 10 FILLER PIC X(01) VALUE 'K'. 10 LC-E PIC X(01). 10 LC-Y PIC X(01). 10 FILLER PIC X(02) VALUE ': '. 05 HALF-2 PIC S9(4) VALUE +2 COMP. 05 FILLER REDEFINES HALF-2. 10 FILLER PIC X(01). 10 PPT-TYPE PIC X(01). 05 INDEX-1 PIC S9(4) VALUE +0 COMP. 05 FILLER REDEFINES INDEX-1. 10 FILLER PIC X(01). 10 INDEX-VAL PIC X(01). 05 NOF-IND PIC X(01) VALUE 'N'. 88 NOT-ON-FILE VALUE 'Y'. 05 EOF-FLAG PIC X(01) VALUE 'N'. 88 EOF VALUE 'Y'. 05 COUNT-DETAIL. 10 FILLER PIC X(02) VALUE SPACES. 10 COUNT-TYPE PIC X(10) VALUE SPACES. 10 FILLER PIC X(03) VALUE SPACES. 10 COUNT-UNPACK PIC Z9(6) VALUE ZEROES. 05 ERROR-REC. 10 FILLER PIC X(07) VALUE '* VSAM '. 10 ERROR-ACTION PIC X(06) VALUE SPACES. 10 FILLER PIC X(09) VALUE ' ERROR = '. 10 ERROR-NO PIC 99. 10 FILLER PIC X(02) VALUE ' *'. 01 IN-RECORD. 05 FILLER PIC X(15). 05 IN-COLON PIC X(02). 05 IN-ACCOUNT-NO PIC X(10). 05 FILLER PIC X(08). 05 IN-BYTES PIC X(06). PROCEDURE DIVISION. SORT SORT-FILE ASCENDING KEY SORT-ACCOUNT INPUT PROCEDURE SRT-INPUT-PROCEDURE OUTPUT PROCEDURE SRT-OUTPUT-PROCEDURE. GO TO NORMAL-EOJ. SRT-INPUT-PROCEDURE SECTION. OPEN INPUT VSAM-IN. IF VSAM-IN-STATUS NOT = 0 MOVE 'OPEN' TO ERROR-ACTION GO TO ERROR-RTN. MOVE LOW-VALUES TO VSAM-IN-KEY. MOVE LOWER-E TO LC-E. MOVE LOWER-Y TO LC-Y. PERFORM READ-INPUT-RTN THRU READ-INPUT-EXIT UNTIL EOF. END-INPUT SECTION. READ-INPUT-RTN. READ VSAM-IN NEXT AT END MOVE 'Y' TO EOF-FLAG GO TO READ-INPUT-EXIT. MOVE VSAM-REC-IN TO IN-RECORD. IF VSAM-IN-STATUS NOT = 0 MOVE 'WRITE' TO ERROR-ACTION GO TO ERROR-RTN. IF IN-COLON NOT = ': ' GO TO READ-INPUT-RTN. ADD +1 TO RECIN-CNT. MOVE IN-ACCOUNT-NO TO SORT-ACCOUNT. MOVE ZEROES TO VSAM-SEQUENCE. EXAMINE IN-BYTES REPLACING LEADING SPACES BY ZEROES. MOVE IN-BYTES TO SORT-BYTES. RELEASE SORT-RECORD. READ-INPUT-EXIT. EXIT. SRT-OUTPUT-PROCEDURE SECTION. OPEN OUTPUT VSAM-OUT. IF VSAM-STATUS NOT = 0 MOVE 'OPEN' TO ERROR-ACTION GO TO ERROR-RTN. MOVE 'N' TO EOF-FLAG. RETURN SORT-FILE RECORD INTO VSAM-RECORD AT END MOVE 'Y' TO EOF-FLAG. MOVE VSAM-ACCOUNT TO LAST-ACCOUNT. MOVE +0 TO KEY-SEQUENCE. PERFORM WRITE-VSAM-RTN THRU WRITE-VSAM-EXIT UNTIL EOF. END-OUTPUT SECTION. WRITE-VSAM-RTN. * MAKE SURE WE HAVE NO DUPLICATE KEYS IF VSAM-ACCOUNT = LAST-ACCOUNT ADD +1 TO KEY-SEQUENCE ELSE MOVE +1 TO KEY-SEQUENCE. MOVE KEY-SEQUENCE TO VSAM-SEQUENCE. WRITE VSAM-RECORD. IF VSAM-STATUS NOT = 0 MOVE 'WRITE' TO ERROR-ACTION GO TO ERROR-RTN. ADD +1 TO RECOUT-CNT. MOVE VSAM-ACCOUNT TO LAST-ACCOUNT. RETURN SORT-FILE RECORD INTO VSAM-RECORD AT END MOVE 'Y' TO EOF-FLAG. WRITE-VSAM-EXIT. EXIT. ERROR-RTN. * DISPLAY 'ERROR-RTN.'. MOVE VSAM-STATUS TO ERROR-NO. DISPLAY ERROR-REC. NORMAL-EOJ. CLOSE VSAM-IN. IF VSAM-IN-STATUS NOT = 0 MOVE 'CLOSE' TO ERROR-ACTION PERFORM ERROR-RTN. CLOSE VSAM-OUT. IF VSAM-STATUS NOT = 0 MOVE 'CLOSE' TO ERROR-ACTION PERFORM ERROR-RTN. MOVE 'READ' TO COUNT-TYPE. MOVE RECIN-CNT TO COUNT-UNPACK. DISPLAY COUNT-DETAIL. MOVE 'WRITTEN' TO COUNT-TYPE. MOVE RECOUT-CNT TO COUNT-UNPACK. DISPLAY COUNT-DETAIL. STOP RUN. /* /* /& * $$ EOJ