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

⟦bc845f52b⟧

    Length: 23928 (0x5d78)
    Notes: pts_type(SC)
    Names: »DMTASS.SC«

Derivation

└─⟦781e933ac⟧ Bits:30009686 Philips computer tape "600310"
    └─⟦this⟧ »M:92T1/DMTASS.SC« 
└─⟦7e2393f80⟧ Bits:30009710 Philips computer tape "M_KONV"
    └─⟦this⟧ »M:KONV/DMTASS.SC« 
└─⟦7f25f14aa⟧ Bits:30009683 Philips computer tape "600307"
    └─⟦this⟧ »M:92F4/DMTASS.SC« 
└─⟦f740ae34d⟧ Bits:30009708 Philips computer tape "M_92F3"
    └─⟦this⟧ »M:92F3/DMTASS.SC« 

PTS(SC)

	IDENT DMTASS 	REL 9.2 79-11-16  870105040920 

*			=3 PR 5141
*			= 79-04-06
*			=2 WAIT AT VTOC READ
*			REL 9.1 79-04-06
*			=1, PR 3413 
*			REL 9.1 78-10-25


* 
* 
****************************************************
* 
*   PHILIPS TERMINAL SYSTEM  PTS
* 
*   DMTASS = ASSIGN FILE CODE DISC I/O HANDLING 
* 
* 
* 
* 
* 
* 
****************************************************
* 
*   THIS MODULE IS ACTIVATED FROM TASS
* 
*   INPUT   A2 = TID TASK IDENT OF DMTASK AT PRESENT NOT USED 
*           TASBLK  PARAMETER BLOCK 
* 
*   IN TASVOL IN TASBLK ALL VOLUMES WHERE THE FILE TO BE ASSIGNED CAN 
*   RECIDE ARE DEFINED. ON THESE VOLUMES THE VTOC:S ARE SEARCHED TO FIND
*   ALL EXTENTS FOR THE FILE TO BE ASSIGNED. FOR EACH EXTENT ITS
*   FILE-SECTION-NO, FILE-EXTENT-NO,FILE-EXTENT-LENGTH AND
*   FILE-EXTENT-BASE ARE SAVED IN TASBLK. 
*   FOR THE FIRST EXTENT (I.E. FILE-SECTION-NO =0 AND FILE-EXTENT-NO =0)
*   THE LAST-RECORD-NO, RECORD-LENGTH, BLOCKING-FACTOR AND VTOC-REC-NO
*   ARE SAVED TOO.
*   WHEN THE FIRST EXTENT HAS BEEN FOUND EXISTING FDB:S CAN BE SEARCHED 
*   TO CHECK IF THE FILE TO BE ASSIGNED HAS PREVIOUSLY BEEN ASSIGNED TO 
*   ANOTHER FILE CODE. IF SO THE FDB ADDRESS IS PUT INTO THE CD:TAB AND 
*   THE ASSIGNMENT IS COMPLETED. IF NO FDB DESCRIBING THE FILE IS FOUND 
*   THEN A NEW FDB MUST BE INITIALIZED AND THE REST OF THE
*   VOLUMES ARE CHECKED TO FIND ALL FILE EXTENTS
* 
*   FOR INDEX ASIGN THE PRODGRAM IS RUN TWICE.
*   DURING THE FIRST LOOP A MASTERINDEX IS READ.
*   FC 13 IN TTAB FOR DMTASK IS THEN USED 
	EJECT
* 
*************** 
*   ENTRIES   * 
*************** 
* 
	ENTRY	DMTASS 
	ENTRY	VTLRN
	ENTRY	VLVBA
	ENTRY	VLVRL
	ENTRY	SECTLE 
	EJECT
* 
***************** 
*   EXTERNALS   * 
***************** 
* 
	EXTRN	QTJOB
	EXTRN	FNDTID,TTB:TD
* 
	EXTRN	DWTST
	EXTRN	DWTADR 
	EXTRN	DWTMEC	MMU ECB ADDRESS IN FDB
* 
	EXTRN	ECBFC
	EXTRN	ECBBA
	EXTRN	ECBRL
	EXTRN	ECBRC
	EXTRN	ECBCW
* 
	EXTRN	TIODM
	EXTRN	DMTGBU 
	EXTRN	DMTRBU 
	EXTRN	CLRBUF 
	EXTRN	BUFSTA 
	EXTRN	BUFSNR 
	EXTRN	BUFDMI 
