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

⟦c93eeef66⟧

    Length: 23908 (0x5d64)
    Notes: pts_type(SC)
    Names: »TIOSDM.SC«

Derivation

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

PTS(SC)

	IDENT TIOSDM 	REL 11.0 81-02-26 870105041100 

			=4,MOVE KEY WHEN DELETE,REWRITE DIRECT INDEXED 
			=4,REL 11.0 81-02-24 
			=3,SKIP BITS 1-4 IN ORDER WHEN WRITE,DELETE,REWRITE
			=3,REL 11.0 81-02-12 
			=2,CLOSE D. WILL BE CLOSE IF WR. OP MODE 
			=2,REL 11.0 81-02-05 
			=1, OPEN MODES ALLOWED WRONG ORDERS
			=1, REL 11.0 81-01-26
****************************************************
* 
*   PHILIPS TERMINAL SYSTEM  PTS
* 
*   TIOSDM  = STANDARD DATA MANAGEMENT ACTIVATION PART
* 
* 
* 
* 
* 
* 
****************************************************
* 
*   THIS MODULE IS ENTERED IN THE SAME WAY AS A DRIVER VIA TIO
*   AND THE DWTADR IN FDB FOR CURRENT FILE
* 
*   THE DM REQUEST IS PROCESSED HERE UP TO THE POINT WHERE A SECTOR 
*   FROM A DISC MUST BE ACCESSED
* 
*   ENTRY   TIOSDM      AND TIOSDM HOLDS THE START ADDRESS
* 
* 
*   INPUT   A11= FWT ADDRESS
*           A7 = ORDER WORD WITH W BIT = 0
*           A8 = ECB ADDRESS
* 
* 
	EJECT		TIOSDM
* 
*   IN ALL DM MODULES FDB WILL BE THE SAME AS FWT 
* 
*   THE FOLLOWING WORDS WILL BE SET IN THE FDB: 
*   FDBSNR   SECTOR NUMBER IN FILE
*   FDBRRO   RELATIVE RECORD OFFSET IN BLOCK
*   FDBTNR   TASK NUMBER FOR CALLING TASK 
*   FDBCEX   CURRENT EXTENT BLOCK POINTER 
* 
* 
*   IF AN ERROR CONDITION IS DETECTED THE ERROR RETURN WILL BE: 
*   LDKL   A1,/<RETURN CODE>
*   ABL    DISEND 
* 
* 
	EJECT
* 
**************
*   ENTRIES  *
**************
* 
	ENTRY	TIOSDM	REFERENCED IN DWTADR
* 
	ENTRY	SDMOIE,SDMIOP,SDMOEE 
	ENTRY	SDMOOS,SDMOOR,SDMLIM 
	ENTRY	SDMOEX,SDMOIP
	EJECT		TIOSDM
* 
******************
*   EXTERNALS    *
******************
* 
	EXTRN	FDBRRO 
	EXTRN	FDBRLE 
	EXTRN	FDBTNR 
	EXTRN	FDBLRN 
	EXTRN	FDBNIF,FDBKA,FDBADF
	EXTRN	FDBAI1,CRNCDF,CRNSTA 
	EXTRN	FDBKEY	SAVE AREA FOR KEY IN INDEXED ACCESS 
	EXTRN	FDBSTA 
	EXTRN	FDBOMD 
	EXTRN	PROERR,LGTERR,EDMERR 
	EXTRN	SCTTCT 
	EXTRN	RELPRO 
	EXTRN	ACTOT
	EXTRN	DISEND 
	EXTRN	DWTECB	ECB ADDRESS 
	EXTRN	DWTOR	DWT INDEX AND ORDER
	EXTRN	DWTTAB	DM TASK TTAB ADDRESS
	EXTRN	SDMTSK 
	EXTRN	CALSNO 
	EXTRN	ECBBA,ECBRL,ECBCW,ECBRC
	EXTRN	CRNGET,EATEST
	EXTRN	FWTFNR	FILE NR 
	EXTRN	FNDFDB	SDMTSK ROUTINE
	EXTRN	FPB:FR 
	EXTRN	FDBEXC,MOVUS 
	EXTRN	CRNCIF	INDEX CURRENCY OFFSET 
	EXTRN	DMACTI,DMACTD
	EXTRN	DISIOE 
	EXTRN	TTABD,TTABLN,TABEND
