DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦7fa27c7ef⟧

    Length: 23068 (0x5a1c)
    Notes: pts_type(SC)
    Names: »DEPOOL.SC«

Derivation

└─⟦48601905a⟧ Bits:30009668 Philips computer tape "600121"
    └─⟦this⟧ »S:DE/DEPOOL.SC« 
└─⟦5c22ed822⟧ Bits:30009675 Philips computer tape "600209"
    └─⟦this⟧ »DEN10/DEPOOL.SC« 
└─⟦79fbed147⟧ Bits:30009697 Philips computer tape "600414"
    └─⟦this⟧ »S:DE/DEPOOL.SC« 
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
    └─⟦this⟧ »DEN10/DEPOOL.SC« 
└─⟦d2a299635⟧ Bits:30009698 Philips computer tape "600415"
    └─⟦this⟧ »S:DE/DEPOOL.SC« 

PTS(SC)

	IDENT	DEPOOL	REL 10.0 80-04-11 
			80-03-26/DALI
	DDUM	DEDDIV
************************************************************
* THIS PROCEDURE HANDLES POOLING FUNCTIONS. THE CALLING    *
* SEQUENCE AND THE FORMAL PARAMETERS ARE DESCRIBED BELOW.  *
*                                                          *
*        PERF    DEPOOL,<FC>,<BUFF1>,<BUFF2>,<KEY>         *
*                                                          *
************************************************************
* 
* FOLLOWING DATA ITEMS ARE USED BY THE DEPOOL ROUTINES
* AND ORIGINATE CONTENTS OF THEM ARE LOST.
* 
*        <BUFF1>  ONLY WHEN <FC> = 1,2,5,7,9
*        <BUFF2>  ONLY WHEN <FC> = 5,7,9
*         BIN15 
*         BIN16 
*         DEBINW3 
*         DEBINW4 
*         POOL1 
*         STR1A 
*         STR64A
* 
************************************************************
 EJECT
************************************************************
* 
*        <FC> = 1  GET BUFFERS WITHOUT LOCK 
*                  THE RETURNED BUFFERS ARE FREE FOR USE
*                  BY ANY TASK FOR THE SAME PURPOSES. 
*                  THE COUNTER OF THE PASSED BUFFERCHAIN
*                  IS SET TO 1. 
*                  PASSED PARAMETERS: 
*        <BUFF1> = TOTAL NUMBER OF WANTED BUFFERS 
*        <BUFF2> = NUMBER OF WANTED CONSECUTIVE BUFFERS 
*                  RETURNED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE FIRST RESERVED BUFFER 
*                  IF NO BUFFERS = 0
* 
************************************************************
* 
*        <FC> = 2  GET BUFFERS WITH LOCK
*                  THE RETURNED BUFFERS ARE LOCKED AND
*                  RESERVED FOR USE ONLY BY THIS TASK 
*                  THE COUNTER OF THE PASSED BUFFERCHAIN
*                  IS SET TO 1. 
*                  PASSED PARAMETERS: 
*        <BUFF1> = TOTAL NUMBER OF WANTED BUFFERS 
*        <BUFF2> = NUMBER OF WANTED CONSECUTIVE BUFFERS 
*                  RETURNED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE FIRST RESERVED BUFFER 
*                  IF NO BUFFERS = 0
* 
************************************************************
 EJECT
************************************************************
* 
*        <FC> = 3  CHAIN BUFFERS
*                  THE RETURNED BUFFER IS ADDED TO THE
*                  BUFFERCHAIN IN POOL. 
*                  THE COUNTER OF THE ADDED BUFFERS 
*                  IS SET TO 1. 
*                  PASSED PARAMETERS: 
*        <BUFF1> = TOTAL NUMBER OF WANTED BUFFERS 
*        <BUFF2> = POOLINDEX TO THE  RESERVED BUFFER
*                  IN THE CHAIN AFTER WHICH THE NEW BUFFER(S) 
*                  WILL BE INSERTED.
*                  RETURNED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE ADDED BUFFER. 
*                  IF NO BUFFERS = 0
*        <BUFF2> = POOLINDEX TO THE FIRST RESERVED BUFFER 
*                  IN THE CHAIN 
* 
************************************************************
 EJECT
