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

⟦923355c5d⟧

    Length: 36462 (0x8e6e)
    Notes: pts_type(SC)
    Names: »SDMOCR.SC«

Derivation

└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
    └─⟦this⟧ »TOSSWORK/SDMOCR.SC« 
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
    └─⟦this⟧ »TOSSWORK/SDMOCR.SC« 

PTS(SC)

	IDENT SDMOCR 	REL 11.0 81-05-12 870105041100 

			=8,CONDITION FOR CR,DE,EX
			=8,REL 11.0 81-04-02 
			=7,NO DEL OF FILE WHEN NOT OP. EXC.
			=7,REL 11.0 81-03-24 
			=6,NO EXCLUSIVE ACCESS WHEN MXIND READ 
			=6,REL 11.0 81-03-16 
			=5,NO DEL OF FIL WHEN OPEN I/O EXCL. FAILS 
			=5,REL 11.0 81-03-16 
			=4,STATUS INF. NOT CORRECT 
			=4,REL 11.0 81-02-24 
			=3,FORMAT FIRST RECORD ALSO WHEN LRN=0 
			=3,REL 11.0 81-02-12 
			=2,FILE NBR IN WRONG REG. WHEN RFP 
			=2,REL 11.0 81-02-04 
			=1,CLOSE FORMAT CHANGED
			=1,REL 11.0 81-01-26 
****************************************************
* 
*   PHILIPS TERMINAL SYSTEM  PTS
* 
*   SDMOCR HANDLES OPEN CLOSE AND READ FILE PARAMETERS
*   IT IS ACTIVATED FROM SDMTSK 
* 
* 
* 
* 
* 
****************************************************
* 
	EJECT
* 
*************** 
*   ENTRIES   * 
*************** 
* 
* 
	ENTRY	SDMOPN,SDMCLO,SDMRFP 
	ENTRY	OPEFPB 
	EJECT
* 
***************** 
*   EXTERNALS   * 
***************** 
* 
	EXTRN	CLRBUF,CRNCDF,CRNCIF,CRNGET,CRNQUE 
	EXTRN	ECBRC
	EXTRN	FDBADF,FDBBLF,FDBCRL,FDBECB,FDBKA,FDBLRN 
	EXTRN	FDBMEC,FDBMIA,FDBNIF,FDBRLE,FDBSTA,FDBEXC
	EXTRN	FDBENL 
	EXTRN	FNDFDB 
	EXTRN	FWTFNR,FWTPAR,FWTVOL 
	EXTRN	MOV:SU,MOV:US
	EXTRN	MPYMOD,MXIND 
	EXTRN	DIVMOD 
	EXTRN	FDBDBR,FDBMRO,FDBDMI,FDBBLZ
	EXTRN	FDBOMD 
	EXTRN	ECBFC
	EXTRN	ECBBA
	EXTRN	ECBEL
	EXTRN	ECBRL
	EXTRN	DWTECB 
	EXTRN	DWTOR
	EXTRN	DWTTAB,DWTOPT
	EXTRN	FPB:RL,FPB:BF,FPB:FO,FPB:BO,FPB:FN 
	EXTRN	FPB:V1,FPB:S1,FPB:V2,FPB:MN,FPB:EL 
	EXTRN	FPB:FR,FPB:US,FPB:SH,FPB:KA
	EXTRN	CASZEN,COSZEN
	EXTRN	GTBKBU,FRMFIL,FMIOCR,FMIODL
	EJECT
	EXTRN	CRNSTA,DFTAB,DMTIDP
	EXTRN	SDMERX 
	EXTRN	MOVFW
	EXTRN	EARELB 
	EXTRN	TASHLT 
	EXTRN	FDBEAL 
	EXTRN	RECBFZ,REQERR
	EXTRN	MOVBW
	EXTRN	FMIOOP,FMIOCL,FMIORF,FMIOWR
	EXTRN	SDMOIE,SDMOOS
	EXTRN	CARRBL 
	EXTRN	SDMOOR,SDMOEE
	EXTRN	FDBRRO,FDBSNR
	EXTRN	FORMER 
	EXTRN	ADDMOD 
	EXTRN	SDMRLB,SDMTTD
	EXTRN	ORDFLP 
	EXTRN	ENLFAC 
	EJECT			SDMTSK 
************************* 
*   CONDITIONAL ASSEMBLY
**************************
* 
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	0
* 
* 
* 
*   A PROGRAM VERSION FOR INDEXED ACCESS HANDLING 
*   IS OBTAINED BY SETTING INDXAC = 1 
X:A	EQU	0 
INDXAC	EQU	X:A
* 
*	A VERSION LEAVING OUT OPEN MODES: 
*	OPEN OUTPUT,OPEN EXTEND AND DISCARD 
*	IS OBTAINED BY SETTING Y:C=0
* 
X:B	EQU	0		=8 
CRDEEX	EQU	X:B		=8
	EJECT
FPBSTA	EQU	0	START ADDR FPB 
FPB:IV	EQU	FPBSTA+58	VOL NAME INDEX 
FPB:IS	EQU	FPBSTA+64	INDEX SIZE 
FPB:NI	EQU	FPBSTA+68	NR OF INDEX
FPB:I1	EQU	FPBSTA+70	INDEX ID 1 
FPB:A1	EQU	FPBSTA+78	KEY ADDR 1 
FPB:L1	EQU	FPBSTA+80	KEY LENGTH 1 
FPB:I2	EQU	FPBSTA+82
FPB:L4	EQU	FPBSTA+116 
* 
FPB:FM	EQU	FPBSTA+6	TOSS FILE NR
* 
FPBSIZ	EQU	60	SIZE OF FPB AREA IN WORDS 
* 
FPBRES	EQU	8	RESERVED FIELD LENGTH IN FILE PAR BLOCK
* 
NOCORE	EQU	1	NO CORE ERROR CODE 
* 
ERPAR	EQU	4	WRONG PAR ERR CODE
* 
OFLW	EQU	3	OVERFLOW ERR CODE
* 
ERKEYL	EQU	8	LONG KEY ERR CODE
* 
ILLNAM	EQU	9	ILLEGAL NAME	=4
	EJECT
************************
*   DATA DEFINITIONS   *
************************
*   HERE FOLLOWS NON-REENTRANT AREAS USED BY ORDERS : 
*   OPEN,CLOSE,READ FILE PARAMETERS.
* 
OPESPA	DATA	'  '	2 SPACES 
OPEFN	EQU	*	FILE NAME PREFIXES
	DATA	'    '
	DATA	'I1M1'
	DATA	'I2M2'
	DATA	'I3M3'
	DATA	'I4M4'
OPEFNR	EQU	*	OPENED FILE NRS
	DATA	0,0,0 
OPEFCD	EQU	*	OPENED FILE CODES
	DATA	0,0,0 
OPEFWT	EQU	*	FWT ADDRESSES
	DATA	0,0,0,0,0 
