*DECK DCDMS300
       IDENTIFICATION DIVISION. 
       PROGRAM-ID.   DMS300.
  
      ******************************************************************
      * 
      *    THIS MODULE CONTROLS THE CALLING OF THE CDCS (DMS-170) 
      *    GENERATION MODULES AND DOES I/O FOR THE PRINTER AND SOURCE 
      *    OUTPUT FILES.
      * 
      ******************************************************************
  
       ENVIRONMENT DIVISION.
  
       CONFIGURATION SECTION. 
       SOURCE-COMPUTER.   CYBER.
       OBJECT-COMPUTER.   CYBER.
       SPECIAL-NAMES. 
           SWITCH-2 IS SW2
           SWITCH-3 IS SW3
           SWITCH-4 IS SW4. 
  
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT MAST1 ASSIGN TO "MAST1" 
             ACCESS MODE IS RANDOM
             ORGANIZATION IS DIRECT 
             RECORD KEY IS DATA-KEY-2.
           SELECT SYSPRINT ASSIGN TO "OUTPUT".
           SELECT SCHFIL ASSIGN TO "SCHFIL" 
             USE "RT=Z".
           SELECT SUBFIL ASSIGN TO "SUBFIL" 
             USE "RT=Z".
           SELECT MDFIL ASSIGN TO "MDFIL" 
             USE "RT=Z".
           SELECT FILEFIL ASSIGN TO "FILEFIL" 
             USE "RT=Z".
  
  
      ******************************************************************
      * 
       DATA DIVISION. 
  
  
      ******************************************************************
      * 
       FILE SECTION.
  
      ******************************************************************
      * 
      * DEFINITION OF MAST1 USED BY ROUTINE "INPUT-MAST1".
      * 
*CALL MAST1FD2
  
      ******************************************************************
      * 
      * OUTPUT FILE USED BY "DISPLAY-LINE" AND "WRITE-LINE".
      * 
*CALL SYSPRTFD
  
      ******************************************************************
      * 
      * OUTPUT FILES FOR SCHEMA, SUBSCHEMA, MD, AND FILE CARD IMAGES. 
      * 
       FD  SCHFIL 
           LABEL RECORDS ARE OMITTED
           RECORD CONTAINS 80 CHARACTERS
           DATA RECORDS ARE SCH-LINE. 
       01  SCH-LINE               PICTURE X(80).
  
       FD  SUBFIL 
           LABEL RECORDS ARE OMITTED
           RECORD CONTAINS 80 CHARACTERS
           DATA RECORDS ARE SUB-LINE. 
       01  SUB-LINE               PICTURE X(80).
  
       FD  MDFIL
           LABEL RECORDS ARE OMITTED
           RECORD CONTAINS 80 CHARACTERS
           DATA RECORDS ARE MD-LINE.
       01  MD-LINE                PICTURE X(80).
  
       FD  FILEFIL
           LABEL RECORDS ARE OMITTED
           RECORD CONTAINS 80 CHARACTERS
           DATA RECORDS ARE FILE-LINE.
       01  FILE-LINE              PICTURE X(80).
  
  
      ******************************************************************
      * 
*CALL GENCS 
  
  
      ******************************************************************
      * 
       WORKING-STORAGE SECTION. 
*CALL DATAGEN 
  
      ******************************************************************
      * 
      * DEFINITION OF OUTPUT PAGE HEADERS.
      * 
       01  DMSGEN-WORK-AREAS. 
           03  SCH-COL-1          PICTURE X(106)
               VALUE "                                      1 
      -      "               4                                7      8".
           03  SCH-COL-2          PICTURE X(106)
               VALUE "     SCHEMA CARD IMAGE    1...5...9...3...........
      -      "...............0................................3......0".
  
           03  FILE-COL-1         PICTURE X(106)
               VALUE "
      -      "                                                       8".
           03  FILE-COL-2         PICTURE X(106)
               VALUE "      FILE CARD IMAGE     1.......................
      -      ".......................................................0".
  
           03  SUB-COL-1          PICTURE X(106)
               VALUE "                                     1
      -      "               4                                7      8".
           03  SUB-COL-2          PICTURE X(106)
               VALUE "   SUBSCHEMA CARD IMAGE   1......8...2............
      -      "...............0................................3......0".
  
           03  MD-COL-1           PICTURE X(106)
               VALUE "                                      1 
      -      "                                                7      8".
           03  MD-COL-2           PICTURE X(106)
               VALUE "       MD CARD IMAGE      1...5...9...3...........
      -      "................................................3......0".
  
           03  COMMENT-1          PICTURE X(30) 
               VALUE "DEFINITION CREATED FROM DC2: ". 
           03  COMMENT-2          PICTURE X(30) 
               VALUE "DATE OF GENERATION: ".
           03  COMMENT-3          PICTURE X(30) 
               VALUE "MASTER FILE REVISION NUMBER: ". 
           03  COMMENT-4          PICTURE X(30) 
               VALUE "DATE OF LAST REVISION: ". 
  
           03  HOLD-COMMENT-IMAGE.
               05  FILLER         PICTURE X(26).
               05  CARD-IMAGE     PICTURE X(80).
           03  SCH-CARD-IMAGE.
               05  FILLER         PICTURE X(3)   VALUE "/* ". 
               05  SCH-CMNT       PICTURE X(30).
               05  SCH-VALUE      PICTURE X(36).
               05  FILLER         PICTURE X(3)   VALUE " */". 
               05  SCH-SEQNO      PICTURE 9(8). 
           03  SUB-CARD-IMAGE.
               05  FILLER         PICTURE X(6). 
               05  FILLER         PICTURE X(2)   VALUE "* ".
               05  SUB-CMNT       PICTURE X(30).
               05  SUB-VALUE      PICTURE X(34).
               05  SUB-SEQNO      PICTURE 9(8). 
           03  FILE-CARD-IMAGE. 
               05  FILLER         PICTURE X(2)   VALUE "* ".
               05  FILE-CMNT      PICTURE X(30).
               05  FILE-VALUE     PICTURE X(48).
  
      ******************************************************************
      * 
      * HOLD AREA FOR CURRENT DATE -- USED IN CREATING PAGE HEADERS 
      * 