************************************************************
* 
*        <FC> = 4  SET BUFFERS
*                  THE NAME AND THE TYPE
*                  OF THE USER IS PUT INTO THE POOLELEMENT
*                  THE COUNTER OF THE PASSED BUFFERCHAIN
*                  WILL NOT BE INCREASED .
*                  PASSED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE FIRST RESERVED BUFFER 
*                  IN THE CHAIN 
*        <KEY> =   NAME. THE NAME IS STRG7 VARIABEL CONSISTING
*                        OF A STRG1 TYPE AND STRG6 NAME.
*                  RETURNED PARAMETERS: NONE
* 
************************************************************
 EJECT
************************************************************
* 
*        <FC> = 5  SEARCH BUFFER
*                  THE BUFFERPOOL IS SEARCHED FOR A POOL- 
*                  ELEMENT OF THE SAME NAME AND TYPE. 
*                  THE COUNTER OF THE PASSED BUFFERCHAIN
*                  IS INCREASED BY 1. 
*                  IF THE SEARCHED BUFFER IS FOUND LOCKED 
*                  THE COUNTER WILL NOT BE INCREASED
*                  PASSED PARAMETERS: 
*        <BUFF1>,<BUFF2> = USED FOR RETURNVALUES
*        <KEY> =   NAME. THE NAME IS STRG7 VARIABEL CONSISTING
*                        OF A STRG1 TYPE AND STRG6 NAME.
*                  RETURNED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE BUFFER THAT MATCHED THE 
*                  TYPE AND NAME. IF NOT FOUND = 0
*        <BUFF2> = RETURNCODE. 1 = FOUND FREE 
*                              2 = FOUND LOCKED 
*                              0 = NOT FOUND
* 
************************************************************
 EJECT
************************************************************
* 
*        <FC> = 6  RELEASE BUFFER 
*                  THE COUNTER OF USERS IS DECREASED BY 1.
*                  IF THE COUNTER AFTERWARDS IS 0, THE
*                  BUFFER IS PUT ON LRUQUE IF IT WAS FREE.
*                  IF IT WAS LOCKED IT BECOMES FREE 
*                  IMMEDIATLY AND IS NOT PUT ON THE 
*                  LRUQUE AT ALL. 
*                  PASSED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE FIRST RESERVED BUFFER 
*                  IN THE CHAIN 
*                  RETURNED PARAMETERS: 
*        <BUFF1> = SET TO 0 
* 
************************************************************
 EJECT
************************************************************
* 
*        <FC> = 7  SCAN BUFFER
*                  THE BUFFERPOOL IS SCANNED FOR A POOL-
*                  ELEMENT OF THE SAME NAME AND TYPE. 
*                  THE COUNTER OF THE PASSED BUFFERCHAIN
*                  WILL NOT BE INCREASED .
*                  PASSED PARAMETERS: 
*        <BUFF1>,<BUFF2> = USED FOR RETURNVALUES
*        <KEY> =   NAME. THE NAME IS STRG7 VARIABEL CONSISTING
*                        OF A STRG1 TYPE AND STRG6 NAME.
*                  RETURNED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE BUFFER THAT MATCHED THE 
*                  TYPE AND NAME. IF NOT FOUND = 0
*        <BUFF2> = RETURNCODE. 1 = FOUND FREE 
*                              2 = FOUND LOCKED 
*                              0 = NOT FOUND
* 
************************************************************
 EJECT