OPEMXI	EQU	*	MASTER INDEX ADDRESSES 
	DATA	0,0,0,0,0 
OPELRN	DATA	0,0,0,0,0,0,0,0,0,0	LAST REC NRS
	EJECT
OPEKAD	DATA	0,0,0,0,0	KEY ADDRESSES 
OPEKYL	DATA	0,0,0,0,0	KEY LENGTH
DELAY	DATA	0
NROFIX	DATA	0	NR OF INDEX FILES 
INDVOL	RES	3	VOLUME NAME INDEX FILES
OPEFPB	RES	FPBSIZ	FILE ADM PARAM. BLOCK 
OPEEND	EQU	*-OPEFNR-2	NR OF BYTES 
	EJECT
********************************************* 
*   R E A D  F I L E  P A R A M E T E R S   * 
********************************************* 

SDMRFP	EQU	*	READ FILE PARAMETERS 
* 
*   A10,A11 = FDB ADDRESS ALL ORDERS
*   A7 = ORDER CODE ALL ORDERS
* 
	LDR	A10,A11	FBD ADDR 
	LC	A2,FDBNIF,A11	NR OF INDEX 
	ANK	A2,/FF 
	ST	A2,NROFIX 
*   STORE FILE NRS IN OPEFNR
* 
	LDK	A5,10	2 * INDEXES
RFP100	EQU	*
	SUK	A5,2 
	RF(N)	SDMO30	ALL FILES 
	LDR	A4,A11 
	ADR	A4,A5
	LD	A3,FDBADF,A4	FDB ADDR 
	RF(Z)	RFP130	NO FILE 
	LC	A2,FWTFNR,A3	FILE NR
RFP130	EQU	*
	LDR	A4,A5
	SRL	A4,1 
	SC	A2,OPEFNR,A4	SAVE FILE NR 
	RB	RFP100	NEXT FILE
	EJECT
*************** 
*   O P E N   * 
*************** 

SDMOPN	EQU	*	OPEN 
* 
*   A8 = ECB ADDR 
*   A9 = LOOP COUNTER 
*   A10,A11 = SYSTEM FDB ADDRESS
*   A12 = FPB ADDRESS 
* 
*   A9  = LOOP COUNTER FILES
* 
*         1 = DATA FILE 
*         2 = INDEX 1 
*         3 = MASTER INDEX 1
*         4 = INDEX 2 
*         ETC 
* 
	LDR	A10,A11	SYSTEM FWT ADDR
	EJECT
* 
*   CLEAR WORK AREA 
* 
	LDK	A2,OPEEND	NR OF BYTE TO CLEAR
SDMO10	EQU	*
	CM	OPEFNR,A2 
	SUK	A2,2 
	RB(NN)	SDMO10	NO MORE WORDS TO CLEAR 
* 
*   MOVE IN PARAMETER BLOCK 
* 
	LD	A1,DWTECB,A11	USER ECB ADDRESS
	LD	A1,ECBBA,A1	 FD ADDR USER 
	ADK	A1,FPBRES	RESERVED FIELDS
	LDR	A2,A12	FPB ADDR
	LDK	A3,FPB:L4+1	MAX SIGN LENGTH
	IFT	MMUPAG=1 
	LD	A4,DWTTAB,A11	USER TTAB ADDR
	CF	A14,MOV:US
	XIF
	IFT	MMUPAG=0 
	CF	A14,MOVFW 
	XIF
	IFT	INDXAC=1 
	EJECT
* 
*   SAVE VOLUME NAME INDEX FILES
* 
	LDR	A1,A12	FPB ADDR
	ADKL	A1,FPB:IV	FROM ADDR 
	LDKL	A2,INDVOL	TO ADDR 
	LDK	A3,6 
	CF	A14,MOVFW 
	XIF
	LC	A5,FPB:BO,A12	TOSS OPTIONS
	ANK	A5,2 
	SLL	A5,14
	ST	A5,DELAY
	IFT	INDXAC=1 
	LC	A5,FPB:FO,A12 
	ANK	A5,/FF 
	RF(Z)	SDMO30	STANDARD FILE 
	LC	A5,DWTOR+1,A11	ORDER CODE 
	SUKL	A5,SDMOEE 
	ABL(NN)	OERQER	OUTPUT SEQ.,RAND.,EXT. NOT ALLOWED
	LD	A5,DWTECB,A11	USER ECB ADDR 
	LD	A5,ECBRL,A5	REQ LGTH
	SUK	A5,FPB:NI+FPBRES 
	ABL(NP)	OERQER	INDEX NOT DEFINED 
	LC	A5,FPB:NI,A12	NR OF INDEXES 
	SC	A5,NROFIX+1 
	EJECT
* 
*   SAVE BASE ADDRESSES FOR INDEXES 
* 
	LDK	A2,FPB:A1
	ADR	A2,A12	ADDR FIRST KEY ADDR 
	ANK	A5,/F
	LDK	A3,2	OFFSET INDEX 1
SDMO20	EQU	*
	SUK	A5,1 
	RF(N)	SDMO30	ALL INDEXES 
	LDK	A1,0 
	LC	A1,-1,A2	NR OF KEY ITEMS
	SUK	A1,1 
	ABL(NZ)	OESWP4	ERR 
	LC	A1,2,A2	KEY LENGTH
	ST	A1,OPEKYL,A3
	LDR*	A1,A2	KEY OFFSET
	ST	A1,OPEKAD,A3
	ADK	A2,FPB:I2-FPB:I1 
	ADK	A3,2 
	RB	SDMO20
	XIF
SDMO30	EQU	*
	LDKL	A9,1	INDICATE DATA FILE 
	EJECT

************************************* 
*   F I L E   L O O P   E N T R Y   * 
************************************* 

* 
*	O P E N   O R    C R E A T E    F I L E    W I T H    F M 
* 
OPLENT	EQU	*
	ST	A12,ECBBA,A8	FPB ADDR 
	LC	A5,FPB:BO,A12 
	ANK	A5,1 
	SC	A5,FPB:BO,A12	ONLY BASIC ALLOWED
	LDK	A5,0 
	SC	A5,FPB:SH,A12	NOT EXCLUSIVE 
	CWK	A11,FDBSTA 
	RF(NE)	OPL130	READ FILE PAR ORDER
	IFT	CRDEEX=1		=8 
* 
*	IF   OPEN OUTPUT RANDOM  OR 
*	     OPEN OUTPUT SEQUENTIAL 
*	THEN CREATE FILE
* 
	LC	A5,DWTOR+1,A11
	SUKL	A5,SDMOOS 
	RF(N)	OPL120	NO CREATION OF FILE 
	EJECT
* 
*	C R E A T E   F I L E 
* 
	CF	A14,CASZEN	CALCULATE SIZES
