.TITLE MULTI-FUNCTION TASK .IDENT /V01/ .NLIST TTM ;**-1 .LIST MEB ; ; ; ; ; ; ; COPYRIGHT 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASSACHUSETTS 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 SPECIFIED OTHERWISE, THE TERMS "RSX" AND "RSX-11" IMPLY ; "RSX-11D". ; ; ; ; ; VERSION: V01 ; ; AUTHOR HERB NICHOLS 4/15/75 ; ; MODIFIED BY: ; HERB NICHOLS 9/9/75 ;+001 ; HERB NICHOLS 9/29/75 ;+002 ; F. BORGER 5/78;TRY TO FIX BUG CRASHING SYSTEM ON ...ABO ; ; ;+ ;MCR FUNCTION -- MULTI-FUNCTION TASK FOR ABO,ALT,CAN,DIS,ENA ; ,FIX,LOA,RES,UNF ; ;NOTE -- MFT IS A PRIVILEGED TASK ; ; ; ;TASK NAME "...MFT" TO PERFORM ANY OF NINE FUNCTIONS ; ;THE FIRST LINE OF THE COMMAND INPUT FOR ANY MCR ;FUNCTION IS READ BY THE RESIDENT MCR TASK ("...MCR") ;FOR THE "MFT" FUNCTION, THERE IS ONLY ONE LINE OF COMMAND INPUT ; ;MFT CAN ONLY BE REQUESTED BY THE MCR TASK. ;IF THIS TASK IS REQUESTED BY ANOTHER TASK IT WILL EXIT WHEN ;IT ATTEMPTS TO READ THE MCR COMMAND LINE. ; ; ; ;- ; ; ; ; .MCALL CALL,RETURN,DIR$,QIOW$,EXIT$S,VSDR$,GMCR$ ; ; LOCAL SYMBOLS ; CR=15 ;CAR RTN LF=12 ;LINE FEED AM=33 ;ALTMDOE SPA=40 ;SPACE CA.COL=72 TILUN=5 ;LUN FOR TELETYPE ERROR OUTPUT PSEXP=177776 ;DEFINE PROCESSOR STATUS WORD .PAGE ; THE FOLLOWING SYMBOLS SERVE A DUAL PURPOSE ; ;FIRST, THEY ARE USED TO INDICATE THOSE ATTRIBUTES WHICH ARE ;LEGAL FOR EACH OF THE FUNCTIONS.(SEE LEGTAB BELOW) ; ;SECOND, THEY ARE SET IN THE FLAGS WORD "ATTRBM" WHEN THE CORRESPONDING ;SWITCH HAS BEEN ENCOUNTER IN THE ACTUAL REQUEST ; ; IT.NP=000001 IT.TI=000002 IT.PRI=000004 IT.PAR=000010 IT.UIC=000020 .PSECT PURE,RO ; ; LEGTAB: .WORD IT.NP!IT.TI ;LEGAL ABORT ATTRIBUTES .WORD IT.TI!IT.PRI ;LEGAL ALTER ATTRIBUTES .WORD IT.NP!IT.TI ;LEGAL CANCEL ATTRIBUTES .WORD 0 ;LEGAL DISABLE ATTRIBUTES .WORD 0 ;LEGAL ENABLE ATTRIBUTES .WORD IT.TI ;LEGAL FIX ATTRIBUTES .WORD IT.PAR!IT.UIC!IT.PRI ;LEGAL LOAD ATTRIBUTES .WORD IT.NP!IT.TI ;LEGAL RESUME ATTRIBUTES .WORD IT.TI ;LEGAL UNFIX ATTRIBUTES COMFN: ABO: .RAD50 /ABO/ ALT: .RAD50 /ALT/ .RAD50 /CAN/ .RAD50 /DIS/ .RAD50 /ENA/ .RAD50 /FIX/ LOA: .RAD50 /LOA/ .RAD50 /RES/ .RAD50 /UNF/ FNNR=.-COMFN/2 .PAGE .EVEN ; DIRTAB: .WORD 3.*400+83. ;ABORT DIRECTIVE .WORD 4.*400+9. ;ALTER PRIORITY DIRECTIVE .WORD 3.*400+25. ;CANCEL DIRECTIVE .WORD 3.*400+91. ;DISABLE DIRECTIVE .WORD 3.*400+93. ;ENABLE DIRECTIVE .WORD 3.*400+85. ;FIX DIRECTIVE .WORD 7.*400+11. ;LOA DIRECTIVE (ACTUALLY,EXECUTE) .WORD 3.*400+47. ;RESUME DIRECTIVE .WORD 3.*400+87. ;UNFIX DIRECTIVE ; KWTABL: PRI: .WORD CKPRI .RAD50 /PRI/ PAR: .WORD CKPAR .RAD50 /PAR/ UIC: .WORD CKUIC .RAD50 /UIC/ TI: .WORD CKTI .RAD50 /TI/ .WORD 0 .PAGE MSGADR: .WORD ABOMSG,ALTMSG,CANMSG,DISMSG,ENAMSG .WORD FIXMSG,LOAMSG,RESMSG .WORD UNFMSG ABOMSG: .BYTE NTINS,-2 .BYTE NTACT,-7 .BYTE LDGXT,-8. .BYTE CNABR,-10. .BYTE UNKDI,0 ALTMSG: .BYTE NTINS,-2 .BYTE NTACT,-7 .BYTE LDGXT,-8. .BYTE NPTSP,-96. ;+002 .BYTE UNKDI,0 CANMSG: .BYTE NTINS,-2 .BYTE UNKDI,0 DISMSG: .BYTE NTINS,-2 .BYTE NTNAB,-8. .BYTE CNDSB,-10. .BYTE UNKDI,0 ENAMSG: .BYTE NTINS,-2 .BYTE NDSAB,-8. .BYTE UNKDI,0 FIXMSG: .BYTE FXNUN,-1 .BYTE NTINS,-2 .BYTE MEMUN,-3 .BYTE HNNRE,-6 .BYTE TACTI,-7 .BYTE DSABL,-8. .BYTE FIXE,-9. .BYTE CNFI,-10. .BYTE CKPTB,-11. .BYTE UNKDI,0 LOAMSG: .BYTE INSFP,-1 .BYTE NTINS,-2 .BYTE PAR2S,-3 .BYTE HNNRE,-6 .BYTE TACTI,-7 .BYTE DSABL,-8. .BYTE INVUI,-91. .BYTE INVTI,-93. .BYTE NSUPA,-94. .BYTE INVPR,-95. .BYTE UNKDI,0 RESMSG: .BYTE NTINS,-2 .BYTE NTACT,-7 .BYTE NTSPN,-8. .BYTE UNKDI,0 UNFMSG: .BYTE NTINS,-2 .BYTE NTFIX,-9. .BYTE UNKDI,0 .PAGE TTYOUT: QIOW$ IO.WVB,TILUN,1,,,, SDRQDD: VSDR$ MCRERR,,,,,DIRERR,41. .PAGE .PSECT IMPURE,RW ; TEMPORARY STORAGE EXITFL: .BYTE 0 .EVEN TTYBUF: .ASCII <15><12>/XYZ -- ERR /<15><12> .EVEN KEYWRD: .WORD 0 ;CONTAINS THE SWITCH NAME DEVNAM: .WORD 0 ;CONTAINS DEVICE NAME IN SWITCH UNITA: .WORD 0 DIRERR: .BLKW 1 ;MUST BE ADJACENT TO MCR BUFFER DDDDOT=. .RAD50 /...MCR/ GMCR: GMCR$ ATTRBM: .WORD 0 ;HOLDS ACTUAL ATTRIBUTES OF COMMAND DFLTTI: .WORD 0 TBLOFS: .WORD 0 ;HOLDS OFFSET TO TABLES. FNCTON: .WORD 0 ;WILL HOLD RAD50 FUNCTION NAME. ; THE NEXT SEVEN WORDS WILL CONTAIN THE DPB FOR THE ; ULTIMATE DIRECTIVE WHICH IS ISSUED. DRCTIV: .WORD 0 TSKNAM: .BLKW 2 PARNAM: .BLKW 2 ALTPRI=PARNAM RQTPRI: .WORD 0 RQTUIC: .WORD 0 TSKFLA: .WORD 0 ; .PAGE .PSECT PURE,RO MFT: DIR$ #GMCR BCC 10$ ;ERROR WHILE READING THE MCR COMMAND LINE. MOV #CNRMC,R4 JMP COMERA 10$: CLRB EXITFL MOV #3,R1 ;CONVERT SPECIFIED FUNCTION TO RAD50 MOV #GMCR+G.MCRB,R2 MOV #FNCTON,R3 CALL ..ATRD SCNSPA: MOVB (R2)+,R5 ;SEARCH FOR A SPACE CMPB #SPA,R5 BEQ NXRQST ;FOUND SPACE SO START DECODING THE LINE CALL CKAMCR ;IS CHARACTER AN A.M. OR C.R.? BCS SCNSPA ;IF NOT CONTINUE SCAN JMP SYNTAX ;ELSE, SYNTAX ERROR ; NDRQST: JMP MFTCOM ; NXRQST: CLR ATTRBM ;CLEAR THE COMMAND ATTRIBUTES CLR TSKNAM+2 CALL CHKPRV BCC 5$ BIS #IT.NP,ATTRBM ;AT BEST ONLY A SUBSET AVAILABLE 5$: MOV R5,DFLTTI MOV #TSKNAM,R3 ;SET UP THE POINTER TO THE ;RADIX50 BUFFER FOR THE TASK NAME MOV #6,R1 ;MOVE UP TO 6 CHARACTERS CALL ..ATRD CMP FNCTON,LOA BNE 7$ CMP R1,#4 ;IS TASK NAME EXACTLY TWO CHARACTERS BNE 7$ ADD #34,TSKNAM ;PUT A "." IN TASK NAME MOV DDDDOT,TSKNAM+2 ;PUT 3 MORE ... INTO TASK NAME 7$: MOV #COMFN,R3 MOV #FNNR,R4 MOV R4,R5 10$: CMP (R3)+,FNCTON ;DETERMINE OFFSET FOR SPECIFIED FUNCTION BEQ 20$ SOB R4,10$ MOV #NTINS,R4 ;+++001 NO SUCH MFT FUNCTION JMP COMERA ;+++001 NOT UNDERSTOOD BY MFT 20$: SUB R4,R5 ASL R5 MOV R5,TBLOFS ;SAVE TO INDEX INTO VARIOUS TABLES CALL CKCHAR ;CHECK FOR TERMINATOR(CR. OR AM) BVS NDRQST ;FOUND DON'T CHECK FOR OPTIONS BCC CKOPT CMP FNCTON,LOA BNE SYNTAX CMP #4,R1 ;HAVE EXACTLY TWO CHARACTERS BEEN CONVERTED BNE SYNTAX CMPB #':,R5 ;DID CKCHAR ENCOUNTER A ":"? BNE CKOPT CKR2: MOVB (R2)+,R5 CKR5: CALL CKTAA BCSCK: BCS SYNTAX BVS NDRQST CKOPT: BIT #IT.NP,ATTRBM ;SWITCHES ILLEGAL IF NON-PRIVILEGED BNE ILLOP1 MOV #3,R1 MOV #KEYWRD,R3 CALL ..ATRD CMP #3,R1 BEQ SYNTAX ADD #3,R2 SUB R1,R2 CMPB #'=,(R2)+ BNE SYNTAX MOV #KWTABL,R4 ;DETERMINE WHICH SYNTACTIC ANALYZER TO INVOKE 10$: MOV (R4)+,R5 BEQ BADKWD CMP (R4)+,KEYWRD BNE 10$ JMP (R5) ;GO DO THE ANALYSIS CKPRI: BIS #IT.PRI,ATTRBM MOV #10.,R3 ;PRIME GETNUM FOR DECIMAL CONVERSION CALL GETNUM MOV R1,RQTPRI ;ASSUME PRIORITY IS FOR LOAD,REQUEST , ;EXECUTE,RUN,SCHEDULE,OR SYNCHRONIZE. BR CKR5 CKTI: BIS #IT.TI,ATTRBM MOVB (R2)+,DEVNAM MOVB (R2)+,DEVNAM+1 MOV #8.,R3 ;PRIME GETNUM FOR OCTAL CONVERSION CALL GETNUM MOV R1,UNITA CALL FYNPUD BCS NOPUD MOV R0,DFLTTI BR CKR5 SYNTAX: JMP SYNTAS BADPRI: MOV #INVPR,R4 BR ERREX1 ILLOP1: JMP ILLOPT NOPUD: MOV #DEVNI,R4 BR ERREX1 BADUIC: MOV #INVUI,R4 BR ERREX1 BADKWD: MOV #INVKW,R4 ERREX1: JMP ERREX CKPAR: BIS #IT.PAR,ATTRBM MOV #PARNAM,R3 MOV #6,R1 CALL ..ATRD CALL CKCHAR BR BCSCK CKUIC: BIS #IT.UIC,ATTRBM CMPB #'[,(R2)+ ;MUST BE A LEFT BRACKET BNE BADUIC MOV #8.,R3 ;PRIME GETNUM FOR OCTAL CONVERSION CALL GETNUM BIT #177400,R1 ;IS GROUP NR. LEGAL? BNE BADUIC MOVB R1,RQTUIC+1 CMPB #',,R5 BNE BADUIC CALL GETNUM BIT #177400,R1 BNE BADUIC MOVB R1,RQTUIC CMPB #'],R5 BNE BADUIC JMP CKR2 .PAGE ILLOPT: MOV #ILFNN,R4 BIT #IT.NP,ATTRBM BNE ERREX MOV #ILLGS,R4 BR ERREX ; ; SYNTAS: MOV #SYNER,R4 ERREX: JMP COMERA .PAGE ; ; MFT A TASK ; MFTCOM: MOV R2,-(SP) ;SAVE LINE POINTER BIT #IT.NP,ATTRBM ;IF PRIVILEGED TI NEED NOT MATCH BEQ 30$ MOV #TSKNAM,R1 CALL ..FSTD ;HAS TASK BEEN INSTALLED TST R2 ;IF ZERO, TASK NOT INSTALLED BEQ 30$ ;DIRECTIVE FAILURE WILL INDICATE NO TASK BIT #SF.MU,S.FW(R2) ;IS TASK MULTI-USER? BNE 30$ ;IF SET, DON'T CHECK FOR TI ; MUST ENSURE THAT THE TI OF THE RUNNING TASK IS THE SAME AS THE TI ; OF THE INVOKING TERMINAL. ; LOOK FOR TASK IN THE ATL MOV .ATLLH,R3 10$: MOV @R3,R3 CMP A.TD(R3),R2 BEQ 20$ CMP .ATLLH+2,R3 BNE 10$ ; TASK NOT IN THE ATL SO LOOK FOR IT IN THE MRL CALL FTPD BCS 30$ ;DIRECTIVE FAILURE WILL INDICATE NO TASK 20$: MOV (SP)+,R2 MOV #NTACT,R4 ;ASSUME TASK NOT ACTIVE CMP DFLTTI,A.TI(R3) ;DOES TI MATCH? BNE COMERA BR 35$ ;STACK ALREADY POPPED! 30$: MOV (SP)+,R2 ;RESTORE THE LINE POINTER 35$: MOV TBLOFS,R5 ;RETRIEVE TABLE OFFSET MOV LEGTAB(R5),R5 ;AND FETCH LEGAL ATTRIBUTES FOR THIS FUNCTION MOV ATTRBM,R4 ;FETCH ACTUAL ATTRIBUTES FOR THIS FUNCTION BIS R5,R4 XOR R5,R4 ;ANY DISCREPANCIES BETWEEN LEGAL AND ACTUAL? BNE ILLOPT ;IF YES, THEN ILLEGAL ATTRIBUTE CMP FNCTON,ALT ;IF FUNCTION IS "ALT",PRIORITY IN WRONG PLACE BNE 40$ MOV RQTPRI,ALTPRI ;SO PUT IT WHERE IT BELONGS 40$: CMP FNCTON,ABO ;IS FUNCTION AN "ABO" ? BNE 41$ MOV @#PSEXP,-(SP) ;SAVE ORIGINAL PRIORITY BIS #140,@#PSEXP ;INHIBIT TASK SWITCHING INC TSKFLA ;SHOW WE INHIBITED SWITCHING 41$: MOV .CRTSK,R3 MOV A.TI(R3),-(SP) MOV DFLTTI,A.TI(R3) MOV TBLOFS,R5 MOV DIRTAB(R5),DRCTIV DIR$ #DRCTIV MOV (SP)+,A.TI(R3) BCS 60$ TST TSKFLA ;DID WE INHIBIT SWITCHING ? BNE 45$ JSR PC,..ENB0 ;RE-ENABLE TASK SWITCHING CLR TSKFLA ;AND CLEAR FLAG 45$: TST EXITFL BNE EXIT JMP NXRQST 60$: TST TSKFLA ;DID WE INHIBIT SWITCHING ? BNE 61$ JSR PC,..ENB0 CLR TSKFLA ;CLEAR FLAG 61$: MOV MSGADR(R5),R5 70$: MOVB (R5)+,R4 BEQ COMERA CMPB (R5)+,$DSW BNE 70$ COMERA: MOV .CRTSK,R3 ;+++001 DETERMINE MCRERR'S SUCCESSOR MOV A.RQ(R3),R3 MOV (R3),DIRERR+2 MOV 2(R3),DIRERR+4 ;+++001 CALLED AFTER MCRERR PRINTS MSG MOV R4,R5 MOVB R4,DIRERR SUB #GMCR+G.MCRB,R2 MOVB R2,DIRERR+1 ;LENGTH OF COMMAND LINE UP TO ERROR DIR$ #SDRQDD BCS SRFAIL ;CANCEL THE REQUEST-UPON-EXIT ;REQUEST FOR MCR. THE ERROR ;MESSAGE HANDLER WILL REQUEST ;MCR INSTEAD MOV .CRTSK,R0 MOV #77406,-(SP) MOV A.HA(R0),-(SP) CALL ..SPD3 BIC #HF.RMC,60000+H.EAF CALL ..SPD3 ;MAP BACK INTO MY SPACE CMP (SP)+,(SP)+ ;CLEAN THE STACK BR EXIT ; ; ; SRFAIL: MOV #3,R1 MOV #FNCTON,R2 MOV #TTYBUF+2,R3 CALL ..RDTA ;CONVERT FUNCTION NAME TO ASCII MOV #TTYBUF+16.,R3 10$: ASHC #-16.,R4 DIV #10.,R4 ADD #60,R5 MOVB R5,-(R3) TST R4 BNE 10$ DIR$ #TTYOUT ; EXIT: EXIT$S .PAGE ; ;+ ; G E T N U M ; ; ; ROUTINE TO DECODE A NUMBER ; ; 'GETNUM' IS A PRIVATE SUBROUTINE OF 'MFT'. ; ITS FUNCTION IS TO ASSEMBLE A DECIMAL OR OCTAL ; NUMBER FROM CHARACTERS IN THE MCR LINE BUFFER. THE ; RADIX IS SPECIFIED BY SETTING R3 PRIOR TO CALLING ; 'GETNUM'. NOTE THAT ON RETURN, R2 -- THE MCR LINE POINTER -- ; IS POINTING TO THE CHARACTER FOLLOWING THE TERMINATOR, AND ; NOT TO THE TERMINATOR ITSELF (WHICH IS IN R5). ; ; CALLING SEQUENCE: ; R3 -- 8. (IF OCTAL) OR 10. (IF DECIMAL) ; R2 -- BUFFER POINTER ; CALL GETNUM ; ; OUTPUT: ; R1 -- RETURNED VALUE ; R5 -- TERMINATOR ; NOTE THAT THERE IS NO ERROR RETURN. ; ; REGISTERS ALTERED: R1,R2,R4,R5 ; ;- ; GETNUM:: MOV #4,R4 ;CONVERT A MAXIMUM OF 3 DIGITS CLR R1 ;CLEAR THE FOUND VALUE 10$: MOVB (R2)+,R5 ;PICK UP A CHARACTER CMP #57,R5 ;CHECK LOWER LIMIT BPL 40$ ;CHECK FOR TERMINATOR CMP #67,R5 ;CHECK OCTAL LIMITS BMI 30$ ;NOT WITHIN OCTAL LIMITS 20$: MUL R3,R1 ;COMPUTE NEW NUMBER BIC #177760,R5 ;MAKE OCTAL OR DECIMAL NUMBER ADD R5,R1 ;AND ADD IN NEW DIGIT SOB R4,10$ ;FINISHED? BR 40$ ;YES -- EXIT 30$: CMP #10.,R3 ;IS THIS A DECIMAL NUMBER? BNE 40$ ;NO -- EXIT CMP #71,R5 ;YES -- IS IT A 8 OR 9? BPL 20$ ;YES -- GO MULTIPLY 40$: 50$: RETURN ;RETURN TO CALLER ; ; .PAGE ;+ ; G E T U N T ; ROUTINE TO CONVERT INTERVAL UNIT TO CODE VALUE ; ; 'GETUNT' -- A PRIVATE SUBROUTINE OF '.RNPRS' -- ; CONVERTS AN INTERVAL UNIT (H,M,S,T) TO A CODE VALUE ; (4,3,2,1, RESPECTIVELY) EXPECTED BY THE EXEC. ; ; ; CALLING SEQUENCE: ; R1 -- INTERVAL UNIT ; CALL GETUNT ; ; NO ERROR CHECKING IS DONE. ; ; OUTPUT: ; R5 -- RETURNED VALUE ; ; REGISTERS ALTERED: R5 ;- GETUNT: MOV #1,R5 ;INITIALIZE INTERVAL CODE TO 1 CMP #'T,R1 ;IS INTERVAL IN TICKS? BEQ 10$ ;YES INC R5 ;NO -- SET CODE TO 2 CMP #'S,R1 ;IS INTERVAL IN SECONDS? BEQ 10$ ;YES INC R5 ;NO -- SET CODE TO 3 CMP #'M,R1 ;IS INTERVAL IN MINUTES? BEQ 10$ ;YES INC R5 ;NO -- MUST BE HOURS -- SET TO 4 CMP #'H,R1 BEQ 10$ SEC BR 20$ 10$: CLC 20$: RETURN FYNPUD: MOV .PUDBA,R0 COTSCN: CMP U.DN(R0),DEVNAM BEQ 20$ 10$: ADD #U.SZ,R0 CMP R0,.PUDEA BEQ 30$ BR COTSCN 20$: CMPB U.UN(R0),UNITA ;IS UNIT CORRECT BNE 10$ CLC BR 40$ 30$: SEC 40$: RETURN .PAGE ; ; ; ; ; CKCHAR -- ROUTINE TO CHECK FOR TERMINATORS OR OPTIONS ; CALLING SEQUENCE: ; R1 -- NUMBER OF CHARACTERS NOT TRANSFERRED (FROM ..ATRD) ; R2 -- BUFFER POINTER FROM ..ATRD ; CALL CKCHAR ; ; EXIT CONDITIONS: ; ; IF TERMINATOR FOUND SET EXIT FLAG AND V BIT ; IF COMMA FOUND (,) SET V BIT AND RETURN ; OTHERWISE EXIT WITH SYNTAX ERROR ; ; CKCHAR: CMP #6,R1 BEQ SYN ;NO -- CHECK FOR CR OR AM ADD #6,R2 ;UPDATE BUFFER POINTER SUB R1,R2 ;SUBTRACT CHAR'S NOT XFERED CKTAK: MOVB (R2)+,R5 ;PICK UP A CHARACTER CKTAA: CMPB R5,#'/ BEQ RTCKT ;CHECK FOR OPTION --YES --- PROCESS OPTION CMPB R5,#', ;IS IT A SEPARATOR? BEQ RTSEV ;YES -- MFT THIS TASK CKAMCR: CMPB R5,#AM ;NO -- IS IT A TERMINATOR? BEQ SETLT ;YES -- SET END OF LINE CMPB R5,#CR ;NO -- TRY CAR RTN BNE SYN SETLT: INC EXITFL ;INDICATES END OF COMMAND LINE RTSEV: SEV ;SET V BIT TO INDICATE END OF THIS COMMAND LINE BR RTCKT SYN: SEC BR RET RTCKT: CLC RET: RETURN .PAGE ; ; ; C H K P R V S U B R O U T I N E ; ; THIS SUBROUTINE DETERMINES WHETHER THE TI UNDER WHICH THIS ; TASK IS RUNNING IS PRIVILEGED. IF THE TERMINAL IS PRIVILEGED ; CHKPRV RETURNS WITH C- BIT CLEAR. IF TERMINAL IS NOT PRIVILEGED ; THE C-BIT IS SET ; INPUTS: NONE ; OUTPUTS: R5 CONTAINS THE PUD ADDRESS OF THE TERMINAL ; WHERE THIS REQUEST ORIGINATED. ; C-BIT IS CLEAR IF TERMINAL IS PRIVILEGED ; C-BIT IS SET IF TERMINAL IS NOT PRIVILEGED CHKPRV: CLC MOV .CRTSK,R5 MOV A.TI(R5),R5 ;PUD FOR THIS TI BIT #UT.PR,U.TF(R5) ;IS TERMINAL PRIVILEGED? BNE 10$ SEC 10$: RETURN ; FTPD -- SUBROUTINE TO SEARCH FOR A TASK IN THE MRL ; ; ENTRY CONDITIONS: ; ; R2 -- STD ADDRESS OF TASK ; EXIT CONDITIONS: ; R3 CONTAINS NODE ADDRESS OF FOUND TASK ; C-BIT IS SET IF TASK NOT FOUND ; REGISTERS ALTERED ARE R1,R3,R4 ; ; FTPD: MOV .TPDBA,R1 ;FIND THE BEGINNING OF TPD 70$: MOV R1,R3 ;USE R3 TO SEARCH MCRL ADD #T.RF,R3 ;FIND MCRL OF THIS TPD MOV R3,R4 ;;SAVE MCR LISTHEAD 80$: MOV @R3,R3 ;LOOK AT AN ENTRY CMP R3,R4 ;LISTHEAD? BEQ 90$ ;YES, LOOK AT NEXT TPD CMP R2,A.TD(R3) ;NO -- IS THIS THE DESIRED TASK? BNE 80$ ;NO LOOK AT NEXT ENTRY CLC BR 100$ ; 90$: ADD #T.SZ,R1 ;LOOK AT THE NEXT TPD ENTRY CMP R1,.TPDEA ;END OF TPD? BNE 70$ ;NO LOOK AT NEXT MRL 100$: SEC ;YES RETURN ERROR RETURN .END MFT