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

  1. *.............................................................................
  2. *   Program Name: FOXCOM03         Copyright: Magna Carta Software, Inc.
  3. *   Date Created: 06-18-91         Language:  FoxPro 2.0
  4. *.............................................................................
  5. * Description: FOXCOM02 plus...
  6. * a) user control of data format (data bits, parity, stop bits)
  7. *.............................................................................
  8. CLEAR ALL
  9. SET TALK OFF
  10. SET ESCAPE OFF
  11.  
  12. * Load the right library
  13. foxid = VERS()
  14. IF "2.0" $ foxid
  15.     SET LIBR TO ctf                 && Identified FoxPro 2.0
  16. ELSE
  17.     IF "2.5" $ VERS()
  18.         IF "Windows" $ foxid        && Identified FoxPro 2.5 for Windows
  19.             SET LIBR TO ctfw
  20.         ELSE
  21.             SET LIBR TO ctf25       && Identified FoxPro 2.5 for DOS
  22.         ENDIF
  23.     ENDIF
  24. ENDIF
  25.  
  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. version = 3
  32. portid  = 0
  33.  
  34. * Define Pull-Down Bar and Pads
  35. DEFINE MENU main_menu IN SCREEN COLOR SCHEME 3
  36.  
  37. DEFINE PAD p_ct_quit   OF main_menu PROMPT "\<Quit"      AT 00, 00
  38.     ON SELECTION PAD p_ct_quit OF main_menu =ct_quit(portid)
  39.  
  40. DEFINE PAD p_ct_online OF main_menu PROMPT "\<Go Online" AT 00, 06
  41.     ON SELECTION PAD p_ct_online OF main_menu =ct_online(portid)
  42.  
  43. DEFINE PAD p_ct_speed  OF main_menu PROMPT "\<Speed"     AT 00, 17
  44.     ON SELECTION PAD p_ct_speed  OF main_menu =do_speed(portid, 17)
  45.  
  46. DEFINE PAD p_ct_dataform  OF main_menu PROMPT "\<Data Format" AT 00, 24
  47.     ON SELECTION PAD p_ct_dataform  OF main_menu =ct_dataformat(portid, 24)
  48.  
  49. * Define Windows
  50. DEFINE WINDOW w_term FROM 01, 00 TO SROWS()-4, SCOLS()-1;
  51.     IN SCREEN;
  52.     TITLE " FoxCom Terminal " DOUBLE COLOR SCHEME 7
  53.  
  54. DEFINE WINDOW w_status FROM SROWS()-3, 00 TO SROWS()-1, 79;
  55.     IN SCREEN;
  56.     TITLE " FoxCom Status " DOUBLE COLOR SCHEME 17
  57.  
  58.  
  59. ACTIVATE WINDOW w_status
  60. ACTIVATE WINDOW w_term
  61.  
  62. @ 00,00 SAY "CommTools Terminal Version " + ALLTRIM(STR(version)) + ;
  63.     ": Press ESC to Exit"
  64. ret = u8250_init(portid, COM1, 2400, 8, PARITY_NONE, 1)      && initialize COM1
  65. IF ret < 0
  66.     ? ret
  67.     =INKEY(0)
  68.     CANCEL
  69. ENDIF
  70. ret =install_ipr(portid, RECEIVE, NULL, 2048)   && initialize receive IPR
  71. IF ret < 0
  72.     ? ret-1
  73.     =INKEY(0)
  74.     CANCEL
  75. ENDIF
  76. ret =install_isr(portid, 4, NULL)                     && IRQ4 (use 3 for COM2)
  77. IF ret < 0
  78.     ? ret-2
  79.     =INKEY(0)
  80.     CANCEL
  81. ENDIF
  82.  
  83.  
  84. ACTIVATE MENU main_menu
  85.  
  86.  
  87. FUNCTION ct_online
  88.     PARAMETERS portid
  89.  
  90.     ACTIVATE WINDOW w_term
  91.     =c_term(portid)                 && switch to dumb terminal mode
  92. RETURN (0)
  93.  
  94.  
  95.  
  96. *
  97. * C_TERM -- This is a dumb terminal loop in FoxPro.
  98. * Alternately poll the serial input buffer and the keyboard for data.
  99. *
  100. FUNCTION c_term
  101.     PARAMETERS portid
  102.     PRIVATE c
  103.  
  104.     ?
  105.     DO WHILE .T.
  106.         * CHECK SERIAL PORT FOR BYTE *
  107.         c = c_inchar(portid)                    && check the serial port for a byte
  108.         IF c <> CT_EOF                            && if a valid character display it
  109.             ?? CHR(c)
  110.         ENDIF
  111.         * CHECK KEYBOARD FOR A KEY PRESS *
  112.         c = INKEY()                             && check keyboard for a key
  113.         DO CASE                                 && evaluate the received key
  114.             CASE c == ESC                       && ESC was pressed
  115.                 RETURN (0)
  116.             CASE c <> 0
  117.                 =c_putc(portid, c)
  118.         ENDCASE
  119.     ENDDO                                       && do while .t.
  120. RETURN (0)
  121.  
  122.  
  123.  
  124. FUNCTION ct_quit
  125.     PARAMETERS portid
  126.     =deinit_port(portid)                        && deinitialize the port
  127.     DEACTIVATE WINDOW w_term
  128.     DEACTIVATE WINDOW w_status
  129.     DEACTIVATE MENU main_menu
  130.     CLEAR ALL
  131.     @ SROWS()-1, 00 SAY "End of CommTools Terminal Version " + ALLTRIM(STR(version))
  132.     @ SROWS()-1, 00 SAY PADC("Thank You for Using CommTools", WCOLS())
  133.     EXIT
  134. RETURN (0)
  135.  
  136.  
  137.  
  138. *
  139. * CT_DATAFORMAT(expN portid, expN dataparm)
  140. * Set the data format
  141. *
  142. FUNCTION ct_dataformat
  143.     PARAMETER portid, col
  144.     PRIVATE lrow
  145.  
  146.     lrow = WROWS() - 1
  147.     @ lrow, 0 CLEAR TO lrow, WCOLS()-2
  148.  
  149.     DEFINE POPUP pop_dataform FROM 01, col;
  150.         IN SCREEN;
  151.         SHADOW
  152.         DEFINE BAR 1 OF pop_dataform PROMPT " Data   "
  153.         DEFINE BAR 2 OF pop_dataform PROMPT " Parity "
  154.         DEFINE BAR 3 OF pop_dataform PROMPT " Stop   "
  155.  
  156.     ON SELECTION POPUP pop_dataform =_ct_dataformat(portid, BAR(), col+10)
  157.     ACTIVATE POPUP pop_dataform
  158.     RELEASE pop_dataform
  159. RETURN (0)
  160.  
  161.  
  162.  
  163. FUNCTION _ct_dataformat
  164.     PARAMETERS portid, dataform, col
  165.     PRIVATE lrow, dbits, pbits, sbits, speed
  166.     DIMENSION a_par[8]
  167.     a_par[1] = "NONE"
  168.     a_par[2] = "ODD"
  169.     a_par[4] = "EVEN"
  170.     a_par[6] = "MARK"
  171.     a_par[8] = "SPACE"
  172.  
  173.     ACTIVATE WINDOW w_status
  174.     lrow = WROWS() - 1
  175.     dbits = get_parm(portid, DATABITS)
  176.     sbits = get_parm(portid, STOPBITS)
  177.     pbits = get_parm(portid, PARITY)
  178.     speed = get_speed(portid)
  179.     @ lrow, 35 SAY "Data: "   + ALLTRIM(STR(dbits))
  180.     @ lrow, 43 SAY "Stop: "   + ALLTRIM(STR(sbits))
  181.     @ lrow, 51 SAY "Parity: " + a_par[pbits+1]
  182.     @ lrow, 65 SAY "Speed: "  + ALLTRIM(STR(speed))
  183.  
  184.     DO CASE
  185.         CASE dataform = 1
  186.             =do_databits(portid, col)
  187.         CASE dataform = 2
  188.             =do_parity(portid, col)
  189.         CASE dataform = 3
  190.             =do_stopbits(portid, col)
  191.     ENDCASE
  192. RETURN (0)
  193.  
  194.  
  195.  
  196. *
  197. * DO_DATABITS(expN portid, expN col)
  198. * Show a menu that allows the user to set the number of data bits.
  199. * Called from data_format_menu()
  200. *
  201. FUNCTION do_databits
  202.     PARAMETERS portid, col
  203.  
  204.     DEFINE POPUP pop_databits FROM 01, col;
  205.         IN SCREEN;
  206.         SHADOW
  207.         DEFINE BAR 1  OF pop_databits PROMPT "  5  "
  208.         DEFINE BAR 2  OF pop_databits PROMPT "  6  "
  209.         DEFINE BAR 3  OF pop_databits PROMPT "  7  "
  210.         DEFINE BAR 4  OF pop_databits PROMPT "  8  "
  211.  
  212.     ON SELECTION POPUP pop_databits =_do_databits(portid, VAL(PROMPT()))
  213.     ACTIVATE POPUP pop_databits
  214.     RELEASE pop_databits
  215. RETURN (0)
  216.  
  217.  
  218.  
  219. FUNCTION _do_databits
  220.     PARAMETERS portid, dbits
  221.     PRIVATE ret
  222.  
  223.     ret = set_parm(portid, DATABITS, dbits)
  224.     IF ret >= 0
  225.         =status_msg(0, "Databits: " + ALLTRIM(STR(dbits)))
  226.     ELSE
  227.         =status_msg(0, "Databits: ERROR")
  228.     ENDIF
  229. RETURN (ret)
  230.  
  231.  
  232.  
  233. *
  234. * DO_STOPBITS(expN portid, expN col)
  235. * Show a menu that allows the user to set the number of stopbits
  236. * Called from data_format_menu()
  237. *
  238. FUNCTION do_stopbits
  239.     PARAMETERS portid, col
  240.     PRIVATE sbits
  241.  
  242.     DEFINE POPUP pop_stopbits FROM 01, col;
  243.         IN SCREEN;
  244.         SHADOW
  245.         DEFINE BAR 1  OF pop_stopbits PROMPT "  1  "
  246.         DEFINE BAR 2  OF pop_stopbits PROMPT "  2  "
  247.  
  248.     ON SELECTION POPUP pop_stopbits =_do_stopbits(portid, VAL(PROMPT()))
  249.     ACTIVATE POPUP pop_stopbits
  250.     RELEASE pop_stopbits
  251. RETURN (0)
  252.  
  253.  
  254.  
  255. FUNCTION _do_stopbits
  256.     PARAMETERS portid, sbits
  257.     PRIVATE ret
  258.  
  259.     ret = set_parm(portid, STOPBITS, sbits)
  260.     IF ret >= 0
  261.         =status_msg(0, "Stopbits: " + ALLTRIM(STR(sbits)))
  262.     ELSE
  263.         =status_msg(0, "Stopbits: ERROR")
  264.     ENDIF
  265. RETURN (ret)
  266.  
  267.  
  268.  
  269. *
  270. * DO_PARITY(expN portid, expN col)
  271. * Show a menu that allows the user to set parity.
  272. * Called from data_format_menu()
  273. *
  274. FUNCTION do_parity
  275.     PARAMETERS portid, col
  276.     PRIVATE pbits
  277.  
  278.     DEFINE POPUP pop_parity FROM 01, col;
  279.         IN SCREEN;
  280.         SHADOW
  281.         DEFINE BAR 1  OF pop_parity PROMPT "NONE"
  282.         DEFINE BAR 2  OF pop_parity PROMPT "ODD"
  283.         DEFINE BAR 3  OF pop_parity PROMPT "EVEN"
  284.         DEFINE BAR 4  OF pop_parity PROMPT "MARK"
  285.         DEFINE BAR 5  OF pop_parity PROMPT "SPACE"
  286.  
  287.     ON SELECTION POPUP pop_parity =_do_parity(portid, PROMPT())
  288.     ACTIVATE POPUP pop_parity
  289.     RELEASE pop_parity
  290. RETURN (0)
  291.  
  292.  
  293.  
  294. FUNCTION _do_parity
  295.     PARAMETERS portid, nChoice
  296.     PRIVATE ret
  297.  
  298.     nChoice = ALLTRIM(nChoice)
  299.     DO CASE
  300.         CASE nChoice = 'NONE'
  301.             ret = PARITY_NONE
  302.         CASE nChoice = 'ODD'
  303.             ret = PARITY_ODD
  304.         CASE nChoice = 'EVEN'
  305.             ret = PARITY_EVEN
  306.         CASE nChoice = 'MARK'
  307.             ret = PARITY_MARK
  308.         CASE nChoice = 'SPACE'
  309.             ret = PARITY_SPACE
  310.         OTHERWISE
  311.             ret = -1
  312.     ENDCASE
  313.     IF ret >= 0
  314.         ret = set_parm(portid, PARITY, ret)
  315.         IF ret >= 0
  316.             =status_msg(0, "Parity: " + nChoice)
  317.         ENDIF
  318.     ENDIF
  319.     IF ret < 0
  320.         =status_msg(0, "Parity: ERROR")
  321.     ENDIF
  322. RETURN (ret)
  323.  
  324.  
  325.  
  326. *
  327. * DO_SPEED(expN portid)
  328. * This menu allows the user to select the data transfer rate.
  329. *
  330. PROCEDURE do_speed
  331.     PARAMETERS portid, col
  332.     PRIVATE speed
  333.  
  334.     DEFINE POPUP pop_speed FROM 01, col;
  335.         IN SCREEN;
  336.         SHADOW
  337.         DEFINE BAR 1  OF pop_speed PROMPT "50"
  338.         DEFINE BAR 2  OF pop_speed PROMPT "75"
  339.         DEFINE BAR 3  OF pop_speed PROMPT "110"
  340.         DEFINE BAR 4  OF pop_speed PROMPT "150"
  341.         DEFINE BAR 5  OF pop_speed PROMPT "300"
  342.         DEFINE BAR 6  OF pop_speed PROMPT "600"
  343.         DEFINE BAR 7  OF pop_speed PROMPT "1200"
  344.         DEFINE BAR 8  OF pop_speed PROMPT "2400"
  345.         DEFINE BAR 9  OF pop_speed PROMPT "4800"
  346.         DEFINE BAR 10 OF pop_speed PROMPT "9600"
  347.         DEFINE BAR 11 OF pop_speed PROMPT "19200"
  348.         DEFINE BAR 12 OF pop_speed PROMPT "38400"
  349.         DEFINE BAR 13 OF pop_speed PROMPT "57600"
  350.         DEFINE BAR 14 OF pop_speed PROMPT "115200"
  351.  
  352.     ON SELECTION POPUP pop_speed =_do_speed(portid, VAL(PROMPT()))
  353.     ACTIVATE POPUP pop_speed
  354.     RELEASE pop_speed
  355. RETURN (0)
  356.  
  357.  
  358.  
  359. FUNCTION _do_speed
  360.     PARAMETERS portid, speed
  361.     PRIVATE ret
  362.  
  363.     ret = set_speed(portid, speed)
  364.     IF ret >= 0
  365.         =status_msg(0, "Speed: " + ALLTRIM(STR(speed)) + " bits-per-second")
  366.     ELSE
  367.         =status_msg(0, "Speed: ERROR")
  368.     ENDIF
  369. RETURN (ret)
  370.  
  371.  
  372.  
  373. FUNCTION clear_status_line
  374.     PARAMETERS rstart, rend
  375.     PRIVATE row
  376.     ACTIVATE WINDOW w_status
  377.     row = WROWS() - 1
  378.     @row, rstart CLEAR TO row, rend
  379. RETURN
  380.  
  381.  
  382.  
  383. FUNCTION status_msg
  384.     PARAMETERS col, msg
  385.     =clear_status_line(col, 78)
  386.     @WROWS()-1, col SAY msg
  387. RETURN (0)
  388.