*DECK CTL 
USETEXT TDFLDEF 
USETEXT TENVIRN 
USETEXT TEXPRES 
USETEXT TNUMOPT;
USETEXT TSBASIC 
      PROC CTL; 
      BEGIN 
  
  
#  THIS PROGRAM IS THE ENTRY POINT OF QUERY UPDATE. 
  
    IT PERFORMS SOME INITIALIZATION BEFORE CALLING THE COMPASS
    ROUTINE OPENTL (WHICH WILL DETERMINE, BY CALLING THE PP ROUTINE RWE,
   IF QU IS RUN AT A BATCH OR INTERCOM CONTROL POINT), THEN LOADS AND 
   ENTER OVERLAY 1-0 (WHICH, WITH ITS SECONDARY OVERLAYS, CONTAINS ALL
    THE SYNTAX ANALYSIS MECHANISM). 
  
   THE OVERLAY 1-0 (ROUTINE SYNTAX) WILL IN TURN LOAD AND ENTER THE 
   OVERLAY 1-4 (SYNTAX FOR HELP AND EXHIBIT). 
   UPON DETECTING THAT IT IS LOADED FOR THE FIRST TIME, OVERLAY 1-4 
   (ROUTINE SYNTAX4) WILL OPEN THE DEFAULT CATALOG (SIS FILE ZZZZZQ2) 
   AND RETURN TO OVERLAY 1-0. 
   OVERLAY 1-0 AT THIS POINT CALLS THE ROUTINE SYNIO TO ISSUE THE 
   PROMPTING CHARACTERS (-- IN THE RELEASED PRODUCT) AND REQUEST THE
   FIRST TRANSMISSION FROM THE USER.
  
          THE FOLLOWING PAGES CONTAIN A LISTING OF COMMON DECKS 
          EXTENSIVELY USED BY QUERY UPDATE ROUTINES.              # 
      CONTROL EJECT;
#-------------------------------------------------------------- 
 BELOW IS A LIST OF THE INSTALLATION OPTIONS AND THE DEFINED
 CONSTANTS.  NOTE THAT IN MANY CASES IF ONE INSTALLATION
 OPTION IS CHANGED, MANY OTHER DEPENDENT OPTIONS MUST ALSO
 BE CHANGED.
----------------------------------------------------------------
  
NUMOPT
  
NAME           USE                      DECKS TO BE COMPILED
                                           IF CHANGED 
  
MAXLINE   MAXIMUM NUMBER OF PRINT        SYMPL DECKS: CTL,EXHIBER,
          LINES PER REPORT PAGE.                      PAGE,PAGESYN
                                         COMPASS DECKS: QU,OPENTL,
                                                        QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
MAXCOL    MAXIMUM NUMBER OF COLUMNS      SYMPL DECKS: CTL,XEQREP, 
          PER PRINT PAGE.                             PAGESYN,FORMALT 
                                         COMPASS DECKS: QU,OPENTL,
                                                        QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
MAXWPL    MAXIMUM NUMBER OF WORDS PER    SYMPL DECKS: XEQREP,EEXPEVAL 
          ONE LINE OF A REPORT. THIS IS               DUPLICATE,PAGE
          EQUAL TO THE NUMBER OF PRINTER              DTLSYN,EVALUATE 
          PAGES PER REPORT PAGE TIMES                 PAGESYN,EXHIBER 
          THE NUMBER OF WORDS PER LINE                CTL,DATANAM 
          IN ONE PRINTER PAGE, OR                     SYNTAX,FORMALT
          MAXWPL = NUMPRPG * MXHDWPL                  DEFDESC,PERSYNX 
          THIS CANNOT CHANGE UNLESS                   RECORDING 
          EITHER NUMPRPG OR MXHDWPL                   BUDEXTR 
          CHANGES.                       COMPASS DECKS: QU,OPENTL,
                                                        QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
