; TALKTO - TALK TO MODEM ; ; Copyright [c] Noel Alaska Systems Technology, 1983. VMAJOR = 1. ; version equates VMINOR = 0. VSUB = 0. VEDIT = 8. ; CHANGE EACH EDIT <----------- VWHO = 0. SEARCH SYS ; AMOS librarys SEARCH SYSSYM SEARCH TRM SEARCH MFN ; my library DSECT .=0 ; define impure area XTDV: BLKL 1 ; orig term driver ODDB: BLKB D.DDB ; TERMINAL DDB ESCAPE: BLKB 1 ; escape char EVEN IMPURE = . .=0 PSECT BEGIN: PHDR -1,-1,PH$REE!PH$REU GETIMP IMPURE,A5 ; get memory BYP LIN BNE 1$ TYPECR EXIT 1$: FSPEC ODDB(A5),TRM ; set term name CALL TRMSRH ; find it MOV A3,D7 ; found? BNE 2$ ; YES TYPECR EXIT 2$: TST T.JLK(A3) ; detached? BEQ 3$ ; YES TYPECR EXIT 3$: BIS #T$ECS!T$ILC!T$IMI!T$DAT,T.STS(A3) MOV T.TDV(A3),XTDV(A5) ; set status bits MOV TRMTDC,A0 ; and switch to PSEUDO.TDV ADD #10,A0 MOV A0,T.TDV(A3) CLRB ODDB+D.FLG(A5) MOVW #[TRM],ODDB+D.DEV(A5) INIT ODDB(A5) OPENO ODDB(A5) MOV #1,ODDB+D.SIZ(A5) ; use single byte output JOBIDX A0 BIC #J.CCC,JOBSTS(A0) MOV JOBTRM(A0),A4 BIS #T$ECS!T$ILC!T$IMI,T.STS(A4) TYPESP ; acquire the escape char KBD CTRLC BYEBYE ; but quit if ^C is entered here MOVB D1,ESCAPE(A5) CLRW T.POO(A3) ; tab sync CRLF CRLF LOOP: TST T.ICC(A3) ; input from remote? BEQ LOOP1 ; NO CALL TTYGET ; YES - get it TTY ; send to local LOOP1: JOBIDX A0 BIT #J.CCC,@A0 ; ^C waiting? BEQ LOOP2 ; NO BIC #J.CCC,@A0 ; YES - reset it MOVB #3,D1 ; pretend ^C input BR LOOP3 LOOP2: TST T.ICC(A4) ; input from local? BEQ LOOP4 ; NO KBD ; YES - get it CMPB D1,ESCAPE(A5) ; is it escape char? BEQ BYEBYE ; YES - quit LOOP3: CALL TTYPUT ; NO - send to remote BR LOOP LOOP4: TST T.ICC(A3) ; no sleep if input still ready BNE LOOP ; on the remote end... SLEEP #10 ; sleep awhile BR LOOP BYEBYE: CLOSE ODDB(A5) 1$: SLEEP #100. BIT #T$OIP,@A3 BNE 1$ TST T.OQX(A3) BNE 1$ BIC #T$DAT,@A3 ; turn off DATA bit MOV XTDV(A5),T.TDV(A3) ; restore original .TDV to remote CRLF EXIT ; ----- TTYGET -- GET OTHER TERMINAL'S INPUT TTYGET: SAVE A5 MOV A3,A5 TTYIN AND #377,D1 REST A5 RTN TTYPUT: PUSH D1 1$: SLEEP #2 ; wait a bit BIT #T$OIP,@A3 ; is output still in progress? (RMT) BNE 1$ ; YES TST T.OQX(A3) ; is output still queued? (RMT) BNE 1$ ; YES AND #177,D1 ; remove parity CMPB D1,#11 ; is this a tab? BNE 2$ ; NO BISB #200,D1 ; YES - set parity bit 2$: MOV ODDB+D.BUF(A5),A6 MOVB D1,@A6 OUTPUT ODDB(A5) POP D1 RTN TRMSRH: MOV TRMDFC,A3 ; index TRMDEF chain 1$: CMM ODDB+D.FIL(A5),4(A3) BNE 2$ ; wrong one ADD #10,A3 ; right one - advance to TRMDEF proper RTN 2$: MOV @A3,A3 ; move up chain MOV A3,D7 BNE 1$ ; unless end RTN EVEN END