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

⟦1e56a7e8b⟧

    Length: 30278 (0x7646)
    Notes: pts_type(SC)
    Names: »ADMTSK.SC«

Derivation

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

PTS(SC)

	IDENT ADMTSK 	REL 11.0 81-02-12 870105041100 

			=2, WRONG STATUS INFORMATION RETURNED
			REL 11.0 81-02-06
			=1, LOCAL FILE CODES NOT WORKING 
			REL 11.0 81-01-26
* 
* 
********************************************
* 
*    ADMTSK = ABRIDGED DATA MANAGEMENT TASKS
* 
********************************************
* 
* 
* 
	ENTRY	ADMTSK 
* 
	EJECT		ADMTSK
* 
******************* 
*                 * 
*   EXTERNALS     * 
*                 * 
******************* 
* 
* 
	EXTRN	PRUN	PROGRAM RUNNING 
	EXTRN	DWTECB	USER ECB ADDRESS
	EXTRN	DWTTAB	USER TTAB ADDRESS 
	EXTRN	DWTOR	ORDER AND OPTION 
	EXTRN	FWTFNR	FILE NUMBER 
	EXTRN	FWTPAR	NUMBER OF USERS 
	EXTRN	ECBRL	REQUESTED LENGTH 
	EXTRN	ECBBA	BUFFER ADDRESS 
	EXTRN	ECBCW1	1ST CONTROLL WORD 
	EXTRN	ECBCW2	2ND CONTROLL WORD 
	EXTRN	MOV:US	MOVE ROUTINE
	EXTRN	MOV:SU 
	EXTRN	DIVMOD	DIVIDE ROUTINE
	EXTRN	MPYMOD	MULTIPLY ROUTINE
	EXTRN	FPB:BF	BLOCKING FACTOR 
	EXTRN	FPB:EL	ENLARGE 
	EXTRN	FPB:FO	FILE ORGANISATION 
	EXTRN	FPB:S1	SIZE
	EXTRN	FPB:RP	RETENTION PERIOD
	EXTRN	ECBRC	RETURN CODE
	EXTRN	ECBEL	EFFECTIVE LENGTH 
	EXTRN	FPB:RL	RECORD LENGTH 
	EXTRN	FPB:FR	FILE RECORD NUMBER
	EXTRN	ADDMOD	DOUBLE ADD ROUTINE
	EXTRN	SCTFWT	ROOT OF FDB:S 
	EXTRN	FNDFDB	FIND FILE CODE ENTRY
* 
	EJECT		ADMTSK
* 
* 
	EXTRN	DMXACD	EXIT TASK AND ACTIVATE #D 
	EXTRN	DMACTD	ACTIVATE ADMINISTRATION ADM TASK
	EXTRN	DV3RST	REST AFTER DIV 3
	EXTRN	TENDIO 
	EXTRN	DMTTSB	STACK BASE DISPLACEMENT 
	EXTRN	FDBECB	ADM ECB 
	EXTRN	FDBOMD	OPEN MODE 
	EXTRN	FDBLRN	LAST RECORD NUMBER
	EXTRN	FDBRLE	RECORD LENGTH 
	EXTRN	FDBENL	ENLARGE 
	EXTRN	FDBEXC	EXCLUSIVE ACCESS INDICATOR
	EXTRN	FPB:NO	FILE NUMBER 
	EXTRN	FPB:DT	DEVICE TYPE 
	EXTRN	TTB:MT	USER MMU TABLE
	EXTRN	FPB:SH	SHAREABILITY
	EXTRN	MONMMU	MONITOR MMU TABLE 
	EXTRN	ENLFAC	CONVERT ENLARGE TO NO OF SECTORS
	EXTRN	CONENL	CONVERT ENLARGE TO PERCENTAGE 
	EXTRN	RTNA14	RETURN AND SET CR 
	EXTRN	SETCRO	RETURN AND SET CR OVERFLOW
* 
* 
* 
* 
**********
*   FORM *
**********
* 
* 
BYTE	FORM	8,8 
* 
* 
	EJECT		ADMTSK
* 
* 
**************************************
*                                    *
*   CONDITIONAL ASSEMBLY             *
*                                    *
**************************************
* 
* 
*   A VERSION LEAVING OUT OPEN MODES: 
*   OPEN OUTPUT,OPEN EXTEND AND CLOSE DISCARD 
*   IS OBTAINED BY SETTING X:A EQU 0
* 
* 
X:A	EQU	0 
CRDEEX	EQU	X:A
* 
* 
MMUPAG	EQU	0
* 
	EJECT		ADMTSK
* 
* 
********************
*                  *
*   CONSTANTS      *
*                  *
********************
* 
* 
********************
*                  *
*   RETURN STATUS  *
*                  *
********************
* 
RSTWFO	EQU	6	WRONG FUNCTION OPTION	=2 
RSTUKF	EQU	9	UNKNOWN FILE 
RSTOFL	EQU	3	OVERFLOW 
RSTWFP	EQU	4	WRONG FD PARAMETER 
* 
RC:NOD	EQU	/800	RETURN CODE NO DATA 
FPBLLE	EQU	88	LENGTH OF FPB L-FILE
FPBSLE	EQU	66	LENGTH OF FPB S-FILE
LFILEN	EQU	256	L-FILE RECORD LENGTH 
* 
	EJECT		ADMTSK