MAXHDWC   THIS IS THE NUMBER OF          SYMPL DECKS: PAGE,CTL
          COLUMNS IN ONE PRINTER PAGE.                XEQREP,EEXPEVAL 
          THERE MAY BE MORE THAN ONE                  DTLSYN,EVALUATE 
          PRINTER PAGE PER REPORT                     DUPLICATE,PAGE
          PAGE. IF THIS IS CHANGED,                   PAGESYN,EXHIBER 
          MXHDWPL MUST ALSO CHANGE.                   CTL,SYNTAX
          MXHDWPL = (MAXHDWC + 9)/10                  DATANAM,FORMALT 
          ALSO, MAXWPL MUST BE CHANGED.               DEFDESC,PERSYNX 
          MAXWPL = NUMPRPG * MXHDWPL                  RECORDING,BUDEXTR 
                                         COMPASS DECKS: QU,QU0100 
                                                        OPENTL,QU0104 
                                         EOR DECK: CWEOR1 
  
NUMPRPG   THIS IS THE NUMBER OF PRINTER  SYMPL DECKS: XEQREP,EEXPEVAL 
          PAGES PER REPORT PAGE. THIS                 DUPLICATE,PAGE
          MUST NOT EXCEED 7. IF THIS                  DTLSYN,EVALUATE 
          CHANGED, MAXWPL MUST ALSO                   PAGESYN,EXHIBER 
          BE CHANGED.                                 CTL,SYNTAX, 
          MAXWPL = MXHDWPL * NUMPRPG                  DATANAM,FORMALT 
                                                      DEFDESC,PERSYNX 
                                                      RECORDING,BUDEXTR 
                                         COMPASS DECKS: QU,OPENTL,
                                                        QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
MXHDWPL   THIS IS THE NUMBER OF WORDS    SYMPL DECKS: XEQREP,EEXPEVAL,
          PER LINE IN ONE PRINTER PAGE.               DUPLICATE,PAGE, 
          THIS CANNOT CHANGE UNLESS                   DTLSYN,EVALUATE,
          MAXHDWC CHANGES.                            PAGESYN,EXHIBER,
          MXHDWPL = (MAXHDWC + 9)/10                  CTL,SYNTAX, 
          IF THIS CHANGES, MAXWPL MUST                DATANAM,FORMALT,
          BE MODIFIED ACCORDINGLY.                    DEFDESC,PERSYNX,
         MAXWPL = NUMPRPG * MXHDWPL                  RECORDING,BUDEXTR
                                          COMPASS DECKS: QU,OPENTL, 
                                                        QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
MAXSECTS  THIS IS THE MAXIMUM NUMBER OF  SYMPL DECKS: PAGESYN,EXHIBER,
          SECTIONS ALLOWED PER REPORT PAGE.           PAGE,CTL
                                         COMPASS DECKS: QU,OPENTL,
                                                        QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
MAXIMAGE  THIS IS THE MAXIMUM NUMBER     SYMPL DECKS: PAGESYN,EXHIBER,
          OF IMAGES ALLOWED.                          PAGE,CTL
                                         COMPASS DECKS: QU,OPENTL,
                                                        QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
DFTSECTS  THIS IS THE DEFAULT VALUE      SYMPL DECKS: SYNTAX, CTL 
          FOR THE NUMBER OF SECTIONS     COMPASS DECKS: QU,OPENTL,
          IN A PAGE.                                    QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
DFTIMAGE  THIS IS THE DEFAULT VALUE      SYMPL DECKS: SYNTAX, CTL 
          FOR THE NUMBER OF IMAGES       COMPASS DECKS: QU,OPENTL,
          PER PAGE.                                     QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
DFTLINE   THIS IS THE DEFAULT VALUE      SYMPL DECKS: SYNTAX, CTL 
          FOR THE NUMBER OF LINES        COMPASS DECKS: QU,OPENTL,
          PER PAGE.                                     QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
DFTCOL    THIS IS THE DEFAULT VALUE      SYMPL DECKS: SYNTAX, CTL 
          FOR THE NUMBER OF COLUMNS      COMPASS DECKS: QU,OPENTL,
          PER PAGE.                                     QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