* 
	EJECT
* 
************************
* CONDITIONAL ASSEMBLY *
************************
* 
* 
*   A VERSION CONTAINING INDEXED REQUEST ORDERS IS OBTAINED 
*   BY SETTING INDXAC EQU 1 
*              INDXAC EQU 0 OTHRERWISE
X:A	EQU	0 
INDXAC	EQU	X:A
* 
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	0
* 
	EJECT
* 
*   ERROR CODES 
* 
*   MESSAGES
* 
* 
FCUSED	EQU	7	INVALID FILE CODE

RQERR	EQU	/8000 
	EJECT
* 
************************
*   DATA DEFINITIONS   *
************************
* 
*   BRANCH TABLE
* 
TIODMF	EQU	*
	IFT	INDXAC=1 
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
QCLDIS	EQU	*-TIODMF 
	DATA	CLOSED
	DATA	CLOSE 
	DATA	RDFIPA
SDMOEX	EQU	*-TIODMF 
	DATA	DISIOE	NOT USED 
* 
	EJECT		TIOSDM
* 
* 
QWRSQ0	EQU	*-TIODMF 
	DATA	WRSQ00
	DATA	DISIOE	NOT ALLOWED
	DATA	WRRN00
	DATA	WRRNIX
	DATA	RWCU00
	DATA	RWCUIX
	DATA	RWDI00
	DATA	RWDIIX
	DATA	DECU00
	DATA	DECUIX
	DATA	DEDI00
	DATA	DEDIIX
QRDSQ0	EQU	*-TIODMF 
	DATA	RDSQ00
	DATA	RDSQIX
	DATA	RDRN00
	DATA	RDRNIX
	DATA	STEQ00
	DATA	STEQIX
QSTG00	EQU	*-TIODMF 
	DATA	STGR00
QSTGIX	EQU	*-TIODMF 
	DATA	STGRIX
	DATA	STNL00
	DATA	STNLIX
* 
	XIF
	IFT	INDXAC=0 
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
	DATA	OPEN
QCLDIS	EQU	*-TIODMF 
	DATA	CLOSE 
	DATA	CLOSE 
	DATA	RDFIPA
SDMOEX	EQU	*-TIODMF 
	DATA	DISIOE	NOT USED 
* 
	EJECT		TIOSDM
* 
* 
QWRSQ0	EQU	*-TIODMF 
	DATA	WRSQ00
	DATA	DISIOE	NOT ALLOWED
	DATA	WRRN00
	DATA	DISIOE	NOT ALLOWED
	DATA	RWCU00
	DATA	DISIOE	NOT ALLOWED
	DATA	RWDI00
	DATA	DISIOE	NOT ALLOWED
	DATA	DECU00
	DATA	DISIOE	NOT ALLOWED
	DATA	DEDI00
	DATA	DISIOE	NOT ALLOWED
QRDSQ0	EQU	*-TIODMF 
	DATA	RDSQ00
	DATA	DISIOE	NOT ALLOWED
	DATA	RDRN00
	DATA	DISIOE	NOT ALLOWED
	DATA	STEQ00
	DATA	DISIOE	NOT ALLOWED
QSTG00	EQU	*-TIODMF 
	DATA	STGR00
	DATA	DISIOE	NOT ALLOWED
	DATA	STNL00
	DATA	DISIOE	NOT ALLOWED
	XIF
* 
	EJECT		TIOSDM