* 
* 
******************* 
*                 * 
*   TABLES        * 
*                 * 
******************* 
* 
* 
* 
	EJECT		ADMTSK
* 
* 
* 
**********
* EXEORD *
**********
* 
*   TABLE FOR ORDER LABELS
* 
* 
EXEORD	EQU	*
	DATA	OPENFI	OPENFI 
	DATA	OPENFI
	DATA	OPENFI
	DATA	OPENFI
	DATA	OPENFI
	IFT	CRDEEX=1 
EXEOOR	EQU	*-EXEORD	OPEN OUTPUT RANDOM
	DATA	OPENOR	OUTPUT RANDOM
	DATA	OPENEX	EXTEND 
	DATA	OPENOS	OUTPUT SEQUENTIAL
	DATA	CLODIS
	XIF
	DATA	CLOLCK
	DATA	REFIPA
	DATA	SEQWRI
	DATA	REWRIT
	DATA	DELETE
	DATA	RANWRI
	DATA	DIREAD
	IFT	CRDEEX=1 
EXEEXT	EQU	*-EXEORD	EXTEND DISPLACEMENT IN TABLE
	DATA	EXTEND
	XIF
* 
	EJECT		ADMTSK
* 
**********
* STAMAP *
**********
* 
*   STATUS BYTES
*   CHANGE SOME FM ERROR BITS TO STATUS INFORMATION 
*			BIT:
* 
* 
STAMAP	EQU	*
	BYTE	RSTWFO,0	1,2
	BYTE	0,RSTUKF	3,4
	BYTE	RSTOFL,RSTWFP	5,6 
	BYTE	0,0	7,8 
	BYTE	RSTWFO,0	9,10 
	BYTE	RSTOFL,0	11,12
* 
	EJECT		ADMTSK
* 
* 
**********
* FILORG *
**********
* 
*   TABLE OVER ALLOWED FILE ORGANIZATIONS 
* 
BUFFNU	EQU	*-/100	BUFFER INDICATING RECORD NOT USED 
FILORG	EQU	*
	DATA	/5300	S,0 
	DATA	'LX'
* 
ADMBUF	RES	40 
	EJECT		ADMTSK
* 
*         A1 = 0 , RETURN CODE
*         A4 = NUMBER OF SECTORS PER RECORD (NOT OPEN ORDER)
*   SET   A8 = ADM ECB ADDRESS
*         A9 = USER ECB ADDRESS 
*         A10= FILE DESCRIPTOR ADDRESS
*         A12= ADDRESS TO FILE PARAMETER BLOCK (ADMBUF) 
*         A11= FILE DESCRIPTOR ADDRESS
* 
* 
ADMTSK	EQU	*
	LD	A14,PRUN
	ADKL	A14,DMTTSB	STACK BASE 
	LDR	A10,A1	FDB ADDRESS 
	LD	A9,DWTECB,A10	USER ECB ADDRESS
	LDR	A8,A10 
	ADKL	A8,FDBECB	ADM ECB ADDRESS 
	LC	A1,FWTFNR,A1	FILE NUMBER
	ANK	A1,/FF 
	STR	A1,A8	FILL ADM ECB 
	LD	A4,FDBRLE,A10	REQUESTED LENGTH
	ADK	A4,1	IN CASE OF S FILE 
	ANKL	A4,/FF00
	ST	A4,ECBRL,A8	REQUESTED LENGTH
	CM	ECBRC,A8	RESET RETURN CODE
	LDR	A13,A8	GET ADDRESS TO ECBCW
	ADKL	A13,ECBCW1
* 
	EJECT		ADMTSK
* 
* 
	LD	A1,ECBCW1,A9	GET RECORD NUMBER
	LD	A2,ECBCW2,A9
	RF(P)	ADMT10	DOUBLE SUBTRACT ONE 
	LDKL	A2,/8000	CARRY BIT
	SUK	A1,1 
ADMT10	EQU	*
	SUK	A2,1 
	STR	A1,A13	FILL ADM ECBCW
	ST	A2,2,A13
	LDR	A11,A10	FDB ADDRESS
	SRL	A4,8	NUMBER OF SECTORS PER RECORD
	CF	A14,DBLMUL	CONVERT TO SECTOR ADDRESS
	IM	2,A13	DOUBLE ADD ONE
	RF(P)	ADMT20	NO CARRY
	CM	2,A13 
	IMR	A13
ADMT20	EQU	*
	LDKL	A12,ADMBUF	ADM BUFFER ADDRESS 
	LDK	A1,0	RESET RETURN CODE 
	LC	A3,DWTOR+1,A10	ORDER
	ANK	A3,/FF 
	ABI	EXEORD,A3	EXECUTE ORDER
* 
	EJECT		ADMTSK
