.TITLE *** REASSIGN MCR FUNCTION *** / / COPYRIGHT (C) 1975 / DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / / THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY / ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH / THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS / SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO- / VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON / EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO / THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE / SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. / / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE / WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM- / MITMENT BY DIGITAL EQUIPMENT CORPORATION. / / DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY / OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY / DEC. / .EJECT / EDIT #36 7/14/76 SCR MODIFY HANDLER TO CORE LOGIC / EDIT #37 7/29/76 SCR CHANGE TIMOUT LOGIC / / / MCR FUNCTION -- REASSIGN 13 JAN 72 R. MCLEAN / 8 MAY 1972 W. DESIMONE, S. DELLER / 30 AUG 1974 M.HEBENSTREIT / 27 JAN 1975 M.HEBENSTREIT / 27 JUNE 75 M. HEBENSTREIT / / TASK NAME "...REA" TO REASSIGN A LOGICAL UNIT NUMBER / / THE FIRST LINE OF THE COMMAND INPUT FOR ANY MCR / FUNCTION IS READ BY THE RESIDENT MCR TASK ("...MCR"). / FOR THE "REASSIGN" FUNCTION, THERE IS ONLY ONE LINE OF / COMMAND INPUT, AND IT'S SYNTAX IS AS FOLLOWS: / / SYNTAX = 'REA'$ / $ / (/) / = " "/"," / = 1-6 ALPHANUMERIC CHARACTERS / = NEW DEVICE TO BE ASSIGNED / = OLD DEVICE TO BE REMOVED / = LUN NUMBER TO BE USED / = CAR RTN / = ALTMODE / = NON BREAK CHARACTER / =" THE EMPTY SET" / $ -- " ANY NUMBER OF "INCLUDING ZERO " / / THE RESIDENT MCR READS A LINE, FETCHES THE / FIRST THREE CHARACTERS TO FORM THE MCR FUNCTION TASK / NAME ("...REA"), FLUSHES CHARACTERS THRU THE FIRST / BREAK CHARACTER, REQUESTS "...REA", AND EXITS / THE TASK "...REA " PROCESSES THE REMAINDER OF THE LINE / AND IF THE REQUEST IS VALID, EXECUTES THE APPROPRIATE "REASSIGN" / REQUEST. / / IF THE COMMAND INPUT LINE IS TERMINATED BY A CAR RTN, / THE RESIDENT MCR TASK IS REQUESTED, AND THE FUNCTION TASK / EXITS. / / IF THE COMMAND INPUT LINE IS TERMINATED BY AN ALTMODE, THE / FUNCTION TASK EXITS WITHOUT REQUESTING "...MCR". A ^C TYPEIN / IS THEN NECESSARY TO RE-ESTABLISH MCR DIALOGUE. / / IF THE NEW DEVICE IS A DISK, THEN OPTIONALLY THE USER / MAY SPECIFY A UFD TO BE ASSOCIATED WITH THE DISK/LUN PAIR. / E.G. MCR>REA 5 RP0 DT2. IF NO UFD IS SPECIFIED THEN / REA WILL TRY TO OBTAIN A DEFAULT UFD NAME FROM THE / DISK-UFD TABLE. .TITLE *** MCR FUNCTION 'REASSIGN' / MCRRI=171 CURTSK=135 TTMCTT=200 TTDVTT=201 ECLA=641000 .INH=705522 .ENB=705521 LUN1=142 LUN2=143 LUFD1=304 DUFD1=306 AFTP1=144 FAC=174 IDX=ISZ PENP=115 R1=101 R2=102 SPRI=126 X10=10 PDVL=252 ATKL=244 / REA LAC* (LUN1) /PICK UP LUN POINTER DAC LUNPTR TCA /DETERMINE THE SIZE OF THE LUN TABLE TAD* (LUN2) DAC LUNMAX DZM MCRCNT /MCR CONTROL TTY CHANGED INDICATOR DZM TDVCNT /TDV CONTROL TTY CHANGED INDICATOR DZM UFDNAM /ZERO UFD NAME IN CASE NEW DEV IS A DISK. DZM SVSLS /CLEAR SLASH FLAG LAW -1 DAC TTCNTS /SET UP THE CONTROL TTY CHANGED FALG DAC TTCNTD /SET UP THE TDV TTY CHANGED FLAG LAC (LUNTAB-1) DAC* (X10) /STORE POINTER TO BEGINNING OF LUNTABLE AND (070000) /MASK OFF PAGE BITS DAC MXADJ /SAVE COMPLEMENT OF XADJ TCA DAC XADJ /SAVE INDEX REGISTER ADJUSTMENT DZM UNTTMP /CLEAR TEMP STORAGE / / GET THE LUN NUMBERS / REAN2 LAW -4 /MAX LUN NUMBER IS 999 DAC CNT DZM LUNTMP DZM ONCEFL /SET UP FILES FLAG LAC (MES9-2) DAC MESSET /RESET MESSAGE REAN1 JMS* (FAC) /PICK UP A CHARACTER SAD (040) /IS IT A BLANK? JMP NEWDEV /YES GO LOOK AT THE REST OF THE LINE . SAD (054) /IS IT A COMMA? JMP NXTLUN /YES PICK UP NEXT LUN NUMBER TO BE SAVED AAC -57 /CHECK TO SEE IF LUN NUMBER IS OCTAL SPA /IS IT LESS THAN 60? JMP ERR1 /YES SYNTAX ERROR AAC -13 /IS IT GREATER THAN 71? SMA JMP ERR1 /YES SYNTAX ERROR AAC 12 TAD LUNTMP /FORM LUN NUMBER DAC LUN CLL MUL /LUN NUMBERS IN OCTAL 12 LACQ DAC LUNTMP /SAVE INCASE THIS IS NOT ALL THE NUMBER ISZ CNT /IS LUN NUMBER TOO LARGE? JMP REAN1 JMP ERR1 /SYNTAX ERROR LUN TOO LARGE A NUMBER NXTLUN LAC LUN TAD LUNPTR AAC -1 DAC* X10 /STORE LUN NUMBER IN LUN POINTER TABLE LAC LUN SAD (1) /CHECK FOR LUN 1 (ILLEGAL TO REASSIGN) JMP ERR1 /SYNTAX ERROR SAD (2) /IS IT MCR CONTROL TTY? ISZ MCRCNT /YES SET UP TO CHANGE CONTROL SAD (14) /IS IT MCR CONTROL TTY? ISZ TDVCNT /YES SET UP TO CHANGE CONTROL TCA IAC TAD LUNMAX /IS LUN NUMBER GREATER THAN TABLE END? SPA JMP ERR1 /YES SYNTAX ERROR JMP REAN2 /NO PICK UP NEXT LUN / / CHECK FOR LEGAL LUNS / NEWDEV LAC LUN TAD LUNPTR /SAVE LAST LUN FOUND IN TABLE AAC -1 DAC* X10 LAC LUN SAD (1) /IS IT LUN-1 JMP ERR1 /YES SYNTAX ERROR SAD (2) /IS IT MCR CONTROL TTY? ISZ MCRCNT /YES SETUP TO CHANGE CONTROL SAD (14) /IS IT MCR CONTROL TTY? ISZ TDVCNT /YES SET UP TO CHANGE CONTROL TCA IAC TAD LUNMAX /DETERMINE IF LUN TOO LARGE SPA JMP ERR1 /YES SYNTAX ERROR / / GET NEW DEVICE / CLA /INDICATE NO CHAR IN AC JMS GETDEV /PICK UP DEVICE NAME AND UNIT NUMBER AAC 56 /ADD A . DAC REQNAM DAC FIXNAM /(036) PLACE NAME IN FIX CAL DAC UFXNAM /(036) AND TO UNFIX CAL LAC MCRCNT /ARE WE REASSIGNING THE MCR TTY? SNA JMP MCROK /NO -- PROCEED NORMALLY LAC REQNAM /YES -- IS NEW DEVICE A TTY? SAD (242456 /(242456)=(TT.) IN SIXBT SKP /YES -- OK JMP ERR2 /NO -- DECLARE AN ERROR MCROK PLA /GET UNIT NUMBER DAC NEWUNT /SAVE IT / / CHECK FOR A DISK, AND IF SO LOOK FOR A UFD NAME / LAC REQNAM /IS NEW DEV A DISK? SAD (222056 /RP? JMP RP /YES SAD (220656 /NO -- RF? JMP RF /YES SAD (221356 /NO -- RK? SKP JMP NOTDSK /NO LAC (24 /YES -- SAVE DEVICE CODE SKP RP LAC (3 SKP RF LAC (2 DAC DEVICE /SAVE CODE PLA /STORE UNIT NUMBER DAC UNIT DSK1 JMS* (FAC /READ A CHAR SAD (40 /SPACE? JMP DSK1 /YES -- IGNORE SAD (74 /? SKP JMP ERR1 /NO -- FORMAT ERROR JMS* (FAC /YES -- GET NEXT CHAR SAD (40 /CHECK FOR BREAK CHAR (SPACE OR COMMA) JMP NOTDSK SAD (54 JMP NOTDSK JMP ERR1 /NOT A BREAK -- ERROR DSK2 DAC TEMP /SAVE CHAR LAC DEVICE /TRY TO GET UFD NAME FROM DSIK-UFD TABLE SAD (2 JMP RF1 SAD (3 JMP RP1 LAC (10 /RK SKP RP1 CLA SKP RF1 LAC (20 TAD UNIT /ADD UNIT NUMBER TO OFFSET TAD* (DUFD1 /ADD BASE OF TABLE JMS SETXR /PREPARE TO GET DEFAULT UFD NAME LAC 0,X /GET NAME SNA /IS DISK MOUNTED? JMP ERR20 /NO -- ERROR DAC UFDNAM /YES -- SAVE DEFAULT UFD NAME LAC TEMP /RESTORE CHAR IN AC SKP / / GET OLD DEVICE / NOTDSK CLA /INDICATE NO CHAR IN AC OLDLUN JMS GETDEV /PICK UP OLD LUN NAME DAC OLDNAM LAC* (X10) /SAVE POINTER TO LAST LUN POINTER IN TABLE DAC LASTUN PLA /PICK UP UNIT NUMBER DAC OLDUNT LAC (LUNTAB) /PICK UP LUN TABLE POINTER DAC LUNADR LAC* LUNADR /PICK UP THE POINTER TO THE PDVL DAC CNT LAC* CNT SZA /CHECK FOR NONE JMP NOTNON /NO MUST BE OK SAD OLDNAM JMP LUNCK JMP ERR2 NOTNON AAC 2 DAC DEVNAM /POINTER TO THE DEVICE NAME AAC 3 DAC DEVUNT /POINTER TO THE DEVICE UNIT NUMBER AAC 3 DAC DEVTEV /POINTER TO PDVL TRIGGER EV ADDRESS LAC* DEVNAM /PICK UP THE DEVICE NAME SAD OLDNAM /IS IT CORRECT? SKP /YES JMP ERR2 /INCORRECT NAME ERROR LAC* DEVUNT /IS THE UNIT NUMBER CORRECT SAD OLDUNT SKP /YES JMP ERR3 /OLD UNIT NUMBER INCORRECT ERROR LAC* DEVTEV SZA /IS THE HANDLER INITIALIZED? JMP LUNCK /YES LAC DEVTEV /SEE IF REA. INHIBIT IS ON. IAC DAC TMPA LAC* TMPA SPA JMP ERR7 /YES -- REA. INHIBITED JMP ERR13 /NO -- HANDLER NOT INITIALIZED LUNCK LAC* LASTUN /PICK UP THE POINTER TO THE LUN SLOT DAC TMPB /SAVE IT LUNCKK LAC* LUNADR DAC TMPA /SAVE POINTER TO LUN SLOT LAC* TMPA /LOOK AT THE ADDRESSES OF THE PDVL NODES SAD* TMPB /TO SEE IF THEY ARE THE SAME SKP /SAME PDVL? JMP ERR4 /NO INCORRECT ASSIGNMENT LAC LUNADR ISZ LUNADR SAD LASTUN /ARE WE AT THE END OF THE TABLE? SKP JMP LUNCKK /NO CHECK NEXT LUN LAC REQNAM /CHECK FOR NONE AAC -56 /SUBTRACT . SNA JMP STORNO /YES DON'T REQUEST NONE REQTSK LAC* (PDVL) PVDLSR TAD XADJ PAX LAC 2,X AAC 56 /ADD A . SAD REQNAM JMP FNDNAM NOTUNT LAC 0,X /PICK UP NEXT POINTER TO PVDL TABLE SAD (PDVL) JMP ERR2 JMP PVDLSR /SEARCH NEXT NODE FNDNAM PXA /SAVE NEW PVDL POINTER FOR LUN TABLE DAC NEWPVD LAC 5,X /PICK UP UNIT NUMBER SAD NEWUNT /IS IT THE CORRECT ONE? SKP JMP NOTUNT /NO TRY AGAIN LAC 2,X /CHECK FOR NAMES OF TTA OR DSK SAD TTA /IS THIS THE TELETYPE JMP UPDLUN SAD DSK /IS THIS THE DISK? JMP UPDLUN /YES DON'T REQUEST (NO STL NODE) LAC 11,X /IS REASSIGN INHIBITED? SPA JMP ERR7 /YES ISSUE ERROR MESSAGE LAC UFDNAM /IS A DISK THE NEW DEVICE? SZA JMS MFD /YES -- GO CHECK THE MFD FOR UFD / / ***** BEGINNING OF MAJOR MODULE FOR EDIT #36 / CAL FIX /(018) TASK TO CORE POSSIBLE? LAC EV /(018) NO WIAT NECESSARY SAD (-202 /(018) ALREADY ACTIVE JMP UPDLUN /(018) YUP, ALL SET SAD (-207 /(018) ALREADY FIXED?!? JMP SCNATL /(018) SCAN ATL TIL CLEARS SPA /(018) POSITIVE IS OK JMP ERR6 /(018) CAN'T INIT HANDLER SCNATL .INH /(018) SCAN ATL FOR HANDLER NAME FIX0 LAC* (ATKL /(018) ADDR OF FIRST NODE FIX1 DAC TMPA /(018) SAVE SAD (ATKL /(018) DONE SCANNING JMP REQIOH /(018) YES, GO REQ HANDLER IAC /(018) TO SET UP AUTO-INCR FOR NAME DAC* (X10 /(018) LAC* X10 /(018) FIRST HALF OF NAME IN ATL SAD REQNAM /(018) THE ONE WE'RE SEARCHING SKP JMP FIX2 /(018) MISSED, TO NEXT NODE LAC* X10 /(018) SECOND HALF SAD REQNAM+1 /(018) JMP FIXWAT /(018) STILL THERE, WAIT AND TRY AGAIN FIX2 LAC* TMPA /(018) FORWARD POINTER FROM NODE .ENB /(018 SYSTEM BACK IN AFTER DAC DAC TMPB /(018) / / SYSTEM BACK IN HERE IF ANYONE OF GREATER IMPORATANCE / HAS BEEN WAITING / .INH /(018) NOW SYSTEM OURS AGAIN LAC* TMPA /(018) DID NODES IN QUESTION MOVE SAD TMPB /(018) JMP FIX1 /(018) NOPE, CONTINUE JMP FIX0 /(018) YES, START AGAIN AT TOP!!!! / FIXWAT .ENB /(018) SYSTEM BACK IN CAL (5 /(018) WAIT FOR ANY SIGN EVENT JMP SCNATL /(018) DO ATL AGAIN REQIOH .ENB /(018) SYSTEM BACK IN CAL REQCPB /REQUEST DEVICE TASK CAL UNFIX /(018) UNFIX IT LAW -13 /(037) TIMOUT LOOP DAC TMPA /(037) # OF 1/10 SEC WAITS IDLE LAC NEWPVD /(020) IF HANDER CAME IN, THE TRIGGER IS SET PAX /(036) ALREADY PAGE RELATIVE LAC 10,X /(020) GET TRIGGER SZA /(037) SKIP IF NOT SET JMP UPDLUN /(037) HAS BEEN SET, GO ON ISZ TMPA /(037) # OF RETRIES EXCEEDED SKP /(037) NOT YET JMP REQM /(037) YES CAL TIMIT /(037) WAIT FOR PIREX INITIALIZATION OF HANDLER CAL WAIT /(037) 1/10 SEC JMP IDLE /(037) GO CHECK TRIGGER SET / / ***** END OF MAJOR MODULE EDIT #36 / UPDLUN LAC MCRCNT /CHECK FOR CONTROL TTY CHANGED SNA JMP UPDLUA /NO DON'T CHANGE CONTROL LAC NEWPVD /PICK UP PDVL POINTER PAX LAC 2,X SAD TTA /IS IT A TTY? SKP /YES OK JMP UPDLUA /NO DON'T CHANGE CONTROL LAC* (TTMCTT) /SAVE THE CONTROL TTY NUMBER DAC TTCNTS /INCASE OF ATTACH LAC 5,X DAC* (TTMCTT) /YES CHANGE CONTROL TTY UPDLUA LAC TDVCNT /CHECK FOR TDV CONTROL TTY CHANGED SNA JMP UPDLUB /NO DON'T CHANGE CONTROL LAC NEWPVD /PICK UP PDVL POINTER PAX LAC 2,X SAD TTA /IS IT TTY? SKP /YES OK JMP UPDLUB /NO DON'T CHANGE CONTROL LAC* (TTDVTT) /SAVE THE CONTROL TTY NUMBER DAC TTCNTD /INCASE OF ATTACH LAC 5,X DAC* (TTDVTT) /YES CHANGE CONTROL OF TDV UPDLUB LAC NEWPVD /GET PDVL POINTER TAD MXADJ /SUBTRACT THE PAGE BITS STORNO PAL LAC (LUNTAB) /SET UP TO INSERT NODE POINTER DAC LUNADR SETUP LAC* LUNADR /PICK UP THE LUNT TABLE POINTER DAC TMPA LAC* (LUN1) TCA DAC TEMP TAD* LUNADR /DETERMINE THIS LUN NUMBER TAD* (AFTP1) /FIND THE AFT TABLE POINTER DAC TMPB LAC TEMP /FIND LUN-UFD POINTER TAD* LUNADR TAD* (LUFD1 DAC TMPC PLA /SAVE LIMIT REGISTER DAC UNTTMP LAC* LUNADR DAC CNT LAC* CNT /POINT TO ASSING INHIBIT FALG AAC 11 DAC CNT .INH /INHIBIT INTERRUPTS TO PREVENT ATTACH LAC ONCEFL /ONLY DONE ONCE SZA JMP NODKCK /DONE IGNORE ISZ ONCEFL /UPDATE FLAG LAC* CNT /PICK UP FILES FLAG RAL SMA /SET? JMP NODKCK /NO FORGET IT .ENB /YES PRINT MESSAGE LAC (MES12-2) DAC MESSET /SET UP MESSAGE ASKGN CAL ATTCH /ATTACH TO TTY CAL ATTCH2 CAL MES9CP CAL WFTEV CAL DETCH CAL DETCH2 CAL TYINCP /REQUEST ANSWER CAL WFTEV LAC TTYEV SPA JMP ATTFL SAD (1) /EV OK CAL CRTN /RETURN CARRAGE LAC UNTTMP PAL /RESTORE LR LAC INPAR+2 /CHECK MESSAGE AND (774000) SAD YES /YES? JMP NODKCK /YES CONTINUE SAD NO /NO? JMP ATTFL /NO TRY NEXT CAL WHAT /TRY AGAIN JMP ASKGN NODKCK LAC (MES9-2) DAC MESSET /RESET MESSAGE .INH LAC* TMPB /PICK UP THE DEVICE ATTACHED FLAG SNA JMP NOTATT /NOT ATTACHED TO THE DEVICE OK .ENB /ATTACHED GO ASK WHAT TO DO ASKREA CAL ATTCH /ATTACH TO CONSOLE TTY CAL ATTCH2 ASKAGN CAL MES9CP CAL WFTEV CAL TYINCP /REQUEST ANSWER CAL WFTEV LAC TTYEV /CHECK EVENT VARIABLE SPA /IS IT POSITIVE? JMP ATTFL /NO -SOME ERROR DON'T REASSIGN SAD (1) /RETURN CARRAGE ON ALTMODE CAL CRTN LAC INPAR+2 /PICK UP THE MESSAGE AND (774000) SAD YES /IS IT A YES? JMP DET /GO DETACH THE DEVICE SAD NO /IS IT A NO ANSWER JMP ATTFL /YES CLEAN UP CAL WHAT /? TRY AGAIN JMP ASKAGN DET CAL DETCH CAL DETCH2 /DETACH THE TTY'S LAC UNTTMP /RESTORE LR PAL LAC* LUNADR /PICK UP THE PDVL NODE ADDRESS DAC UNTTMP .INH /INHIBIT INTERRUPTS TO PREVENT INTERRUPTS THAT MAY CAUSE REASSIGNMENT LAC* TMPB /DECREMENT TRANSFERS PENDING COUNT SNA /MAKE SURE DEVICE IS STILL ATTACHED JMP NOTATT /DEVICE HAS BEEN DETACHED TAD XADJ PAX LAC 5,X /FIND THE PARTITION BLOCK ADDRESS TAD XADJ PAX LAC 7,X /DECEMENT COUNT SZA AAC -1 DAC 7,X DZM* TMPB /CLEAR THE LUN ATTACH LAC* UNTTMP TAD XADJ PAX DZM 4,X /CLEAR THE DEVICE ATTACH NOTATT PLA /PICK UP NEW ASSIGNMENT DAC* TMPA /PUT IT IN THE TABLE LAC UFDNAM /ENTER UFD NAME IN LUN-UFD TABLE .ENB DAC* TMPC LAC LUNADR SAD LASTUN JMP REQOK /YES SEARCH FOR CARRTN ISZ LUNADR /NO CHECK NEXT LUN IN TABLE JMP SETUP /NO LOOK UNTIL ARE SET REQOK LAC OLDNAM /IS THE FILE NAME NONE? SNA JMP FLUSH /YES GO UPDATE LUN SLOTS ISZ DEVUNT /IS THERE A QUEUE LAC* DEVUNT SAD DEVUNT SKP JMS REQACT /INSERT NODES STILL IN QUEUE MESSAGE LAC* (LUN1) /PICK UP LUN POINTER SKP NXTNOD IAC /CHECK NEXT LUN TAD XADJ /SET UP XR TO LOOK AT LUN SLOTS PAX LAC 0,X /LOOK AT A LUN POINTER AAC 2 /POINT TO PDVL NAME DAC CNT LAC OLDNAM /LOOK FOR A NAME MATCH SAD* CNT JMP FLUSH /ASSIGNMENT FOUND DON'T REQUEST HANDLER TO EXIT PXA /CHECK FOR THE END OF THE TABLE TAD MXADJ /SUBTRACT PAGE BITS SAD* (LUN2) /ARE WE AT THE END OF THE TABLE ? SKP JMP NXTNOD /NO TRY ANOTHER ENTRY LAC (400004) /RAISE TO LEVEL 5 TO PREVENT HANDLER ISA /FROM EXITING BEFORE ALL NODES HAVE BEEN FOUND LAC* (PDVL) TAD XADJ /ADD PAGE BITS PAX /SAVE IT IN XR NXTND LAC 2,X /PICK UP THE DEVICE NAME SAD OLDNAM /IS IT THE OLD NAME? SKP /YES SET ASSIGN INHIBIT FLAG JMP NOASGN /NO DON'T FLAG IT PXL /SAVE LAST NODE ADDRESS LAC 11,X /SET REASSIGN INHIBIT FLAG AND (377777) XOR (400000) DAC 11,X /RESTORE WORD LAC 10,X /SAVE TRIGGER EVENT VARIABLE ADDRESS DAC TRGGR DZM 10,X /CLEAR THE TRIGGER EVENT VARIABLE ADDRESS NOASGN LAC 0,X /IS THIS THE END OF THE TABLE? SAD (PDVL) JMP EXNOD /YES EXIT TAD XADJ /ADD PAGE BITS PAX JMP NXTND /SEARCH NEXT NODE EXNOD JMS* (PENP) /PICK UP A NODE FOR 777 REQUEST JMP ERR5 /EMPTY POOL ERROR DAC* (R2) /SAVE NODE ADDRESS FOR SPRI TAD XADJ PAX LAC* (CURTSK) AAC 6 /FIND A GOOD STL NODE ADDRESS DAC CNT LAC* CNT DAC 2,X DZM 3,X /CLEAR UNUSED WORDS DZM 7,X DZM 10,X DZM 11,X LAC (1002) /SET PRIORITY TO 514 DAC 4,X AAC -3 DAC 5,X /SET REQUEST TYPE TO 777 DZM 6,X /CLEAR EVENT VARIABLE ADDRESS PLA /PICK UP LAST NODE FOUND FOR 777 REQUEST TAD MXADJ /SUBTRACT PAGE BITS AAC 6 /POINT TO THE QUEUE DAC* (R1) JMS* (SPRI) /PUT NODE IN REQUEST QUEUE DBK /DEBREAK FORM LEVEL 5 LAC (401000) /SET SIGNIFICANT EVENT ISA .INH /INHIBIT INTERRUPTS LAC* TRGGR /LOOK AT TRIGGER AND (377776) /MASK OFF BITS XOR (400001) /SET Q I/O .ENB /ENABLE INTERRUPTS DAC* TRGGR FLUSH LAC SVSLS /PICK UP LAST CHARACTER READ SKP /CHECK IT TO SEE IF IT IS A SLASH FLUSHA JMS* (FAC) /PICK UP A CHARACTER SAD (057) /IS THERE A SLASH TO REQUEST ANOTHER REA REQUEST JMP REA /YES PICK UP NEXT SEQUENCE SAD (015) /FLUSH FOR CAR RTN OR ALTMODE JMP REQM SAD (175) JMP ALTEXT JMP FLUSHA ALTEXT DZM* (MCRRI) /SET MCR REQUEST OK FLAGE CAL (10) /EXIT REQM CAL REQMCR /REQUEST MCR CAL (10) /EXIT / / ATTFL FLUSHES THE HANDLER IF NECESSARY WHEN THE OPERATOR / REFUSES TO REMOVE AN ATTACH REQUEST / ATTFL CAL DETCH CAL DETCH2 /DETACH THE TTY'S LAC REQNAM /PICK UP THE HANDLER NAME AAC -56 /REMOVE THE . SNA /IS THIS A REQUEST FOR NONE? JMP FLUSH /YES DON'T FLUSH HANDLER DAC OLDNAM /SET UP TO CHECK FOR OTHER ASSIGNMENTS LAC TTCNTS /IS THE CONTROL TTY CHANGED? SMA DAC* (TTMCTT) /YES -- RESTORE IT TO ORIGIONAL CONDITION LAC TTCNTD /IS THE TDV CONTROL CHANGED? SNA DAC* (TTDVTT) /YES RESTORE IT LAC* (LUN1) /PICK UP LUN POINTER AAC -1 JMP NXTNOD /GO CHECK THE HANDLER FOR REMOVAL / / REQACT - SUBROUTINE TO PACK THE DEVICE NAME / AND UNIT NUMBER INTO THE QUEUE STILL ACTIVE MESSAGE / REQACT 0 LAC OLDNAM /PICK UP THE NAME OF THE HANDLER LMQ /CONVERT THE NAME TO 5/7 ASCII ECLA!LLS 6 AAC 100 CLL!RAL LLS 6 AAC 100 CLL!RTL RTL AAC 4 /STORE IT IN THE DAC MES8A /NON EMPTY QUEUE MESSAGE CAL MES8CP CAL WFTEV JMP* REQACT /RETURN AFTER TYPING IS FINISHED / / GETDEV - PICKS UP THE DEVICE AND UNIT NUMBER / THE DEVICE NAME IS RETURNED IN AC AND THE / UNIT NUMBER IS IN THE LIMIT REGISTER / GETDEV 0 DAC TEMP /SAVE AC --- THERE MAY BE A CHAR IN IT CLLR /CLEAR LIMIT REGISTER TO ZERO DEVICE UNIT LAW -2 /MAXIMUM OF TWO CHARACTERS DAC CNT DZM UNTTMP DZM DEV /CLEAR TEMPORARY STORAGE LAC TEMP /IS THER A CHAR IN AC? SNA /SKIP IF SO LETLP JMS* (FAC) /PICK UP A LETTER AAC -100 SPA!CLL /IS IT LEGAL? JMP ERR1 /NO SYNTAX ERROR XOR DEV /ADD TO LAST LETTER FOUND ALS 6 DAC DEV /SAVE IT ISZ CNT /TWO CHARACTERS FOUND? JMP LETLP /NO PICK UP ANOTHER JMS* (FAC) /PICK UP A NUMBER SAD (116) /IS IT AN N? JMP NONE SKP /DON'T CHECK FOR AN N TWICE UNITLP JMS* (FAC) /PICK UP A NUMBER AAC -57 /CHECK FOR OCTAL NUMBER SPA!SNA JMP NONXA /NOT A NUMBER THEREFORE EXIT AAC -13 SMA JMP NONXB /NOT A NUMBER THEREFORE EXIT AAC 12 /MAKE OCTAL AND (17) /MASK TO FOUR BITS TAD UNTTMP /ADD ON PREVIOUS VALUES PAL /SAVE VALUE IN LIMIT REGISTER CLL MUL 12 LACQ /MULTIPLY BY 10 DAC UNTTMP JMP UNITLP NONXB AAC 13 /RESTORE CHARACTER NONXA AAC 57 SKP /DON'T READ A CHARACTER NONXIT JMS* (FAC) /PICK UP ANOTHER CHARACTER SAD (040) /IS IT A BLANK? JMP GETXIT SAD (054) /NO IS IT A COMMA? JMP GETXIT /YES EXIT SAD (015) /IS IT CAR RTN? JMP GETXIT /YES EXIT SAD (175) /IS IT ALTMODE? JMP GETXIT /YES EXIT SAD (057) /IS IT A SLASH? JMP SLSH /YES SAVE IT GETXIT LAC DEV /PICK UP DEVICE NAME JMP* GETDEV /OK RETURN NONE JMS* (FAC) /PICK UP ANOTHER CHARACTER SAD (105) /IS IT AN E? SKP!CLA JMP ERR1 /NO ERROR DZM DEV JMP NONXIT / SLSH DAC SVSLS /SAVE SLASH INDICATOR JMP GETXIT / / SUBROUTINE MFD -- MAKE SURE AN MFD ENTRY EXISTS FOR A UFD AND THAT / THE UFD IS PROPERLY INITIALIZED. / / ENTER WITH AC CONTAINING SIXBT NAME OF UFD AND / UNIT CONTAINING THE UNIT NUMBER AND / DEVICE CONTAINING THE DEVICE CODE. / / RETURN AT JMS+1 UNLESS AN ERROR IS DETECTED / / ALL REGISTERS ARE MODIFIED / MFD 0 DAC MFDNAM /SAVE THE NAME OF THE UFD JMS MFDSCN /SCAN THE MFD FOR THE UFD JMP MFDFND /RETURN HERE IF FOUND MFD1 CLA /RETURN HERE IF NOT -- LOOK FOR FREE ENTRY JMS MFDSCN /WAS A FREE MFD ENTRY FOUND? SKP JMP MFD2 /NO -- GO CREATE ONE DAC MFDT0 /YES -- SAVE MFD BLK WITH FREE ENTRY LAW -1 /SET STATING UFD BLK TO -1 FOR FREE ENT DAC 1,X LAC MFDT0 /GET THE MFD BLK NO. JMP MFDFND /GO ENTER NEW UFD MFD2 JMS MFDNEW /ALLOCATE A BLK AND INIT BUFFER DAC MFDT1 /SAVE NO. OF NEW BLOCK LAC MFDT0 /GET NO. OF LAST MFD BLK DAC BUFF+376 /ENTER NO. AS BACK PTR FOR NEW MFD BLK LAC MFDT1 /WRITE OUT NEW MFD BLK JMS MFDPUT LAC MFDT0 /GET NO. OF OLD MFD BLK JMS MFDGET /READ IT INTO BUFFER LAC MFDT1 /SET UP FWD PTR DAC BUFF+377 JMS MFDPUT /WRITE OUT OLD, MODIFIED MFD BLK LAC (BUFF /SET XR TO POINT AT BUFFER JMS SETXR LAW -1 /SET -1 INTO UFD ST. BLK DAC 1,X LAC MFDT1 /GET BLK OF MFD WITH FREE ENTRY MFDFND DAC MFDT0 /SAVE BLK NO. OF MFD BLK LAC 1,X /IS UFD ST. BLK DEFINED? SAD (-1 SKP JMP* MFD /YES -- RETURN PXA /NO -- SAVE XR DAC MFDT1 JMS MFDNEW /ALLO A BLK AND INIT BUFFER DAC MFDT2 /SAVE NEW UFD BLK NO. JMS MFDPUT /WRITE OUT NEW UFD BLK LAC MFDT0 /GET MFD BLK JMS MFDGET LAC MFDT1 /RESTORE XR PAX LAC MFDNAM /ENTER NAME OF UFD INTO MFD DAC 0,X LAC MFDT2 /ENTER START OF UFD INTO MFD DAC 1,X LAC (400010 /ENTER PC AND NO. WDS / UFD ENTRY DAC 2,X LAC MFDT0 /WRITE OUT MODIFIED MFD BLK JMS MFDPUT JMP* MFD /RETURN / MFDT0 0 MFDT1 0 MFDT2 0 MFDNAM 0 / / SUBROUTINE MFDSCN -- SCAN MFD FOR A UFD NAME / / ENTER WITH AC CONTAINING UFD NAME AND / UNIT CONTAINING UNIT NUMBER AND / DEVICE CONTAINING DEVICE CODE / / RETURN AT JMS+1 IF FOUND WITH AC=MFD BLK NO. AND XR POINTING / AT ENTRY (XR IS CORRECTED) / RETURN AT JMS+2 IF NOT FOUND WITH AC=LAST MFD BLK / / ALL REGISTERS ARE MODIFIED / MFDSCN 0 DAC MFDST1 /SAVE UFD NAME LAC DEVICE /IS DEVICE THE RP? SAD (3 JMP MFDS1 /YES LAC (1777 /NO -- RK OR RF , GET MFD ST. BLK SKP MFDS1 LAC (47040 MFDS4 DAC MFDST2 /SAVE MFD BLK NO. JMS MFDGET /READ IN MFD BLK LAC (BUFF /INIT PTR TO BUFFER DAC MFDST0 MFDS2 LAC* MFDST0 /GET THIS UFD NAME SAD MFDST1 /DOES IT MATCH THE ONE WANTED? JMP MFDS5 /YES LAC MFDST0 /NO -- END OF MFD BLK? SAD (BUFF+370 JMP MFDS3 /YES AAC 4 /NO -- PREPARE TO EXAMINE NEXT ENTRY DAC MFDST0 JMP MFDS2 /GO LOOK AT NEXT MFD ENTRY MFDS3 LAC BUFF+377 /GET NO. OF NEXT MFD BLK SAD (-1 /END OF MFD? SKP JMP MFDS4 /NO -- PREPARE TO READIN NEXT BLK IDX MFDSCN /YES -- PREPARE TO RET. AT JMS+2 MFDS6 LAC MFDST2 /GET MFD BLK INTO AC JMP* MFDSCN /RETURN MFDS5 LAC MFDST0 /GET THE POINTER TO MFD ENTRY JMS SETXR /ADJUST XR JMP MFDS6 /PREPARE TO RETURN AT JMS+1 / MFDST0 0 MFDST1 0 MFDST2 0 / / SUBROUTINE MFDNEW -- ALLOCATE A BLK AND INIT BUFFER / / ENTER WITH DEVICE AND UNIT SET UP / / RETURN AT JMS+1 WITH AC CONTAING BLK NO. / / ALL REGISTERS ARE MODIFIED / MFDNEW 0 LAC DEVICE /SET UP DEVICE AND UNIT NO. DAC ALLO+4 LAC UNIT CLL ALS 17 DAC ACTA+1 CAL ALLO /ALLOCATE A DISK BLOCK CAL WAIT LAC EV /WHERE THERE ANY ERROR? SPA JMP ERR21 /YES LAC ACTA+2 /NO -- DETERMINE BLK NO. LMQ LAC ACTA+1 AND (7777 LRSS 10 LAC (BUFF-1 /INIT BUFFER DAC* (X10 LAW -376 /INIT COUNTER DAC MFDTMP DZM* X10 /ZERO WDS 0-376 ISZ MFDTMP JMP .-2 LAW -1 /SET -1 INTO BLK PTRS DAC BUFF+376 DAC BUFF+377 LACQ /GET BLK NO. INTO AC JMP* MFDNEW /RETURN / MFDTMP 0 / / SUBROUTINE CONVRT -- CONVERT BLK NO. INTO PLATTER AND ADDR / / ENTER WITH BLK NO. IN AC / / RETURN AT JMS+1 UNCOND. / / AC IS MODIFIED / CONVRT 0 LMQ /PUT BLK INTO MQ CLL LLSS!ECLA 10 DAC GPCTA+0 /ENTER PLATTER INTO CTA LACQ DAC GPCTA+1 /ENTER ADDR INTO CTA LAC UNIT /ENTER UNIT NO. CLL ALS 17 TAD GPCTA+0 DAC GPCTA+0 JMP* CONVRT /RETURN / / SUBROUTINE MFDGET -- GET A DISK BLOCK / / ENTER WITH BLK NO IN AC / / RETURN AT JMS+1 WITH AC UNCHANGED / / ALL OHTER REG. ARE MOD / MFDGET 0 DAC MFDTMP /SAVE AC JMS CONVRT /CONVERT BLK NO INTO PLATTER + ADDR LAC DEVICE /ENTER DEVICE INOT CPB DAC GET+4 CAL GET /GET THE DISK BLK CAL WAIT LAC EV /ANY ERROR? SPA JMP ERR22 /YES LAC MFDTMP /NO -- RESTORE AC JMP* MFDGET / / SUBROUTINE MFDPUT -- WRITE OUT A DISK BLK / / ENTER WITH BLK NO. IN AC / / RETURN AT JMS+1 WITH AC UNCHANGED / / ALL OTHER REG ARE MOD. / MFDPUT 0 DAC MFDTMP /SAVE AC JMS CONVRT /ENTER PLATTER AND ADDR INTO CTA LAC DEVICE /SET UP DEVICE CODE DAC PUT+4 CAL PUT /WRITE OUT BLK CAL WAIT LAC EV /ANY ERROR? SPA JMP ERR23 /YES LAC MFDTMP /NO -- RESTORE AC JMP* MFDPUT /RETURN / SUBROUTINE UFD -- READ A CHAR AND CHECK FOR A LINE TERM / UFD 0 JMS* (FAC /READ A CHAR SAD (15 /IS IT A CR? JMP ERR1 /YES -- ERROR SAD (175 /NO -- ALTMODE? JMP ERR1 /YES -- ERROR AND (77 JMP* UFD /NO -- RETURN / / SUBROUTINE SETXR -- ADJUST THE XR / SETXR 0 TAD XADJ PAX JMP* SETXR / REQMCR 1 EV .SIXBT "...MCR" 0 / REQCPB 1 0 /(37) NO EV !! REQNAM 0 .SIXBT "..." 0 / MES8CP 2700 TTYEV 3 2 MES8-2 MES9CP 2700 TTYEV 3 2 MESSET MES9-2 WHAT 2700 0 3 3 MES10 TYINCP 2600 TTYEV 2 2 INPAR 4 CRTN 2700 0 3 2 MES11 ATTCH 2400 0 3 ATTCH2 2400 0 2 DETCH 2500 0 3 DETCH2 2500 0 2 / PUT 13100 EV 1 GPCTA XX GET 13000 EV 1 GPCTA XX GPCTA 0 0 BUFF 400 ALLO 11500 EV 1 ACTA XX ACTA 400 XX XX WAIT 20 EV / TYPCPB 2700 TTYEV 3 2 MES1-2 / WFTEV 20 TTYEV / / CAL'S FOR EDIT #36 / FIX 15 /FIX HANDLER TASK EV FIXNAM XX .SIXBT '...' / UNFIX 16 0 UFXNAM XX .SIXBT '...' / TIMIT 13 EV 6 /(037) 6 TICKS 1 /(037) TICKS ARE THE UNIT / / END OF EDIT #36 CODE TTYEV 0 EV 0 / TYPMSG DAC TYPCPB+4 CAL TYPCPB CAL WFTEV JMP REQM /PRINT ERROR MESSAGE AND REQ MCR ERR1 LAC (MES1-2) JMP TYPMSG ERR2 LAC (MES2-2) JMP TYPMSG /TYPE ERROR MESSAGE ERR3 LAC (MES3-2) JMP TYPMSG ERR4 LAC (MES4-2) JMP TYPMSG ERR5 LAC (MES5-2) JMP TYPMSG ERR6 LAC (MES6-2) JMP TYPMSG ERR7 LAC (MES7-2) JMP TYPMSG ERR13 LAC (MES13-2) JMP TYPMSG ERR20 LAC (MES20 JMP TYPMSG ERR21 LAC (MES21 JMP TYPMSG ERR22 LAC (MES22 JMP TYPMSG ERR23 LAC (MES23 JMP TYPMSG INPAR .BLOCK 4 XADJ 0 MXADJ 0 TMPA 0 TMPB 0 SVSLS 0 DEV 0 CNT 0 UNTTMP 0 DEVNAM 0 DEVUNT 0 DEVTEV 0 LASTUN 0 LUN 0 LUNADR 0 LUNMAX 0 LUNPTR 0 NEWPVD 0 LUNTMP 0 NEWUNT 0 OLDNAM 0 MCRCNT 0 TDVCNT 0 TRGGR 0 OLDUNT 0 TTCNTS 0 /CONTROL TTY SAVE TTCNTD 0 /TDV CONTROL SAV UFDNAM 0 UNIT 0 DEVICE 0 TMPC 0 TEMP 0 NON .SIXBT "NON" TTA .SIXBT "TT" DSK .SIXBT "DK@" LUNTAB .BLOCK 20 / MES2-MES1-2/2*1000+2 0 MES1 .ASCII "REA-SYNTAX ERR"<15> MES3-MES2-2/2*1000+2 0 MES2 .ASCII "REA-INCORRECT DEV"<15> MES4-MES3-2/2*1000+2 0 MES3 .ASCII "REA-INCORRECT UNIT"<15> MES5-MES4-2/2*1000+2 0 MES4 .ASCII "REA-INCORRECT LUN"<15> MES6-MES5-2/2*1000+2 0 MES5 .ASCII "REA-EMPTY POOL"<15> MES7-MES6-2/2*1000+2 0 MES6 .ASCII "REA-HANDLER TASK NOT IN SYSTEM"<15> MES8-MES7-2/2*1000+2 0 MES7 .ASCII "REA-REASSIGN INHIBITED"<15> MES9-MES8-2/2*1000+2 0 MES8 .ASCII "REA-I/O REQUEST QUEUE NOT EMPTY ON " MES8A .ASCII "DV "<15> MES10-MES9/2*1000+2 0 MES9 .ASCII "REA-DEVICE ATTACHED, DO YOU WISH TO DETACH? "<175> MES10 YES-MES10/2*1000+2 0 277 175 YES 544000 MES11 NO-MES11/2*1000+2 0 064000 NO 470000 15002 0 MES12 .ASCII 'REA-FILES OPEN ON DEVICE -- DO YOU STILL WISH TO REASSIGN?'<175> ONCEFL-MES13/2*1000+2 0 MES13 .ASCII "REA-OLD DEV NOT YET IN CORE"<15> ONCEFL 0 MES20 MES21-MES20/2*1000 0 .ASCII "REA-NO DEFAULT UFD AVAIL"<15> MES21 MES22-MES21/2*1000 0 .ASCII "REA-ALLOCATE ERROR"<15> MES22 MES23-MES22/2*1000 0 .ASCII "REA-DISK GET ERROR"<15> MES23 BUFF-MES23/2*1000 0 .ASCII "REA-DISK PUT ERROR"<15> BUFF .BLOCK 400 .END REA