* 
**********
* OPEMOD *
**********
* 
*   TABLE OVER ALLOWED IO ORDERS VS OPENMODES 
* 
*	BIT	ORDER 
*	0	NOT USED	=1 
*	1	NOT USED	=1 
*	2	START NOT LESS	=1 
*	3	START GREATER	=1
*	4	START EQUAL	=1
*	5	READ RANDOM	=1
*	6	READ SEQUENTIAL	=1
*	7	DELETE DIRECT	=1
*	8	DELETE CURRENT	=1 
*	9	REWRITE DIRECT	=1 
*	10	REWRITE CURRENT	=1 
*	11	WRITE RANDOM	=1
*	12	WRITE SEQUENTIAL	=1
*	13	NOT USED		=2 
*	14	NOT USED		=2 
*	15	NOT USED		=2 
* 
OPEMOD	EQU	*
	DATA	/3E00	INPUT UNPROT.	=2
	DATA	/3E00	INPUT PROTECTED	=2
	DATA	/3E00	INPUT EXCLUSIVE	=2
	DATA	/3FF8	INPUT/OUTPUT PROT.	=2 
	DATA	/3FF8	INPUT/OUTPUT EXCL.	=2 
	DATA	/0008	EXTEND EXCLUSIVE	=2 
	DATA	/0008	OUTPUT SEQUENTIAL	=2
	DATA	/0018	OUTPUT RANDOM	=2
	EJECT		TIOSDM
* 
* 
**********
* ORDTA1 *
* ORDTA2 *
* ORDTA3 *
**********
* 
* 
* 
*   ORDTA1:   ADMINISTATION FUNCTION ORDERS (NO INDEX)
*   ORDTA2:   ORDER WITH SPECIAL INDEX HANDLING (FDBNIF CONTAIN INDEX)
*   ORDTA3:   ORDERS WITH INTERNAL INDEX IN ORDER WORD
* 
* 
	EJECT		TIOSDM
* 
* 
* 
ORDTA1	EQU	*
	DATA	/821	OPEN   INPUT  UNPROTECTED
SDMOIP	EQU	*-ORDTA1 
	DATA	/921	OPEN   INPUT  PROTECTED
SDMOIE	EQU	*-ORDTA1 
	DATA	/A21	OPEN   INPUT  EXCLUSIVE
SDMIOP	EQU	*-ORDTA1 
	DATA	/3921	OPEN   INPUT/OUTPUT  PROTECTED
	DATA	/3A21	OPEN   INPUT/OUTPUT  EXCLUSIVE
SDMOEE	EQU	*-ORDTA1 
	DATA	/5221	OPEN   EXTEND  EXCLUSIVE
SDMOOS	EQU	*-ORDTA1 
	DATA	/1221	OPEN   OUTPUT SEQUENTIAL  EXCLUSIVE 
SDMOOR	EQU	*-ORDTA1 
	DATA	/3221	OPEN   OUTPUT RANDOM      EXCLUSIVE 
SDMLIM	EQU	*-ORDTA1 
	DATA	/222	CLOSE   DISCARD
	DATA	/022	CLOSE  LOCK
	DATA	/3	READ FILE PARAMETERS 
ORDTL1	EQU	*-ORDTA1 
ORDTA2	EQU	*
	DATA	/006	WRITE  SEQUENTIAL
	DATA	/106	WRITE RANDOM 
	DATA	/407	REWRITE CURRENT
	DATA	/107	REWRITE DIRECT 
	DATA	/408	DELETE CURRENT 
	DATA	/108	DELETE DIRECT
ORDTL2	EQU	*-ORDTA2 
	EJECT
ORDTA3	EQU	*
	DATA	/002	READ SEQUENTIAL
	DATA	/102	READ RANDOM
	DATA	/00B	START EQUAL
	DATA	/10B	START GREATER
	DATA	/20B	START NOT LESS 
ORDTL3	EQU	*-ORDTA3 
ORDTEN	EQU	*
* 
* 
	EJECT		TIOSDM