* 
*	BUILD PART OF FPB SPECIAL FOR CREATE
* 
	LDK	A1,'S'	FILE TYPE 
	SC	A1,FPB:FO,A12 
	LDKL	A1,FPB:MN 
	ADR	A1,A12	POINTER IN FPB
	LDK	A2,11	NUMBER OF BYTES TO RESET 
	LDK	A3,0 
OPL110	EQU	*
	SCR	A3,A1	RESET BYTE 
	ADK	A1,1	UPDATE POINTER
	SUK	A2,1 
	RB(P)	OPL110	NEXT CHARACTER
	LDKL	A3,'  ' 
	STR	A3,A1	RETENTION PERIOD 
	SC	A3,2,A1 
	CF	A14,FMIOCR	CREATE FILE
	RF(NZ)	OERCA1	ERROR
	RF	OPL125
	XIF			=8 
	EJECT
* 
*	O P E N   F I L E 
* 
OPL120	EQU	*
	CF	A14,FMIOOP	OPEN 
	RF(NZ)	OERCA1	ERR
* 
*   SAVE FILE NR
* 
OPL125	EQU	*
	LDR	A1,A9	LOOP INDEX 
	SRL	A1,1 
	LDR*	A2,A8 
	SC	A2,OPEFNR,A1	OPENED FILE NRS
OPL130	EQU	*
* 
*   GET FWT ADDR IN A10 
* 
	ANK	A2,/FF 
	LDKL	A10,FDBSTA	SYST FDB ADDR
	LDR	A3,A2	FILE NR
OPL140	EQU	*
	RF(Z)	OPL150	END COUNT 
	LDR*	A10,A10	NEXT FDB
	ANKL	A10,/FFFE	USE BIT 
	SUK	A3,1 
	RB	OPL140
	EJECT
* 
*	R E A D   F I L E   P A R A M E T E R S 
* 
OPL150	EQU	*	FWT ADDR IN A11
	LDK	A6,0	DEFAULT ENLARGE FACTOR
	LC	A3,DWTOR+1,A11	INTERN ORDER CODE
	SUKL	A3,SDMOEE 
	RF(N)	OPL155	NO ENLARGE DECLARED 
	LD	A6,FPB:EL,A12	ENLARGE FACTOR
OPL155	EQU	*
	STR	A2,A8	FILE NR
	CF	A14,FMIORF	READ FILE PARAMETERS (A11=SYSFDB)
	ST	A6,FPB:EL,A12	SET ENLARGE FACTOR
	LD	A2,DWTECB,A11	USER ECB ADDRESS
	ORS	A1,ECBRC,A2	RET CODE 
	XRR	A10,A11
	XRR	A11,A10
	XRR	A10,A11
	EJECT
* 
*	A10 = SYSTEM FDB ADDRESS
*	A11 = CURRENT FDB ADDRESS 
* 
	IFT	INDXAC=1 
	CWK	A9,1 
	RF(NE)	OPL160	INDEX FILE 
	LD	A7,NROFIX	NR OF INDEXES 
	CWK	A7,4 
	RF(G)	OERQER	TOO MANY INDEXES
	SLL	A7,1 
	ADK	A7,2 
	LDR	A9,A7	NEW LOOPER 
	SUR	A13,A13	REL ADDR IN TABLES OF OPEN 
	RF	OPL170
OPL160	EQU	*
	LDR	A7,A9
	ANK	A7,/FE	REL ADDR
	LDR	A13,A7 
OPL170	EQU	*
	XIF
	IFT	INDXAC=0 
	SUR	A13,A13	IDICATE DATA FILE
	XIF
	CWK	A10,FDBSTA 
	ABL(NE)	OPSPLT	READ FILE PAR ORDER 
	LDR	A1,A1
	RF(NZ)	OERCOM
	EJECT

******************************************
*   C H E C K    O P E N E D   F I L E   *
******************************************

	LDK	A3,'S'	'S' 
	CC	A3,FPB:FO,A12 
	RF(NE)	OERQER	NOT STANDARD FILE
	LC	A3,FPB:US,A12	NR OF USERS 
	SUK	A3,1 
	RF(Z)	OPFRST	FIRST OPEN
	LC	A3,DWTOR+1,A10
	LD	A2,FDBEXC,A11	TTAB IF OPENED EXCLUSIVE
	RF(NZ)	OERQER	OPENED EXCLUSIVE BEFORE
	CC	A3,FDBOMD,A11 
	RF(NE)	OERQER	THIS OPEN NOT SAME AS OLD OPEN 
	LC	A3,FDBNIF,A11	NR OF INDEX BEFORE FOR THIS FILE
	CW	A3,NROFIX	NR OF INDEXES 
	RF(NE)	OESWP4	ALW SAME INDEXES 
	LD	A2,DELAY
	RF(N)	OPL180	2ND DELAY WANTED IN VAIN
	LDKL	A2,/7FFF
	ANS	A2,FDBDBR,A11	NO DELAY 
OPL180	EQU	*
	ABL	OPSPLT 
	EJECT

******************* 
*   E R R O R S   * 
******************* 

OERCA1	EQU	*		=4
	LDR	A6,A1	RETURN CODE	=4 
	ANKL	A6,/E10	MASK BITS 4,5,6 AND 11	=4 
	RF(Z)	OERCOM	NO STATUS TO SET	=4 
	SLL	A6,4	BIT 4	=4
	RF(N)	OESIN9	ILLEGAL NAME	=4 
	SLL	A6,1	BIT 5	=4
	RF(N)	OESNC1	NO CORE	=4
OESOF3	EQU	*		=4
	LDK	A6,OFLW	OVERFLOW	=4
	RF	OESCOM		=4
OESIN9	EQU	*		=4
	LDK	A6,ILLNAM	ILLEGAL NAME	=4
	RF	OESCOM		=4
OESNC1	EQU	*		=4
	LDK	A6,NOCORE	CORE EXHAUSTED	=4
	RF	OESCOM		=4
OESWP4	EQU	*		=4
	LDK	A6,ERPAR	WRONG PARAMETER	=4
	RF	OESCOM		=4
OESLK8	EQU	*		=4
	LDK	A6,ERKEYL	LONG KEY	=4
OESCOM	EQU	*		=4
	LDR	A11,A10	MAIN FDB ADDRESS	=4
	CF	A14,CRNGET	GET CURRENCY BUFFER	=4 
	SC	A6,CRNSTA,A2	SET STATUS	=4
	LDKL	A1,/8080	SET RETURN CODE	=4 
	RF	OERCOM		=4
OERQER	EQU	*		=4
	LDKL	A1,/8000	RC REQUEST ERROR	=4
OERCOM	EQU	*		=4
	LDR	A11,A10	MAIN FDB ADDRESS	=4
	LD	A9,DWTECB,A11	USER ECB ADDRESS	=4 
	ORS	A1,ECBRC,A9	SET RETURN CODE	=4 
	ABL	CLOCOM	CLOSE EVENTUALLY FILES	=4 
	EJECT

*************************** 
*   F I R S T   O P E N   * 
*************************** 

