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