* 
	EXTRN	QFDBFL 
	EXTRN	FDBSTA 
	EXTRN	FDBEND 
	EXTRN	FDBECB 
	EXTRN	FDBEXT 
	EXTRN	EXTDMI 
	EXTRN	EXTLEN 
	EXTRN	EXTBAS 
	EXTRN	FDBRLE 
	EXTRN	FDBBLF 
	EXTRN	FDBVTO 
	EXTRN	FDBLRN 
	EXTRN	FDBNIF,FDBKA 
	EXTRN	FDBMIA,FDBAI1,FDBADF,FDBCRL
	EXTRN	FDBSNR,FDBMRN,GTLGRN,EXTELE,FDBCEX 
	EXTRN	FDBDBR,FDBMRO
	EXTRN	FDBMEC	MMU ECB DISPLACEMENT IN FDB 
	EXTRN	MXIND,CRNQUE,DMTWM,MPYMOD
	EXTRN	TASASB 
	EXTRN	TASCVO 
	EXTRN	TASVOL 
	EXTRN	TASCXO 
	EXTRN	TASSEX 
	EXTRN	TASXLB 
	EXTRN	TASFDB 
	EXTRN	TASVRL 
	EXTRN	TASVLE 
	EXTRN	TASVRN 
	EXTRN	TASECB 
	EXTRN	TASFIL,TASTID,TASMXA 
	EXTRN	TASSPW,TASFDD,TASTBE 
	EXTRN	TASCAQ 
	EXTRN	TASLFD		=1 
	EXTRN	VOLCHE 
	EJECT
X:A	EQU	0 
RECBFZ	EQU	00004	INDEX RECORD BUFFER SIZE 
X:B	EQU	0 
INDXAC	EQU	00000	INDEX ACCESS FUNCTIONS WHEN = 1
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	0
* 
	EJECT
* 
************
*   DATA   *
************
* 
*   CYLID 1 WORD INCL FOR VOL LABEL 
VLVLE	EQU	8 
VLVBA	EQU	12
VLVRL	EQU	14
VLVER	EQU	34
* 
VTFSNO	EQU	8
VTFXNO	EQU	10 
VTFXLE	EQU	14 
VTFXBA	EQU	18 
VTLRN	EQU	21
VTRLE	EQU	24
VTBLF	EQU	26
VTFIOR	EQU	27 
VTNIF	EQU	37
VTKA	EQU	38 
* 
*   QVTBLE= (VTOC BF)*(RL+1)+2
QVTBLE	EQU	380	VTOC BLOCK LENGTH
SECTLE	EQU	410	SECTOR LENGTH
	DATA	0,0	4 WORDS 
	DATA	0,0	STACK 
DMTA14	EQU	*-2
	EJECT
* 
**************
*   DMTIOC   *
**************
* 
*   ENTRY   DMTIOC   CHECK RETURN CODES AFTER DISC I/O
*                    RETURN TO DMTASX WITH A7=1 IF ERROR. 
* 
DMTIOC	EQU	*
	LDKL	A8,TASECB 
	LD	A3,ECBBA,A8 
	LD	A1,ECBRC,A8 
	ANKL	A1,/FEFF	BIT 7 ONLY RETRIES 
	RF(Z)	DMTIOX 
	ADKL	A14,4 
	ANK	A1,/80 
	RF(NZ)	DMT060	NEW VOLUME LOADED
	SUKL	A3,BUFSTA 
	CM	BUFDMI,A3	CLEAR VOL IDENT IN BUFFER 
	LDK	A7,1 
	ABL	DMTASX	DISC I/O ERROR
DMTIOX	EQU	*
	RTN	A14
	EJECT
* 
**************
*   DMTASS   *
**************
* 
DMTASS	EQU	*
	LDKL	A14,DMTA14	INITIALIZE DMTASK A14 STACK POINTER
	ST	A2,TASTID	TASK IDENT
	CM	TASMXA	MASTER INDEX ADDR
	ANK	A2,/2
	RF(Z)	DMT010	NOT FLEXTASC
* 
*   PERFORM VOLUME CHECK WITH LOCK
* 
	LD	A8,TASASB	ASBLK ADDR
	LCR	A2,A8
	ANK	A2,/07	NO OF VOL 
	LDKL	A11,1	LOCK WANTED 
	CF	A14,VOLCHE	SEE TASS 
	LDR	A1,A1
	RF(Z)	DMT010	OK
	LDK	A7,4	VOL UNKNOWN 
	SUR	A8,A8	NO BUFFER	=3 
	ABL	DMTASX 
DMT010	EQU	*
* 
	LDKL	A8,TASECB 
