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

/DN.TK 12-JUN-80
/**UASEM VERSION**
/THIS TASK MAKES ACCESSIBLE THE PUBLIC DISK PACKS IN DRIVES 
/1, 2 AND 3 ON A MULTI-RK05/RL01 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 RKA0-RKB0,RKA1-RKB1,...RKB3
/ OR RL0A-RL0B,...RL3A-RL3B IF PRESENT IN YOUR OS/8 SYSTEM
/
/IT TAKES THE USERS PARAMETERS FROM HIS DATA-AREA AND
/PASSES THE REQUEST ON TO THE PUBLIC DRIVER.

	*200

DNNAME,	"D^100+"N&3777	/NAME IS DN
	200		/ONE PAGE SHOULD BE SUFFICIENT
DNLOCK,	LOCKS		/UNITS LOCK TABLE
DNBASE,	0

DN,	DCA DNBASE	/THIS IS OUR HOLY CUSTOMER
	TAD DNBASE
	TAD (UAC
	DCA DNUAC	/MAKE SURE DNUAC NON-ZERO
	SZL		/IS THIS THE END ?
	 JMP DNEXIT	/YES, RELEASE THIS TASK
	TAD C7		/
	AND I DNUAC	/UNIT NUMBER
	DCA ZTEM1	/UNIT 0-7
	TAD DNUAC
	TAD (UDTV-UAC	/SAME LITERAL
	DCA DNSLOT	/DTV POINTER
	TAD ZTEM1	/GET UNIT AGAIN
	TAD DNLOCK	/INDEX IN LOCK TABLE
	CDTOIF
	JMS DEFER	//GET TABLE ENTRY
	SNA		//ANY LOCK ACTIVATED ?
	 JMP DNFREE	//NO, UNIT WAS FREE YET
	TAD DNBASE	//COMPARE LOCK WITH USER ID
	SZA CLA		//SAME USER ?
	 JMP DNERR	//FATAL!, BOTH WANT ACCESS
DNFREE,	TAD DNBASE	//OK
	CIA		//
	DCA I X		//PUT IN MY REQUEST
	CDF 10		/BACK TO EMULATOR FIELD
	TAD I DNSLOT	/GET HIS REQUEST FUNCTION WORD
	AND C7770	/ZERO THE UNIT NUMBER FIELD
	TAD ZTEM1	/ADD THE TRUE UNIT NUMBER
	DCA I DNSLOT	/THIS IS THE COMPLETED FUNCTION WORD
	TAD I DNSLOT	/
	AND C70		/GET VIRTUAL FIELD NUMBER
	TAD I DNBASE
	TAD (-EMULATE+INCORE
	DCA I DNBASE	/MAKE INCORE REQUEST
	JMS MONITOR
	   SIGNAL
	   BSSLOT
	TAD DNBASE
	TAD (USLOT	/BS SLOT
	JMS DEFER
	DCA .+3
	JMS MONITOR
	   WAIT
	   0
	MQL		/SAVE REAL FIELD
	TAD I DNSLOT
	AND (7707	/STRIP VIRTUAL FIELD #
	MQA		/INSERT REAL FIELD #
	DCA I DNSLOT
	CLL		/*K* THIS EMULATOR ONLY CALLS RL0A-B
	TAD DNSLOT	/POINTER TO DTV !
	JMS MONITOR
	   CALL
RNAME,	   "N^100+"S&3777	/THE NON-SYSTEM DRIVER
	 JMP .-3	/HANG ON
	DCA DNSLOT	/THE SLOT WHERE WE WILL GET COMPLETION
	JMS MONITOR
	   WAIT
DNSLOT,	   0
	SZA		//
	 AC4000		//MAKE A FATAL ERROR
	CDF 10		/BE SURE !
	DCA I DNUAC	/PUT THE COMPLETION CODE IN HIS ACCUMULATOR
	TAD DNBASE
	TAD (UASEM-1	/SETUP POINTER TO UASEM
	DCA DNSLOT	/IN OUR BG TABLE
DNASLP,	ISZ DNSLOT
	TAD I DNSLOT	/LOOK AT ENTRY
	SNA		/IS IT FREE ?
	 JMP DNASFR	/YES, GO PUT IN MY NAME
	CIA
	TAD DNNAME	/WAS IT ALREADY USED BY ME ?
	SZA CLA
	 JMP DNASLP	/NO, SOME OTHER TASK, LOOK FOR MORE
DNASFR,	TAD DNNAME
	DCA I DNSLOT	/OK, PUT MY NAME IN UASEM TABLE
	SKP
DNERR,	AC0002		/RETURN SPECIAL BUSY CODE
DNRTRN,	JMS MONITOR
	   EXIT
DNEXIT,	TAD DNLOCK	/SET POINTER TO
	DCA ZTEM1	/LOCK TABLE
	TAD M10		/
	DCA ZTEM2	/SET UNITS COUNTER
	CDTOIF		//LOCKS IN THIS TASK
DNCLLP,	TAD I ZTEM1	//GET A LOCK
	SNA		//
	 JMP DNCLNX	//IF ZERO GO ON
	TAD DNBASE	//IS IT MY LOCK ?
	SNA		//
	 DCA I ZTEM1	//YES, CLEAR IT
	SZA CLA		//WAS IT ANOTHER USER ?
	 DCA DNUAC	//YES, SIGNAL NOT ALL CLEARED (WAS NON-ZERO)
DNCLNX,	ISZ ZTEM1	//NEXT LOCK LOC
	ISZ ZTEM2	//MORE SLOTS ?
	 JMP DNCLLP	//YES
	CDF 10		/
	TAD DNUAC	/ALL LOCKS ZEROED ?
	SNA CLA		/
	 JMP DNRTRN	/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

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