* 
* 
**********
* DIREAD *
**********
* 
*   READ RECORD DIRECT
* 
* 
DIREAD	EQU	*
	LDK	A7,/91	PHYSICAL READ 
	CF	A14,ADM:BA	TO USER BUFFER 
	RF(NZ)	ADMEXI	ERROR
	LD	A2,FDBOMD,A10 
	RF(N)	DIR100	X OR L FILE 
	LD	A2,ECBBA,A9	BUFFER ADDRESS
	AD	A2,ECBRL,A8	END OF BUFFER 
	IFT	MMUPAG=0 
	LC	A1,-1,A2
	XIF
	IFT	MMUPAG=1 
	LD	A1,DWTTAB,A10	USER TTAB ADDRESS 
	TL	TTB:MT,A1	USER MMU TABLE
	EL	A1,-2,A2	STATUS 
	ANK	A1,/FF 
	TL	MONMMU	MONITOR MMU TABLE
	XIF
	SUK	A1,/FF	STATUS OF RECORD
	RF(Z)	DIR100	OK
	LDKL	A1,RC:NOD	RC: NO DATA 
	RF	ADMEX2	END IO 
DIR100	EQU	*
	LD	A1,FDBRLE,A10	RECORD LENGTH 
	ST	A1,ECBEL,A9 
	RF	ADMEXI	END IO 
* 
	IFT	CRDEEX=1 
	EJECT		ADMTSK
* 
* 
**********
* EXTEND *
**********
* 
*   EXTEND FILE AND CONTINUE SEQUENTIAL WRITE 
* 
* 
EXTEND	EQU	*
	CF	A14,ADMRFP	READ FILE PARAMETERS 
	LD	A1,FDBENL,A10	GET ENLARGE FACTOR
	ST	A1,FPB:EL,A12	FILL IN ENLARGE 
	LDKL	A7,/1A1	EXTEND
	CF	A14,ADM:AF	EXTEND 
	RF(NZ)	ADMEXI	ERROR
	LD	A3,FDBOMD,A11	OPEN MODE 
	ANK	A3,/7F 
	SUK	A3,EXEOOR
	RF(NZ)	SEQWRI	NOT OPENED OUTPUT RANDOM 
	CF	A14,FORFIL	FORMAT EXTENDED FILE 
	RF(NZ)	ADMEXI	ERROR
	XIF
	EJECT		ADMTSK
* 
* 
**********
* SEQWRI *
**********
* 
*   SEQUENTIAL WRITE
*   INPUT :  A4 = NUMBER OF SECTORS PER RECORD
* 
* 
SEQWRI	EQU	*
	CF	A14,GETLRN	GET LAST RECORD NUMBER 
	IM	ECBCW2,A8	DOUBLE ADD ONE TO ECBCW 
	RF(P)	SEQW05	NO OVERFLOW 
	IM	ECBCW1,A8	INCREMENT 
	CM	ECBCW2,A8 
SEQW05	EQU	*
	LC	A1,FDBLRN,A10	GET LRN 
	ANK	A1,/FF 
	LD	A2,FDBLRN+1,A10 
	ADK	A2,1	LRN+1 
	RF(P)	SEQW06	NOT OVERFLOW
	LDK	A2,0 
	ADK	A1,1 
SEQW06	EQU	*
	ST	A1,ECBCW1,A9	LRN TO USER ECB
	ST	A2,ECBCW2,A9
* 
	EJECT		ADMTSK
* 
* 
	CF	A14,ADMWRI	WRITE
	IFT	CRDEEX=0 
	RF(NZ)	ADMEXI	ERROR
	XIF
	IFT	CRDEEX=1 
	RF(Z)	SEQW10	WRITE OK
	SLL	A1,2 
	RF(NN)	ADMEXI	NOT END OF FILE
	LD	A2,FDBENL,A10	ENLARGE FACTOR
	RF(Z)	ADMEXI	NO ENLARGE FACTOR DECLARED
	LDK	A1,EXEEXT	EXTEND FILE
	SC	A1,DWTOR+1,A10
	LDKL	A8,ADMTSK	DISPATCH ADDRESS
	LDR	A6,A10	FPB ADDRESS 
	ABL	DMXACD	ACTIVATE #D AFTER EXIT
* 
	XIF
SEQW10	EQU	*
	LC	A1,ECBCW1+1,A9	UPDATE LRN 
	SC	A1,FDBLRN,A10 
	LD	A2,ECBCW2,A9
	ST	A2,FDBLRN+1,A10 
	RF	ADMEXI
* 
	EJECT		ADMTSK
* 
* 
**********
* REWRIT *
* RANWRI *
**********
* 
*   REWRITE RECORD
*   RANDOM WRITE
* 
* 
REWRIT	EQU	*
RANWRI	EQU	*
	CF	A14,ADMWRI	WRITE
	RF	ADMEXI	END IO 
* 
	EJECT		ADMTSK
* 
* 
**********
* DELETE *
**********
* 
*   DELETE RECORD 
* 
* 
DELETE	EQU	*
	SUK	A4,1	GET LAST SECTOR IN RECORD 
	ADS	A4,2,A13 
	RF(P)	DEL:10	NO CARRY
	IMR	A13
	LDK	A4,/FF 
	ANS	A4,2,A13	NOT BIT 0 
DEL:10	EQU	*
	CF	A14,ADMWFO	WRITE
	EJECT		ADMTSK