* 
	LD	A1,TASCVO	OFFSET INTO TASVOL FOR FIRST VOLUME 
DMT050	EQU	*
	CF	A14,CLRBUF	RELEASE ALL FREE BUFFERS 
	ENB			ENB
	LD	A1,TASVOL,A1	DMI, FC FIRST VOLUME 
	SC	A1,ECBFC,A8 
	LDKL	A2,SECTLE 
	ST	A2,ECBRL,A8	SECTOR LENGTH 
	LDK	A2,0 
	ST	A2,ECBCW,A8	SECTOR #0 VL (VOLUME LABEL) 
* 
* 
	CF	A14,DMTGBU	GET A DM BUFFER  ADDRESS IN A3 
	DATA	/5700	NOP. READ ALWAYS
	ADKL	A3,BUFSTA 
	ST	A3,ECBBA,A8	DATA BUFFER START 
* 
*   PHYS READ 1 SECT FROM DISC
* 
DMT060	EQU	*
	LDK	A7,/91	WAIT	=2 
	LKM
	DATA	1		=2 
	LDKL	A14,DMTA14	SET UP A14 STACK POINTER 
	CF	A14,DMTIOC	I/O CHECK
	LD	A2,VLVER,A3	VERSION 
	CWK	A2,'TO'	DTOSS FORMATED DISC? 
	RF(E)	DMT100	YES 
	LDK	A7,8	NO
	ABL	DMTASX	ERROR RETURN
* 
DMT100	EQU	*
	CM	TASVRN
	LD	A6,VLVLE,A3	VTOC LENGTH 
	ST	A6,TASVLE 
	LD	A2,VLVBA,A3	VTOC BASE 
	ST	A2,ECBCW,A8	1:ST VTOC SECTOR NO = FSAT
	LD	A9,VLVRL,A3	VTOC RECORD LENGTH
	ST	A9,TASVRL 
	EJECT
* 
*   SEARCH ALL VTOC:S 
* 
DMT110	EQU	*
	LD	A6,TASVLE 
	SUK	A6,1 
	ST	A6,TASVLE	UPDATE TASVLE 
	RF(P)	DMT115	MORE VTOC SECTORS 
	EJECT
* 
*   ALL VTOC SECTORS ARE READ 
* 
	LD	A1,TASCVO 
	SUK	A1,2 
	ABL(N)	DMT300	ALL VOLUMES CHECKED
	ST	A1,TASCVO	UPDATE TASCVO 
	LDK	A7,7	TOO MANY FILE SECTIONS
	LD	A3,TASFIL 
	ABL(NZ)	DMTASX	NOT DATA FILE 
	LD	A3,ECBBA,A8 
	SUKL	A3,BUFSTA 
	CF	A14,DMTRBU	RELEASE BUFFER 
	LC	A7,TASVOL,A1
	CC	A7,TASVOL+2,A1
	RB(E)	DMT050	SAME DM TASK
* 
*   ACTIVATE NEXT DM TASK 
* 
	ADKL	A7,'#D' 
	LKM
	DATA	-4
	DATA	DMTASS
	LKM
	DATA	3	EXIT
	EJECT
* 
*   READ NEXT VTOC SECTOR AND EXIT
* 
DMT115	EQU	*
	LD	A3,ECBBA,A8 
	SUKL	A3,BUFSTA 
	CF	A14,DMTRBU
	LD	A2,ECBCW,A8 
	ADK	A2,1	NEXT VTOC SECTOR
	LD	A1,TASCVO 
	LD	A1,TASVOL,A1
	CF	A14,DMTGBU	GET BUFFER 
	DATA	/5700	NOP. READ ALWAYS
	ADKL	A3,BUFSTA 
	ST	A3,ECBBA,A8 
	ST	A2,ECBCW,A8 
	LDK	A7,/91	WAIT	=2 
	LKM
	DATA	1		=2 
	LDKL	A14,DMTA14
	CF	A14,DMTIOC
	LD	A9,TASVRL 
	LD	A11,TASASB
	ADKL	A11,2	POINTER TO FILENAME IN ASBLK
	LDK	A4,2	
	CW	A4,TASFIL 
	RF(NE)	DMT135	NOT MASTER INDEX 
	ADKL	A11,14	MX FILE NAME ADDR
DMT135	EQU	*
	ADK	A3,2	SKIP CYLID
DMT120	EQU	*
	IM	TASVRN	INCREMENT VTOC RECORD NO 
	LDR	A4,A3
	ADR	A4,A9	ADDRESS STATUS BYTE
	LCR	A2,A4
	ANK	A2,/FF 
	ABL(Z)	DMT250	NOT USED 
	SUR	A4,A9	BACK TO START OF VTOC REC
	LDR	A7,A11 
	LDK	A2,4	FILE NAME MAX 4 WORDS 
