home *** CD-ROM | disk | FTP | other *** search
- *.............................................................................
- * Program Name: FOXCOM07 Copyright: Magna Carta Software, Inc.
- * Date Created: 06-24-91 Language: FoxPro 2.0
- *.............................................................................
- * Description: FOXCOM06 plus...
- * a) Transmit interrupts;
- * b) ASCII file send;
- * c) XON/XOFF flow control;
- *.............................................................................
- CLEAR ALL
- SET TALK OFF
- SET ESCAPE OFF
-
- * Load the right library
- foxid = VERS()
- IF "2.0" $ foxid
- SET LIBR TO ctf && Identified FoxPro 2.0
- ELSE
- IF "2.5" $ VERS()
- IF "Windows" $ foxid && Identified FoxPro 2.5 for Windows
- SET LIBR TO ctfw
- ELSE
- SET LIBR TO ctf25 && Identified FoxPro 2.5 for DOS
- ENDIF
- ENDIF
- ENDIF
-
- SET COLOR OF SCHEME 17 TO SCHEME 1 && save default color scheme
- SET COLOR OF SCHEME 18 TO SCHEME 2
-
- DO ctfhdr
- DO ctfutil
- SET PROCEDURE TO CTFUTIL
- version = 7
- portid = 0
-
- ACTIVATE WINDOW w_status
- ACTIVATE WINDOW w_term
-
- ret = u8250_init(portid, COM1, 2400, 8, PARITY_NONE, 1)
- IF ret < 0
- ? ret
- =INKEY(0)
- CANCEL
- ENDIF
- =CT_SET_WIN(portid)
- ret =install_ipr(portid, RECEIVE, NULL, 2048)
- IF ret < 0
- ? ret-1
- =INKEY(0)
- CANCEL
- ENDIF
- ret =install_ipr(portid, TRANSMIT, NULL, 2048)
- IF ret < 0
- ? ret-1
- =INKEY(0)
- CANCEL
- ENDIF
- ret =install_isr(portid, 4, NULL) && IRQ4 (use 3 for COM2)
- IF ret < 0
- ? ret-2
- =INKEY(0)
- CANCEL
- ENDIF
-
-
- @ 00,00 SAY "CommTools Terminal Version " +;
- ALLTRIM(STR(version)) + ": Press ESC to return to main menu"
- =set_rx_xlat(0, LOCAL_ECHO, TRUE) && turn on RX echo
- =set_tx_xlat(0, FLOWCTL, XONXOFF) && assert XON/XOFF flow control
- =set_warpdrive(4) && allow high speed
-
- DEFINE PAD p_ct_modem OF main_menu PROMPT "\<Modem Command" AT 00, 37
- ON SELECTION PAD p_ct_modem OF main_menu DO ct_modem WITH portid, 37 IN CTFMODEM.PRG
-
- DEFINE PAD p_ct_fsend OF main_menu PROMPT "S\<end a File" AT 00, 52
- ON SELECTION PAD p_ct_fsend OF main_menu =do_file_send(portid)
-
- ACTIVATE MENU main_menu
-
-
-
- FUNCTION ct_online
- PARAMETERS portid
-
- ACTIVATE WINDOW w_term
- =c_term(portid) && switch to dumb terminal mode
- RETURN (0)
-
-
-
- *
- * DO_FILE_SEND(expN portid)
- * Show a menu to invoke file transmission.
- * Called from mainmenu()
- *
- FUNCTION do_file_send
- PARAMETERS portid
- PUBLIC xfer_row
- PRIVATE fname, ret
-
- ret = -1
- fname = get_filnam(.T.)
- IF LEN(fname) != 0
- * USE XONXOFF FLOW CONTROL (THIS LETS THE RECEIVER WRITE TO DISK) *
- =set_rx_xlat(portid, FLOWCTL, XONXOFF) && accept flow control if > 2400 bps
- =set_rx_xlat(portid, RX_BUF_HWM, 65) && adjust RX buffer high water mark low
- * =set_tx_xlat(portid, LOCAL_ECHO, TRUE) && optionally turn on TX local echo
- ret = fqueue(fname)
- IF ret == 0
- xfer_row = 0
- =status_msg(0, "Sending: " + fname)
- * SEND THE FILE AS ASCII
- ret =fsend(portid, ASCII, 5*1024, "xfer_progress")
- IF ret == CT_EOF)
- =status_msg(0, STR(get_xfer_error()))
- ELSE
- =status_msg(0, "Finished")
- ENDIF
- ELSE
- =status_msg(0, "Error Queueing File: " + STR(ret))
- ENDIF
- ENDIF
- RETURN (ret)
-
-
-
- *.............................................................................
- *
- * GET_FILNAM -- Get a file name from the user.
- * Parameters:
- * status -- Flag indicating whether file is to be sent (.T.) or received (.F.)
- * Return Value:
- * The file name
- *.............................................................................
- FUNCTION get_filnam
- PARAMETERS status
- PRIVATE scr, fnam, done, direct, i
- PUBLIC getlist, def_colors
-
- done = .F.
- direct = IIF(status,"Send:","Receive:")
- SET SCOREBOARD off
-
- * Define Window for File Name
- DEFINE WINDOW w_fname FROM 10,20 TO 16,70 TITLE 'File Select Window' ;
- SHADOW
- ACTIVATE WINDOW w_fname
-
- @ 1,1 SAY "Enter name of file to"
- @ 1,23 say direct
-
- DO WHILE !DONE
- fnam = SPACE(80)
- @ 1,30 GET fnam PICTURE "@!S16"
- READ
-
- IF LASTKEY() = ESC
- fnam = ""
- done = .T.
- ELSE
- fnam = ALLTRIM(fnam)
- IF valid_nam(fnam,status)
- done = .T.
- ELSE
- @ 2,2 say "Invalid/Not Found"
- @ 3,2 say "Press ESC to abort"
- i = 0
- DO WHILE i = 0
- i = inkey()
- ENDDO
- IF i = ESC
- fnam = ""
- done = .T.
- ENDIF
- @ 2,2 say " "
- @ 3,2 say " "
- ENDIF
- ENDIF
- ENDDO
- DEACTIVATE WINDOW w_fname
- RETURN fnam
-
-
-
- *
- * VALID_NAM -- Determine whether a file exists or whether a string is a
- * valid file name.
- * Parameters:
- * nam -- file name;
- * exist -- flag, determine if the file exists;
- *
- * Return Value:
- * .T. --
- * .F. --
- *
- FUNCTION valid_nam
- PARAMETERS nam,exist
- PRIVATE e,ret,r
-
- ret = .F.
- e = FILE(nam)
- IF exist && must exist
- IF e && does exist
- ret = .t.
- ENDIF
- ELSE && just valid name
- IF e && file exists and will be overwritten
- ret = .t. && may want to ask here
- ELSE && no existing file, can we make one?
- r = FCREATE(nam, 0)
- IF r >= 0 && yes, valid name
- ret = .T.
- =FCLOSE(r)
- ERASE &nam
- ENDIF
- ENDIF
- ENDIF
- RETURN ret
-
-
- FUNCTION xfer_progress
- PARAMETERS status, parm
- PRIVATE parm1, str, file_name, file_size, ro
-
- ro = xfer_row
- DO CASE
- CASE status = CONNECTION_LOST
- str = "Connection lost at " + ALLTRIM(STR(parm)) + "bytes"
- CASE status = CT_ACK
- str = "0 "
- CASE status = CT_CAN
- str = "CAN received!"
- CASE status = CT_DISK_FULL
- str = "I/O Error Writing to Disk"
- CASE status = CT_EOF
- str = "No character received"
- CASE status = CT_GARBAGE_RECEIVED
- str = "Junk Received"
- CASE status = CT_FILE_LENGTH_ERROR
- str = "File Length Error"
- CASE status = CT_FILE_SOURCE
- IF parm == DISK
- str = "Sending from DISK"
- ELSE
- str = "Sending from RAM"
- ENDIF
- CASE status = CT_MAX_ERRORS_REACHED
- str = "Max. Errors Reached"
- CASE status = CT_NO_RX_START
- str = "Receiver Did Not Start"
- CASE status = CT_NO_TX_START
- str = "Transmitter did not start. Attempt " + ALLTRIM(STR(parm))
- CASE status = CT_RX_CANCELLED
- str = "Receiver Cancelled"
- CASE status = CT_RX_DATA_ERROR
- str = "Receive Data Error"
- CASE status = CT_RX_TIMEOUT
- str = "Receiver Timeout"
- CASE status = CT_TX_CANCELLED
- str = "Transmitter Cancelled"
- CASE status = CT_UNSPECIFIED
- str = "Unspecified Error"
- CASE status = CT_XFER_POSITION
- str = "Bytes " + ALLTRIM(STR(parm))
- CASE status = USER_CANCELLED
- str = "Keyboard cancel received"
- OTHERWISE
- str = STR(status)
- ENDCASE
- =status_msg(0, str)
- RETURN (NIL)
-
-
-
- *
- * C_TERM -- This is a dumb terminal loop in FoxPro.
- * Alternately poll the serial input buffer and the keyboard for data.
- *
- FUNCTION c_term
- PARAMETERS portid
- PRIVATE c
-
- ?
- DO WHILE .T.
- * CHECK SERIAL PORT FOR BYTE *
- =c_getc(portid) && check the serial port for a byte
- * CHECK KEYBOARD FOR A KEY PRESS *
- c = INKEY() && check keyboard for a key
- DO CASE && evaluate the received key
- CASE c == ESC && ESC was pressed
- RETURN (0)
- CASE c <> 0
- =c_putc(portid, c)
- ENDCASE
- ENDDO && do while .t.
- RETURN (0)
-