.TITLE INDMCR -- MCR DISPATCHER TASK .IDENT -042- .LIST MEB ; ; ; ; ; ; ; COPYRIGHT 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MA 01754. ; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MA 01754. ; COPYRIGHT 1976, DIGITAL EQUIPMENT CORP., MAYNARD, MA 01754. ; ; ; THE MATERIAL INCLUDED IN THIS FUNCTIONAL SPECIFICATION, ; INCLUDING BUT NOT LIMITED TO INSTRUCTION TIMES AND OPERATING ; SPEEDS, IS FOR INFORMATION PURPOSES ONLY. ALL SUCH MATERIAL ; IS SUBJECT TO CHANGE WITHOUT NOTICE. CONSEQUENTLY, DEC MAKES ; NO CLAIM AND SHALL NOT BE LIABLE FOR ITS ACCURACY. ; ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; ; UNLESS OTHERWISE SPECIFIED, THE TERMS "RSX" AND "RSX-11" ; IMPLY "RSX-11D". ; ; ; ; ; MODULE: "MCR DISPATCHER" ; VERSION: V41 ; AUTHOR: H.A. NICHOLS. ; DATE: 14-NOV-74 ; ; ; MODIFICATIONS: ; ; NO. DATE PROGRAMMER PURPOSE ; --- ---- ---------- ------- ; 008 10-APR-75 H. NICHOLS ; 009 30-MAY-76 J. MASSE ADD SUPPORT FOR INDIRECT ; MCR (...AT.). ; 010 19-JAN-77 R. BROWN IAS '$$$' SUPPORT ; ; .PAGE .MCALL CALL,QIOW$,DIR$,RQST$,EXIT$S,MRKT$,CMKT$,ASTX$S,SDRQ$ .PSECT PURE,RO MCRSTR: MOV .CRTSK,R0 ;GET MY ATL NODE - DO A CHECK TO MAKE MOV #.ATLLH,R1 ;SURE ONLY ONE VERSION OF MCR IS ACTIVE 1$: MOV (R1),R1 ;PER TERMINAL AT ANY TIME. CMP R0,R1 ;IS THIS ME? BEQ 1$ ;YES - THEN GET NEXT ATL NODE CMP R1,.ATLLH+2 ;END OF ATL LIST? BEQ 5$ ;YES - THEREFORE NO OTHER MCR ACTIVE ;ON THIS TERMINAL. CMP A.TD(R0),A.TD(R1) ;COMPARE STD ADDRESSES BNE 1$ ;NOT THE SAME! - TRY NEXT ATL NODE CMP A.TI(R0),A.TI(R1) ;TI ADDRESSES THE SAME? BNE 1$ ;NO - TRY NEXT ATL NODE. JMP EXIT ;YES -- RETURN 5$: MOV A.TI(R0),R5 ;GET THE PUD FOR THIS TERMINAL. 10$: MOV U.TF(R5),LGOST ;SAVE LOGON/LOGOF STATUS. MOV #6,R3 ;SET UP TO GET 96 BYTES FROM POOL CALL ..PICV BCC 15$ JMP ERR2 15$: MOV .CRTSK,R0 ;GET MY ATL ADDRESS. MOV A.TI(R0),R0 ;GET TI ADDRESS. MOV R0,M.TI(R4) ;MOVE TI ADDRESS INTO MCR BUFFER. MOV U.UI(R0),RQST+R.QSPC ;MOVE UIC INTO REQUEST DPB. MOV R4,-(SP) ;SAVE BUFFER ADDRESS 20$: ADD #M.BF,R4 ;POINT TO DATA AREA OF BUFFER MOV #BUFPRM,WTQIO+Q.IOPL ;MOVE IN BUFFER ADDRESS MOV #5,WTQIO+Q.IOPL+2 ;AND LENGTH MOV #'$,WTQIO+Q.IOPL+4 ;AND CARRIAGE CONTROL MOV R4,RDQIO+Q.IOPL ;STORE IN READ DPB DIR$ #WTQIO ;WRITE OUT THE PROMPT. BCS 27$ TSTB IOSB ;DID WRITE FAIL? BMI 25$ MOV .MCRTO,MRKTIM+M.KTMG ;SET TIMEOUT VALUE DIR$ #MRKTIM ;SET MCR TIMEOUT BCS 27$ DIR$ #RDQIO ;READ IN THE REPLY BCS 27$ DIR$ #CANMKT BCS 27$ TSTB IOSB ;DID READ FAIL? BMI 25$ ; ; TST IOSB+2 ;DID USER TYPE SOMETHING? BNE 30$ 25$: JMP ERR1 ;NO,EXIT MCR 27$: JMP 110$ 30$: CLR R3 ;COUNTER FOR MULTIPLE BLANKS. MOV R4,R5 ;SET UP TO REMOVE HT'S AND MOV R4,R1 ;MULTIPLE BLANKS FROM THE INPUT MOV R4,R2 ;LINE ADD IOSB+2,R5 ;SET UP THE END OF LINE MARKER ; 35$: CMPB #11,(R2) ;IS THE POINTER LOOKING AT AN HT BNE 40$ ;NO - SKIP MOVB #40,(R2) ;YES - CONVERT IT TO A BLANK 40$: CMPB #40,(R2)+ ;IS THE POINTER LOOKING AT A BLANK BNE 50$ ;NO - GO MOVE THE CHARACTER CMPB #40,-1(R1) ;YES - IS PREVIOUS CHARACTER A BLANK? BNE 50$ ;NO, CONTINUE INC R3 BR 60$ 50$: MOVB -1(R2),(R1)+ 60$: CMP R2,R5 ;FINISHED? BNE 35$ ;NO - DO MORE CHARACTERS ; SUB R3,R5 ;REFLECT THE BLANK DELETIONS SUB R3,IOSB+2 ;DITTO MOVB IOSB+1,(R5) ;PUT TERMINATION CHRACTER IN BUFFER MOV R4,R0 ;SET UP TO CONVERT TASK NAME CALL $CAT5 ;TO RAD 50 BIT #UT.LG,LGOST ;IS THIS TERMINAL LOGGED ON? BNE 70$ ;IF NE THEN ALREADY LOGGED ON. CMP HELLO,R1 ;IS USER NOW LOGGING ON? BEQ 80$ ;+008 IF YES, THEN LET HIM. MOV #PLSLO,R4 CLR IOSB+2 ;FAKE A ZERO LENGTH COMMAND LINE MOV (SP),R2 ;RETRIEVE THE COMMAND LINE POINTER MOVB #15,M.BF(R2) ;TERMINATE ZERO LENGTH LINE WITH A C.R MOV HELLO,DIRERR+4. ;MCRERR SHOULD RQST "HELLO" UPON TERMINATION BR 130$ ; 70$: CMPB #'@,(R4) ; +++009 IS FIRST CHARACTER AN "AT" SIGN? BNE 75$ ; +++009 NO -- CONTINUE MOV (PC)+,R1 ; +++009 YES -- SET UP R1 TO CALL '...AT.' .RAD50 /AT./ ; +++009 BR 95$ ; +++009 GO REQUEST '...AT.' ; 75$: CMP LOG,R1 ;IS THIS JUST A COMMENT? BEQ 150$ ;IF SO, JUST RETURN A COMMENT CMPB #';,(R4) ;IS THIS JUST A COMMENT? BEQ 150$ ;IF SO , JUST RETURN A PROMPT CMPB #'!,(R4) ;IS THIS JUST A COMMENT? BEQ 150$ ;IF SO JUST RETURN A PROMPT 80$: MOV DDDDOT,RQST+R.QSTN ;TRY '...' NAME FIRST /IAS/ ;RLB010 MOV #FNNR,R5 MOV #COMFN,R4 MOV MFT,RQST+R.QSTN+2 ;ASSUME SPECIAL FUNCTION 90$: CMP R1,(R4)+ BEQ 100$ SOB R5,90$ 95$: ; +++009 MOV R1,RQST+R.QSTN+2 ;TASK NAME INTO REQUEST DPB 100$: DIR$ #RQST ;REQUEST THE APPROPRIATE TASK BCC 160$ ;EXIT IF NO ERRORS CMP #-2,$DSW ;TASK NOT INSTALLED? /IAS/ ;RLB010 BNE 110$ ;NO - SOME OTHER ERROR /IAS/ ;RLB010 MOV DOLLAR,RQST+R.QSTN ;TRY THE '$$$' VERSION /IAS/ ;RLB010 DIR$ #RQST ;REQUEST THE '$$$' VERSION /IAS/ ;RLB010 BCC 160$ ;YEA-IT WORKED!! /IAS/ ;RLB010 110$: MOV #NENMSG,WTQIO+Q.IOPL MOV #NENLEN,WTQIO+Q.IOPL+2 CMP #-1,$DSW BEQ 140$ MOV #MCRMSG,R5 MOV MCR,DIRERR+4. ;MCRERR SHOULD RQST "MCR" UPON TERMINATION 120$: MOVB (R5)+,R4 BEQ 130$ CMPB (R5)+,$DSW BNE 120$ 130$: MOVB R4,DIRERR MOVB IOSB+2,DIRERR+1 BEQ 135$ MOV IOSB+2,R3 CMP #18.,R3 BGE 132$ MOV #18.,R3 132$: MOV #DIRERR+8.,R4 MOV (SP),R5 ADD #M.BF,R5 133$: MOVB (R5)+,(R4)+ SOB R3,133$ 135$: MOV DDDDOT,DIRERR+2. DIR$ #SDRQDD BR ERR1 ; 140$: DIR$ #WTQIO ;WRITE OUT ERROR MESSAGE BCS ERR1 TSTB IOSB ;DID WRITE FAIL BMI ERR1 150$: MOV (SP),R4 ;NOW TRY AGAIN - RESTORE BUFFER ADDRESS JMP 20$ 160$: MOV (SP)+,R1 ;GET BUFFER ADDRESS MOV RQST+R.QSTN+2,M.TN(R1) ;MOVE IN TASK NAME MOV IOSB+2,M.BC(R1) ;MOVE CHARACTER COUNT INTO BUFFER MOV #.MCRLH,R4 ;SET BUFFER INTO MCR LIST CALL ..NADD ;ADD TO LIST CMPB #15,IOSB+1 ;WAS THE TERMINATOR A CARRIAGE RETURN BEQ EXIT ;YES - THEN DO NOT RETURN THE CARRIAGE AGAIN ERR2: MOV #1,WTQIO+Q.IOPL+2 ;RETURN THE CARRIAGE. CLR WTQIO+Q.IOPL+4 ;NO OTHER CARRIAGE CONTROL DIR$ #WTQIO EXIT: EXIT$S ;EXIT ERR1: MOV (SP)+,R1 MOV #6,R3 CALL ..NADV BR ERR2 KILMCR: DIR$ #KILQIO TST (SP)+ ASTX$S .PAGE SDRQDD: SDRQ$ MCRERR,,,,,DIRERR CANMKT: CMKT$ KILQIO: QIOW$ IO.KIL,1,2,,KIIOSB .EVEN NENMSG: .ASCII <15><12>/MCR -- NOT ENOUGH NODES TO SERVICE REQUEST/<15><12> NENLEN=.-NENMSG .EVEN HELLO: .RAD50 /HEL/ MCR: .RAD50 /MCR/ MFT: .RAD50 /MFT/ LOG: .RAD50 /LOG/ DDDDOT: .RAD50 /.../ DOLLAR: .RAD50 /$$$/ /IAS/ ;RLB010 MCRMSG: .BYTE NTINS,-2 .BYTE HNNRE,-6 .BYTE TACTI,-7 .BYTE DSABL,-8. .BYTE UNKDI,0 .EVEN BUFPRM: .ASCII <15>/MCR>/ .EVEN COMFN: .RAD50 /ABOALTCANDISENAFIXLOARESUNF/ FNNR=.-COMFN/2 .PAGE .PSECT IMPURE.RW DIRERR: .BLKW 13 MRKTIM: MRKT$ 2,.MCRTO,2,KILMCR RDQIO: QIOW$ IO.RLB,1,1,,IOSB,,<0,80.,40> WTQIO: QIOW$ IO.WLB,1,1,,,, RQST: RQST$ ...MCR LGOST: .WORD 0 ;CONTAINS LOGON STATUS FROM PUD. IOSB: .BLKW 2 KIIOSB: .BLKW 2 .END MCRSTR