* 
************
*   ENTRY 
************
* 
*   INPUT : A14 = STACK POINTER 
*           A8  = ECB ADDRESS 
*           A6  = FDB ADDRESS 
* 
TIOSDM	EQU	*
	LDR	A11,A6	FDB ADDRESS 
	LDKL	A2,/4000	ORDER CHECK BIT
	LDKL	A10,ORDTEN-2	CHECK ORDER AND OPTION 
	LDK	A3,ORDTL3-2
	LD	A7,DWTOR,A11	ORDER AND OPTION 
	LDR	A1,A7
	ANKL	A7,/7FF	NOT INDEX 
	CF	A14,CHKORD
	RF(N)	TIOS10	NOT IN TABLE
	SLL	A3,1 
	ADK	A3,QRDSQ0	ADJUST DISPLACEMENT
	SRL	A1,11
	RF(Z)	TIOS20	NO INDEX
	SUK	A1,4	MAX INDEX 
	RF(NP)	TIOS15	ALLOWED INDEX
REQERR	EQU	*
	LDR	A6,A11	FDB ADDRESS 
	ABL	DISIOE	REQUEST IO
* 
	EJECT		TIOSDM
* 
* 
* 
TIOS10	EQU	*
	LDK	A3,ORDTL2-2	TABLE LENGTH 
*	LDR	A7,A1		=3 
	CF	A14,CHKORD
	RF(N)	TIOS25	ORDER NOT IN TABLE
	SLL	A3,1 
	ADK	A3,QWRSQ0	ADJUST DISPLACEMENT
	LC	A1,FDBNIF,A11 
	ANK	A1,/FF 
	RF(Z)	TIOS20	NO INDEX
TIOS15	EQU	*
	ADK	A3,2	INDICATE INDEXED
TIOS20	EQU	*	CHECK ORDER  VS OPEN MODE
	LC	A1,FDBOMD,A11	GET OPEN MODE 
	ANK	A1,/7F 
	AN	A2,OPEMOD,A1
	RB(Z)	REQERR	ILLEGAL ORDER 
	RF	TIOS30
* 
TIOS25	EQU	*
	LDR	A7,A1	ORDER WITH ALL BITS	=3 
	LDK	A3,ORDTL1-2
	CF	A14,CHKORD
	RB(N)	REQERR	ORDER NOT FOUND 
* 
	EJECT		TIOSDM
* 
* 
TIOS30	EQU	*
	LDR	A10,A3 
	SC	A3,DWTOR+1,A11
	LD	A5,DWTTAB,A11	GET CALLING TASK TTAB ADDRESS 
	SUK	A3,QCLDIS	CLOSE DISCARD
	RF(N)	TIOS35	OPEN ORDER
	CWK	A11,FDBSTA 
	RB(E)	REQERR	NOT OPENED
	LD	A1,FDBEXC,A11	EXCLUSIVE ACCESS INDICATOR
	RF(Z)	TIOS35	NOT OPENED EXCLUSIVE
	CWR	A1,A5
	RB(NE)	REQERR	OTHER TASK EXCLUSIVE ACCESS
TIOS35	EQU	*
	LD	A1,SCTTCT 
	LDR*	A2,A1	TAB LENGTH
	ADR	A1,A2
	SRL	A2,1 
TIOS40	EQU	*
	SUK	A1,2 
	SUK	A2,1 
	RF(Z)	TIOS50	END OF SCTTCT 
	CWR*	A5,A1 
	RB(NE)	TIOS40	NOT THIS TASK
TIOS45	EQU	*
	SC	A2,FDBTNR,A11	USER TASK NUMBER
	RF	TIOS90
	EJECT
* 
*	SEARCH DM TASK
* 
TIOS50	EQU	*
	LDK	A2,/FF	DATA MANAGEMENT TASK
	LDKL	A1,TTABD	TTAB ADDRESS #D
TIOS55	EQU	*
	CWR	A5,A1
	RB(E)	TIOS45	CORRECT TASK
	ADKL	A1,TTABLN	NEXT TTAB 
	CWK	A1,TABEND
	RB(E)	REQERR	TASK NOT FOUND
	SUK	A2,1 
	RB	TIOS55
	EJECT		TIOSDM