* 
*   CLEAR FDB 
* 
OPFRST	EQU	*
	LDKL	A2,FDBMEC 
	SUKL	A2,FDBECB	LENGTH
OPF100	EQU	*
	SUK	A2,2 
	RF(N)	OPF110	OK
	LDR	A7,A11 
	ADR	A7,A2
	CM	FDBECB,A7 
	RB	OPF100
	EJECT
* 
*   BUILD FWT FDB PART
* 
OPF110	EQU	*
	LD	A2,DELAY
	ST	A2,FDBDBR,A11	SET DELAY FOR NEW FILE
	LD	A3,FPB:RL,A12	
	ST	A3,FDBRLE,A11	RECORD LENGTH 
	LC	A3,FPB:BF,A12 
	SC	A3,FDBBLF,A11	BLOCK FACTOR
	LD	A3,NROFIX	NR OF INDEXES 
	SC	A3,FDBNIF,A11	NR OF INDEX FILES 
	LC	A3,FPB:FR+1,A12 
	SC	A3,FDBLRN,A11 
	LD	A3,FPB:FR+2,A12 
	ST	A3,FDBLRN+1,A11	LAST REC NR 
	CM	FDBSNR,A11
	LDK	A3,1 
	ST	A3,FDBSNR+2,A11	RESET SECTOR NUMBER 
	LD	A3,OPEMXI,A13 
	ST	A3,FDBMIA,A11	MASTER INDEX ADDR 
	RF(Z)	OPF120	NO MASTER INDEX 
	LD	A3,FPB:KA,A12 
	CW	A3,OPEKAD,A13 
	RB(NE)	OESWP4	WRONG KEY
	ST	A3,FDBKA,A11	KEY ADDR 
OPF120	EQU	*
	LC	A3,FPB:BO,A12 
	SLL	A3,8 
	ORS	A3,FDBDBR,A11	BASIC + OPTION 
	EJECT
* 
*   CALCULATE SDMTSK ID 
* 
	LC	A3,FWTVOL,A11	FIRST EXTENT VOLUME FC
	LDKL	A6,-1 
OPF140	EQU	*
	ADK	A6,1 
	CC	A3,DFTAB,A6 
	RB(NE)	OPF140	NOT THIS DISC
	LC	A3,DMTIDP,A6	REL DM TASK ID 
	SC	A3,FDBDMI,A11	MAIN SDMTSK ID
* 
*	CALCULATE MAX FDBRRO AND BLOCKSIZE IN SECTORS 
* 
	CF	A14,CARRBL
	RB(G)	OESWP4	TOO LARGE BLOCK SIZE
	ST	A1,FDBMRO,A11	MAX FDBRRO
	SC	A2,FDBBLZ,A11	BLOCK SIZE IN SECTORS 
	ST	A11,FDBADF,A11	 
	IFT	CRDEEX=1		=8 
* 
*	CALCULATE ENLARGE FACTOR
* 
	LDR	A4,A2	BLOCK SIZE IN SECTORS
	CF	A14,ENLFAC
	RB(O)	OESOF3	OVERFLOW
	ST	A3,FDBENL,A11	SAVE ENLARGE FACTOR 
	XIF			=8 
	EJECT
* 
*	SET OPEN MODE 
* 
	LDK	A1,0	DEFAULT VALUE 
	LD	A3,DWTOR,A10
	SC	A3,FDBOMD,A11	OPEN MODE 
	LDR	A2,A3
	SLL	A2,6 
	RF(NN)	OPF150	EXCLUSIVE ACCESS NOT WANTED
	LD	A1,DWTTAB,A10	TTAB ADDRESS
OPF150	EQU	*
	ST	A1,FDBEXC,A11	SET EXCLUSIVE ACCESS USER 
	IFT	CRDEEX=1		=8 
	ANK	A3,/FF 
	CWK	A3,SDMOOR
	RF(NE)	OPSPLT	NOT OUTPUT RANDOM,DON'T FORMAT 
* 
*	FORMAT FILE IF OPEN OUTPUT RANDOM 
* 
	CF	A14,GTBKBU	GET BLOCK BUFFER 
	LDR	A4,A5	BUFFER ADDRESS 
	CF	A14,FRMFIL	FORMAT FILE
	RB(NZ)	OERCOM	ERROR WHEN FORMATTING
	XIF			=8 
	EJECT

*********************************************************************** 
*   D A T A  ,  I N D E X   O R   M A S T E R   I N D E X   F I L E   * 
*********************************************************************** 

OPSPLT	EQU	*
	ST	A11,OPEFWT,A13	SAVE FWT ADDR
	IFT	INDXAC=1 
	LDR	A13,A13
	ABL(Z)	OPDATA	DATA FILE
	LDR	A3,A9
	ANK	A3,/1
	ABL(Z)	OPINDX	INDEX FILE 
	EJECT

******************************* 
*   M A S T E R   I N D E X   * 
******************************* 

OPMRIX	EQU	*
	CWK	A10,FDBSTA 
	ABL(NE)	OPCHEK	ORDER READ FILE PAR 
	LD*	A3,DWTECB,A10	FILE CODE
	ANK	A3,/FF 
	ST	A3,SDMTTD,A14	FC ENTRY IN TTAB SDMTSK 
	ST	A11,SDMTTD+2,A14
	STR	A3,A8
	LDK	A2,0 
	SC	A2,FDBDBR,A11	NO SPECIAL FUNCTIONS ALLOWED
	SC	A2,FDBBLZ+1,A11	NO COMMIT CHECK 
	LDK	A2,1 
	SC	A2,FDBDMI,A11	LET SDMTSK 1 READ MASTER INDEX
	EJECT
* 
*   CALC NO OF WORDS NEEDED IN MASTER INDEX 
* 
	LD	A6,FPB:RL,A12	REC LGTH
	LDR	A1,A6
	SUK	A1,3	KEY LENGTH
	CW	A1,OPEKYL,A13	REQUESTED 
	ABL(NE)	OESWP4	ERR 
	LD	A7,FPB:FR+2,A12	NO OF RECS
	CF	A14,MPYMOD	A1,A2=NO OF BYTES NEEDED 
	SRC	A1,1 
	ORR	A2,A1	GET MOST SIGN BIT
	ADK	A2,5 
	SRL	A2,1	NO OF WORDS NEEDED
	RF(Z)	OPM140	WRONG SIZE
	LD	A4,MXIND	LENGTH MXIND 
	SUK	A4,4	MAX A5 VALUE
	LDKL	A5,-2	OFFSET
OPM100	EQU	*
	ADK	A5,4	GET ENTRY 
	CWR	A5,A4
	RF(G)	OPM140	NO ENTRY FOUND
	LD	A3,MXIND,A5 
	RB(Z)	OPM100	ZERO ENTRY
	LD	A6,MXIND+2,A5 
	RB(N)	OPM100	ENTRY USED
	SUR	A6,A2	NO OF SPARE WORDS
	RB(N)	OPM100	LARGER ENTRY NEEDED 
	EJECT
