*DECK DB$CPRE 
USETEXT UTMPTTX 
USETEXT UTCITTX 
USETEXT UTCDFTX 
USETEXT CUGBATX 
      PROC DB$CPRE; 
 #
  *   DB$CPRE - PREPARE TO BUILD WORK BLOCKS     PAGE  1
  *   STEVEN P. LEVIN                            DATE  08/25/75 
  
  DC  PURPOSE 
  
      PREPARE TO BUILD WORK BLOCKS BY READING THE MD AREA DIRECTORY,
      WRITING A DUMMY CST FIXED PART TO THE MD AND INITIALIZING ITEMS.
  
  DC  ENTRY CONDITIONS
  
      THE FOLLOWING COMMON ITEMS SHOULD HAVE BEEN GIVEN VALID VALUES: 
      EXTNADDR - EXTENSION BLOCK ADDRESS OF WORD AFTER HEADER WORD
      MASSZARE - MASTER DIRECTORY AREA DIRECTORY SIZE (- CONTROL WORD)
      MASWAARE - MASTER DIRECTORY AREA DIRECTORY WORD ADDRESS 
      NAMESCHE - BLANK-FILLED SCHEMA NAME 
      NAMESUBS - BLANK-FILLED SUBSCHEMA NAME
      WORKADDR - WORK BLOCK MAIN ADDRESS OF WORD AFTER HEADER WORD
      WORPOINT - WORK BLOCK MAIN MANAGED MEMORY BLOCK POINTER WORD
      THE MASTER DIRECTORY FILE AND ITS FIT DB$FTMD SHOULD BE USABLE. 
  
  DC  EXIT CONDITIONS 
  
      ON NORMAL DB$CPRE RETURN, THE EXTENSION BLOCK WILL CONTAIN THE
      MASTER DIRECTORY AREA DIRECTORY, THE MD WILL CONTAIN A DUMMY CST
      FIXED PART, AND SOME ITEMS IN COMMON WILL BE INITIALIZED. 
  
  DC  CALLING ROUTINES
  
      DB$CBLD - CONDENSED SCHEMA/SUBSCHEMA TABLE BUILDER MAIN MODULE
  
  DC  CALLED ROUTINES 
  
      DB$CPUT - PUT WORDS FROM CORE INTO THE MASTER DIRECTORY FILE
      DB$UADR - UPDATE MANAGED MEMORY BLOCK FIRST-USABLE-ADDRESS WORDS
      DB$UAWS - ADJUST THE WORK SPACE USABLE IN A MANAGED MEMORY BLOCK
      DB$WGET - CALL CYBER RECORD MANAGER TO DO A WORD ADDRESSABLE GET
  
  DC  NON-LOCAL VARIABLES 
  
      CHECKSUM - EXCLUSIVE-OR CHECKSUM OF WORDS OF THE NEW CST
      CONNBEXA - CONSTRAINT-INVOLVED NUMBER OF EXTENDED AREA ENTRIES
      CONSTNUM - CONSTRAINT INTEGRITY TABLE NUMBER OF RELEVANT ENTRIES
      EXCURENT - EXTENSION BLOCK CURRENT WORD LENGTH (EXCEPT AREAS) 
      LENILOCK - RSB (A CDCS TERM) ITEM PRIVACY LOCK TABLE WORD LENGTH
      LENJOINB - RSB (A CDCS TERM) JOIN BUFFER LENGTH IN WORDS
      LENSERCH - RSB (A CDCS TERM) SEARCH/QUALIFICATION TABLE LENGTH
      LENSTACK - RSB (A CDCS TERM) QUALIFICATION STACK BUFFER LENGTH
      MCLENARE - MAPPING CAPSULE TABLE LENGTH OF AREA CAPSULE ENTRIES 
      MCLENREC - MAPPING CAPSULE TABLE LENGTH OF REC CAPSULE ENTRIES
      MCNUMARE - MAPPING CAPSULE TABLE NUMBER OF AREA CAPSULE ENTRIES 
      MCNUMREC - MAPPING CAPSULE TABLE NUMBER OF REC CAPSULE ENTRIES
      PLCURENT - PRIVACY LOCK TABLE CURRENT LENGTH IN WORDS 
      PLNUMBER - PRIVACY LOCK TABLE NUMBER OF ENTRIES 
      PLPRIOR  - PRIVACY LOCK TABLE PRIOR LENGTH IN WORDS 
      POCOLUMN[0] - PROCEDURE OPTION TABLE COLUMN 0 LENGTH IN WORDS 
      POCOLUMN[1] - PROCEDURE OPTION TABLE COLUMN 1 LENGTH IN WORDS 
      POCURENT - PROCEDURE OPTION TABLE CURRENT LENGTH IN WORDS 
      PONUMBER - PROCEDURE OPTION TABLE NUMBER OF ENTRIES 
      SCMAXEXT - SCHEMA MAX REC LEN IN CHARS OF RECS IN EXTENDED AREAS
      SCMAXREC - SCHEMA MAX REC LENGTH IN CHARS OF RECS IN SUBSCHEMA
      WOCURENT - WORK BLOCK MAIN MEMORY BLOCK CURRENT LENGTH IN WORDS 
      THE MASTER DIRECTORY AND EXTENSION BLOCK CONTENTS WILL CHANGE.
  
  DC  DESCRIPTION 
  
      CALL DB$WGET TO READ THE MASTER DIRECTORY AREA DIRECTORY. 
      FORM A DUMMY CST FIXED PART AND CALL DB$CPUT TO WRITE IT TO MD. 
      INITIALIZE SOME COMMON ITEMS PREPARATORY TO WORK BLOCK BUILDING.
 #
        CONTROL EJECT;
  
        BEGIN                # DB$CPRE #
  
        XREF PROC DB$CEMD;   # MASTER DIRECTORY CRM ERROR HANDLER # 
        XREF PROC DB$CPUT;   # PUT CORE WORDS IN THE MASTER DIRECTORY#
        XREF PROC DB$UADR;   # UPDATE MANAGED MEMORY USABLE ADDRESSES#
        XREF PROC DB$UAWS;   # ADJUST MANAGED MEMORY BLOCK WORK SPACE#
        XREF PROC DB$WGET;   # CALL CRM TO DO A WORD ADDRESSABLE GET #
        XREF ARRAY DB$FTMD;; # MASTER DIRECTORY FILE INFORMATN. TABLE#
  
        CONTROL NOLIST;      # UTCDF UTCIT UTMPT UTCAR CUGBA CSTFX #
