*DECK,CHGSIZE 
USETEXT,IP$COM
USETEXT GLOBALI 
USETEXT TSB$COM 
      PROC CHGSIZE (ORDINAL,SIZE,MOVEFLG);
      BEGIN # CHGSIZE # 
*IF DEF,IMS 
 #
*1DC  CHGSIZE 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        CHGSIZE             B. M. WEST          13 MAY 1977
* 
*     2. FUNCTIONAL DESCRIPTION.
*        CHGSIZE ALTERS THE TSB BUFFER SIZE TO THE REQUESTED SIZE.
* 
*     3. METHOD USED. 
*        CHECK IF THE REQUESTED SIZE IS LARGER OR SMALLER THAN THE
*          CURRENT SIZE.
*          IF REQUESTED SIZE IS LARGER, CHECK IF REQUESTED SIZE IS
*            LARGER THAN THAN THE LAST FREE BUFFER. 
*            IF TRUE, CHECK IF THE REQUESTED SIZE IS LARGER THAN THE
*              LARGEST FREE BUFFER. 
*              IF TRUE, CALL SQUEEZE TO MAKE LARGER FREE BUFFERS. 
*            CALL EXINCSZ TO INCREASE SIZE OF TSB BUFFER. 
*          IF REQUESTED SIZE IS SMALLER THAN THE CURRENT SIZE, CALL 
*            EXREDUC TO REDUCE THE SIZE OF THE TSB BUFFER.
*        CALL MOVEOK TO MAKE TSB BUFFER MOVABLE.
*        CALL SETUPACN TO RESET RBF BASED ARRAY POINTERS FOR TSB BUFFER.
* 
*     4. ENTRY PARAMETERS.
*        ORDINAL - ORDINAL OF THE BUFFER TO BE ALTERED IN SIZE
*        SIZE - THE SIZE THAT THE BUFFER IS TO BECOME 
*        MOVEFLG - BUFEER MOVABLE FALG
* 
*     5. EXIT PARAMETERS. 
*        CHGSIZEREJ = TRUE   SIZE OF TSB BUFFER IS NOT CHANGED
* 
*     6. COMDECKS CALLED. 
*        RBF$COM
*        TSBMDEFS 
*        TSBMDATA 
* 
*     7. ROUTINE USED.
*        ABORT               ABORT RBF
*        EXINCSZ             INCREASE TSB BUFFER SIZE 
*        EXREDUC             REDUCE TSB BUFFER SIZE 
*        MOVEOK              MAKE TSB BUFFER MOVABLE
*        SETUPACN            SET UP RBF CONTROL BLOCK BASED ARRAYS
*        SQUEEZE             COMBINE ALL POSSIBLE FREE TSB BUFFERS
* 
*     8. DAYFILE MESSAGES. NONE.
* 
 #
*ENDIF
  
      XREF PROC EXINCSZ;     # INCREASE TSB BUFFER SIZE                #
      XREF PROC EXREDUC;     # REDUCE TSB BUFFER SIZE                  #
      XREF PROC SETUPACN;    # SET UP CONTROL BLOCKS                # 
      XREF PROC SQUEEZE;     # REORGANIZE BUFFER SPCAE FOR MORE SPACE  #
*IF DEF,DEBUG,1 
      XREF PROC ABORT;       # ABORT RBF WITH DEBUG ERROR              #
      XREF PROC MOVEOK;      # MAKE BUFFER MOVEABLE                    #
# 
      INPUT PARAMETERS
# 
      ITEM SIZE U;           # SIZE THAT BUFFER IS TO BE               #
      ITEM MOVEFLG U;        # BUFFER MOVABLE FLAG - 0 YES, 1 NO       #
      ITEM ORDINAL U;        # ORDINAL OF THE BUFFER TO BE ALTERED     #
# 
      LOCAL VARIABLES 
# 
      ITEM ADDSIZE;           # ADDITIONAL SIZE NEED FOR TSB BUFFER    #
      ITEM TO U = 0;         # DUMMY PARAMETER                         #
      ITEM TOOVLY U = 0;     # DUMMY PARAMETER                         #
      ITEM TSBADDR;          # NEW TSB BUFFER ADDRESS                  #
#                                                                      #
#     REQUEST CHANGE IN BUFFER SIZE                                    #
#                                                                      #
#                                                                      #
#     TEST IF REQUEST WILL BE REJECTED FOR LACK OF SPACE               #
#                                                                      #
      CHGSIZEREJ = FALSE; 
      P<BTSBHDR> = TTSBFWA[ORDINAL];  # TSB BUFFER HEADER BASED ARRAY  #
      ADDSIZE = SIZE + TSBHDRL - BTSBL[0];  # ADDITIONAL SIZE FOR TSB  #
      IF ADDSIZE GR 0 
      THEN                    # NEED LARGER TSB BUFFER                 #
        BEGIN 
        IF SIZE GQ MAXFL - CTSBLWA
        THEN                  # REQUESTED SIZE IS LARGER THAN LAST BUF #
          BEGIN 
          IF SIZE GQ BIGFREE
          THEN                # SIZE LARGER THAN LARGEST FREE BUFFER   #
            BEGIN 
            SQUEEZE(0,TSBADDR);  # COMBINE ALL POSSIBLE FREE BUFFERS   #
            END 
          END 
        EXINCSZ(ADDSIZE,TSBADDR,ORDINAL);  # INCREASE TSB BUFFER SIZE  #
        END 
      ELSE
        BEGIN 
        IF ADDSIZE NQ 0 
        THEN                  # REQUESTED SIZE SMALLER THAN CURRENT SIZ#
          BEGIN 
          EXREDUC(-ADDSIZE,ORDINAL,FALSE,TSBADDR);  #REDUCE TSB BUF SIZ#
          END 
        END 
      IF TSBADDR LS 0 
      THEN
        BEGIN 
        CHGSIZEREJ = TRUE;
        END 
      ELSE
        IF MOVEFLG NQ 1      # IF MOVABLE                              #
        THEN
        MOVEOK (ORDINAL); 
      SETUPACN (ACN); 
      RETURN; 
      END   # CHGSIZE # 
      TERM; 
