.TITLE NSF .ENABL LC ; This program sets the bit in the PCB signifying this task to ; be not shuffleable. The task must be fixed in memory. .IDENT /BCZ/ .MCALL TCBDF$,PCBDF$,UCBDF$ .MCALL EXIT$S,QIOW$S,GMCR$,DIR$,QIOW$ TCBDF$ ; DEFINE SYMBOLS FOR TCB PCBDF$ ; DEFINE SYMBOLS FOR PCB UCBDF$ ; DEFINE SYMBOLS FOR UCB GTMCR: GMCR$ HLDTSK: .WORD 0 TSKNM: TSK1: .WORD 0 TSK2: .WORD 0 STAT: .WORD 0 NOPRIV: QIOW$ IO.WLB,5,5,,,, COMERR: QIOW$ IO.WLB,5,5.,,,, NOTFIX: QIOW$ IO.WLB,5,5.,,,, OUTQIO: QIOW$ IO.WLB,5,5.,,,, TSTIT: .BYTE 0 OUTMSG: .ASCIZ / Error -- Task %R%R not found./ BUFFL=.-OUTMSG+2 .EVEN OUTBUF: .BLKB BUFFL NOPRV: .ASCII / Error -- User not privleged./ NOPRVE=.-NOPRV NFIX: .ASCII / Error -- Task not FIXed in memory./ NFIXE=.-NFIX ERR: .ASCII / Error in command string./ ERRE=.-ERR .EVEN START: MOV $TKTCB,R0 ; IS THIS USER PRIV? MOV T.UCB(R0),R0 ; NEED UCB BIT #U2.PRV,U.CW2(R0) ; CHECK PRIV BIT BNE 5$ ; PRIV, GO TO 5$ DIR$ #NOPRIV ; NO, WRITE ERROR MSG EXIT$S ; AND EXIT 5$: DIR$ #GTMCR ; GET COMMAND STRING MOV $DSW,STAT ; HOW MANY CHARS? CMP STAT,#4 ; MORE THAN 4? BGT 10$ ; YES, BRANCH TO 10$ DIR$ #COMERR ; NO, PRINT ERROR MSG EXIT$S ; EXIT 10$: MOV #12,R1 ; MAKE TASKNAME 6 CHARS SUB STAT,R1 ; AND FILL IN BLANKS BLT 5$ BEQ 30$ ; WITH SPACES MOV #GTMCR+2,R2 ; ADD STAT,R2 ; 20$: MOVB #40,(R2)+ ; SOB R1,20$ ; 30$: MOV #GTMCR+6,R0 ; CONVERT ASCII MOV #1,R1 ; TO RAD50 CALL $CAT5B ; MOV R1,TSK1 ; MOV #1,R1 ; CALL $CAT5B ; MOV R1,TSK2 ; MOV #TSKNM,R3 ; MOVE ADDRESS OF TASKNAME INTO R3 CALL $SWSTK,50$ ;; SWITCH TO SYSTEM STATE CALL $SRPRO ;; CALL EXEC ROUTINE TO FIND INS TASK BCC 40$ ;; IF CARRY CLEAR, TASK HEADER FOUND BISB #1,TSTIT ;; CARRY SET, TASK NOT INSTALLED 40$: MOV R0,HLDTSK ;; R0 HOLDS ADDRESS OF TASK HEADER RETURN ; RETURN FROM SYSTEM STATE 50$: BITB #1,TSTIT ; WAS TASK FOUND BEQ 60$ ; YES, BRANCH TO 60$ MOV #OUTMSG,R1 ; TASK COULD NOT BE FOUND MOV #TSKNM,R2 ; PRINT OUT ERROR MESSAGE MOV #OUTBUF,R0 ; CALL $EDMSG ; MOV R1,OUTQIO+Q.IOPL+2 ; DIR$ #OUTQIO ; BR 100$ ; AND THEN BR TO EXIT 60$: BIT #1,HLDTSK ; IF 1ST BIT SET, TASK IN SEC POOL BNE 70$ ; IF SET, CAN'T BE FIXED. SEND MSG MOV HLDTSK,R3 ; TASK FOUND. MOVE HEADER ADR TO R3 MOV T.PCB(R3),R4 ; MOV POINTER TO PCB INTO R4 BIT #PS.FXD,P.STAT(R4) ; IS BIT SET BNE 80$ ; YES, THEN BRANCH TO 80$ 70$: DIR$ #NOTFIX ; TASK NOT FIXED, SEND ERROR MSG BR 100$ ; AND EXIT 80$: BIS #PS.NSF,P.STAT(R4) ; ALL OKAY, SET NO SHUFFLE BIT 100$: EXIT$S ; AND EXIT .END START ; END