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

  1. *.............................................................................
  2. *   Program Name: FOXCOM09         Copyright: Magna Carta Software, Inc.
  3. *   Date Created: 10-03-91         Language:  FoxPro 2.0
  4. *.............................................................................
  5. * Description: Sample Terminal Program. Based on FOXCOM08.PRG plus...
  6. * File send, with error correction, using any of XMODEM, XMODEM-CRC,
  7. * XMODEM-1k YMODEM, YMODEM-g, or ZMODEM
  8. *.............................................................................
  9. CLEAR ALL
  10. SET TALK OFF
  11. SET ESCAPE OFF
  12.  
  13. * Load the right library
  14. foxid = VERS()
  15. IF "2.0" $ foxid
  16.     SET LIBR TO ctf                 && Identified FoxPro 2.0
  17. ELSE
  18.     IF "2.5" $ VERS()
  19.         IF "Windows" $ foxid        && Identified FoxPro 2.5 for Windows
  20.             SET LIBR TO ctfw
  21.         ELSE
  22.             SET LIBR TO ctf25       && Identified FoxPro 2.5 for DOS
  23.         ENDIF
  24.     ENDIF
  25. ENDIF
  26.  
  27. SET COLOR OF SCHEME 17 TO SCHEME 1  && save default color scheme
  28. SET COLOR OF SCHEME 18 TO SCHEME 2
  29.  
  30. DO ctfhdr
  31. DO ctfutil
  32. SET PROCEDURE TO CTFUTIL
  33. version = 9
  34. portid  = 0
  35.  
  36. ACTIVATE WINDOW w_status
  37. ACTIVATE WINDOW w_term
  38.  
  39. ret = u8250_init(portid, COM1, 2400, 8, PARITY_NONE, 1)
  40. IF ret < 0
  41.     ? ret
  42.     =INKEY(0)
  43.     CANCEL
  44. ENDIF
  45. =CT_SET_WIN(portid)
  46. ret =install_ipr(portid, RECEIVE, NULL, 2048)
  47. IF ret < 0
  48.     ? ret-1
  49.     =INKEY(0)
  50.     CANCEL
  51. ENDIF
  52. ret =install_ipr(portid, TRANSMIT, NULL, 2048)
  53. IF ret < 0
  54.     ? ret-1
  55.     =INKEY(0)
  56.     CANCEL
  57. ENDIF
  58. ret =install_isr(portid, 4, NULL)               && IRQ4 (use 3 for COM2)
  59. IF ret < 0
  60.     ? ret-2
  61.     =INKEY(0)
  62.     CANCEL
  63. ENDIF
  64. IF ret == 0
  65.     =set_rx_xlat(0, LOCAL_ECHO, TRUE)           && turn on RX echo
  66.     =set_rx_xlat(0, EOL, CR2CRLF)               && turn on RX echo
  67. ENDIF
  68.  
  69. @ 00,00 SAY "CommTools Terminal Version " +;
  70.     ALLTRIM(STR(version)) + ": Press ESC for a list of commands"
  71.  
  72. DEFINE PAD p_ct_modem  OF main_menu PROMPT "\<Modem Command" AT 00, 37
  73.     ON SELECTION PAD p_ct_modem OF main_menu DO ct_modem WITH portid, 37 IN CTFMODEM.PRG
  74.  
  75. DEFINE PAD p_ct_fsend  OF main_menu PROMPT "S\<end a File" AT 00, 52
  76.     ON SELECTION PAD p_ct_fsend  OF main_menu =do_file_send(portid)
  77.  
  78. ACTIVATE MENU main_menu
  79.  
  80.  
  81.  
  82. FUNCTION ct_online
  83.     PARAMETERS portid
  84.  
  85.     ACTIVATE WINDOW w_term
  86.     =c_term(portid)                 && switch to dumb terminal mode
  87. RETURN (0)
  88.  
  89.  
  90.  
  91. *
  92. * C_TERM -- This is a dumb terminal loop in FoxPro.
  93. * Alternately poll the serial input buffer and the keyboard for data.
  94. *
  95. FUNCTION c_term
  96.     PARAMETERS portid
  97.     PRIVATE c
  98.  
  99.     ?
  100.     DO WHILE .T.
  101.         * CHECK SERIAL PORT FOR BYTE *
  102.         c = c_getc(portid)                      && check the serial port for a byte
  103.         * CHECK KEYBOARD FOR A KEY PRESS *
  104.         c = INKEY()                             && check keyboard for a key
  105.         DO CASE                                 && evaluate the received key
  106.             CASE c == ESC                       && ESC was pressed
  107.                 RETURN (0)
  108.             CASE c <> 0
  109.                 =c_putc(portid, c)
  110.         ENDCASE
  111.     ENDDO                                       && do while .t.
  112. RETURN (0)
  113.  
  114.  
  115.  
  116. *
  117. * DO_FILE_SEND(expN portid)
  118. * Show a menu to invoke file transmission.
  119. * Called from mainmenu()
  120. *
  121. FUNCTION do_file_send
  122.     PARAMETERS portid
  123.     PUBLIC xfer_row
  124.     PRIVATE fname, ret, fsize
  125.  
  126.     ret   = -1
  127.     DO WHILE .T.
  128.         protocol = get_protocol(40)
  129.         IF protocol == 0
  130.             EXIT
  131.         ENDIF
  132.         fname = get_filnam(.T.)
  133.         IF LEN(fname) != 0
  134.             =save_xlat(0)               && save the current transformation state
  135.             =set_rx_xlat(portid, LOCAL_ECHO, TRUE) && optionally echo RX to screen
  136. *           =set_tx_xlat(portid, LOCAL_ECHO, TRUE) && optionally turn on TX local echo
  137.  
  138.             * USE XONXOFF FLOW CONTROL (THIS LETS THE RECEIVER WRITE TO DISK) *
  139.             IF protocol = ASCII
  140.                 =set_rx_xlat(portid, FLOWCTL, XONXOFF)   && better accept flow control if > 2400 bps
  141.             ENDIF
  142.             ret = fqueue(fname)
  143.             IF ret == 0
  144.                 xfer_row = 0
  145.                 fsize = NULL
  146.                 =display_xfer(5, 5, fname, fsize)
  147.                 * SEND THE FILE USING FILE SPOOL BUFFER OF 24K (adjustable)
  148.                 ret = fsend(portid, protocol, 24*1024, "xfer_progress")
  149.                 IF ret == CT_EOF)
  150.                     =status_msg(0, STR(ct_get_error(portid)))
  151.                 ELSE
  152.                     =status_msg(0, "Finished")
  153.                 ENDIF
  154.                 DEACTIVATE WINDOW w_xfer
  155.             ELSE
  156.                 =status_msg(0, "File not found")
  157.             ENDIF
  158.             =restore_xlat(0)               && restore the transformation state
  159.         ENDIF
  160.     ENDDO
  161. RETURN (ret)
  162.  
  163.  
  164.  
  165. FUNCTION display_xfer
  166.     PARAMETERS row, col, fname, fsize
  167.  
  168.     DEFINE WINDOW w_xfer FROM row,col TO row+10,col+51;
  169.         TITLE 'File Transfer Progress';
  170.         SHADOW
  171.     ACTIVATE WINDOW w_xfer
  172.     @01, 01 SAY "File Name : "
  173.     @02, 01 SAY "Bytes     : "
  174.     @03, 01 SAY "File Size : "
  175.     @04, 01 SAY "Last Msg. : "
  176.     xfer_row = 4
  177.     IF fname != "$"
  178.         @01, 13 SAY fname
  179.     ENDIF
  180.     IF fsize != NULL
  181.         @03, 13 SAY fsize
  182.     ENDIF
  183. RETURN (protocol)
  184.