* 
* 
TIOS90	EQU	*
	CF	A14,CRNGET	CURRENCY 
	INH
	LDR	A4,A2	CURRENCY BUFFER ADDRESS
	LDK	A2,0 
	SC	A2,CRNSTA,A4	RESET STATUS 
	LC	A2,CRNCDF+1,A4	GET CURRENCY 
	LD	A3,CRNCDF+2,A4
	LDKL	A9,/40	MAX KEY LENGTH 
	ABI	TIODMF,A10	BRANCH TO DM FUNCTION 
* 
*   A2,A3 = CURRENCY (CRNCDF) 
*   A4 = CURRENCY BUFFER ADDRESS
*   A5 = TTAB ADDRESS CALLING TASK
*   A11= FDB ADDRESS DATA FILE
*   A7 = USER ORDER WORD
*   A8 = USER ECB ADDRESS 
*   A9 = MAX KEY LENGTH = /40 
*   A10= DISPLACEMENT IN TIODMF TABLE 
* 
* 
	IFT	INDXAC=1 
* 
	EJECT
* 
**********
* RWDIIX *
* DEDIIX *
**********
* 
*   REWRITE DIRECT INDEXED,DELETE DIRECT INDEXED
* 
RWDIIX	EQU	*	REWRITE DIRECT INDEXED 
DEDIIX	EQU	*	DELETE DIRECT INDEXED
	LD	A7,FDBAI1,A11	PRIMARY INDEX FDB	=4
	CF	A14,SWHECO	SWITCH ECB AND ORDER CODE	=4 
	RF	IXR030	MOVE KEY	=4
	EJECT
* 
**********
* STEQIX *
* STGRIX *
* STNLIX *
* RDRNIX *
**********
* 
*   START INDEXED AND READ RANDOM INDEXED 
* 
STEQIX	EQU	*
STGRIX	EQU	*
STNLIX	EQU	*
	LD	A9,ECBRL,A8	KEY LENGTH
RDRNIX	EQU	*
	CF	A14,SWHFDB	SWITCH FDB 
IXR030	EQU	*		=4
	RB(Z)	REQERR	NO FDB
	LDR	A2,A7	INDEXED FDB ADDRESS
	ADKL	A2,FDBKEY	KEY AREA ADDRESS
	LDR	A4,A2
	LD	A1,FDBRLE,A7
	SUK	A1,6	KEY LENGTH
	LDR	A3,A1	KEY LENGTH 
IXR050	EQU	*
	CMR	A4	CLEAR KEY AREA
	ADK	A4,2 
	SUK	A1,2 
	RB(P)	IXR050	MORE TO CLEAR 
* 
	EJECT
* 
*   FETCH KEY TO INDEX FDB
* 
	LD	A1,ECBBA,A8	RECORD ADDR 
	AD	A1,FDBKA,A7	KEY ADDR
	CWR	A3,A9	KEY LENGTH = MIN(A9,RECLEN-6)
	RF(NG)	IXR070
	LDR	A3,A9
IXR070	EQU	*
	LDR	A6,A3	SAVE MIN LENGTH
	CF	A15,MOVUS	MOVE KEY
* 
	EJECT		TIOSDM
* 
*   INCREASE KEY IF 'START GREATER ' IS REQ 
* 
	CWK	A10,QSTGIX 
	RF(NE)	STA020	NOT START GREATER
STA010	EQU	*
	SUK	A2,1	ADDR LAST  BYTE 
	LCR	A1,A2
	ADK	A1,1	NEXT HIGHER KEY 
	SCR	A1,A2
	ANK	A1,/FF	OVERFLOW ?
	RF(NZ)	STA020	NO 
	SUK	A6,1 
	RB(P)	STA010	MORE BYTES
STA020	EQU	*
* 
*   SWITCH TO INDEX FDB 
* 
	LDR	A11,A7	INDEX FDB 
	RF	TIORRO
	EJECT
