File: DC.TK of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text) 

/DC.TK 12-JUN-80
/**UASEM VERSION**
/THIS TASK MAKES ACCESSIBLE THE RLC DISK PARTITIONS IN DRIVES 
/0,1, 2 AND 3 ON A MULTI-RL 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 RL0C,RL1C,...RL3C IF PRESENT IN YOUR OS/8

/IT TAKES THE USERS PARAMETERS FROM HIS DATA-AREA AND
/PASSES THE REQUEST ON TO THE FAKE SC SYSTEM DRIVER.
/OR TO THE NON-SYSTEM NS DRIVER IF RL IS NON-SYSTEM.

IFDEF SYRL01 <
MASDEV="S^100+"C&3777	/THE FAKE SC SYSTEM DRIVER >
IFDEF NSRL01 <
MASDEV="N^100+"S&3777	/THE NON-SYSTEM RL DRIVER >

	*200

DCNAME,	"D^100+"C&3777	/NAME IS DC
	200		/ONE PAGE SHOULD BE SUFFICIENT
DCLOCK,	LOCKS		/UNITS LOCK TABLE
DCBASE,	0

DC,	DCA DCBASE	/THIS IS OUR HOLY CUSTOMER
	TAD DCBASE
	TAD (UAC
	DCA DCUAC	/MAKE SURE DCUAC NON-ZERO
	SZL		/IS THIS THE END ?
	 JMP DCEXIT	/YES, RELEASE THIS TASK
	AC0003		/SELECT ONLY 4 UNITS
	AND I DCUAC	/UNIT NUMBER
	CLL RAL		/NO B DEVICES WHEN C
	DCA ZTEM1	/UNIT 0-6 EVEN
	TAD DCUAC
	TAD (UDTV-UAC	/SAME LITERAL
	DCA DCSLOT	/DTV POINTER
	TAD ZTEM1	/GET UNIT AGAIN
	TAD DCLOCK	/INDEX IN LOCK TABLE
	CDTOIF
	JMS DEFER	//GET TABLE ENTRY
	SNA		//ANY LOCK ACTIVATED ?
	 JMP DCFREE	//NO, UNIT WAS FREE YET
	TAD DCBASE	//COMPARE LOCK WITH USER ID
	SZA CLA		//SAME USER ?
	 JMP DCERR	//FATAL!, BOTH WANT ACCESS
DCFREE,	TAD DCBASE	//OK
	CIA		//
	DCA I X		//PUT IN MY REQUEST
	CDF 10		/BACK TO EMULATOR FIELD
	TAD I DCSLOT	/GET HIS REQUEST FUNCTION WORD
	AND C7770	/ZERO THE UNIT NUMBER FIELD
	TAD ZTEM1	/ADD THE TRUE UNIT NUMBER
	DCA I DCSLOT	/THIS IS THE COMPLETED FUNCTION WORD
	TAD I DCSLOT	/
	AND C70		/GET VIRTUAL FIELD NUMBER
	TAD I DCBASE
	TAD (-EMULATE+INCORE
	DCA I DCBASE	/MAKE INCORE REQUEST
	JMS MONITOR
	   SIGNAL
	   BSSLOT
	TAD DCBASE
	TAD (USLOT	/BS SLOT
	JMS DEFER
	DCA .+3
	JMS MONITOR
	   WAIT
	   0
	MQL		/SAVE REAL FIELD
	TAD I DCSLOT
	AND (7707	/STRIP VIRTUAL FIELD #
	MQA		/INSERT REAL FIELD #
	DCA I DCSLOT
	STL		/*K* INDICATE C UNIT TO NS
	TAD DCSLOT	/POINTER TO DTV !
	JMS MONITOR
	   CALL
RNAME,	   MASDEV	/EITHER NS OR SC
	 JMP .-3	/HANG ON
	DCA DCSLOT	/THE SLOT WHERE WE WILL GET COMPLETION
	JMS MONITOR
	   WAIT
DCSLOT,	   0
	SZA		//
	 AC4000		//MAKE A FATAL ERROR
	CDF 10		/BE SURE !
	DCA I DCUAC	/PUT THE COMPLETION CODE IN HIS ACCUMULATOR
	TAD DCBASE
	TAD (UASEM-1	/SETUP POINTER TO UASEM
	DCA DCSLOT	/IN OUR BG TABLE
DCASLP,	ISZ DCSLOT
	TAD I DCSLOT	/LOOK AT ENTRY
	SNA		/IS IT FREE ?
	 JMP DCASFR	/YES, GO PUT IN MY NAME
	CIA
	TAD DCNAME	/WAS IT ALREADY USED BY ME ?
	SZA CLA
	 JMP DCASLP	/NO, SOME OTHER TASK, LOOK FOR MORE
DCASFR,	TAD DCNAME
	DCA I DCSLOT	/OK, PUT MY NAME IN UASEM TABLE
	SKP
DCERR,	AC0002		/RETURN SPECIAL BUSY CODE
DCRTRN,	JMS MONITOR
	   EXIT
DCEXIT,	TAD DCLOCK	/SET POINTER TO
	DCA ZTEM1	/LOCK TABLE
	TAD M4		/
	DCA ZTEM2	/SET UNITS COUNTER
	CDTOIF		//LOCKS IN THIS TASK
DCCLLP,	TAD I ZTEM1	//GET A LOCK
	SNA		//
	 JMP DCCLNX	//IF ZERO GO ON
	TAD DCBASE	//IS IT MY LOCK ?
	SNA		//
	 DCA I ZTEM1	//YES, CLEAR IT
	SZA CLA		//WAS IT ANOTHER USER ?
	 DCA DCUAC	//YES, SIGNAL NOT ALL CLEARED (WAS NON-ZERO)
DCCLNX,	ISZ ZTEM1	//NEXT LOCK LOC
	ISZ ZTEM2	//MORE SLOTS ?
	 JMP DCCLLP	//YES
	CDF 10		/
	TAD DCUAC	/ALL LOCKS ZEROED ?
	SNA CLA		/
	 JMP DCRTRN	/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

DCUAC,	1234		/ALWAYS NON-ZERO
LOCKS,	ZBLOCK 4
	PAGE
	$-$-$