* 
* 
**********
* ADMEXI *
**********
* 
* 
*   EXIT ADM TASK 
* 
* 
ADMEXI	EQU	*
	LD	A1,ECBRC,A8	RETURN CODE 
	ANKL	A1,/4E50	BITS TO STATUS 
	RF(Z)	ADMEX2	NO BITS TO STATUS 
	SLN	A1,A6
	LC	A6,STAMAP,A6	STATUS INFORMATION 
	CF	A14,GETFDB	FILE CODE ENTRY	=1 
	SCR	A6,A4	SAVE STATUS
	LDKL	A1,/8080	REQUEST ERROR MORE INFORMATION	=2
	RF	ADMEX3
ADMEX2	EQU	*
	OR	A1,ECBRC,A8	GET TOTAL RC
ADMEX3	EQU	*
	LDR	A6,A10	FDB ADDRESS FOR TENDIO
	INH
	CF	A15,TENDIO	PERFORM TENDIO 
	ENB
	LKM		EXIT
	DATA	3 
* 
	IFT	CRDEEX=1 
	EJECT
* 
* 
**********
* OPENOR *
**********
* 
*   OPEN OUTPUT RANDOM
* 
OPENOR	EQU	*
	CF	A14,CREFIL	CREATE FILE
	RF(NZ)	CLODIS	DELETE FILE
	CF	A14,FORFIL	FORMAT FILE
	RF(NZ)	CLODIS	DELETE FILE
	RF	EXIOPE	EXIT TASK
* 
	EJECT		ADMTSK
* 
* 
**********
* OPENEX *
**********
* 
* 
*   OPEN EXTEND 
* 
* 
OPENEX	EQU	*
	CF	A14,OPFILE
	RF(NZ)	CLO450	CLOSE IF OPENED
	CF	A14,ENLFAC
	RF(O)	CLO450	CLOSE 
	ST	A3,FDBENL,A11	ENLARGE 
	RF	EXIOPE	EXIT 
* 
	XIF
	EJECT		ADMTSK
* 
* 
**********
* OPENFI *
**********
* 
*   OPEN EXISTING FILE
* 
* 
OPENFI	EQU	*
	CF	A14,OPFILE	OPEN FILE
	RF(NZ)	CLO450	ERROR:CLOSE FILE 
EXIOPE	EQU	*
	CF	A14,CONPAR	CONVERT PARAMETERS 
	CF	A14,GETFDB	FILE CODE ENTRY	=1 
	ST	A11,2,A4	CONNECT FILE CODE TO FDB 
	RB	ADMEXI
* 
	IFT	CRDEEX=1 
	EJECT		ADMTSK
* 
* 
**********
* OPENOS *
**********
* 
*   OPEN OUTPUT SEQUENTIAL
* 
* 
OPENOS	EQU	*
	CF	A14,CREFIL	CREATE FILE
	RB(Z)	EXIOPE	NO ERROR
* 
	XIF
	EJECT		ADMTSK
* 
* 
**********
* CLODIS *
* CLOLCK *
**********
* 
*   CLOSE DISCARD 
*   CLOSE LOCK
* 
* 
	IFT	CRDEEX=1 
CLODIS	EQU	*
	LDKL	A7,/2A2	DELETE FILE 
	RF	CLO500
* 
* 
	XIF
CLOLCK	EQU	*
	IFT	CRDEEX=1 
	LC	A3,FDBOMD,A11	OPEN MODE 
	ANK	A3,/7F 
	SUK	A3,EXEOOR
	RF(NP)	CLO400	OPENED OUTPUT SEQ OR EXTEND
	CF	A14,FORFIL	FORMAT REST OF FILE
	XIF
* 
	EJECT		ADMTSK
* 
* 
CLO400	EQU	*	CLOSE FILE 
	LC	A2,FDBLRN,A11	LAST RECORD NUMBER TO FPB 
	ANK	A2,/FF 
	ST	A2,FPB:FR,A12 
	LD	A2,FDBLRN+1,A11 
	ST	A2,FPB:FR+2,A12 
CLO450	EQU	*	CLOSE WITHOUT SETTING LRN
	LDK	A7,/A2	CLOSE FILE
CLO500	EQU	*
	LDR	A3,A1	SAVE RETURN CODE 
	LDR	A11,A11
	RB(Z)	ADMEXI	FILE NOT OPENED 
	CF	A14,ADM:AF	CLOSE FILE 
	ORS	A3,ECBRC,A8	UPDATE RETURN CODE 
	RB	ADMEXI
* 
	EJECT		ADMTSK
* 
* 
**********
* REFIPA *
**********
* 
*   READ FILE PARAMETERS
* 
REFIPA	EQU	*
	CF	A14,ADMRFP	READ FILE PARAMETERS 
	RB(NZ)	ADMEXI	READ ERROR 
	CF	A14,CONPAR
	ST	A5,ECBEL,A9	FPB LENGTH
	CM	ECBCW1,A9	SET CRN 
	CM	ECBCW2,A9 
	RB	ADMEXI	EXIT 
* 
	EJECT
* 
* 
******************* 
*                 * 
*   SUBROUTINES   * 
*                 * 
******************* 
* 
**********
* GETFDB *
**********
* 
*   GET FILE CODE ENTRY IN USER TTAB OR CDTAB 
* 
GETFDB	EQU	*
	LD	A1,DWTTAB,A10	TTAB ADDRESS OF USER	=1 
	LDR*	A2,A9	FILE CODE	=1
	ANK	A2,/FF		=1 
	LDK	A5,0	SEARCH BOTH TABLES	=1 
	CF	A14,FNDFDB		=1
	RTN	A14		=1
