DEFINT A-Z

DECLARE	SUB Filter (InString$)

COLOR 7, 1			' Set screen color.
CLS

Quit$ = CHR$(0) + CHR$(16)	' Value returned by INKEY$
				' when ALT+q is pressed.

' Set up prompt on bottom line of screen and turn cursor on:
LOCATE 24, 1, 1
PRINT STRING$(80, "_");
LOCATE 25, 1
PRINT TAB(30); "Press ALT+q to quit";

VIEW PRINT 1 TO	23		' Print between lines 1 & 23.

' Open communications (1200 baud, no parity, 8-bit data,
' 1 stop bit, 256-byte input buffer):
OPEN "COM1:1200,N,8,1" FOR RANDOM AS #1	LEN = 256

DO				' Main communications loop.

   KeyInput$ = INKEY$		' Check the keyboard.

   IF KeyInput$	= Quit$	THEN	' Exit the loop if the user
      EXIT DO			' pressed ALT+q.

   ELSEIF KeyInput$ <> "" THEN	' Otherwise, if the user has
      PRINT #1,	KeyInput$;	' pressed a key, send the
   END IF			' character typed to modem.
 ' Check the modem. If characters are waiting (EOF(1) is
 ' true), get them and print them to the screen:
 IF NOT EOF(1) THEN

      ' LOC(1) gives the number of characters waiting:
      ModemInput$ = INPUT$(LOC(1), #1)

      Filter ModemInput$	' Filter out line feeds and
      PRINT ModemInput$;	' backspaces, then print.
   END IF
LOOP

CLOSE				' End communications.
CLS
END
'
' ========================= FILTER ========================
'               Filters characters in an input string
' =========================================================
'
SUB Filter (InString$) STATIC

   ' Look for backspace characters and recode
   ' them to CHR$(29) (the LEFT cursor key):
   DO
      BackSpace = INSTR(InString$, CHR$(8))
      IF BackSpace THEN
      MID$(InString$, BackSpace) = CHR$(29)
      END IF
   LOOP WHILE BackSpace

   ' Look for line-feed characters and
   ' remove any found:
   DO
      LnFd = INSTR(InString$, CHR$(10))
      IF LnFd THEN
   InString$=LEFT$(InString$,LnFd-1)+MID$(InString$,LnFd+1)
      END IF
   LOOP WHILE LnFd

END SUB

