*DECK FFSMDTS 
USETEXT TEXTFFS 
      PROC FFSMDTS (PTR, (IDX), (NUM)); 
*CALL COPYRITE
# TITLE FFSMDTS - DEALLOCATE TABLE SPACE.                              #
  
      BEGIN                            # FFSMDTS                       #
# 
**    FFSMDTS  DEALLOCATE TABLE SPACE.
* 
*     A. LIM                           88/01/18 
* 
*     THIS PROCEDURE DEALLOCATES THE REQUESTED AMOUNT OF MEMORY FROM THE
*     SPECIFIED TABLE BEGINNING AT THE SPECIFIED POSITION IN THE TABLE. 
* 
*     PROC FFSMDTS (PTR, IDX, NUM)
* 
*     ENTRY    PTR   = PTR TO TABLE TO DEALLOCATE SPACE FROM. 
*              IDX   = WORD INDEX WITHIN TABLE TO START DEALLOCATION. 
*              NUM   = NUMBER OF WORDS TO DEALLOCATE. 
*              AVAIL = AVAILABLE WORDS FOR TABLE EXPANSION. 
* 
*     EXIT     AVAIL = AVAILABLE WORDS FOR TABLE EXPANSION. 
*              TABLE LENGTH UPDATED.
* 
*     METHOD   IF THE DEALLOCATION IS NOT AT THE END OF THE TABLE THEN
*                                                        2
*              RELOCATE THE AFFECTED PORTION OF THE TABLE.
*              UPDATE THE TABLE LENGTH AND AVAILABLE WORDS FOR TABLE
*              EXPANSION. 
* 
# 
  
# 
****  PROC FFSMDTS - XREF LIST
# 
      XREF
        BEGIN 
        PROC MOVEI;      # MOVE A NUMBER OF WORDS - INDIRECT ADDRESSING#
        END 
# 
****
# 
      ITEM PTR           I;            # TABLE POINTER                 #
      ITEM IDX           I;            # DEALLOCATION INDEX WITHIN TBL #
      ITEM NUM           I;            # NUMBER OF WORDS TO DEALLOCATE #
  
      ITEM COUNT         I;            # NUMBER OF WORDS TO MOVE       #
      ITEM DEST          I;            # ADDRESS TO MOVE TO            #
      ITEM FROM          I;            # ADDRESS TO MOVE FROM          #
      ITEM K             I;            # MANAGED TABLE INDEX           #
  
#     START MAIN PROCEDURE                                             #
  
      K = (LOC(PTR) - LOC(TSTART)) / 2;# CALCULATE MANAGED TABLE INDEX #
  
      COUNT = TABL[K] - IDX - NUM;     # NUMBER OF WORDS TO MOVE       #
      IF COUNT NQ 0 
      THEN
        BEGIN                          # NEED TO MOVE PART OF TABLE    #
        FROM = TABF[K] + IDX + NUM;    # ADDRESS TO MOVE FROM          #
        DEST = TABF[K] + IDX;          # ADDRESS TO MOVE TO            #
        MOVEI (COUNT, FROM, DEST);     # MOVE AFFECTED PART OF TABLE   #
        END;
  
      TABL[K] = TABL[K] - NUM;         # UPDATE TABLE LENGTH           #
      AVAIL = AVAIL + NUM;             # UPDATE AVAILABLE WORDS        #
  
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FFSMDTS                       #
  
      TERM
