*DECK MSEIZE
          IDENT  MSEIZE 
          ENTRY  MSEIZE 
          EXT    ABORT
          EXT    BFSCAN 
          EXT    OMSG 
          EXT    RDUMP
          EXT    XDROP
          EXT    XTRACE 
          LIST   F
*IF DEF,IMS 
*#
* 
*     1. PROC NAME           AUTHOR              DATE 
*        MSEIZE              P.C.TAM             77/11/28 
* 
*     2. FUNCTIONAL DESCRIPTION.
*        DELINK A FREE BUFFER FROM FREE CHAIN 
* 
*     3. METHOD USED. 
*        DELINK BUFFER FROM FREE CHAIN
*        DECREMENT FRESFB BY REQUIRED SIZE
*        RELEASE ANY EXTRA SPACE
* 
*     4. ENTRY PARAMETERS.
*        (A0)=ADDR OF PARM BLOCK
*        (X1)=RQSIZE
*        (B4)=BUFWA OF FREE BUFFER
* 
*     5. EXIT PARAMETERS. 
*        NONE.
* 
*     6. COMMON DECKS CALLED. 
*          CYBERDEFS FREETAB INPARU MACDEF STATTAB2 
* 
*     7. ROUTINES CALLED. 
*          OMSG              ISSUE DAYFILE MESSAGE
*          RDUMP             DUMP NIP-S FIELD LENGTH
*          XDROP             SET PIP-DROP FLAG AND TERMINATE
*          XTRACE            RECORD PROCEDURE CALLS 
* 
*     8. DAYFILE MESSAGES.
*        *MGETS BUFFER MANAGEMENT ERROR*
* 
*#
*ENDIF
  
*CALL MACDEF
*CALL INPARU
*CALL CYBERDEFS 
*CALL FREETAB 
*CALL STATTAB2
  
 MSEIZE   SUBR   =           ENTRY/EXIT 
  
 D1       IFEQ   DEBUG,1,6
          SX6    A1 
          SA6    TEMP 
          SX1    XMSEIZ 
          RJ     XTRACE 
          SA1    TEMP 
          SA1    X1 
  
          NZ     X1,MSZ1
          IFEQ   DEBUG,1,2
          SA1    MSGADR 
          RJ     ABORT       *---ABORT---*
  
 MSZ1     BSS    0
 D1       ENDIF 
  
          IFEQ   STAT,1,4 
          MX0    -1          INCREMENT ST$GET 
          SA5    ST$GET 
          IX7    X5-X0
          SA7    A5 
  
          SA2    FRETAB+FRESFB#        (X2)=(FRESFB)
          SA3    FRETAB+FRENOFB#       (X3)=(FRENOFB) 
  
*** 
* 
*         FOUND, UPDATE FREETAB INFO, DELINK SELECTED BUF, RELEASE EXTRA
  
          MX0    -FRBBS$     (X0)=MASK FOR FRBBS
          LX0    FRBBS?-FRBBS$+1       (X0)= FRBBS SHIFTED TO APPR POS
          LOAD   A5,B4,FRBBS# (X5)=FRBBS[BUFWA] WORD
          BX4    -X0*X5      (X4)=FRBBS[BUFWA] ONLY 
          LX4    -FRBBS?+FRBBS$-1      RIGHT JUST. FRBBS[BUFWA] 
          SB1    X5          (B1)=FRBFBFP[BUFWA] (TEMP1)
          LX5    -FRBFBFP$   (X5)=FRBFBBP[BUFWA] RIGHT JUSTIFY
          SB2    X5          (B2)=FRBFBBP[BUFWA] (TEMP2)
          IX4    X4-X1       (X4)=FRBBS[BUFWA]-RQSIZE 
          SB3    X4          EXTRA SPACE LEFT IN SELECTED BUFFER
          ZR     X4,MGTSZA   BRANCH IF FRBBS[BUFWA]-RQSIZE IS 0 
  
*         EXTRA SPACE TO RELEASE
  
          LX5    FRBFBFP$    RESTORE ORIGINAL X5
          MX0    -FRBFBBP$-FRBFBFP$    MASK FOR FRBFBBP AND FRBFBFP TOGETHER
          LX4    FRBBS?-FRBBS$+1       SHIFT TO APP POS IN WORD 
          BX7    -X0*X5      (X7)=FRBWD[BUFWA] MINUS FRBID FRBBS
          SB7    B4+X1       (B7)=BUFWA+ RQSIZE 
          BX7    X7+X4       (X7)=NEW FRBWD[BUFWA+RQSIZE] 
          SA7    B7          WRITE TO CM
          SX4    B7          (X4)=BUFWA+RQSIZE
          SX5    B7          (X4)=BUFWA+RQSIZE
          EQ     MGTSZB 
  
