*DECK  USE
USETEXT TAREATB 
USETEXT TCRMDEF 
USETEXT TCYBDEF 
USETEXT TENVIRN 
USETEXT TFIT
USETEXT TOPTION 
USETEXT TPFMDEF 
USETEXT TXSTD 
      PROC  USE;
      BEGIN 
  
#----------------------------------------------------------------------#
#                                                                      #
#     U S E                                                            #
#                                                                      #
#     PROCESS THE FOLLOWING DIRECTIVES:                                #
#                                                                      #
#         CREATE, INVOKE, USE, VERSION                                 #
#                                                                      #
#----------------------------------------------------------------------#
  
  
#----------------------------------------------------------------------#
#   S T A R T   O F   X R E F S                                        #
  
      XREF ITEM  AREATBLPTR I;     # POINTER TO FIRST AREA TABLE       #
      XREF ITEM  CDCSCAT B;        # TRUE IF IN CDCS CATALOG MODE      #
      XREF ITEM  DUMMY I;          # SCRATCH                           #
      XREF ITEM  INDEX I;          # JUMP INDEX                        #
      XREF ITEM  NEWATBL I;        # AREA TBL PTR FOR SUBSCHEMA DURING #
                                   # ACCESS BEFORE RETURNING OLD ONE   #
      XREF ITEM  PFPTR I;          # POINTER TO 1ST *PFTABLE* ENTRY    #
      XREF ITEM  RA0 I;            # VALUE OF ZERO FOR CALLING PARAMS  #
      XREF ITEM  SAMELFN B;        # TRUE IF LFN OF NEW SUBSCHEMA FILE #
                                   # SAME AS PREVIOUS (NOS ONLY) - IF  #
                                   # SO, PREVIOUS IS RETURNED WHEN NEW #
                                   # IS ATTACHED                       #
      XREF ITEM  SBSCHG B;         # TRUE IF PICKING UP DIFFERENT SUBSC#
                                   # THAN THAT OF THE PREVIOUS C/U/V   #
      XREF ITEM  SCFIT I;          # DUMMY FIT FOR SUB-SCHEMA FILE     #
      XREF ITEM  SCSIZE I;         # SIZE OF DUMMY FIT                 #
      XREF ITEM  SCTLPTR I;        # POINTER TO SUBSCHEMA CONTROL INFO #
      XREF ITEM  TAREA3 I;         # POINTER TO SUBSCHEMA FDB          #
      XREF ITEM  TAREA5 I;         # POINTER TO 3-WD SUBSCHEMA NAME    #
      XREF ITEM  VERDIR B;         # TRUE IF -VERSION- DIRECTIVE       #
      XREF ITEM  VERSBSCHPTR I;    # POINTER TO SBSCH AREA TABLE       #
                                   # IF IN CDCS CATALOG MODE           #
  
      XREF FUNC  CMM$AGR;          # ACTIVATE BLOCK GROUP              #
      XREF FUNC  CMM$ALF;          # ALLOCATE FIXED BLOCK              #
  
      XREF PROC  CHGFDB;           # CHANGE PF PARAMS IN FDB           #
      XREF PROC  CLOSEM;           # CLOSE FILE                        #
      XREF PROC  CMM$FGR;          # FREE BLOCK GROUP                  #
      XREF PROC  CMM$FRF;          # FREE FIXED BLOCK                  #
      XREF PROC  DIAG;             # ISSUE DIAGNOSTIC                  #
      XREF PROC  GET;              # READ FILE                         #
      XREF PROC  LOADOVL;          # LOAD QU OVERLAY                   #
      XREF PROC  OPENM;            # OPEN FILE                         #
      XREF PROC  RETURNM;          # RETURN FILE                       #
  
  
  
#----------------------------------------------------------------------#
#   S T A R T   O F   D E F S                                          #
  
      DEF SCTLSZ       #26#;       # SIZE OF SUBSCHEMA CONTROL INFO    #
  
CONTROL IFEQ OS$NAME,SCOPE; 
                                   # RESERVED LFNS USED FOR ATTACHING  #
                                   # SUBSCHEMA FILES                   #
      DEF $SBSLFN1$    #O"32323232322110 000000"#;  # ZZZZZQH          #
      DEF $SBSLFN2$    #O"32323232322111 000000"#;  # ZZZZZQI          #
