*DECK DCCONFIL
       IDENTIFICATION DIVISION. 
       PROGRAM-ID. CONFIL.
*CALL COPYRIGHT 
      *    THIS PROGRAM EXPLODES FILE STATEMENTS AS PART OF 
      *    THE DATA CATALOGUE CONVERSION. 
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION. 
       SOURCE-COMPUTER. CYBER.
       OBJECT-COMPUTER. CYBER.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT SYSPRINT ASSIGN TO "OUTPUT".
           SELECT OPTIONAL FILE-FILE ASSIGN TO FILEFIL
               USE "RT=Z".
           SELECT IS-FILE 
               ASSIGN TO ISFILE, XNISFIL
               ORGANIZATION IS INDEXED
               RECORD KEY IS IS-PKEY
               ALTERNATE RECORD KEY IS IS-ALTKEY
                   WITH DUPLICATES. 
       DATA DIVISION. 
       FILE SECTION.
       FD  FILE-FILE
           LABEL RECORDS ARE OMITTED
           RECORD CONTAINS 80 CHARACTERS
           DATA RECORDS ARE FILE-IN.
       01  FILE-IN. 
           02  FILE-LINE                   PICTURE X OCCURS 80 TIMES. 
*CALL SYSPRTFD
*CALL ISFILFD 
  
  
       COMMON-STORAGE SECTION.
       77  RETURN-CODE                     PICTURE XX.
*CALL CVTBL 
       01  PRINT-CTL-TBL. 
*CALL WKPRINT 
       01  WRKF-FUNCTION-CODE              PICTURE X. 
