.TITLE CPU .IDENT /V7.06/ ;******************************************************************* ; ; CPU -- SWITCHES CPU REPORTING ON OR OFF, OR ENABLES OR DISABLES ; CHARGE REDIRECTION ON A PER TERMINAL BASIS. ; THIS TASK IMPLEMENTS THE CPU COMMAND. THE FORMAT OF THIS ; COMMAND IS ; CPU /ON -- SWITCHES CPU REPORTING ON ; OR ; CPU /OFF -- SWITCHES CPU REPORTING OFF. ; OR ; CPU /EN -- ENABLE CHARGE REDIRECTION. ; OR ; CPU /DS -- DISABLE CHARGE REDIRECTION. ; ; IF EITHER FEATURE HAS NOT BEEN GENERATED INTO THIS VERSION OF ; THE ACCOUNTING SYSTEM, A "FEATURE NOT SUPPORTED" MESSAGE IS ; GENERATED, ALTHOUGH THE COMMAND LINE IS STILL DECODED. ; THE /EN AND /DS OPTIONS OF THIS COMMAND ARE ALLOWED FOR ; NON-PRIVILEGED USERS, ALTHOUGH THEY WILL NORMALLY BE OF ; NO EFFECT, SINCE THE UIC RECOGNISED BY THE ACCOUNTING ; SYSTEM IS THE USER'S LOGON UIC, AND A NON-PRIVILEGED ; USER CANNOT CHANGE THIS. THE POSSIBILTY STILL REMAINS OF ; THE TERMINAL BECOMING PRIVILEGED BY MEANS OF ISSUING ; SET /PRIV=TTN: FROM A PRIVILEGED TERMINAL, SO IN ; THIS CASE, CPU /DS SHOULD BE USED TO PREVENT THE NEWLY ; PRIVILEGED USER FROM REDIRECTING CHARGES, IF THE LOGON ; DEFAULT IS REDIRECTION ENABLED. ; ; VERSION: V6 MAY 79, MODIFIED OCT 79 ; VERSION: V7 JAN 81 ; ; STEVE THOMPSON SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ; REVISION HISTORY ; ---------------- ; ; SMT753 7-OCT-81 CHANGED NAMES OF CONDITIONAL ASSEMBLY ; PARAMETERS; SEE THE FILES MODIFY.TXT AND ; CONDEF.MAC FOR DETAILS. ; ; SMT798 9-JAN-82 ALLOW SWITCH TO FOLLOW COMMAND NAME WITHOUT ; AN INTERVENING SPACE. ; ; SMT799 12-JAN-82 REMOVED CALLS TO $LOCKL/$UNLKL ; ; SMT814 12-APR-82 LOWER CASE MESSAGES FOR RSX-11M V4.0 ; ; SMT828 27-JUL-82 REPLACED "$GNBLK" BY "GT.NXT" ; ;******************************************************************* .MCALL GMCR$,EXIT$S,DIR$,QIOW$ .MCALL EXST$ ACCDF$ ; DEFINE ACCOUNTING OFFSETS BITDF$ ; DEFINE ACCOUNTING BITS 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 .IIF DF AA$V40, .ENABL LC .IF NDF AA$CPU ! AA$ENA ERR0: .ASCII /CPU -- Feature not supported/ ERR0SZ=.-ERR0 .ENDC ; NDF AA$CPU ! AA$ENA ERR1: .ASCII /CPU -- Command input error/ ERR1SZ=.-ERR1 ERR2: .ASCII /CPU -- Syntax error/ ERR2SZ=.-ERR2 ERR3: .ASCII /CPU -- Bad switch/ ERR3SZ=.-ERR3 .IF DF AA$CPU ! AA$ENA ERR4: .ASCII /CPU -- Logging task not installed/ ERR4SZ=.-ERR4 ERR5: .ASCII /CPU -- Logging task not active/ ERR5SZ=.-ERR5 ERR6: .ASCII /CPU -- Memory allocation failure/ ERR6SZ=.-ERR6 .EVEN .IFTF FLAG: .WORD 0 ; REPORTING ON/OFF FLAG .IFT LOGNAM: .RAD50 /LOG.../ ; NAME OF LOGGING TASK LOGPTR: .WORD 0 ; LOG...'S TCB ADDRESS .IFTF GMCR: GMCR$ BUF=GMCR+2 ODPB: QIOW$ IO.WVB,LUN,EFN,,,,<0,0,40> ; OUTPUT DPB EXST: EXST$ EX$SUC $CPUEP: DIR$ #GMCR ; GET THE COMMAND LINE BCC 10$ ; OK PRINT #ERR1 ; ERROR, NONE THERE 5$: JMP EXIT ; EXIT .IFT 10$: MOV #AC.RPT!AC.SET,FLAG ; ASSUME SWITCH IS "/ON" .IFF 10$: .IFTF MOV #BUF,R0 ; GET BUFFER ADDRESS 15$: CALL GT.NXT ; 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 GT.NXT ; GET FIRST CHAR. OF SWITCH BCS 30$ ; EOL IS BAD SWITCH CMPB R2,#'O ; LETTER O? BEQ 35$ ; IF EQ YES CMPB R2,#'E ; ENABLE OPTION? BEQ 31$ ; MAYBE CMPB R2,#'D ; DISABLE OPTION? BEQ 32$ ; MAYBE 30$: PRINT #ERR3 ; NO, ILLEGAL PARAMETER BR 5$ ; EXIT 31$: CALL GT.NXT ; GET NEXT NON-BLANK BCS 30$ ; END OF LINE IS ERROR CMPB R2,#'N ; IS THE SWITCH "/EN"? BNE 30$ ; IF NE NO, ERROR .IFT MOV #AC.DIS,FLAG ; SET MASK FOR "/EN" .IFTF BR 40$ ; CONTINUE 32$: CALL GT.NXT ; GET NEXT NON-BLANK BCS 30$ ; END OF LINE IS ERROR CMPB R2,#'S ; IS THE SWITCH "/DS"? BNE 30$ ; IF NE NO, ERROR .IFT MOV #,FLAG ; SET MASK FOR "/DS" .IFTF BR 40$ ; AND CONTINUE 35$: CALL GT.NXT ; 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 GT.NXT ; LOOK FOR SECOND F BCS 30$ ; ILLEGAL IF NOTHING THERE CMPB R2,#'F ; GOT ONE, IS IT F? BNE 30$ ; ONLY F IS LEGAL .IFT MOV #AC.RPT,FLAG ; SET FLAG FOR "OFF" .IFTF 40$: CALL GT.NXT ; CHECK FOR END OF SWITCH BCC 30$ ; ONLY CARRY SET IS GOOD .IFTF BIT #AC.RPT,FLAG ; /ON OR /OFF? BEQ 41$ ; IF EQ NO, MUST BE /EN OR /DS .IF DF AA$CPU BR 42$ ; OK, GO DO IT .IFF PRINT #ERR0 ; NO GOOD, FEATURE NOT SUPPORTED MOV #EX$WAR,EXST+E.XSTS ; SET WARNING STATUS BR EXIT ; SO EXIT .ENDC ; DF AA$CPU 41$: ; REF. LABEL (MUST BE /EN OR /DS TO GET HERE) .IF DF AA$ENA BR 42$ ; YES, OK .IFF PRINT #ERR0 ; ERROR, CAN'T DO /EN OR /DS MOV #EX$SEV,EXST+E.XSTS ; SET SEVERE EXIT STATUS BR EXIT ; SO EXIT .ENDC ; DF AA$ENA .IFT 42$: MOV #LOGNAM,R3 ; GET NAME OF LOGGING TASK CALL $SRSTD ; LOOK FOR IT IN THE STD BCC 45$ ; OK PRINT #ERR4 ; ERROR, IT WASN'T THERE MOV #EX$SEV,EXST+E.XSTS ; SET SEVERE EXIT STATUS BR EXIT1 ; THAT'S IT 45$: BIT #TS.EXE,T.STAT(R0) ; IS THE LOGGING TASK ACTIVE? BEQ 50$ ; IF EQ YES PRINT #ERR5 ; NO, ERROR MOV #EX$SEV,EXST+E.XSTS ; SET SEVERE EXIT STATUS BR EXIT1 ; DON'T SEND REQUEST 50$: MOV R0,LOGPTR ; SAVE LOG...'S TCB ADDRESS CALL $SWSTK,60$ ; SWITCH TO SYSTEM STACK MOV #B.LCPU,R1 ;; GET LENGTH OF BUFFER TO ALLOCATE CALL $ALOCB ;; ALLOCATE IT BCS 55$ ;; ERROR MOV #,B.MASK(R0) ;; SET COMMAND IN PACKET MOV $TKTCB,R1 ;; GET OUR TCB ADDRESS MOV T.UCB(R1),B.UCB(R0) ;; SET THE UCB ADDRESS MOV FLAG,B.FLAG(R0) ;; SET REPORTING FLAG MOV R0,R1 ;; COPY BLOCK ADDRESS TO R1 MOV LOGPTR,R0 ;; GET LOG...'S TCB ADDRESS CALLR $EXRQF ;; QUEUE PACKET AND START LOG... 55$: CLR LOGPTR ;; SET FLAG FOR ALLOCATION FAILURE RETURN ;; BACK TO TASK LEVEL 60$: TST LOGPTR ; WAS THERE AN ERROR? BNE EXIT ; IF NE NO, EXIT PRINT #ERR6 ; YES, SAY SO MOV #EX$SEV,EXST+E.XSTS ; SET SEVERE EXIT STATUS BR EXIT ; EXIT EXIT1: ; .ENDC ; DF AA$CPU ! AA$ENA EXIT: DIR$ #EXST ; EXIT WITH CORRECT STATUS .END $CPUEP