* 
* 
**********
* WRRNIX *
**********
* 
*   WRITE RANDOM INDEXED
* 
WRRNIX	EQU	*	IDEXED INSERT
	IFT	MMUPAG=1 
* 
*   MOVE KEYS TO FDB KEY AREAS
* 
	LDK	A4,8 
IXINS3	EQU	*
	LDR	A2,A11	FDB DATA
	ADR	A2,A4
	LD	A2,FDBADF,A2	FDB INDEX
	RF(Z)	IXINS4	NO INDEX
	LD	A1,FDBKA,A2	KEY ADDR
	LD	A3,FDBRLE,A2	RECORD LENGTH
	AD	A1,ECBBA,A8	ADD USER BUF ADDR 
	ADKL	A2,FDBKEY	KEY ADDRESS 
	SUK	A3,6	KEY LGTH
	CF	A15,MOVUS	MOVE KEY
IXINS4	EQU	*
	SUK	A4,2 
	RB(NZ)	IXINS3	MORE INDEXS
	XIF
* 
	EJECT		TIOSDM
* 
* 
**********
* WRSQ00 *
**********
* 
*   WRITE SEQUENTIAL
* 
WRSQ00	EQU	*
	LC	A2,FDBLRN,A11 
	ANK	A2,/FF 
	LD	A3,FDBLRN+1,A11	LRN 
	IFT	INDXAC=1 
	RF	IXR020	STORE LOG REC NO 
	EJECT
* 
**********
* RDSQIX *
**********
* 
*   READ SEQUENTIAL INDEXED 
* 
* 
RDSQIX	EQU	*
	CF	A14,SWHFDB	SWITCH FDB 
	ABL(Z)	REQERR	FDB NOT FOUND
	LDR	A11,A7	INDEXED FDB ADDRESS 
* 
*   GET CRN 
* 
	LDK	A2,0 
	LDK	A3,0 
* 
*   CHECK THAT FILE ID IS OK
* 
	LC	A7,FWTFNR,A11	FILE NR 
	CC	A7,CRNCIF,A4
	RF(NE)	IXR020	OTHER INDEX FILE IS CURRENT
	LC	A2,CRNCIF+1,A4
	LD	A3,CRNCIF+2,A4	LOG REC NO 
	XIF
IXR020	EQU	*
	CF	A14,ADDONE	A2,A3 = A2,A3 + 1
	RF	TIODMA	DO NOT CHECK EOF CONDITION 
	EJECT
* 
**********
* RDSQ00 *
**********
* 
*   READ SEQUENTIAL 
* 
RDSQ00	EQU	*
	CF	A14,ADDONE	A2,A3=A2,A3 + 1
	RF	RAN050
	EJECT
* 
**********
* RDRN00 *
**********
* 
*   READ RANDOM 
* 
RDRN00	EQU	*
	LD	A2,ECBCW,A8	REC NR
	LD	A3,ECBCW+2,A8 
RAN050	EQU	*
	LDKL	A1,LGTERR	INCORRECT LENGTH
	LD	A4,ECBRL,A8 
	RF(NP)	TIODME	ERROR RETURN IF RL <= 0
	RF	TIODMA
	EJECT
* 
* 
**********
* OPEN   *
**********
* 
*   OPEN
* 
OPEN	EQU	*
	CWK	A11,FDBSTA 
	RF(E)	OPE050	FILE CODE FREE
	LDKL	A1,EDMERR 
	LDK	A2,FCUSED	FC USED
	SC	A2,CRNSTA,A4	STATUS 
	RF	ENDIO 
OPE050	EQU	*
	LDKL	A1,LGTERR 
	LDKL	A4,FPB:FR+8	MIN LGTH
	CW	A4,ECBRL,A8	REQ 
	RF(G)	ENDIO	ERROR
	RF	TIORRO
* 
	EJECT		TIOSDM
* 
* 
**********
* RDFIPA *
**********
* 
*   READ FILE PARAMETR
* 
RDFIPA	EQU	*
	ST	A2,ECBCW,A8 
	ST	A3,ECBCW+2,A8 