DMT150	EQU	*
	LDR*	A10,A4
	CWR*	A10,A7
	ABL(NE)	DMT250	NO MATCH
	SUK	A2,1 
	RF(NP)	DMT160	ALL 4 FILE NAME WORDS MATCH
	ADK	A4,2 
	ADK	A7,2 
	RB	DMT150	CHECK NEXT WORD
* 
*   ONLY STANDARD FILES ARE HANDLED 
* 
DMT160	EQU	*
	LC	A2,VTFIOR,A3
	CCK	A2,'SS'	STANDARD FILE ?
	RF(E)	DMT165	YES 
	CCK	A2,'LL'	LIBRARY FILE ? 
	ABL(NZ)	DMT250	NO
	LDK	A2,0	FILE EXTENT NUMBER
	RF	DMT167
DMT165	LD	A2,VTFSNO,A3	FILE SECTION NUMBER
	EJECT
DMT167	EQU	*
* 
*   GET INFO FROM VTOC AND SAVE IN TASBLK 
* 
	LDR	A4,A3	START OF VTOC RECORD 
	LD	A1,TASCXO	CURRENT OFFSET INTO TASSEX AND TASXLB 
	SUK	A1,4 
	ST	A1,TASCXO 
	RF(NN)	DMT170	<= 4 EXTENTS 
	LDK	A7,9 
	ABL	DMTASX	MORE THAN 4 EXTENTS EXIST 
DMT170	EQU	*
	ECR	A2,A2	TO LEFT HALF OF A2 
	LC	A2,VTFXNO+1,A4	EXT NO INTO RIGHT HALF OF A2 
	ST	A2,TASSEX,A1
	LD	A6,TASCVO 
	ST	A6,TASSEX+2,A1	REMEMBER WHICH VOLUME
	LD	A2,VTFXLE,A4	EXTENT-LENGTH
	ST	A2,TASXLB,A1
	LD	A2,VTFXBA,A4	EXTENT BASE
	ST	A2,TASXLB+2,A1
	LD	A2,TASSEX,A1
	RF(NZ)	DMT250	NOT FIRST EXTENT 
	EJECT
*   FIRST FILE EXTENT 
*   CHECK IF AN FDB DESCRIBING THE FILE ALREADY EXISTS. 
* 
	LD	A12,TASFDB
	RF(Z)	DMT190	FIRST TIME EXT #0 FOUND 
	LDK	A7,7 
	ABL	DMTASX	EXT #0 ALREADY FOUND
DMT190	EQU	*
	LDKL	A12,FDBSTA
DMT200	EQU	*
	LDR*	A5,A12
	ANK	A5,/01 
	RF(Z)	DMT210	FREE
	LD	A2,FDBEXT,A12 
	CW	A2,TASVOL,A6
	RF(NE)	DMT210	NOT SAME VOLUME
	LD	A2,FDBVTO,A12 
	CW	A2,TASVRN 
	RF(NE)	DMT210	NOT SAME VTOC REC
	LD	A2,FDBMIA,A12 
	RF(NZ)	DMT205	INDEX ASS BEFOR
	LD	A2,TASFIL 
	ABL(E)	DMT400	SAME VTOC RECORD  FDB FOUND
DMT205	EQU	*
	LDK	A7,5	FILE CODE USED
	ABL	DMTASX 
* 
DMT210	LDR*	A12,A12	GET NEXT FDB
	ANKL	A12,/FFFE 
	RB(NE)	DMT200	MORE FDB:S TO SEARCH 
* 
*   NO MATCHING FDB EXIST   FIND A FREE FDB 
* 
	LDKL	A12,FDBSTA
DMT220	LDR*	A5,A12
	ANK	A5,/01 
	RF(Z)	DMT230	FREE
	LDR*	A12,A12	GET NEXT FDB
	ANKL	A12,/FFFE 
	RB(NE)	DMT220	MORE FDB:S TO CHECK
	LDK	A7,3 
	ABL	DMTASX	NO FDB AVAILABLE
*   INITIALIZE FDB   ZERO FROM FDB+2
* 
DMT230	EQU	*
	ST	A12,TASFDB
	LDR	A10,A12
	ADKL	A10,QFDBFL
	LDK	A2,0 
	LDR	A1,A12 
DMT233	ADK	A1,2 
	CWR	A1,A10 
	RF(E)	DMT237	END OF FDB
	STR	A2,A1
	RB	DMT233
