File: DS.TK of Tape: Sources/Multi8/multi8-1
(Source file text) 

/DS.TK 16-JUN-80
/**UASEM VERSION**
/THIS TASK MAKES ACCESSIBLE THE DISK PACKS IN DRIVES 
/1, 2 AND 3 ON A MULTI-PLATTER SYSTEM FOR READ AND WRITE TRANFERS.
/THESE DEVICES ARE USED MORE OR LESS AS THE DECTAPES ARE, WITH 
/THE MAIN DIFFERENCE BEING THAT ONLY ONE USER AT A TIME
/MAY ACCESS EACH DISK TO PREVENT DIRECTORY PROBLEMS.
/
/
/THIS TASK IS CALLED THROUGH THE FAKE-HANDLER MECHANISM.
/FOR DEVICES RKB0,RKA1,...,RKB3 IF PRESENT IN YOUR OS/8 SYSTEM
/OR DEVICES RL0B,RLA1,...,RL3B IF THE SYSTEM HANDLER IS RL
/IT TAKES THE USERS PARAMETERS FROM HIS DATA-AREA AND
/PASSES THE REQUEST ON TO THE SYSTEM DRIVER.
/
	*200

DSNAME,	"D^100+"S&3777	/NAME IS DS
	200		/ONE PAGE SHOULD BE SUFFICIENT
DSLOCK,	LOCKS		/UNITS LOCK TABLE
DSBASE,	0

DS,	DCA DSBASE	/THIS IS OUR HOLY CUSTOMER
	TAD DSBASE
	TAD (UAC
	DCA DSUAC	/MAKE SURE DSUAC NON-ZERO
	SZL		/IS THIS THE END ?
	 JMP DSEXIT	/YES, RELEASE THIS TASK
	TAD C7		/
	AND I DSUAC	/UNIT NUMBER
	DCA ZTEM1	/UNIT 0-7
	TAD DSUAC
	TAD (UDTV-UAC	/SAME LITERAL
	DCA DSSLOT	/DTV POINTER
	TAD ZTEM1	/GET UNIT AGAIN
	TAD DSLOCK	/INDEX IN LOCK TABLE
	CDTOIF
	JMS DEFER	//GET TABLE ENTRY
	SNA		//ANY LOCK ACTIVATED ?
	 JMP DSFREE	//NO, UNIT WAS FREE YET
	TAD DSBASE	//COMPARE LOCK WITH USER ID
	SZA CLA		//SAME USER ?
	 JMP DSERR	//FATAL!, BOTH WANT ACCESS
DSFREE,	TAD DSBASE	//OK
	CIA		//
	DCA I X		//PUT IN MY REQUEST
	CDF 10		/BACK TO EMULATOR FIELD
	TAD I DSSLOT	/GET HIS REQUEST FUNCTION WORD
	AND C7770	/ZERO THE UNIT NUMBER FIELD
	TAD ZTEM1	/ADD THE TRUE UNIT NUMBER
	DCA I DSSLOT	/THIS IS THE COMPLETED FUNCTION WORD
	TAD I DSSLOT	/
	AND C70		/GET VIRTUAL FIELD NUMBER
	TAD I DSBASE
	TAD (-EMULATE+INCORE
	DCA I DSBASE	/MAKE INCORE REQUEST
	JMS MONITOR
	   SIGNAL
	   BSSLOT
	TAD DSBASE
	TAD (USLOT	/BS SLOT
	JMS DEFER
	DCA .+3
	JMS MONITOR
	   WAIT
	   0
	MQL		/SAVE REAL FIELD
	TAD I DSSLOT
	AND (7707	/STRIP VIRTUAL FIELD #
	MQA		/INSERT REAL FIELD #
	DCA I DSSLOT
	TAD DSSLOT	/POINTER TO DTV !
	JMS MONITOR
	   CALL
RNAME,	   "S^100+"Y&3777	/THE SYSTEM DRIVER
	 JMP .-3	/HANG ON
	DCA DSSLOT	/THE SLOT WHERE WE WILL GET COMPLETION
	JMS MONITOR
	   WAIT
DSSLOT,	   0
	SZA		//
	 AC4000		//MAKE A FATAL ERROR
	CDF 10		/BE SURE !
	DCA I DSUAC	/PUT THE COMPLETION CODE IN HIS ACCUMULATOR
	TAD DSBASE
	TAD (UASEM-1	/SETUP POINTER TO UASEM
	DCA DSSLOT	/IN OUR BG TABLE
DSASLP,	ISZ DSSLOT
	TAD I DSSLOT	/LOOK AT ENTRY
	SNA		/IS IT FREE ?
	 JMP DSASFR	/YES, GO PUT IN MY NAME
	CIA
	TAD DSNAME	/WAS IT ALREADY USED BY ME ?
	SZA CLA
	 JMP DSASLP	/NO, SOME OTHER TASK, LOOK FOR MORE
DSASFR,	TAD DSNAME
	DCA I DSSLOT	/OK, PUT MY NAME IN UASEM TABLE
	SKP
DSERR,	AC0002		/RETURN SPECIAL BUSY CODE
DSRTRN,	JMS MONITOR
	   EXIT
DSEXIT,	TAD DSLOCK	/SET POINTER TO
	DCA ZTEM1	/LOCK TABLE
	TAD M10		/
	DCA ZTEM2	/SET UNITS COUNTER
	CDTOIF		//LOCKS IN THIS TASK
DSCLLP,	TAD I ZTEM1	//GET A LOCK
	SNA		//
	 JMP DSCLNX	//IF ZERO GO ON
	TAD DSBASE	//IS IT MY LOCK ?
	SNA		//
	 DCA I ZTEM1	//YES, CLEAR IT
	SZA CLA		//WAS IT ANOTHER USER ?
	 DCA DSUAC	//YES, SIGNAL NOT ALL CLEARED (WAS NON-ZERO)
DSCLNX,	ISZ ZTEM1	//NEXT LOCK LOC
	ISZ ZTEM2	//MORE SLOTS ?
	 JMP DSCLLP	//YES
	CDF 10		/
	TAD DSUAC	/ALL LOCKS ZEROED ?
	SNA CLA		/
	 JMP DSRTRN	/NO, WAIT FOR OTHER RELEASE
	TAD RNAME	/GET NAME OF HANDLER USED
	DCA RRNAME	/STORE FOR CLOSE
	JMS MONITOR	/CLOSE CALL TO DRIVER
	   CALL
RRNAME,	   0
	 NOP		/QUITE UNLIKELY
	CLA		/MOST PROBABLY HE RETURNS -1
	JMS MONITOR	/YES, FORGET EVERYTHING (SWPOUT OR RELEASE)
	   EXIT RELEASE

DSUAC,	1234		/ALWAYS NON-ZERO
LOCKS,	ZBLOCK 10
	PAGE
	$-$-$