*DECK CBMAIN
  PRGM FTMAIN;                                                          008670
    BEGIN 
#**********************************************************************#
#ROUTINE:  C B M A I N                                                 #
#                                                                      #
#CALLING SEQUENCE:                                                     #
#  CBMAIN - THIS IS THE ROUTINE NAME AND THE FIRST EXCUTABLE INSTRUCT- #
#           IONS IN THE 4,0 OVERLAY. THIS ENTRY LOADS THE 4,1 OVERLAY. #
#  CBOVLP2 - LOADS THE 4,2 OVERLAY.                                    #
#  CBOVLP3 - LOADS THE 4,3 OVERLAY.                                    #
#  CBOVLP4 - LOADS THE 4,4 OVERLAY.                                    #
#                                                                      #
#ENTRY CONDITIONS:                                                     #
#  ABORTFLAG - A FLAG WHICH INDICATES THAT A FATAL ERROR DIAGNOSTIC    #
#             MESSAGE HAS BEEN ISSUED. IT IS SET IN CBDIAG AND CBRDIAG #
#  DDLMEM - CONTAINS THE CURRENT JOB FIELD LENGTH IN LEFTMOST 30 BITS  #
#  MAXFL - CONTAINS THE MAXIMUM FIELD LENGTH ALLOWED BY THE SYSTEM.    #
#  OLD65 - CONTAINS THE LAST WORD ADDRESS OF THE 4,0 OVERLAY.          #
#  RELFLAG - A FLAG WHICH INDICATES THAT THE RELATION DIVISION HAS     #
#            BEEN SPECIFIED.                                           #
#                                                                      #
#EXIT CONDITIONS:                                                      #
#  FTMAIN - OVERLAY 5,1 IS LOADED(TITLE,ALIAS,REALM AND RECORD).       #
#  CBOVLP2 - IF THE ABORT FLAG IS SET THE COMPILATION IS ABORTED, ELSE #
#            OVERLAY 4,2 IS LOADED (SCHEMA/SUB-SCHEMA INTERFACE).      #
#  CBOVLP3 - OVERLAY 4,3 IS LOADED (RELATION DIVISION).                #
#  CBOVLP4 - IF THE ABORT FLAG IS SET, THE COMPILATION IS ABORTED ELSE #
#            OVERLAY 4,4 IS LOADED (RECORD AND REALM LIST).            #
#                                                                      #
#PURPOSE:                                                              #
#  TO MAINTAIN CONTROL OF THE OVERLAY LOADING.                         #
#                                                                      #
#TABLES:                                                               #
#  NONE                                                                #
#                                                                      #
#EXTERNAL PROCEDURES:                                                  #
#  CBABRT - ABORTS CURRENT COMPILATION AND SETS UP CALL TO RE-INITIATE #
#           COMPILATION IN THE EVENT OF MULTIPLE COMPILE.              #
#  DDLPRNT - WRITES CONTENTS OF BUFFER SPECIFIED IN THE PARAMETER LIST #
#            TO THE OUTPUT FILE.                                       #
#  DE$CLSC - DIRECTORY ACCESS ROUTINE TO CLOSE THE SCHEMA FILE.        #
#  LOADOVL - ISSUES THE LOADER REQUESTS.                               #
#                                                                      #
#                                                                      #
#DESCRIPTION:                                                          #
#  CBMAIN - LOADOVL WAS CALLED BY "CNTRL" TO LOAD THE 4,0 OVERLAY.     #
#           CBMAIN IS THE FIRST ROUTINE IN 4,0 THEREFORE IT GETS       #
#           CONTROL. WHEN LOADOVL LOADED THE 4,0 OVERLAY IT STORED THE #
#           CONTENTS OF RA+65 INTO A CELL CALLED OLD65 (LAST WORD ADR  #
#           OF 4,0). THE CONTENTS OF OLD65 IS STORED INTO A CELL CALLED#
#           BASE4X. BASE4X IS NOW THE FIRST WORD ADDRESS WHERE THE 4,1 #
#            THRU 5,4 OVERLAYS WILL BE LOADED.                         #
#                                                                      #
#            LOAD THE 5,1 OVERLAY BY ISSUING A CALL TO LOADOVL.        #
#  CBOVLP2 - A CHECK OF THE ABORT FLAG IS MADE TO SEE IF ANY ERRORS    #
#            HAVE BEEN ISSUED IN THE FIRST PHASE. IF SO DDL IS UNABLE  #
#            TO CONTINUE, THEREFORE A CALL TO CBABRT IS MADE TO ABORT  #
#            THE RUN. IF NO ERRORS WHERE FOUND A CALL TO LOADOVL       #
#            REQUESTING THE LOAD OF 4,2 OVERLAY.                       #
#  CBOVLP3 - CALLS LOADOVL REQUESTING THE LOAD OF THE 4,3 OVERLAY.     #
#  CBOVLP4 - CHECKS THE ABORT FLAG TO SEE IF ANY ERROR MESSAGES WHERE  #
#            ISSUED FROM THE 4,2 OR 4,3 OVERLAYS. IF SO, CBABRT IS CALL#
#            ED TO ABORT THE RUN.IF NO ERRORS WERE FOUND, THE SCHEMA   #
#            FILE IS CLOSED BY CALLING THE ROUTINE DE$CLSC AND THEN    #
#            LOADOVL IS CALLED REQUESTING THE LOAD OF THE 5,4 OVERLAY. #
#                                                                      #
#**********************************************************************#
      XDEF ITEM MAXSELENG;             # CONTAINS THE MAXIMUM SUB-ENTRY#
                                       # LENGTH.                       #
      XDEF ITEM REALMSZ = 520;         # CONTAINS THE SIZE OF THE      #
                                       # BUFFER FOR THE REALM LIST.    #
      XDEF ITEM RELFLAG B;             # TRUE = RELATION DIVISION SPEC-#
                                       # IFIED                         #
      XDEF ITEM SUBSIZE;               # LENGTH OF SUBS ARRAY          #
      XDEF ITEM SUBSPTR;               # POINTER TO SUBS ARRAY         #
      XDEF ARRAY DITSC [24] S(1);;     # ARRAY THAT CONTAINS THE CONTRL#
                                       # WORDS AND THE VARIOUS EXIT CEL#
                                       # LS FROM THE SCHEMA DIRECTORY  #
                                       # ROUTINES.                     #
      XDEF ARRAY SCBUF [195];;         # CRM BUFFER FOR SC DIRECTORY   #
                                       # ACCRESS ROUTINES.             #
      XREF PROC CBABRT;            # ABORTS CURRENT COMPILATION AND    #
                                   # SETS UP CALL TO RE-INITIATE       #
                                   # COMPILATION IN THE EVENT OF       #
                                   # MULTIPLE COMPILE.                 #
      XREF PROC CLSEOUT;               # WRITES VARIOUS TERMINATING    #
                                       # MESSAGES ABOUT THE COMPILATION#
                                       # AND CLOSES THE OUTPUT FILE.   #
      XREF ARRAY DDLIWSA[10];          # CONTAINS THE CURRENT SOURCE   #
        ITEM IWSA C(0,0,10);           # INPUT RECORD.                 #
      XREF ITEM DDLMEM ;               # CONTAINS CURRENT JOB FIELD    #
                                       # LENGTH IN LEFTMOST 30 BITS.   #
      XREF PROC DDLPRNT;               # PRINTS SPECIFIED BUFFER.      #
      XREF PROC DE$CLSC;               # ROUTINE TO CLOSE SCHEMA FILE  #001790
      XREF PROC LOADOVL;               # LOADS THE REQUESTED OVERLAYS. #
      XREF ITEM ABORTFLAG;             # 1 = FATAL DIAGNOSTIC HAS BEEN #
                                       #     ISSUED.                   #
      XREF ITEM OLD65;                 # CONTAINS THE LWA OF THE CURR- #
                                       # ENT OVERLAY.                  #
      ITEM BASE5X;                     # LAST WORD ADDRESS OF THE 5,0  #008690
                                       # OVERLAY.                      #
      XDEF BEGIN
      ARRAY SYMBUF [512];                 # SYNBOL TABLE BUFFER.       #001760
        BEGIN                                                           001770
          ITEM HASHOCCUP B(0,0,1);        # TRUE = THIS ENTRY IS OCCUP-#001780
                                          #        IED.                #001790
          ITEM HASHALIASFLG B(0,1,1);     # TRUE = THERE IS AN ALIAS   #001800
                                          #        NAME ASSOCIATED WITH#001810
                                          #        THIS HAS VALUE.     #001820
          ITEM HASHALIASLEN U(0,2,3);     # LENGTH IN WORDS OF THE     #001830
                                          # ALIAS NAME.                #001840
          ITEM HASHTYPE U(0,5,4);         # ENTRY TYPE - REALM,REC,ITM #001850
          ITEM HASHALIAS1FG B(0,9,1);     # TRUE - SUBJECT SCHEMA NAME #
                                          #        HAS AN ALIAS NAME   #
                                          #        ASSOCIATED WITH IT. #
          ITEM HASHENTRY U(0,12,18);      # WORD ADDRESS OF THE ENTRY  #
                                          # WHOSE NAME HASHED TO THIS  #001870
                                          # ENTRY                      #001880
          ITEM HASHALIASENT U(0,30,18);   # WORD ADDRESS OF THE ALIAS  #
                                          # ENTRY WHOSE NAME HASHED TO #001900
        END                               # THIS ENTRY.                #001910
      END 
      XDEF ARRAY ENDMSG1 [5];      # CONTAINS OUTPUT MESSAGE           #
        ITEM EM1 C(0,0,10) = ["          ", 
                              "     *****", 
                              "       END", 
                              " OF SUB-SC", 
                              "HEMA SOURC", 
                              "E INPUT   "];
  
      XREF ITEM MAXFL ;            # DELETE THESE TWO LINES TO OBTAIN  #
      MAXFL = B<0,30> DDLMEM ;     # AUTOMATIC FIELD LENGTH MANAGEMENT #
  
      BASE5X = OLD65;  # SAVE THE LWA OF THE 5,0 OVERLAY. THIS WILL BE #008710
                       # USED AS THE FWA WHEN LOADING THE 5,1 THRU 5,5 #008720
                       # OVERLAYS.                                     #
      LOADOVL(BASE5X,5,1);  # CALL THE OVERLAY LOAD ROUTINE TO LOAD THE#008760
                       # 5,1 OVERLAY TO PROCESS THE SYNTAX PROCESSING. #008770
      XDEF PROC CBOVLP2;
  PROC CBOVLP2; 
    BEGIN 
      IF ABORTFLAG GR 0 THEN  # CHECK IF ANY ERROR MESSAGES WHERE ISSUE#
        BEGIN                 # D DURING THE SYNTAX PHASE.             #
          DDLPRNT(ENDMSG1,60);
          CBABRT; 
        END 
      IF NOT RELFLAG THEN 
        BEGIN 
          DDLPRNT(ENDMSG1,60);
          DDLPRNT(ENDMSG1,10);
        END 
      LOADOVL(BASE5X,5,2);   # LOAD OVERLAY THAT VALIDATES THE SUB-    #008790
                              # SCHEMA WITH THE SCHEMA.                #
    END 
      XDEF PROC CBOVLP3;
  PROC CBOVLP3; 
    BEGIN 
      IF NOT RELFLAG THEN # NO RELATION DIVISION, BY-PASS LOAD OF      #
        CBOVLP4;          # RELATION OVERLAY.                          #
      LOADOVL(BASE5X,5,3);                                              008810
    END 
      XDEF PROC CBOVLP4;
  PROC CBOVLP4; 
    BEGIN 
      IF RELFLAG THEN 
        DDLPRNT(ENDMSG1,60);
      DE$CLSC;                     # CLOSE SCHEMA DIRECTORY FILE       #
      IF ABORTFLAG GR 0 THEN # CHECK IF ANY ERROR MESSAGES WHERE ISSUED#
        CBABRT; 
      LOADOVL(BASE5X,5,4);                                              008830
    END 
    END 
  TERM; 
