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 $-$-$