CONTROL ENDIF;
  
  
  
#----------------------------------------------------------------------#
#   S T A R T   O F   L O C A L   I T E M S                            #
  
      ITEM  RC I;                  # RETURN CODE FOR SEVERAL THINGS    #
      ITEM  TEMP1 I;               # SCRATCH                           #
      ITEM  TEMP2 I;               # SCRATCH                           #
      ITEM  TGROUPID U;            # TEMP STORAGE FOR CMM GROUP-ID     #
CONTROL EJECT;
#----------------------------------------------------------------------#
#   S T A R T   O F   L O C A L   A R R A Y S                          #
  
      # NONE AT THIS TIME # 
  
  
  
#----------------------------------------------------------------------#
#   S T A R T   O F   L O C A L   B A S E D   A R R A Y S              #
  
      BASED ARRAY   SCHEMAFDB;
        BEGIN 
        ITEM  SCHFDBITEM  U(00,00,60);
        END 
  
                                   # ARRAYS FOR MOVING THINGS IN CORE  #
      BASED ARRAY   GIVEA;
        BEGIN 
        ITEM  GIVEITEM    U(00,00,60);
        ITEM  GIVEITEMN   C(00,00,07);
        ITEM  GIVECHAR    C(00,00,64);
        END 
      BASED ARRAY   GETA; 
        BEGIN 
        ITEM  GETITEM     U(00,00,60);
        ITEM  GETITEMX    U(00,42,18);    # LOW 18 BITS FOR ADDRESS    #
        ITEM  GETITEMN    C(00,00,07);    # FIRST 7 CHARACTERS         #
        END 
  
  
                                   # ARRAY TO RECEIVE THE SUBSCHEMA    #
                                   # CONTROL INFORMATION               #
      BASED ARRAY  SCONTROL;
        BEGIN 
*CALL SBCWDECLS 
        END 
CONTROL EJECT;
#----------------------------------------------------------------------#
#                                                                      #
#     A B O R T U S E                                                  #
#                                                                      #
#     THIS PROC IS ENTERED IF AN ERROR OCCURS WHILE PROCESSING A       #
#     CREATE/INVOKE/USE/VERSION WHILE IN *USE* IN THE (5,1) OVERLAY.   #
#     THE NEW SUBSCHEMA IS CLOSED AND RETURNED.  THEN                  #
#     CONTROL IS PASSED TO *ABORTUSE* IN THE (5,2) OVERLAY.            #
#                                                                      #
#----------------------------------------------------------------------#
  
      XDEF PROC  ABORTUSE;
      PROC       ABORTUSE;
      BEGIN 
      IF INDEX NQ 0 
      THEN                         # IF ABORT OCCURRED IN *USE*        #
        BEGIN 
        IF FITOC EQ OC$OPEN 
        THEN                       # IF SUBSCHEMA OPEN                 #
          BEGIN 
          CLOSEM (FIT, $DET$, RA0);  # CLOSE, RELEASE BUFFERS          #
          END 
  
        IF (NOT CDCSCAT)
          OR SBSCHG 
        THEN                       # IF NOT THE CDCS CATALOG FILE      #
          BEGIN 
          RETURNM (FIT, RA0);      # RETURN SUBSCHEMA FILE             #
          END 
  
        CMM$FGR (AT$GROUPID);      # FREE THE NEW AREA TABLE           #
        NEWATBL = 0;
        INDEX = 0;                 # SO CONTROL WILL GO TO *ABORTUSE*  #
        END 
  
      LOADOVL (0, 5, 2);           # GO TO (5,2) OVERLAY               #
      END                          # --- ABORTUSE ---                  #