* 
	EJECT		ADMTSK
* 
**********
* GETFPB *
**********
* 
*   GET FILE PARAMETER BLOCK TO ADM BUFFER
* 
*   INPUT : A9 = USER ECB ADDRESS 
*           A10= FDB ADDRESS
*           A12= FPB ADDRESS
*   OUTPUT: A5=TTAB ADDRESS USER TASK 
*             A4=NUMBER OF SECTORS PER RECORD 
*            A1,A2,A3 ARE USED
* 
GETFPB	EQU	*
	LD	A4,DWTTAB,A10	GET USER TTAB ADDRESS 
	LD	A1,ECBBA,A9	FPB ADDRESS 
	LDR	A2,A12	ADM BUFFER ADDRESS
	LDK	A3,FPBLLE-8	LENGTH OF FPB
	ADK	A1,8	NOT FIRST PART
	CF	A14,MOV:US	FILE DESCRIPTOR TO WORK AREA 
	LC	A3,FPB:FO,A12	CONVERT FILE ORGANISATION TO ASCII
	LC	A1,FILORG,A3
	SC	A1,FPB:FO,A12	ASCII 
* 
	EJECT		ADMTSK
* 
* 
	ANK	A3,/FF 
	RF(NZ)	GETF20	L- OR X-FILE 
	LDK	A1,FPBLLE-FPBSLE	REST OF FPB 
	ADK	A2,FPBLLE-8	END OF BUFFER
GETF10	EQU	*	CLEAR REST OF FPB
	SUK	A2,2	ADDRESS 
	CMR	A2 
	SUK	A1,2 
	RB(P)	GETF10	NEXT WORD 
	LDKL	A2,'00'	ZEROIZE RETENTION PERIOD
	ST	A2,FPB:RP,A12 
	SC	A2,FPB:RP+2,A12 
GETF20	EQU	*
	LDK	A4,0	SHAREABILITY = 0
	SC	A4,FPB:SH,A12 
	LD	A4,FPB:RL,A12	RECORD LENGTH 
	ADK	A4,1	IN CASE OF S-FILE 
	SRL	A4,8	NUMBER OF SECTORS PER RECORD
	SUK	A3,2	FILE ORGANIZATION 
	RF(NZ)	GETF30	NOT L-FILE 
	CM	FPB:RL,A12	RL=0 
GETF30	EQU	*
	RTN	A14
* 
	EJECT		ADMTSK
* 
* 
**********
* CONPAR *
**********
* 
* 
*   CONVERT PARAMETERS IN FILE PARAMETER BLOCK
* 
*   INPUT : A12 = FPB ADDRESS 
*           A10 = FDB ADDRESS 
*           A11=FDB ADDRESS OPENED FILE 
*   OUTPUT:  A5 = FPB LENGTH
*             A4 IS USED
*             A1,A2,A3,A6,A7,A13 ARE USED 
* 
CONPAR	EQU	*
	LDK	A2,FPBSLE	FPB LENGTH OF S-FILE 
	LC	A1,FPB:FO,A12	FILE ORGANIZATION 
	SUK	A1,'S'	CONVERT TO NUMBER 
	RF(Z)	CON100 
	LDK	A2,FPBLLE	FPB LENGTH OF L-OR X-FILE
	LDK	A1,2	L-FILE
	RF(L)	CON100 
	LDK	A1,3	X-FILE
CON100	EQU	*
* 
	EJECT		ADMTSK
* 
* 
	ST	A2,ECBRL,A8	SAVE LENGTH 
	SC	A1,FPB:FO,A12	FILE ORGANIZATION NUMBER
	ANK	A1,2	L OR X FILE 
	SRC	A1,2 
	ORS	A1,FDBOMD,A11	INDICATE FILE TYPE 
	LDK	A1,1	DEVICE TYPE 
	SC	A1,FPB:DT,A12 
	LC	A1,FWTFNR,A11	FILE NUMBER 
	SLL	A1,8 
	ST	A1,FPB:NO,A12	DATA FILE,INDEX FILE NUMBER 
	IFT	CRDEEX=1 
	CF	A14,CONENL	ENLARGE IN PERCENTAGE
	XIF
	IFT	CRDEEX=0 
	CM	FPB:EL,A12
	XIF
	LD	A4,FDBRLE,A11	RECORD LENGTH 
	ST	A4,FPB:RL,A12	RECORD LENGTH 
	ADK	A4,1	IN CASE OF S-FILE 
	SRL	A4,8	NUMBER OF SECTORS 
* 
	EJECT		ADMTSK
* 
* 
	LDR	A13,A12
	ADKL	A13,FPB:S1	ADDRESS TO SIZE
	LDK	A5,4	COUNTER 
CON500	EQU	*
	LDK	A1,0 
	LDR*	A2,A13
	RF(Z)	CON600 
	LDR	A6,A4	SECTORS PER RECORD 
	CF	A14,DIVMOD
	STR	A2,A13	MOST SIGN PART
