75 lines
2.2 KiB
QBasic
75 lines
2.2 KiB
QBasic
|
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 the 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
|
||
|
LineFeed = INSTR(Instring$, CHR$(10))
|
||
|
IF LineFeed THEN
|
||
|
InString$ = LEFT$(InString$, LineFeed - 1) + _
|
||
|
MID$(InString$, LineFeed + 1)
|
||
|
END IF
|
||
|
LOOP WHILE LineFeed
|
||
|
|
||
|
END SUB
|