*CALL UTCARDCLS 
*CALL CSTFXDCLS 
        CONTROL LIST;        # RESUME THE LISTING OF THE SOURCE CODE #
        CONTROL EJECT;
  
# CALL DB$WGET TO READ THE MASTER DIRECTORY AREA DIRECTORY TO CORE #
  
        P<PUTENTRY> = EXTNADDR;        # POINT TO THE EXTENSION BLOCK#
        XCALL DB$WGET(DB$FTMD,PUTENTRY,MASSZARE,MASWAARE + DFMDADCW,
                      DB$CEMD);        # READ THE MASTER DIRECTORY #
        XCALL DB$UADR;       # UPDATE MANAGED MEMORY USABLE ADDRESSES#
  
# FORM A DUMMY CST FIXED PART AND CALL DB$CPUT TO WRITE IT TO MD FILE#
  
        XCALL DB$UAWS(LOC(WORPOINT),DFCSTFIX);   # ADJUST WORK SPACE #
        P<CSFIXED> = WORKADDR;         # POINT TO WORK BLOCK IN CORE #
        CSFSBNAM[0] = NAMESUBS;        # BLANK-FILLED SUBSCHEMA NAME #
        CSFSCNAM[0] = NAMESCHE;        # BLANK-FILLED SCHEMA NAME # 
        XCALL DB$CPUT(WORKADDR,DFCSTFIX);        # WRITE TO MD FILE # 
        XCALL DB$UAWS(LOC(WORPOINT),-DFCSTFIX);  # ADJUST WORK SPACE #
  
# INITIALIZE SOME ITEMS IN COMMON PREPARATORY TO WORK BLOCK BUILDING #
  
        CHECKSUM = 0;        # EXCLUSIVE-OR CHECKSUM OF NEW CST WORDS#
        CONNBEXA = 0;        # CONSTR-INVOLVED NUMBER OF EXTEND AREAS#
        CONSTNUM = 0;        # CONSTR INTEGRITY TABLE NUMB OF ENTRIES#
        EXCURENT = 0;        # EXTENSION BLOCK CURRENT WORD LENGTH #
        LENILOCK = 0;        # RSB ITEM PRIVACY LOCK TABLE WD. LENGTH#
        LENJOINB = 0;        # RSB JOIN BUFFER LENGTH IN WORDS #
        LENSERCH = 0;        # RSB SEARCH/QUALIFICATION TABLE LENGTH #
        LENSTACK = 0;        # RSB QUALIFICATION STACK BUFFER LENGTH #
        MCLENARE = 0;        # MAPPING CAPSULE LENGTH OF AREA ENTRIES#
        MCLENREC = 0;        # MAPPING CAPSULE LENGTH OF REC ENTRIES #
        MCNUMARE = 0;        # MAPPING CAPSULE NUMBER OF AREA ENTRIES#
        MCNUMREC = 0;        # MAPPING CAPSULE NUMBER OF REC ENTRIES #
        PLCURENT = 0;        # PRIVACY LOCK TABLE CURRENT WORD LENGTH#
        PLNUMBER = 0;        # PRIVACY LOCK TABLE NUMBER OF ENTRIES # 
        PLPRIOR = 0;         # PRIVACY LOCK TABLE PRIOR WORD LENGTH # 
        POCOLUMN[0] = 0;     # PROC OPTION TABLE COLUMN 0 WORD LENGTH#
        POCOLUMN[1] = 0;     # PROC OPTION TABLE COLUMN 1 WORD LENGTH#
        POCURENT = 0;        # PROC OPTION TABLE CURRENT WORD LENGTH #
        PONUMBER = 0;        # PROC OPTION TABLE NUMBER OF ENTRIES #
        SCMAXEXT = 0;        # SCHEMA MAXIMUM EXTEND AREA REC LENGTH #
        SCMAXREC = 0;        # SCHEMA MAXIMUM RECORD CHARACTER LENGTH#
        WOCURENT = 0;        # WORK BLOCK MAIN CURRENT WORD LENGTH #
  
        RETURN;              # PREPARATORY READ/WRITE/ASSIGN DONE # 
  
        END                  # DB$CPRE #
  
      TERM