*CALL WRKFHDR 
*CALL WRKREDEF
  
       WORKING-STORAGE SECTION. 
       01  ERROR-MSG. 
           02  MSG-25                      PICTURE X(51) VALUE
           "DCCVT-25-W ERROR * TOKEN TRUNCATED TO 30 CHARACTERS". 
           02  MSG-360                     PICTURE X(40) VALUE
           "DCCVT-360-S ERROR * INVALID SEPARATOR". 
           02  MSG-365. 
               03  FILLER                  PICTURE X(49) VALUE
               "DCCVT-365-S ERROR * PARAMETER VALUE MISSING FOR *". 
               03  PARAMETER-NAME          PICTURE X(3).
               03  FILLER                  PICTURE X VALUE "*". 
           02  MSG-370. 
               03  FILLER                  PICTURE X(39) VALUE
               "DCCVT-370-W ERROR * NONCDCS PARAMETER *". 
               03  NONCDCS-PARAMETER       PICTURE X(3).
               03  FILLER                  PICTURE X(9) VALUE 
               "* IGNORED". 
           02  MSG-375. 
               03  FILLER                  PICTURE X(34) VALUE
               "DCCVT-375-W ERROR * UNKNOWN FILE *".
               03  UNKNOWN-FILE            PICTURE X(7).
               03  FILLER                  PICTURE X(9) VALUE 
               "* IGNORED". 
           02  MSG-380. 
               03  FILLER                  PICTURE X(49) VALUE
               "DCCVT-380-S ERROR * INVALID VALUE FOR PARAMETER *". 
               03  PARAMETER-NAME-1        PICTURE X(3).
               03  FILLER                  PICTURE X VALUE "*". 
           02  MSG-385. 
               03  FILLER                  PICTURE X(26) VALUE
               "DCCVT-385-S ERROR * FILE *".
               03  EMPTY-FILE-NAME         PICTURE X(7).
               03  FILLER                  PICTURE X(10) VALUE
               "* IS EMPTY".
           02  MSG-390                     PICTURE X(65) VALUE
           "DCCVT-390-W ERROR * INDEX NAME TAKEN FROM MASTER DIRECTORY S
      -    "OURCE". 
       01  HEADING-LITS.
           03  CONV-FIL-TITLE          PICTURE X(50) VALUE
           "      FILE   STATEMENT   CONVERSION   REPORT      ".
           03  END-REPORT-MSG             PICTURE X(55) 
               VALUE "***END FILE STATEMENT CONVERSION REPORT***".
       01  LINE1. 
           03  FILLER                      PICTURE X. 
           03  LINE1A                      PICTURE X(10). 
           03  FILLER                      PICTURE X(9).
           03  LINE1B                      PICTURE X(32). 
           03  FILLER                      PICTURE XX.
           03  LINE1C                      PICTURE X(80). 
       01  WORK-AREA. 
           02  WORKA                       PICTURE X OCCURS 72 TIMES. 
       01  CUR-CHAR-COMP-1                 PICTURE 9(4) COMP-1 VALUE 0. 
       01  CUR-CHAR-ARRAY REDEFINES CUR-CHAR-COMP-1.
           02  FILLER                      PICTURE X(9).
           02  CUR-CHAR                    PICTURE X. 
       77  COMMENT-AREA                    PICTURE X(66). 
       77  FILE-NAME                       PICTURE X(7).
       77  FIRST-TIME                      PICTURE X VALUE "T". 
       77  HOLD-OUT-NOTE                   PICTURE X(66). 
       77  IN-SUB                          PICTURE 9999.
       77  WK-SUB                          PICTURE 9999.
  
       PROCEDURE DIVISION.
  
      ******************************************************************
      * 
      *    MAIN DRIVING ROUTINE 
      * 
      *    INITALIZE SOME DATA ITEMS AND I-O.  THEN ENTER MAIN LOOP.
      *    CALL GET-NEXT-FILE-NAME TO SKIP OVER ALL CONTROL STATEMENTS
      *    UNTIL A FILE STATEMENT IS ENCOUNTERED AND TO RETURN WITH 
      *    WORK-AREA = FILE-NAME. SEARCH ISFILE FOR A MASTER AREA 
      *    WHOSE NAME MATCHES THE FILE NAME.  IF NONE IS FOUND, IGNORE
      *    THIS FILE STATEMENT AND RETURN CONTROL TO THE TOP OF THE 
      *    LOOP.  IF A MASTER AREA IS FOUND, LEAVE ITS CATNAME
      *    IN IS-CATNAME, SCAN ALL PARAMETERS ON THE
      *    FILE STATEMENT AND STORE VALUES IN OUT-AREAA-FILE-ARRAY. 
      *    WHEN THE TERMINATING PERIOD IS FOUND, CALL WRITE-AREAA-FILE
      *    TO WRITE OUT-AREAA-FILE-REC FOR THE MASTER AREA WHOSE CATNAME
      *    IS GIVEN IN IS-CATNAME AND FOR ALL OTHER MASTER AREAS IN 
      *    ISFILE WHOSE NAMES MATCH THE FILE NAME.  RETURN CONTROL
      *    TO THE TOP OF THE LOOP TO SEARCH FOR THE NEXT FILE 
      *    STATEMENT. CONTINUE PROCESSING UNTIL END 
      *    OF FILE ON FILEFIL.
      * 
      ******************************************************************
  
       BEGIN-PARA.
           OPEN INPUT FILE-FILE.
           OPEN I-O IS-FILE.
           OPEN OUTPUT SYSPRINT.
           MOVE CONV-FIL-TITLE TO REPORT-TITLE-LONG.
           MOVE 99 TO LINE-CT.
           MOVE 1 TO PRT-CTL. 
           MOVE SPACES TO STD-REPORT-REC. 
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           MOVE "22" TO OUT-ENTRY-TYPE. 
           MOVE SPACES TO OUT-EALIASOF-FLAG, OUT-EALIASOF-NAME, 
             OUT-FILLER.
           MOVE ZERO TO OUT-99-GROUP. 
           MOVE "210" TO OUT-CATEGORY-TYPE. 
           MOVE "05" TO OUT-FIELD-TYPE. 
           MOVE "S" TO OUT-LANG-CODE. 
       LOOP-10. 
           PERFORM GET-NEXT-FILE-NAME THRU GET-NEXT-FILE-NAME-EXIT. 
           MOVE WORK-AREA TO FILE-NAME. 
           MOVE SPACES TO OUT-AREAA-FILE-ARRAY. 
           MOVE "22" TO IS-ENTITY-TYPE. 
           MOVE ZERO TO IS-SCHEMA-ORDINAL.
           MOVE SPACES TO IS-CDCS-NAME. 
           START IS-FILE KEY IS GREATER THAN IS-ALTKEY
               INVALID KEY GO TO LOOP-UNKNOWN-FILE. 
       LOOP-20. 
           READ IS-FILE 
               AT END GO TO LOOP-UNKNOWN-FILE.
           IF IS-ENTITY-TYPE IS NOT EQUAL TO "22" 
               GO TO LOOP-UNKNOWN-FILE. 
           IF IS-CDCS-NAME (1 : 7) IS NOT EQUAL TO FILE-NAME
               GO TO LOOP-20. 
           IF IS-AREA-MASTER IS NOT EQUAL TO "M"
               GO TO LOOP-20. 
       LOOP-30. 
           PERFORM GET-NEXT-TOKEN THRU GET-NEXT-TOKEN-EXIT. 
           IF WORK-AREA IS EQUAL TO "." 
               PERFORM WRITE-AREAA-FILE THRU WRITE-AREAA-FILE-EXIT
               GO TO LOOP-10
           END-IF.
           IF WORK-AREA IS NOT EQUAL TO "," 
               MOVE MSG-360 TO STD-REPORT-REC 
               PERFORM PROCESS-ERROR THRU PROCESS-ERROR-EXIT
               GO TO LOOP-10
           END-IF.
           PERFORM GET-NEXT-TOKEN THRU GET-NEXT-TOKEN-EXIT. 
           IF WORK-AREA IS EQUAL TO "." 
               GO TO LOOP-10
           END-IF.
           IF WORK-AREA IS EQUAL TO "BT"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               IF WORK-AREA IS EQUAL TO "I" 
                 OR WORK-AREA IS EQUAL TO "C" 
                 OR WORK-AREA IS EQUAL TO "K" 
                 OR WORK-AREA IS EQUAL TO "E" 
                   MOVE WORK-AREA TO OUT-AREAA-BT 
               ELSE 
                   GO TO LOOP-INVALID-PARAMETER-VALUE 
               END-IF 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "CL"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-CL 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "CP"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-CP 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "C1"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               IF WORK-AREA IS EQUAL TO "YES" 
                 OR WORK-AREA IS EQUAL TO "NO"
                   MOVE WORK-AREA TO OUT-AREAA-C1 
               ELSE 
                   GO TO LOOP-INVALID-PARAMETER-VALUE 
               END-IF 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "EMK" 
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               IF WORK-AREA IS EQUAL TO "YES" 
                 OR WORK-AREA IS EQUAL TO "NO"
                   MOVE WORK-AREA TO OUT-AREAA-EMK
               ELSE 
                   GO TO LOOP-INVALID-PARAMETER-VALUE 
               END-IF 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "FO"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               IF WORK-AREA IS EQUAL TO "AK"
                 OR WORK-AREA IS EQUAL TO "IS"
                 OR WORK-AREA IS EQUAL TO "DA"
                   MOVE WORK-AREA TO OUT-AREAA-FO 
               ELSE 
                   GO TO LOOP-INVALID-PARAMETER-VALUE 
               END-IF 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "HL"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-HL 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "HMB" 
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-HMB
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "KL"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-KL 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "KP"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-KP 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "KT"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               IF WORK-AREA IS EQUAL TO "S" 
                 OR WORK-AREA IS EQUAL TO "I" 
                 OR WORK-AREA IS EQUAL TO "F" 
                 OR WORK-AREA IS EQUAL TO "U" 
                   MOVE WORK-AREA TO OUT-AREAA-KT 
               ELSE 
                   GO TO LOOP-INVALID-PARAMETER-VALUE 
               END-IF 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "LL"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-LL 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "LP"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-LP 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "MBL" 
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-MBL
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "MNR" 
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-MNR
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "MRL" 
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-MRL
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "ORG" 
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               IF WORK-AREA IS EQUAL TO "OLD" 
                 OR WORK-AREA IS EQUAL TO "NEW" 
                   MOVE WORK-AREA TO OUT-AREAA-ORG
               ELSE 
                   GO TO LOOP-INVALID-PARAMETER-VALUE 
               END-IF 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "RB"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-RB 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "RKP" 
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-RKP
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "RKW" 
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-RKW
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "RMK" 
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-RMK
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "RT"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               IF WORK-AREA IS EQUAL TO "W" 
                 OR WORK-AREA IS EQUAL TO "F" 
                 OR WORK-AREA IS EQUAL TO "R" 
                 OR WORK-AREA IS EQUAL TO "Z" 
                 OR WORK-AREA IS EQUAL TO "D" 
                 OR WORK-AREA IS EQUAL TO "T" 
                 OR WORK-AREA IS EQUAL TO "U" 
                 OR WORK-AREA IS EQUAL TO "S" 
                   MOVE WORK-AREA TO OUT-AREAA-RT 
               ELSE 
                   GO TO LOOP-INVALID-PARAMETER-VALUE 
               END-IF 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "TL"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE WORK-AREA TO OUT-AREAA-TL 
               GO TO LOOP-30
           END-IF.
           IF WORK-AREA IS EQUAL TO "XN"
               PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
               MOVE MSG-390 TO STD-REPORT-REC 
               PERFORM PROCESS-ERROR THRU PROCESS-ERROR-EXIT
               GO TO LOOP-30
           END-IF.
           MOVE WORK-AREA TO NONCDCS-PARAMETER. 
           MOVE MSG-370 TO STD-REPORT-REC.
           PERFORM PROCESS-ERROR THRU PROCESS-ERROR-EXIT. 
           PERFORM GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT. 
           GO TO LOOP-30. 
       LOOP-INVALID-PARAMETER-VALUE.
           MOVE MSG-380 TO STD-REPORT-REC.
           GO TO LOOP-40. 
       LOOP-UNKNOWN-FILE. 
           MOVE FILE-NAME TO UNKNOWN-FILE.
           MOVE MSG-375 TO STD-REPORT-REC.
       LOOP-40. 
           PERFORM PROCESS-ERROR THRU PROCESS-ERROR-EXIT. 
           GO TO LOOP-10. 
       FILE-END.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           MOVE END-REPORT-MSG TO STD-REPORT-REC. 
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           CLOSE SYSPRINT.
           CLOSE IS-FILE. 
           CLOSE FILE-FILE. 
           EXIT PROGRAM.
  
