*DECK DB$LNK
      FUNC DB$LNK((BLOCK),(LENGTH));
      BEGIN 
 #
* *   DB$LNK - CREATE LINKED BLOCK               PAGE  1
* *   C O GIMBER                                 11/6/75
* 
* DC  PURPOSE 
*     THIS FUNCTION CREATES A BLOCK AND LINKS IT TO A LINKED
*     CHAIN OF BLOCKS.
* 
* DC  ENTRY CONDITIONS
* 
*     PARAMETERS
# 
      ITEM BLOCK;            #ADDRESS OF BLOCK TO LINK TO#
      ITEM LENGTH;           #LENGTH OF BLOCK TO BE CREATED#
# 
* DC  EXIT CONDITIONS 
* 
*     THIS FUNCTION RETURNS THE ADDRESS OF THE BLOCK WHICH WAS
*     CREATED.
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$MFA;      #ALLOCATE FIXED POSITION BLOCK#
# 
* DC  NON-LOCAL VARIABLES 
# 
      XREF ARRAY DB$RA0;
        BEGIN 
        ITEM WORD (0,00,60); # CLEAR THE WHOLE WORD TO AVOID A READ    #
        ITEM PRIOR(0,24,18); #PRIOR AND NEXT POINTERS MUST BE IN# 
        ITEM NEXT(0,42,18);  #THESE LOCATIONS OF THE FIRST WORD OF# 
                             #EACH BLOCK ENTRY TO BE LINKED#
        END 
 #
# 
      ITEM NEW;              #ADDRESS OF CREATED BLOCK# 
  
  
#     B E G I N   D B $ L N K   E X E C U T A B L E   C O D E .        #
  
      DB$MFA(LENGTH,NEW); 
      WORD[NEW] = NEXT[BLOCK];
      PRIOR[NEW] = BLOCK; 
      NEXT[BLOCK] = NEW;
      IF NEXT[NEW] NQ 0 THEN
        PRIOR[NEXT[NEW]] = NEW; 
      DB$LNK = NEW; 
      RETURN; 
      END 
      TERM; 