*CALL CURDATE 
  
      ******************************************************************
      * 
      * ERROR MESSAGES. 
  
       01  MESSAGE-TEXTS. 
           03  MSG-900. 
               05  IDX-900        PICTURE 99     VALUE 1. 
               05  FILLER         PICTURE X(6)   VALUE "900-F ".
               05  FILLER         PICTURE X(35)  VALUE
                   "MAST1 READ ERROR".
  
       01  ERROR-TEXTS            REDEFINES MESSAGE-TEXTS.
           03  ERROR-MESSAGES     OCCURS 1 TIMES. 
               05  FILLER         PICTURE 99. 
               05  MSG-NUM        PICTURE X(6). 
               05  MSG-TEXT       PICTURE X(35).
  
      ******************************************************************
      * 
      * OUTPUT LINE FOR ERROR MESSAGES. 
  
       01  DIAG-LINE. 
           03  FILLER             PICTURE X(10)  VALUE SPACES.
           03  FILLER             PICTURE X(6)   VALUE "DCGEN-".
           03  DIAG-NUM           PICTURE X(6). 
           03  FILLER             PICTURE X(9)   VALUE " *ERROR  ". 
           03  DIAG-TEXT          PICTURE X(75).
       01  MSG-IDX                PICTURE 99. 
  
      ******************************************************************
      * 
       01 MISCELLANEOUS.
           03  LINE-IDX           PICTURE 99. 
      /*****************************************************************
      * 
       PROCEDURE DIVISION.
  
      ******************************************************************
      * 
      * INITIALIZATION. 
  
       000-INITIALIZE.
           OPEN INPUT MAST1.
           OPEN OUTPUT SYSPRINT.
           OPEN EXTEND SCHFIL.
           OPEN EXTEND SUBFIL.
           OPEN EXTEND MDFIL. 
           OPEN EXTEND FILEFIL. 
  
      * INITIALIZE OUTPUT BUFFER. 
           MOVE REQ-CLEAR TO GTBL-REQ.
           MOVE ZERO TO GTBL-COUNT. 
           MOVE SPACES TO GTBL-OUTPUT-TABLE.
  
      * CALL PROPER GENERATION MODULE FOR SCHEMA, SUBSCHEMA, OR MASTER
      * DIRECTORY.
           IF GTBL-SEL-TYPE = TYPE-SCHEMA 
           THEN 
             IF GTBL-SEL-MD = "N" 
             THEN 
               GO TO 100-SCHEMA-GENERATION
             ELSE 
               MOVE TYPE-MD TO GTBL-SEL-TYPE
               GO TO 400-MD-GENERATION
             END-IF 
           END-IF 
  
           IF GTBL-SEL-TYPE = TYPE-SUBSCH 
           THEN 
             GO TO 300-SUBSCH-GENERATION
           END-IF 
      /*****************************************************************
      ******************************************************************
      * 
      * SCHEMA GENERATION.
  
       100-SCHEMA-GENERATION. 
           PERFORM PRINT-HEADINGS THRU PRINT-HEADINGS-XIT.
  
       110-SCHEMA-CALL. 
           CALL "DMS326". 
           GO TO 120-INPUT-RET, 130-OUTPUT-RET, 
             140-ABORT-RET, 150-TERM-RET
             DEPENDING ON GTBL-REQ. 
  
      * READ MAST1 RECORD AND RETURN TO SCHEMA GENERATION.
       120-INPUT-RET. 
           PERFORM INPUT-MAST1 THRU INPUT-MAST1-XIT.
           IF RETURN-CODE = "12"
           THEN 
             PERFORM OUTPUT-SCHFIL THRU OUTPUT-SCHFIL-XIT 
             PERFORM OUTPUT-ERROR THRU OUTPUT-ERROR-XIT 
             GO TO 900-ABORT
           END-IF 
           GO TO 110-SCHEMA-CALL. 
  
      * FLUSH OUTPUT BUFFER AND RETURN TO SCHEMA GENERATION.
       130-OUTPUT-RET.
           PERFORM OUTPUT-SCHFIL THRU OUTPUT-SCHFIL-XIT.
           GO TO 110-SCHEMA-CALL. 
  
      * FLUSH OUTPUT BUFFER, PROCESS ABORT, AND QUIT. 
       140-ABORT-RET. 
           PERFORM OUTPUT-SCHFIL THRU OUTPUT-SCHFIL-XIT.
           GO TO 900-ABORT. 
  
      * NORMAL TERMINATION -- FLUSH OUTPUT BUFFER AND PROCEED TO FILE 
      * CARD GENERATION.
       150-TERM-RET.
           PERFORM OUTPUT-SCHFIL THRU OUTPUT-SCHFIL-XIT.
           MOVE REQ-CLEAR TO GTBL-REQ.
           MOVE TYPE-FILE TO GTBL-SEL-TYPE. 
      /*****************************************************************
      ******************************************************************
      * 
      * FILE CARD GENERATION. 
  
       200-FILE-GENERATION. 
           PERFORM PRINT-HEADINGS THRU PRINT-HEADINGS-XIT.
  
       210-FILE-CALL. 
           CALL "DMS320". 
           GO TO 220-INPUT-RET, 230-OUTPUT-RET, 
             240-ABORT-RET, 250-TERM-RET
             DEPENDING ON GTBL-REQ. 
  
      * READ MAST1 RECORD AND RETURN TO FILE GENERATION.
       220-INPUT-RET. 
           PERFORM INPUT-MAST1 THRU INPUT-MAST1-XIT.
           IF RETURN-CODE = "12"
           THEN 
             PERFORM OUTPUT-FILEFIL THRU OUTPUT-FILEFIL-XIT 
             PERFORM OUTPUT-ERROR THRU OUTPUT-ERROR-XIT 
             GO TO 900-ABORT
           END-IF 
           GO TO 210-FILE-CALL. 
  
      * FLUSH OUTPUT BUFFER AND RETURN TO FILE GENERATION.
       230-OUTPUT-RET.
           PERFORM OUTPUT-FILEFIL THRU OUTPUT-FILEFIL-XIT.
           GO TO 210-FILE-CALL. 
  
      * FLUSH OUTPUT BUFFER, PROCESS ABORT, AND QUIT. 
       240-ABORT-RET. 
           PERFORM OUTPUT-FILEFIL THRU OUTPUT-FILEFIL-XIT.
           GO TO 900-ABORT. 
  
      * FLUSH OUTPUT BUFFER AND TERMINATE GENERATION PROCESS NORMALLY 
      * UNLESS "ALL" SELECTED.  IN THAT CASE, PROCEED TO SUBSCHEMA
      * GENERATION. 
       250-TERM-RET.
           PERFORM OUTPUT-FILEFIL THRU OUTPUT-FILEFIL-XIT.
  
           IF GTBL-SEL-ALL = "N"
           THEN 
             GO TO 950-END-GENERATION 
           ELSE 
             MOVE REQ-CLEAR TO GTBL-REQ 
             MOVE TYPE-SUBSCH TO GTBL-SEL-TYPE
           END-IF 
      /*****************************************************************
      ******************************************************************
      * 
      * SUBSCHEMA GENERATION. 
  
       300-SUBSCH-GENERATION. 
           PERFORM PRINT-HEADINGS THRU PRINT-HEADINGS-XIT.
  
       310-SUBSCH-CALL. 
           CALL "DMS324". 
           GO TO 320-INPUT-RET, 330-OUTPUT-RET, 
             340-ABORT-RET, 350-TERM-RET
             DEPENDING ON GTBL-REQ. 
  
      * READ MAST1 RECORD AND RETURN TO SUBSCHEMA GENERATION. 
       320-INPUT-RET. 
           PERFORM INPUT-MAST1 THRU INPUT-MAST1-XIT.
           IF RETURN-CODE = "12"
           THEN 
             PERFORM OUTPUT-SUBFIL THRU OUTPUT-SUBFIL-XIT 
             PERFORM OUTPUT-ERROR THRU OUTPUT-ERROR-XIT 
             GO TO 900-ABORT
           END-IF 
           GO TO 310-SUBSCH-CALL. 
  
      * FLUSH OUTPUT BUFFER AND RETURN TO SUBSCHEMA GENERATION. 
       330-OUTPUT-RET.
           PERFORM OUTPUT-SUBFIL THRU OUTPUT-SUBFIL-XIT.
           GO TO 310-SUBSCH-CALL. 
  
      * FLUSH OUTPUT BUFFER, PROCESS ABORT, AND QUIT. 
       340-ABORT-RET. 
           PERFORM OUTPUT-SUBFIL THRU OUTPUT-SUBFIL-XIT.
           GO TO 900-ABORT. 
  
      * FLUSH OUTPUT BUFFER AND TERMINATE GENERATION PROCESS NORMALLY 
      * UNLESS "ALL" SELECTED.  IN THAT CASE, PROCEED TO MD GENERATION. 
       350-TERM-RET.
           PERFORM OUTPUT-SUBFIL THRU OUTPUT-SUBFIL-XIT.
  
           IF GTBL-SEL-ALL = "N"
           THEN 
             GO TO 950-END-GENERATION 
           ELSE 
             MOVE REQ-CLEAR TO GTBL-REQ 
             MOVE TYPE-MD TO GTBL-SEL-TYPE
           END-IF 
      /*****************************************************************
      ******************************************************************
      * 
      * MASTER DIRECTORY GENERATION.
  
       400-MD-GENERATION. 
           PERFORM PRINT-HEADINGS THRU PRINT-HEADINGS-XIT.
  
       410-MD-CALL. 
           CALL "DMS328". 
           GO TO 420-INPUT-RET, 430-OUTPUT-RET, 
             440-ABORT-RET, 450-TERM-RET
             DEPENDING ON GTBL-REQ. 
  
      * READ MAST1 RECORD AND RETURN TO MD GENERATION.
       420-INPUT-RET. 
           PERFORM INPUT-MAST1 THRU INPUT-MAST1-XIT.
           IF RETURN-CODE = "12"
           THEN 
             PERFORM OUTPUT-MDFIL THRU OUTPUT-MDFIL-XIT 
             PERFORM OUTPUT-ERROR THRU OUTPUT-ERROR-XIT 
             GO TO 900-ABORT
           END-IF 
           GO TO 410-MD-CALL. 
  
      * FLUSH OUTPUT BUFFER AND RETURN TO MD GENERATION.
       430-OUTPUT-RET.
           PERFORM OUTPUT-MDFIL THRU OUTPUT-MDFIL-XIT.
           GO TO 410-MD-CALL. 
  
      * FLUSH OUTPUT BUFFER, PROCESS ABORT, AND QUIT. 
       440-ABORT-RET. 
           PERFORM OUTPUT-MDFIL THRU OUTPUT-MDFIL-XIT.
           GO TO 900-ABORT. 
  
      * FLUSH OUTPUT BUFFER AND TERMINATE GENERATION PROCESS NORMALLY.
       450-TERM-RET.
           PERFORM OUTPUT-MDFIL THRU OUTPUT-MDFIL-XIT.
           GO TO 950-END-GENERATION.
      /*****************************************************************
      * 
      * END OF PROCESSING ROUTINES. 
  
       900-ABORT. 
           PERFORM RETURN-CODE-00 THRU RETURN-CODE-XIT. 
           CLOSE MAST1. 
           CLOSE SYSPRINT.
           CLOSE SCHFIL.
           CLOSE SUBFIL.
           CLOSE MDFIL. 
           CLOSE FILEFIL. 
           STOP RUN.
  
*CALL RETCODE 
  
      * NORMAL TERMINATION. 
      * 
       950-END-GENERATION.
           CLOSE MAST1. 
           CLOSE SYSPRINT.
           CLOSE SCHFIL.
           CLOSE SUBFIL.
           CLOSE MDFIL. 
           CLOSE FILEFIL. 
           EXIT PROGRAM.
      /*****************************************************************
      ******************************************************************
      * 
      * INPUT/OUTPUT ROUTINES.
  
  
      ******************************************************************
      * 
      * INPUT-MAST1.
      * 
      * INPUT-MAST1 READS THE MAST1 RECORD WHOSE KEY IS GIVEN IN
      * "MAST1-KEY".  THE RECORD IS RETURNED IN "DATA-RECORD".  IF KEY
      * INVALID, THE ERROR INDEX IS SET AND CONTROL RETURNED TO THE 
      * CALLING PROGRAM SO IT CAN FLUSH THE OUTPUT BUFFER AND DIAGNOSE. 
  
       INPUT-MAST1. 
           MOVE MAST1-KEY TO DATA-KEY-2.
           READ MAST1 INVALID KEY 
  
      * IF KEY-NAME ALSO ALLOWED TO BE DATANAME, SET FLAG INSTEAD OF
      * ERROR.
             IF DATANAME-OK = "Y" 
             THEN 
               MOVE "F" TO DATANAME-OK
             ELSE 
               MOVE IDX-900 TO MSG-IDX
               MOVE "12" TO RETURN-CODE 
             END-IF 
             GO TO INPUT-MAST1-XIT. 
           MOVE MAST1-RECORD TO DATA-RECORD.
  
       INPUT-MAST1-XIT. 
           EXIT.
  
  
      ******************************************************************
      ******************************************************************
      * 
      * THE OUTPUT-XXXFIL ROUTINES WRITE THE OUTPUT BUFFER "GTBL-OUTPUT-
      * TABLE" TO OUTPUT AND TO THE APPROPRIATE CARD-IMAGE FILE FOR THE 
      * SCHEMA, SUBSCHEMA, MD, OR FILE CARDS.  ERROR LINES ARE WRITTEN
      * TO OUTPUT ONLY.  THE OUTPUT BUFFER IS CLEARED UPON RETURN.
      * 
      * INPUT:   GTBL-COUNT       - NUMBER OF LINES IN BUFFER TO OUTPUT 
      *          GTBL-OPT-LIST    - CONTROLS WHETHER LISTING PRODUCED 
      *          GTBL-OPT-PUNCH   - CONTROLS WHETHER CARD-IMAGE FILE
      *                             PRODUCED
  
  
      ******************************************************************
      * 
      * OUTPUT-SCHFIL.
  
       OUTPUT-SCHFIL. 
  
      * LOOP THROUGH ALL LINES OF OUTPUT BUFFER.
           PERFORM VARYING LINE-IDX FROM 1 BY 1 
             UNTIL LINE-IDX > GTBL-COUNT
  
      * PRINT EVERY LINE IF "LIST" OPTION GIVEN.
             IF GTBL-OPT-LIST = "Y" 
             THEN 
               MOVE GTBL-OUTPUT-ENTRY (LINE-IDX) TO STD-REPORT-REC
               PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT 
             END-IF 
  
      * WRITE NON-ERROR CARD-IMAGES TO FILE IF "DATASET" OPTION GIVEN.
             IF GTBL-OPT-PUNCH = "Y"
               AND GTBL-OUTPUT-IND (LINE-IDX) NOT = "E" 
             THEN 
               MOVE GTBL-CARD-IMAGE (LINE-IDX) TO SCH-LINE
               WRITE SCH-LINE 
             END-IF 
           END-PERFORM
  
      * RESET OUTPUT BUFFER.
           MOVE ZERO TO GTBL-COUNT. 
           MOVE SPACES TO GTBL-OUTPUT-TABLE.
  
       OUTPUT-SCHFIL-XIT. 
           EXIT.
  
  
      ******************************************************************
      * 
      * OUTPUT-FILEFIL. 
  
       OUTPUT-FILEFIL.
  
      * LOOP THROUGH ALL LINES OF OUTPUT BUFFER.
           PERFORM VARYING LINE-IDX FROM 1 BY 1 
             UNTIL LINE-IDX > GTBL-COUNT
  
      * PRINT EVERY LINE IF "LIST" OPTION GIVEN.
             IF GTBL-OPT-LIST = "Y" 
             THEN 
               MOVE GTBL-OUTPUT-ENTRY (LINE-IDX) TO STD-REPORT-REC
               PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT 
             END-IF 
  
      * WRITE NON-ERROR CARD-IMAGES TO FILE IF "DATASET" OPTION GIVEN.
             IF GTBL-OPT-PUNCH = "Y"
               AND GTBL-OUTPUT-IND (LINE-IDX) NOT = "E" 
             THEN 
               MOVE GTBL-CARD-IMAGE (LINE-IDX) TO FILE-LINE 
               WRITE FILE-LINE
             END-IF 
           END-PERFORM
  
      * RESET OUTPUT BUFFER.
           MOVE ZERO TO GTBL-COUNT. 
           MOVE SPACES TO GTBL-OUTPUT-TABLE.
  
       OUTPUT-FILEFIL-XIT.
           EXIT.
  
  
      ******************************************************************
      * 
      * OUTPUT-SUBFIL.
  
       OUTPUT-SUBFIL. 
  
      * LOOP THROUGH ALL LINES OF OUTPUT BUFFER.
           PERFORM VARYING LINE-IDX FROM 1 BY 1 
             UNTIL LINE-IDX > GTBL-COUNT
  
      * PRINT EVERY LINE IF "LIST" OPTION GIVEN.
             IF GTBL-OPT-LIST = "Y" 
             THEN 
               MOVE GTBL-OUTPUT-ENTRY (LINE-IDX) TO STD-REPORT-REC
               PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT 
             END-IF 
  
      * WRITE NON-ERROR CARD-IMAGES TO FILE IF "DATASET" OPTION GIVEN.
             IF GTBL-OPT-PUNCH = "Y"
               AND GTBL-OUTPUT-IND (LINE-IDX) NOT = "E" 
             THEN 
               MOVE GTBL-CARD-IMAGE (LINE-IDX) TO SUB-LINE
               WRITE SUB-LINE 
             END-IF 
           END-PERFORM
  
      * RESET OUTPUT BUFFER.
           MOVE ZERO TO GTBL-COUNT. 
           MOVE SPACES TO GTBL-OUTPUT-TABLE.
  
       OUTPUT-SUBFIL-XIT. 
           EXIT.
  
  
      ******************************************************************
      * 
      * OUTPUT-MDFIL. 
  
       OUTPUT-MDFIL.
  
      * LOOP THROUGH ALL LINES OF OUTPUT BUFFER.
           PERFORM VARYING LINE-IDX FROM 1 BY 1 
             UNTIL LINE-IDX > GTBL-COUNT
  
      * PRINT EVERY LINE IF "LIST" OPTION GIVEN.
             IF GTBL-OPT-LIST = "Y" 
             THEN 
               MOVE GTBL-OUTPUT-ENTRY (LINE-IDX) TO STD-REPORT-REC
               PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT 
             END-IF 
  
      * WRITE NON-ERROR CARD-IMAGES TO FILE IF "DATASET" OPTION GIVEN.
             IF GTBL-OPT-PUNCH = "Y"
               AND GTBL-OUTPUT-IND (LINE-IDX) NOT = "E" 
             THEN 
               MOVE GTBL-CARD-IMAGE (LINE-IDX) TO MD-LINE 
               WRITE MD-LINE
             END-IF 
           END-PERFORM
  
      * RESET OUTPUT BUFFER.
           MOVE ZERO TO GTBL-COUNT. 
           MOVE SPACES TO GTBL-OUTPUT-TABLE.
  
       OUTPUT-MDFIL-XIT.
           EXIT.
  
  
      ******************************************************************
      * 
      * PRINT-HEADINGS. 
      * 
      * WRITE TO OUTPUT THE GENERATION REPORT HEADINGS AND CARD COLUMN
      * SUB-HEADINGS.  WRITE THE CATALOGUE CREATION COMMENTS TO OUTPUT
      * AND THE CARD FILE.
      * 
      * INPUT:   GTBL-OPT-LIST    - CONTROLS WHETHER LISTING PRODUCED 
      *          GTBL-OPT-PUNCH   - CONTROLS WHETHER CARD-IMAGE FILE
      *                             PRODUCED
  
       PRINT-HEADINGS.
           MOVE GTBL-OPT-STARTSEQNO TO SEQ-NO.
  
      * IF "LIST" OPTION GIVEN, OUTPUT HEADINGS.
           IF GTBL-OPT-LIST = "Y" 
           THEN 
             MOVE SPACES TO STD-REPORT-REC
             MOVE SPACES TO PRINT-LINE
             MOVE 99 TO LINE-CT 
             PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT 
           END-IF 
  
      * WRITE CREATION-COMMENTS TO OUTPUT IF "LIST" GIVEN, TO CARD FILE 
      * IF "PUNCH" GIVEN. 
           IF GTBL-OPT-LIST = "Y" 
             OR GTBL-OPT-PUNCH = "Y"
           THEN 
             IF GTBL-SEL-TYPE = TYPE-SCHEMA 
             THEN 
               PERFORM CREATE-SCH-CMNT THRU CREATE-SCH-CMNT-XIT 
             END-IF 
  
             IF GTBL-SEL-TYPE = TYPE-FILE 
             THEN 
               PERFORM CREATE-FILE-CMNT THRU CREATE-FILE-CMNT-XIT 
             END-IF 
  
             IF GTBL-SEL-TYPE = TYPE-SUBSCH 
             THEN 
               PERFORM CREATE-SUB-CMNT THRU CREATE-SUB-CMNT-XIT 
             END-IF 
  
             IF GTBL-SEL-TYPE = TYPE-MD 
             THEN 
               PERFORM CREATE-MD-CMNT THRU CREATE-MD-CMNT-XIT 
             END-IF 
           END-IF 
  
       PRINT-HEADINGS-XIT.
           EXIT.
      /*****************************************************************
      ******************************************************************
      * 
      * CREATE-XXX-CMNT.
      * 
      * CREATE-XXX-CMNT IS CALLED BY "PRINT-HEADINGS" AT THE BEGINNING
      * OF GENERATION OF EACH ENTITY TYPE -- SCHEMA, SUBSCHEMA, MD, AND 
      * FILE.  IT WRITES TO OUTPUT AND TO THE CARD-IMAGE FILE A COMMENT 
      * CONTAINING CATALOGUE-CREATION INFORMATION.
  
  
      ******************************************************************
      * 
       CREATE-SCH-CMNT. 
  
      * OUTPUT NAME OF SELECTED SCHEMA. 
           MOVE COMMENT-1 TO SCH-CMNT.
           MOVE GTBL-SEL-CNAME TO SCH-VALUE.
           MOVE SEQ-NO TO SCH-SEQNO.
           ADD GTBL-OPT-INCSEQNO TO SEQ-NO. 
           MOVE SCH-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT DATE OF GENERATION.
           ACCEPT WK-DATE FROM DATE.
           MOVE Y TO YX.
           MOVE M TO MX.
           MOVE D TO DX.
           MOVE COMMENT-2 TO SCH-CMNT.
           MOVE WK-DATEX TO SCH-VALUE.
           MOVE SEQ-NO TO SCH-SEQNO.
           ADD GTBL-OPT-INCSEQNO TO SEQ-NO. 
           MOVE SCH-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT MASTER FILE REVISION NUMBER. 
           MOVE COMMENT-3 TO SCH-CMNT.
           MOVE REVISION-NUMBER TO SCH-VALUE. 
           MOVE SEQ-NO TO SCH-SEQNO.
           ADD GTBL-OPT-INCSEQNO TO SEQ-NO. 
           MOVE SCH-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT DATE OF LAST REVISION. 
           MOVE COMMENT-4 TO SCH-CMNT.
           MOVE DATE-LAST-REVISION TO SCH-VALUE.
           MOVE SEQ-NO TO SCH-SEQNO.
           ADD GTBL-OPT-INCSEQNO TO SEQ-NO. 
           MOVE SCH-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
       CREATE-SCH-CMNT-XIT. 
           EXIT.
  
  
      ******************************************************************
      * 
       CREATE-FILE-CMNT.
  
      * OUTPUT NAME OF SELECTED SCHEMA. 
           MOVE COMMENT-1 TO FILE-CMNT. 
           MOVE GTBL-SEL-CNAME TO FILE-VALUE. 
           MOVE FILE-CARD-IMAGE TO CARD-IMAGE.
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT DATE OF GENERATION.
           ACCEPT WK-DATE FROM DATE.
           MOVE Y TO YX.
           MOVE M TO MX.
           MOVE D TO DX.
           MOVE COMMENT-2 TO FILE-CMNT. 
           MOVE WK-DATEX TO FILE-VALUE. 
           MOVE FILE-CARD-IMAGE TO CARD-IMAGE.
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT MASTER FILE REVISION NUMBER. 
           MOVE COMMENT-3 TO FILE-CMNT. 
           MOVE REVISION-NUMBER TO FILE-VALUE.
           MOVE FILE-CARD-IMAGE TO CARD-IMAGE.
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT DATE OF LAST REVISION. 
           MOVE COMMENT-4 TO FILE-CMNT. 
           MOVE DATE-LAST-REVISION TO FILE-VALUE. 
           MOVE FILE-CARD-IMAGE TO CARD-IMAGE.
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
       CREATE-FILE-CMNT-XIT.
           EXIT.
  
  
      ******************************************************************
      * 
       CREATE-SUB-CMNT. 
  
      * OUTPUT NAME OF SELECTED SUBSCHEMA.
           MOVE COMMENT-1 TO SUB-CMNT.
           MOVE GTBL-SEL-CNAME TO SUB-VALUE.
           MOVE SEQ-NO TO SUB-SEQNO.
           ADD GTBL-OPT-INCSEQNO TO SEQ-NO. 
           MOVE SUB-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT DATE OF GENERATION.
           ACCEPT WK-DATE FROM DATE.
           MOVE Y TO YX.
           MOVE M TO MX.
           MOVE D TO DX.
           MOVE COMMENT-2 TO SUB-CMNT.
           MOVE WK-DATEX TO SUB-VALUE.
           MOVE SEQ-NO TO SUB-SEQNO.
           ADD GTBL-OPT-INCSEQNO TO SEQ-NO. 
           MOVE SUB-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT MASTER FILE REVISION NUMBER. 
           MOVE COMMENT-3 TO SUB-CMNT.
           MOVE REVISION-NUMBER TO SUB-VALUE. 
           MOVE SEQ-NO TO SUB-SEQNO.
           ADD GTBL-OPT-INCSEQNO TO SEQ-NO. 
           MOVE SUB-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT DATE OF LAST REVISION. 
           MOVE COMMENT-4 TO SUB-CMNT.
           MOVE DATE-LAST-REVISION TO SUB-VALUE.
           MOVE SEQ-NO TO SUB-SEQNO.
           ADD GTBL-OPT-INCSEQNO TO SEQ-NO. 
           MOVE SUB-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
       CREATE-SUB-CMNT-XIT. 
           EXIT.
  
  
      ******************************************************************
      * 
       CREATE-MD-CMNT.
  
      * OUTPUT NAME OF SELECTED SCHEMA. 
           MOVE COMMENT-1 TO SCH-CMNT.
           MOVE GTBL-SEL-CNAME TO SCH-VALUE.
           MOVE ZERO TO SCH-SEQNO.
           MOVE SCH-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT DATE OF GENERATION.
           ACCEPT WK-DATE FROM DATE.
           MOVE Y TO YX.
           MOVE M TO MX.
           MOVE D TO DX.
           MOVE COMMENT-2 TO SCH-CMNT.
           MOVE WK-DATEX TO SCH-VALUE.
           MOVE SCH-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT MASTER FILE REVISION NUMBER. 
           MOVE COMMENT-3 TO SCH-CMNT.
           MOVE REVISION-NUMBER TO SCH-VALUE. 
           MOVE SCH-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
      * OUTPUT DATE OF LAST REVISION. 
           MOVE COMMENT-4 TO SCH-CMNT.
           MOVE DATE-LAST-REVISION TO SCH-VALUE.
           MOVE SCH-CARD-IMAGE TO CARD-IMAGE. 
           PERFORM MSG-OUT THRU MSG-OUT-XIT.
  
       CREATE-MD-CMNT-XIT.
           EXIT.
  
  
      ******************************************************************
      * 
      * MSG-OUT.
      * 
      * MSG-OUT IS CALLED BY "CREATE-XXX-CMNT" TO WRITE A COMMENT TO
      * OUTPUT AND (EXCEPT FOR THE MD, WHICH DOESN'T ALLOW COMMENTS)
      * TO THE APPROPRIATE CARD-IMAGE FILE. 
      * 
      * INPUT:   GTBL-OPT-LIST    - CONTROLS WHETHER LISTING PRODUCED 
      *          GTBL-OPT-PUNCH   - CONTROLS WHETHER CARD-IMAGE FILE
      *                             PRODUCED
  
       MSG-OUT. 
  
      * WRITE COMMENT TO OUTPUT.
           IF GTBL-OPT-LIST = "Y" 
           THEN 
             MOVE HOLD-COMMENT-IMAGE TO PRINT-DATA
             MOVE 1 TO PRT-CTL
             ADD 1 TO LINE-CT 
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
           END-IF 
  
      * WRITE COMMENT TO CURRENT CARD-IMAGE FILE. 
           IF GTBL-OPT-PUNCH = "Y"
           THEN 
             IF GTBL-SEL-TYPE = TYPE-SCHEMA 
             THEN 
               MOVE CARD-IMAGE TO SCH-LINE
               WRITE SCH-LINE 
               GO TO MSG-OUT-XIT
             END-IF 
  
             IF GTBL-SEL-TYPE = TYPE-SUBSCH 
             THEN 
               MOVE CARD-IMAGE TO SUB-LINE
               WRITE SUB-LINE 
               GO TO MSG-OUT-XIT
             END-IF 
  
             IF GTBL-SEL-TYPE = TYPE-FILE 
             THEN 
               MOVE CARD-IMAGE TO FILE-LINE 
               WRITE FILE-LINE
               GO TO MSG-OUT-XIT
             END-IF 
           END-IF 
  
       MSG-OUT-XIT. 
           EXIT.
  
  
      ******************************************************************
      * 
      * USER-ROUTINE. 
      * 
      * USER-ROUTINE IS CALLED BY "DISPLAY-LINE" TO GENERATE CARD COLUMN
      * SUB-HEADINGS FOR SCHEMA, SUBSCHEMA, MD, OR FILE CARDS.
  
       USER-ROUTINE.
           IF GTBL-SEL-TYPE = TYPE-SCHEMA 
           THEN 
             MOVE SCH-COL-1 TO PRINT-DATA 
             MOVE 2 TO PRT-CTL
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             MOVE SCH-COL-2 TO PRINT-DATA 
             MOVE 1 TO PRT-CTL
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             MOVE SPACES TO PRINT-DATA
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             GO TO USER-ROUTINE-XIT 
           END-IF 
  
           IF GTBL-SEL-TYPE = TYPE-FILE 
           THEN 
             MOVE FILE-COL-1 TO PRINT-DATA
             MOVE 2 TO PRT-CTL
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             MOVE FILE-COL-2 TO PRINT-DATA
             MOVE 1 TO PRT-CTL
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             MOVE SPACES TO PRINT-DATA
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             GO TO USER-ROUTINE-XIT 
           END-IF 
  
           IF GTBL-SEL-TYPE = TYPE-SUBSCH 
           THEN 
             MOVE SUB-COL-1 TO PRINT-DATA 
             MOVE 2 TO PRT-CTL
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             MOVE SUB-COL-2 TO PRINT-DATA 
             MOVE 1 TO PRT-CTL
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             MOVE SPACES TO PRINT-DATA
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             GO TO USER-ROUTINE-XIT 
           END-IF 
  
           IF GTBL-SEL-TYPE = TYPE-MD 
           THEN 
             MOVE MD-COL-1 TO PRINT-DATA
             MOVE 2 TO PRT-CTL
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             MOVE MD-COL-2 TO PRINT-DATA
             MOVE 1 TO PRT-CTL
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             MOVE SPACES TO PRINT-DATA
             PERFORM WRITE-LINE THRU WRITE-LINE-XIT 
  
             GO TO USER-ROUTINE-XIT 
           END-IF 
  
       USER-ROUTINE-XIT.
           EXIT.
  
  
      ******************************************************************
      * 
      * OUTPUT-ERROR. 
      * 
      * DIAGNOSTIC CONSISTS ONLY OF MESSAGE TEXT. 
  
       OUTPUT-ERROR.
           MOVE MSG-NUM (MSG-IDX) TO DIAG-NUM.
           MOVE MSG-TEXT (MSG-IDX) TO DIAG-TEXT.
           MOVE DIAG-LINE TO STD-REPORT-REC.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
  
       OUTPUT-ERROR-XIT.
           EXIT.
      /*****************************************************************
      * 
      * COMMON OUTPUT ROUTINES
  
  
      ******************************************************************
      * 
      * DISPLAY-LINE. 
      * 
      * DISPLAY-LINE PRINTS THE LINE THAT IS PASSED IN "STD-REPORT-REC".
      * IF "LINE-CT" EXCEEDS THE ALLOWED PAGE LENGTH, IT WILL FIRST 
      * PRINT A PAGE FOOTING AND START A NEW PAGE WITH A PAGE HEADING.
      * IF "LINE-CT" = 99, IT WILL JUST START A NEW PAGE WITH A PAGE
      * HEADING FIRST.
  
*CALL DISPLAYLN 
      /*****************************************************************
      * 
      * WRITE-LINE. 
      * 
      * WRITE-LINE PERFORMS THE ACTUAL PRINTING FOR DISPLAY-LINE. IT
      * MAY ALSO BE CALLED ON ITS OWN. IT PRINTS THE LINE CONTAINED IN
      * "PRINT-LINE" AND THEN CLEARS IT.
      * 
      * INPUT:   PRT-CTL          - 0 FOR PAGE EJECT
      *                           - 1 SINGLE SPACE LINES
      *                           - 2 DOUBLE SPACE LINES
      *                           - 3 TRIPLE SPACE LINES
  
*CALL WRITELN 
