.TITLE PRV .IDENT /V1.00/ ;******************************************************************* ; ; PRV.TSK ; ; PRV /ON -- MAKES ANY TERMINAL PRIVILEGED ; OR ; PRV /OFF -- MAKES ANY TERMINAL NONPRIVILEGED ; ; *NOTE* COMMAND DETAILS NOT TO BE DISTRIBUTED ; ; VERSION: V1 JAN 81 ; ; STEVE THOMPSON ; SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ;******************************************************************* .MCALL GMCR$,EXIT$S,DIR$,QIOW$ .MCALL EXST$ CR=15 ; CARRIAGE RETURN LUN=1 ; TI: I/O LUN EFN=1 ; EVENT FLAG FOR I/O ; ; MACROS ; .MACRO PRINT ERR MOV ERR,ODPB+Q.IOPL MOV ERR'SZ,ODPB+Q.IOPL+2 DIR$ #ODPB .ENDM ; ; ERROR MESSAGES ; .NLIST BEX .ENABL LC ERR1: .ASCII /PRV -- Command input error/ ERR1SZ=.-ERR1 ERR2: .ASCII /PRV -- Syntax error/ ERR2SZ=.-ERR2 ERR3: .ASCII /PRV -- Bad switch/ ERR3SZ=.-ERR3 .EVEN FLAG: .WORD 0 ; ON/OFF FLAG GMCR: GMCR$ ; GET COMMAND LINE DPB BUF=GMCR+2 ODPB: QIOW$ IO.WVB,LUN,EFN,,,,<0,0,40> ; OUTPUT DPB EXST: EXST$ EX$SUC ; EXIT WITH STATUS DPB $PRVEP: ; ENTRY POINT ; ; PARSE COMMAND LINE ; DIR$ #GMCR ; GET THE COMMAND LINE BCC 10$ ; OK PRINT #ERR1 ; ERROR, NONE THERE 5$: JMP EXIT ; EXIT 10$: MOV #1,FLAG ; ASSUME SWITCH IS "/ON" MOV #BUF,R0 ; GET BUFFER ADDRESS 15$: CALL $GNBLK ; GET NEXT NON-BLANK BCC 25$ ; OK 20$: PRINT #ERR2 ; ERROR, NULL COMMAND LINE BR 5$ ; EXIT 25$: CMPB R2,#'/ ; SWITCH COMING BEFORE SPACE? BEQ 26$ ; IF EQ YES TST R1 ; ANY BLANKS SEEN? BEQ 15$ ; IF EQ NO, CONTINUE SCAN CMPB R2,#'/ ; SWITCH COMING? BNE 20$ ; IF NE NO 26$: CALL $GNBLK ; GET FIRST CHAR. OF SWITCH BCS 30$ ; EOL IS BAD SWITCH CMPB R2,#'O ; LETTER O? BEQ 35$ ; IF EQ YES 30$: PRINT #ERR3 ; NO, ILLEGAL PARAMETER BR 5$ ; EXIT 35$: CALL $GNBLK ; GET NEXT NON-BLANK BCS 30$ ; EOL IS ERROR CMPB R2,#'N ; IS THIS THE 'ON' PARAMETER? BEQ 40$ ; IF EQ YES CMPB R2,#'F ; IS THIS THE 'OFF' PARAMETER? BNE 30$ ; ONLY 'F' IS LEGAL CALL $GNBLK ; LOOK FOR SECOND F BCS 30$ ; ILLEGAL IF NOTHING THERE CMPB R2,#'F ; GOT ONE, IS IT F? BNE 30$ ; ONLY F IS LEGAL CLR FLAG ; SET FLAG FOR "OFF" 40$: CALL $GNBLK ; CHECK FOR END OF SWITCH BCC 30$ ; ONLY CARRY SET IS GOOD ; ; PROCESS COMMAND FUNCTION ; MOV $TKTCB,R0 ; GET OUR TCB ADDRESS MOV T.UCB(R0),R0 ; THEN TI: UCB ADDRESS TST FLAG ; MAKE TERMINAL PRIVILEGED? BNE 50$ ; IF NE YES BIC #U2.PRV,U.CW2(R0) ; NO, SET NON-PRIVILEGED BR EXIT ; AND EXIT 50$: BIS #U2.PRV,U.CW2(R0) ; MAKE US PRIVILEGED ; FALL THROUGH AND EXIT EXIT: DIR$ #EXST ; EXIT WITH CORRECT STATUS .END $PRVEP