*DECK DB$ASLC 
USETEXT CDCSCTX 
      PROC DB$ASLC(SBNAM,RESULT); 
      BEGIN 
 #
* *   DB$ASLC -- CREATE ASL ENTRY                PAGE  1
* *   W P CEAGLIO                                DATE  05/01/79 
* * 
* 
* DC  PURPOSE 
* 
*     CREATE (LINK) AN ASL ENTRY FOR A SCHEMA 
* 
* DC  ENTRY CONDITIONS
* 
*     PARAMETERS
* 
# 
      ITEM SBNAM C(30);            # SUBSCHEMA NAME (BLANK FILL)       #
      ITEM RESULT    I;            # STATUS OF REQUEST                 #
# 
* 
*     ASSUMPTIONS 
* 
*     SALX    SET TO INDEX OF SAL ENTRY FOR APPLICALBE SCHEMA 
* 
* DC  EXIT CONDITIONS 
* 
*     RESULT
* 
*       0  ASL ENTRY WAS CREATED AND LINKED INTO ASL CHAIN
* 
*       1  INVALID SUBSCHEMA NAM--NO ASL ENTRY CREATED
* 
* DC  CALLING ROUTINES
* 
*     DB$INV$      INVOKE PROCESSOR 
* 
*     DB$LTSB      SUBSCHEMA RETAIN/RETURN PROCESSOR
* 
* DC  CALLED ROUTINES 
* 
# 
      XREF PROC DB$CALL;           # CALL A PROCEDURE BY IT ADDRESS    #
      XREF PROC DB$FLOP;           # GENERATE FLOW POINT               #
      XREF FUNC DB$LNK;            # LINK ENTRY INTO EXISTING CHAIN    #
      XREF PROC DB$LNKD;           # DELINK ENTRY FROM CHAIN           #
      XREF PROC DB$MDER;           # MD ERROR HANDLER                  #
      XREF PROC DB$MFA;            # ALLOCATE CMM BLOCK                #
      XREF PROC DB$MFF;            # FREE CMM BLOCK                    #
      XREF PROC DB$WGET;           # READ MASTER DIRECTORY             #
      XREF ITEM DB$MFPA;     # MEMORY OVERFLOW HANDLER ADDRESS         #
# 
* 
* DC  NON-LOCAL VARIABLES 
* 
*     CDCS COMMON 
* 
# 
*CALL FITMDDCLS 
# 
* DC  DESCRIPTION 
* 
*     -  INITIALIZE RESULT OF CALL TO NO-FIND (ERROR) 
* 
*     -  GET CMM SPACE AND READ IN SUBSCHEMA DIRECTORY FROM THE MD
* 
*     -  SEARCH THE SUBSCHEMA DIRECTORY FOR MATCHING SUBSCHEMA NAME.
*        IF FOUND, SET RESULT TO FOUND (ZERO VALUE).
* 
*     -  IF RESULT OF SEARCH WAS A MATCH, CREATE (LINK) AN ASL ENTRY. 
*        INITIALIZE THE ASL .  GET CMM SPACE FOR THE CST AND READ IT
*        FROM THE MD.  IF THE CST INDICATES THAT MAPPING CAPSULES ARE 
*        PRESENT, GET CMM SPACE AND BUILD THE ACTIVE CAPSULE LIST (ACL).
* 
*     -  RELEASE THE BUFFER USED TO READ IN THE SUBSCHEMA DIRECTORY.
* 
 #
  
  
  
  
#     COMDECK CALLED - MDSBDCLS                                        #
  
      BASED ARRAY MDSBD;
            BEGIN 
*CALL MDSBDDCLS 
            END 
  
  
#     LOCAL VARIABLES                                                  #
  
      ITEM I       I;              # SCRATCH--FOR LOOPS                #
      ITEM NSS     I;              # SCRATCH--FOR SCANNING SS DIRECTORY#
      ITEM NW      I;              # SCRATCH--FOR CMM CALL             #
      ITEM SAVEMFPA I;             # SAVE THE MEMORY OVERFLOW ADDRESS  #
      ITEM SBDX    I;              # SCRATCH--FOR SCANNING SS DIRECTORY#
      ITEM WA      I;              # WORD ADDRESS FOR CALL PARAMETERS  #
  
  
  
#**********************************************************************#
#                                                                      #
#     I N T E R N A L   P R O C E D U R E   -   N O M E M              #
#                                                                      #
#**********************************************************************#
  