MAXSELE   THIS IS THE MAXIMUM NUMBER OF   SYMPL DECKS: CTL,XEQREP,PAGE
          SELECTS ALLOWED PER REPORT.                  EEXPEVAL,
                                                       DUPLICATE,DTLSYN 
                                                       EVALUATE,SYNTAX
                                                       RECORDING,PAGESYN
                                                       EXHIBER,DATANAM
  
MAXBREA   THIS IS THE MAXIMUM NUMBER OF   SYMPL DECKS: CTL,XEQREP,PAGE
          BREAKS ALLOWED PER REPORT.                   EEXPEVAL 
                                                       DUPLICATE,DTLSYN 
                                                         EVALUATE,SYNTAX
                                                       RECORDING,PAGESYN
                                                       EXHIBER,DATANAM
  
DATELINE  THIS IS THE DEFAULT LINE       SYMPL DECKS: PAGESYN, CTL
          NUMBER ON WHICH THE DATE       COMPASS DECKS: QU,OPENTL,
          WILL BE PRINTED.                              QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
DATCOL    THIS IS THE DEFAULT COLUMN     SYMPL DECKS: PAGESYN, CTL
          NUMBER ON WHICH THE DATE       COMPASS DECKS: QU,OPENTL,
          WILL BEGIN TO BE PRINTED.                     QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
TIMLINE   THIS IS THE DEFAULT LINE       SYMPL DECKS: PAGESYN, CTL
          NUMBER ON WHICH THE TIME       COMPASS DECKS: QU,OPENTL,
          WILL BE PRINTED.                              QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
TIMCOL    THIS IS THE DEFAULT COLUMN     SYMPL DECKS: PAGESYN, CTL
          NUMBER ON WHICH THE TIME       COMPASS DECKS: QU,OPENTL 
          WILL BEGIN TO BE PRINTED.                     QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
PGNLINE   THIS IS THE DEFAULT LINE       SYMPL DECKS: PAGESYN, CTL
          NUMBER ON WHICH THE PAGE       COMPASS DECKS: QU,OPENTL,
          NUMBER WILL BE PRINTED.                       QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
PGNCOL    THIS IS THE DEFAULT COLUMN     SYMPL DECKS: PAGESYN, CTL
          NUMBER ON WHICH THE PAGE       COMPASS DECKS: QU,OPENTL,
          NUMBER WILL BE PRINTED.                       QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
CARDSIZE  THIS IS THE NUMBER OF CARD     SYMPL DECKS: CTL, READ 
          COLUMNS TO BE PROCESSED BY     COMPASS DECKS: QU,OPENTL,
          QU. THE LIMITS ARE 1 AND 80.                  QU0100,QU0104 
                                         EOR DECK: CWEOR1 
  
COMPOUND  THIS IS THE SIZE OF THE        SYMPL DECKS: CTL,EXPANAL 
          STACK USED TO STORE A QU       COMPASS DECKS: QU,OPENTL 
          EXPRESSION. THIS VALUE                        QU0100,QU0104 
          DETERMINES HOW MANY OP-        EOR DECK: CWEOR1 
          ERATIONS MAY BE SPECIFIED 
          IN ONE QU EXPRESSION. 
  
COMKEYL   THIS IS THE NUMBER OF WORDS    SYMPL DECKS: CTL, USE
          ALLOCATED FOR THE KEY FIELS    COMPASS DECKS: QU,OPENTL,
          OF AN INDEXED SEQUENTIAL FILE                 QU0100,QU0104 
          COMMON BLOCK /CCOMMON/ USED BY EOR DECK: CWEOR1 
          OWNCODE ROUTINES. LIMITS ARE
          1 AND 26
  
  
OPTIONS:  
  