************************************************************
* 
*        <FC> = 8   LOCK BUFFERS
*                  THE RETURNED BUFFERS ARE LOCKED AND
*                  RESERVED FOR USE ONLY BY THIS TASK ONLY
*                  IF THE COUNTER OF THE PASSED BUFFERCHAIN 
*                  IS = 1.
*                  THE COUNTER OF THE PASSED BUFFERCHAIN
*                  WILL NOT BE INCREASED .
*                  PASSED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE FIRST RESERVED BUFFER 
*                  IN THE CHAIN 
* 
************************************************************
 EJECT
************************************************************
* 
*        <FC> = 9  SCAN BUFFER
*                  THE BUFFERPOOL IS SCANNED FOR A POOL-
*                  ELEMENTCONSISTING OF.
*                  THE COUNTER OF THE PASSED BUFFERCHAIN
*                  WILL NOT BE INCREASED .
*                  PASSED PARAMETERS: 
*        <BUFF1>,<BUFF2> = USED FOR RETURNVALUES
*        <KEY> =   NAME. THE NAME IS STRG7 VARIABEL CONSISTING
*                        OF A STRG1 TYPE AND STRG6 NAME.
*                  RETURNED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE BUFFER THAT MATCHED THE 
*                  TYPE AND NAME. IF NOT FOUND = 0
*        <BUFF2> = RETURNCODE. 1 = FOUND FREE 
*                              2 = FOUND LOCKED 
*                              0 = NOT FOUND
* 
************************************************************
 EJECT
************************************************************
* 
*        <FC> = 10  SET BUFFERS 
*                  THE NAME OF THE BATCHDATARECORD
*                  OF THE USER IS PUT INTO THE POOLELEMENT
*                  THE COUNTER OF THE PASSED BUFFERCHAIN
*                  WILL NOT BE INCREASED .
*                  PASSED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE FIRST RESERVED BUFFER 
*                  IN THE CHAIN 
*        <KEY> =   NAME. THE NAME IS STRG7 VARIABEL CONSISTING
*                        OF A STRG1 TYPE AND STRG6 NAME.
*                  RETURNED PARAMETERS: NONE
* 
************************************************************
* 
*        <FC> = 11  RELEASE BUFFER
*                   THE CHAINLINKS FOR THE BUFFERS
*                   ON DISK ARE CLEARED AND THE 
*                   BUFFERS MUST BE ENTERED AS NEW
*                   DISCSECTORS.
* 
*                  PASSED PARAMETERS: 
*        <BUFF1> = POOLINDEX TO THE FIRST RESERVED BUFFER 
*                  IN THE CHAIN 
* 
************************************************************
	PDIV 
	ENTRY	DEPOOL 
 EXT SETB 
 EXT TESTB
 EXT CLEARB 
	EXT	CMPIND 
 EXT GETIND 
	EJECT
DEPOOL	PROC	FC,BUFF1,BUFF2,KEY
 CLEAR POOL1
 IB FC		C 
		DEPO1		C
		DEPO1		C
		DEPO3		C
		DEPO4		C
		DEPO5		C
		DEPO6		C
		DEPO5		C
		DEPO8		C
		DEPO5		C
		DEPO4		C
		DEPO6	FC=11 
 EJECT
DEPO1 
 CBE BUFF2,W0,DEPO05 JUMP IF NO COSECUTIVE
			ARE REQUESTED
 SET POOL1
DEPO05
 MOVE BIN16,W0 COUNTER FOR CONSECUTIVES 
DEPO3 
 MOVE BIN15,W1 STARTINDEX IN POOL 
DEPO11
 MOVE STR64A,HEX00 DROP TEMPORARY RESERVED
DEPO12
 MOVE STR1A,RPOOL(BIN15) GET FILETYPE CODE
DEPO13
 CBE STR1A,=C'X',DEPO18 JUMP IF FREE BUFFER 
* 
* HANDLE OCCUPIED BUFFER
* 
DEPO14
 ADD BIN15,W1 INCREASE BUFFERINDEX
	CALL	CMPIND,BIN15,BPOOL(W1)
	BNOK	DEPO16	JUMP IF LAST BUFFER