# 
* *   NOMEM  - MEMEORY NOT AVAILABLE FOR SWAP IN
* *   R L MCALLESTER                             07/09/90 
* 
* DC  PURPOSE 
* 
*     RETURN THE ASL WHEN NO MEMORY IS AVAILABLE FOR THE CST OR ACL.
* 
*     ABORT THE USER JOB. 
# 
  
      PROC NOMEM; 
        BEGIN 
  
        CONTROL IFGR DFFLOP,0;
          DB$FLOP("ASLC-NM"); 
        CONTROL ENDIF;
  
        DB$MFPA = SAVEMFPA; 
        DB$LNKD(P<ASL>);
        DB$MFF(P<MDSBD>); 
        DB$CALL(DB$MFPA); 
        END 
  
      PROC NOMEM2;
        BEGIN 
        DB$MFF(P<CSFIXED>); 
        NOMEM;
        END 
  
  
  
  
#     S T A R T  O F  D B $ A S L C  E X E C U T A B L E  C O D E      #
  
  
#     INITIALIZE RESULT OF CALL TO NO-FIND                             #
  
  
      CONTROL IFGR DFFLOP,0;
        DB$FLOP("ASLC   "); 
      CONTROL ENDIF;
  
      RESULT = 1; 
  
#     GET CMM SPACE AND READ IN SUBSCHEMA DIRECTORY FROM THE MD        #
  
      NW = SASCSSSZ[SALX];
      WA = SASCWASB[SALX];
      DB$MFA(NW,P<MDSBD>);
      DB$WGET(DB$FTMD,MDSBD,NW,WA,DB$MDER); 
  
#     SEARCH THE SUBSCHEMA DIRECTORY FOR MATCHING SUBSCHEMA NAME.  IF  #
#     FOUND, SET RESULT TO FOUND MATCH (ZERO VALUE).                   #
  
      SBDX = 1; 
      NSS = MDSBNBSB [0]; 
      FOR I=0 STEP 1
        WHILE I LQ NSS
          AND RESULT EQ 1 
      DO
        BEGIN 
        IF SBNAM EQ MDSBNAME [SBDX] 
        THEN
          BEGIN 
          RESULT = 0; 
          END 
        ELSE
          BEGIN 
          SBDX = SBDX + DFCSTSSEN;
          END 
        END 
  
#     IF RESULT OF SEARCH WAS A MATCH, CREATE (LINK) AN ASL ENTRY AND  #
#     INITIALIZE IT.  READ IN THE CST FROM THE MD. IF THERE ARE MAPPING#
#     CAPSULES, CONSTRUCT THE ACL AFTER GETTING SPACE FROM CMM         #
  
      IF RESULT EQ 0
      THEN
        BEGIN 
        P<ASL> = DB$LNK(LOC(SAASLPTR[SALX]),DFASLENSIZE); 
        ASWORD2[0] = 0; 
        ASWORD3[0] = 0; 
        ASWORD4 [0] = 0;
        ASNSWP [0] = 0; 
        ASCSTSIZ [0] = MDSBSZCS [SBDX]; 
        ASNUSERS [0] = 0; 
        ASSBNAME [0] = SBNAM; 
  
        CONTROL IFGR DFFLOP,0;
          DB$FLOP("ASLC-1 "); 
        CONTROL ENDIF;
  
        NW = ASCSTSIZ[0]; 
        WA = MDSBWACS[SBDX];
        SAVEMFPA = DB$MFPA; 
        DB$MFPA = LOC(NOMEM); 
        DB$MFA(NW,P<CSFIXED>);
        ASCSTLOC [0] = LOC(CSFIXED);
        ASWACST [0] = MDSBWACS [SBDX];
        DB$WGET(DB$FTMD,CSFIXED,NW,WA,DB$MDER); 
        IF CSFCAPPT [0] NQ 0
        THEN
          BEGIN 
          NW = ((CSFCAPNO[0]+1)*DFACLENSIZE); 
  
          CONTROL IFGR DFFLOP,0;
            DB$FLOP("ASLC-2 "); 
          CONTROL ENDIF;
  
          DB$MFPA = LOC(NOMEM2);
          DB$MFA(NW,P<ACL>);
          ASACLLEN [0] = NW;
          ASACLLOC [0] = LOC(ACL);
  
#         INITIALIZE THE ACL                                           #
  
          FOR I = 0 STEP 1 UNTIL CSFCAPNO[0]
          DO
            BEGIN 
            ACWORD0[I] = 0; 
            ACWORD1[I] = 0; 
            END 
  
#         SET UP THE ACL HEADER                                        #
  
          ACTOTLEN [0] = CSFCAPLN [0];
          ACMAXLEN [0] = CSFCAPMX [0];
          ACNUMCAP [0] = CSFCAPNO [0];
          END 
        DB$MFPA = SAVEMFPA; 
        END 
  
#     RELEASE TEMPORARY BUFFER USED FOR READING IN SUBSCHEMA DIRECTORY #
  
      DB$MFF(P<MDSBD>); 
  
      END 
      TERM
