*DECK MREDUCE IDENT MREDUCE LIST F ENTRY MREDUCE EXT ABORT EXT MRELS EXT XTRACE *IF DEF,IMS *# *1DC MREDUCE * 1. PROC NAME AUTHOR DATE * MREDUCE P.C.TAM 78/07/10 * * 2. FUNCTIONAL DESCRIPTION. * REDUCE THE SIZE OF A BLOCK, AND RELEASE EXTRA SPACE * * 3. METHOD USED. * CHECK THE ORIGINAL BLOCK SIZE, AND THE REQUEST SIZE, * ABORT WITH ERROR MESSAGE IF EITHER IS ZERO, OR IF OLD * SIZE IS LESS THAN NEW SIZE WHEN DEBUG IS ON. * BUILD NEW HEADER, RELEASE EXTRA SPACE. * * 4. ENTRY PARAMETER. * (A1) = ADDRESS OF THE ADDRESS OF BUFFER ADDRESS OF THE BUFFER * TO BE REDUCED * (A1)+1 = ADDRESS OF THE ADDRESS OF THE REQUIRED SIZE * * 5. EXIT PARAMETER. * NONE. * * 6. COMMON DECKS CALLED. * CYBERDEFS INPARU FREETAB * * 7. ROUTINES CALLED. * ABORT ABORT NIP * MRELS RELEASE BUFFER TO FREE POOL * XTRACE TRACE CALLER * * 8. DAYFILE MESSAGES. * *MREDUCE CALL ERROR* - BUFFER SIZE IS SMALLER THAN * REQUESTED SIZE, OR BUFFER SIZE * ZERO, OR REQUEST SIZE ZERO. * * W A R N I N G - THIS ROUTINE IS LOADED WITH XPIP, * XCHKPCR, SDELQTB TOGETHER IN ONE * OVERLAY. THE SUM OF THEIR PROGRAM * LENGTHS SHOULD NOT EXCEED THE *CALL OSIZE * *# *ENDIF *CALL MACDEF *CALL CYBERDEFS *CALL INPARU *CALL FREETAB MREDUCE SUBR = ENTRY/EXIT IFEQ DEBUG,1,6 SX6 A1 SA6 TEMP SX1 XMREC RJ XTRACE SA1 TEMP SA1 X1 SB1 1 SA2 X1 (X2)=BUFADDR LOAD A3,X2,FRBBS# (X3)=BUFFER HEADER WORD SA4 A1+B1 SA4 X4 (X4)=REQUEST SIZE IFEQ DEBUG,1,1 ZR X4,RDZ ERROR IF REQUEST SIZE IS ZERO LX3 -FRBBS?+FRBBS$-1 RIGHT JUSTIFY BLOCK SIZE SX5 X3 (X5)=BLOCK SIZE IFEQ DEBUG,1,1 ZR X5,RDZ ERROR IF BLOCK SIZE IS ZERO IX6 X5-X4 (X6)=BLOCK SIZE-REQUEST SIZE IFEQ DEBUG,1,1 MI X6,RDZ ERROR IF BLOCK SIZE IS LE REQUEST SIZE BX7 X3-X5 LX6 FRBBS?-FRBBS$+1 BLOCK HEADER FOR RELEASING BLOCK BX7 X7+X4 SB2 X2 (B2)=BUFADDR LX7 FRBBS?-FRBBS$+1 BLOCK HEADER FOR BUFADDR BLOCK SB2 B2+X4 (B2)=ADDR OF RELEASING BUFFER SA7 X2 SET NEW HEADER FOR BUFADDR BLOCK SA6 B2 SET HEADER FOR RELEASING BLOCK SX6 B2 SA6 RLPM SA1 RLPMD RJ MRELS RELEASING EXTRA SPACE EQ MREDUCEX RETURN RDF2 IFEQ DEBUG,1 RDZ BSS 0 SA1 MSGDR RJ ABORT *----ABORT---* MSGDR VFD 60/MSGD BSSZ 1 MX0 30 PROTECT LOWER BITS BX7 X7*X0 MSGD DATA L*MREDUCE CALL ERROR* XMREC DATA L*MREDU* TEMP BSS 1 RDF2 ENDIF RLPMD VFD 60/RLPM RLPM BSSZ 1 END