DEPO15
 TBF POOL1,DEPO12 JUMP IF NOT CONSECUTIVE 
 ADD BUFF1,BIN16 ADJUST REQUESTED BUFFERS 
 MOVE BIN16,W0 SET NUMBER OF CONSECUTIVE=0
			REQUESTED
 B DEPO11 
DEPO16			LOOK IFTHERE ARE BUFFERS IN
 PERF DELRUF  LRUQUE THAT CAN BE MADE FREE
 BERR DEPON13 JUMP IF NO BUFFERS
 TBT POOL1,DEPO17 JUMP IF CONSEC REQ
 MOVE BIN15,W1 START FROM BEGINNING 
 B DEPO12 
DEPO17
 ADD BUFF1,BIN16 ADJUST REQUESTED BUFFERS 
 B DEPO05 
 EJECT
* 
* HANDLE FREE BUFFERS 
* 
DEPO18
 XCOPY STR1A,W0,W1,BIN15,W1 
 MOVE DEBINW3,W0
 MATCH STR64A,DEBINW3,W64,STR1A,DEBINW3,W1
 BOK DEPO14 
 TBF POOL1,DEPO19 JUMP IF NOT CONSECUTVE
 ADD BIN16,W1 REQUESTED 
 CBNE BUFF2,BIN16,DEPO19 JUMP IF NOT NUMBER OF
			REQUESTED CONSECUTVES REACHED
 CLEAR POOL1
DEPO19
 MOVE DEBINW3,W0 RESERV TEMPORARY 
 MATCH STR64A,DEBINW3,W64,HEX00,W0,W1 
 XCOPY STR64A,DEBINW3,W1,BIN15,W1 SAVE POOLINDEX
 SUB BUFF1,W1 DECREASE TOTAL REQUESTED
 BZ DEPO20 JUMP IF ENOUGH BUFFERS 
 ADD BIN15,W1 
 CALL CMPIND,BIN15,BPOOL(W1)
 BNOK DEPO16
 B DEPO12 CONTINUE
DEPO20
 MOVE BUFF1,BUFF2 
 PERF DEPORE,BUFF1,FC RESERV PERMANENT
 B DEPOOK 
 EJECT
DEPO4 
 MOVE DEBINW3,W0
 MOVE DEBINW4,W0
 XCOPY DEBINW3,W1,W1,RPOOL(BUFF1),W7 GET COUNTER
 CBNE DEBINW3,W1,DEP430 JUMP IF MORE THAN ONE USER
 XCOPY RPOOL(BUFF1),W1,W6,KEY,W1
 XCOPY DEBINW3,W1,W1,KEY,W0 
 CBNE FC,W10,DEPO41 JUMP IF NOT ACCUMULATORS
 XCOPY RPOOL(BUFF1),W11,W6,KEY,W7 
DEPO41
 XCOPY DEBINW4,W1,W1,RPOOL(BUFF1),W0
 CBE DEBINW4,W128,DEP420 LOCKED 
 CBNE DEBINW4,W0,DEP430 JUMP IF ALREADY FIXED 
DEP420
 ADD DEBINW3,DEBINW4
 XCOPY RPOOL(BUFF1),W0,W1,DEBINW3,W1
DEP430 MOVE STR1A,KEY 
 CBE STR1A,=C'F',DEP440 HANDLE FORMATS
 B DEPOOK 
DEP440			STORE THE RECORDLENGTH OF
 XCOPY RECLNTH,W0,W2,BPOOL(BUFF1),W4 THE DATARECORD 
 MOVE BIN15,W0 GET THE TOTAL NUMBER OF
 XCOPY BIN15,W1,W1,RPOOL(BUFF1),W17 FORMATRECORDS 
 MOVE BIN16,W0 GET THE NUMBER OF
 XCOPY BIN16,W1,W1,RPOOL(BUFF1),W18 DESCRIPTORRECORDS 
 MOVE DEBINW4,BUFF1 START OF CHAIN
 CBE BIN16,W0,DEP470 JUMP IF NO DESCRIPTOR
 SUB BIN15,BIN16 JUST FORMATRECORDS 