CONTINUE  THESE ARE THE CONTINUATION     SYMPL DECKS: CTL, QU2IO
          CHARACTERS FOR INPUT FROM CARDS 
          OR TERMINAL.  UP TO TEN SYMBOLS 
          MAY BE DEFINED.  IF AN APOSTROPHE,
          AN EQUIVALENCE SIGN, OR A SEMI- 
          COLON IS DESIRED, THE CONSTANT
          "CONTINUE" SHOULD BE DEFINED
          WITH THE OCTAL VALUE. 
  
SEP       THIS IS THE DEFAULT ALPHA-
          NUMERIC LITERAL DELIMETER.     SYMPL DECKS: CTL 
  
NEXTDIR   THIS IS THE PROMPTING CHAR-    SYMPL DECKS: SYNTAX,EXHIBER, 
          ACTER SENT TO THE CRT FOR THE 
         NEXT QU DIRECTIVE.  THERE                   RECORDING, CTL 
          SHOULD BE A LEADING SKIP
          CHARACTER.
  
NEXTDATA  THESE ARE THE PROMPTING CHAR-  SYMPL DECKS: CTL, USINGEX
          ACTERS REQUIRED BY THE
          "USING" OPTION OF THE INSERT/ 
          DELETE/UPDATE DIRECTIVES. 
          THERE SHOULD BE A LEADING 
          SKIP CHARACTER. 
  
UNIVDFLT  THIS IS THE DEFAULT UNIVERSAL  SYMPL DECKS: CTL,RECORDING 
          CHARACTER.
  
VETOANSW  THIS IS THE PROMPT TO REQUEST  SYMPL DECKS: CTL, PERSYNX, 
          AN ANSWER TO THE VETO OPTION.               CTL40 
          THERE SHOULD BE A LEADING 
          SKIP CHARACTER. 
  
VETOYES   THIS IS THE "YES" ANSWER TO    SYMPL DECKS: CTL, PERSYNX, 
          THE VETO REQUEST.                           CTL40 
  
VETONO    THIS IS THE "NO" RESPONSE TO   SYMPL DECKS: CTL, PERSYNX, 
          THE VETO REQUEST.                           CTL40 
  
VETOSTOP  THIS IS THE EXIT RESPONSE TO   SYMPL DECKS: CTL, PERSYNX, 
          THE VETO REQUEST.                           CTL40 
  
VETOGO    THIS IS THE PROCEED RESPONSE   SYMPL DECKS: CTL,PERSYNX 
          TO THE VETO REQUEST.                        CTL40 
  
VETO      THE VETO DIRECTIVE MAY BE      SYMPL DECKS: CTL, PERSYNX, 
          TURNED ON OR OFF AT LOAD                    CTL40 
          TIME, DEPENDING ON THE VALUE
          OF "VETO".
  
FIELDNAMEMAX  THIS IS THE MAXIMUM        SYMPL DECKS: DATANAM, CTL
              LEVEL OF QUALIFICATION
              FOR A FIELD NAME. 
  
MAXSELECT THIS IS THE MAXIMUM NUMBER     SYMPL DECKS: CTL,XEQREP,PAGE,
          OF SELECT DIRECTIVES WHICH                  EEXPEVAL,DUPLICATE
          MAY BE SPECIFIED IN A REPORT.               EVALUATE,RECORDING
                                                      PAGESYN,FORMALT,
                                                      DEFDESC,PERSYNX 
                                                      BUDEXTR,EXHIBER,
                                                      SYNTAX,DATANAM, 
                                                      DTLSYN
  
MAXBREAK  THIS IS THE MAXIMUM NUMBER     SYMPL DECKS: CTL,XEQREP,PAGE,
          BREAKS WHICH MAY BE                         EEXPEVAL,DUPLICATE
          SPECIFIED IN A REPORT.                      EVALUATE,RECORDING
                                                      PAGESYN,FORMALT,
                                                      DEFDESC,PERSYNX,
                                                      BUDEXTR,EXHIBER,
                                                      SYNTAX,DATANAM, 
                                                      DTLSYN
  
