*DECK DCCVT0320 
       IDENTIFICATION DIVISION. 
       PROGRAM-ID. CVT0320. 
*CALL COPYRIGHT 
      *    THIS PROGRAM GENERATES TRANSACTIONS FOR THE UPDATE FROM
      *    CDCS FOR DBPROC, ELEMENT, GROUP, RECORD, AND FILE ENTITIES.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION. 
       SOURCE-COMPUTER. CYBER.
       OBJECT-COMPUTER. CYBER.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT SYSPRINT ASSIGN TO "OUTPUT".
       DATA DIVISION. 
       FILE SECTION.
*CALL SYSPRTFD
*CALL CVTCOM
       01  PRINT-AREA.
*CALL WKPRINT 
*CALL WRKFHDR 
*CALL WRKREDEF
*CALL PNCHCOM 
  
  
       WORKING-STORAGE SECTION. 
       01  ADD-LINE.
           03  FILLER                      PICTURE X(4) VALUE "ADD ". 
           03  ADD-TYPE                    PICTURE X(3).
           03  FILLER                      PICTURE X    VALUE "=".
           03  ADD-NAME                    PICTURE X(32). 
       01  DES-LINE1. 
           05  FILLER                      PICTURE X(5)   VALUE "0001 ".
           05  FILLER                      PICTURE X(51)  VALUE 
                "THIS ENTRY WAS CREATED BY THE CONVERT FACILITY ON".
           05  DES-DATE                    PICTURE X(8).
       01  CATEGORIES.
           03  ALIAS-CAT                   PICTURE XXX VALUE "ALI". 
           03  ATTRIBUTE-CAT               PICTURE XXX VALUE "ATT". 
           03  CONTROL-CAT                 PICTURE XXX VALUE "CON". 
           03  DESCRIPTION-CAT             PICTURE XXX VALUE "DES". 
           03  MDINFO-CAT                  PICTURE XXX VALUE "MDI". 
           03  NAME-CAT                    PICTURE XXX VALUE "NAM". 
           03  OTHER-CAT                   PICTURE XXX VALUE "OTH". 
           03  PROCESS-CAT                 PICTURE XXX VALUE "PRO". 
           03  STRUCTURE-CAT               PICTURE XXX VALUE "STR". 
           03  UNIT-CAT                    PICTURE XXX VALUE "UNI". 
           03  VALUE-CAT                   PICTURE XXX VALUE "VAL". 
       01  CATEGORY-TYPES.
           03  ALIAS-TYPE                  PICTURE XXX VALUE "211". 
           03  ATTRIBUTE-TYPE              PICTURE XXX VALUE "210". 
           03  COMMENT-TYPE                PICTURE XXX VALUE "001". 
           03  MDINFO-TYPE                 PICTURE XXX VALUE "450". 
           03  NAME-TYPE                   PICTURE XXX VALUE "000". 
           03  OTHER-TYPE                  PICTURE XXX VALUE "900". 
           03  PROCESS-TYPE                PICTURE XXX VALUE "400". 
           03  STRUCTURE-TYPE              PICTURE XXX VALUE "300". 
           03  UNIT-TYPE                   PICTURE XXX VALUE "220". 
           03  VALUE-TYPE                  PICTURE XXX VALUE "110". 
       01  ENTRY-BREAK-MSG. 
           03  FILLER                      PICTURE XX VALUE SPACE.
           03  DISP-COUNT                  PICTURE ZZZZZ9.
           03  FILLER                      PICTURE X VALUE SPACE. 
           03  DISP-NAME                   PICTURE X(4).
           03  FILLER                      PICTURE X(27) VALUE
           "ENTRIES HAVE BEEN GENERATED". 
       01  ENTRY-NAMES. 
           03  DBPROC-NAME                 PICTURE XXX VALUE "DBP". 
           03  ELEMENT-NAME                PICTURE XXX VALUE "ELE". 
           03  GROUP-NAME                  PICTURE XXX VALUE "GRO". 
           03  RECORD-NAME                 PICTURE XXX VALUE "REC". 
           03  FILE-NAME                   PICTURE XXX VALUE "FIL". 
       01  ENTRY-TYPES. 
           03  DBPROC-TYPE                 PICTURE XX  VALUE "03".
           03  ELEMENT-TYPE                PICTURE XX  VALUE "05".
           03  GROUP-TYPE                  PICTURE XX  VALUE "10".
           03  RECORD-TYPE                 PICTURE XX  VALUE "13".
           03  FILE-TYPE                   PICTURE XX  VALUE "20".
       01  FIELD-AREA.
           03  FIELD-NAME                  PICTURE X(4).
           03  FIELD-VALUE                 PICTURE X(66). 
       01  FIELD-CHAR-ARRAY REDEFINES FIELD-AREA. 
           03  FIELD-CHAR                  PICTURE X OCCURS 70 TIMES. 
       01  SAVE-AREAS.
           03  SAVE-ENTRY-TYPE             PICTURE XX    VALUE SPACE. 
           03  SAVE-ENTRY-NAME             PICTURE XXX. 
           03  SAVE-CATEGORY               PICTURE XXX. 
           03  SAVE-FIELD                  PICTURE XX.
           03  SAVE-CATNAME                PICTURE X(32). 
       01  CATEGORY-LINE                   PICTURE 9(4).
       01  DONE                            PICTURE X. 
       01  ENTRY-COUNT                     PICTURE 9(6) VALUE ZERO. 
       01  MAX-FIELD-LEN                   PICTURE 99.
       01  NUM-CHARS                       PICTURE 99.
       01  START-CHAR-POS                  PICTURE 99.
       01  SSREL-START-CHAR-POS            PICTURE 99.
       PROCEDURE DIVISION.
       BEGIN-PARA.
           MOVE "O" TO WRKF-FUNCTION-CODE, PNCH-FUNCTION-CODE.
           CALL "PNCHIO". 
           CALL "WRKFIO". 
           MOVE "R" TO WRKF-FUNCTION-CODE.
           MOVE "W" TO PNCH-FUNCTION-CODE.
           OPEN OUTPUT SYSPRINT.
           MOVE "$UPDATE" TO UPD-TRANS. 
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
           MOVE PRT-CURRENT-DATE TO DES-DATE. 
      ******************************************************************
      *    M A I N    L O O P 
      ******************************************************************
       MAIN-LOOP. 
           MOVE SPACES TO FIELD-AREA. 
           CALL "WRKFIO". 
           IF END-SW IS EQUAL TO "E"
               GO TO EOJ. 
       MAIN-LOOP-10.
           IF OUT-ENTRY-TYPE IS NOT EQUAL TO SAVE-ENTRY-TYPE
               PERFORM ENTRY-BREAK THRU ENTRY-BREAK-EXIT. 
           IF OUT-ENTRY-TYPE IS EQUAL TO DBPROC-TYPE
               PERFORM CREATE-DBPROC THRU CREATE-DBPROC-EXIT
               GO TO MAIN-LOOP
           END-IF.
           IF OUT-ENTRY-TYPE IS EQUAL TO ELEMENT-TYPE 
               PERFORM CREATE-ELEMENT THRU CREATE-ELEMENT-EXIT
               GO TO MAIN-LOOP
           END-IF.
           IF OUT-ENTRY-TYPE IS EQUAL TO GROUP-TYPE 
               PERFORM CREATE-GROUP THRU CREATE-GROUP-EXIT
               GO TO MAIN-LOOP
           END-IF.
           IF OUT-ENTRY-TYPE IS EQUAL TO RECORD-TYPE
               PERFORM CREATE-RECORD THRU CREATE-RECORD-EXIT
               GO TO MAIN-LOOP
           END-IF.
           IF OUT-ENTRY-TYPE IS EQUAL TO FILE-TYPE
               PERFORM CREATE-FILE THRU CREATE-FILE-EXIT
               GO TO MAIN-LOOP
           END-IF.
       EOJ. 
           CLOSE SYSPRINT.
           EXIT PROGRAM.
  
      ******************************************************************
      * 
      *    CREATE-ADD-TRANS THRU CREATE-ADD-TRANS-EXIT
      * 
      *    RECORD (XX,000,00) READ.  WRITE TRANSACTION: 
      *    ADD YYY=OUT-CATNAME
      *    IF ELEMENT IS EALIASOF ANOTHER ELEMENT, WRITE TRANSACTION: 
      *    CON
      *    0001 EAL=OUT-EALIASOF-NAME 
      *    IF CATNAME IS DIFFERENT FROM CDCS-NAME, WRITE TRANSACTION: 
      *    NAM
      *    0001 DMS=OUT-CDCS-NAME 
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (00,001,00) 
      *    ENTRY-COUNT = NUMBER OF ELEMENTS OF THIS TYPE
      * 
      *    ON OUTPUT
      *    TRANSACTIONS SPECIFIED ABOVE WRITTEN TO PNCHFIL
      *    ENTRY-COUNT UPDATED
      *    IF NAM CATEGORY INITIALIZED
      *        SAVE-CATEGORY = "001"
      *        CATEGORY-LINE = 5
      * 
      ******************************************************************
  
       CREATE-ADD-TRANS.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           ADD 1 TO ENTRY-COUNT.
           MOVE SAVE-ENTRY-NAME TO ADD-TYPE.
           MOVE OUT-CATNAME TO ADD-NAME.
           MOVE ADD-LINE TO UPD-TRANS.
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
           MOVE DESCRIPTION-CAT TO UPD-TRANS. 
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
           MOVE DES-LINE1 TO UPD-TRANS. 
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
           IF OUT-EALIASOF-FLAG IS NOT EQUAL TO SPACE 
             AND OUT-EALIASOF-NAME IS NOT EQUAL TO SPACE
               MOVE CONTROL-CAT TO UPD-TRANS
               PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT
               MOVE 1 TO UPD-LINE-NO
               IF OUT-ENTRY-TYPE IS LESS THAN "20"
                   MOVE "EAL=" TO UPD-FIELD-NAME
               ELSE 
                   MOVE "VER=" TO UPD-FIELD-NAME
               END-IF 
               MOVE OUT-EALIASOF-NAME TO UPD-FIELD-VALUE
               PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT
           END-IF.
           IF OUT-CATNAME IS NOT EQUAL TO OUT-CDCS-NAME 
               MOVE NAME-CAT TO UPD-TRANS 
               PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT
               MOVE 5 TO UPD-LINE-NO, CATEGORY-LINE 
               MOVE "DMS=" TO UPD-FIELD-NAME
               MOVE OUT-CDCS-NAME TO UPD-FIELD-VALUE
               PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT
               MOVE "001" TO SAVE-CATEGORY
           END-IF.
       CREATE-ADD-TRANS-EXIT. 
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-ALIAS-LINE THRU CREATE-ALIAS-LINE-EXIT
      * 
      *    RECORD (05,211,05) READ.  WRITE CATEGORY LINE
      *    NNNN ADA=YYYY,ALE=ZZ.Z,AFO=... 
      *    TO PNCHFIL.  CALL INSERT-FIELD TO INSERT EACH FIELD NAME 
      *    AND VALUE SO THE FIELDS ARE INSERTED WITH NO BLANKS
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (05,211,05) 
      * 
      *    ON OUTPUT
      *    NNNN ADA=YYYY,ALE=ZZ.Z,AFO=... WRITTEN TO PNCHFIL
      * 
      ******************************************************************
  
       CREATE-ALIAS-LINE. 
           MOVE 6 TO START-CHAR-POS.
           MOVE OUT-ELEAL-CATEGORY-LINE TO UPD-LINE-NO. 
           IF OUT-ELEAL-ADATANAM IS NOT EQUAL TO SPACE
               MOVE "ADA=" TO FIELD-NAME
               MOVE OUT-ELEAL-ADATANAM TO FIELD-VALUE 
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEAL-ALENGTH IS NOT EQUAL TO SPACE 
               MOVE "ALE=" TO FIELD-NAME
               MOVE OUT-ELEAL-ALENGTH TO FIELD-VALUE
               MOVE 14 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEAL-AFORMAT IS NOT EQUAL TO SPACE 
               MOVE "AFO=" TO FIELD-NAME
               MOVE OUT-ELEAL-AFORMAT TO FIELD-VALUE
               MOVE 7 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEAL-APICTURE IS NOT EQUAL TO SPACE
               MOVE "API=" TO FIELD-NAME
               MOVE OUT-ELEAL-APICTURE TO FIELD-VALUE 
               MOVE 29 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEAL-AJUST IS NOT EQUAL TO SPACE 
               MOVE "AJU=" TO FIELD-NAME
               MOVE OUT-ELEAL-AJUST TO FIELD-VALUE
               MOVE 5 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEAL-ALIASYNC IS NOT EQUAL TO SPACE
               MOVE "ALI=" TO FIELD-NAME
               MOVE OUT-ELEAL-ALIASYNC TO FIELD-VALUE 
               MOVE 5 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           SUBTRACT 1 FROM START-CHAR-POS.
           MOVE SPACE TO UPD-TRANS (START-CHAR-POS : 1).
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
       CREATE-ALIAS-LINE-EXIT.
           EXIT.
      ******************************************************************
      * 
      *    CREATE-ATTRIBUTE-LINE THRU CREATE-ATTRIBUTE-LINE-EXIT
      * 
      *    RECORD (05,210,05) OR (10,210,05) READ.  WRITE CATEGORY LINE 
      *    0001 LEN=XX,FOR=YYY,PIC=...
      *    TO PNCHFIL.  CALL INSERT-FIELD TO INSERT EACH FIELD NAME 
      *    AND VALUE SO THE FIELDS ARE INSERTED WITH NO BLANKS
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (05,210,05) 
      * 
      *    ON OUTPUT
      *    0001 LEN=XX,FOR=YYY,PIC=... WRITTEN TO PNCHFIL 
      * 
      ******************************************************************
  
       CREATE-ATTRIBUTE-LINE. 
           MOVE 1 TO UPD-LINE-NO. 
           MOVE 6 TO START-CHAR-POS.
           IF OUT-ELEAT-LENGTH IS NOT EQUAL TO SPACE
               MOVE "LEN=" TO FIELD-NAME
               MOVE OUT-ELEAT-LENGTH TO FIELD-VALUE 
               MOVE 14 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEAT-FORMAT IS NOT EQUAL TO SPACE
               MOVE "FOR=" TO FIELD-NAME
               MOVE OUT-ELEAT-FORMAT TO FIELD-VALUE 
               MOVE 7 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEAT-PICTURE IS NOT EQUAL TO SPACE 
               MOVE "PIC=" TO FIELD-NAME
               MOVE OUT-ELEAT-PICTURE TO FIELD-VALUE
               MOVE 29 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEAT-JUST IS NOT EQUAL TO SPACE
               MOVE "JUS=" TO FIELD-NAME
               MOVE OUT-ELEAT-JUST TO FIELD-VALUE 
               MOVE 5 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEAT-SYNC IS NOT EQUAL TO SPACE
               MOVE "SYN=" TO FIELD-NAME
               MOVE OUT-ELEAT-SYNC TO FIELD-VALUE 
               MOVE 5 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           SUBTRACT 1 FROM START-CHAR-POS.
           MOVE SPACE TO UPD-TRANS (START-CHAR-POS : 1).
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
       CREATE-ATTRIBUTE-LINE-EXIT.
           EXIT.
  
  
  
      ******************************************************************
      * 
      *    CREATE-COMMENT-LINE THRU CREATE-COMMENT-LINE-EXIT
      * 
      *    RECORD (XX,001,00) READ.  WRITE CATEGORY LINE
      *    NNNN *COMMENT
      *    TO PNCHFIL.
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (XX,001,00) 
      *    CATEGORY-LINE = LAST PROCESSED CATEGORY LINE NUMBER
      * 
      *    ON OUTPUT
      *    NNNN *COMMENT WRITTEN TO PNCHFIL 
      *    CATEGORY-LINE UPDATED
      * 
      ******************************************************************
  
       CREATE-COMMENT-LINE. 
           ADD 5 TO CATEGORY-LINE.
           MOVE CATEGORY-LINE TO UPD-LINE-NO. 
           MOVE "*" TO UPD-AST. 
           MOVE OUT-NOTE TO UPD-COMMENT.
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
       CREATE-COMMENT-LINE-EXIT.
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-DBPROC THRU CREATE-DBPROC-EXIT
      * 
      *    RECORD (03,000,00) READ.  CALL CREATE-ADD-TRANS
      *    TO CREATE TRANSACTIONS TO ADD ENTRY AND TO INCLUDE 
      *    CONTROL AND NAMES CATEGORIES IF NECESSARY
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (03,000,00) 
      * 
      *    ON OUTPUT
      *    PNCHFIL CONTAINS TRANSACTIONS TO ADD ENTRY 
      * 
      ******************************************************************
  
       CREATE-DBPROC. 
           IF OUT-CATEGORY-TYPE IS EQUAL TO NAME-TYPE 
               PERFORM CREATE-ADD-TRANS THRU CREATE-ADD-TRANS-EXIT. 
       CREATE-DBPROC-EXIT.
           EXIT.
  
  
      ******************************************************************
      * 
      *    CREATE-ELEMENT THRU CREATE-ELEMENT-EXIT
      * 
      *    RECORD (05,XXX,YY) READ.  IF XXX=0, CALL CREATE-ADD-TRANS
      *    TO CREATE TRANSACTIONS TO ADD ENTRY AND TO INCLUDE 
      *    CONTROL AND NAMES CATEGORIES IF NECESSARY.  IF XXX IS EQUAL
      *    TO SOME OTHER CATEGORY TYPE, CALL APPROPRIATE SUBROUTINE 
      *    TO PROCESS THAT CATEGORY.
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (05,XXX,YY) 
      *    SAVE-CATEGORY = LAST PROCESSED CATEGORY
      * 
      *    ON OUTPUT
      *    PNCHFIL CONTAINS APPROPRIATE TRANSACTIONS
      *    SAVE-CATEGORY = XXX
      * 
      ******************************************************************
  
       CREATE-ELEMENT.
           IF OUT-CATEGORY-TYPE IS EQUAL TO NAME-TYPE 
               MOVE SPACES TO SAVE-CATEGORY 
               PERFORM CREATE-ADD-TRANS THRU CREATE-ADD-TRANS-EXIT
               GO TO CREATE-ELEMENT-EXIT
           END-IF.
           IF SAVE-CATEGORY IS NOT EQUAL TO OUT-CATEGORY-TYPE 
               MOVE ZERO TO CATEGORY-LINE 
               MOVE OUT-CATEGORY-TYPE TO SAVE-CATEGORY
               IF SAVE-CATEGORY IS EQUAL TO COMMENT-TYPE
                   MOVE NAME-CAT TO UPD-TRANS 
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO VALUE-TYPE
                   MOVE VALUE-CAT TO UPD-TRANS
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO ATTRIBUTE-TYPE
                   MOVE ATTRIBUTE-CAT TO UPD-TRANS
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO ALIAS-TYPE
                   MOVE ALIAS-CAT TO UPD-TRANS
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO PROCESS-TYPE
                   MOVE PROCESS-CAT TO UPD-TRANS
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO OTHER-TYPE
                   MOVE OTHER-CAT TO UPD-TRANS
               END-IF 
               PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO COMMENT-TYPE
               PERFORM CREATE-COMMENT-LINE THRU CREATE-COMMENT-LINE-EXIT
               GO TO CREATE-ELEMENT-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO VALUE-TYPE
               PERFORM CREATE-VALUE-LINE THRU CREATE-VALUE-LINE-EXIT
               GO TO CREATE-ELEMENT-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO ATTRIBUTE-TYPE
               PERFORM CREATE-ATTRIBUTE-LINE
                 THRU CREATE-ATTRIBUTE-LINE-EXIT
               GO TO CREATE-ELEMENT-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO ALIAS-TYPE
               PERFORM CREATE-ALIAS-LINE THRU CREATE-ALIAS-LINE-EXIT
               GO TO CREATE-ELEMENT-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO PROCESS-TYPE
               PERFORM CREATE-PROCESS-LINE
                 THRU CREATE-PROCESS-LINE-EXIT
               GO TO CREATE-ELEMENT-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO OTHER-TYPE
               PERFORM CREATE-OTHER-LINE
                 THRU CREATE-OTHER-LINE-EXIT
               GO TO CREATE-ELEMENT-EXIT
           END-IF.
       CREATE-ELEMENT-EXIT. 
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-FILE THRU CREATE-FILE-EXIT
      * 
      *    RECORD (20,XXX,YY) READ.  IF XXX=0, CALL CREATE-ADD-TRANS
      *    TO CREATE TRANSACTIONS TO ADD ENTRY AND TO INCLUDE 
      *    CONTROL AND NAMES CATEGORIES IF NECESSARY.  IF XXX IS EQUAL
      *    TO SOME OTHER CATEGORY TYPE, CALL APPROPRIATE SUBROUTINE 
      *    TO PROCESS THAT CATEGORY.
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (20,XXX,YY) 
      *    SAVE-CATEGORY = LAST PROCESSED CATEGORY
      * 
      *    ON OUTPUT
      *    PNCHFIL CONTAINS APPROPRIATE TRANSACTIONS
      *    SAVE-CATEGORY = XXX
      * 
      ******************************************************************
  
       CREATE-FILE. 
           IF OUT-CATEGORY-TYPE IS EQUAL TO NAME-TYPE 
               MOVE SPACES TO SAVE-CATEGORY 
               PERFORM CREATE-ADD-TRANS THRU CREATE-ADD-TRANS-EXIT
               GO TO CREATE-FILE-EXIT 
           END-IF.
           IF SAVE-CATEGORY IS NOT EQUAL TO OUT-CATEGORY-TYPE 
               MOVE ZERO TO CATEGORY-LINE 
               MOVE OUT-CATEGORY-TYPE TO SAVE-CATEGORY
               IF SAVE-CATEGORY IS EQUAL TO COMMENT-TYPE
                   MOVE NAME-CAT TO UPD-TRANS 
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO UNIT-TYPE 
                   MOVE UNIT-CAT TO UPD-TRANS 
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO STRUCTURE-TYPE
                   MOVE STRUCTURE-CAT TO UPD-TRANS
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO MDINFO-TYPE 
                   MOVE MDINFO-CAT TO UPD-TRANS 
               END-IF 
               PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO COMMENT-TYPE
               PERFORM CREATE-COMMENT-LINE THRU CREATE-COMMENT-LINE-EXIT
               GO TO CREATE-FILE-EXIT 
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO UNIT-TYPE 
               PERFORM CREATE-UNIT-LINE 
                 THRU CREATE-UNIT-LINE-EXIT 
               GO TO CREATE-FILE-EXIT 
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO STRUCTURE-TYPE
               PERFORM CREATE-FILE-STR-LINE 
                 THRU CREATE-FILE-STR-LINE-EXIT 
               GO TO CREATE-FILE-EXIT 
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO MDINFO-TYPE 
               PERFORM CREATE-FILE-MD-LINE
                 THRU CREATE-FILE-MD-LINE-EXIT
               GO TO CREATE-FILE-EXIT 
           END-IF.
       CREATE-FILE-EXIT.
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-FILE-MD-LINE THRU CREATE-FILE-MD-LINE-EXIT
      * 
      *    RECORD (20,450,05) READ.  WRITE CATEGORY LINE
      *    NNNN FTY=XXXX,UN=YYYY,PW=ZZZZ,FAM=AAAA.... 
      *    TO PNCHFIL.  CALL INSERT-FIELD TO INSERT EACH FIELD NAME 
      *    AND VALUE SO THE FIELDS ARE INSERTED WITH NO BLANKS
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (20,450,05) 
      * 
      *    ON OUTPUT
      *    NNNN FTY=XXXX,UN=YYYY,PW=ZZZZ,FAM=AAAA.... 
      * 
      ******************************************************************
  
       CREATE-FILE-MD-LINE. 
           MOVE 6 TO START-CHAR-POS.
           ADD 5 TO CATEGORY-LINE.
           MOVE CATEGORY-LINE TO UPD-LINE-NO. 
           IF OUT-FILEM-FTYPE IS NOT EQUAL TO SPACE 
               MOVE "FTY=" TO FIELD-NAME
               MOVE OUT-FILEM-FTYPE TO FIELD-VALUE
               MOVE 5 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-FILEM-UN IS NOT EQUAL TO SPACE
               MOVE "UN=" TO FIELD-NAME 
               MOVE OUT-FILEM-UN TO FIELD-AREA (4 : END)
               MOVE 10 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-FILEM-PW IS NOT EQUAL TO SPACE
               MOVE "PW=" TO FIELD-NAME 
               MOVE OUT-FILEM-PW TO FIELD-AREA (4 : END)
               MOVE 10 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-FILEM-FAMILY IS NOT EQUAL TO SPACE
               MOVE "FAM=" TO FIELD-NAME
               MOVE OUT-FILEM-FAMILY TO FIELD-VALUE 
               MOVE 11 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-FILEM-PACK IS NOT EQUAL TO SPACE
               MOVE "PAC=" TO FIELD-NAME
               MOVE OUT-FILEM-PACK TO FIELD-VALUE 
               MOVE 11 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-FILEM-SET IS NOT EQUAL TO SPACE 
               MOVE "SET=" TO FIELD-NAME
               MOVE OUT-FILEM-SET TO FIELD-VALUE
               MOVE 11 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-FILEM-UNLMT IS NOT EQUAL TO SPACE 
               MOVE "UNL=" TO FIELD-NAME
               MOVE OUT-FILEM-UNLMT TO FIELD-VALUE
               MOVE 6 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-FILEM-UPLMT IS NOT EQUAL TO SPACE 
               MOVE "UPL=" TO FIELD-NAME
               MOVE OUT-FILEM-UPLMT TO FIELD-VALUE
               MOVE 6 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           SUBTRACT 1 FROM START-CHAR-POS.
           MOVE SPACE TO UPD-TRANS (START-CHAR-POS : 1).
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
       CREATE-FILE-MD-LINE-EXIT.
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-FILE-STR-LINE THRU CREATE-FILE-STR-LINE-EXIT
      * 
      *    RECORD (20,300,05) READ.  WRITE CATEGORY LINE
      *    NNNN CAT=XXX 
      *    TO PNCHFIL.
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (20,300,05) 
      * 
      *    ON OUTPUT
      *    NNNN CAT=XXX WRITTEN TO PNCHFIL
      * 
      ******************************************************************
  
       CREATE-FILE-STR-LINE.
           ADD 5 TO CATEGORY-LINE.
           MOVE CATEGORY-LINE TO UPD-LINE-NO. 
           MOVE "CAT=" TO UPD-FIELD-NAME. 
           MOVE OUT-FILES-CATNAME TO UPD-FIELD-VALUE. 
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
       CREATE-FILE-STR-LINE-EXIT. 
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-GROUP THRU CREATE-GROUP-EXIT
      * 
      *    RECORD (10,XXX,YY) READ.  IF XXX=0, CALL CREATE-ADD-TRANS
      *    TO CREATE TRANSACTIONS TO ADD ENTRY AND TO INCLUDE 
      *    CONTROL AND NAMES CATEGORIES IF NECESSARY.  IF XXX IS EQUAL
      *    TO SOME OTHER CATEGORY TYPE, CALL APPROPRIATE SUBROUTINE 
      *    TO PROCESS THAT CATEGORY.
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (10,XXX,YY) 
      *    SAVE-CATEGORY = LAST PROCESSED CATEGORY
      * 
      *    ON OUTPUT
      *    PNCHFIL CONTAINS APPROPRIATE TRANSACTIONS
      *    SAVE-CATEGORY = XXX
      * 
      ******************************************************************
  
       CREATE-GROUP.
           IF OUT-CATEGORY-TYPE IS EQUAL TO NAME-TYPE 
               MOVE SPACES TO SAVE-CATEGORY 
               PERFORM CREATE-ADD-TRANS THRU CREATE-ADD-TRANS-EXIT
               GO TO CREATE-GROUP-EXIT
           END-IF.
           IF SAVE-CATEGORY IS NOT EQUAL TO OUT-CATEGORY-TYPE 
               MOVE ZERO TO CATEGORY-LINE 
               MOVE OUT-CATEGORY-TYPE TO SAVE-CATEGORY
               IF SAVE-CATEGORY IS EQUAL TO COMMENT-TYPE
                   MOVE NAME-CAT TO UPD-TRANS 
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO ATTRIBUTE-TYPE
                   MOVE ATTRIBUTE-CAT TO UPD-TRANS
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO STRUCTURE-TYPE
                   MOVE STRUCTURE-CAT TO UPD-TRANS
               END-IF 
               PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO COMMENT-TYPE
               PERFORM CREATE-COMMENT-LINE THRU CREATE-COMMENT-LINE-EXIT
               GO TO CREATE-GROUP-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO ATTRIBUTE-TYPE
               PERFORM CREATE-ATTRIBUTE-LINE
                 THRU CREATE-ATTRIBUTE-LINE-EXIT
               GO TO CREATE-GROUP-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO STRUCTURE-TYPE
               PERFORM CREATE-GRP-REC-STR-LINE
                 THRU CREATE-GRP-REC-STR-LINE-EXIT
               GO TO CREATE-GROUP-EXIT
           END-IF.
       CREATE-GROUP-EXIT. 
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-GRP-REC-STR-LINE THRU CREATE-GRP-REC-STR-LINE-EXIT
      * 
      *    RECORD (10,300,XX) OR (13,300,XX) READ.
      *    IF XX = 01 WRITE CATEGORY LINE 
      *    NNNN * COMMENT 
      *    IF XX = 05 WRITE CATEGORY LINE 
      *    NNNN CAT=AAA,ALI=BBB,RED=... 
      *    IF XX = 10 WRITE CATEGORY LINE 
      *    NNNN FRO=AAA,TO =BBB,TAL=... 
      * 
      *    ON INPUT 
      *    CATEGORY-LINE = LAST PROCESSED CATEGORY LINE NUMBER
      *    OUT-REC = RECORD (10,300,XX) OR (13,300,XX)
      * 
      *    ON OUTPUT
      *    PNCHFIL CONTAINS CATEGORY LINES SPECIFIED ABOVE
      *    CATEGORY-LINE UPDATED
      * 
      ******************************************************************
  
       CREATE-GRP-REC-STR-LINE. 
           IF OUT-FIELD-TYPE IS EQUAL TO "01" 
               PERFORM CREATE-COMMENT-LINE THRU CREATE-COMMENT-LINE-EXIT
               GO TO CREATE-GRP-REC-STR-LINE-EXIT 
           END-IF.
           ADD 5 TO CATEGORY-LINE.
           MOVE CATEGORY-LINE TO UPD-LINE-NO. 
           MOVE 6 TO START-CHAR-POS.
           IF OUT-FIELD-TYPE IS NOT EQUAL TO "05" 
               GO TO CREATE-GRP-REC-STR-LINE-10.
           IF OUT-GRPS-CATNAME IS NOT EQUAL TO SPACE
               MOVE "CAT=" TO FIELD-NAME
               MOVE OUT-GRPS-CATNAME TO FIELD-VALUE 
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-ALIAS IS NOT EQUAL TO SPACE
             AND OUT-GRPS-ALIAS IS NOT EQUAL TO "0000"
               MOVE "ALI=" TO FIELD-NAME
               MOVE OUT-GRPS-ALIAS TO FIELD-VALUE 
               MOVE 8 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-REDEFINE IS NOT EQUAL TO SPACE 
               MOVE "RED=" TO FIELD-NAME
               MOVE OUT-GRPS-REDEFINE TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-RDALIAS IS NOT EQUAL TO SPACE
             AND OUT-GRPS-RDALIAS IS NOT EQUAL TO "0000"
               MOVE "RDA=" TO FIELD-NAME
               MOVE OUT-GRPS-RDALIAS TO FIELD-VALUE 
               MOVE 8 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-USAGE IS NOT EQUAL TO SPACE
               MOVE "USA=" TO FIELD-NAME
               MOVE OUT-GRPS-USAGE TO FIELD-VALUE 
               MOVE 11 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-FILLER IS NOT EQUAL TO SPACE 
             AND OUT-GRPS-FILLER IS NOT EQUAL TO "0000" 
               MOVE "FIL=" TO FIELD-NAME
               MOVE OUT-GRPS-FILLER TO FIELD-VALUE
               MOVE 8 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           GO TO CREATE-GRP-REC-STR-LINE-100. 
       CREATE-GRP-REC-STR-LINE-10.
           IF OUT-FIELD-TYPE IS NOT EQUAL TO "10" 
               GO TO CREATE-GRP-REC-STR-LINE-35.
           IF OUT-GRPS-FROM IS NOT EQUAL TO SPACE 
               MOVE "FRO=" TO FIELD-NAME
               MOVE OUT-GRPS-FROM TO FIELD-VALUE
               MOVE 8 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-TO IS NOT EQUAL TO SPACE 
               MOVE "TO=" TO FIELD-NAME 
               MOVE OUT-GRPS-TO TO FIELD-AREA (4 : END) 
               MOVE 35 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-TALIAS IS NOT EQUAL TO SPACE 
             AND OUT-GRPS-TALIAS IS NOT EQUAL TO "0000" 
               MOVE "TAL=" TO FIELD-NAME
               MOVE OUT-GRPS-TALIAS TO FIELD-VALUE
               MOVE 8 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-DEPEND IS NOT EQUAL TO SPACE 
               MOVE "DEP=" TO FIELD-NAME
               MOVE OUT-GRPS-DEPEND TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-DALIAS IS NOT EQUAL TO SPACE 
             AND OUT-GRPS-DALIAS IS NOT EQUAL TO "0000" 
               MOVE "DAL=" TO FIELD-NAME
               MOVE OUT-GRPS-DALIAS TO FIELD-VALUE
               MOVE 8 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-D1QUAL IS NOT EQUAL TO SPACE 
               MOVE "D1Q=" TO FIELD-NAME
               MOVE OUT-GRPS-D1QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-D2QUAL IS NOT EQUAL TO SPACE 
               MOVE "D2Q=" TO FIELD-NAME
               MOVE OUT-GRPS-D2QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-D3QUAL IS NOT EQUAL TO SPACE 
               MOVE "D3Q=" TO FIELD-NAME
               MOVE OUT-GRPS-D3QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-D4QUAL IS NOT EQUAL TO SPACE 
               MOVE "D4Q=" TO FIELD-NAME
               MOVE OUT-GRPS-D4QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-D5QUAL IS NOT EQUAL TO SPACE 
               MOVE "D5Q=" TO FIELD-NAME
               MOVE OUT-GRPS-D5QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           GO TO CREATE-GRP-REC-STR-LINE-100. 
       CREATE-GRP-REC-STR-LINE-35.
           IF OUT-FIELD-TYPE IS NOT EQUAL TO "35" 
               GO TO CREATE-GRP-REC-STR-LINE-60.
           IF OUT-GRPS-INDEX IS NOT EQUAL TO SPACE
               MOVE "IND=" TO FIELD-NAME
               MOVE OUT-GRPS-INDEX TO FIELD-VALUE 
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           GO TO CREATE-GRP-REC-STR-LINE-100. 
       CREATE-GRP-REC-STR-LINE-60.
           IF OUT-FIELD-TYPE IS NOT EQUAL TO "60" 
               GO TO CREATE-GRP-REC-STR-LINE-75.
           IF OUT-GRPS-KORDER IS NOT EQUAL TO SPACE 
               MOVE "KOR=" TO FIELD-NAME
               MOVE OUT-GRPS-KORDER TO FIELD-VALUE
               MOVE 5 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-KNAME IS NOT EQUAL TO SPACE
               MOVE "KNA=" TO FIELD-NAME
               MOVE OUT-GRPS-KNAME TO FIELD-VALUE 
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-KALIAS IS NOT EQUAL TO SPACE 
             AND OUT-GRPS-KALIAS IS NOT EQUAL TO "0000" 
               MOVE "KAL=" TO FIELD-NAME
               MOVE OUT-GRPS-KALIAS TO FIELD-VALUE
               MOVE 8 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           GO TO CREATE-GRP-REC-STR-LINE-100. 
       CREATE-GRP-REC-STR-LINE-75.
           IF OUT-FIELD-TYPE IS NOT EQUAL TO "75" 
               GO TO CREATE-GRP-REC-STR-LINE-87.
           IF OUT-GRPS-RENAMES IS NOT EQUAL TO SPACE
               MOVE "REN=" TO FIELD-NAME
               MOVE OUT-GRPS-RENAMES TO FIELD-VALUE 
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-RNALIAS IS NOT EQUAL TO SPACE
             AND OUT-GRPS-RNALIAS IS NOT EQUAL TO "0000"
               MOVE "RNA=" TO FIELD-NAME
               MOVE OUT-GRPS-RNALIAS TO FIELD-VALUE 
               MOVE 8 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-R1QUAL IS NOT EQUAL TO SPACE 
               MOVE "R1Q=" TO FIELD-NAME
               MOVE OUT-GRPS-R1QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-R2QUAL IS NOT EQUAL TO SPACE 
               MOVE "R2Q=" TO FIELD-NAME
               MOVE OUT-GRPS-R2QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-R3QUAL IS NOT EQUAL TO SPACE 
               MOVE "R3Q=" TO FIELD-NAME
               MOVE OUT-GRPS-R3QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-R4QUAL IS NOT EQUAL TO SPACE 
               MOVE "R4Q=" TO FIELD-NAME
               MOVE OUT-GRPS-R4QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-R5QUAL IS NOT EQUAL TO SPACE 
               MOVE "R5Q=" TO FIELD-NAME
               MOVE OUT-GRPS-D5QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           GO TO CREATE-GRP-REC-STR-LINE-100. 
       CREATE-GRP-REC-STR-LINE-87.
           IF OUT-FIELD-TYPE IS NOT EQUAL TO "87" 
               GO TO CREATE-GRP-REC-STR-LINE-100. 
           IF OUT-GRPS-THRU IS NOT EQUAL TO SPACE 
               MOVE "THR=" TO FIELD-NAME
               MOVE OUT-GRPS-THRU TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-THALIAS IS NOT EQUAL TO SPACE
             AND OUT-GRPS-THALIAS IS NOT EQUAL TO "0000"
               MOVE "THA=" TO FIELD-NAME
               MOVE OUT-GRPS-THALIAS TO FIELD-VALUE 
               MOVE 8 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-T1QUAL IS NOT EQUAL TO SPACE 
               MOVE "T1Q=" TO FIELD-NAME
               MOVE OUT-GRPS-T1QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-T2QUAL IS NOT EQUAL TO SPACE 
               MOVE "T2Q=" TO FIELD-NAME
               MOVE OUT-GRPS-T2QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-T3QUAL IS NOT EQUAL TO SPACE 
               MOVE "T3Q=" TO FIELD-NAME
               MOVE OUT-GRPS-T3QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-T4QUAL IS NOT EQUAL TO SPACE 
               MOVE "T4Q=" TO FIELD-NAME
               MOVE OUT-GRPS-T4QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-GRPS-T5QUAL IS NOT EQUAL TO SPACE 
               MOVE "T5Q=" TO FIELD-NAME
               MOVE OUT-GRPS-T5QUAL TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
       CREATE-GRP-REC-STR-LINE-100. 
           SUBTRACT 1 FROM START-CHAR-POS.
           MOVE SPACE TO UPD-TRANS (START-CHAR-POS : 1).
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
       CREATE-GRP-REC-STR-LINE-EXIT.
           EXIT.
  
  
  
      ******************************************************************
      * 
      *    CREATE-OTHER-LINE THRU CREATE-OTHER-LINE-EXIT
      * 
      *    RECORD (05,900,10) READ.  WRITE CATEGORY LINE
      *    NNNN 88L=OUT-ELEO-88LEVEL
      *    TO PNCHFIL.
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (05,900,10) 
      * 
      *    ON OUTPUT
      *    NNNN 88L=OUT-ELEO-88LEVEL
      * 
      ******************************************************************
  
       CREATE-OTHER-LINE. 
           ADD 5 TO CATEGORY-LINE.
           MOVE CATEGORY-LINE TO UPD-LINE-NO. 
           MOVE "88L=" TO UPD-FIELD-NAME. 
           MOVE OUT-ELEO-88LEVEL TO UPD-FIELD-VALUE.
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
       CREATE-OTHER-LINE-EXIT.
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-PROCESS-LINE THRU CREATE-PROCESS-LINE-EXIT
      * 
      *    RECORD (XX,400,YY) READ.  IF YY=5, WRITE CATEGORY LINE 
      *    NNNN DBP=AAA,TYP=BB,TIM=CC,OPT=DDD 
      *    TO PNCHFIL.
      *    IF YY=25, WRITE CATEGORY LINE
      *    NNNN RCD=AAA,RCA=BBB,RCQ=CCC 
      * 
      *    ON INPUT 
      *    CATEGORY-LINE = LAST PROCESSED CATEGORY LINE NUMBER
      *    OUT-REC = RECORD (XX,400,YY) 
      * 
      *    ON OUTPUT
      *    SPECIFIED TRANSACTIONS WRITTEN TO PNCHFIL
      *    CATEGORY-LINE UPDATED
      * 
      ******************************************************************
  
       CREATE-PROCESS-LINE. 
           ADD 5 TO CATEGORY-LINE.
           MOVE CATEGORY-LINE TO UPD-LINE-NO. 
           MOVE 6 TO START-CHAR-POS.
           IF OUT-FIELD-TYPE IS NOT EQUAL TO "05" 
               GO TO CREATE-PROCESS-LINE-25.
           IF OUT-ELEP-DBPROC IS NOT EQUAL TO SPACE 
               MOVE "DBP=" TO FIELD-NAME
               MOVE OUT-ELEP-DBPROC TO FIELD-VALUE
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEP-TYPEPROC IS NOT EQUAL TO SPACE 
               MOVE "TYP=" TO FIELD-NAME
               MOVE OUT-ELEP-TYPEPROC TO FIELD-VALUE
               MOVE 6 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEP-TIME IS NOT EQUAL TO SPACE 
               MOVE "TIM=" TO FIELD-NAME
               MOVE OUT-ELEP-TIME TO FIELD-VALUE
               MOVE 9 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-ELEP-OPTION IS NOT EQUAL TO SPACE 
               MOVE "OPT=" TO FIELD-NAME
               MOVE OUT-ELEP-OPTION TO FIELD-VALUE
               MOVE 13 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           GO TO CREATE-PROCESS-LINE-100. 
       CREATE-PROCESS-LINE-25.
           IF OUT-FIELD-TYPE IS NOT EQUAL TO "25" 
             OR OUT-ENTRY-TYPE IS NOT EQUAL TO "22" 
               GO TO CREATE-PROCESS-LINE-EXIT.
           IF OUT-AREAP-RCDATA IS NOT EQUAL TO SPACE
               MOVE "RCD=" TO FIELD-NAME
               MOVE OUT-AREAP-RCDATA TO FIELD-VALUE 
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-AREAP-RCALIAS IS NOT EQUAL TO SPACE 
             AND OUT-AREAP-RCALIAS IS NOT EQUAL TO "0000" 
               MOVE "RCA=" TO FIELD-NAME
               MOVE OUT-AREAP-RCALIAS TO FIELD-VALUE
               MOVE 8 TO MAX-FIELD-LEN
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-AREAP-RCQUAL IS NOT EQUAL TO SPACE
               MOVE "RCQ=" TO FIELD-NAME
               MOVE OUT-AREAP-RCQUAL TO FIELD-VALUE 
               MOVE 36 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
       CREATE-PROCESS-LINE-100. 
           SUBTRACT 1 FROM START-CHAR-POS.
           MOVE SPACE TO UPD-TRANS (START-CHAR-POS : 1).
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
       CREATE-PROCESS-LINE-EXIT.
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-RECORD THRU CREATE-RECORD-EXIT
      * 
      *    RECORD (13,XXX,YY) READ.  IF XXX=0, CALL CREATE-ADD-TRANS
      *    TO CREATE TRANSACTIONS TO ADD ENTRY AND TO INCLUDE 
      *    CONTROL AND NAMES CATEGORIES IF NECESSARY.  IF XXX IS EQUAL
      *    TO SOME OTHER CATEGORY TYPE, CALL APPROPRIATE SUBROUTINE 
      *    TO PROCESS THAT CATEGORY.
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (13,XXX,YY) 
      *    SAVE-CATEGORY = LAST PROCESSED CATEGORY
      * 
      *    ON OUTPUT
      *    PNCHFIL CONTAINS APPROPRIATE TRANSACTIONS
      *    SAVE-CATEGORY = XXX
      * 
      ******************************************************************
  
       CREATE-RECORD. 
           IF OUT-CATEGORY-TYPE IS EQUAL TO NAME-TYPE 
               MOVE SPACES TO SAVE-CATEGORY 
               PERFORM CREATE-ADD-TRANS THRU CREATE-ADD-TRANS-EXIT
               GO TO CREATE-RECORD-EXIT 
           END-IF.
           IF SAVE-CATEGORY IS NOT EQUAL TO OUT-CATEGORY-TYPE 
               MOVE ZERO TO CATEGORY-LINE 
               MOVE OUT-CATEGORY-TYPE TO SAVE-CATEGORY
               IF SAVE-CATEGORY IS EQUAL TO COMMENT-TYPE
                   MOVE NAME-CAT TO UPD-TRANS 
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO STRUCTURE-TYPE
                   MOVE STRUCTURE-CAT TO UPD-TRANS
               END-IF 
               IF SAVE-CATEGORY IS EQUAL TO PROCESS-TYPE
                   MOVE PROCESS-CAT TO UPD-TRANS
               END-IF 
               PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO COMMENT-TYPE
               PERFORM CREATE-COMMENT-LINE THRU CREATE-COMMENT-LINE-EXIT
               GO TO CREATE-RECORD-EXIT 
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO STRUCTURE-TYPE
               PERFORM CREATE-GRP-REC-STR-LINE
                 THRU CREATE-GRP-REC-STR-LINE-EXIT
               GO TO CREATE-RECORD-EXIT 
           END-IF.
           IF SAVE-CATEGORY IS EQUAL TO PROCESS-TYPE
               PERFORM CREATE-PROCESS-LINE
                 THRU CREATE-PROCESS-LINE-EXIT
               GO TO CREATE-RECORD-EXIT 
           END-IF.
       CREATE-RECORD-EXIT.
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-UNIT-LINE THRU CREATE-UNIT-LINE-EXIT
      * 
      *    RECORD (20,220,65) READ.  WRITE CATEGORY LINE
      *    NNNN PUN=YYYY,PVO=ZZZZ 
      *    TO PNCHFIL.  CALL INSERT-FIELD TO INSERT EACH FIELD NAME 
      *    AND VALUE SO THE FIELDS ARE INSERTED WITH NO BLANKS
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (20,220,65) 
      * 
      *    ON OUTPUT
      *    NNNN PUN=YYYY,PVO=ZZZZ WRITTEN TO PNCHFIL
      * 
      ******************************************************************
  
       CREATE-UNIT-LINE.
           MOVE 6 TO START-CHAR-POS.
           ADD 5 TO CATEGORY-LINE.
           MOVE CATEGORY-LINE TO UPD-LINE-NO. 
           IF OUT-FILEU-PUNIT IS NOT EQUAL TO SPACE 
               MOVE "PUN=" TO FIELD-NAME
               MOVE OUT-FILEU-PUNIT TO FIELD-VALUE
               MOVE 11 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           IF OUT-FILEU-PVOLSER IS NOT EQUAL TO SPACE 
               MOVE "PVO=" TO FIELD-NAME
               MOVE OUT-FILEU-PVOLSER TO FIELD-VALUE
               MOVE 10 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           SUBTRACT 1 FROM START-CHAR-POS.
           MOVE SPACE TO UPD-TRANS (START-CHAR-POS : 1).
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
       CREATE-UNIT-LINE-EXIT. 
           EXIT.
  
      ******************************************************************
      * 
      *    CREATE-VALUE-LINE THRU CREATE-VALUE-LINE-EXIT
      * 
      *    RECORD (05,110,YY) READ.  IF YY=20, WRITE CATEGORY LINE
      *    NNNN CHE=OUT-ELEV-CHECKBY
      *    ELSE, WRITE CATEGORY LINE
      *    NNNN CKV=OUT-ELEV-CKVAL,THR=OUT-ELEV-THRUVAL 
      * 
      *    ON INPUT 
      *    OUT-REC = RECORD (05,110,YY) 
      *    CATEGORY-LINE = LAST CATEGORY LINE NUMBER
      * 
      *    ON OUTPUT
      *    PNCHFIL CONTAINS TRANSACTIONS SPECIFIED ABOVE
      *    CATEGORY-LINE UPDATED
      * 
      ******************************************************************
  
       CREATE-VALUE-LINE. 
           ADD 5 TO CATEGORY-LINE.
           MOVE CATEGORY-LINE TO UPD-LINE-NO. 
           MOVE 6 TO START-CHAR-POS.
           IF OUT-FIELD-TYPE IS EQUAL TO "20" 
               MOVE "CHE=" TO UPD-FIELD-NAME
               MOVE OUT-ELEV-CHECKBY TO UPD-FIELD-VALUE 
               PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT
               GO TO CREATE-VALUE-LINE-EXIT 
           END-IF.
           MOVE "CKV=" TO FIELD-NAME. 
           MOVE OUT-ELEV-CKVAL TO FIELD-VALUE.
           MOVE 66 TO MAX-FIELD-LEN.
           PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT. 
           IF OUT-ELEV-THRUVAL IS NOT EQUAL TO SPACE
               MOVE "THR=" TO FIELD-NAME
               MOVE OUT-ELEV-THRUVAL TO FIELD-VALUE 
               MOVE 66 TO MAX-FIELD-LEN 
               PERFORM INSERT-FIELD THRU INSERT-FIELD-EXIT
           END-IF.
           SUBTRACT 1 FROM START-CHAR-POS.
           MOVE SPACE TO UPD-TRANS (START-CHAR-POS : 1).
           PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT. 
       CREATE-VALUE-LINE-EXIT.
           EXIT.
  