*CALL ATTACHF 
*CALL PFDIAG
CONTROL EJECT;
#----------------------------------------------------------------------#
#                                                                      #
#     U S E                                                            #
#                                                                      #
#     INITIAL PROCESSING FOR CREATE/INVOKE/USE/VERSION.                #
#                                                                      #
#     CREATE/INVOKE/USE:                                               #
#                                                                      #
#     THE SUBSCHEMA IS ATTACHED AND THE CONTROL INFORMATION IS READ.   #
#     IF A CRM SUBSCHEMA, *USECRM* IN THE (5,2) OVERLAY IS CALLED TO   #
#     CONTINUE PROCESSING.  IF A CDCS SUBSCHEMA, *USECDCS* IN THE      #
#     (5,3) OVERLAY IS CALLED.                                         #
#                                                                      #
#     VERSION:                                                         #
#                                                                      #
#     IF A CRM VERSION IS INDICATED, (*TAREA3* = 0), NO SUBSCHEMA      #
#     READING OR AREA TABLE BUILDING IS DONE.  CONTROL GOES            #
#     IMMEDIATELY TO *USECRM* IN THE (5,2) OVERLAY.                    #
#     IF A CDCS VERSION IS INDICATED (*TAREA3* POINTS TO AN FDB),      #
#     THE FILE SPECIFIED BY THE FDB MUST BE A CDCS SUBSCHEMA, OR AN    #
#     ERROR WILL RESULT.  CONTROL GOES TO THE (5,3) OVERLAY.           #
#                                                                      #
#     NOTE THAT IN ALL OF THE CASES WHERE A SUBSCHEMA IS ATTACHED,     #
#     *USE* MUST DETECT WHETHER IT IS ATTEMPTING TO ATTACH THE SAME    #
#     FILE AS THAT OF THE PREVIOUS SUBSCHEMA FILE (IF ANY).  IF SO,    #
#     IT PROCEEDS USING THE PREVIOUS FILE, RATHER THAN CONTINUING      #
#     THE ATTACH PROCEDURE.                                            #
#                                                                      #
#     INPUT:   - SEE INPUT CONDITIONS AT START OF MAIN ROUTINE OF      #
#                *USECDCS*.  THE FOLLOWING ITEMS ARE ALREADY SET UP    #
#                AS DESCRIBED THERE:                                   #
#                                                                      #
#                  CDCSCAT                                             #
#                  CDCSDBM                                             #
#                  AREATBLPTR                                          #
#                  VERSBSCHPTR                                         #
#                  USEDIR                                              #
#                  VERDIR                                              #
#                                                                      #
#              - TAREA3 POINTS TO THE FDB FOR THE SUBSCHEMA LIBRARY    #
#                FILE, UNLESS THIS IS A -VERSION- DIRECTIVE            #
#                SPECIFYING A CRM SUBSCHEMA.                           #
#              - TAREA5 POINTS TO THE SUBSCHEMA NAME.                  #
#              - TAREA1 POINTS TO THE FDB FOR THE AREA FILE, ALWAYS    #
#                FOR A -CREATE- OR CDCS -VERSION-, AND IF SPECIFIED    #
#                ON A -USE-.                                           #
#                                                                      #
#     OUTPUT:  - A NEW AREA TABLE HAS BEEN SET UP AND IS POINTED TO BY #
#                *NEWATBL*.  THE FDB (FOR TAREA3) AND SKELETON FIT ARE #
#                IN THIS AREA TABLE.                                   #
#              - THE SUBSCHEMA LIBRARY FILE IS ATTACHED, OPENED,       #
#                AND THE SUBSCHEMA CONTROL INFORMATION FOR THE FIRST   #
#                SUBSCHEMA ON THE FILE HAS BEEN READ INTO THE AREA     #
#                POINTED TO BY *SCONTROL*.  IF THIS FILE IS THE SAME   #
#                AS THAT OF THE PREVIOUS SUBSCHEMA, THEN THAT FILE     #
#                IS OPENED AND READ IN THE SAME WAY.                   #
#              - TAREA3 AND TAREA5 ARE FREED.                          #
#              - NONE OF THE ABOVE GETS DONE IF A CRM VERSION IS       #
#                INDICATED (SEE ABOVE).                                #
#                                                                      #
#----------------------------------------------------------------------#
  
  
  
      IF VERDIR 
        AND TAREA3 EQ 0 
      THEN                         # CRM -VERSION-                     #
        BEGIN 
        LOADOVL (0, 5, 2);         # GO DIRECTLY TO *USECRM*           #
        END 
  
      TGROUPID = CMM$AGR (0);      # GET GROUP-ID FOR SUBSCHEMA        #
                                   # GET SPACE FOR AREA TBL FOR SUBSCH #
      NEWATBL = CMM$ALF (MAXATBLSIZE, 2, TGROUPID); 
      P<AREA$TABLE> = NEWATBL;     # POSITION BASED ARRAY              #
      AT$GROUPID = TGROUPID;       # SAVE GROUP-ID IN AREA TABLE       #
      AT$SBSCNAME = MINATBLSIZE;   # SET POINTER TO SUBSCHEMA NAME     #
                                   # SET POINTER TO 1ST FREE WORD      #
      AT$NEXTFREE = MINATBLSIZE + 3;
      P<GIVEA> = TAREA5;           # MOVE SUBSCHEMA NAME FROM TAREA5   #
                                   # INTO SUBSCHEMA AREA TABLE         #
      P<GETA> = P<AREA$TABLE> + AT$SBSCNAME;
      GETITEM[0] = GIVEITEM[0]; 
      GETITEM[1] = GIVEITEM[1]; 
      GETITEM[2] = GIVEITEM[2]; 
      CMM$FRF (TAREA5);            # TAREA5 NO LONGER NEEDED           #
      TAREA5 = 0; 
      P<FIT> = LOC (AT$AFITPOS);   # SET UP FIT POSITION               #
  
                                   # SET UP TO MOVE THE SUB-SCHEMA FDB #
                                   # INTO ITS CORRECT POSITION IN THE  #
                                   # AREA TABLE                        #
      P<GIVEA> = TAREA3;           # POINTER TO FDB, PASSED BY         #
                                   # SYNTAX OVERLAY  1,5               #
      P<GETA> = LOC(AT$AFDBPOS);   # NEW POSITION OF FDB               #
                                   # NOW MOVE TO THE NEW POSITION      #
      FOR DUMMY = 0 STEP 1         # FOR EACH FDB WORD                 #
      UNTIL FDBSIZE - 1            # UNTIL HAVE REACHED LAST FDB WORD  #
      DO
        BEGIN 
        GETITEM[DUMMY] = GIVEITEM[DUMMY]; 
        END 
  
      CMM$FRF (TAREA3);            # FREE TAREA3 - NO LONGER NEEDED    #
      TAREA3 = 0;                  # SET POINTER TO ZERO               #
  
                                   # MOVE THE FIT IN THE COMPASS       #
                                   # QU0500 DECK INTO THE NEW AREA     #
      P<GETA > = LOC(AT$AFITPOS); 
      P<GIVEA> = LOC(SCFIT);
      FOR DUMMY = 0 STEP 1
        UNTIL SCSIZE - 1
      DO
        BEGIN 
        GETITEM[DUMMY] = GIVEITEM[DUMMY]; 
        END 
  