CON600	EQU	*
	LD	A2,2,A13	KEEP REST
	LDR	A6,A4	NUMBER OF SECTORS PER RECORD 
	CF	A14,DIVMOD
	ST	A2,2,A13
	ADKL	A13,10	NEXT SIZE
	SUK	A5,1 
	RB(NZ)	CON500	MORE SIZES TO CONVERT
	LD	A3,ECBRL,A8	FPB LENGTH
	LDR	A5,A3	SAVE LENGTH
	LDR	A1,A12	ADM BUFFER ADDRESS
	LD	A2,ECBBA,A9 
	ADK	A2,8	NOT FIRST PART
	SUK	A3,8 
	LD	A4,DWTTAB,A10	USER TTAB ADDRESS 
	CF	A14,MOV:SU	FPB TO USER AREA 
	RTN	A14
* 
	EJECT		ADMTSK
* 
* 
**********
* GETLRN *
**********
* 
*   CONVERT LAST RECORD NUMBER
* 
*   INPUT :  A8=ECB ADDRESS 
*           A11=FDB ADDRESS 
* 
*   OUTPUT:  A4=NUMBER OF SECTORS PER RECORD
*           A13=ADDRESS TO CONTROLL WORDS IN ECB
*            A1,A2=LRN SECTOR NUMBER-1
*            ECBCW1,ECBCW2=LRN CONVERTED TO SECTOR NUMBER-1 
*            A6,A7 ARE USED 
* 
GETLRN	EQU	*
	LD	A4,FDBRLE,A11	RECORD LENGTH 
	ADK	A4,1 
	SRL	A4,8	NUMBER OF SECTORS 
	LC	A1,FDBLRN,A11 
	ANK	A1,/FF 
	LD	A2,FDBLRN+1,A11 
	LDR	A13,A8	ADDRESS TO CONTROLL WORDS 
	ADKL	A13,ECBCW1
	STR	A1,A13	LAST RECORD NUMBER
	ST	A2,ECBCW2,A8
	CF	A14,DBLMUL	CONVERT TO SECTOR ADDRESS
	RF	RETA14
* 
	EJECT		ADMTSK
* 
* 
**********
* OPFILE *
**********
* 
*   OPEN EXISTING FILE AND CHECH SHAREBILITY
* 
*   INPUT :  A8=ECB ADDRESS 
* 
*   OUTPUT :  A11 = NEW FPB ADDRESS 
*             A4=NUMBER OF SECTORS PER RECORD 
*              A1,A2,A3,A5,A7 ARE USED
* 
* 
OPFILE	EQU	*
	CF	A14,GETFPB
	LDK	A7,/A1	OPEN FILE 
	CF	A14,ADMOPE	OPEN 
	RF(NZ)	RETA14	ERROR
	LDKL	A1,/8000	RC: REQUEST ERROR
	LDK	A2,1 
	LC	A3,FPB:FO,A12	CHECK FILE ORGANIZATION 
	CCK	A3,'SS'
	RF(E)	OPE100	S-FILE
	LDK	A2,0 
	CCK	A3,'LL'
	RF(E)	OPE100	L-FILE
	CCK	A3,'XX'
	RF(NE)	RETA14	NOT L-,S- OR X-FILE
* 
	EJECT		ADMTSK
* 
* 
OPE100	EQU	*
	AD	A2,FPB:RL,A12	RECORD LENGTH 
	ANK	A2,/FF 
	RF(NZ)	RETA14	ILLEGAL RECORD LENGTH
	LC	A2,FPB:BF,A12	BLOCKING FACTOR 
	SUK	A2,1 
	RF(NZ)	RETA14	ILLEGAL BLOCKING FACTOR
	LDK	A3,0	ENLARGE FACTOR
	LC	A1,FWTPAR,A11	GET NUMBER OF USERS 
	ANK	A1,/3F	6 BITS
	SUK	A1,1 
	RF(Z)	SETFDB	1ST OPEN
	LD	A1,FDBEXC,A11	
	RF(NZ)	OPE900	FILE OPENED EXCLUSIVE
	LC	A2,FDBOMD,A11	OPEN MODE 
	ANK	A2,/7F	NOT FILE TYPE 
	CC	A2,DWTOR+1,A10
	RF(E)	RETA14	NO VIOLATION OF SHARABILITY ROULES
OPE900	EQU	*
	LDK	A1,/40	INDICATE VIOLATION OF SHAREBILITY ROULES
	RF	RETA14
* 
	EJECT		ADMTSK
* 
* 
**********
* DBLMUL *
**********
* 
*   DOUBLE MULTIPLY 
* 
*    INPUT :   A4 = ARG1
*              A13= ADDRESS TO ARG2 
* 
*   OUTPUT: CR SET ACCORDING TO RESULT
*           A6,A7 ARE USED
*           A1,A2 = RESULT
* 
DBLMUL	EQU	*
	LDR	A6,A4	ARG1 
	LDR*	A7,A13	1ST PART OF ARG2 
	RF(Z)	DBLM10 
	CF	A14,MPYMOD
	ADK	A1,0 
	RF(NZ)	SETOVE	OVERFLOW 
	STR	A2,A13 