* 
*   SUFFICIENT SPACE FOUND
* 
	LDKL	A1,/8000	USED BIT 
	ORS	A1,MXIND+2,A5	MARK ENTRY USED
	LDR	A7,A9
	ANK	A7,/0E 
	ST	A3,OPEMXI,A7	MASTER INDEX ADDR
	LD	A7,FPB:FR+2,A12 
	STR	A7,A3	NO OF ENTRIES
	LD	A1,FPB:RL,A12 
	ST	A1,2,A3	ENTRY LENGTH
	ADK	A3,4	SKIP MX HEADRER 
	ST	A3,ECBBA,A8	BUFFER ADDR 
	ST	A1,ECBRL,A8	REQ LGTH
	LDR	A1,A5	MXIND ENTRY PAR TO REACTIVATION
	CWR	A1,A4	MXIND ENTRY
	RF(NL)	OPM110	LAST ENTRY 
	LD	A3,MXIND+6,A1 
	RF(N)	OPM110	NEXT ENTRY USED 
	EJECT
* 
*   MOVE SPARE WORDS TO NEXT ENTRY
* 
	LD	A2,MXIND+2,A1 
	ANKL	A2,/7FFF	REMOVE USE BIT 
	SUR	A2,A6
	ORKL	A2,/8000	USE BIT
	ST	A2,MXIND+2,A1 
	ADS	A6,MXIND+6,A1	MAKE NEXT ENTRY LARGER 
	LD	A7,MXIND,A1	PREVIOUS POINTER
	SLL	A2,1	NO OF BYTES 
	ADR	A7,A2
	ST	A7,MXIND+4,A1 
	EJECT
* 
*	R E A D   M A S T E R   I N D E X 
* 
OPM110	EQU	*
* 
*	DATA MANAGEMENT REQUEST:
*	GET MASTER INDEX WITH READ SEQUENTIAL 
* 
	LD	A2,FDBEXC,A11	EXCLUSIVE TTAB	=6 
	CM	FDBEXC,A11	INDICATE NO EXCLUSIVE ACCESS	=6
	LDK	A7,/82	READ SEQUENTIAL 
	LKM
	DATA	1 
	ST	A2,FDBEXC,A11	EXCLUSIVE ACCESS CORRECT AGAIN	=6 
	LD	A2,ECBRC,A8 
	ANKL	A2,/FEFF	BIT 7 ONLY RETRIES 
	RF(Z)	OPM130	NO ERROR
* 
*   REMOVE THE ONLY CRN BUFFER
* 
	LD	A5,FDBCRL,A11	CRN BUF ADR 
	RF(Z)	OPM120	NO CRN
	CM	FDBCRL,A11
	INH
	LD	A6,CRNQUE 
	STR	A6,A5
	ST	A5,CRNQUE 
	ENB
OPM120	EQU	*
	LDR	A1,A2
	ANKL	A2,/1000	BIT 3 = EOF
	RF(NZ)	OPM150	READY ,WHOLIE MXINDEX IS READ
	ABL	OERCOM	ERR 
	EJECT
OPM130	EQU	*
* 
*   RECORD READ,READ NEXRT
* 
	LD	A2,ECBRL,A8 
	ADS	A2,ECBBA,A8	REC LENGTH 
	RB	OPM110	READ NEXT RECORD 
OPM140	EQU	*
	ABL	OESNC1	CORE EXHAUSTED	=4 
	EJECT
* 
*	C O M P L E T E   M A S T E R   I N D E X   F I L E   R E A D 
* 
*   CLOSE MASTER INDEX FILE 
* 
OPM150	EQU	*
	ST	A10,SDMTTD+2,A14	CLOSE FC ENTRY 
	CM	FPB:FR+2,A12	DO NOT WRITE LRN 
	LDR	A7,A9	LOOP COUNT 
	SRL	A7,1 
	LC	A7,OPEFNR,A7	FILE NR
	SC	A7,ECBFC,A8 
	ST	A12,ECBBA,A8	PAR BLOCK ADDR 
	CF	A14,CLRBUF	RELEASE ALL FREE BUFFERS 
	XRR	A10,A11
	XRR	A11,A10
	XRR	A10,A11
	CF	A14,FMIOCL	CLOSE (MAIN FDB ADDRESS) 
	XRR	A10,A11
	XRR	A11,A10
	XRR	A10,A11
	ADK	A1,0 
	ABL(NZ)	OERCOM 
	ABL	OPCHEK	NEXT FILE 
	EJECT

*************************** 
*   I N D E X   F I L E   * 
*************************** 

OPINDX	EQU	*	INDEX FILE 
* 
*   UPDATE PAR BLOCK
* 
	LD	A3,OPEFWT	DATA FILE FDB ADDR
	LC	A2,FDBNIF,A3	 
	CM	FPB:NI,A12	FILLER 
	SC	A2,FPB:NI,A12	NR OF INDEX 
	LDR	A3,A9
	SRL	A3,1 
	LDR	A2,A3
	LDR	A4,A12 
	LDK	A5,FPB:I2-FPB:I1 
	SUR	A4,A5
	EJECT
OPI100	EQU	*
	ADR	A4,A5	REL ADDR 
	SUK	A2,1	NEXT INDEX
	RB(NZ)	OPI100
	ECR	A3,A3
	ADK	A3,1	TYPE DUPL 
	ST	A3,FPB:I1,A4	ID AND TYPE
	CM	FPB:I1+2,A4 
	CM	FPB:I1+4,A4 
	LDK	A7,1 
	ST	A7,FPB:I1+6,A4	NR OF ITEMS
	LD	A7,FDBKA,A11	KEY OFFSET 
	ST	A7,FPB:A1,A4	KEY ADDR 
	LD	A7,FDBRLE,A11	REC LGTH
	SUK	A7,6 
	CM	FPB:L1,A4	FILLER
	SC	A7,FPB:L1,A4	KEY LENGTH 
	ADK	A7,8 
	SRL	A7,1	WORD
	CWK	A7,RECBFZ
	ABL(G)	OESLK8	LONG KEY 
	EJECT
* 
*   CALCULATE INDEX SIZE
* 
	LD	A1,FPB:S1,A12 
	LD	A2,FPB:S1+2,A12	SIZE IN SECTORS 
	LC	A6,FDBBLZ,A11	BLOCK SIZE
	ANK	A6,/FF 
	CF	A14,DIVMOD
	ABL(O)	OESOF3	LONG FILE
	CM	FPB:IS,A12
	ST	A2,FPB:IS+2,A12	SIZE IN BLOCKS
* 
*   GET INDEX VOLUME NAME 
* 
	LDKL	A1,FPB:V1 
	ADR	A1,A12	FROM ADDR 
	LDK	A2,FPB:IV
	ADR	A2,A12	TO
	LDK	A3,6	LGTH
	CF	A14,MOVFW	MOVE
	RF	OPCHEK
	XIF
	EJECT

