home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a081 / 2.ddi / CTFXX.EXE / FOXCOM08.PRG < prev    next >
Encoding:
Text File  |  1993-05-14  |  6.5 KB  |  213 lines

  1. *.............................................................................
  2. *   Program Name: FOXCOM08         Copyright: Magna Carta Software, Inc.
  3. *   Date Created: 06-24-91         Language:  FoxPro 2.0
  4. *.............................................................................
  5. * Description: FOXCOM07 plus...
  6. * b) Transmit interrupts;
  7. * c) ASCII file receive;
  8. * d) RTS/CTS flow control;
  9. * NOTE: If you use a null modem connection, RTS/CTS flow control requires
  10. * that RTS and CTS be "crossed" (pins 4 & 5). Most null modem adapters do
  11. * NOT do this by default. This will cause RTS/CTS flow control to appear
  12. * to fail. Either resolder the null modem adapter, or use a breakout box.
  13. *.............................................................................
  14. CLEAR ALL
  15. SET TALK OFF
  16. SET ESCAPE OFF
  17.  
  18. * Load the right library
  19. foxid = VERS()
  20. IF "2.0" $ foxid
  21.     SET LIBR TO ctf                 && Identified FoxPro 2.0
  22. ELSE
  23.     IF "2.5" $ VERS()
  24.         IF "Windows" $ foxid        && Identified FoxPro 2.5 for Windows
  25.             SET LIBR TO ctfw
  26.         ELSE
  27.             SET LIBR TO ctf25       && Identified FoxPro 2.5 for DOS
  28.         ENDIF
  29.     ENDIF
  30. ENDIF
  31.  
  32. SET COLOR OF SCHEME 17 TO SCHEME 1  && save default color scheme
  33. SET COLOR OF SCHEME 18 TO SCHEME 2
  34.  
  35. DO ctfhdr
  36. DO ctfutil
  37. SET PROCEDURE TO CTFUTIL
  38. version = 8
  39. portid  = 0
  40.  
  41. ACTIVATE WINDOW w_status
  42. ACTIVATE WINDOW w_term
  43.  
  44. ret = u8250_init(portid, COM1, 2400, 8, PARITY_NONE, 1)
  45. IF ret < 0
  46.     ? ret
  47.     =INKEY(0)
  48.     CANCEL
  49. ENDIF
  50. =CT_SET_WIN(portid)
  51. ret =install_ipr(portid, RECEIVE, NULL, 2048)
  52. IF ret < 0
  53.     ? ret-1
  54.     =INKEY(0)
  55.     CANCEL
  56. ENDIF
  57. *ret =install_ipr(portid, TRANSMIT, NULL, 2048)
  58. IF ret < 0
  59.     ? ret-1
  60.     =INKEY(0)
  61.     CANCEL
  62. ENDIF
  63. ret =install_isr(portid, 4, NULL)               && IRQ4 (use 3 for COM2)
  64. IF ret < 0
  65.     ? ret-2
  66.     =INKEY(0)
  67.     CANCEL
  68. ENDIF
  69.  
  70. @ 00,00 SAY "CommTools Terminal Version " +;
  71.     ALLTRIM(STR(version)) + ": Press ESC to return to main menu"
  72. =set_rx_xlat(0, LOCAL_ECHO, TRUE)           && turn on RX echo
  73. =set_tx_xlat(0, FLOWCTL, XONXOFF)           && assert XON/XOFF flow control
  74. =set_warpdrive(4)                           && allow high speed
  75.  
  76. DEFINE PAD p_ct_modem  OF main_menu PROMPT "\<Modem Command" AT 00, 37
  77.     ON SELECTION PAD p_ct_modem OF main_menu DO ct_modem WITH portid, 37 IN CTFMODEM.PRG
  78.  
  79. DEFINE PAD p_ct_fsend  OF main_menu PROMPT "S\<end File" AT 00, 52
  80.     ON SELECTION PAD p_ct_fsend  OF main_menu =do_file_send(portid)
  81.  
  82. DEFINE PAD p_ct_freceive OF main_menu PROMPT "\<Receive File" AT 00, 63
  83.     ON SELECTION PAD p_ct_freceive OF main_menu =do_file_receive(portid)
  84.  
  85. ACTIVATE MENU main_menu
  86.  
  87.  
  88. *
  89. * DO_FILE_RECEIVE(expN portid)
  90. * Show a menu to invoke file transmission.
  91. * Called from mainmenu()
  92. *
  93. FUNCTION do_file_receive
  94.     PARAMETERS portid
  95.     PRIVATE fname, ret
  96.  
  97.     ret   = -1
  98.     fname = get_filnam(.F.)
  99.     IF LEN(fname) != 0
  100.         =save_xlat(portid)
  101.         * USE XONXOFF FLOW CONTROL (THIS LETS US WRITE TO DISK) *
  102.         =set_tx_xlat(portid, FLOWCTL, XONXOFF)  && assert flow control
  103.         =set_rx_xlat(portid, INTERBYTE_DELAY, 5000) && set interbyte delay to 5000 ms.
  104. *       =set_rx_xlat(portid, LOCAL_ECHO, FALSE)   && optionally turn off RX local echo
  105.         =set_tx_xlat(portid, LOCAL_ECHO, FALSE)   && optionally don't echo TX data
  106.  
  107.         * Define a Window to show file transfer status reports.
  108.         * This is just for grins, we don't use it until the next example.
  109.         * Note that the status window is used for file transfer status
  110.         * reports instead.
  111.         DEFINE WINDOW w_xfer FROM 02, 20 TO 11, 59;
  112.             IN w_term;
  113.             TITLE "[ File Transfer Status ]" DOUBLE COLOR SCHEME 17
  114.         ACTIVATE WINDOW w_xfer
  115.         @01, 02 SAY "File Name : "
  116.         @02, 02 SAY "Bytes     : "
  117.         @03, 02 SAY "Last Msg. : "
  118.         @04, 02 SAY "Receiving"
  119.         @01, 14 SAY fname
  120.         * RECEIVE (ASCII) STARTS HERE (buffer size set to 4096 bytes) *
  121.         ret = freceive(portid, ASCII, 4096, "RXPROGRESS")
  122. *       ret = freceive(portid, ASCII, 4096, NULL)       && no progress reporting
  123.         COPY FILE "TEMP0001.$$$" TO fname
  124.         =SOUND_ON(100, 500)
  125.         =restore_xlat(portid)
  126.         DEACTIVATE WINDOW w_xfer
  127.     ELSE
  128.         =status_msg(0, "File not found")
  129.     ENDIF
  130.     =status_msg(0, "Finished")
  131. RETURN (ret)
  132.  
  133.  
  134.  
  135. FUNCTION rxprogress
  136.     PARAMETERS status, parm
  137.  
  138.     IF status = XFER_POSITION
  139.         =status_msg(0, "Bytes received: " + ALLTRIM(STR(parm)))
  140.     ENDIF
  141. RETURN (NIL)
  142.  
  143.  
  144.  
  145. *
  146. * DO_FILE_SEND(expN portid)
  147. * Show a menu to invoke file transmission.
  148. * Called from mainmenu()
  149. *
  150. FUNCTION do_file_send
  151.     PARAMETERS portid
  152.     PUBLIC xfer_row
  153.     PRIVATE fname, ret
  154.  
  155.     ret   = -1
  156.     fname = get_filnam(.T.)
  157.     IF LEN(fname) != 0
  158.         * USE XONXOFF FLOW CONTROL (THIS LETS THE RECEIVER WRITE TO DISK) *
  159.         =set_rx_xlat(portid, FLOWCTL, XONXOFF)  && accept flow control if > 2400 bps
  160.         =set_rx_xlat(portid, RX_BUFFER_HWM, 65) && adjust RX buffer high water mark low
  161. *       =set_tx_xlat(portid, LOCAL_ECHO, TRUE)  && optionally turn on TX local echo
  162.         ret = fqueue(fname)
  163.         IF ret == 0
  164.             xfer_row = 0
  165.             =status_msg(0, "Sending: " + fname)
  166.             * SEND THE FILE AS ASCII
  167.             ret =fsend(portid, ASCII, 5*1024, "xfer_progress")
  168.             IF ret == CT_EOF)
  169.                 =status_msg(0, STR(get_xfer_error()))
  170.             ELSE
  171.                 =status_msg(0, "Finished")
  172.             ENDIF
  173.         ELSE
  174.             =status_msg(0, "Error Queueing File: " + STR(ret))
  175.         ENDIF
  176.     ENDIF
  177. RETURN (ret)
  178.  
  179.  
  180.  
  181.  
  182. FUNCTION ct_online
  183.     PARAMETERS portid
  184.  
  185.     ACTIVATE WINDOW w_term
  186.     =c_term(portid)                 && switch to dumb terminal mode
  187. RETURN (0)
  188.  
  189.  
  190.  
  191. *
  192. * C_TERM -- This is a dumb terminal loop in FoxPro.
  193. * Alternately poll the serial input buffer and the keyboard for data.
  194. *
  195. FUNCTION c_term
  196.     PARAMETERS portid
  197.     PRIVATE c
  198.  
  199.     ?
  200.     DO WHILE .T.
  201.         * CHECK SERIAL PORT FOR BYTE *
  202.         =c_getc(portid)                      && check the serial port for a byte
  203.         * CHECK KEYBOARD FOR A KEY PRESS *
  204.         c = INKEY()                             && check keyboard for a key
  205.         DO CASE                                 && evaluate the received key
  206.             CASE c == ESC                       && ESC was pressed
  207.                 RETURN (0)
  208.             CASE c <> 0
  209.                 =c_putc(portid, c)
  210.         ENDCASE
  211.     ENDDO                                       && do while .t.
  212. RETURN (0)
  213.