*         NO EXTRA SPACE TO RELEASE 
  
 MGTSZA   SX4    B1          (X4)=FRBFBFP[BUFWA]
          SX5    B2          (X5)=FRBFBBP[BUFWA] RIGHT JUSTIFIED
          SX3    X3-1        (X3)= UPDATED FRENOFB
  
 MGTSZB   BSS    0
          IX6    X2-X1       (X6)=FRESFB-RQSIZE 
          BX7    X3          (X7)=UPDATED FRENOFB 
          SA6    FRETAB+FRESFB# 
          SA7    FRETAB+FRENOFB#
          MX0    -FRBFBBP$   MASK FOR FRBFBBP FD
          LOAD   A2,B1,FRBFBBP# (X2)=FRBFBBP[FRBFBFP[BUFWA]] WORD 
          LX0    FRBFBBP?-FRBFBBP$+1   SHIFT MASK TO APPR POS IN WORD 
          BX2    X0*X2       (X2)=FRBFBBP[FRBFBFP[BUFWA]] WORD MINUS BP 
          LX5    FRBFBBP?-FRBFBBP$+1   SHIFT TO APP POS IN WORD 
          BX7    X5+X2       FRBFBBP[FRBFBFP[BUFWA]]=FRBFBBP[BUFWA] 
          SA7    A2          STORE BACK TO CM 
          MX0    -FRBFBFP$   MASK FOR FRBFBFP FD
          LOAD   A3,B2,FRBFBFP# (X3)=FRBFBFP[FRBFBBP[BUFWA]] WORD 
          BX3    X0*X3       (X3)=FRBFBFP[FRBFBBP[BUFWA]] WORD MINUS FP 
          BX6    X4+X3       FRBFBFP[FRBFBBP[BUFWA]]=FRBFBFP[BUFWA] 
          SA6    A3          STORE TO CM
  
*         CHECK IF HOST REGULATION LEVEL NEEDS TO BE UPDATED
  
*         (A2) = ADDR OF NEXT FREE BUFFER IN FREE CHAIN 
*         (B3) = EXTRA SPACE LEFT IN SELECTED BUFFER
  
          SB6    FRETAB+FREFBBP#  ADDR OF FREETAB BUFFER POINTER WORD 
          SB5    A2          ADDR OF NEXT BUFFER AFTER DELINKED FREE BUF
          NE     B6,B5,MGTS20   EXIT IF DELINKED BUF NOT FROM LAST BUF
          SX3    B3          EXTRA SPACE LEFT IN LAST BUFFER
          SA5    CTLSLWA     LWA OF FIELD LENGTH
          SA4    MAXFL       MAX FIELD LENGTH FOR NIP 
          IX5    X5-X3       ADDR OF FIRST FREE WORD AT END OF MEMORY 
          IX4    X4-X5       CALCULATE SIZE OF LAST FREE BUFFER 
          SX7    HRLV3       PRESET TO HOST REGULATION LEVEL 3
          SX5    BUFLV3      THRESHOLD FOR HOST REGULATION LEVEL 3
          IX5    X4-X5       SIZE DIFFERENCE BETWEEN LAST BUF AND THRESH
          PL     X5,MGTS15   EXIT IF LAST BUFFER GREATER THAN THRESHOLD 
          SX7    HRLV2       SET TO HOST REGULATION LEVEL 2 
          SX5    BUFLV2      THRESHOLD FOR HOST REGULATION LEVEL 2
          IX5    X4-X5       SIZE DIFFERENCE BETWEEN LAST BUF AND THRESH
          PL     X5,MGTS15   EXIT IF LAST BUFFER GREATER THAN THRESHOLD 
          SX7    HRLV1       SET TO HOST REGULATION LEVEL 1 
          SX5    BUFLV1      THRESHOLD FOR HOST REGULATION LEVEL 1
          IX5    X4-X5       SIZE DIFFERENCE BETWEEN LAST BUF AND THRESH
          PL     X5,MGTS15   EXIT IF LAST BUFFER GREATER THAN THRESHOLD 
          SX7    HRLV0       SET TO HOST REGULATION LEVEL 0 
 MGTS15   SA7    HRL         SAVE NEW HOST REGULATION LEVEL 
  
*** 
* 
*         ZERO OUT BUF IF NECESSARY 
  
 MGTS20   SA3    A0+2        (X3)=ZERO FLAG ADDR
          SA3    X3          (X3)=ZERO FLAG 
  
          ZR     X3,MGTS30   FLAG NOT SET, NO ZEROING 
          SB1    1
          MX7    0           (X7)=0 
          SB6    X1-1        (B6)=RQSIZE-1
          SB7    X7 
  
 MGTS25   SA7    B4+B7       CMWORD[BUFWA+B7]=0 
          SB7    B7+B1
          LE     B7,B6,MGTS25          CHECK FOR EXIT 
  
 MGTS30   LX1    FRBBS?-FRBBS$+1  SHIFT RQSIZE TO APPRO POS IN WORD 
          BX6    X1          FRBLKS[BUFWA]=RQSIZE 
          STORE  A6,B4,FRBBS# WRITE FRBBS[BUFWA] BACK 
  
          IFEQ   BFSC,1,1 
          RJ     BFSCAN 
  
          EQ     MSEIZEX     EXIT 
  
  
 MSFZ     IFEQ   DEBUG,1
 MSGADR   VFD    60/MSGE
          BSSZ     1
 MSGE     DATA   L*MGETS BUFFER MANAGEMENT ERROR* 
 XMSEIZ   DATA   L*MSEIZ* 
 TEMP     BSS    1
 MSFZ     ENDIF 
  
          END 