************************* 
*   D A T A   F I L E   * 
************************* 

OPDATA	EQU	*	DATA FILE
* 
*   UPDATE USER PAR BLOCK 
* 
	LC	A2,FDBNIF,A11 
	ANK	A2,/FF 
	RF(Z)	OPD100	NO INDEX
	LDK	A2,1 
OPD100	EQU	*
	SC	A2,FPB:FO,A12	FILE ORG
	LDK	A2,1 
	SC	A2,FPB:FO+1,A12	DEVICE TYPE 
	LC	A2,OPEFNR	FILE NR 
	SC	A2,FPB:FM,A12 
	LD	A2,FDBDBR,A11 
	SRL	A2,14
	SC	A2,FPB:BO,A12	DELAY BASIC TOSS OPTIONS
* 
*	CONVERT SIZE TO NUMBER OF RECORDS AND 
*         ENLARGE FACTOR TO PERCENTAGE
* 
	CF	A14,COSZEN
	EJECT
* 
*   MOVE PART OF BLOCK TO USER
* 
	LDKL	A3,FPB:FR 
	SUKL	A3,FPB:RL	LENGTH
	LD	A4,DWTECB,A10	USER ECB ADDR 
	LD	A1,ECBRL,A4	REQ LENGTH
	SUK	A1,FPBRES	RESERVED 
	CWR	A3,A1
	RF(NG)	OPD120	TAKE SHORTEST
	LDR	A3,A1
OPD120	EQU	*
	LDR	A1,A3
	ADK	A1,FPBRES
	ST	A1,ECBEL,A4	SET EFFECTIVE LENGTH
	LDR	A1,A12	FROM ADDR 
	LD	A2,ECBBA,A4	TO ADDR 
	ADK	A2,FPBRES	RESERVED FIELD 
	IFT	MMUPAG=1 
	LD	A4,DWTTAB,A10	TTAB ADDR USER
	CF	A14,MOV:SU
	XIF
	IFT	MMUPAG=0 
	CF	A14,MOVFW	MOVE
	XIF
* 
*   ADJUST FILE NAME FOR INDEXES
* 
	LDR	A1,A12 
	ADKL	A1,FPB:FN	FROM ADDR 
	LDR	A2,A1
	ADK	A2,2	TO
	LDK	A3,6	NO OF CHAR
	CF	A14,MOVBW	MOVE
	EJECT

***************************************************************** 
*   C H E C K   I F   A L L   F I L E S   A R E   O P E N E D   * 
***************************************************************** 

OPCHEK	EQU	*	NEXT FILE
	IFT	INDXAC=1	INDEXES YES 
	SUKL	A9,1	FILE LOOP
	CWK	A9,1 
	RF(NG)	OPEND	ALL INDEXES ARE OPENED
	EJECT

******************************************* 
*   M O R E   F I L E S   T O   O P E N   * 
******************************************* 

	CWK	A10,FDBSTA 
	RF(NE)	OPN120	READ FILE PAR ORDER
OPNEXT	EQU	*
* 
*   SKIP MASTER INDEX AT SECONDARY OPEN 
* 
	LD	A1,OPEFWT	DATA FILE 
	LC	A1,FWTPAR,A1
	ANK	A1,/3E	NR OF OPEN BEYOND 1 
	RF(Z)	OPN100	FIRST 
	ANKL	A9,/E	NO MASTER INDEX 
OPN100	EQU	*
* 
*   NEXT FILE NAME
	LDR	A7,A9
	SLL	A7,1	WORD ADDR 
	LD	A1,OPEFN,A7	FIRST 2 CHAR IN FILE NAME 
	ST	A1,FPB:FN,A12	FILE NAME 
* 
*   FETCH VOLUME NAME FOR INDEXES 
* 
	LDKL	A1,INDVOL	FROM ADDR 
	LDR	A2,A12 
	ADKL	A2,FPB:V1	TO ADDR 
	LDK	A3,6 
	CF	A14,MOVFW	MOVE VOLUME NAME
	EJECT
* 
*   MOVE SPACES TO OTHER VOLUME NAMES 
* 
	LDK	A6,30	NR OF VOLUME NAMES * 10
OPN110	EQU	*
	SUK	A6,10
	RF(N)	OPN130	ALL 
	LDKL	A1,OPESPA	FROM ADDR 
	LDR	A2,A12 
	ADKL	A2,FPB:V2 
	ADR	A2,A6	TO ADDR
	LDK	A3,6	NR OF CHAR
	CF	A14,MOVFW 
	RB	OPN110
OPN120	EQU	*	GET FILE NR FOR READ FILE PAR
	LDR	A7,A9
	SRL	A7,1 
	LC	A2,OPEFNR,A7	GET FILE NUMBER	=2 
OPN130	EQU	*
	CM	DELAY	NO DELAY FOR INDEXES
	CM	NROFIX	NO INDEX FOR NEXT FILE 
	LDR	A11,A10	SYSTEM FDB ADDRESS 
	ABL	OPLENT 
	XIF
	EJECT

*********************************************** 
*   A L L   F I L E S   A R E   O P E N E D   * 
*********************************************** 

OPEND	EQU	*	FINISH
	LD	A11,OPEFWT	FDB ADDR DATA FILE 
	CWK	A10,FDBSTA 
	RF(NE)	OPE140	READ FILE PAR ORDER
* 
*   STORE FDB ADDRESSES IN ALL FDB'S
* 
	LDK	A5,10	NR OF FILES * 2
OPE100	EQU	*
	SUK	A5,2 
	RF(N)	OPE110	ALL FDB UPPDATED

	LD	A2,OPEFWT,A5	FDB ADDR INDEX 
	RB(Z)	OPE100	NO INDEX FILE 
	LDKL	A1,OPEFWT	FROM ADDR 
	ADKL	A2,FDBADF	TO ADDR 
	LDK	A3,10	NO OF BYTES
	CF	A14,MOVFW	MOVE 5 WORDS
	RB	OPE100
OPE110	EQU	*
* 
*   CONNECT FILE CODE OF DATA FILE
* 
	LD*	A2,DWTECB,A10	FILE CODE
	ANK	A2,/FF 
	SC	A2,OPEFCD	SAVE
	LDK	A5,0	TTAB AND CDTAB
	LD	A1,DWTTAB,A10	USER TTAB ADDR
	CF	A14,FNDFDB	A4=TTAB/SCTCDT ENTRY ADDRESS 
	ST	A11,2,A4	FWT ADDR 
	EJECT
* 
*   REMOVE CURRENCY BUFFER
* 
	XRR	A10,A11
	XRR	A11,A10
	XRR	A10,A11
	CF	A14,CRNGET	ADDR IN A2 
	XRR	A10,A11
	XRR	A11,A10
	XRR	A10,A11
	LDR	A3,A10 
	ADKL	A3,FDBCRL	ROOT
	INH
