*DECK     DCUTL900
       IDENTIFICATION DIVISION. 
       PROGRAM-ID.   UTL900.
  
      ***************************************************** 
      *    THIS SEGMENT IMPLEMENTS THE MIGRATION FACILITY.
      *    IT IS CALLED BY DCUTL TO MIGRATE A TARGET
      *    FILE CREATED BY DATA CATALOGUE V1.0. THE 
      *    OUTPUT FROM THIS SEGMENT IS A NEW TARGET 
      *    FILE THAT REFLECTS THE NEW INPUT STRUCTURE 
      *    REQUIRED BY DATA CATALOGUE V2.0. 
      ***************************************************** 
  
*CALL     PROGSHEL
  
           SELECT SYSPRINT ASSIGN TO "OUTPUT".
           SELECT TARGET-FILE ASSIGN TO "TARGET"
                  USE "RT=Z". 
           SELECT NEW-TARGET-FILE ASSIGN TO "NEWTARG" 
                  USE "RT=Z". 
  
       DATA DIVISION. 
  
       FILE SECTION.
  
       FD  SYSPRINT 
           LABEL RECORDS ARE OMITTED
           DATA RECORDS ARE PRINT-LINE. 
       01  PRINT-LINE                    PICTURE X(133).
  
       FD TARGET-FILE 
           LABEL RECORDS ARE OMITTED
           DATA RECORDS ARE TARGET-CARD.
       01  TARGET-CARD                   PICTURE X(72). 
  
       FD  NEW-TARGET-FILE
           LABEL RECORDS ARE OMITTED
           DATA RECORDS ARE NEW-CARD. 
       01  NEW-CARD                      PICTURE X(72). 
  
      ***************************************************** 
      *         C O M M O N    S T O R A G E
      ***************************************************** 
  
       COMMON-STORAGE SECTION.
  
       77  RETURN-CODE                 PICTURE 99.
  
      ***************************************************** 
      *         W O R K I N G    S T O R A G E
      ***************************************************** 
  
       WORKING-STORAGE SECTION. 
  
       01  WORK-AREAS.
           05  LINE-COUNT           PICTURE 99   VALUE ZERO.
           05  PAGE-COUNT           PICTURE 9(4) VALUE ZERO.
           05  OUT-LENGTH           PICTURE 99. 
           05  EOF-FLAG             PICTURE X VALUE "N".
           05  SAVE-LINE-NO         PICTURE 9(4). 
           05  IN-SUB               PICTURE 99. 
           05  OUT-SUB              PICTURE 99. 
           05  DEP-LENGTH           PICTURE 99. 
           05  IND-LENGTH           PICTURE 99. 
           05  CAT-LENGTH           PICTURE 99. 
           05  RED-LENGTH           PICTURE 99. 
           05  ERROR-MESSAGES.
               10  ERROR-MSG-998. 
                   15  FILLER       PICTURE X(20) 
                         VALUE " DCUTL-998-F *ERROR ".
                   15  FILLER       PICTURE X(35) 
                         VALUE "TARGET FILE IS MISSING $UPDATE.". 
           05  INFO-MESSAGES. 
               10  INFO-MSG-GROUP.
                   15  FILLER       PICTURE X(21) 
                         VALUE " DCUTL-999-I *GROUP  ". 
                   15  GROUP-NAME   PICTURE X(32) 
                         VALUE SPACES.
                   15  FILLER       PICTURE X(35) 
                         VALUE " STRUCTURE CATEGORY LINES MODIFIED.". 
  
               10  INFO-MSG-RECORD. 
                   15  FILLER       PICTURE X(21) 
                         VALUE " DCUTL-999-I *RECORD ". 
                   15  RECORD-NAME  PICTURE X(32) 
                         VALUE SPACES.
                   15  FILLER       PICTURE X(35) 
                         VALUE " STRUCTURE CATEGORY LINES MODIFIED.". 
       01  INPUT-AREA.
           02  IN-CARD. 
               03  IN-LINE-NO       PICTURE X(4). 
               03  FILLER           PICTURE X.
               03  IN-TX-DATA.
                   05  IN-LINE      PICTURE X OCCURS 67 TIMES.
  
       01  OUTPUT-AREA. 
           02  OUT-CARD.
               03  OUT-LINE-NO      PICTURE X(4). 
               03  FILLER           PICTURE X.
               03  OUT-TX-DATA. 
                   05  OUT-LINE     PICTURE X OCCURS 67 TIMES.
  
       01  SAVE-AREAS.
           02  SAVE-FRO             PICTURE X(3). 
           02  SAVE-TO              PICTURE X(3). 
           02  SAVE-DEP             PICTURE X(32).
           02  SAVE-IND             PICTURE X(32).
           02  SAVE-CAT             PICTURE X(32).
           02  SAVE-ALIAS           PICTURE X(4). 
           02  SAVE-FILLER          PICTURE X(4). 
           02  SAVE-RED             PICTURE X(32).
           02  SAVE-KEY             PICTURE X.
           02  SAVE-INC             PICTURE X.
           02  ENTITY-ID            PICTURE X(2). 
           02  TODAYS-DATE          PICTURE X(6) VALUE SPACES.
  
       01  OUTPUT-HEADINGS. 
           02  FIRST-MSG. 
               03  FILLER           PICTURE X(45) 
                 VALUE "1DATA CATALOGUE 2                        V2.0". 
               03  FILLER           PICTURE X(29) VALUE 
