home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Black Box 4
/
BlackBox.cdr
/
progbas
/
baswiz17.arj
/
TERM.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-04-01
|
10KB
|
251 lines
' +----------------------------------------------------------------------+
' | |
' | BASWIZ Copyright (c) 1990-1991 Thomas G. Hanlin III |
' | |
' | The BASIC Wizard's Library |
' | |
' +----------------------------------------------------------------------+
DECLARE FUNCTION FGetSize& (BYVAL Handle%)
DECLARE FUNCTION TCInkey$ ()
DECLARE FUNCTION TCInStat% ()
DECLARE FUNCTION WMenuPopUp% (Handle%, PickList$(), HiFore%, LoFore%)
DECLARE SUB FClose (Handle%)
DECLARE SUB FOpen (File$, FMode$, BufferLen%, Handle%, ErrCode%)
DECLARE SUB GetDisplay (Adapter%, Mono%)
DECLARE SUB StartXmodemSend (Handle%, Protocol$, Baud$, MaxRec%, Record%, EstTime$, ErrCode%)
DECLARE SUB TCDone ()
DECLARE SUB TCDTR (BYVAL State%)
DECLARE SUB TCInit (Port%, InSize%, OutSize%, ErrCode%)
DECLARE SUB TCParms (Parity$, WordLength%, StopBits%)
DECLARE SUB TCSpeed (Bps&)
DECLARE SUB TCWrite (St$)
DECLARE SUB WClear (BYVAL Handle%)
DECLARE SUB WClose (BYVAL Handle%)
DECLARE SUB WColor (BYVAL Handle%, BYVAL Fore%, BYVAL Back%)
DECLARE SUB WCursor (BYVAL Handle%, BYVAL CSize%)
DECLARE SUB WDone ()
DECLARE SUB WFixColor (BYVAL Convert%)
DECLARE SUB WFrame (BYVAL Handle%, BYVAL Frame%, BYVAL Fore%, BYVAL Back%)
DECLARE SUB WGetColor (BYVAL Handle%, Fore%, Back%)
DECLARE SUB WGetLocate (BYVAL Handle%, Row%, Column%)
DECLARE SUB WInit (Rows%, Columns%, ErrCode%)
DECLARE SUB WInput (Handle%, Valid$, ExitCode$, ExtExitCode$, MaxLength%, St$, ExitKey$)
DECLARE SUB WLocate (BYVAL Handle%, BYVAL Row%, BYVAL Column%)
DECLARE SUB WOpen (Rows%, Columns%, SRow1%, SCol1%, SRow2%, SCol2%, Handle%, ErrCode%)
DECLARE SUB WPlace (BYVAL Handle%, BYVAL Row%, BYVAL Column%)
DECLARE SUB WSize (BYVAL Handle%, BYVAL Rows%, BYVAL Columns%)
DECLARE SUB WTitle (BYVAL Handle%, Title$, BYVAL Fore%, BYVAL Back%)
DECLARE SUB WUpdate ()
DECLARE SUB WWrite (BYVAL Handle%, St$)
DECLARE SUB WWriteLn (BYVAL Handle%, St$)
DECLARE SUB XmodemSend (Handle%, Protocol$, MaxRec%, Record%, ErrCount%, ErrCode%)
DEFINT A-Z
Rows = 25: Columns = 80 ' assume 25x80
GetDisplay Adapter, Mono ' get display type
IF INSTR(COMMAND$, "/43") THEN ' if /43 switch used...
IF Adapter = 4 OR Adapter = 6 THEN ' ...and EGA or VGA...
WIDTH , 43 ' ...set 43x80 mode
Rows = 43
END IF
END IF
IF INSTR(COMMAND$, "/B") THEN Mono = -1
WFixColor Mono ' colors --> mono (if need be)
WInit Rows, Columns, ErrCode ' initialize window handler
IF ErrCode THEN
PRINT "Error: insufficient memory"
END
END IF
MainWin = 0 ' background window handle
Win = MainWin ' same, for ANSIprint routine
WColor MainWin, 7, 0
WClear MainWin
WWriteLn MainWin, "BASWIZ tiny terminal program. Use Alt-X to exit."
WWriteLn MainWin, "PgUp to send a file, PgDn to receive one."
WWriteLn MainWin, ""
WCursor MainWin, 2 ' turn on the cursor
IF INSTR(COMMAND$, "/COM4") THEN ' if /COM4 switch used...
CommPort = 4 ' ...set to COM4
ELSEIF INSTR(COMMAND$, "/COM3") THEN ' if /COM3 switch used...
CommPort = 3 ' ...set to COM3
ELSEIF INSTR(COMMAND$, "/COM2") THEN ' if /COM2 switch used...
CommPort = 2 ' ...set to COM2
ELSE
CommPort = 1 ' ...otherwise assume COM1
END IF
TCInit CommPort, 1024, 128, ErrCode ' initialize comm handler
IF ErrCode THEN
PRINT "Error: insufficient memory"
TCDone
WDone
END
END IF
IF INSTR(COMMAND$, "/300") THEN ' if /300 switch used...
Baud$ = "300" ' ...speed is 300 bps
ELSEIF INSTR(COMMAND$, "/1200") THEN ' if /1200 switch used...
Baud$ = "1200" ' ...speed is 1200 bps
ELSE
Baud$ = "2400" ' ...else speed is 2400 bps
END IF
TCSpeed VAL(Baud$) ' set speed
TCParms "N", 8, 1 ' no parity, 8 bit words, 1 stop
Music = (INSTR(COMMAND$, "/QUIET") = 0) ' handle "ANSI" music setting
Change = -1 ' set screen update flag
DO
IF Change THEN ' if something changed...
WUpdate ' ...update the display
Change = 0 ' ...clear screen update flag
END IF
IF TCInStat% THEN ' if we've received something...
St$ = ""
DO ' ...get and "display" it
St$ = St$ + TCInkey$
LOOP WHILE TCInStat%
GOSUB ANSIprint
Change = -1 ' ...set screen update flag
END IF
DO ' if a key was pressed...
ky$ = INKEY$ ' ...get it
IF LEN(ky$) = 1 THEN TCWrite ky$ ' ...send it to the comm port
LOOP WHILE LEN(ky$) = 1
IF LEN(ky$) = 2 THEN ' handle Alt keys
SELECT CASE ASC(RIGHT$(ky$, 1)) '
CASE 73: GOSUB SendFile ' PgUp (send file)
CASE 81: GOSUB RecvFile ' PgDn (receive file)
CASE 45: TermDone = -1 ' Alt-X (exit the program)
CASE ELSE '
END SELECT '
END IF '
LOOP UNTIL TermDone
TCDTR 0 ' drop the DTR (hang up)
TCDone ' terminate comm handler
WDone ' terminate window handler
END ' terminate program
SendFile:
Change = -1
WOpen 6, 77, 5, 20, 6, 30, SendWin, ErrCode
WTitle SendWin, "Send File", 7, 0
WFrame SendWin, 2, 7, 0
REDIM Pick$(1 TO 2)
Pick$(1) = " Xmodem"
Pick$(2) = " Xmodem 1K"
SELECT CASE WMenuPopUp(SendWin, Pick$(), 0, 7)
CASE 1
Protocol$ = "Xmodem"
RecLen = 128
CASE 2
Protocol$ = "Xmodem-1K"
RecLen = 1024
CASE ELSE
WClose SendWin
RETURN
END SELECT
WPlace SendWin, 5, 10
WSize SendWin, 2, 60
WClear SendWin
WLocate SendWin, 1, 1
File$ = ""
WWriteLn SendWin, "File to send:"
WCursor SendWin, 2
WInput SendWin, "", CHR$(13) + CHR$(27), "", 80, File$, ExitKey$
WCursor SendWin, 0
File$ = UCASE$(LTRIM$(RTRIM$(File$)))
IF LEN(File$) = 0 OR ExitKey$ = CHR$(27) THEN
WClose SendWin
RETURN
END IF
FOpen File$, "R", 1024, Handle, ErrCode
IF ErrCode THEN
WWriteLn MainWin, "--- Unable to open file " + File$
WClose SendWin
RETURN
END IF
T = INSTR(File$, ":")
IF T THEN
Path$ = LEFT$(File$, T)
File$ = MID$(File$, T + 1)
ELSE
Path$ = ""
END IF
DO
T = INSTR(File$, "\")
IF T THEN
Path$ = Path$ + LEFT$(File$, T)
File$ = MID$(File$, T + 1)
END IF
LOOP WHILE T
WPlace SendWin, 5, 20
WSize SendWin, 6, 40
WClear SendWin
WLocate SendWin, 1, 1
WTitle SendWin, Protocol$ + " Send", 7, 0
WWriteLn SendWin, "File Path : " + Path$
WWriteLn SendWin, "File Name : " + File$
WWriteLn SendWin, "Xfer time :"
WWriteLn SendWin, "File Size :" + STR$(FGetSize&(Handle))
WWriteLn SendWin, "Bytes Sent : 0"
WWrite SendWin, "Status Msg : Waiting for NAK"
WUpdate
StartXmodemSend Handle, Protocol$, Baud$, MaxRec, Record, EstTime$, ErrCode
IF ErrCode THEN
WWriteLn MainWin, "--- No response from other computer."
FClose Handle
WClose SendWin
RETURN
END IF
WTitle SendWin, Protocol$ + " Send", 7, 0
WLocate SendWin, 3, 14
WWrite SendWin, EstTime$
WLocate SendWin, 6, 14
WWrite SendWin, SPACE$(30)
WUpdate
DO
XmodemSend Handle, Protocol$, MaxRec, Record, ErrCount, ErrCode
SELECT CASE ErrCode
CASE -11
WWriteLn MainWin, "--- Transfer aborted"
CASE -10
WWriteLn MainWin, "--- Transfer done"
CASE -6
WWriteLn MainWin, "--- Too many errors. Aborted."
CASE -5 TO -1
WLocate SendWin, 6, 14
WWrite SendWin, "Error in block. Retrying."
CASE 0
WLocate SendWin, 5, 13
WWrite SendWin, STR$((Record - 1) * RecLen)
WLocate SendWin, 6, 14
WWrite SendWin, SPACE$(30)
CASE IS > 0
WWriteLn MainWin, "--- Error reading file"
CASE ELSE
WWriteLn MainWin, "--- Unknown error, code = " + STR$(ErrCode)
END SELECT
WUpdate
LOOP UNTIL ErrCode <= -6 OR ErrCode > 0
FClose Handle
WClose SendWin
RETURN
RecvFile:
Change = -1
WWriteLn MainWin, "*** File receive is not yet implemented ***"
RETURN
REM $INCLUDE: 'ansi.bas'