CONTROL IFEQ OS$NAME,NOS; 
  
                                   # MOVE LFN INTO FIT                 #
      P<GIVEA> = LOC(AT$AFDBPOS);  # FETCH FDB POSITION                #
      GETITEM[0] = GIVEITEM[4];    # MOVE THE LFN                      #
  
CONTROL ENDIF;
CONTROL IFEQ OS$NAME,SCOPE; 
                                   # SELECT THE RESERVED LFN OTHER     #
                                   # THAN THE ONE CURRENTLY BEING USED #
                                   # AND PUT IT IN THE FDB AND FIT     #
      TEMP1 = $SBSLFN1$;           # SET FOR 1ST NAME                  #
      P<AREA$TABLE> = AREATBLPTR LOR VERSBSCHPTR; 
      IF P<AREA$TABLE> NQ 0 
      THEN                         # A SUBSCHEMA IS CURRENTLY ATTACHED #
        BEGIN 
                                   # CHECK WHICH LFN BEING USED        #
        P<GIVEA> = LOC(AT$AFDBPOS[0]);
        IF C<0,7>GIVEITEM[4] EQ C<0,7>TEMP1 
        THEN                       # 1ST LFN BEING USED                #
          BEGIN 
          TEMP1 = $SBSLFN2$;       # SET FOR 2ND NAME                  #
          END 
        END 
  
      P<AREA$TABLE> = NEWATBL;     # RESTORE POINTER                   #
      P<GIVEA> = LOC(AT$AFDBPOS[0]);
      GIVEITEM[4] = TEMP1;         # STORE LFN IN NEW FDB              #
      GETITEM[0] = TEMP1;          # STORE LFN IN NEW FIT              #
  
