;*********************************************************************
; ECHOIN.M68 - ECHO another job's INput to your screen
;
; by Dave Heyliger - AMUS Staff
;
; Usage: ECHOIN {jobnam}
;*********************************************************************

       SEARCH SYS                      ;search normals
       SEARCH SYSSYM
       SEARCH TRM

       PHDR    -1,0,PH$REE!PH$REU      ;standard header

       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

ERROR:  TYPECR  <?Job not found.>
END:    EXIT
       END