|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 23068 (0x5a1c)
Notes: pts_type(SC)
Names: »DEPOOL.SC«
└─⟦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«
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