File: USR8.RA of Tape: Sources/Multi8/m-ra1-f1-15-6-81
(Source file text)
DSRN=4244 HPLACE=5200 HKEY=2761 MAXCOR=121 SECT8 USRS8 / /THIS ROUTINE SETS UP, AT THE TOP OF THE RALF PROGRAM, A /ROUTINE WHICH CALLS THE OS/8 USR (USER SERVICE ROUTINE). /IT IS NECESSARY TO DO THIS BECAUSE THE FORTRAN IV LOADER /MAY LOAD ANY ROUTINE IN THE RESERVED AREA FOR THE /OS/8 USR (10000 - 11777) AND FIELD 1 RES (17400-17777) /ALL THIS IS SKIPPED FOR THE 'RELEASE' FUNCTION AND /WE GO DIRECTLY TO THE HANDLER AND BUFFER CLEANUP CODE. / 0 CLA CMA TAD #FUNCT /IF RELEASE CALL CLNHAN ONLY SNA CLA JMP #USCLN / /MOVE USR CALLING ROUTINE TO DEFINED LOCATION /I.E. PROTECT LOCS 10000-11777, 17400-17777 / TAD #USRLC+1 DCA TEMQ TAD #USRLD+1 DCA TEMQ2 TAD M400 DCA TEMQ3 #FUSR, HLT /**RA CDF ORIG. FIELD OF USRUSR TAD% TEMQ2 #FD1, HLT /**RA CDF RELOCATED FIELD OF USRUSR DCA% TEMQ ISZ TEMQ M400, -400 /NOP ISZ TEMQ2 SKP TAD K10 /IF NEW FIELD INC CDF TAD #FUSR DCA #FUSR ISZ TEMQ3 JMP #FUSR /SET FIELDS AND CALL IT #FD2, HLT /**RA THIS DATA-FIELD #FI1, HLT /**RA CIF TO RELOCATED 'USRUSR' TAD #FUNCT JMS% #USRLC+1 #SB, 0 /START BLOCK OF FILE AND **RA CLOSE BLKS NOBLKS, 0 /LENGTH OF FILE ENTPT, 0 /HANDLER ENTRY POINT TWOPAG, 0 /**RA GET 0,1,2 PAGE INDICATOR SZA JMP USREX /GET OUT IF ERROR CLA CLL CMA RTL /=-3 TAD #FUNCT SMA SZA CLA JMP #USCLN /CLOSE: CALL CLNHAN / /FOR INPUT/OUTPUT MOVE HANDLER TO APPROPRIATE BUFFER / UCDF, CDF 0 TAD ENTPT JMS SEDSRN /DSRN #1: ENTRY POINT TAD TWOPAG CLL CIA SNA JMP RESIDE /0 MEANS RESIDENT HANDLER TAD #LHNDR+1 /BUMP DOWN CEILING FOR NEW HANDLER DCA #LHNDR+1 SNL CLA CMA TAD #LHNDR /DON'T FORGET HIGH ORDER DCA #LHNDR TAD #LHNDR CLL RTL RAL DCA% HANKEY /SAVE THESE BITS IN FIELD 0 TAD% HANKEY /WE NEED THEM FOR NEW HCW TAD UCDF /WE HAVE TO BUILD CDF HERE DCA FD3 /BECAUSE **RA IS NOT INFORMED YET. TAD #LHNDR+1 DCA TEMQ TAD KHPLC DCA TEMQ2 TAD TWOPAG CIA DCA TEMQ3 USRL4, CDF 0 TAD% TEMQ2 FD3, CDF 0 /NEW HANDLER FIELD DCA% TEMQ ISZ TEMQ2 ISZ TEMQ K10, 10 /NOP ISZ TEMQ3 JMP USRL4 /BUILD UP NEW DSRN TABLE FOR THIS UNIT / / /DSRN #1: DONE ON PREV PAGE CDF 0 TAD #LHNDR+1 /THIS HANDLER IS NON-RESIDENT TAD% HANKEY /FIELD BITS FROM BEFORE RESIDE, DCA% HANKEY /THIS HANDLER IS RESIDENT TAD #FORMS /+FORMS CONTROL TAD% HANKEY /MAKES FINAL HCW JMS SEDSRN /DSRN #2: HHH.HH0.FFF.0CI TAD #LBUFF CLL RTL RAL TAD #LBUFF+1 JMS SEDSRN /DSRN #3: BBB.B00.FFF.000 TAD #LBUFF+1 JMS SEDSRN /DSRN #4: BUFFER POINTER CMA CLL RTL /-3 => AC JMS SEDSRN /DSRN #5: CHARACTER COUNTER TAD #SB JMS SEDSRN /DSRN #6: STARTING BLOCK JMS SEDSRN /DSRN #7: RELATIVE BLOCK = 0 TAD NOBLKS JMS SEDSRN /DSRN #8: LENGTH OF FILE JMS SEDSRN /DSRN #9: FLAG WORD WFU.000.000.00E USREX, DCA #ERUSR /CLEAR OR SET ERROR CDF CIF 0 /TRAP4 EXIT JMP% USRS8 TEMQ3, SEDSRN, 0 /FILL IN DSRN ENTRY DCA% #LDSRN+1 ISZ #LDSRN+1 JMP% SEDSRN #USCLN, HLT /**RA CIF TO 'CLNHAN' TAD #LDSRN+1 /PASS OUR SLOT JMS% #CLNLC+1 /GO AND FREE-UP CORE CDF 0 DCA% HANKEY /THIS HANDLER IS NOT NICE ANY MORE JMP USREX /BACK TO RALF U70, 70 KHPLC, HPLACE /LOCATION OF HANDLER IN F0 HANKEY, HKEY /LOCATION OF HKEY IN FRTS /MUST AGREE WITH VERSION!! #FUNCT, 0 /**RA XR 0 #ERUSR, 0 /**RA XR 1 #FORMS, 2 /**RA XR2 FORMS CONTROL 2=NO CONTROL #LHNDR, ZBLOCK 2 /**RA TOP OF CORE (MODIFIED HERE) #LBUFF, ZBLOCK 2 /**RA END OF PROGRAM (NEXT BUFFER) TEMQ, #LDSRN, ZBLOCK 2 /**RA START LOCATION OF DSRN ENTRY TEMQ2, #USRLC, ADDR USRUSR /**RA CHANGED TO REAL LOCATION OF 'USRUSR' /CHANGED TO KUSR BY 'USRS8' #USRLD, ADDR USRUSR /LOC OF 'USRUSR' AS LOADED /FIELD PART USED BY SECT FOR CDF #CLNLC, ADDR CLNHAN /**RA FIELD PART USED FOR CIF ORG .+177&7600 /NEXT PAGE /THIS IS A VERY TRICKY ROUTINE THAT RESHUFFLES THE /HANDLERS IN HIGH CORE. IT DELETES THE HANDLER COR- /RESPONDING TO THE SELECTED CHANNEL AND MOVES ALL /LOWER HANDLERS UP SO THAT WE GAIN THIS SPACE. /NATCHERLY WE ALSO CHANGE THE CORRESPONDING ENTRIES /IN THE DSRN LIST. (DSRN=DYNAMIC SORTING RATHER NOT) CLNHAN, 0 DCA CSLOT /OUR DSRN SLOT DCA #CLEN /CLEAR FOR FAST EXIT CLA STL RTL /=2 RDF TAD CCDF DCA CLNRET /SET CDI RETURN CDF 0 TAD% CSLOT SMA CLA /IS IT AN INTERNAL HANDLER? JMP CEXIT /YES, GIVE BACK 0 LENGTH ISZ CSLOT TAD% CSLOT SNA JMP CMBUF /RESIDENT, ONLY CLEAN BUFFER DCA CLOAD /OUR LOAD ADDRESS+FIELD TAD% TOPCOR /SET UPPER LIMIT OF MEMORY(BATCH) DCA CTRY CHLOOP, TAD CTRY DCA CLAST /LAST BOTTOM TAD C7600 /WALK DOWN THRU CORE TAD CTRY SNA JMP CMBUF /STOP IT IF FIELD THROUGH DCA CTRY /NEW ADDRESS TO TRY IF IN DSRN TAD CDSRN DCA CTEM /INIT DSRN POINTER TAD C10 CMA /MAKES -11! DCA CCNT /INIT DSRN SLOT COUNT LOOKLP, CLA IAC TAD C10 /ALSO 11 TAD CTEM DCA CTEM /NEXT SLOT TAD% CTEM AND C7600 /GET HCW ADDRESS CIA TAD CTRY /IS IT AT TRIAL VALUE? SNA CLA JMP CGOT /YES ISZ CCNT /NO - MORE SLOTS? JMP LOOKLP /YES - SEE IF WE FIND IT AFTER ALL JMP CHLOOP+2 /NOT IN DSRN, STEP DOWN CGOT, TAD CLOAD /IN DSRN, CHECK WHERE AND C7600 CIA TAD CTRY /COMPARED TO OUR SLOT SNA JMP SLOTIS /OUR SLOT, DO SPECIAL THINGS SMA CLA /IF -, PAST OUR SLOT: MOVE JMP CHLOOP /IF +, BEFORE OUR SLOT: SET BOTTOM TAD CLAST CIA TAD CTRY /THIS BOTTOM - LAST BOTTOM=HND SIZE DCA CCNT /COUNT FOR TRANSFER TAD CLOAD AND C70 TAD CCDF DCA CHANDF CHANDF, HLT /HANDLER DATA FIELD CLA CMA TAD CLAST DCA CLAST /TRANSFER FROM TOP TO BOTTOM TAD #CLEN /LENGHT OF HOLE TAD CLAST /+ OLD BOTTOM DCA CNEW /= NEW TOP TAD% CLAST DCA% CNEW /CNEW WILL END UP AS NEW BOTTOM ISZ CCNT JMP CHANDF CCDF, CDF 0 TAD% CTEM /CTEM STILL POINTING AT THIS HANDLERS HCW AND C77 /PICK OUT FIELD AND CI BITS TAD CNEW /FILL IN NEW SLOT DCA% CTEM JMP CHLOOP+2 /LOOP AND LEAVE 'CLAST' BOTTOM SLOTIS, TAD CLOAD AND C7600 CIA TAD CLAST /OLD BOTTOM - OUR SLOT IS SIZE OF HOLE DCA #CLEN /STORED POSITIVE FOR USRUSR JMP CHLOOP /LOOP AND SET BOTTOM TO OUR SLOT CMBUF, RIF TAD CCDF DCA CBFDF /FOR SETTING OUR DF ISZ CSLOT /OUR BCW TAD% CSLOT /TO 'CLNBUF' CBFDF, HLT #CBFIF, HLT /**RA CIF CLNBUF JMS% #CLBLC+1 CEXIT, DCA #CBLEN /SET DELETED BUFFER LENGHT CLNRET, HLT /CDI RETURN JMP% CLNHAN C10, 10 C70, 70 C77, 77 C7600, 7600 CTRY, 0 CCNT, 0 CLAST, 0 CNEW, 0 CLOAD, 0 CTEM, 0 CSLOT, 0 #CLEN, 0 /**RA XR 0 DELTED HANDLER LENGHT (POSITIVE) #CBLEN, 0 /**RA XR 1 DELETED BUFFER LENGHT (NEGATIVE) #CLBLC, ADDR CLNBUF /**RA FIELD PART USED FOR CIF CDSRN, DSRN-11+1 /POINTING AT HCW 1 SLOT BELOW DSRN TOPCOR, MAXCOR /BATCH PROTECTION ORG .+177&7600 /NEXT PAGE /THIS IS STILL ANOTHER ROUTINE WHICH MOVES THE /BUFFERS DOWN OVER THE DELETED BUFFER. IT IS EASIER /THAN 'CLNHAN' BECAUSE ALL BUFFERS ARE 400 LONG. /BUT WATCH IT, THEY CROSS FIELDS!! / CLNBUF, 0 DCA CBOTT /SAVE OUR BCW STL RTL /=2 RDF TAD CBCDF DCA CBRET TAD CBOTT /IF ZERO NO DELETION SNA CLA JMP CBRET /GIVE BACK LENGHT = 0 CBLOOP, CLL TAD CBOTT TAD C400 /TO NEXT BUFFER SZL /NEXT FIELD? TAD CB10 /YES INC FIELD BITS DCA CHIGH /NEXT BUFFER ADDRESS TAD CBDSRN DCA CBTEM /INIT DSRN POINTER TAD CB10 CMA /MAKES -11! DCA CBCNT /INIT DSRN SLOT COUNT CBCDF, CDF 0 CLA IAC TAD CB10 /ALSO 11 TAD CBTEM DCA CBTEM /NEXT SLOT TAD% CBTEM AND C7770 /GET BCW ADDRESS+FIELD CIA TAD CHIGH /IS IT AT TRIAL VALUE? SNA CLA JMP CBGOT /YES ISZ CBCNT /NO - MORE SLOTS? JMP CBCDF /YES - SEE IF WE FIND IT AFTER ALL TAD C7400 /TRANSPORT DELETED BUFFER LENGHT CBRET, HLT /NO UNIT IS END JMP% CLNBUF CBGOT, TAD CHIGH AND CB70 TAD CBCDF /MAKE CDF FROM DCA CBCDFF TAD CBOTT AND CB70 TAD CBCDF DCA CBCDFT /MAKE CDF TO TAD CBOTT AND C7400 DCA CBTRT /BLOCK ADDRESS TAD CBOTT DCA% CBTEM /BUILD NEW BCW ISZ CBTEM /GO TO BUFFER POINTER CMA TAD C400 /GIVES MASK 377 AND% CBTEM /MAKES POINTER 0-377 TAD CBTRT /+ NEW BASE DCA% CBTEM /STORE BACK MODIFIED TAD C7400 DCA CBCNT /BUFFER SIZE COUNT CBTRLP, TAD CBTRT TAD C400 /MAKE FROM ADDRESS DCA CBTRF CBCDFF, HLT /MADE HERE TAD% CBTRF /FROM CBCDFT, HLT DCA% CBTRT /TO ISZ CBTRT C7400, 7400 /NOP ISZ CBCNT /BUFFER DONE? JMP CBTRLP /NO - LOOP TAD CHIGH /SET NEW BOTTOM DCA CBOTT JMP CBLOOP /YES - MORE BUFFERS? CBOTT, 0 CHIGH, 0 CBTEM, 0 CBCNT, 0 CBTRF, 0 CBTRT, 0 CBDSRN, DSRN-11+2 /POINTING AT BCW 1 SLOT BELOW DSRN C400, 400 CB10, 10 C7770, 7770 CB70, 70 / SOME ROOM FOR EXPANSION!? ORG .+177&7600 /NEXT PAGE /USR CALLING SUBROUTINE FOR FORTRAN / / THIS ROUTINE IS MOVED TO THE TOP OF RALF CODE (BUFFERS) / BY 'USR8' BEFORE EXECUTING TO AVOID BEING OVERWRITTEN BY / THE OS/8 USR ROUTINE. IMPORTANT! NO NEED TO INITIALIZE / ANY NON **RALF CONSTANTS, A FRESH COPY OF 'USRUSR' IS / USED FOR EACH CALL. / / / / ENTER WITH FUNCTION CODE IN THE AC / 1 - RELEASE (CLOSE INPUT FILE) / 2 - LOOKUP (OPEN FOR INPUT) / 3 - ENTER (OPEN FOR OUTPUT) / 4 - CLOSE (CLOSE OUTPUT FILE) / / DEVICE, FILE NAMES, ETC. ARE STUFFED BY THE CALLING / PROGRAM BEFORE THIS SUBROUTINE IS CALLED. / / CALLING SEQUENCE: / JMS USRUSR / - START BLOCK OF FILE (RETURNED FOR CODE 2 & 3) / # OF BLOCKS FOR CLOSE SUPPLIED / - NUMBER OF BLOCKS IN FILE (RETURNED FOR CODE 2 & 3) / - ENTRY POINT OF HANDLER AS READ INTO PAGE 'HPLACE' / - 0 IF RESIDENT HANDLER, 200 IF ONE PAGE HANDLER / 400 IF TWO PAGE HANDLER / <RETURN> / / AC ON EXIT CONTAINS ERROR CONDITION: / 0 - NO ERROR / 1 - NO SUCH DEVICE / 2 - NO FILE OR NO SPACE / 3 - SYS: WRITE LOCKED / 4 - I-O ERROR / USRUSR, KUSR, 0 DCA FUNCTY /SAVE FUNCTION CODE TAD% KUSR DCA BLKS #USRDF, HLT /**RA SET DATA FIELD TO CURRENT FIELD IOF /NOP FOR MULTI8 / / ********SWAP CORE FOR USR CALL / CCIF, CIF 0 JMS% K7607 /CALL SYSTEM HANDLER 5210 / WRITE 10000-11777 & 17400-17777 7400 27 JMP ERR3 /SYS: WRITE-LOCKED? CIF 0 JMS% K7607 /READ IN USR 610 ERRNO, 0 /*K* 13 JMP ERR4 /DEVICE ERROR CIF 0 JMS% K7607 /READ IN FIELD ONE TABLES 210 7400 37 JMP ERR4 /DEVICE ERROR / ********PERFORM USR FUNCTIONS CIF 10 JMS% K200 /RESET 13 0 CIF 10 JMS% K200 /INQUIRE 12 #DEV, 0423 /**RA 1 FP WORD DEVNO, 1300 / DSK: IS SET 0000 JMP ERR1 /ILLEGAL DEVICE TAD DEVNO+1 /SEE IF RESIDENT HANDLER SZA JMP HANOK /YES - NO NEED TO FETCH TWP, TAD HANSIZ TAD K200 DCA HANSIZ /SET SIZE TO 200,400 TAD DEVNO /DEVICE TO FETCH CIF 10 JMS% K200 1 /FETCH ENTRY, HPLACE /FIRST TIME: ONE PAGE SKP CLA /ERROR TRY 2-PAGE JMP HANOK /GOT HANDLER ISZ ENTRY /SET 2-PAGE TAD HANSIZ CLL RAR AND K200 SNA CLA /ALREADY TRIED 2-PAGE? JMP TWP /NO: TRY FOR 2-PAGE HLT /YES: IMPOSSIBLE ERROR! HANOK, SZA /RESIDENT? DCA ENTRY /YES - SAVE ENTRY POINT CLA CLL CMA RTL /=-3 TAD FUNCTY /IS IT ENTER ? SNA CLA /IF ENTER USE BLKS WHICH TAD BLKS /CONTAINS USER LENGTH TAD DEVNO /GET DEVICE NUMBER CIF 10 JMS% K200 /PERFORM FUNCTION FUNCTY, 0 /**USR AC #SB2, 0 /**RA ADDRESS OF '#FILE' BLKS, 0 /**USR ARG JMP ERR2 /FILE ERROR / ********RESTORE CORE CIF 0 JMS% K7607 /SAVE FIELD ONE TABLES 4210 7400 37 HLT EXIT2, CIF 0 JMS% K7607 /RESTORE CORE 1210 7400 27 HLT 6254 /SKIP ON MULTI8 ION #UEXIT, CIF CDF 0 /**RA RETURN TO #USRS8 TAD #SB2 /RETURN SB & #BLKS DCA% KUSR ISZ KUSR TAD BLKS /=0 FOR NON-FILE STRUCTURED CIA /WAS NEGATIVE SNA /NFS? CMA /YES - SET MAX NUMBER OF BLOCKS DCA% KUSR ISZ KUSR TAD ENTRY /RETURN ENTRY POINT DCA% KUSR ISZ KUSR TAD HANSIZ /RETURN HANDLER SIZE DCA% KUSR ISZ KUSR TAD ERRNO JMP% KUSR #FILE, ZBLOCK 6 /**RA 2 FP WORDS / HANSIZ=0: RESIDENT, =200: 1-PAGE, =400: 2-PAGE HANSIZ, 0 /SET BY LOOKUP,ENTER OR REL,CLOSE K7607, 7607 /SYSTEM HANDLER ENTRY POINT K200, 200 /USR ENTRY POINT ERR4, ISZ ERRNO /I-O ERROR ERR3, ISZ ERRNO /WL ERROR ERR2, ISZ ERRNO /NO FILE OR NO SPACE ERR1, ISZ ERRNO /NO SUCH DEVICE CLA CLL CMA RTL /=-3 TAD ERRNO /IF WL DON'T RESTORE SNA CLA JMP #UEXIT-2 JMP EXIT2 IFNZRO #DEV-637 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #FILE-744 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #LDSRN-167 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #LHNDR-163 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #LBUFF-165 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #USRLC-171 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #USRLD-173 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #CLNLC-175 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #CLBLC-352 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #SB-34 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #FUNCT-160 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #CLEN-350 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #SB2-701 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #FD1-15 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #FD2-30 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #FI1-31 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #FUSR-13 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #USRDF-604 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #UEXIT-722 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #USCLN-147 <LISTON : CHANGE REFERENCE IN USRS.RA> IFNZRO #CBFIF-330 <LISTON : CHANGE REFERENCE IN USRS.RA> END