DEP450 MOVE DEBINW3,DEBINW4 
 XCOPY DEBINW4,W1,W1,RPOOL(DEBINW3),W8 GET LINK TO NEXT 
 TBT POOL1,DEP475 JUMP IF FORMATS 
DEP460 SUB BIN16,W1 
 BP DEP450
DEP470 SET POOL1 FORMATRECORD 
DEP475 ADD BIN16,W1 SET FLINK INDEX 
 MOVE FLIND(BIN16),DEBINW4
DEP480 SUB BIN15,W1 
 BNZ DEP450 JUMP IF MORE FORMATRECS.
 B DEPOOK 
 EJECT
DEPO5 
 MOVE BUFF2,W0
 MOVE DEBINW3,W1
 MOVE STR1A,KEY 
 CALL SETB,STR1A,W0 
DEPO51
 MOVE BIN15,W1
 MATCH RPOOL(DEBINW3),BIN15,W6,KEY,W1,W6
 BOK DEPO53 
DEPO52
 ADD DEBINW3,W1 
	CALL	CMPIND,DEBINW3,BPOOL(W1)
	BNOK	DEPON9	JUMP IF LAST INDEX 
	B	DEPO51 
DEPO53
 CBNE FC,W9,DEPO58 JUMP IF NOT ACCUMULATORS 
 MOVE BIN15,W11 
 MATCH RPOOL(DEBINW3),BIN15,W6,KEY,W7,W6
 BERR DEPO52
DEPO58
 MOVE BIN15,W0
 MATCH RPOOL(DEBINW3),BIN15,W1,KEY,W0,W1
 BERR DEPO54
 MOVE BUFF2,W1
 B DEPO55 
DEPO54
 MOVE BIN15,W0
 MATCH RPOOL(DEBINW3),BIN15,W1,STR1A,W0,W1
 BERR DEPO52
 MOVE BUFF2,W2
DEPO55
 CBNE STR1A,=X'D4',DEP565 
			JUMP IF NOT VALUESET 
 CBE ELMNO,W0,DEP565 JUMP IF NO 
			ELEMENT IS SEARCHED
 XCOPY BIN15,W1,W1,RPOOL(DEBINW3),W17 
 XCOPY BIN16,W1,W1,RPOOL(DEBINW3),W18 
 CBL ELMNO,BIN15,DEP560 
 CBNG ELMNO,BIN16,DEP565
DEP560
 MOVE BUFF2,W0
 B DEPO52 
DEP565
 MOVE BUFF1,DEBINW3 
 CBE BUFF2,W2,DEP570
 CBE FC,W5,DEPO59 JUMP IF SEARCH
DEP570
 B DEPOOK JUMP IF SCAN
DEPO59
 MOVE BIN15,DEBINW3 
 XCOPY DEBINW4,W1,W1,RPOOL(BIN15),W7 GET THE COUNTER
 TBT POOL1,DEPO56 JUMP IF START OF CHAIN
 SET POOL1 ALREADY HANDLED. 
 CBNE DEBINW4,W0,DEPO56 JUMP IF NOT = 0 
 XCOPY STR1A,W0,W1,BIN15,W1 
 CALL GETIND,LRUQUE,BIN16,DEBINW3 
 MOVE DEBINW3,W0
 MATCH LRUQUE,DEBINW3,BIN16,STR1A,W0,W1 LOOK FOR BUFFER 
 BNOK DEPO56
 DLETE LRUQUE,DEBINW3,W1 DELETE BUFFER
 SUB BIN16,W1 
 XCOPY LRUQUE,BIN16,W1,HEX00,W0 
DEPO56
 ADD DEBINW4,W1 
 XCOPY RPOOL(BIN15),W7,W1,DEBINW4,W1 STORE COUNTER
 XCOPY DEBINW3,W1,W1,RPOOL(BIN15),W8 GET LINK TO NEXT 
 CBE DEBINW3,W0,DEPOOK JUMP IF LAST BUFFER
 B DEPO59 
 EJECT