CONTROL ENDIF;
  
                                   # SET BASED ARRAY TO POSITION OF    #
                                   # THE PERM FILE INFO.               #
      P<SCHEMAFDB> = LOC(AT$AFDBPOS); 
      P<PFTABLE> = PFPTR;          # POINT TO 1ST *PFTABLE* ENTRY      #
      FOR DUMMY = DUMMY            # SEARCH FOR SUBSCHEMA FILE NAME    #
        WHILE P<PFTABLE> NQ 0 
      DO
        BEGIN 
        P<GETA> = LOC(PFPFN[0]);   # LFN WITHIN TABLE                  #
        IF GIVEITEM[0] EQ GETITEM[0]
          AND GIVEITEM[1] EQ GETITEM[1] 
          AND GIVEITEM[2] EQ GETITEM[2] 
        THEN                       # AN ENTRY FOR SUBSCHEMA EXISTS     #
          BEGIN 
                                   # GO CHANGE PARAMETERS IN FDB       #
          CHGFDB (P<PFTABLE>, NEWATBL, RC); 
          IF RC NQ 0
          THEN                     # IF ERROR, ABORT DIRECTIVE         #
            BEGIN 
            ABORTUSE; 
            END 
  
          ELSE                     # DELINK THIS PFTABLE ENTRY         #
            BEGIN 
            TEMP1 = PFBKD[0]; 
            TEMP2 = PFFWD[0]; 
            CMM$FRF (P<PFTABLE>);  # FREE THIS ENTRY                   #
            IF TEMP2 NQ 0 
            THEN                   # THERE WAS A LATER ENTRY           #
              BEGIN 
              P<PFTABLE> = TEMP2; 
              PFBKD[0] = TEMP1;    # ADJUST THE NEXT BKD POINTER       #
              END 
  
            IF TEMP1 NQ 0 
            THEN                   # THERE WAS AN EARLIER ENTRY        #
              BEGIN 
              P<PFTABLE> = TEMP1; 
              PFFWD[0] = TEMP2;    # ADJUST THE PREV FWD POINTER       #
              END 
  
            ELSE                   # NO EARLIER ENTRY                  #
              BEGIN 
              PFPTR = TEMP2;       # ADJUST POINTER TO 1ST TABLE       #
              END 
  
            P<PFTABLE> = 0;        # GET OUT OF SEARCH LOOP            #
            END 
          END 
  
        ELSE                       # ADVANCE TO NEXT *PFTABLE* ENTRY   #
          BEGIN 
          P<PFTABLE> = PFFWD[0];
          END 
        END 
  
  
CONTROL IFEQ OS$NAME,KRONOS;
  
                                   # ATTACH SUBSCHEMA                  #
      SBSCHG = TRUE;               # SET FOR DIFFERENT SUBSCHEMA FILE  #
      SAMELFN = FALSE;             # SET FOR DIFFERENT SUBSCHEMA LFN   #
      ATTACHF (SCHEMAFDB, TRUE, RC);
      IF RC NQ 0
      THEN
        BEGIN 
        DIAG (850);                # ERROR DETECTED ON ATTACH          #
        ABORTUSE; 
        RETURN; 
        END 
  
      IF AREATBLPTR LOR VERSBSCHPTR NQ 0
      THEN                         # A USE OR A CDCS VERSION           #
                                   # IS IN EFFECT                      #
  
                                   # CHECK IF THE FILE JUST ATTACHED   #
                                   # IS THE SAME FILE AS THAT OF THE   #
                                   # PREVIOUS SUBSCHEMA.  DO THIS      #
                                   # BY COMPARING:                     #
                                   #                                   #
                                   # - PERMANENT FILE NAMES.           #
                                   # - USER NAMES.                     #
        BEGIN 
        P<GIVEA> = LOC(AT$AFDBPOS); 
                                   # TEMP1 = ORD OF FDB WITHIN AREA TBL#
        TEMP1 = LOC(AT$AFDBPOS) - P<AREA$TABLE>;
        P<GETA> = (AREATBLPTR LOR VERSBSCHPTR) + TEMP1; 
                                   # IF THIS MAKES IT 4 WORDS OR MORE, #
                                   # IT IS THE SAME PFN                #
        FOR DUMMY = 0 STEP 1
        WHILE GIVEITEM[DUMMY] EQ GETITEM[DUMMY] 
        DO
          BEGIN 
          TEST DUMMY; 
          END 
  
                                   # IF SUBSCHEMA LFN-S MATCH          #
        IF GIVEITEMN[4] EQ GETITEMN[4]
        THEN
          BEGIN 
          SAMELFN = TRUE;          # FLAG MATCHING LFN-S               #
          END 
  
        IF DUMMY GQ 4 
        THEN                       # PFN-S MATCH                       #
  
                                   # COMPARE USER NAME                 #
          BEGIN 
          IF GIVEITEMN[5] EQ GETITEMN[5]
          THEN                     # USER NAMES MATCH                  #
            BEGIN 
            SBSCHG = FALSE;        # SET FOR SAME FILE                 #
            END 
          END 
        END 
  