DMT237	EQU	*
	LDKL	A2,/8000
*   DEV NOT BUSY
	ST	A2,DWTST,A12
	LDKL	A2,TIODM
	ST	A2,DWTADR,A12 
	LDKL	A2,SECTLE 
	LDR	A1,A12 
	ADKL	A1,FDBECB 
	ST	A2,ECBRL,A1 
	LDK	A2,/01 
	ORRS	A2,A12	SET USE BIT
	LC	A2,VTLRN,A4 
	SC	A2,FDBLRN,A12 
	LD	A2,VTLRN+1,A4 
	ST	A2,FDBLRN+1,A12 
	LD	A2,VTRLE,A4 
	ST	A2,FDBRLE,A12 
	LC	A2,VTBLF,A4 
	SC	A2,FDBBLF,A12 
	LC	A2,VTNIF,A4 
	SC	A2,FDBNIF,A12 
	LD	A2,VTKA,A4
	ST	A2,FDBKA,A12
	LD	A2,TASVRN 
	ST	A2,FDBVTO,A12 
* 
	IFT	MMUPAG=1 
	LDR	A2,A12	GET FDB ADDRESS 
	ADKL	A2,FDBMEC	ADD MMU ECB DISPLACEMENT
	ST	A2,DWTMEC,A12	SET ADDRESS TO MMU ECB IN FDB 
	XIF
* 
	EJECT
* 
*   CHECK NEXT VTOC RECORD
* 
DMT250	EQU	*
*   A3 = ADR 1ST REC
*   A9 = VTOC REC LGTH
	ADR	A3,A9
	ADK	A3,1	SKIP STATUS BYTE
	LDR	A2,A3
	SU	A2,ECBBA,A8 
	CWK	A2,QVTBLE
	ABL(L)	DMT120	MORE RECORDS IN BUFFER 
	ABL	DMT110	GET NEXT VTOC SECTOR
* 
*   ALL VTOCS IN ALL VOLUMES ARE SEARCHED AT THIS POINT 
* 
DMT300	EQU	*
	LDK	A3,16
	SU	A3,TASCXO 
	RF(NZ)	DMT310
	LDK	A7,6 
	RF	DMTASX	FILE NAME UNKNOWN
DMT310	EQU	*
	LD	A12,TASFDB
	RF(NZ)	DMT320
	LDK	A7,7 
	RF	DMTASX	FIRST EXTENT IS MISSING
	EJECT
* 
*   PUT EXTENT INFORMATION INTO FDB IN ASCENDING ORDER
*   ACCORDING TO INCREASING SECTOR NO AND EXTENT NO 
* 
DMT320	EQU	*
* 
*   CHECK IF RECORD BUFFERS ARE LARGE ENOUGH FOR INDEX FILE 
* 
	LD	A6,TASFIL 
	RF(Z)	DMT330	DATA FILE ASS 
	LD	A6,FDBRLE,A12	RECORD LENGTH 
	ADK	A6,2	
	SRL	A6,1	NR OF WORDS 
	CWK	A6,RECBFZ	RECORD BUFFER SIZE 
	RF(NG)	DMT330	OK 
	LDK	A7,12
	RF	DMTASX	RECORD BUFFER IS TOO SMALL 
DMT330	EQU	*
	LDR	A6,A12 
*			FDB ADDR
	ADKL	A6,FDBEXT 
	LDK	A2,0 
	LDR	A5,A3
	SRL	A5,2	NUMBER OF EXTENTS 
DMT340	EQU	*
	LDK	A4,16
DMT350	EQU	*
	SUK	A4,4 
	CW	A2,TASSEX,A4
	RF(E)	DMT360	MATCH 
	CW	A4,TASCXO 
	RB(NE)	DMT350	MORE EXTENTS TO CHECK
* 
*   THE EXTENT SEARCHED FOR IS NOT FOUND
*   CHECK IF RIGHT HALF OF A2 = 0 (EXT-NO = 0)
* 
	LDR	A1,A2
	ANK	A1,/FF 
	RF(NZ)	DMT370	TRY NEXT SECTION 
* 
DMT355	EQU	*
	LDK	A7,7 
	RF	DMTASX	FILE SECTION MISSING 
DMT360	EQU	*
* 
*   MOVE INFO ABOUT THIS EXTENT TO FDB
* 
	LD	A1,TASSEX+2,A4
	LD	A1,TASVOL,A1
	ST	A1,EXTDMI,A6
	LD	A1,TASXLB,A4
	ST	A1,EXTLEN,A6
	LD	A1,TASXLB+2,A4
	ST	A1,EXTBAS,A6
	ADK	A6,6 
	SUK	A5,1 
	RF(NP)	DMT500	ALL EXTENTS HANDLED
