.TITLE STOP .IDENT /V1.03/ ;****************************************************************** ; ; THIS TASK IMPLEMENTS THE STOP COMMAND. THIS COMMAND ABORTS ; ALL ACTIVE TASKS AT THE ISSUING TERMINAL. A NO-OP IS PERFORMED ; IF TI: IS TT0: OR CO: ; ; STEVE THOMPSON ; SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA ; NY 14853 ; ;******************************************************************* .MCALL ABRT$,EXST$S ABRT: ABRT$ DUMMY ; ABORT DPB TSKNAM = ABRT+2 ; TASK NAME $STOEP: ; XFR ADDRESS ; ; MAKE SURE WE ARE NOT TT0: OR CO: AS THIS MAY MESS UP SYSTEM PROGRAMS ; MOV $TKTCB,R0 ; GET OUR TCB ADDRESS MOV T.UCB(R0),R3 ; THEN TI: UCB ADDRESS CMP R3,#.TT0 ; ARE WE AT TT0:? BEQ 10$ ; IF EQ YES, EXIT WITH WARNING CMP R3,$COPT ; IS IT CO:? BNE 20$ ; IF NE NO, GO ZAP EM 10$: EXST$S #EX$WAR ; TT0: OR CO:, EXIT WITH WARNING ; ; SCAN THE STD AND LOOK FOR A TASK TO ABORT ; 20$: CALL $SWSTK,60$ ; SWITCH STACKS CLR TSKNAM ;; SHOW NO TASK TO ABORT MOV $TSKHD,R5 ;; GET START OF TASK LIST 30$: TST T.TCBL(R5) ;; NULL TASK TCB? BEQ 50$ ;; YES, DONE TST T.STAT(R5) ;; TASK ACTIVE? BMI 40$ ;; NO CMP R3,T.UCB(R5) ;; TASK RUNNING AT OUR TI:? BNE 40$ ;; IF NE NO CMP $MCRPT,R5 ;; MCR...? BEQ 40$ ;; IF EQ YES CMP R5,$TKTCB ;; US? BEQ 40$ ;; IF EQ YES, DON'T ABORT OURSELVES!! BIT #T2.HLT,T.ST2(R5) ;; TASK BEING ABORTED? BNE 40$ ;; IF NE YES BIT #T3.SLV,T.ST3(R5) ;; SLAVE TASK? BNE 40$ ;; IF NE YES, DON'T ABORT IT MOV T.NAM(R5),TSKNAM ;; SAVE TASK NAME MOV T.NAM+2(R5),TSKNAM+2 ;; (BOTH HALVES) BR 50$ ;; ABORT IT FROM USER STATE 40$: MOV T.TCBL(R5),R5 ;; POINT TO NEXT TASK IN LIST BR 30$ ;; KEEP GOING 50$: RETURN ;; BACK TO TASK LEVEL ;; AND RETURN TO CALLER ; ; IF A TASK FOUND, ABORT IT AND LOOP OTHERWISE JUST EXIT ; 60$: TST TSKNAM ; TASK FOUND TO ABORT? BEQ 70$ ; IF EQ NO, JUST EXIT DIR$ #ABRT ; YES, ABORT IT BR 20$ ; LOOP FOR MORE 70$: EXST$S #EX$SUC ; EXIT WITH SUCCESS STATUS .END $STOEP