*DECK DB$UALB 
USETEXT MDBCMTX 
USETEXT MD10CTX 
USETEXT UTMPTTX 
      PROC DB$UALB; 
      BEGIN 
 #
* *   DB$UALB - ALLOCATE BLOCKS                  PAGE  1
* *   BOB MCALLESTER                             DATE  03/30/84 
* 
* DC  PURPOSE 
* 
*     ALLOCATE THE BASIC VARIABLE MEMORY BLOCKS USED BY DBMSTRD.
* 
* DC  ENTRY CONDITIONS
* 
*     NONE
* 
* DC  EXIT CONDITIONS 
* 
*     THE TABLES ARE ALLOCATED
* 
* DC  CALLING ROUTINES
* 
*     DB$SR15    -   INITIALIZE FOR A CREATION RUN
*     DB$SR16    -   INITIALIZE FOR A MODIFICATION RUN
*     DB$SR64    -   INITIALIZE FOR A RESTART 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$UALC;           # ALLOCATE VARIABLE BLOCKS          #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     BLOCK POINTERS
* 
* DC  DESCRIPTION 
* 
*     THE BLOCK POINTERS ARE SET TO ZERO. 
*     THE BLOCKS ARE ALLOCATED. 
 #
  
  
  
#     B E G I N   D B $ U A L B   E X E C U T A B L E   C O D E .      #
  
  
      ARDIRBP = 0;
      ARINFOBP = 0; 
      CSTDIRBP = 0; 
      CUTBP = 0;
      DBPROCBP = 0; 
      KEYINFOBP = 0;
      MDCHKSMBP = 0;
      PCUTBP = 0; 
      PITBP = 0;
      VERDIRBP = 0; 
      VERINFBP = 0; 
# 
*                L I M I T E D   T A B L E S
* 
*     DB$UALC LEAVES THE TABLE LENGTH CONTROL POINTER (P<TLC>) SET. 
*     THE TABLE CAN BE MADE INTO A LIMITED LENGTH TABLE BY INITIALIZING 
*     THE ADDITIONAL TLC ENTRIES THAT ARE REQUIRED. 
* 
* 
*     PERMANENT FILE INFORMATION TABLE (PIT)
# 
      DB$UALC(LOC(PITBP), DFPITHDR + DFTLCHL -1, DFPITPD);
      TLCCT[0] = TRUE;                   # TABLE LENGTH IS CONTROLLED  #
      TLCHLEN[0] = DFTLCHL;              # TLC HEADER LENGTH           #
      TLCUSED[0] = DFPITHDR;             # PIT HEADER IS ONLY USE      #
      TLCDSOR[0] = 0;                    # DISK SEGMENT ORDINAL        #
      TLCDSMF[0] = FALSE;                # DISK SEGMENT NOT MODIFIED   #
      TLCDSBW[0] = DFPITHDR;             # DISK SEGMENT BEGINNING WORD #
  
                                         # DISK SEGMENT WORD LENGTH    #
      TLCDSWL[0] = (DFTLCTMAX / (DFMDPITEN *2)) * DFMDPITEN;
  
                                         # BUILD SEGMENT BEGINNING WORD#
      TLCBSBW[0] = TLCDSWL[0] + DFPITHDR; 
  
                                         # MAXIMUM TABLE LENGTH        #
      TLCTMXL[0] = TLCBSBW[0] + TLCDSWL[0]; 
  
# 
*     VERSION INFORMATION TABLE (VIT) 
# 
      DB$UALC(LOC(VERINFBP), DFVITHDR + DFTLCHL -1, DFVITPD); 
      TLCCT[0] = TRUE;                   # TABLE LENGTH IS CONTROLLED  #
      TLCHLEN[0] = DFTLCHL;              # TLC HEADER LENGTH           #
      TLCUSED[0] = DFVITHDR;             # USE IS ONLY HEADER          #
      TLCDSOR[0] = 0;                    # DISK SEGMENT ORDINAL        #
      TLCDSMF[0] = FALSE;                # DISK SEGMENT NOT MODIFIED   #
      TLCDSBW[0] = DFVITHDR;             # DISK SEGMENT BEGINNING WORD #
  
                                         # DISK SEGMENT WORD LENGTH    #
      TLCDSWL[0] = (DFTLCTMAX / (DFMDVIEN *2)) * DFMDVIEN;
  
                                         # BUILD SEGMENT BEGINNING WORD#
      TLCBSBW[0] = TLCDSWL[0] +DFVITHDR;
  
                                         # MAXIMUM TABLE LENGTH        #
      TLCTMXL[0] = TLCBSBW[0] + TLCDSWL[0]; 
  
# 
*              U N L I M I T E D   T A B L E S
# 
  
      DB$UALC(LOC(ARDIRBP),1,DFARDRPD);    # AREA DIRECTORY BLOCK PTR  #
      DB$UALC(LOC(ARINFOBP),0,DFARIFPD);   # AREA INFORMATION BLOCK    #
      DB$UALC(LOC(MDCHKSMBP),0,0);         # CHECKSUM LIST BLOCK       #
      DB$UALC(LOC(CSTDIRBP),DFCSTSSHD,DFCSDRPD); # CST/SUBSCH DIRECTORY#
      DB$UALC(LOC(DBPROCBP),DFMDDPCW,0);   # DATA BASE PROC TABLE      #
      DB$UALC(LOC(KEYINFOBP),DFMDKITEN,DFKITPD);  # KEY INFO TABLE     #
      DB$UALC(LOC(VERDIRBP),DFMDVDEN,DFVDTPD);   # VERSION DIR TABLE   #
  
      END 
      TERM
