OBJNAM WAITMX.LIT ; Created 16-Oct-85, edited 19-Feb-86 ; by Irv Bromberg, Medic/OS Consultants, Toronto, Canada ; Replacement for WAIT.LIT, allows maximum delay to be specified for use ; with terminals connected to MUX which may in TOW locked state. RADIX 10 VMAJOR=1 VMINOR=5 VEDIT=9 IF EQ,1 Syntax: WAITMX jobnam {maximum} where maximum is maximum wait time in seconds, default = forever when max expires and job's terminal has T.ECC(TCB) set we flush echo chars so CPU not sluggish in TTYIN echo wait loop. ENDC SEARCH SYS SEARCH SYSSYM SEARCH TRM JCB=A0 Buffer=A2 TCB=A5 Dtemp=D7 Delay=D1 Number=D1 CR=13 PHDR -1,0,PH$REU!PH$REE TRM BNE GetJob Syntax: TTYI ASCII "?Syntax: WAITMX jobnam {max} max=max wait in secs, " ASCII "default=forever" BYTE CR,0 EVEN EXIT GetJob: SUB #6,SP FILNAM @SP,XXX MOV JOBTBL,A1 SchJob: CMP @A1,#-1 JEQ NoJob MOV (A1)+,JCB MOV JOBNAM(JCB),Dtemp CMP Dtemp,@SP BNE SchJob MOV #-1,Delay ; set up maximum delay = forever BYP LIN ; delay parameter passed? BEQ Loop ; no, use default delay CMPB @Buffer,#', ; allow comma as separator BNE GetNum ; but not required INC Buffer ; bypass comma BYP ; bypass possible additional whitespace GetNum: NUM ; yes, make sure we have a number here JNE Syntax ; nope, syntax error GTDEC ; get delay period JMI Syntax TST Number JLE Syntax ; <=0 means syntax error CMP Delay,#10000 ; lets make this reasonable! JHI Syntax MUL Delay,#5 ; x5 because we wait 0.2 secs each time round Loop: MOVW JOBSTS(JCB),Dtemp ANDW #J.MSG!J.EXW!J.SLP!J.TIW,Dtemp BNE Quit SLEEP #2000 CTRLC Quit DBF Delay,Loop TYPE <%Timeout - wait aborted> MOV JOBTRM(JCB),Dtemp ; check that terminal doesn't have ECC set BEQ 10$ ; whoops, not attached! MOV Dtemp,TCB MOV T.ECC(TCB),Number BEQ 10$ CLR T.ECC(TCB) TYPE <, flushed> DCVT 0,OT$TRM!OT$LSP!OT$TSP TYPE CMP Number,#1 BEQ 10$ TYPE 10$: CRLF Quit: EXIT NoJob: TYPECR EXIT END .