MAXREPORT THIS IS THE MAXIMUM NUMBER OF   SYMPL DECKS:CTL, PAGESYN
          REPORT ENTRIES ALLOWED. 
  
  
-----------------------------------------------------------------#
CONTROL EJECT;                                                           CTL
*CALL VECTORS                                                            CTL
CONTROL EJECT;                                                           CTL
      XREF PROC INIOVL;            # INITIALIZE OVERLAY LOADING ROUTINE#
      XREF ITEM QU$RPT;            # NON-ZERO IF THIS IS *REPORT*      #
      XREF PROC CLOSETL;     #FLUSHES OUTPUT BUFFER#
      XREF PROC LOADOVL;     #LOADS OVERLAYS# 
      XREF PROC RETURNM;     #RETURNS A FILE# 
      XREF PROC DIAG;        #ISSUES ERROR DIAGNOSTICS# 
      XREF PROC RESCSF;            # RESTORE THE CONTROL STATEMENT FILE#
      XREF PROC SAVECSF;           # SAVE THE CONTROL STATEMENT FILE   #
         XREF PROC WRITE; 
         ITEM DUMRET; 
          XDEF ITEM ABORTED B;  # TRUE IF PROC ABORT WAS ENTERED# 
      XREF PROC ATTACH; 
    XDEF ARRAY CATAFDB[14]; ITEM CATALL U(0,0,60);
  
      XDEF BEGIN
      BASED ARRAY KEYWSA[0] S(1);      # ARRAY FOR 10 CHARACTER KEY SO # FEAT157
        BEGIN                          # -KEYAREA- CAN PRECEDE QUIWSA  # FEAT157
        ITEM KEYAREA  C(0,0,10);   # KEY FOR THE CATALOG FILES         # FEAT157
        END                                                              FEAT157
      BASED ARRAY QUIWSA[0] S(1);      # ARRAY IN HIGH CORE FOR ALL    # FEAT157
        BEGIN                          # TRANSMISSIONS. SET IN -INITIAL# FEAT157
        ITEM INWORD  C(0,0,10);    # CHAR ITEM FOR READING INPUT       # FEAT157
        END                                                              FEAT157
      ITEM VERSTL I;               # TL ASSOCIATED WITH PRIMARY CATALOG#
      ITEM MAXTL I;                # MAX TL THAT CAN FIT IN QUIWSA BUFR#
      ITEM QUIRL;             # INPUT RECORD LENGTH # 
      END 
  
      XDEF ARRAY AINCREMENT [0:1];     # THESE CONTAIN THE CURRENT     #
        ITEM INCREMENT C(0,0,10);  # INCREMENT FOR RECORD+DUPLICATE    #
      CONTROL EJECT;
