;****************************************************** ; ; IF - command file conditional processing utility ; ;****************************************************** ;1.0 25-Oct-84 DFP written by D. Pallmann. ;1.1 01-Nov-84 DFP add ".IF JOB" construct. ; ; IF PPN=account command ; IF PPN<>account command ; ; IF TIME=hours:minutes command ; IF TIMEhours:minutes command ; IF TIME<>hours:minutes command ; ; IF IDLE command VMAJOR=1 VMINOR=1 SEARCH SYS SEARCH SYSSYM .OFINI .OFDEF PARAM,4 ;parameter .OFDEF TIME,4 ;time of day .OFSIZ IMPSIZ START: PHDR -1,0,PH$REE!PH$REU ;program header GETIMP IMPSIZ,A5 ;allocate impure area JOBIDX A4 ;index JCB GETPRM: LEA A1,PARAM(A5) ;convert compare parameter PACK ; to RAD50 PACK ; code BYP CHKPRM: LEA A0,PRMTBL ;index parameter table MOV #-2,D5 ;pre-set jump index 10$: TST @A0 ;end of table? JEQ FMTERR ; yes - branch ADDW #2,D5 ;increment jump index CMM (A0)+,PARAM(A5) ;command match? BNE 10$ ; no BRANCH: MOVW JMPTBL[~D5],D5 ;simulate TJMP D5 JMP JMPTBL[~D5] ; instruction PRMTBL: RAD50 /PPN / RAD50 /TIME / RAD50 /IDLE / RAD50 /JOB / LWORD 0 JMPTBL: WORD IF.PPN-JMPTBL WORD IF.TIM-JMPTBL WORD IF.IDL-JMPTBL WORD IF.JOB-JMPTBL PAGE IF.PPN: CMPB @A2,#'= BEQ PPN.EQ PPN.NE: CMPB (A2)+,#'< JNE FMTERR CMPB (A2)+,#'> JNE FMTERR BYP CMPB @A2,#'[ BNE 10$ INC A2 10$: GTPPN CMPB @A2,#'] BNE 20$ INC A2 20$: BYP CMMW JOBUSR(A4),D1 JNE EXECUT JMP EXIT PPN.EQ: INC A2 BYP CMPB @A2,#'[ BNE 10$ INC A2 10$: GTPPN CMPB @A2,#'] BNE 20$ INC A2 20$: BYP CMMW JOBUSR(A4),D1 JEQ EXECUT JMP EXIT PAGE IF.TIM: GTIMES TIME(A5) CMPB @A2,#'= BEQ TIM.EQ CMPB @A2,#'< BEQ TIM.LT TIM.GT: CMPB (A2)+,#'> JNE FMTERR CALL GT.TIM CMMB TIME(A5),D0 JLT EXIT JGT EXECUT CMMB TIME+1(A5),D1 JGT EXECUT JMP EXIT TIM.LT: INC A2 CMPB @A2,#'> BEQ TIM.NE CALL GT.TIM CMMB TIME(A5),D0 JLT EXECUT JGT EXIT CMMB TIME+1(A5),D1 JLT EXECUT JMP EXIT TIM.EQ: INC A2 CALL GT.TIM CMMB TIME(A5),D0 JNE EXIT CMMB TIME+1(A5),D1 JEQ EXECUT JMP EXIT TIM.NE: INC A2 CALL GT.TIM CMMB TIME(A5),D0 JNE EXECUT CMMB TIME+1(A5),D1 JNE EXECUT JMP EXIT GT.TIM: BYP GTDEC MOV D1,D0 CMPB (A2)+,#': JNE FMTERR GTDEC RTN PAGE IF.JOB: CMPB @A2,#'= BEQ IF.JEQ IF.JNE: CMPB (A2)+,#'< JNE FMTERR CMPB (A2)+,#'> JNE FMTERR CALL IF.JSR CMM JOBNAM(A0),PARAM(A5) JNE EXECUT JMP EXIT IF.JEQ: INC A2 CALL IF.JSR CMM JOBNAM(A0),PARAM(A5) JEQ EXECUT JMP EXIT IF.JSR: BYP LEA A1,PARAM(A5) PACK PACK JOBIDX A0 RTN PAGE ;IF IDLE command ; ; Execute command if system is idle ; Used for MONTST, REBOOT, etc. IF.IDL: MOV JOBTBL,A0 10$: MOV (A0)+,D0 BEQ 10$ BMI EXECUT MOV D0,A1 CMP A1,A4 BEQ 10$ TSTW JOBUSR(A1) ;user idle if logged out BEQ 10$ MOVW JOBSTS(A1),D0 ;user idle if at monitor level ANDW #J.MON,D0 BNE 10$ MOVW JOBSTS(A1),D0 ;user idle if in external wait state ANDW #J.EXW,D0 BNE 10$ CMM JOBPRG(A1),#[SHE]_16.+[LL ] ;user idle if running SHELL BEQ 10$ CMM JOBPRG(A1),#[MOD]_16.+[EM ] ;user idle if running MODEM BEQ 10$ CMM JOBPRG(A1),#[LOG]_16.+[IN ] ;user idle if running LOGIN BEQ 10$ CMM JOBNAM(A1),#[TAS]_16.+[K ] ;user idle if named TASK BEQ 10$ JMP EXIT PAGE EXECUT: BYP SAVE A0-A5,D0-D5 AMOS RSTCON REST A0-A5,D0-D5 JMP EXIT FMTERR: TYPECR ? command format error CRLF BR EXIT EXIT: EXIT END .