;******************************************************
;
; 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 TIME<hours:minutes command
; IF TIME>hours: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