CONTROL ENDIF;
  
CONTROL IFEQ OS$NAME,SCOPE; 
  
      SBSCHG = TRUE;               # SET FOR DIFFERENT SUBSCHEMA FILE  #
      SAMELFN = FALSE;             # SET FOR DIFFERENT SUBSCHEMA LFN   #
      RC = ERR$ATTACHED;           # SO ATTACHF WILL RETURN WITH THIS  #
                                   # CODE IF THIS CONDITION OCCURS     #
      ATTACHF (SCHEMAFDB, TRUE, RC);  # TRUE - READ ONLY               #
      IF RC NQ 0
      THEN                         # ERROR WAS RETURNED                #
        BEGIN 
        IF RC NQ ERR$ATTACHED 
        THEN                       # THE ERROR WAS OTHER THAN          #
                                   # - PF ALREADY ATTACHED -           #
          BEGIN 
          DIAG (850); 
          ABORTUSE; 
          RETURN; 
          END 
  
                                   # SAME PF IS CURRENTLY ATTACHED,    #
                                   # SO SEE IF IT IS THE CURRENTLY     #
                                   # ATTACHED SUBSCHEMA                #
        P<GIVEA> = LOC(AT$AFDBPOS); 
        IF AREATBLPTR LOR VERSBSCHPTR EQ 0
        THEN                       # NO USE OR CDCS VERSION IN EFFECT  #
          BEGIN 
          DIAG (262, GIVEITEM[0]); # - PF ALREADY ATTACHED -           #
          DIAG (850); 
          ABORTUSE; 
          RETURN; 
          END 
  
                                   # COMPARE PERM. FILE NAMES          #
        TEMP1 = LOC(AT$AFDBPOS) - P<AREA$TABLE>;
        P<GETA> = (AREATBLPTR LOR VERSBSCHPTR) + TEMP1; 
                                   # IF THIS MAKES IT 4 WORDS OR MORE, #
                                   # IT IS THE SAME PFN                #
        FOR DUMMY = 0 STEP 1
        WHILE GIVEITEM[DUMMY] EQ GETITEM[DUMMY] 
        DO
          BEGIN 
          TEST DUMMY; 
          END 
  
        IF DUMMY LS 4 
        THEN                       # DIFFERENT PFN - ERROR             #
          BEGIN 
          DIAG (262, GIVEITEM[0]); # - PF ALREADY ATTACHED -           #
          DIAG (850); 
          ABORTUSE; 
          RETURN; 
          END 
  
                                   # PFN-S MATCH                       #
                                   # COMPARE -ID- PARAMS BY FINDING    #
                                   # THEM IN THE NEW AND OLD FDB-S     #
        FOR DUMMY = 5 STEP 1
        WHILE B<54,6>GIVEITEM[DUMMY] NQ FDBVAL$ID 
          AND DUMMY LS FDBSIZE
        DO
          BEGIN 
          TEST DUMMY; 
          END 
  
        TEMP2 = DUMMY;
                                   # FIND -ID- PARAM IN OLD FDB        #
        FOR DUMMY = 5 STEP 1
        WHILE B<54,6>GETITEM[DUMMY] NQ FDBVAL$ID
          AND DUMMY LS FDBSIZE
        DO
          BEGIN 
          TEST DUMMY; 
          END 
  
        IF GIVEITEM[TEMP2] NQ GETITEM[DUMMY]
        THEN                       # DIFFERENT -ID- SO GIVE THE ERROR  #
          BEGIN 
          DIAG (262, GIVEITEM[0]);  # - PF ALREADY ATTACHED -          #
          DIAG (850); 
          ABORTUSE; 
          RETURN; 
          END 
  
                                   # MOVE PREVIOUS LFN INTO NEW FDB    #
        C<0,7>GIVEITEM[4] = C<0,7>GETITEM[4]; 
                                   # MOVE PREVIOUS LFN INTO NEW FIT    #
        P<GIVEA> = LOC(AT$AFITPOS[0]);
        C<0,7>GIVEITEM[0] = C<0,7>GETITEM[4]; 
        SBSCHG = FALSE;            # SET FLAG FOR SAME FILE            #
        END 
  
