;*********************************************************************
; ECHOIN.M68 - ECHO another job's INput to your screen
;
; by Dave Heyliger - AMUS Staff
;
; Usage: ECHOIN {jobnam}
;*********************************************************************
VMAJOR = 1. ;version 1.0 by Dave Heyliger
VMINOR = 0
.OFINI ;define variables...
.OFDEF NAME,4 ;job name PACKed
.OFSIZE IMPSIZ ;IMPSIZ is 4 bytes total
GETIMP IMPSIZ,A5 ;A5 points to start of var block
BYP ;bypass whitespace
LIN ;just INPUT cr???
BNE 10$ ;nope
TYPECR <Usage: ECHOIN jobname> ;yup, error message and quit
EXIT
10$: LEA A1,NAME(A5) ;get ready to PACK jobnam
PACK ;PACK job name into NAME var
PACK
LEA A1,NAME(A5) ;repoint A1 to job name
MOV JOBTBL,A0 ;A0 points to JOB table
20$: MOV (A0)+,A4 ;get job IDX pointer into A4
MOV A4,D0 ;set status register
BPL 30$ ;if positive, see if names match
BEQ 20$ ;if 0, get next IDX
BMI ERROR ;if negitive - error
30$: CMM @A1,JOBNAM(A4) ;found match?
BNE 20$ ;nope, look again
MOV JOBTRM(A4),A4 ;yes, point A4 to terminal def block
MOV T.IBF(A4),A0 ;A0 always points to start of buff
LOOP: CTRLC END ;quit on ^C
5$: SLEEP #1000. ;don't burn CPU time
MOV T.IBF(A4),A2 ;point A2 to input buffer of job
LIN ;at a CRLF?
BNE 10$ ;nope, must be input....
CRLF ;yup, CRLF
TYPE <.> ;mimmick a dot
7$: LIN ;still at CRLF?
BNE 10$ ;no, user entered something
CTRLC END ;quit on ctrlc
SLEEP #1000 ;yes, sleep
BR 7$ ;and look again
10$: CTRLC END ;quit on ctrlc
MOVB (A2)+,D1 ;echo line til CR or LF
CMPB D1,#15 ;CR?
BEQ 30$ ;yes, don't echo, see if done
CMPB D1,#0 ;end of line?
BEQ 30$ ;yup, don't echo, see if done
TTY ;else type out the character
20$: SLEEP #1000 ;wait just a little bit
BR 10$ ;and get next character
30$: CMPB @A0,#12 ;user entered return?
BEQ LOOP ;yes, start over
SLEEP #1000 ;nope, sleep a bit
DEC A2 ;repoint back to last character
BR 10$ ;and scan again