TIORRO	EQU	*
	LDKL	A4,-1 
	ST	A4,FDBRRO,A11	MARK ORDER TYPE 
	RF	ACTDM0	ACTIVATE DN TASK #D
* 
	EJECT
* 
**********
* CLOSED *
**********
* 
* 
CLOSED	EQU	*
* 
*	TEST IF INDEX 
* 
*	LC	A1,FDBNIF,A11
*	ANK	A1,/F	NUMBER OF INDEX FILES 
*	ABL(NZ)	REQERR	INDEX NOT ALLOWED WHEN CLOSE DISCARD 
	LD	A1,FDBEXC,A11	TTAB EXCLUSIVE	=2 
	RF(NZ)	CLOSE	CLOSE DISCARD ALLOWED	=2
	LDKL	A1,RQERR	INDICATE REQUEST ERROR	=2
	ORS	A1,ECBRC,A8	SET RETURN CODE	=2 
	SC	A1,DWTOR,A11	CHANGE CLOSE D. TO CLOSE	=2
	EJECT
* 
**********
* CLOSE  *
**********
* 
* 
CLOSE	EQU	* 
* 
*   CONNECT FILE CODE TO SYSTEM FWT 
* 
	LDR	A1,A5	USER TTAB
	LDR*	A2,A8 
	ANK	A2,/FF	FILE CODE 
	LDK	A5,0	SEARCH TTAB AND CDTAB 
	CF	A14,FNDFDB	SEARCH 
	LDKL	A2,FDBSTA	SYSTEM FWT ADDR 
	ST	A2,2,A4	FC ENTRY
	LDK	A1,0 
	LC	A1,FDBLRN,A11 
	LD	A2,FDBLRN+1,A11	LAST RECORD NR
	RF(NZ)	CLO100
	LDR	A1,A1
	RF(NZ)	CLO100
	LDK	A2,1	LRN 
CLO100	EQU	*
	RF	TIODMD
	EJECT
* 
**********
* STEQ00 *
* STGR00 *
* STNL00 *
**********
* 
*   START EQUAL,GREATER AND NOT LESS
* 
STEQ00	EQU	*
STGR00	EQU	*
STNL00	EQU	*
	LD	A2,ECBCW,A8	REC NR
	LD	A3,ECBCW+2,A8 
	CWK	A10,QSTG00	START GREATER 
	RB(E)	IXR020	GET NEXT RECORD NUMBER
	EJECT
* 
**********
* RWCU00 *
* RWCUIX *
* DECU00 *
* DECUIX *
* WRRN00 *
* RWDI00 *
* DEDI00 *
* TIODMA *
**********
* 
*   REWRITE CURRENT,REWRITE CURRENT INDEXED 
*   DELETE CURRENT,DELETE CURRENT INDEXED 
*   WRITE RANDOM,REWRITE DIRECT 
*   DELETE DIRECT 
* 
RWCU00	EQU	*
RWCUIX	EQU	*
DECU00	EQU	*
DECUIX	EQU	*
TIODMA	EQU	*
	ST	A2,ECBCW,A8	REC NR
	ST	A3,ECBCW+2,A8 
WRRN00	EQU	*	WRITE RANDOM 
RWDI00	EQU	*	REWRITE DIRECT 
DEDI00	EQU	*	DELETE DIRECT
	LD	A1,ECBCW,A8	RECORD NUMBER 
	LD	A2,ECBCW+2,A8 
* 
	EJECT		TIOSDM
* 
*   NO EA FOR OTHER TASK
* 
	LDR	A9,A11	SAVE FDB ADDRESS
	LD	A11,FDBADF,A11
	CF	A14,EATEST
	LDR	A11,A9	SAVED FDB ADDRESS 
	ADK	A3,0 
	RF(N)	TIODPE	EA OTHER TASK 
TIODMD	EQU	*
	CF	A14,CALSNO	GET SECTOR NO AND OFFSET IN SECTOR 
	RF(NZ)	TIODME