*CALL LEVEL 
               03  FILLER           PICTURE X(41) VALUE SPACES. 
               03  FILLER           PICTURE X(5)  VALUE "PAGE". 
               03  PAGE-NO          PICTURE 9(4)  VALUE ZERO. 
           02  SECOND-MSG.
               03  FILLER           PICTURE X     VALUE "0".
               03  FILLER           PICTURE X(45) VALUE SPACES. 
               03  FILLER           PICTURE X(31) 
                 VALUE "D A T A   C A T A L O G U E   2". 
               03  FILLER           PICTURE X(25) VALUE SPACES. 
               03  FILLER           PICTURE X(14) 
                 VALUE "REPORT DATE - ".
               03  RPT-DATE.
                   04  RPT-MONTH    PICTURE X(2)  VALUE SPACES. 
                   04  FILLER       PICTURE X     VALUE "/".
                   04  RPT-DAY      PICTURE X(2)  VALUE SPACES. 
                   04  FILLER       PICTURE X     VALUE "/".
                   04  RPT-YEAR     PICTURE X(2)  VALUE SPACES. 
               03  FILLER           PICTURE X(9)  VALUE SPACES. 
           02  THIRD-MSG. 
               03  FILLER           PICTURE X     VALUE "0".
               03  FILLER           PICTURE X(42) VALUE SPACES. 
               03  FILLER           PICTURE X(35) 
                 VALUE "DATA ADMINISTRATOR MIGRATION REPORT". 
               03  FILLER           PICTURE X(55) VALUE SPACES. 
           02  NEWTARG-MSG-1. 
               03  FILLER           PICTURE X(28) VALUE SPACES. 
               03  FILLER           PICTURE X(40) 
                 VALUE "0        1         2         3         4".
               03  FILLER           PICTURE X(40) 
                 VALUE "         5         6         7         8".
               03 FILLER            PICTURE X(25).
           02  NEWTARG-MSG-2. 
               03  FILLER           PICTURE X(19) 
                  VALUE " NEWTARG CARD IMAGE".
               03  FILLER           PICTURE X(9) VALUE SPACES.
               03  FILLER           PICTURE X(40) 
                 VALUE "1........0.........0.........0.........0".
               03  FILLER           PICTURE X(40) 
                 VALUE ".........0.........0.........0..3......0".
               03 FILLER            PICTURE X(25).
           02  TARG-LINE. 
               03  FILLER           PICTURE X(28) VALUE SPACES. 
               03  DIS-LINE         PICTURE X(72) VALUE SPACES. 
               03  FILLER           PICTURE X(33) VALUE SPACES. 
  
      ***************************************************** 
      *       P R O C E D U R E     D I V I S I O N 
      ***************************************************** 
  
       PROCEDURE DIVISION.
  
       ENTER-MIGRATE. 
  
           OPEN INPUT TARGET-FILE 
           OPEN OUTPUT NEW-TARGET-FILE, SYSPRINT
           MOVE SPACES TO INPUT-AREA, OUTPUT-AREA, SAVE-AREAS 
           MOVE ZERO TO SAVE-LINE-NO, IND-LENGTH, DEP-LENGTH
           MOVE ZERO TO RED-LENGTH, CAT-LENGTH
           MOVE ZERO TO PAGE-COUNT, LINE-COUNT
           ACCEPT TODAYS-DATE FROM DATE 
           MOVE TODAYS-DATE (1 : 2) TO RPT-YEAR 
           MOVE TODAYS-DATE (3 : 2) TO RPT-MONTH
           MOVE TODAYS-DATE (5 : 2) TO RPT-DAY
           PERFORM OUTPUT-HEADERS THRU OUTPUT-HEADERS-XIT 
  
       CHECK-TARGET-FILE. 
  
           READ TARGET-FILE INTO IN-CARD
               AT END MOVE "Y" TO EOF-FLAG
                  GO TO GENERATE-REPORT.
           IF IN-CARD (1 : 3) IS NOT EQUAL TO "$UP" 
           THEN 
              GO TO TARGET-FILE-ERROR 
           END-IF.
           WRITE NEW-CARD FROM IN-CARD
  
       READ-TARGET-FILE.
  
           READ TARGET-FILE INTO IN-CARD
               AT END MOVE "Y" TO EOF-FLAG
                  GO TO GENERATE-REPORT.
  
       READ-TARGET-CONT.
  
           IF (IN-CARD (1 : 3) IS EQUAL TO "ADD" OR "CHG")
              AND (IN-CARD (5 : 3) IS EQUAL TO "GRO" OR "REC")
           THEN 
              GO TO PROCESS-STRUCTURE 
           ELSE 
              WRITE NEW-CARD FROM IN-CARD 
              GO TO READ-TARGET-FILE
           END-IF.
  
       PROCESS-STRUCTURE. 
  
           IF IN-CARD (5 : 3) IS EQUAL TO "GRO" 
           THEN 
              MOVE "10" TO ENTITY-ID
              MOVE IN-CARD (9 : 32) TO GROUP-NAME 
           ELSE 
              MOVE "13" TO ENTITY-ID
              MOVE IN-CARD (9 : 32) TO RECORD-NAME
           END-IF 
           WRITE NEW-CARD FROM IN-CARD. 
  
       LOOP-FOR-STRUCTURE.
  
           READ TARGET-FILE INTO IN-CARD
               AT END MOVE "Y" TO EOF-FLAG. 
           IF IN-CARD (1: 3) IS EQUAL TO "STR"
           THEN 
              GO TO FOUND-STRUCTURE 
           ELSE 
              CONTINUE
           END-IF.
  
       CHECK-IF-ADD.
  
           IF IN-CARD (1 : 3) IS EQUAL TO "ADD" OR "CHG"
           THEN 
              MOVE SPACES TO GROUP-NAME, RECORD-NAME
              GO TO READ-TARGET-CONT
           ELSE 
              WRITE NEW-CARD FROM IN-CARD 
              GO TO LOOP-FOR-STRUCTURE
           END-IF.
  
       FOUND-STRUCTURE. 
  
           WRITE NEW-CARD FROM IN-CARD
           READ TARGET-FILE INTO IN-CARD
           MOVE IN-LINE-NO TO OUT-LINE-NO, SAVE-LINE-NO 
           MOVE 1 TO IN-SUB, OUT-SUB. 
  
       CHECK-FOR-FIELDS.
  
           IF IN-TX-DATA (IN-SUB : 3) IS EQUAL TO "CAT" 
           THEN 
              ADD 4 TO IN-SUB 
              PERFORM MOVE-CATNAME THRU MOVE-CATNAME-XIT
              IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO ","
              THEN
                 ADD 1 TO IN-SUB
                 GO TO CHECK-ALIAS
              END-IF
           END-IF.
  
       CHECK-ALIAS. 
  
           IF IN-TX-DATA (IN-SUB : 3) IS EQUAL TO "ALI" 
           THEN 
              ADD 4 TO IN-SUB 
              PERFORM MOVE-ALIAS THRU MOVE-ALIAS-XIT
              IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO ","
              THEN
                 ADD 1 TO IN-SUB
                 GO TO CHECK-FILLER 
              END-IF
           END-IF.
  
       CHECK-FILLER.
  
           IF IN-TX-DATA (IN-SUB : 3) IS EQUAL TO "FIL" 
           THEN 
              ADD 4 TO IN-SUB 
              PERFORM MOVE-FILLER THRU MOVE-FILLER-XIT
              IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO ","
              THEN
                 ADD 1 TO IN-SUB
                 GO TO CHECK-REDEFINES
              END-IF
           END-IF.
  
       CHECK-REDEFINES. 
  
           IF IN-TX-DATA (IN-SUB : 3) IS EQUAL TO "RED" 
           THEN 
              ADD 4 TO IN-SUB 
              PERFORM MOVE-REDEFINE THRU MOVE-REDEFINE-XIT
              IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO ","
              THEN
                 ADD 1 TO IN-SUB
                 GO TO CHECK-FROM 
              END-IF
           END-IF.
  
       CHECK-FROM.
  
           IF IN-TX-DATA (IN-SUB : 3) IS EQUAL TO "FRO" 
           THEN 
              ADD 4 TO IN-SUB 
              PERFORM MOVE-FROM THRU MOVE-FROM-XIT
              IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO ","
              THEN
                 ADD 1 TO IN-SUB
                 GO TO CHECK-TO 
              END-IF
           END-IF.
  
       CHECK-TO.
  
           IF IN-TX-DATA (IN-SUB : 3) IS EQUAL TO "TO " 
           THEN 
              ADD 4 TO IN-SUB 
              PERFORM MOVE-TO THRU MOVE-TO-XIT
              IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO ","
              THEN
                 ADD 1 TO IN-SUB
                 GO TO CHECK-IND
              END-IF
           END-IF.
  
       CHECK-IND. 
  
           IF IN-TX-DATA (IN-SUB : 3) IS EQUAL TO "IND" 
           THEN 
              ADD 4 TO IN-SUB 
              PERFORM MOVE-INDEX THRU MOVE-INDEX-XIT
              IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO ","
              THEN
                 ADD 1 TO IN-SUB
                 GO TO CHECK-DEPEND 
              END-IF
           END-IF.
  
       CHECK-DEPEND.
  
           IF IN-TX-DATA (IN-SUB : 3) IS EQUAL TO "DEP" 
           THEN 
              ADD 4 TO IN-SUB 
              PERFORM MOVE-DEPEND THRU MOVE-DEPEND-XIT
              IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO ","
              THEN
                 ADD 1 TO IN-SUB
                 GO TO CHECK-KEY
              END-IF
           END-IF.
  
       CHECK-KEY. 
  
           IF IN-TX-DATA (IN-SUB : 3) IS EQUAL TO "KEY" 
           THEN 
              ADD 4 TO IN-SUB 
              PERFORM MOVE-KEY THRU MOVE-KEY-XIT
              IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO ","
              THEN
                 ADD 1 TO IN-SUB
                 GO TO CHECK-INC
              END-IF
           END-IF.
  
       CHECK-INC. 
  
           IF IN-TX-DATA (IN-SUB : 3) IS EQUAL TO "INC" 
           THEN 
              ADD 4 TO IN-SUB 
              PERFORM MOVE-INC THRU MOVE-INC-XIT
           END-IF.
  
  
       CHECK-CONT-LINES.
  
           READ TARGET-FILE INTO IN-CARD
              AT END MOVE "Y" TO EOF-FLAG.
           IF (EOF-FLAG IS EQUAL TO "N")
              AND (IN-LINE-NO IS EQUAL TO SPACES) 
      *       HAVE CONTINUATION LINES 
              THEN
                 MOVE 1 TO IN-SUB 
                 GO TO CHECK-FOR-FIELDS 
              ELSE
                 CONTINUE 
           END-IF.
  
       CHECK-FIELDS.
  
           IF SAVE-CAT IS NOT EQUAL TO SPACES 
              MOVE "CAT=" TO OUT-TX-DATA (OUT-SUB : 4)
              ADD 4 TO OUT-SUB
              MOVE SAVE-CAT (1 : CAT-LENGTH) TO 
                  OUT-TX-DATA (OUT-SUB : CAT-LENGTH)
              ADD CAT-LENGTH TO OUT-SUB 
           END-IF 
           IF SAVE-ALIAS IS NOT EQUAL TO SPACES 
           THEN 
              MOVE "," TO OUT-TX-DATA (OUT-SUB : 1) 
              ADD 1 TO OUT-SUB
              MOVE "ALI=" TO OUT-TX-DATA (OUT-SUB : 4)
              ADD 4 TO OUT-SUB
              MOVE SAVE-ALIAS (1 : 4) TO
                  OUT-TX-DATA (OUT-SUB : 4) 
              ADD 4 TO OUT-SUB
           END-IF 
           IF SAVE-FILLER IS NOT EQUAL TO SPACES
           THEN 
              MOVE "," TO OUT-TX-DATA (OUT-SUB : 1) 
              ADD 1 TO OUT-SUB
              MOVE "FIL=" TO OUT-TX-DATA (OUT-SUB : 4)
              ADD 4 TO OUT-SUB
              MOVE SAVE-FILLER (1 : 4) TO 
                  OUT-TX-DATA (OUT-SUB : 4) 
              ADD 4 TO OUT-SUB
           END-IF 
           IF SAVE-RED IS NOT EQUAL TO SPACES 
           THEN 
              MOVE "," TO OUT-TX-DATA (OUT-SUB : 1) 
              ADD 1 TO OUT-SUB
              ADD OUT-SUB, RED-LENGTH GIVING OUT-LENGTH 
              ADD 5 TO OUT-LENGTH 
              IF OUT-LENGTH IS GREATER THAN 72
              THEN
                 WRITE NEW-CARD FROM OUT-CARD 
                 MOVE SPACES TO OUT-CARD
                 MOVE 1 TO OUT-SUB
                 MOVE ZERO TO OUT-LENGTH
              END-IF
              MOVE "RED=" TO OUT-TX-DATA (OUT-SUB : 4)
              ADD 4 TO OUT-SUB
              MOVE SAVE-RED (1 : RED-LENGTH) TO 
                  OUT-TX-DATA (OUT-SUB : RED-LENGTH)
              ADD RED-LENGTH TO OUT-SUB 
           END-IF 
  
           IF SAVE-KEY IS NOT EQUAL TO SPACES 
           THEN 
              MOVE "," TO OUT-TX-DATA (OUT-SUB : 1) 
              ADD 1 TO OUT-SUB
              MOVE "KEY=" TO OUT-TX-DATA (OUT-SUB : 4)
              ADD 4 TO OUT-SUB
              MOVE SAVE-KEY  TO 
                  OUT-TX-DATA (OUT-SUB : 1) 
              ADD 1 TO OUT-SUB
           END-IF 
  
           IF SAVE-INC IS NOT EQUAL TO SPACES 
           THEN 
              MOVE "," TO OUT-TX-DATA (OUT-SUB : 1) 
              ADD 1 TO OUT-SUB
              MOVE "INC=" TO OUT-TX-DATA (OUT-SUB : 4)
              ADD 4 TO OUT-SUB
              MOVE SAVE-INC  TO 
                  OUT-TX-DATA (OUT-SUB : 1) 
              ADD 1 TO OUT-SUB
           END-IF 
  
           WRITE NEW-CARD FROM OUT-CARD 
           MOVE SPACES TO OUT-CARD
           ADD 1 TO SAVE-LINE-NO
           MOVE 1 TO OUT-SUB
           IF SAVE-FRO IS EQUAL TO SPACES 
              AND SAVE-TO IS EQUAL TO SPACES
              AND SAVE-DEP IS EQUAL TO SPACES 
           THEN 
              GO TO CHECK-INDEX 
           ELSE 
              MOVE SAVE-LINE-NO TO OUT-LINE-NO
              IF SAVE-FRO IS NOT EQUAL TO SPACES
              THEN
                 MOVE "FRO=" TO OUT-TX-DATA (OUT-SUB : 4) 
                 ADD 4 TO OUT-SUB 
                 MOVE SAVE-FRO TO OUT-TX-DATA (OUT-SUB : 3) 
                 ADD 3 TO OUT-SUB 
              END-IF
              IF SAVE-TO IS NOT EQUAL TO SPACES 
              THEN
                 IF SAVE-FRO IS NOT EQUAL TO SPACES 
                 THEN 
                    MOVE "," TO OUT-TX-DATA (OUT-SUB : 1) 
                    ADD 1 TO OUT-SUB
                 END-IF 
                 MOVE "TO=" TO OUT-TX-DATA (OUT-SUB : 3)
                 ADD 3 TO OUT-SUB 
                 MOVE SAVE-TO TO OUT-TX-DATA (OUT-SUB : 3)
                 ADD 3 TO OUT-SUB 
              END-IF
              IF SAVE-DEP IS NOT EQUAL TO SPACES
              THEN
                 IF ((SAVE-FRO IS NOT EQUAL TO SPACES)
                    OR (SAVE-TO IS NOT EQUAL TO SPACES))
                 THEN 
                    MOVE "," TO OUT-TX-DATA (OUT-SUB : 1) 
                    ADD 1 TO OUT-SUB
                 END-IF 
                 MOVE "DEP=" TO OUT-TX-DATA (OUT-SUB : 4) 
                 ADD 4 TO OUT-SUB 
                 MOVE SAVE-DEP TO OUT-TX-DATA (OUT-SUB : DEP-LENGTH)
              END-IF
           END-IF 
           WRITE NEW-CARD FROM OUT-CARD 
           MOVE SPACES TO OUT-CARD. 
  
       CHECK-INDEX. 
  
           IF SAVE-IND IS NOT EQUAL TO SPACES 
           THEN 
              ADD 1 TO SAVE-LINE-NO 
              MOVE 1 TO OUT-SUB 
              MOVE SAVE-LINE-NO TO OUT-LINE-NO
              MOVE "IND=" TO OUT-TX-DATA (OUT-SUB : 4)
              ADD 4 TO OUT-SUB
              MOVE SAVE-IND TO OUT-TX-DATA (OUT-SUB : IND-LENGTH) 
              WRITE NEW-CARD FROM OUT-CARD
           END-IF.
  
       GENERATE-MESSAGE.
  
           IF SAVE-FRO IS NOT EQUAL TO SPACES OR
              SAVE-TO IS NOT EQUAL TO SPACES OR 
              SAVE-DEP IS NOT EQUAL TO SPACES OR
              SAVE-IND IS NOT EQUAL TO SPACES 
           THEN 
              IF ENTITY-ID IS EQUAL TO "10" 
              THEN
                 MOVE INFO-MSG-GROUP TO PRINT-LINE
              ELSE
                 MOVE INFO-MSG-RECORD TO PRINT-LINE 
              END-IF
              WRITE PRINT-LINE
              ADD 1 TO LINE-COUNT 
              IF LINE-COUNT IS GREATER THAN 54
              THEN
                 MOVE ZERO TO LINE-COUNT
                 PERFORM OUTPUT-HEADERS THRU OUTPUT-HEADERS-XIT 
              END-IF
           END-IF 
              MOVE ZERO TO DEP-LENGTH, IND-LENGTH 
              MOVE ZERO TO CAT-LENGTH, RED-LENGTH 
              MOVE ZERO TO OUT-LENGTH 
              MOVE SPACES TO SAVE-AREAS 
              MOVE 1 TO IN-SUB, OUT-SUB.
  
       CHECK-LINE-NO. 
  
           IF EOF-FLAG IS EQUAL TO "N"
           THEN 
              IF IN-LINE-NO IS NUMERIC
              THEN
                 IF IN-LINE-NO IS GREATER THAN SAVE-LINE-NO 
                 THEN 
                    MOVE IN-LINE-NO TO SAVE-LINE-NO, OUT-LINE-NO
                    GO TO CHECK-FOR-FIELDS
                 ELSE 
                    ADD 2 TO SAVE-LINE-NO 
                    MOVE SAVE-LINE-NO TO OUT-LINE-NO
                    GO TO CHECK-FOR-FIELDS
                 END-IF 
              ELSE
      *    NEXT LINE IS NOT A STRUCTURE LINE
                 GO TO READ-TARGET-CONT 
               END-IF 
           END-IF.
  
  
  
       GENERATE-REPORT. 
           CLOSE TARGET-FILE, NEW-TARGET-FILE 
           OPEN INPUT NEW-TARGET-FILE.
  
       OUT-HEADERS. 
  
           MOVE ZERO TO LINE-COUNT
           PERFORM OUTPUT-HEADERS THRU OUTPUT-HEADERS-XIT 
           PERFORM OUTPUT-TARGET-HEADING THRU OUTPUT-TARGET-HEADING-XIT.
  
       CONTINUE-REPORT. 
  
           READ NEW-TARGET-FILE 
               AT END GO TO END-OF-JOB. 
           MOVE NEW-CARD TO DIS-LINE
           WRITE PRINT-LINE FROM TARG-LINE
           MOVE SPACES TO DIS-LINE
           ADD 1 TO LINE-COUNT
           IF LINE-COUNT IS GREATER THAN 54 
           THEN 
              GO TO OUT-HEADERS 
           ELSE 
              GO TO CONTINUE-REPORT 
           END-IF.
  
       END-OF-JOB.
  
           CLOSE SYSPRINT, NEW-TARGET-FILE
           EXIT PROGRAM.
  
      ********************************************************
      *                S U B R O U T I N E S
      ********************************************************
  
  
       TARGET-FILE-ERROR. 
           MOVE " " TO PRINT-LINE (1 : 1) 
           MOVE ERROR-MSG-998 TO PRINT-LINE (8 : 48)
           WRITE PRINT-LINE 
           EXIT PROGRAM.
  
       MOVE-CATNAME.
           IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO "," OR SPACE
           THEN 
              GO TO MOVE-CATNAME-XIT
           ELSE 
              ADD 1 TO CAT-LENGTH 
              MOVE IN-TX-DATA (IN-SUB : 1) TO SAVE-CAT (CAT-LENGTH : 1) 
              ADD 1 TO IN-SUB 
              GO TO MOVE-CATNAME
           END-IF.
       MOVE-CATNAME-XIT.
           EXIT.
  
       MOVE-ALIAS.
           MOVE IN-TX-DATA (IN-SUB : 4) TO SAVE-ALIAS (1 : 4) 
           ADD 4 TO IN-SUB. 
       MOVE-ALIAS-XIT.
           EXIT.
  
       MOVE-KEY.
           MOVE IN-TX-DATA (IN-SUB : 1) TO SAVE-KEY (1 : 1) 
           ADD 1 TO IN-SUB. 
       MOVE-KEY-XIT.
           EXIT.
  
       MOVE-INC.
           MOVE IN-TX-DATA (IN-SUB : 1) TO SAVE-INC (1 : 1) 
           ADD 1 TO IN-SUB. 
       MOVE-INC-XIT.
           EXIT.
  
       MOVE-FILLER. 
           MOVE IN-TX-DATA (IN-SUB : 4) TO SAVE-FILLER (1 : 4)
           ADD 4 TO IN-SUB. 
       MOVE-FILLER-XIT. 
           EXIT.
  
       MOVE-REDEFINE. 
           IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO "," OR SPACE
           THEN 
              GO TO MOVE-REDEFINE-XIT 
           ELSE 
              ADD 1 TO RED-LENGTH 
              MOVE IN-TX-DATA (IN-SUB : 1) TO SAVE-RED (RED-LENGTH : 1) 
              ADD 1 TO IN-SUB 
              GO TO MOVE-REDEFINE 
           END-IF.
       MOVE-REDEFINE-XIT. 
           EXIT.
  
       MOVE-FROM. 
           MOVE IN-TX-DATA (IN-SUB : 3) TO SAVE-FRO (1 : 3) 
           ADD 3 TO IN-SUB. 
       MOVE-FROM-XIT. 
           EXIT.
  
       MOVE-TO. 
           MOVE IN-TX-DATA (IN-SUB : 3) TO SAVE-TO (1 : 3)
           ADD 3 TO IN-SUB. 
       MOVE-TO-XIT. 
           EXIT.
  
       MOVE-DEPEND. 
           IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO "," OR SPACE
           THEN 
              GO TO MOVE-DEPEND-XIT 
           ELSE 
              ADD 1 TO DEP-LENGTH 
              MOVE IN-TX-DATA (IN-SUB : 1) TO SAVE-DEP (DEP-LENGTH : 1) 
              ADD 1 TO IN-SUB 
              GO TO MOVE-DEPEND 
           END-IF.
       MOVE-DEPEND-XIT. 
           EXIT.
  
       MOVE-INDEX.
           IF IN-TX-DATA (IN-SUB : 1) IS EQUAL TO "," OR SPACE
           THEN 
              GO TO MOVE-INDEX-XIT
           ELSE 
              ADD 1 TO IND-LENGTH 
              MOVE IN-TX-DATA (IN-SUB : 1) TO SAVE-IND (IND-LENGTH : 1) 
              ADD 1 TO IN-SUB 
              GO TO MOVE-INDEX
           END-IF.
       MOVE-INDEX-XIT.
           EXIT.
  
       OUTPUT-HEADERS.
           ADD 1 TO PAGE-COUNT
           MOVE PAGE-COUNT TO PAGE-NO 
           INSPECT PAGE-NO REPLACING LEADING ZEROS BY SPACES
           MOVE FIRST-MSG TO PRINT-LINE 
           WRITE PRINT-LINE 
           ADD 1 TO LINE-COUNT
           MOVE SECOND-MSG TO PRINT-LINE
           WRITE PRINT-LINE 
           ADD 2 TO LINE-COUNT
           MOVE THIRD-MSG TO PRINT-LINE 
           WRITE PRINT-LINE 
           ADD 2 TO LINE-COUNT
           MOVE SPACES TO PRINT-LINE
           WRITE PRINT-LINE 
           ADD 1 TO LINE-COUNT. 
       OUTPUT-HEADERS-XIT.
           EXIT.
  
       OUTPUT-TARGET-HEADING. 
           MOVE NEWTARG-MSG-1 TO PRINT-LINE 
           WRITE PRINT-LINE 
           ADD 1 TO LINE-COUNT
           MOVE NEWTARG-MSG-2 TO PRINT-LINE 
           WRITE PRINT-LINE 
           ADD 1 TO LINE-COUNT
           MOVE SPACES TO PRINT-LINE
           WRITE PRINT-LINE 
           ADD 1 TO LINE-COUNT. 
       OUTPUT-TARGET-HEADING-XIT. 
           EXIT.
  