*CALL DISPLAYLN 
*CALL WRITELN 
  
      ******************************************************************
      * 
      *    GET-NEXT-FILE-NAME THRU GET-NEXT-FILE-NAME-EXIT
      * 
      *    SKIP PAST ALL TOKENS UNTIL "FILE," ENCOUNTERED. THEN 
      *    GET THE NEXT TOKEN.
      * 
      *    ON INPUT 
      *    FILE-LINE = OLD LINE OF NO FURTHER INTEREST
      * 
      *    ON OUTPUT
      *    WORK-AREA = NEXT TOKEN AFTER "FILE," WHICH MUST BE 
      *        FIRST TOKENS OF FILEFIL RECORD 
      * 
      ******************************************************************
  
       GET-NEXT-FILE-NAME.
           PERFORM READ-FILEFIL THRU READ-FILEFIL-EXIT. 
           PERFORM GET-NEXT-TOKEN THRU GET-NEXT-TOKEN-EXIT. 
           IF WORK-AREA IS NOT EQUAL TO "FILE"
               GO TO GET-NEXT-FILE-NAME.
           PERFORM GET-NEXT-TOKEN THRU GET-NEXT-TOKEN-EXIT. 
           IF WORK-AREA IS NOT EQUAL TO "," 
               MOVE MSG-360 TO STD-REPORT-REC 
               PERFORM PROCESS-ERROR THRU PROCESS-ERROR-EXIT
               GO TO GET-NEXT-FILE-NAME 
           END-IF.
           PERFORM GET-NEXT-TOKEN THRU GET-NEXT-TOKEN-EXIT. 
       GET-NEXT-FILE-NAME-EXIT. 
           EXIT.
  
      ******************************************************************
      * 
      *    GET-NEXT-TOKEN THRU GET-NEXT-TOKEN-EXIT. 
      * 
      *    GET THE NEXT TOKEN.  IGNORE ALL BLANKS.  A TOKEN 
      *    IS A STRING OF NONBLANK CHARACTERS TERMINATED BY 
      *    A CHARACTER WHOSE DISPLAY CODE VALUE IS GREATER THAN 
      *    44B, (CHARACTER 9) BUT NOT * OR $.  THE TERMINATOR 
      *    IS NOT PART OF THE TOKEN BUT IS RETURNED AS A SEPARATE 
      *    TOKEN BY THE NEXT CALL TO GET-NEXT-TOKEN.  IF THE
      *    TERMINATOR IS PERIOD OR ), WORK-AREA IS SET TO PERIOD. 
      *    IF THE TERMINATOR IS =, WORK-AREA IS SET TO +.  FOR ANY
      *    OTHER TERMINATORS, WORK-AREA IS SET TO COMMA.
      * 
      *    ON INPUT 
      *    FILE-LINE (IN-SUB) = 1ST CHARACTER AFTER LAST TOKEN
      *                         OR 1ST CHARACTER OF NEW LINE
      * 
      *    ON OUTPUT
      *    IF REST OF CURRENT LINE CONTAINS ANOTHER TOKEN 
      *        WORK-AREA = TOKEN
      *    IF REST OF CURRENT LINE CONTAINS ONLY SPACES OR IF IN-SUB>80 
      *        WORK-AREA = SPACE
      *    IF WORK-AREA = "." AND REST OF LINE CONTAINS COMMENT 
      *        COMMENT-AREA = COMMENT 
      * 
      ******************************************************************
  
       GET-NEXT-TOKEN.
           MOVE 1 TO WK-SUB.
           MOVE SPACES TO WORK-AREA.
           IF IN-SUB IS GREATER THAN 80 
               GO TO GET-NEXT-TOKEN-EXIT. 
           MOVE FILE-LINE (IN-SUB) TO CUR-CHAR. 
           IF CUR-CHAR IS EQUAL TO SPACE
               ADD 1 TO IN-SUB
               IF IN-SUB IS GREATER THAN 80 
                   GO TO GET-NEXT-TOKEN-EXIT
               END-IF 
               GO TO GET-NEXT-TOKEN 
           END-IF.
           MOVE CUR-CHAR TO WORKA (WK-SUB). 
           IF CUR-CHAR IS EQUAL TO "."
             OR CUR-CHAR IS EQUAL TO ")"
               ADD 1 TO IN-SUB
               MOVE "." TO WORKA (WK-SUB) 
               IF FILE-IN (IN-SUB : END) IS NOT EQUAL TO SPACES 
                 AND INCLUDE-NOTES IS NOT EQUAL TO SPACE
                   MOVE FILE-IN (IN-SUB : END) TO COMMENT-AREA
               END-IF 
               GO TO GET-NEXT-TOKEN-EXIT
           END-IF.
           IF CUR-CHAR-COMP-1 IS GREATER THAN 36
             AND CUR-CHAR IS NOT EQUAL TO "*" 
             AND CUR-CHAR IS NOT EQUAL TO "$" 
               IF CUR-CHAR IS NOT EQUAL TO "="
                   MOVE "," TO WORKA (WK-SUB) 
               END-IF 
               ADD 1 TO IN-SUB
               GO TO GET-NEXT-TOKEN-EXIT
           END-IF.
       SCAN-LOOP. 
           ADD 1 TO IN-SUB. 
           IF IN-SUB IS GREATER THAN 80 
               GO TO SCAN-LOOP-END
           END-IF.
           MOVE FILE-LINE (IN-SUB) TO CUR-CHAR. 
           IF CUR-CHAR IS EQUAL TO SPACE
               GO TO SCAN-LOOP
           END-IF.
           IF CUR-CHAR-COMP-1 IS GREATER THAN 36
             AND CUR-CHAR IS NOT EQUAL TO "*" 
             AND CUR-CHAR IS NOT EQUAL TO "$" 
               GO TO SCAN-LOOP-END. 
           ADD 1 TO WK-SUB. 
           MOVE CUR-CHAR TO WORKA (WK-SUB). 
           GO TO SCAN-LOOP. 
       SCAN-LOOP-END. 
           IF WK-SUB IS GREATER THAN 30 
               MOVE MSG-25 TO STD-REPORT-REC
               PERFORM PROCESS-ERROR THRU PROCESS-ERROR-EXIT
               MOVE 30 TO WK-SUB
               MOVE SPACES TO WORK-AREA (31 : END)
           END-IF.
       GET-NEXT-TOKEN-EXIT. 
           EXIT.
  
  
      ******************************************************************
      * 
      *    GET-PARAMETER-VALUE THRU GET-PARAMETER-VALUE-EXIT
      * 
      *    SCAN OVER " = PARAMETER-VALUE" AND LEAVE PARAMETER-VALUE 
      *    IN WORK-AREA.  IF ANY SYNTAX ERROR, DIAGNOSE ERROR AND 
      *    RETURN CONTROL TO LOOP-10 TO SKIP THIS FILE STATEMENT
      *    AND SEARCH FOR NEXT FILE STATEMENT 
      * 
      *    ON INPUT 
      *    WORK-AREA = PARAMETER NAME 
      * 
      *    ON OUTPUT
      *    PARAMETER-NAME-1 = PARAMETER NAME
      *    IF NO SYNTAX ERROR 
      *        WORK-AREA = PARAMETER-VALUE
      *    IF SYNTAX ERROR AND THIS FILE STATEMENT IS TO BE SKIPPED 
      *        RETURN CONTROL TO LOOP-10, NOT TO CALLER 
      * 
      ******************************************************************
  
       GET-PARAMETER-VALUE. 
           MOVE WORK-AREA TO PARAMETER-NAME-1, PARAMETER-NAME.
           PERFORM GET-NEXT-TOKEN THRU GET-NEXT-TOKEN-EXIT. 
           IF WORK-AREA IS NOT EQUAL TO "=" 
               MOVE MSG-360 TO STD-REPORT-REC 
               PERFORM PROCESS-ERROR THRU PROCESS-ERROR-EXIT
               GO TO LOOP-10
           END-IF.
           PERFORM GET-NEXT-TOKEN THRU GET-NEXT-TOKEN-EXIT. 
           IF WORK-AREA IS EQUAL TO "," 
             OR WORK-AREA IS EQUAL TO "." 
             OR WORK-AREA IS EQUAL TO "=" 
               MOVE MSG-365 TO STD-REPORT-REC 
               PERFORM PROCESS-ERROR THRU PROCESS-ERROR-EXIT
               GO TO LOOP-10
           END-IF.
       GET-PARAMETER-VALUE-EXIT.
           EXIT.
  
      ******************************************************************
      * 
      *    PROCESS-ERROR THRU PROCESS-ERROR-EXIT
      * 
      *    PRINTS ERROR MESSAGE.  SETS RETURN-CODE TO 8.
      * 
      *    ON INPUT 
      *    STD-REPORT-REC CONTAINS ERROR MESSAGE
      * 
      *    ON OUTPUT
      *    ERROR MESSAGE PRINTED
      *    RETURN-CODE = 8
      * 
      ******************************************************************
  
       PROCESS-ERROR. 
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           MOVE 8 TO RETURN-CODE. 
       PROCESS-ERROR-EXIT.
           EXIT.
  
  
      ******************************************************************
      * 
      *    READ-FILEFIL THRU READ-FILEFIL-EXIT
      * 
      *    READ NEXT NONBLANK RECORD OF FILEFIL 
      * 
      *    ON OUTPUT
      *    IF END-OF-FILE ENCOUNTERED 
      *        RETURN CONTROL TO FILE-END 
      *    IF END-OF-FILE NOT ENCOUNTERED 
      *        FILE-IN CONTAINS NEXT NONBLANK RECORD
      *        NEXT RECORD WRITTEN TO OUTPUT FILE 
      *        IN-SUB = 1 
      * 
      ******************************************************************
  
       READ-FILEFIL.
           READ FILE-FILE AT END
               GO TO READ-FILEFIL-10. 
           GO TO READ-FILEFIL-20. 
       READ-FILEFIL-10. 
           IF FIRST-TIME IS EQUAL TO "T"
               MOVE "FILEFIL" TO EMPTY-FILE-NAME
               MOVE MSG-385 TO STD-REPORT-REC 
               PERFORM PROCESS-ERROR THRU PROCESS-ERROR-EXIT
           END-IF.
           GO TO FILE-END.
       READ-FILEFIL-20. 
           MOVE "F" TO FIRST-TIME.
           IF FILE-IN IS EQUAL TO SPACES
               GO TO READ-FILEFIL.
           MOVE FILE-IN TO STD-REPORT-REC.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           MOVE 1 TO IN-SUB.
       READ-FILEFIL-EXIT. 
           EXIT.
  
  
       USER-ROUTINE.
           GO TO USER-ROUTINE-XIT.
       USER-ROUTINE-XIT.
           EXIT.
  
  
      ******************************************************************
      * 
      *    WRITE-AREAA-FILE THRU WRITE-AREAA-FILE-EXIT
      * 
      *    WRITE OUT-AREAA-FILE-REC AND, IF THE FILE STATEMENT
      *    CONTAINED A COMMENT, OUT-NOTE-REC FOR EVERY MASTER AREA IN 
      *    ISFILE WHOSE NAME MATCHES FILE-NAME. 
      * 
      *    ON INPUT 
      *    IS-REC CONTAINS ISFILE RECORD OF FIRST MASTER AREA IN ISFILE 
      *      WHOSE NAME MATCHES FILE-NAME 
      *    OUT-AREAA-FILE-ARRAY SET UP
      *    COMMENT-AREA SET UP
      * 
      *    ON OUTPUT
      *    OUT-AREAA-FILE-REC AND, IF NECESSARY, OUT-NOTE-REC WRITTEN TO
      *      WRKFILE FOR EVERY MASTER AREA IN ISFILE WHOSE NAME MATCHES 
      *      FILE-NAME
      * 
      ******************************************************************
  
       WRITE-AREAA-FILE.
           IF OUT-AREAA-FILE-ARRAY IS EQUAL TO SPACES 
               GO TO WRITE-AREAA-FILE-30. 
       WRITE-AREAA-FILE-10. 
           MOVE IS-CATNAME TO OUT-CATNAME.
           ADD 1 TO STRUCT-COUNT. 
           MOVE STRUCT-COUNT TO OUT-STCR. 
           MOVE IS-CDCS-NAME TO OUT-CDCS-NAME.
           CALL "WRKFOUT".
           IF COMMENT-AREA IS NOT EQUAL TO SPACES 
               ADD 1 TO STRUCT-COUNT
               MOVE STRUCT-COUNT TO OUT-STCR
               MOVE "01" TO OUT-FIELD-TYPE
               MOVE OUT-NOTE TO HOLD-OUT-NOTE 
               MOVE COMMENT-AREA TO OUT-NOTE
               CALL "WRKFOUT" 
               MOVE "05" TO OUT-FIELD-TYPE
               MOVE HOLD-OUT-NOTE TO OUT-NOTE 
           END-IF.
       WRITE-AREAA-FILE-20. 
           READ IS-FILE 
               AT END GO TO WRITE-AREAA-FILE-30.
           IF IS-ENTITY-TYPE IS NOT EQUAL TO "22" 
               GO TO WRITE-AREAA-FILE-30. 
           IF IS-CDCS-NAME (1 : 7) IS NOT EQUAL TO FILE-NAME
               GO TO WRITE-AREAA-FILE-20. 
           IF IS-AREA-MASTER IS NOT EQUAL TO "M"
               GO TO WRITE-AREAA-FILE-20. 
           GO TO WRITE-AREAA-FILE-10. 
       WRITE-AREAA-FILE-30. 
           MOVE SPACES TO COMMENT-AREA. 
       WRITE-AREAA-FILE-EXIT. 
           EXIT.