* 
*   FIND NEXT FILE-SECTION-NO, FILE-EXT-NO COMBINATION
*   TO SEARCH FOR 
* 
	LDR	A1,A2
	ANK	A1,/FF 
	SUK	A1,3 
	RF(NE)	DMT380	NOT EXT-NO = 3 
DMT370	EQU	*
	ECR	A1,A2
	ANK	A1,/FF 
	SUK	A1,3 
	RB(E)	DMT355	SECTION-NO = 3
	ADK	A1,4	INCREMENT SECTION-NO
	ECR	A2,A1	EXT-NO = 0 
	RB	DMT340
DMT380	ADK	A2,1	INCREMENT	EXT-NO
	RB	DMT340
	EJECT
DMTASX	EQU	*		=1 START
* 
*   AT ERROR EXIT UNLOCK FLEXDISCS WHICH WERE UNLOCKED BEFORE 
* 
	LDR	A5,A7
	LDR	A6,A8	SAVE 
	LDK	A1,3	LOOP
DMTASY	EQU	*
	LC	A2,TASLFD,A1	FILE CODES 
	ANK	A2,/FF 
	RF(Z)	DMTASZ	NO CODE 
	LDKL	A8,TASECB 
	SC	A2,TASECB+1 
	LDK	A7,/B8	UNLOAD ,WAIT
	LKM	 
	DATA	1 
DMTASZ	EQU	*
	SUK	A1,1 
	RB(NN)	DMTASY	NEXT 
	LDR	A7,A5
	LDR	A8,A6
	RF	DMT401		=1 END
* 
*   PUT FDB ADDRESS INTO TTAB/CD:TAB
* 
DMT400	EQU	*
	LDK	A7,0 
DMT401	EQU	*		=1
	LD	A2,TASTBE	TTAB/CDTAB FILE CODE ADDR 
	LDR	A7,A7
	RF(Z)	DMT420	CORRECT RETURN
	CM	-1,A2	ZERO FILE CODE
* 
*   REMOVE FDB WITH MASTER INDEX
* 
	LD	A4,TASMXA	MASTER INDEX ADDR 
	RF(Z)	DMT410	NO MASTER INDEX 
	INH			INH
	LD	A2,MXIND	SIEZE MASTERINDEXINDEX 
	SUK	A2,2 
DMT405	EQU	*
	SUK	A2,4	NEXT OFFSET 
	RF(NN)	DMT407	OK 
	RF	DMT408	MASTER INDEX MUST BE FOUND 
DMT407	CW	A4,MXIND+2,A2 
	RB(NE)	DMT405	NEXT ENTRY 
	LDKL	A4,/7FFF
	ANS	A4,MXIND+4,A2	SET ENTRY FREE 
DMT408	ENB			ENB
DMT410	EQU	*
	LD	A3,TASFDB 
	RF(Z)	DMT430	NO FDB USED 
	LDKL	A2,/FFFE
	ANRS	A2,A3	CLEAR FDB USE BIT 
	RF	DMT430
DMT420	EQU	*
	ST	A12,1,A2	FDB ADDR 
DMT430	EQU	*
	LDR	A8,A8
	RF(Z)	DMT440	NO BUFFER 
	LD	A3,ECBBA,A8 
	SUKL	A3,BUFSTA 
	CF	A14,DMTRBU	RELEASE BUFFER 
DMT440	EQU	*
	CF	A14,CLRBUF	RELEASE ALL FREE BUFFERS 
	CF	A14,TASCAQ	CHECK ASSIGN QUEUE 
	CF	A15,QTJOB	QUEUE CALLING TASK
	ENB
	LKM
	DATA	3 
	EJECT
DMT500	EQU	*
	LD	A6,TASFIL 
	ABL(Z)	DMT700	DATA FILE
	IFF	INDXAC=1 
	LDKL	A7,-1	REQ ERR 
	RB	DMTASX
	XIF
	IFT	INDXAC=1 
	SUK	A6,1 
	ABL(Z)	DMT600	INDEX FILE 
	EJECT