DBLM10	EQU	*
	LDK	A1,0 
	LDK	A2,0 
	LD	A7,2,A13	ARG2 
	RF(Z)	DBLM30 
	LDR	A6,A4	ARG1 
	CF	A14,MPYMOD
	ADR*	A1,A13
	RF(O)	SETOVE	OVERFLOW
* 
	EJECT		ADMTSK
* 
* 
DBLM30	EQU	*
	ST	A2,2,A13
	STR	A1,A13	SAVE RESULT 
RETA14	EQU	*
	ABL	RTNA14	RTN A14 
SETOVE	EQU	*
	ABL	SETCRO	RTN A14 (SET OVERFLOW)
* 
	IFT	CRDEEX=1 
* 
	EJECT		ADMTSK
* 
* 
**********
* CREFIL *
**********
* 
*   CREATE FILE FORE OPEN OUTPUT
* 
*   INPUT :   A8=ECB ADDRESS
*   OUTPUT:   A1=RC FROM OPEN CR SET ACCORDING TO A1
*             A4=NUMBER OF SECTORS PER RECORD 
*              A2,A3,A4,A5,A6,A7,A13,A12 ARE USED 
*             A11=FDB ADDRESS OF OPENED FILE
* 
CREFIL	EQU	*
	CF	A14,GETFPB	GET FPB
	LDK	A5,4	NUMBER OF VOLUMES 
	LDR	A13,A12	FDB ADDRESS
	ADKL	A13,FPB:S1	ADDRESS TO SIZE
CREF10	EQU	*
	CF	A14,DBLMUL	NUMBER OF SECTTORS 
	RB(N)	SETOVE	OVERBLOW
CREF15	EQU	*
	LDR	A6,A1	NUMBER OF SECTORS
	LDR	A7,A2
	CF	A14,DV3RST	REST AFTER DIV 3 
	RF(Z)	CREF18	NO REST 
	LDR	A2,A4	ONE MORE BLOCK 
	CF	A14,ADDMOD	NUMBER OF SECTORS
	RB(O)	SETOVE	OVERBLOW
	STR	A1,A13	INTO FPB
	ST	A2,2,A13
	RB	CREF15	CHECK IF MULTIPLE OF 3 
* 
	EJECT		ADMTSK
* 
* 
CREF18	EQU	*
	ADKL	A13,10
	SUK	A5,1 
	RB(P)	CREF10	NEXT SIZE 
	CF	A14,ENLFAC	ENLARGE
	RB(NZ)	SETOVE	OVERBLOW 
	LDKL	A7,/2A1	CREATE FILE 
	CF	A14,ADMOPE	CREATE FILE
	RB(NZ)	RETA14	ERROR
	LDR*	A2,A8	DATA FILE NUMBER
	SC	A2,FPB:NO,A12 
	XIF
* 
	EJECT		ADMTSK
* 
* 
**********
* SETFDB *
**********
* 
*   SET FDB PARAMETERS FDBENL,FDBOMD,FDBEXC,FDBLRN AND FDBRLE 
*   INPUT : A3 = ENLARGE IN NUMBER OF SECTORS 
*            A11=FDB ADDRESS OF OPENED FILE 
* 
* 
SETFDB	EQU	*
	ST	A3,FDBENL,A11	ENLARGE 
	LD	A2,DWTOR,A10	OPEN MODE AND OPTION 
	SC	A2,FDBOMD,A11	INDICATE OPEN MODE
	SLL	A2,6	EXCLUSIVE ACCES WANTED
	RF(NN)	SETF25	NO 
	LD	A1,DWTTAB,A10 
SETF25	EQU	*
	ST	A1,FDBEXC,A11	INDICATE EXCLUSIVE OR NOT 
	LD	A2,FPB:FR,A12	MOVE LRN
	SC	A2,FDBLRN,A11 
	LD	A2,FPB:FR+2,A12 
	ST	A2,FDBLRN+1,A11 
	LD	A2,FPB:RL,A12	GET RECORD LENGTH 
	RF(NZ)	SETF30	NOT L-FILE 
	LDKL	A2,LFILEN	L-FILE RECORD LENGTH
SETF30	EQU	*
	ST	A2,FDBRLE,A11 
	LDK	A1,0 
RETUR	EQU	* 
	RB	RETA14
* 
	IFT	CRDEEX=1 
	EJECT		ADMTSK
* 
* 
**********
* FORFIL *
**********
* 
* 
*   FORMAT FILE 
* 
*   INPUT :   A8 = ECB ADDRESS
*             A11= FDB ADDRESS
* 
*   OUTPUT: 
*             A1,A2,A4,A5,A6,A7,A13 ARE USED
* 
FORFIL	EQU	*
	CF	A14,GETLRN	GET LAST RECORD NUMBER 
	LDR	A5,A1	SAVE LRN 
	LDR	A6,A2
FORF10	EQU	*
	ADR	A6,A4	NEXT RECORD
	RF(P)	FORF20	NOT OVERFLOW
	ANK	A6,/FF	A4</FF
	ADK	A5,1 
FORF20	EQU	*
	STR	A5,A13	TO ECBCW
	ST	A6,2,A13
	CF	A14,ADMWFO
	RB(Z)	FORF10	FILE NOT READY
	ANKL	A1,/1FF	NOT END OF FILE BITS
	ST	A1,ECBRC,A8 
	RF	ADMI10
