*DECK DB$CGSD 
USETEXT UTCDFTX 
USETEXT CUGBATX 
      PROC DB$CGSD(LOCWSA,LENGTH,WORDADDR); 
 #
  *   DB$CGSD - GET FROM SUBSCHEMA/SCHEMA FILE   PAGE  1
  *   STEVEN P. LEVIN                            DATE  09/29/75 
  
  DC  PURPOSE 
  
      BY ULTIMATELY USING CRM GET, READ FROM THE SCHEMA (DB$CGSC) OR
      SUBSCHEMA (DB$CGSB) DIRECTORY FILE TO A WORKING STORATE AREA. 
  
  DC  ENTRY CONDITIONS
  
      ENTRY POINT DB$CGSB IS CALLED FOR SUBSCHEMA DIRECTORY FILE GET. 
      ENTRY POINT DB$CGSC IS CALLED FOR A SCHEMA DIRECTORY FILE GET.
      THE PARAMETER LOCWSA IS THE WORKING STORAGE AREA LOCATION.
      THE PARAMETER LENGTH IS THE WORD LENGTH OF WHAT IS TO BE READ.
      THE PARAMETER WORDADDR IS STARTING WORD ADDRESS IN THE FILE.
      DB$CGSB ALSO USES DE$FTSB, THE SUBSCHEMA FILE INFORMATION TABLE.
      DB$CGSC ALSO USES DE$FTSC, THE SCHEMA FILE INFORMATION TABLE. 
  
  DC  EXIT CONDITIONS 
  
      UPON NORMAL RETURN FROM DB$CGSD (DB$CGSB OR DB$CGSC), THE 
      WORKING STORATE AREA (ARRAY) INDICATED BY THE PARAMETER LOCWSA
      WILL CONTAIN LENGTH WORDS READ FROM THE APPROPRIATE DDL 
      DIRECTORY FILE STARTING FROM WORD ADDRESS WORDADDR IN THE FILE. 
      ALTHOUGH DB$CGSD DOES HOT DIRECTLY DETECT ERRORS, IT DOES PASS
      AN ERROR PROC ADDRESS TO DB$WGET WHICH DB$WGET PUTS IN THE FIT. 
  
  DC  CALLING ROUTINES
  
      DB$CARE - BUILD AN AREA WORK BLOCK - CALLS DB$CGSB AND DB$CGSC
      DB$CCHK - COMPARE CHECKSUMS - CALLS DB$CGSB AND DB$CGSC 
      DB$CCPP - PREPROCESS CONSTRAINTS - CALLS DB$CGSB AND DB$CGSC
      DB$CEND - END CST BUILD BY WRITING PARTS - CALLS DB$CGSB ONLY 
      DB$CREC - BUILD A RECORD WORK BLOCK - CALLS DB$CGSB AND DB$CGSC 
      DB$CREL - BUILD A RELATION WORK BLOCK - CALLS DB$CGSB ONLY
  
  DC  CALLED ROUTINES 
  
      DB$UADR - UPDATE MANAGED MEMORY BLOCK FIRST-USABLE-ADDRESS WORDS
      DB$WGET - CALL CYBER RECORD MANAGER TO DO A WORD ADDRESSABLE GET
  
  DC  NON-LOCAL VARIABLES 
  
      NOTHING IS DIRECTLY MODIFIED, BUT DB$WGET CALLS CRM GET, WHICH
      CHANGES MEMORY CONTENTS, AND DB$UADR UPDATES ITEMS IN COMMON. 
  
  DC  DESCRIPTION 
  
      CALL THE ROUTINE DB$WGET, WHICH IN TURN CALLS CYBER RECORD
      MANAGER GET, TO READ FROM EITHER THE SUBSCHEMA FILE (IF DB$CGSB 
      IS CALLED) OR FROM THE SCHEMA FILE (IF DB$CGSC IS CALLED).
      LENGTH WORDS STARTING AT WORD ADDRESS WORDADDR IN THE PROPER DDL
      FILE ARE READ TO THE WORKING STORAGE AREA INDICATED BY LOCWSA.
      DB$UADR IS CALLED TO UPDATE MEMORY BLOCK USABLE-ADDRESS WORDS.
 #
        CONTROL EJECT;
  
        BEGIN                # DB$CGSD #
  
# THE FOLLOWING ARE FORMAL PARAMETERS IN THE ORDER THEY ARE PASSED #
  
        ITEM LOCWSA U;       # LOCATION OF THE WORKING STORAGE AREA # 
        ITEM LENGTH I;       # LENGTH IN WORDS OF WHAT IS TO BE READ #
        ITEM WORDADDR U;     # STARTING WORD ADDRESS IN THE FILE #
  
# THE FOLLOWING ARE EXTERNALLY REFERENCED PROCEDURES AND ARRAYS # 
  
        XREF PROC DB$CESB;   # SUBSCHEMA FILE CRM ERROR HANDLER # 
        XREF PROC DB$CESC;   # SCHEMA FILE CRM ERROR HANDLER #
        XREF PROC DB$UADR;   # UPDATE MANAGED MEMORY USABLE ADDRESSES#
        XREF PROC DB$WGET;   # CALL CRM TO DO A WORD ADDRESSABLE GET #
        XREF ARRAY DE$FTSB;; # SUBSCHEMA DIRECTORY FILE INFORM. TABLE#
        XREF ARRAY DE$FTSC;; # SCHEMA DIRECTORY FILE INFORMATN. TABLE#
  
  
# ******************************************************************** #
  
# ENTRY POINT DB$CGSB IS CALLED FOR SUBSCHEMA DIRECTORY FILE CRM GET #
  
        ENTRY PROC DB$CGSB(LOCWSA,LENGTH,WORDADDR);        #SUBSCHEMA#
  
        P<PUTENTRY> = LOCWSA;          # POINT TO LOCATION OF THE WSA#
        XCALL DB$WGET(DE$FTSB,PUTENTRY,LENGTH,WORDADDR,DB$CESB);
        XCALL DB$UADR;       # UPDATE MANAGED MEMORY USABLE ADDRESSES#
  
        RETURN;              # RETURN WITH THE SUBSCHEMA CRM GET DONE#
  
# ENTRY POINT DB$CGSC IS CALLED FOR A SCHEMA DIRECTORY FILE CRM GET # 
  
        ENTRY PROC DB$CGSC(LOCWSA,LENGTH,WORDADDR);        # SCHEMA # 
  
        P<PUTENTRY> = LOCWSA;          # POINT TO LOCATION OF THE WSA#
        XCALL DB$WGET(DE$FTSC,PUTENTRY,LENGTH,WORDADDR,DB$CESC);
        XCALL DB$UADR;       # UPDATE MANAGED MEMORY USABLE ADDRESSES#
  
        RETURN;              # RETURN WITH THE SCHEMA CRM GET DONE #
  
        END                  # DB$CGSD #
  
      TERM
