*DECK DB$DBST 
USETEXT RQPARTX 
      PROC DB$DBST(DBSTUCP,DBSTLEN);
      BEGIN 
 #
* *   DB$DBST - DBST OBJECT-TIME ROUTINE         PAGE  1
* *   M A DUNN                                   DATE  11/14/78 
* 
* DC  PURPOSE 
* 
*     SAVE THE LENGTH AND ADDRESS OF THE DBST AT THE UCP, FORMAT
*     THE REQUEST PACKET FOR THE "DATABASE STATUS BLOCK" CALL, AND
*     ISSUE THE SUBSYSTEM REQUEST TO ESTABLISH THE DBST.
* 
* DC  ENTRY CONDITIONS
* 
*     PARAMETERS
# 
      ITEM DBSTUCP;                # UCP-SIDE DBST BUFFER              #
      ITEM DBSTLEN;                # WORD LENGTH OF THE DBST           #
# 
*     ASSUMPTIONS 
* 
*     NONE
* 
* DC  EXIT CONDITIONS 
* 
*     ARRAY *DB$DBS* (DEFINED IN DB$RQST) CONTAINS THE UCP ADDRESS AND
*     WORD LENGTH OF THE CURRENT DBST.
*     THE SCP HAS BEEN INFORMED OF THE EXISTENCE OF THE USER"S DBST.
*     HEREAFTER, THE USER"S DBST WILL BE UPDATED FOR EACH CDCS COMMAND
*     PROCESSED.
* 
* DC  CALLING ROUTINES
* 
*     HOST-LANGUAGE 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$RA0;            # TERMINATE PARAMETER LIST          #
      XREF PROC DB$RQST;           # COMPLETE REQ PACKET,ISSUE "CALLSS"#
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     DB$DBS - ARRAY THAT STORES THE UCP ADDRESS AND WORD LENGTH OF 
*              THE DBST.  ONCE THE DBST HAS BEEN ESTABLISHED, THESE 
*              VALUES ARE REFERENCED BY DB$RQST WHEN CLEARING THE USER"S
*              DBST PRIOR TO CDCS COMMAND PROCESSING. 
* 
* DC  DESCRIPTION 
* 
*     IF THE SPECIFIED DBST WORD LENGTH EXCEEDS THE MAXIMUM ALLOWED 
*     LENGTH, THEN USE THE MAXIMUM ALLOWED LENGTH AS THE DEFAULT VALUE
*     FOR THIS DBST.  IF THE SPECIFIED LENGTH IS LESS THAN OR EQUAL 
*     TO ZERO, THEN THE DEFAULT DBST LENGTH IS ONE WORD.  SAVE THE
*     UCP DBST LOCATION AND WORD LENGTH IN THE ARRAY *DB$DBS*, AND
*     ALSO STORE THESE VALUES IN THE REQUEST PACKET.
*     CALL DB$RQST TO FILL IN THE REMAINING REQUEST PACKET
*     PARAMETERS AND TO ISSUE THE "CALLSS" SUBSYSTEM REQUEST
*     INFORMING CDCS OF THE EXISTENCE OF THE USER"S DBST. 
 #
  
  
  
#     XREF VARIABLES                                                   #
  
      XREF ARRAY DB$DBS;
        BEGIN 
        ITEM DBSTLW  U(00,36,06);  # DBST LENGTH IN WORDS              #
        ITEM DBSTADR U(00,42,18);  # DBST ADDRESS AT THE UCP           #
        END 
  
#     THE FOLLOWING COMDECKS ARE CALLED:  CDGDFDCLS, RQPARDCLS         #
      CONTROL NOLIST; 
      XREF
        BEGIN 
  
  
        END 
      CONTROL LIST; 
      CONTROL EJECT;
  
#     STORE THE LENGTH AND LOCATION OF THE DBST AT THE UCP             #
  
      IF DBSTLEN GR 0              # CHECK FOR LEGAL DBST LENGTH       #
      THEN
        BEGIN 
        IF DBSTLEN LQ DFDBSTSIZE   # IF USER SPECIFIED A LEGAL DBST LEN#
        THEN
          BEGIN 
          DBSTLW[0] = DBSTLEN;     # STORE REQUESTED LENGTH            #
          END 
        ELSE                       # IF REQUEST LEN > MAX ALLOWED LEN  #
          BEGIN 
          DBSTLW[0] = DFDBSTSIZE;  # USE MAX ALLOWED LEN AS DEFAULT    #
          END 
        END 
      ELSE                         # IF REQUEST LEN < MIN ALLOWED LEN  #
        BEGIN 
        DBSTLW[0] = 1;             # USE MIN LENGTH AS DEFAULT         #
        END 
      DBSTADR[0] = LOC(DBSTUCP);   # SAVE DBST ADDRESS AT THE UCP      #
  
  
#     STORE REQUEST PACKET PARAMETERS AND ISSUE THE "CALLSS" SUBSYSTEM #
#     REQUEST.                                                         #
  
      RQPDBSTLW[0] = DBSTLW[0];    # DBST LENGTH IN WORDS              #
      RQPDBSTUCP[0] = DBSTADR[0];  # DBST ADDRESS AT THE UCP           #
  
      DB$RQST(DFDBS,DFWCDBST,DB$RA0); 
  
      RETURN; 
      END 
      TERM