* 
	XIF
	EJECT		ADMTSK
* 
* 
**********
* ADM:IO *
* ADMWRI *
**********
* 
*   IO ROUTINES 
* 
*   OUTPUT:  CR SET ACCORDING TO RC EXCEPT RETRY BIT
* 
*   INPUT :   A8= ECB ADDRESS 
*           (A10 = FDB ADDRESS) 
*           A1,A2,A7 ARE USED 
* 
ADMWFO	EQU	*	FORMAT FILE
	LDK	A7,/95	ORDER CODE
	LDKL	A2,BUFFNU	INDICATE RECORD NOT USED
	LDK	A1,1	ONE SECTOR IO 
	SC	A1,ECBRL,A8 
ADMI00	EQU	*
	IFT	MMUPAG=1 
	LDK	A1,0	BIT 0,1 OF 18 BIT ADDRESS 
	XIF
	RF	ADM:IO
* 
ADMWRI	EQU	*
	LD	A7,FDBOMD,A10	FILE TYPE 
	RF(N)	ADMW10	L OR X FILE 
	LD	A7,ECBBA,A9	BUFFER ADDRESS
	AD	A7,ECBRL,A8	END OF BUFFER 
* 
	EJECT		ADMTSK
* 
* 
	IFT	MMUPAG=0 
	LDK	A2,/FF 
	SC	A2,-1,A7	INDICATE RECORD USED 
	XIF
	IFT	MMUPAG=1 
	LD	A2,DWTTAB,A10	USER TTAB ADDRESS 
	TL	TTB:MT,A2	USER MMU TABLE
	EL	A2,-2,A7	GET LAST WORD OF BUFFER
	ORK	A2,/FF	SET RECORD BUSY 
	ES	A2,-2,A7
	TL	MONMMU	MONITOR MMU TABLE
	XIF
ADMW10	EQU	*
	LDK	A7,/95	WRITE 
* 
	EJECT		ADMTSK
* 
* 
**********
* ADM:BA *
**********
* 
*   INPUT :   A8 = ADM ECB ADDRESS
*             A9 = USER ECB ADDRESS 
*            A10 = FDB ADDRESS
* 
*   OUTPUT:  A1 = RC CR SET ACCORDING T A1
*            A2,A7 ARE USED 
* 
ADM:BA	EQU	*
	IFT	MMUPAG=0 
	LD	A2,ECBBA,A9	BUFFER ADDRESS
	XIF
	IFT	MMUPAG=1 
	LDK	A2,0 
	LD	A1,ECBBA,A9	16 BIT BUFFER ADDRESS 
	DRL	12 
	SLL	A1,1	PAGE ADDRESS
	AD	A1,DWTTAB,A10 
	LD	A1,TTB:MT,A1	MOST SIGNIFICANT BITS
	SRL	A1,10
	DRL	4
	SLL	A1,4 
* 
	EJECT		ADMTSK
* 
**********
* ADM:IO *
**********
* 
*   INPUT : A1,A2 = BUFFER ADDRESS
*           A7    = ORDER CODE
*           A8    = ADM ECB ADDRESS 
* 
	XIF
ADM:IO	EQU	*
	ST	A2,ECBBA,A8	ADM ECB 
	IFT	MMUPAG=1 
	SCR	A1,A8	BIT 0,1
	XIF
	LKM
	DATA	15
ADMI10	EQU	*
	LD	A1,ECBRC,A8	RETURN CODE 
	ANKL	A1,/FEFF	NOT RETRY BIT
	IFT	CRDEEX=1 
	RB	RETUR 
	XIF
	IFT	CRDEEX=0 
	RB	RETA14
	XIF
* 
	EJECT		ADMTSK
* 
**********
* ADMOPE *
* ADMRFP *
* ADM:AF *
**********
* 
*   OPEN FILE AND READ FILE PARAMETERS
* 
*   OUTPUT: A1= ERROR CODE CR SET ACCORDING TO A1 
*            A2,A7 ARE USED 
*           A11= FWT ADDRESS
*            IF A11 = 0 NO OPEN HAS BEEN DONE 
* 
ADMOPE	EQU	*
	SUR	A11,A11	INDICATE NO OPEN DONE
	CF	A14,ADM:AF
	IFT	CRDEEX=1 
	RB(NZ)	RETUR	ERROR 
	XIF
	IFT	CRDEEX=0 
	RB(NZ)	RETA14
	XIF
	LDR*	A1,A8	FILE NUMBER 
	ANK	A1,/FF 
	LDKL	A11,SCTFWT	ROOT TO FWT:S
AOPE10	EQU	*	SEARCH FWT ADDRESS 
	LDR*	A11,A11	FWT ADDRESS 
	SUK	A1,1 
	RB(P)	AOPE10	NEXT FWT
	ANKL	A11,/FFFE	BIT 15 USED BY FILE MANAGEMENT
ADMRFP	EQU	*	READ FILE PARAMETERS TO ADMBUF 
	LDK	A7,/83 
ADM:AF	EQU	*
	LDR	A2,A12	ADM BUFFER ADDRESS + 8
	RB	ADMI00
* 
	EJECT		ADMTSK
* 
* 
	END

Full view