#----------------------------------------------------------------------#
#                                                                      #
#     C T L                                                            #
#                                                                      #
#     THIS IS THE MAIN LOOP FOR QUERY UPDATE.                          #
#----------------------------------------------------------------------#
  
  
      INIOVL;                      # INITIALIZE OVERLAY LOADIND        #
  
      CONTROL IFEQ OS$NAME,SCOPE; 
      SAVECSF;                     # SAVE THE CONTROL STATEMENT FILE   #
      CONTROL ENDIF;
  
          LOADOVL(BASEX0, O"11", 0);  #LOAD INITIAL OVERLAY            # CTL
  
  
  
  
      LOOP: 
          LOADOVL(BASEX0,PRIMARY,0);
                 #LOAD AND TRANSFER TO OVERLAY X,0 #
      EXIT: 
                 INDEX=2;  #INDEX VALUE FOR STOP#                       000220
  
      CONTROL IFEQ OS$NAME,SCOPE; 
      RESCSF;                      # RESTORE THE CONTROL STATEMENT FILE#
      CONTROL ENDIF;
  
      IF NOT DFLAG01[0]                                                  CTL
        AND QU$RPT EQ 0            # WE ARE NOT IN *REPORT*            #
      THEN                                                               CTL
        BEGIN                                                            CTL
        LOADOVL(BASEX0, 5, 0);                                           CTL
        END                                                              CTL
      RETURN; 
                                                                         CTL
          #---------------END OF EXECUTION-----------------#            000240
                                                                        000250
                                                                        000260
  
      XREF PROC AUTOPC; 
      XDEF PROC LOADX0; 
      PROC LOADX0;           # WHEN A PRIMARY OVERLAY 1-0, 2-0, ETC 
                                IS THROUGH WITH PROCESSING, IT SETS 
                                PRIMARY TO THE NUMBER OF THE NEXT 
                                PRIMARY TO CALL AND ENTERS HERE.  # 
      BEGIN 
                 GOTO LOOP;  #CALL LOADOVL AND TRANSFER TO OVERLAY# 
      END 
  
      XDEF PROC STOPEXEC;    #PROCEDURE TO PROVIDE AN ENTRY POINT TO #
      PROC STOPEXEC;        # THE SYNTAX SECTION "STOP".  # 
      BEGIN 
      ABORTED = FALSE;                                                  001200
      AUTOPC;   # CLOSE ANY OPEN FILES IN (1,0) # 
          GOTO EXIT;
      END 
  
      XDEF  PROC ABORT;                                                 000940
      PROC ABORT; 
     BEGIN
          ABORTED=TRUE;   #ABNORMAL TERMINATION#
      AUTOPC;    # CALL THE OVERLAY THAT WAS ACTIVE TO CLEAN UP ITS     000630
                   OWN MESS IF IT CAN #                                 000640
      GOTO EXIT;
      END 
  
      XDEF PROC IERR; 
      PROC IERR;
  
#                                                                      #
#         I E R R                                                      #
#                                                                      #
#----------------------------------------------------------------------#
#              THIS PROC IS CALLED BY QUERR WHEN AN ERROR              #
#         OCCURED IN A CALL TO CMM                                     #
#----------------------------------------------------------------------#
#                                                                      #
#                                                                      #
#         EXIT  APPROPRIATE ERROR MESSAGE IS ISSUED                    #
#         ENTRY  ITEM QUESV CONTAINS MEMORY ERROR CODE                 #
#                                                                      #
#         CALLS  PROC WRITE IN QU2IO                                   #
  
      BEGIN 
      XREF PROC DIAG;        #ERROR PROCESSOR                          #
      XREF PROC WRITE;       #WRITE ERROR MESSAGE                      #
      XREF PROC AUTOPC;      #CALL AUTOPSY TO CLOSE ALL FILES          #
      XREF PROC LOADX0;      #LOAD OVERLAY                             #
      XREF ITEM QUESV;       #MEMORY ERROR CODE                        #
      XREF ITEM QUESF;             # CMM ERROR WORD - NONZERO FOR ERROR#
      ITEM RC;               #RETURN FLAG FROM *WRITE*                 #
  
      IF QUESV EQ  0 THEN    #IF USER ERROR                            #
        BEGIN 
        WRITE(" (946) SYSTEM ABORT-MEMORY REQUEST ERROR", 40, RC);
        CLOSETL;                   # CLOSE AND FLUSH I/O FILES         #
        ABORT;                     # INITIATE ABORT PROCESSING         #
        END 
  
      ELSE
        BEGIN 
        WRITE(" (947) INSUFFICENT FL-TRANSMISSION IGNORED", 42, RC);
        ABORTED = TRUE;            # TREAT THIS AS AN ABORT            #
        AUTOPC;              #CLOSE ALL OPEN FILES                     #
        ABORTED = FALSE;           # CLEAR ABORT FLAG FOR FILE CLEANUP #
        QUESF = 0;                 # CLEAR ERR FLAG THAT 5,0 LOOKS AT  #
        PRIMARY=1;           #LOAD (1,0) OVERLAY                       #
        SECONDARY=0;
        LOADX0; 
        END                  #RETURN TO USER                           #
      END 
  
  
  
  
      END                    #END OF PROC CTL  #
      TERM
