*DECK MGROW IDENT MGROW LIST F ENTRY MGROW EXT ABORT EXT MGETS EXT MRELS EXT OMOVE EXT XTRACE *IF DEF,IMS *# *1DC MGROW * 1. PROC NAME AUTHOR DATE * MGROW P.C.TAM 78/07/05 * * 2. FUNCTIONAL DESCRIPTION. * EXPAND THE SIZE OF A BUFFER. * * 3. METHOD USED. * WITH DEBUG ON, MGROW WILL CHECK IF BLOCK SIZE IS ZERO, * IF REQUESTED SIZE IS ZERO, OR IF REQUESTED SIZE IS * SMALLER THAN BLOCK SIZE. MGROW WILL ABORT ON THOSE * CONDITIONS. * MGROW WILL GET A BUFFER OF REQUESTED SIZE, MOVE * INFORMATION TO NEW BLOCK, AND RELEASE OLD BUFFER. * * 4. ENTRY PARAMETER. * (A1) = ADDRESS OF THE ADDRESS OF THE OLD BUFFER ADDRESS * (A1)+1 = ADDRESS OF THE ADDRESS OF THE REQUIRED SIZE * * 5. EXIT PARAMETER. * (A1) = ADDRESS OF THE ADDRESS OF NEW BUFFER ADDRESS * (A1)+2 = ADDRESS OF THE ADDRESS OF THE COMPLETE FLAG * FLAG SET TO 1 IF MOVE IS SUCCESSFUL * * 6. COMMON DECKS CALLED. * CYBERDEFS INPARU MACDEF FREETAB * * 7. ROUTINES CALLED. * ABORT ABORT NIP * MGETS ALLOCATE A BUFFER FROM FREE POOL * MRELS RELEASE A BUFFER TO FREE POOL * OMOVE MOVE INFORMATION * XTRACE TRACE CALLER * * 8. DAYFILE MESSAGES. * *MGROW CALL ERROR* - OLD OR NEW BLOCK ZERO SIZE, * NEW BLOCK SIZE LESS THAN OLD SIZE. * *# *ENDIF *CALL MACDEF *CALL CYBERDEFS *CALL INPARU *CALL FREETAB MGROW SUBR = ENTRY/EXIT SA2 X1 (X2)=BUFADDR SB1 1 LOAD A3,X2,FRBBS# (X3)=HEADER WORD OF BUFADDR SA4 A1+B1 (X4)=REQUIRED SIZE LX3 -FRBBS?+FRBBS$-1 RIGHT JUSTIFY BLOCK SIZE SA4 X4 SX5 X3 GRF2 IFEQ DEBUG,1 IX6 X4-X5 REQUEST SIZE MINUS BLOCK SIZE MI X6,GRZ ERROR IF BLOCK SIZE GR NEW SIZE GRF2 ENDIF SX7 A1 SAVE A1 BX6 X4 SET UP PARM FOR MGETS CALL SA7 SAVEA1 SA6 MGPM SA1 MGPMD RJ MGETS MGETS(SIZE, BUFAD, FALSE) SA1 SAVEA1 SB1 1 SA5 MGPM+1 (X5)=BUFAD SA1 X1 SA2 A1+2 (X2)=ADDR OF 3RD PARM ZR X5,GRY BUFAD ZERO ** * GET NEW BUFFER SX7 B1 COMPLETE=TRUE BX6 X5 (X6)=BUFAD SA7 X2 SA2 X1 (X2)=BUFADDR SA6 X1 BUFADDR=BUFAD LOAD A3,X2,FRBBS# (X3)=HEADER WORD OF OLD BUFADDR SX7 X2+B1 MOLD=BUFADDR+1 LX3 -FRBBS?+FRBBS$-1 RIGHT JUSTIFY BLOCK SIZE SX6 X5+B1 MNEW=BUFAD+1 SA7 MOLD MX0 -1 (X0)=-1 SA6 MNEW SX4 X3 (X4)=OLD BLOCK SIZE IX7 X4+X0 MSIZE=OLD BLOCK SIZE - 1 SA7 MSIZE BX6 X3-X4 BUILD NEW HEADER LOAD A5,X5,FRBBS# (X5)=HEADER WORD OF BUFAD BUFFER BX7 X2 (X7)=OLD BUFFADR LX5 -FRBBS?+FRBBS$-1 RIGHT JUSTIFY BLOCK SIZE SA7 MRPM SX5 X5 BX6 X6+X5 SB2 A5 LX6 FRBBS?-FRBBS$+1 NEW BLOCK HEADER FOR BUFAD SB3 B2+X4 (B3)=BUFAD+OLD BLOCK SIZE SA6 A5 MX7 0 SB4 B2+X5 (B4)=BUFAD+NEW BS GRW GE B3,B4,GRX LOOP TO ZERO OUT REST OF BLOCK SA7 B3 SB3 B3+B1 EQ GRW GRX BSS 0 RJ OMOVE COPY INFORMATION FROM OLD BLOCK SA1 MRPMD RJ MRELS RELEASE OLD BLOCK EQ MGROWX RETURN GRY BSS 0 MX7 0 SA7 X2 COMPLETE=FALSE EQ MGROWX GRF5 IFEQ DEBUG,1 GRZ BSS 0 SA1 MSGDR RJ ABORT *----ABORT----* MSGDR VFD 60/MSGD BSSZ 1 MSGD DATA L*MGROW CALL ERROR* GRF5 ENDIF MRPMD BSS 0 MGPMD VFD 60/MGPM VFD 60/MGPM+1 VFD 60/MGPM+2 MRPM BSS 0 MGPM BSSZ 3 SIZE, BUFAD, FALSE SAVEA1 BSSZ 1 END