cdc:nos2.source:nam5871:mgrow
Table of Contents
MGROW
Table Of Contents
Source Code
- MGROW.txt
- *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
cdc/nos2.source/nam5871/mgrow.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator