*DECK     DCGENER 
       IDENTIFICATION DIVISION. 
       PROGRAM-ID. GENR.
*CALL COPYRIGHT 
      * PERFORM INITIAL EDITS OF STATEMENT TYPE AND SEQUENCE
      * PRINT GENERATE REQUEST (ONE COMMAND)
      * TABLE COMMAND AND TITTLE
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION. 
       SOURCE-COMPUTER. CYBER.
       OBJECT-COMPUTER. CYBER.
*CALL UPQRYSN 
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT SYSINPUT ASSIGN TO "INPUT". 
           SELECT SYSPRINT ASSIGN TO "OUTPUT".
       DATA DIVISION. 
       FILE SECTION.
       FD  SYSINPUT 
           LABEL RECORDS ARE OMITTED
           DATA RECORD IS TRANS-IN. 
       01  TRANS-IN.
           03  USER-STMT-IN            PICTURE X(72). 
           03  STMT-SEQNO              PICTURE X(8).
  
*CALL     SYSPRTFD
  
*CALL GENCS 
  
      ******************************************************************
      * 
       WORKING-STORAGE SECTION. 
       77  ERROR-CODE                  PICTURE XX.
       77  STORE-SUB                   PICTURE 99.
       77  SUB3    PICTURE 99 COMP. 
       77  ON-LINE-SW              PICTURE X  VALUE "N".
       77  END-SW                      PICTURE X VALUE " ". 
       77  ERROR-REQUEST               PICTURE X VALUE "N". 
  
      * 
      *    REQUEST TRANSACTION
      * 
       01  TRANS-WORK.
           03  QUERY-TRANS. 
               05  FIRST-TEN. 
                   07  FIRST-SEVEN. 
                       09  FIRST-SIX. 
                           11  FIRST-FIVE.
                               13  FIRST-FOUR.
                                   15  BYTE-1  PICTURE X. 
                                   15  FILLER  PICTURE XXX. 
                               13  FILLER      PICTURE X. 
                           11  FILLER  PICTURE X. 
                       09  FILLER      PICTURE X. 
                   07  FILLER          PICTURE XXX. 
               05  GENER-FILL          PICTURE X(62). 
      * 
      *    MESSAGES TO APPEAR AT END OF PROCESSING
      * 
       01  TOTAL-MESSAGES.
           03  TOTAL-MESS-2.
               05  FILLER              PICTURE X(15)   VALUE SPACES.
               05  FILLER              PICTURE X(30)   VALUE
                  "*** TOTAL COMMANDS ACCEPTED=  ". 
               05  TOTAL-ACC           PICTURE ZZZ9.
           03  TOTAL-MESS-3.
               05  FILLER              PICTURE X(15)   VALUE SPACES.
               05  FILLER              PICTURE X(30)   VALUE
                  "*** TOTAL COMMANDS REJECTED=  ". 
               05  TOTAL-REJ           PICTURE ZZZ9.
           03  TOTAL-MESS-4            PICTURE X(44)   VALUE
                  "*** END DATA CATALOGUE RETRIEVAL REPORTS ***". 
           03  TOTAL-MESS-5.
               05  FILLER              PICTURE X(15)   VALUE SPACES.
               05  FILLER              PICTURE X(41)   VALUE
                  "*** TOTAL GENERATION COMMANDS ATTEMPTED= ".
               05  TOTAL-GENER         PICTURE ZZZ9.
           05  GENERS-GOOD PIC S9(4) COMP-1 VALUE ZEROS.
           05  GENERS-BAD  PIC S9(4) COMP-1 VALUE ZEROS.
           05  GENERS-TOTAL PIC S9(4) COMP-1 VALUE ZEROS. 
  
       01  LITERAL-TABLE. 
           03  LITERAL-2              PICTURE X      VALUE "*". 
           03  LITERAL-3              PICTURE X      VALUE " ". 
           03  LITERAL-9              PICTURE X(10)  VALUE "$GENERATE ".
           03  LITERAL-10             PICTURE X(4)   VALUE "OPT ".
           03  LITERAL-11             PICTURE X(7)   VALUE "SELECT ". 
           03  LITERAL-12             PICTURE X(7)   VALUE "OPTIONS". 
           03  LITERAL-13             PICTURE X(4)   VALUE "SEL ".
           03  LITERAL-14             PICTURE X(6)   VALUE "INPUT?".
  
  
       PROCEDURE DIVISION.
      **********************************************************
      **********************************************************
      * 
      *    INITIALIZATION 
      * 
      **********************************************************
      **********************************************************
       0000-BEGIN.
           IF INTERACTIVE MOVE "Y" TO ON-LINE-SW. 
           OPEN INPUT SYSINPUT. 
           OPEN OUTPUT SYSPRINT.
           MOVE SPACES TO PRINT-LINE. 
           MOVE SPACES TO ERROR-CODES.
           MOVE ZERO TO ERROR-COUNT.
           MOVE ZERO TO RETURN-CODE.
      * 
      *    READ 1ST STATEMENT MUST BE FUNCTION HEADER 
      * 
       0100-READ-1ST. 
           IF ON-LINE-SW EQUAL TO "Y" 
               PERFORM 5100-PRINT-INPUT THRU 5199-PRINT-INPUT-XIT.
           READ SYSINPUT AT END GO TO 1950-NO-CMD-ERR.
           MOVE TRANS-IN TO TRANS-WORK. 
           IF FIRST-TEN EQUAL TO LITERAL-9
               GO TO 1010-GEN-REQUEST.
           CALL "GEN001". 
           PERFORM 6300-PRT-HDG THRU 6399-PRT-HDG-XIT.
           GO TO 1900-NO-GEN-ERR. 
  
      ******************************************************************
      ******************************************************************
      * 
      *    PROCESS $GENERATE REQUEST
      * 
      ******************************************************************
      ******************************************************************
       1010-GEN-REQUEST.
           MOVE "N" TO ERROR-CHECK. 
           MOVE SPACES TO END-SW. 
           MOVE ZERO TO SUB3. 
           CALL "GEN001". 
               PERFORM 6300-PRT-HDG THRU 6399-PRT-HDG-XIT 
               PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT.
           IF ON-LINE-SW EQUAL "Y"
               MOVE "D" TO 8BY11-FLAG.
           MOVE QUERY-TRANS TO QRY-HOLD (1).
  
      ******************************************************************
      * 
      *    GENERATION REQUEST---OPTION CARD SEARCH
      ******************************************************************
       1500-OPTION-EXTRACT. 
           IF ON-LINE-SW EQUAL TO "Y" 
               PERFORM 5100-PRINT-INPUT THRU 5199-PRINT-INPUT-XIT.
           READ SYSINPUT AT END GO TO 1950-NO-CMD-ERR.
           MOVE TRANS-IN TO TRANS-WORK. 
           IF FIRST-FOUR EQUAL TO LITERAL-10
               GO TO 1505-CK-FULL-OPTION. 
           IF FIRST-SEVEN NOT EQUAL TO LITERAL-12 
               GO TO 1540-SELECT-SUB. 
       1505-CK-FULL-OPTION. 
               PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT.
           MOVE QUERY-TRANS TO QRY-HOLD (2).
           MOVE "03" TO STORE-SUB.
      * 
      *    PROCESS CONTINUATION CARDS 
      * 
       1510-CONTINUE-EXTRACT. 
           IF ON-LINE-SW EQUAL TO "Y" 
               PERFORM 5100-PRINT-INPUT THRU 5199-PRINT-INPUT-XIT.
           READ SYSINPUT AT END GO TO 1950-NO-CMD-ERR.
           MOVE TRANS-IN TO TRANS-WORK. 
           IF BYTE-1 NOT EQUAL TO LITERAL-3 
               GO TO 1545-COMMENTS-EXIST. 
           MOVE QUERY-TRANS TO QRY-HOLD (STORE-SUB).
           PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT.
           ADD 1 TO STORE-SUB.
           IF STORE-SUB GREATER THAN 5
               GO TO 1960-CONT-ERR. 
           GO TO 1510-CONTINUE-EXTRACT. 
      * 
      *    PROCESS COMMENTS 
      * 
       1540-SELECT-SUB. 
           MOVE "02" TO STORE-SUB.
       1545-COMMENTS-EXIST. 
           IF BYTE-1 NOT EQUAL TO LITERAL-2 
               GO TO 1550-SELECT-EXTRACT. 
               PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT.
           IF ON-LINE-SW EQUAL TO "Y" 
               PERFORM 5100-PRINT-INPUT THRU 5199-PRINT-INPUT-XIT.
           READ SYSINPUT AT END GO TO 1950-NO-CMD-ERR.
           MOVE TRANS-IN TO TRANS-WORK. 
           GO TO 1545-COMMENTS-EXIST. 
      * 
      *    PROCESS SELECT CARD
      * 
       1550-SELECT-EXTRACT. 
           IF FIRST-SEVEN EQUAL TO LITERAL-11 
               GO TO 1560-FOUND-SELECT. 
           IF FIRST-FOUR EQUAL TO LITERAL-13
               GO TO 1560-FOUND-SELECT. 
           GO TO 1912-COMMON-ERR13. 
       1560-FOUND-SELECT. 
           MOVE QUERY-TRANS TO QRY-HOLD (STORE-SUB).
           PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT.
           GO TO 1610-GOOD-COMMAND. 
  
      **********************************************************
      * 
      *    END INITIAL EDIT OF COMMAND - CALL EDIT02
      * 
      ********************************************************
       1600-LAST-COMMAND. 
           MOVE "Y" TO END-SW.
       1610-GOOD-COMMAND. 
           CLOSE SYSPRINT.
           CALL "CBL010". 
  
      ******************************************************* 
      *    PROCESSING RETURNS FROM OUTSIDE EDITS TO HERE
      ******************************************************* 
       1700-PROCESS-OVER. 
           ADD 1 TO GENERS-TOTAL. 
           IF ERROR-COUNT EQUAL TO ZERO 
               ADD 1 TO GENERS-GOOD 
               GO TO 1730-RETURN-PROCESSING.
           ADD 1 TO GENERS-BAD. 
           MOVE "Y" TO ERROR-REQUEST. 
       1730-RETURN-PROCESSING.
      ******************************************************
      * 
      *    PROCESS NEXT COMMAND (UPON RETURN FROM PROCESSING) 
      * 
      ******************************************************* 
           OPEN OUTPUT SYSPRINT.
           IF END-SW EQUAL TO "Y" 
               GO TO 1800-EOJ.
           IF ERROR-CHECK EQUAL TO "Y"
               MOVE "E" TO END-SW.
           MOVE SPACES TO ERROR-CODES.
           MOVE ZERO TO ERROR-COUNT.
           IF END-SW = "F"
           THEN 
             GO TO 0100-READ-1ST
           END-IF 
           IF ON-LINE-SW EQUAL TO "Y" 
               PERFORM 5100-PRINT-INPUT THRU 5199-PRINT-INPUT-XIT.
           READ SYSINPUT AT END 
               GO TO 1800-EOJ.
           MOVE TRANS-IN TO TRANS-WORK. 
           IF FIRST-TEN EQUAL TO LITERAL-9
               GO TO 1010-GEN-REQUEST.
           IF END-SW EQUAL TO "E" 
               GO TO 1920-BYPASS-STMTS. 
               MOVE 99 TO LINE-CT 
               PERFORM 6300-PRT-HDG THRU 6399-PRT-HDG-XIT.
  
      * 
      *    PRINT COMMENTS 
      * 
           PERFORM UNTIL BYTE-1 NOT = LITERAL-2 
             PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT 
             IF ON-LINE-SW = "Y"
             THEN 
               PERFORM 5100-PRINT-INPUT THRU 5199-PRINT-INPUT-XIT 
             END-IF 
             READ SYSINPUT INTO TRANS-WORK
                 AT END GO TO 1800-EOJ
           END-PERFORM
  
      * 
      * GO PROCESS NEXT CARD -- MUST BE A SELECT CARD 
      * 
           IF FIRST-SEVEN = LITERAL-11
             OR FIRST-FOUR = LITERAL-13 
           THEN 
             MOVE "01" TO STORE-SUB 
             GO TO 1560-FOUND-SELECT
           ELSE 
             GO TO 1912-COMMON-ERR13
           END-IF 
  
  
      ********************************************************* 
      * 
      *    END OF JOB PROCESSING
      * 
      **************************************************
       1800-EOJ.
               MOVE 99 TO LINE-CT 
               PERFORM 6300-PRT-HDG THRU 6399-PRT-HDG-XIT.
           IF ERROR-REQUEST EQUAL TO "N"
               MOVE ZERO TO RETURN-CODE ELSE
               MOVE "08" TO RETURN-CODE.
           MOVE SPACES TO STMT-LINE.
           IF GENERS-TOTAL EQUAL TO ZERO
               GO TO 1810-END-OF-JOB. 
           MOVE GENERS-TOTAL TO TOTAL-GENER.
           PERFORM FIRST-LINEA-PRINT THRU PRINT-EOJ-LINES.
           MOVE GENERS-GOOD TO TOTAL-ACC. 
           PERFORM SECOND-LINE-PRINT THRU PRINT-EOJ-LINES.
           MOVE GENERS-BAD TO TOTAL-REJ.
           PERFORM THIRD-LINE-PRINT THRU PRINT-EOJ-LINES. 
      * 
      *    FINAL END OF JOB MESSAGE IS PRINTED--JOB ENDED 
      * 
       1810-END-OF-JOB. 
               MOVE 99 TO LINE-CT 
               PERFORM 6300-PRT-HDG THRU 6399-PRT-HDG-XIT.
           MOVE TOTAL-MESS-4 TO STMT-LINE.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           CLOSE SYSPRINT.
           CLOSE SYSINPUT.
           PERFORM RETURN-CODE-00 THRU RETURN-CODE-XIT. 
           STOP RUN.