* 
	EJECT
* 
************************* 
*   SDMTSK ACTIVATION   * 
************************* 
* 
* 
ACTDM0	EQU	*
	LDR	A6,A11	FDB ADDRESS 
	LDKL	A2,SDMTSK	ACTIVATION ADDRESS
	CWK	A10,QWRSQ0 
	ABL(L)	DMACTD	ADMINISTRATION FUNCTION
	ABL	DMACTI	ACTIVATE DM TASK
* 
	EJECT
* 
**********
* TIODPE *
* TIODME *
* ENDIO  *
**********
* 
*   ERROR :RETURN VIA DISEND
* 
TIODPE	EQU	*	PROTECT ERR EXIT 
	LC	A3,FDBTNR,A11	USER TASK ID
	ANK	A3,/FF 
	CF	A14,RELPRO	RELEASE PROTECT
	LDKL	A1,PROERR 
TIODME	EQU	*
	LD	A6,FDBADF,A11	DATA FILE FDB ADDR
ENDIOL	EQU	*
	ABL	DISEND	CALL TENDIO  GOTO DISPATCHER
ENDIO	EQU	* 
	LDR	A6,A11	FDB ADDRESS 
	RB	ENDIOL
* 
	EJECT		TIOSDM
* 
* 
**********
* CHKORD *
**********
* 
*   CHECK IF ORDER IN TABLE 
* 
*   INPUT : A10=ADDRESS TO ORDER TABLE END
*            A3=LENGTH
*            A7=ORDER/OPTION
* 
*   OUTPUT:  A2=ORDER BIT 
*            A3=ENTRY NUMBER IN TABLE 
*           A10=ADDRESS TO FIT OR IF NOT FIT
*               TABLE BEGINNING - 2 
*            CR=0 IF ORDER FOUND IN TABLE 
*            CR=2 ELSE
* 
CHKORD	EQU	*
	ADKL	A14,4 
CHKO10	EQU	*
	SRL	A2,1 
	CWR*	A7,A10
	RF(E)	CHKO20	ORDER IN TABLE
	SUKL	A10,2	NEXT ENTRY
	SUK	A3,2 
	RB(NN)	CHKO10	NEXT ENTRY IN TABLE
CHKO20	EQU	*
	ABR*	A14 
* 
* 
	EJECT		TIOSDM
* 
**********
* ADDONE *
**********
* 
*   DOUBLE ADD ONE ON REGISTERS A2,A3 
* 
ADDONE	EQU	*
	ADK	A3,1 
	RF(P)	ADDO10	NOT OVERFLOW OR NEGATIVE
	LDK	A3,0 
	ADK	A2,1	ADD CARRY 
ADDO10	EQU	*
	RTN	A14
* 
	EJECT		TIOSDM
* 
**********
* SWHFDB *
**********
* 
*   SWITCH FDB ADDRESS AND MOVE PARAMETERS
* 
*   INPUT  : A11=FDB ADDRESS
*   OUTPUT : A7=INDEX FDB ADDRESS 
*            A7=0 , IF NO INDEX FDB ADDRESS FOUND 
*            CR SET ACCORDING TO A7 
*            A3 IS USED 
* 
SWHFDB	EQU	*
	LD	A7,DWTOR,A11	GET INDEX
	SRL	A7,10
	SUK	A7,2 
	ADR	A7,A11	BASE IN DATA FDB
	LD	A7,FDBAI1,A7	INDEX FDB ADDR 
	RF(Z)	SWHF90	NOT FOUND 
SWHECO	EQU	*	SWITCH ECB AND ORDER	=4
	LD	A3,DWTECB,A11	MOVE PARAMETERS 
	ST	A3,DWTECB,A7
	LD	A3,DWTOR,A11
	ST	A3,DWTOR,A7 
SWHF90	EQU	*
	ADKL	A14,4 
	ADK	A7,0 
	ABR*	A14 
* 
	END

Full view