DEPO6 
 MOVE DEBINW4,W0
 MOVE BIN16,W0
 MOVE BIN15,BUFF1 GET START OF CHAIN
 CBE BUFF1,W0,DEP690
 CBE BUFF1,W1,DEPO6 MAKE AN IDLE-LOOP 
DEPO61
 CBNE FC,W11,DEP610 
 MOVE STR64A,HEX00
 B DEP660 
DEP610
 XCOPY DEBINW4,W1,W1,RPOOL(BIN15),W7 GET COUNTER
 SUB DEBINW4,W1 DECREASE COUNTER
 BG DEPO62
 MOVE STR1A,RPOOL(BIN15) GET TYPE 
 TBT POOL1,DEPO62 JUMP IF START OF CHAIN
 CBE STR1A,=C'F',DEP630 FORMAT
 CBE STR1A,=C'T',DEP630 VALUE-SET 
DEP620
 MOVE STR1A,=C'X' 
 COPY RPOOL(BIN15),W0,W1,STR1A,W0 
 B DEPO62 
DEP630
 CALL GETIND,LRUQUE,BIN16,DEBINW3 
 MOVE DEBINW3,W0
 MATCH LRUQUE,DEBINW3,BIN16,HEX00,W0,W1 LOOK FOR EMPTY PLACE
 BOK DEP640 
 CBE STR1A,=C'T',DEP620 VALUE-SET 
 MOVE STR1A,=C'X' 
 XCOPY BIN16,W1,W1,LRUQUE,W0
 COPY RPOOL(BIN16),W0,W1,STR1A,W0 
 DLETE LRUQUE,W0,W1 
 SUB DEBINW3,W1 
DEP640
 SET POOL1 ALREADY HANDLED. 
 XCOPY STR1A,W0,W1,BIN15,W1 
 INSRT LRUQUE,DEBINW3,W1,STR1A,W0 
DEPO62
 XCOPY RPOOL(BIN15),W7,W1,DEBINW4,W1 STORE COUNTER
DEP660
 XCOPY BIN16,W1,W1,RPOOL(BIN15),W8
 CBNE FC,W11,DEP680 
 COPY RPOOL(BIN15),W11,W4,STR64A,W0 
DEP680
 MOVE BIN15,BIN16 
 CBNE BIN15,W0,DEPO61 
 MOVE BUFF1,W0
DEP690
 B DEPOOK 
 EJECT
DEPO8 MOVE DEBINW4,W0 
 XCOPY DEBINW4,W1,W1,RPOOL(BUFF1),W7 GET COUNTER
 CBNE DEBINW4,W1,DEPON11 JUMP IF NOT ONE USER 
 XCOPY DEBINW4,W1,W1,RPOOL(BUFF1),W0
 CALL SETB,DEBINW4,W8 LOCK BUFFER 
 XCOPY RPOOL(BUFF1),W0,W1,DEBINW4,W1
 B DEPOOK 
 EJECT
* 
* BAD RESULT
* 
DEPON9 MOVE DEBINW4,W9
 B DEPONO 
DEPON11 MOVE DEBINW4,W11
	MOVE	STR6B,='FTJB'	FUNCTIONS 
	XCOPY	STR1A,W0,W1,KEY,W0	CHECK FUNC
	MOVE	BIN16,W0	POINTER:=0 
	MATCH	STR6B,BIN16,W4,STR1A,W0,W1 
	BNOK	DEPON20 
	MOVE	DEBINW4,W24 
	ADD	DEBINW4,BIN16
 B DEPON20
DEPON13 MOVE DEBINW4,W13
DEPONO
 MOVE BUFF1,W0
DEPON20 
 CMP W1,W2
 RET
* 
* BUFFERS FOUND 
* 
DEPOOK
 MOVE DEBINW4,W0
 CMP W1,W1
	RET
	PEND 
 EJECT