* 
*   THIS IS MASTER INDEX LOOP.
*   CONNECT FDB TO FILE CODE IN DMTASK TTAB AND READ
*   MASTER INDEX WITH SEQUENTIAL READ ON THIS FILE CODE 
* 
	LD	A7,TASTID	DMTASK ID 
	INH
	CF	A15,FNDTID	TTAB ADDR TO A2
	ENB
	ST	A2,TASSPW 
	LDKL	A3,/0100	INDEX DATA FILE
	LD	A1,TASASB 
	LC	A3,1,A1	FILE CODE 
	SC	A3,TASECB+1 
	ST	A3,TTB:TD+2,A2	TTAB ENTRY 
	ST	A12,TTB:TD+4,A2	FDB ADR 
	LD	A3,ECBBA,A8 
	SUKL	A3,BUFSTA 
	CF	A14,DMTRBU	RELEASE BUFFER 
* 
*   CALC NO OF WORDS NEEDED IN MASTRE INDEX 
* 
	LD	A6,FDBRLE,A12	REC LGTH
	LD	A7,FDBLRN+1,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)	DMT570	WRONG SIZE
	INH
	LD	A4,MXIND	LENGTH MXIND 
	SUK	A4,4	MAX A5 VALUE
	LDKL	A5,-2	OFFSET
DMT540	EQU	*
	ADK	A5,4	GET ENTRY 
	CWR	A5,A4
	RF(G)	DMT570	NO ENTRY FOUND
	LD	A3,MXIND,A5 
	RB(Z)	DMT540	ZERO ENTRY
	LD	A6,MXIND+2,A5 
	RB(N)	DMT540	ENTRY USED
	SUR	A6,A2	NO OF SPARE WORDS
	RB(N)	DMT540	LARGER ENTRY NEEDED 
* 
*   SUFFICIENT SPACE FOUND
* 
	LDKL	A1,/8000	USED BIT 
	ORS	A1,MXIND+2,A5	MARK ENTRY USED
	ST	A3,TASMXA	MASTER INDEX ADDR 
	ST	A3,FDBMIA,A12 
	LD	A7,FDBLRN+1,A12 
	STR	A7,A3	NO OF ENTRIES
	LD	A1,FDBRLE,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)	DMT590	LAST ENTRY 
	LD	A3,MXIND+6,A1 
	RF(N)	DMT590	NEXT ENTRY USED 
* 
*   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
DMT590	EQU	*
	ENB
* 
*   NOW READ MASTER INDEX WITH SEQUENTIAL READ
*   A8 = TASECB 
*   OTHER REQ TO THE SAME FILE CODE ARE NOT POSSIBLE
*   BECAUSE AN INDEX FILE MUST ALWAYS BE ASSIGNED COMMON
* 
DMT550	EQU	*
	LDK	A7,/42	SEQ READ,NOWAIT,NO EA 
	LKM
	DATA	-1
	DATA	DMTAR5
	LKM
	DATA	3	EXIT
DMTAR5	EQU	*
	LDKL	A14,DMTA14	RESTORE STACK
	LDKL	A8,TASECB	ECB ADDR
	LD	A2,ECBRC,A8 
	ANKL	A2,/FEFF	BIT 7 ONLY RETRIES 
	RF(Z)	DMT560	NO ERROR
* 
*   REMOVE THE ONLY CRN BUFFER
* 
	LD	A4,TASFDB	FDB ADDR
	LD	A5,FDBCRL,A4	CRN BUF ADR
	RF(Z)	DMT553	NO CRN
	CM	FDBCRL,A4 
	INH
	LD	A6,CRNQUE 
	STR	A6,A5
	ST	A5,CRNQUE 
	ENB
DMT553	EQU	*
	ANKL	A2,/1000	BIT 3 = EOF
	RF(NZ)	DMT595	READY ,WHOLIE MXINDEX IS READ
	LDK	A7,7 
DMT555	SUR	A8,A8	NO BUFFER
	ABL	DMTASX	DISC IO ERR 
DMT560	EQU	*
* 
*   RECORD READ,READ NEXRT
* 
	LD	A2,ECBRL,A8 
	ADS	A2,ECBBA,A8	REC LENGTH 
	RB	DMT550	READ NEXT RECORD 
DMT570	EQU	*
	ENB
	LDK	A7,3	NOT SUFF SPACE
	RB	DMT555
	EJECT
DMT595	EQU	*
* 
*   MASTER INDE X READUY. RERUN FOR INDEX FILE
* 
	LDK	A1,1 
	ST	A1,TASFIL	INDEX FILE
	LD	A3,TASSPW	TTAB ADR DMTASK 
	CM	TTB:TD+2,A3	DELETE ENTRY
	CM	TTB:TD+4,A3 
	LD	A3,TASFDB	FDB ADDR
	LDKL	A2,/FFFE
	ANRS	A2,A3	CLEAR FDB USE BIT 
	CM	TASFDB	EXT 0 NOT FOUND FOR INDEX
	LDK	A1,16
	ST	A1,TASCXO	LAST ENTRY POSSIBLE 
	LDK	A1,0 