CONTROL ENDIF;
  
  
      OPENM (FIT, $INPUT$, RA0);   # OPEN SUB-SCHEMA                   #
      RC = FITES;                  # ERROR STATUS                      #
      IF RC NQ 0
      THEN                         # CRM ERROR OCCURRED                #
        BEGIN 
        DIAG (903, RC, FIT);       # DIAGNOSE ERROR ON OPEN            #
        ABORTUSE;                  # CLEAN UP BEFORE RETURN            #
        END 
  
      SCTLPTR = CMM$ALF (SCTLSZ, 0, 0);  # GET SPACE FOR SUBSCH CONTROL#
      P<SCONTROL> = SCTLPTR;             # INFORMATION                 #
  
                                   # READ THE CONTROL INFORMATION      #
                                   # FROM THE SUB-SCHEMA FILE          #
      GET (FIT, SCONTROL, 1, 0, 0, SCTLSZ * WC, RA0); 
      RC = FITES;                  # ERROR STATUS                      #
      IF RC NQ 0
      THEN
        BEGIN 
        DIAG (903, RC, FIT);       # DIAGNOSE ERROR ON GET             #
        ABORTUSE; 
        END 
  
                                   # GO TO (5,2) OR (5,3) OVERLAY,     #
                                   # DEPENDING ON SUBSCHEMA TYPE       #
      IF SBCWCDCS2SB[0]            # CDCS SUBSCHEMA                    #
      THEN
        BEGIN 
        IF PFPTR NQ 0              # IF ANY *PFTABLE* ENTRIES EXIST    #
        THEN                       # NOW, IT IS AN ERROR, SINCE,       #
                                   # FOR A CDCS SUBSCHEMA, THE PF      #
                                   # PARAMS MAY BE MODIFIED ONLY       #
                                   # FOR THE SUBSCHEMA FILE            #
          BEGIN 
          P<PFTABLE> = PFPTR; 
          FOR DUMMY = DUMMY        # ISSUE DIAG FOR EACH FILE          #
            WHILE P<PFTABLE> NQ 0 
          DO
            BEGIN 
            P<GIVEA> = LOC(PFPFN[0]); 
            DIAG (414, GIVEITEM[0]);
            P<PFTABLE> = PFFWD[0];
            END 
  
          ABORTUSE; 
          END 
  
        LOADOVL (0, 5, 3);
        END 
  
      ELSE                         # CRM SUBSCHEMA                     #
        BEGIN 
        IF VERDIR 
        THEN                       # -VERSION- DIRECTIVE               #
          BEGIN 
                                   # GET SUBSCHEMA NAME                #
          P<GETA> = P<AREA$TABLE> + AT$SBSCNAME[0]; 
                                   # MUST BE A CDCS SUBSCHEMA          #
          DIAG (408, GETITEM[0]); 
          ABORTUSE;                # ABORT IN (5,2) OVERLAY            #
          END 
  
        LOADOVL (0, 5, 2);
        END 
      END                          # --- USE ---                       #
      TERM