********************************************************* 
* THIS PROCEDURE FREE BUFFERELEMENTS IN THE LRUQUE. 
* THE CALLING SEQUENCE IS:
*        PERF  DELRUF 
* 
********************************************************* 
DELRUF PROC 
 MOVE DEBINW4,W0
 XCOPY DEBINW4,W1,W1,LRUQUE,W0 GET INDEX TO THE FIRST 
			BUFFER IN LRUQUE 
 CBNE DEBINW4,W0,DEL10 JUMP IF THERE ARE
			POOLINDEX IN LRUQUE
 CMP W1,W2
 RET
DEL10 
 MOVE DEBINW3,W0
 MOVE STR1A,=C'X' FREE-MARK 
DEL11 
 XCOPY RPOOL(DEBINW4),W0,W1,STR1A,W0
 XCOPY DEBINW3,W1,W1,RPOOL(DEBINW4),W8 GET LINK TO NEXT 
 CBE DEBINW3,W0,DEL12 JUMP IF LINK = 0
 XCOPY RPOOL(DEBINW4),W8,W1,W0,W1 SET LINK = 0
 MOVE DEBINW4,DEBINW3 CURRENT POOLINDEX 
 B DEL11
DEL12 
 DLETE LRUQUE,W0,W1 DELETE FREE BUFFERCHAIN 
 CALL GETIND,LRUQUE,DEBINW3,DEBINW4 
 SUB DEBINW3,W1 
 XCOPY LRUQUE,DEBINW3,W1,HEX00,W0 
 CMP W1,W1
 RET
 PEND 
 EJECT
****************************************************
* THIS PROCEDURE RESERV THE REQUESTED BUFFERS 
* PERMANENTLY WHEN ALL REQUESTED BUFFERS ARE FOUND
* THE CALLING SEQUENCE IS:
*        PERF  DEPORE,<WBIN>,<FC> 
* 
*             RETURNED PARAMETER: 
*        <WBIN> = POOLINDEX TO THE FIRST RESERVED 
*                 BUFFER IN RPOOL.
****************************************************
DEPORE PROC WBIN,FC 
 MOVE DEBINW3,W0
 MOVE DEBINW4,W0
 IB FC,DEO1,DEPO10,DEO3 
DEPO10
 MOVE STR1A,=X'80' BUFFER LOCKED
 B DEO1B
DEO1
 MOVE STR1A,HEX00 BUFFER WITHOUT LOCK 
DEO1B 
 MOVE WBIN,W0 
 XCOPY WBIN,W1,W1,STR64A,W0 GET FIRST BUFFER
 B DEO3B
DEO3
 MOVE STR1A,RPOOL(WBIN) 
 XCOPY BIN15,W1,W1,RPOOL(WBIN),W8 
 B DEO3C
DEO3B 
 MOVE RPOOL(WBIN),HEX00 
 XCOPY RPOOL(WBIN),W0,W1,STR1A,W0 LOCK/NOT LOCKED 
 XCOPY RPOOL(WBIN),W7,W1,W1,W1 SET COUNTER TO 1 
 ADD DEBINW3,W1 POINTER TO NEXT INDEX 
DEO3C 
 XCOPY DEBINW4,W1,W1,STR64A,DEBINW3 GET NEXT INDEX
 CBE DEBINW4,W0,DE04 JUMP IF NO MORE BUFFERS
 XCOPY RPOOL(WBIN),W8,W1,STR64A,DEBINW3 LINK TO NEXT
 MOVE WBIN,DEBINW4
 B DEO3B
DE04
 CBNE FC,W3,DEPO90 JUMP IF NOT CHAINING 
 CBE BIN15,W0,DEPO90
 XCOPY RPOOL(WBIN),W8,W1,BIN15,W1 
DEPO90
 XCOPY WBIN,W1,W1,STR64A,W0 RETURN FIRST BUFFERINDEX
 RET
 PEND 
	END
TRA /S
	EJECT
	END

Full view