*   TASCVO REMAINS ZERO FROM MASTER INDEX LOOP
	ABL	DMT050	ASSIGN INDEX
	EJECT
DMT600	EQU	*
* 
*   INDEX FILE ASSIGN 
* 
	LDK	A7,10	RET CODE 
	LD	A10,TASFDD	FDB ADDR DATA FILEP
	RF(Z)	DMT650	NO DATA FILE
* 
*   STORE INDEX ADDR IN FDB DATA FILE 
* 
	INH			INH
	LC	A3,DWTST,A10
	ANK	A3,/40 
	RF(NZ)	DMT639	OTHER REQUEST BUSY 
	LDK	A3,8	MAX NO OF INDE*2
DMT620	EQU	*
	SUK	A3,2 
	RF(N)	DMT640	MORE THAN 4 INDEX 
	LDR	A6,A10 
	ADR	A6,A3
	LD	A2,FDBAI1,A6
	RB(NZ)	DMT620	USED 
	ST	A12,FDBAI1,A6	STORE FDB ADDR INDEX
* 
*   MOVE FDB ADDRESSES FROM DATA FILE TO ALL INDEX FILES
* 
	LDK	A5,8	NR OF INDEX *2
DMT625	EQU	*
	SUK	A5,2 
	RF(N)	DMT635	ALL FDB UPPDATED
	LDR	A1,A10	FDB DATA
	ADR	A1,A5
	LD	A3,FDBAI1,A1	FDB ADDR INDEX 
	RB(Z)	DMT625	NO INDEX FILE 
	LDKL	A1,FDBADF 
	ADR	A3,A1	TO ADDR
	ADR	A1,A10	FROM ADDR 
	LDK	A2,10	NO OF BYTES
	CF	A14,DMTWM	MOVE 5 WORDS
	RB	DMT625
DMT635	EQU	*
	LC	A1,DWTST,A10
	SC	A1,DWTST,A12	SAME BUSY BITS AS DATA FILE
	ENB			ENB
	LD	A1,TASMXA 
	ST	A1,FDBMIA,A12	MASTER INDEX ADDR 
	RF	DMT720
DMT639	ADK	A7,2	A7=13=OTHER REQ BUSY
DMT640	ADK	A7,1	A7=11=4 INDEX ALREADY 
DMT650	EQU	*	A7=10=NO DATA FILE 
	ABL	DMTASX 
	XIF
	EJECT
DMT700	EQU	*	ASSIGN DATA FILE 
	ST	A12,FDBADF,A12	FDB ADDR TO FDB
	LD*	A1,TASASB	ASBLK ADDR 
	ANKL	A1,/6000
	SLL	A1,1 
	ORS	A1,FDBDBR,A12	DELAY + BASIC
DMT720	EQU	*
* 
*   SET FDBMRN TO MAX REC NO IN FILE
* 
	LDR	A1,A12 
	ADKL	A1,FDBNIF 
	ADKL	A1,EXTELE-2	
DMT750	SUKL	A1,EXTELE 
	LDR*	A2,A1	EXT BASE
	RB(Z)	DMT750 
	AD	A2,-2,A1
	SUKL	A1,EXTELE-2 
	ST	A1,FDBCEX,A12 
	SUK	A2,1 
	ST	A2,FDBSNR,A12 
	LDR	A1,A12 
	CF	A14,GTLGRN	GET LOG REC NO 
	LDK	A1,0 
	LC	A1,FDBBLF,A12	BLOCK FACTOR
	SUK	A1,1 
	ADR	A3,A1
	RF(O)	DMT760 
	RF	DMT770
DMT760	ANKL	A3,/7FFF
	ADK	A2,1	CARRY 
DMT770	SC	A2,FDBMRN,A12 
	ST	A3,FDBMRN+1,A12 
* 
*   CALCULATE FDBMRO WHICH IS MAX FDBRRO IN FILE
* 
	LD	A6,FDBRLE,A12	REC LENGTH
	ADK	A6,1 
	LDK	A7,0 
	LC	A7,FDBBLF,A12	BLOCK FACT
	SUK	A7,1 
	CF	A14,MPYMOD	A1,A2=A6*A7
	ST	A2,FDBMRO,A12	MAX FDBRRO
	ABL	DMT400 
	END

Full view