*CALL DISPLAYLN 
*CALL WRITELN 
*CALL USERROUT
  
      ******************************************************************
      * 
      *    ENTRY-BREAK THRU ENTRY-BREAK-EXIT
      * 
      *    A BREAK IN ENTRY TYPE HAS OCCURRED.  FORMAT AND PRINT
      *    MESSAGE SPECIFYING COUNT OF PREVIOUS ENTRY TYPE. 
      * 
      *    ON INPUT 
      *    SAVE-ENTRY-TYPE = PREVIOUS ENTRY TYPE
      *    SAVE-ENTRY-NAME = NAME OF PREVIOUS ENTRY TYPE
      *    ENTRY-COUNT = NUMBER OF PREVIOUS ENTRY TYPE ENTITIES 
      * 
      *    ON OUTPUT
      *    SAVE-ENTRY-TYPE = CURRENT ENTRY TYPE 
      *    ENTRY-COUNT = ZERO 
      * 
      ******************************************************************
  
       ENTRY-BREAK. 
           IF SAVE-ENTRY-TYPE IS EQUAL TO SPACE 
               GO TO ENTRY-BREAK-10.
           MOVE SAVE-ENTRY-NAME TO DISP-NAME. 
           MOVE ENTRY-COUNT TO DISP-COUNT.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           MOVE ENTRY-BREAK-MSG TO STD-REPORT-REC.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           MOVE MAX-LINES TO LINE-CT. 
       ENTRY-BREAK-10.
           MOVE OUT-ENTRY-TYPE TO SAVE-ENTRY-TYPE.
           MOVE ZERO TO ENTRY-COUNT.
           IF SAVE-ENTRY-TYPE IS EQUAL TO DBPROC-TYPE 
               MOVE DBPROC-NAME TO SAVE-ENTRY-NAME. 
           IF SAVE-ENTRY-TYPE IS EQUAL TO ELEMENT-TYPE
               MOVE ELEMENT-NAME TO SAVE-ENTRY-NAME.
           IF SAVE-ENTRY-TYPE IS EQUAL TO GROUP-TYPE
               MOVE GROUP-NAME TO SAVE-ENTRY-NAME.
           IF SAVE-ENTRY-TYPE IS EQUAL TO RECORD-TYPE 
               MOVE RECORD-NAME TO SAVE-ENTRY-NAME. 
           IF SAVE-ENTRY-TYPE IS EQUAL TO FILE-TYPE 
               MOVE FILE-NAME TO SAVE-ENTRY-NAME. 
       ENTRY-BREAK-EXIT.
           EXIT.
  
      ******************************************************************
      * 
      *    INSERT-FIELD THRU INSERT-FIELD-EXIT
      * 
      *    DETERMINE HOW MANY CHARACTERS IN FIELD-AREA TO MOVE BY 
      *    SEARCHING BACKWARDS FROM (MAX-FIELD-LEN)TH CHARACTER UNTIL 
      *    FIRST NONBLANK CHARACTER IS ENCOUNTERED. APPEND COMMA. 
      *    COPY "FIELD-NAME=FIELD-VALUE," FROM FIELD-AREA TO NEXT 
      *    AVAILABLE CHARACTER POSITIONS IN UPD-TRANS.  IF IT 
      *    WILL NOT FIT ON CURRENT LINE, TERMINATE CURRENT LINE WITH
      *    A COMMA, WRITE CURRENT LINE, AND START NEW LINE. 
      * 
      *    ON INPUT 
      *    FIELD-AREA = "FIELD-NAME=FIELD-VALUE"
      *    MAX-FIELD-LEN = MAXIMUM NUMBER OF CHARACTERS TO BE COPIED
      *      FROM FIELD-AREA
      *    START-CHAR-POS = NEXT AVAILABLE CHARACTER POSITION WITHIN
      *      UPD-TRANS
      * 
      *    ON OUTPUT
      *    START-CHAR-POS UPDATED 
      *    FIELD-AREA COPIED TO UPD-TRANS 
      * 
      ******************************************************************
  
       INSERT-FIELD.
           MOVE SPACE TO DONE.
           PERFORM VARYING NUM-CHARS FROM MAX-FIELD-LEN BY -1 
             UNTIL DONE IS EQUAL TO "T" 
               IF FIELD-CHAR (NUM-CHARS) IS NOT EQUAL TO SPACE
                   MOVE "T" TO DONE 
               END-IF 
           END-PERFORM. 
           ADD 2 TO NUM-CHARS.
           MOVE "," TO FIELD-CHAR (NUM-CHARS).
           IF NUM-CHARS + START-CHAR-POS IS GREATER THAN 73 
               PERFORM WRITE-TRANS THRU WRITE-TRANS-EXIT
               MOVE 2 TO START-CHAR-POS 
           END-IF.
           MOVE FIELD-AREA (1 : NUM-CHARS)
             TO UPD-TRANS (START-CHAR-POS : NUM-CHARS). 
           ADD NUM-CHARS, START-CHAR-POS GIVING START-CHAR-POS. 
       INSERT-FIELD-EXIT. 
           EXIT.
  
  
      ******************************************************************
      * 
      *    WRITE-TRANS THRU WRITE-TRANS-EXIT
      * 
      *    WRITE UPD-TRANS TO SYSPRINT AND PUNCH-FILE 
      * 
      *    ON OUTPUT
      *    UPD-TRANS = SPACES 
      * 
      ******************************************************************
  
       WRITE-TRANS. 
           MOVE UPD-TRANS TO STD-REPORT-REC.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           CALL "PNCHIO". 
           MOVE SPACES TO UPD-TRANS.
       WRITE-TRANS-EXIT.
           EXIT.
  
  