*CALL RETCODE 
  
      **********************************************************
      * 
      *    QUERY REQUEST ERROR ROUTINES 
      *    COME HERE WHEN NO COMMAND INPUT IS SUBMITTED 
      * 
      ******************************************************************
  
       1900-NO-GEN-ERR. 
           MOVE "22" TO ERROR-CODE. 
           PERFORM 6100-ERROR-RTN THRU 6199-ERROR-RTN-XIT.
           PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT.
           MOVE "F" TO END-SW.
           GO TO 1610-GOOD-COMMAND. 
  
       1912-COMMON-ERR13. 
           MOVE "13" TO ERROR-CODE. 
           PERFORM 6100-ERROR-RTN THRU 6199-ERROR-RTN-XIT.
       1915-BYPASS. 
           MOVE "14" TO ERROR-CODE. 
           PERFORM 6100-ERROR-RTN THRU 6199-ERROR-RTN-XIT.
               PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT.
           MOVE "E" TO END-SW.
           GO TO 1610-GOOD-COMMAND. 
       1920-BYPASS-STMTS. 
           MOVE SPACES TO STMT-LINE.
           MOVE "3" TO PRT-CTL. 
           IF ON-LINE-SW EQUAL TO "N" 
               PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT 
               PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT.
           MOVE SPACE TO END-SW.
       1925-SKIPPED-LINES.
           IF ON-LINE-SW EQUAL TO "Y" 
               PERFORM 5100-PRINT-INPUT THRU 5199-PRINT-INPUT-XIT.
           READ SYSINPUT AT END 
               GO TO 1800-EOJ.
           MOVE TRANS-IN TO TRANS-WORK. 
           IF FIRST-TEN EQUAL TO LITERAL-9
               GO TO 1010-GEN-REQUEST.
               PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT.
           ADD 1 TO GENERS-TOTAL. 
           ADD 1 TO GENERS-BAD. 
               GO TO 1925-SKIPPED-LINES.
       1950-NO-CMD-ERR. 
           MOVE "16" TO ERROR-CODE. 
           PERFORM 6100-ERROR-RTN THRU 6199-ERROR-RTN-XIT.
           PERFORM 6200-PRINT-STMT THRU 6299-PRINT-STMT-XIT.
           GO TO 1600-LAST-COMMAND. 
       1960-CONT-ERR. 
           MOVE "15" TO ERROR-CODE. 
           PERFORM 6100-ERROR-RTN THRU 6199-ERROR-RTN-XIT.
           GO TO 1915-BYPASS. 
  
      ******************************************************* 
      ******************************************************* 
      * 
      *     SUBROUTINES 
      * 
      ********************************************************
      ********************************************************
      * 
      *    ROUTINE TO PRINT THE WORD "INPUT?" IN CMS/TSO SYSTEM 
      * 
       5100-PRINT-INPUT.
           MOVE LITERAL-14 TO USER-STMT.
           MOVE "D" TO 8BY11-FLAG.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
       5199-PRINT-INPUT-XIT.
           EXIT.
  
      ******************************************************
      * 
      *    TABLE ERROR CODE SUBROUTINE
      * 
      ******************************************************
       6100-ERROR-RTN.
           ADD 1 TO ERROR-COUNT.
           IF ERROR-COUNT IS GREATER THAN 20
               GO TO 6199-ERROR-RTN-XIT.
           MOVE ERROR-CODE TO ERROR-BUILD (ERROR-COUNT).
       6199-ERROR-RTN-XIT.
           EXIT.
      **********************************************************
      * 
      *    PRINT REQUEST ROUTINE
      * 
      **********************************************************
       6200-PRINT-STMT. 
           IF ON-LINE-SW EQUAL TO "Y" 
               GO TO 6299-PRINT-STMT-XIT. 
           MOVE TRANS-IN TO USER-STMT.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
       6299-PRINT-STMT-XIT. 
           EXIT.
      * 
      *    OUTPUT REPORT HEADING
      * 
       6300-PRT-HDG.
           MOVE SPACES TO PRINT-LINE. 
           MOVE SPACES TO ERROR-CODES.
           MOVE ZERO TO ERROR-COUNT.
           MOVE SPACES TO QUERY-REQUEST.
           MOVE 1 TO PRT-CTL. 
           MOVE SPACES TO STD-REPORT-REC. 
           IF ON-LINE-SW EQUAL "N"
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
       6399-PRT-HDG-XIT.
           EXIT.
      * 
      *    END OF REPORT SUMMARY LINES
      * 
       FIRST-LINEA-PRINT. 
           MOVE TOTAL-MESS-5 TO USER-STMT.
           GO TO ALL-LINES-PRINT. 
       SECOND-LINE-PRINT. 
           MOVE TOTAL-MESS-2 TO USER-STMT.
           GO TO ALL-LINES-PRINT. 
       THIRD-LINE-PRINT.
           MOVE TOTAL-MESS-3 TO USER-STMT.
       ALL-LINES-PRINT. 
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
           MOVE SPACES TO STMT-LINE.
           PERFORM DISPLAY-LINE THRU DISPLAY-LINE-XIT.
       PRINT-EOJ-LINES. 
           EXIT.
*CALL     DISPLAYLN 
*CALL     WRITELN 
       USER-ROUTINE.
           GO TO USER-ROUTINE-XIT.
       USER-ROUTINE-XIT.
           EXIT.