OPE120	EQU	*
	LDR	A1,A3
	LDR*	A3,A3	NEXT BUFFER 
	CWR	A3,A2
	RB(NE)	OPE120	NEXT BUFFER
	LDR*	A4,A3	NEXT
	STR	A4,A1
	LD	A3,CRNQUE 
	STR	A3,A2
	ST	A2,CRNQUE 
	ENB		
	EJECT
OPE140	EQU	*
* 
*   CHECK USER SIZE AND UPDATE PARAMETER BLOCK
* 
	LDK	A1,FPB:IV
	LC	A3,FDBNIF,A11	NR OF INDEX 
	ANK	A3,/F
	IFT	INDXAC=1 
	RF(Z)	OPE150 
	LDR	A4,A3
	SLL	A3,3 
	SLL	A4,2 
	ADR	A3,A4	MULT WITH 12 
	ADK	A3,FPB:I1
	SUR	A3,A1	MAX NR OF REM CHAR 
OPE150	EQU	*
	XIF
	ADR	A1,A12	FROM ADDR 
	LD	A6,DWTECB,A10	USER ECB
	LD	A2,ECBRL,A6	TOT LENGTH
	SUK	A2,FPB:IV+FPBRES 
	CWR	A3,A2	REM LGTH 
	RF(NG)	OPE160	TAKE SHORTEST
	LDR	A3,A2
	EJECT
OPE160	EQU	*
	LDR	A2,A3
	ADK	A2,FPB:IV+FPBRES 
	ST	A2,ECBEL,A6	SET EFFECTIVE LENGTH
	LD	A2,ECBBA,A6 
	ADK	A2,FPB:IV+FPBRES	TO ADDER
	IFT	MMUPAG=0 
	CF	A14,MOVFW	MOVE
	XIF
	IFT	MMUPAG=1 
	LD	A4,DWTTAB,A10	USER TTAB ADDR
	CF	A14,MOV:SU
	XIF
	EJECT
* 
****************
*   OPEN END   *
****************
* 
	LDR	A11,A10	MAIN FDB ADDRESS 
	LDK	A1,0	RET CODE
	ABL	SDMERX	TENDIO+EXIT IN SDMTSK 
	EJECT
***************** 
*   C L O S E   * 
***************** 

SDMCLO	EQU	*	CLOSE
* 
*  (A4= BLOCK BUFFER ADDRESS )
*  (A5 = BLOCK BUFFER DATA ADDRESS )
*   A11= FDB ADDRESS ALL ORDERS 
*   A7 = ORDER CODE ALL ORDERS
*  (A8 = FDBECB ADDRESS ) 
*  (A9 = USER ECB ADDRESS ) 
* 
	LD	A9,DWTECB,A11	USER ECB ADDRESS
	LD	A3,FDBDBR,A11 
	RF(NN)	SDMC10	NO DELAY 
	CF	A14,FMIOWR	WRITE
	ORS	A1,ECBRC,A9	SET RETURN CODE
SDMC10	EQU	*
	IFT	CRDEEX=1		=8 
	LC	A3,DWTOPT,A11 
	ANK	A3,2 
	RF(NZ)	SDMC20	CLOSE DISCARD
	EJECT
* 
*	CLOSE LOCK
* 
	LC	A3,FDBOMD,A11	OPEN MODE 
	CWK	A3,SDMOOR
	RF(E)	SDMC20	DON'T FORMAT,OUTPUT RANDOM
	CWK	A3,SDMOEE
	RF(L)	SDMC20	DON'T FORMAT,NOT EXTEND OR SEQ. 
* 
*	FORMAT FILE IF OPENED OUTPUT SEQUENTIAL OR EXTEND 
* 
	LDR	A4,A5	BLOCK BUFFER DATA ADDRESS
	LD	A3,FDBRRO,A11	RECORD OFFSET IN BLOCK	=1 
	LD	A1,FDBBLZ,A11 
	SLL	A1,8	BLOCK SIZE IN BYTES 
	LD	A5,FDBLRN+1,A11		=3 
	RF(NZ)	SDMC12	FILE NOT EMPTY	=3
	LC	A5,FDBLRN,A11		=3 
	ADK	A5,0	SET CR	=3 
	RF(Z)	SDMC16	FILE EMPTY	=3 
SDMC12	EQU	*		=3
	AD	A3,FDBRLE,A11	RECORD LENGTH	=1
	ADK	A3,1	OFFSET TO LRN + 1	=1
	SUR	A1,A3	LENGTH LEFT IN BUFFER	=1 
SDMC16	EQU	*		=3
	ADR	A3,A4	RECORD POINTER LRN+1	=1
	CF	A14,FORMER	BUILD FORMATTED BUFFER	=1
	CF	A14,FMIOWR	WRITE BLOCK BUFFER 
	LDR	A2,A1	RETURN CODE
	SLL	A2,2 
	RF(N)	SDMC20	END OF FILE 
	ORS	A1,ECBRC,A9	SET RETURN CODE
	LD	A1,FDBSNR,A11	SECTOR NUMBER 
	LD	A2,FDBSNR+2,A11 
	LDK	A6,0 
	LD	A7,FDBBLZ,A11	BLOCK SIZE IN SECTORS 
	CF	A14,ADDMOD	GET NEXT SECTOR
	ST	A1,FDBSNR,A11 
	ST	A2,FDBSNR+2,A11 
	CF	A14,FRMFIL	FORMAT REST OF FILE
	ORS	A1,ECBRC,A9	SET RETURN CODE
	RF	SDMC30
SDMC20	EQU	*
	XIF			=8 
	LD	A4,FDBEXC,A11	EXCLUSIVE ACCESS INDICATOR	=7 
	RF(NZ)	SDMC25	OPENED EXCLUSIVE	=7
	SC	A4,DWTOPT,A11	INDICATE CLOSE LOCK	=7
SDMC25	EQU	*		=7
	CF	A14,SDMRLB	RELEASE BLOCK BUFFER 
SDMC30	EQU	*
* 
*   CLEAR CURRENCY
* 
	CF	A14,CRNGET	GET CURRENCY BUFFER
	LDK	A1,0 
	SC	A1,CRNSTA,A2	STATUS 
	CM	CRNCDF,A2 
	CM	CRNCDF+2,A2 
	IFT	INDXAC=1 
	CM	CRNCIF,A2 
	CM	CRNCIF+2,A2 
	XIF
	EJECT
* 
*   BUILD CLOSE TABLES
* 
	LC	A7,ECBFC,A9	FILE CODE 
	LDK	A5,10	2 * FILES
SDMC40	EQU	*
	SUK	A5,2 
	RF(N)	SDMC60	ALL FILES 
	LDR	A4,A11 
	ADR	A4,A5
	LDK	A1,0 
	LDK	A2,0 
	LDK	A6,0 
	SUR	A9,A9
	SUR	A10,A10
	LD	A3,FDBADF,A4	FDB ADDR 
	RF(Z)	SDMC50	NO FILE 
	LD	A6,FDBMIA,A3	MASTER INDEX ADDR
	LC	A2,FWTFNR,A3	FILE NR
	LC	A9,FDBLRN,A3	LAST REC NR
	LD	A10,FDBLRN+1,A3 
SDMC50	EQU	*
	ST	A6,OPEMXI,A5
	ST	A3,OPEFWT,A5
	LDR	A4,A5
	SRL	A4,1 
	SC	A2,OPEFNR,A4	FILE NR
	SC	A1,OPEFCD,A4	FILE CODE
	SLL	A4,2 
	ST	A9,OPELRN,A4	LAST REC NR
	ST	A10,OPELRN+2,A4 
	RB	SDMC40	NEXT FILE
	EJECT
SDMC60	EQU	*
	SC	A7,OPEFCD	FILE CODE 
* 
*	A11=MAIN FDB ADDRESS
* 
CLOCOM	EQU	*	RECOVERY AT ERRORS 
	LC	A2,DWTOR+1,A11	ORDER CODE INTERNAL
	CWK	A2,ORDFLP
	ABL(E)	SDMERX	READ FILE PARAMETERS 
* 
*   FREE FILE CODES,MASTER INDEXES,FILES, CURRENCY
* 
	LDKL	A9,5
OPEE10	EQU	*
	SUKL	A9,1
	RF(NN)	OPEE20	MORE FILES 
	EJECT
* 
***************** 
*   CLOSE END   * 
***************** 
* 
	LDK	A1,0	RET CODE
	ABL	SDMERX 
	EJECT
* 
*   RESET FILE CODE*
* 
OPEE20	EQU	*
	LC	A2,OPEFCD,A9	FILE CODE
	ANK	A2,/FF 
	RF(Z)	OPEE25	NO CODE 
	LDK	A5,0	TTAB AND CDTAB
	LD	A1,DWTTAB,A11	USER TTAB ADDR
	CF	A14,FNDFDB
	LDR	A2,A2	RET CD 
	RF(Z)	OPEE25	NO ENTRY
	LDKL	A7,FDBSTA	SYSTEM FDB ADDRESS
	ST	A7,2,A4	SYSTEM FWT ADDR 
OPEE25	EQU	*
	EJECT
* 
*   RELEASE EA+CRN BUFFERS
* 
	LDR	A7,A9
	SLL	A7,1	WORDS 
	LDR	A13,A11	SAVE FDB ADDRESS 
	LD	A11,OPEFWT,A7	FDB ADDR
	RF(Z)	CLODEL	NO FDB
	LDKL	A1,/C000
	LDK	A3,0 
	CF	A14,EARELB	REL PROTECT BUFFERS
	ENB
	LC	A5,FWTPAR,A11	
	ANK	A5,/3F	NR OF USERS 
	SUK	A5,1 
	RF(NZ)	CLODEL	MORE THAN ONE OPEN 
	LD	A5,FDBEAL,A11	PRO LINK
	ABL(NZ)	TASHLT	DM ERR
	EJECT
* 
*   RELEASE CURRENCY BUFFERS
* 
	LDKL	A5,FDBCRL 
	ADR	A5,A11	LINK ROOT 
	LDR*	A4,A5 
	CMR	A5	CLEAR FDB 
	RF	RCRN20
RCRN10	EQU	*
	LDR	A4,A5	BUFFER ADDRESS 
RCRN20	EQU	*
	RF(Z)	RMIX10	ALL BUFFER S REMOVED
	LDR*	A5,A4	NEXT BUFFER ADDRESS 
* 
*   RETURN BUFFER TO POOL 
* 
	INH
	LD	A3,CRNQUE 
	STR	A3,A4
	ST	A4,CRNQUE 
	ENB
	RB	RCRN10
	EJECT
RMIX10	EQU	*
	IFT	INDXAC=1 
* 
*   RELEASE MASTER INDEX
* 
	LD	A1,OPEMXI,A7	MASTER INDEX ADDR
	RF(Z)	CLODEL	NO MX 
	LD	A5,MXIND	LENTH
	SUK	A5,2 
RMIX20	EQU	*
	SUK	A5,4 
	RF(Z)	RMIX30	FIRST INDEX 
	RF(N)	CLODEL	NO MASTER INDEX 
	CW	A1,MXIND+2,A5 
	RB(NE)	RMIX20
	LD	A4,MXIND,A5 
	RF(N)	RMIX30	PREVIOUS ENTRY USED 
	LD	A4,MXIND+4,A5	NO OF WORDS 
	ANKL	A4,/7FFF	REMOV USE BIT
	ADS	A4,MXIND,A5	NR OF WORDS
	EJECT
* 
*   MOVE UP REST OF MXIND 
* 
	LDKL	A1,MXIND+6
	ADR	A1,A5	FROM ADDR
	LDR	A2,A1
	SUK	A2,4	TO ADDR 
	LD	A3,MXIND
	SUR	A3,A5
	SUK	A3,2	NO OF CHAR
	CF	A14,MOVFW	MOVE
	RF	CLODEL
RMIX30	EQU	*
	LDKL	A4,/7FFF
	ANS	A4,MXIND+4,A5	REMOVE USE BIT 
	XIF
	EJECT
* 
*	CLOSE OR DELETE FILE
* 
CLODEL	EQU	*
	LDR	A7,A9
	SLL	A7,2	2 WORD INDEX
	LD	A1,OPELRN,A7	LAST REC NR
	ST	A1,FPB:FR,A12 
	LD	A1,OPELRN+2,A7
	ST	A1,FPB:FR+2,A12 
	LC	A7,OPEFNR,A9
	ANK	A7,/FF 
	RF(Z)	CLDL20	NO FILE OPENED
	ST	A7,ECBFC-1,A8	FILE NR 
	ST	A12,ECBBA,A8	PAR BLOCK ADDR 
	CF	A14,CLRBUF	CLEAR FREE BUFFERS 
	LDR	A11,A13	MAIN FDB ADDRESS 
	EJECT
	IFT	CRDEEX=1		=8 
	LC	A7,DWTOPT,A11 
	ANK	A7,/4F	TEST MASK	=5
	SUK	A7,2		=5 
	RF(Z)	DELETE	CLOSE DISCARD,OPEN OUT SEQ OR OPEN OUT RAN	=5 
	XIF			=8 
	CF	A14,FMIOCL	CLOSE
	IFT	CRDEEX=1		=8 
	RF	CLDL10
DELETE	EQU	*
	CF	A14,FMIODL	DELETE 
CLDL10	EQU	*
	XIF			=8 
	LD	A2,DWTECB,A11	USER ECB ADDRESS
	ORS	A1,ECBRC,A2	SEND CODE
CLDL20	EQU	*
	LDR	A11,A13	MAIN FDB ADDRESS 
	ABL	OPEE10	NEXT FILE 
	END

Full view