home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / MISC / CLACOM.ZIP / CLACOM.TXT < prev    next >
Text File  |  1995-01-04  |  171KB  |  5,929 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.                                      C L A C O M
  27.  
  28.  
  29.  
  30.  
  31.                                Communications Library
  32.  
  33.  
  34.                                          For
  35.  
  36.  
  37.                              Clarion Database Developer
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.           Copyright (C) 1993 - 1994 by GAP Development Company.
  45.  
  46.  
  47.           ALL RIGHTS  RESERVED. No part of this manual shall be reproduced,
  48.           stored in  a retrieval  system,  or  transmitted  by  any  means,
  49.           electronic, mechanical,  photocopying, recording,  or  otherwise,
  50.           without written  permission from  GAP Development  Company. While
  51.           every precaution  has been  taken  in  the  preparation  of  this
  52.           manual, GAP  Development Company  assumes no  responsibility  for
  53.           errors or omissions. Neither is any liability assumed for damages
  54.           resulting from the use of the information contained herein.
  55.  
  56.  
  57.           CLACOM is  the sole  and exclusive  property of  GAP  Development
  58.           Company. It  is licensed  and not  sold  to  the  end  user  with
  59.           restrictions placed upon its use.
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.           CLACOM is copyrighted by GAP Development Company.
  67.           Clarion and Clarion Database Developer are trademarks of Clarion
  68.           Software Corporation.
  69.           DESQview is a trademark of Quarterdeck.
  70.           DigiBoard is a trademark of DigiBoard Incorporated.
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.           Contents
  78.  
  79.  
  80.  
  81.           Description                                                     5
  82.  
  83.  
  84.  
  85.           Major Features                                                  5
  86.  
  87.  
  88.  
  89.           Getting Started                                                 6
  90.  
  91.  
  92.  
  93.           Integrating with Clarion                                        7
  94.  
  95.                Overlays - Protected Mode                                  8
  96.                Communications Interface                                  10
  97.                Key Codes                                                 13
  98.  
  99.  
  100.           Port Initialization                                            15
  101.  
  102.  
  103.  
  104.           Input & Output                                                 19
  105.  
  106.  
  107.  
  108.           File Transfers                                                 23
  109.  
  110.  
  111.  
  112.           Capture Buffers                                                26
  113.  
  114.  
  115.  
  116.           Sample Application                                             28
  117.  
  118.  
  119.  
  120.           Global Variables                                               31
  121.  
  122.  
  123.  
  124.           Functions - Quick Reference                                    32
  125.  
  126.  
  127.  
  128.                                        Page 3
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.           Functions - Detailed Reference                                 34
  136.  
  137.  
  138.  
  139.           Appendix A                                                     93
  140.  
  141.  
  142.  
  143.           Appendix B                                                     96
  144.  
  145.  
  146.  
  147.           Index                                                          97
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.                                        Page 4
  187.  
  188.  
  189.  
  190.           GAP Communications                                         CLACOM
  191.  
  192.  
  193.  
  194.  
  195.           Description
  196.  
  197.  
  198.           CLACOM is  a professional  communications library for programmers
  199.           using the  Clarion Database Developer. It allows you to integrate
  200.           interrupt driven,  asynchronous communications  into your Clarion
  201.           programs.
  202.  
  203.           CLACOM includes  robust Communications  routines which  are fully
  204.           interrupt driven. Written in highly optimized assembler, they are
  205.           capable of  operating at  any speed which the UART on an IBM type                                    
  206.           of computer  is capable  of producing.  The FIFO  buffers in  the
  207.           16550 UART  are fully  supported. Hardware  flow control (CTS/RTS
  208.           checking) is automatic.
  209.  
  210.           ANSI Terminal  Emulation is  fully integrated into CLACOM, as are
  211.           the most  popular  File  Transfer  protocols.  In  addition,  the
  212.           Clarion GUI Kit is supported for Graphics applications.
  213.  
  214.  
  215.           Major Features
  216.  
  217.              ∙ Supports the FIFO buffers of the 16550 UART chip.
  218.              ∙ Speeds up to 115,200 baud.
  219.              ∙ Supports COM  1 through  COM 4  as  well  as  Intelligent
  220.                DigiBoards using  a Direct  Programming  Interface  or  a
  221.                DigiBoard Device Driver.
  222.              ∙ Up to 4 ports can be opened simultaneously (16 ports when
  223.                using a DigiBoard).
  224.              ∙ Supports Hardware Flow Control (CTS/RTS), automatically.
  225.              ∙ Fully self  contained, built  in ANSI driver for IBM ANSI                                                
  226.                Terminal Emulation.
  227.              ∙ File transfer  protocols include - ASCII, Xmodem, Xmodem-                              
  228.                CRC,  1K  Xmodem,  1K  Xmodem-G,  Ymodem,  Ymodem-G,  and
  229.                Zmodem.
  230.              ∙ Works with  programs compiled as Static, Overlay, Overlay
  231.                with DLL, Protected, and Protected with DLL.
  232.              ∙ Extremely easy interfacing with Clarion programs.
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.                                        Page 5
  245.  
  246.  
  247.  
  248.           GAP Communications                                         CLACOM
  249.  
  250.  
  251.           Getting Started
  252.  
  253.  
  254.           First a  note about this documentation. This Text Based manual is
  255.           identical in  content to  the Printed Manual except that it lacks
  256.           formatting and  graphics. Some screens can not be reproduced in a
  257.           document such  as this.  Font  sizes  can  not  be  changed  when
  258.           necessary since  there is  no way of knowing what kind of printer
  259.           this document  will  be  printed  with.  The  Printed  Manual  is
  260.           designed in  such a way that it is easy to read and it is easy to
  261.           find the  information you may be looking for. We are unable to do
  262.           the same  with this  text  based  manual.  If  the  documentation
  263.           references a  screen, you will need to run the Example program to
  264.           see the  screen, since we are unable to reproduce it in this Text
  265.           Based manual.
  266.  
  267.  
  268.  
  269.           The following files are part of the CLACOM distribution set:
  270.  
  271.               CLACOM.TXT    - Text Based documentation. Not part of
  272.                               Registered version since its not needed.
  273.               DXVCLOM.LIB   - Library routines for Statically linked
  274.                               Clarion APP.
  275.               DOVCLCOM.LIB  - Library routines for Overlayed Clarion APP.
  276.               DDVCLCOM.LIB  - Library routines for Overlayed Clarion APP
  277.                               using Run Time Librares.
  278.               DESCLCOM.LIB  - Library routines for Protected mode Clarion
  279.                               APP using Run Time Libraries.             (1)
  280.               DEVCLCOM.LIB  - Library routines for Statically linked
  281.                               Protected mode Clarion APP.               (1)
  282.               CLACOM.OBJ    - Stub for including Module Definitions.
  283.               CLACOM.INC    - Module Structure Include file.
  284.               GTERM.ZIP     - Terminal Emulation example with Clarion
  285.                               source.
  286.               RESETDIG.ZIP  - Program used to reset a DigiBoard COM/Xi.
  287.  
  288.  
  289.           The .OBJ,  .LIB and  .INC files  should be  placed  in  the  same
  290.           directory where  the program you intend to use them with resides.
  291.           GTERM.ZIP contains  a Terminal  Emulation Clarion Application. It
  292.           should be  placed in its own directory along with the above .OBJ,
  293.           .LIB and INC files.
  294.  
  295.  
  296.  
  297.           (1) Protected  Mode Libraries  are not  included  with  Shareware
  298.               version of CLACom.
  299.  
  300.  
  301.  
  302.                                        Page 6
  303.  
  304.  
  305.  
  306.           GAP Communications                                         CLACOM
  307.  
  308.  
  309.           Integrating with Clarion
  310.  
  311.  
  312.           To tell  your Clarion  Application that  you are using the CLACOM
  313.           library, follow these steps:
  314.  
  315.           Load or Create your application.
  316.  
  317.           From the  View Menu,  select Module  View. Select Insert from the                    
  318.           Edit Menu.  The Module  Properties screen  will appear.  For  the
  319.           Module Name,  type CLACOM.OBJ.  Select the External Object Module
  320.           radio  button.  For  the  Module  Structure  Include  File,  type
  321.           CLACOM.INC. Select OK.
  322.  
  323.           CLACOM.OBJ is  a dummy  module. It  contains no code or data. Its
  324.           sole purpose is to include the CLACOM procedure definitions.
  325.  
  326.           You must  now edit  the Project  File and include the five CLACOM
  327.           libraries. The  five libraries  are identical  with the exception
  328.           that they  were compiled  using one  of the  five Clarion  memory
  329.           models :  Static, Overlayed,  Overlayed/Runtime,  Protected,  and
  330.           Protected/Runtime.
  331.  
  332.           Select the  Project Menu.  Select Change Project File. Select the
  333.           Module button  and then  the Insert  button. For the Module Name,
  334.           type:
  335.  
  336.                                   %CLAPFX%CLCOM.LIB
  337.  
  338.           Select the  External OBJ/LIB  Radio  button.  Finally,  save  the
  339.           Project File changes.
  340.  
  341.           Your Clarion application is now fully aware of the CLACOM library
  342.           routines and  you will  be free  to use  one of the five standard
  343.           Memory Models  without having to worry about which CLACOM library
  344.           to use.
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.                                        Page 7
  361.  
  362.  
  363.  
  364.           GAP Communications                                         CLACOM
  365.  
  366.  
  367.           Overlays - Protected Mode
  368.  
  369.           You must  perform one  final step  before generating  your CLACOM
  370.           application.
  371.  
  372.           The Standard  Communications interface  takes over  the interrupt
  373.           vector for  the selected  COM Port. This means that the interrupt
  374.           service routine  can not be swapped out. It must remain in memory                               
  375.           at all  times. The  same is  true if  you enable  the  Ctrl-Break
  376.           intercept routine (which you should).
  377.  
  378.           In order  to keep  the  Communications  routines  in  memory  and
  379.           prevent them  from being swapped out, you must create a file that
  380.           is used  by the  Project System  to determine  how  segments  are
  381.           loaded. In  your Clarion directory is a file called ROVERLAY.EXP.
  382.           Copy this  file to  your application's  directory, renaming it in
  383.           the process  by giving  it the same base name as your application
  384.           and with  an .EXP  extension. Next,  edit the  file and  add  the
  385.           following lines to the end of the SEGMENTS section:
  386.  
  387.                GCOM_DATA    PRELOAD            FIXED
  388.                GCOM_TEXT    PRELOAD            FIXED
  389.  
  390.           A portion of the Export File would appear as follows:
  391.  
  392.  
  393.  
  394.                     CLAICEP_TEXT      PRELOAD
  395.                     CLAFIXED_DATA     PRELOAD
  396.                     GCOM_DATA         PRELOAD FIXED
  397.                     GCOM_TEXT         PRELOAD FIXED
  398.  
  399.  
  400.           Please do not take the above change lightly or forget to make it.
  401.           Failure to  add the  above lines will cause your program to crash
  402.           as soon as the communications routines are swapped out of memory.
  403.           This is  especially important  for Protected Mode programs as you
  404.           want the Communications routines to remain FIXED in memory.
  405.  
  406.           Be sure  to name  this file  correctly or the Project System will
  407.           not use it. Its base name (the first 8 characters) is the same as
  408.           your application's base name. Its 3 character extension is "EXP".
  409.           For instance,  in the  GTERM sample  application, the name of its
  410.           Export File is GTERM.EXP.
  411.  
  412.           If your  Overlayed or  Protected Mode  application locks  up  the
  413.           computer, causes an XTRACE, or causes an Exception Error, and you
  414.           can attribute  the problem  to CLACOM,  check your  application's
  415.  
  416.  
  417.  
  418.                                        Page 8
  419.  
  420.  
  421.  
  422.           GAP Communications                                         CLACOM
  423.  
  424.  
  425.           directory for  the presence  of the  Export File and make sure it
  426.           contains the correct 2 lines as discussed above.
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.                                        Page 9
  477.  
  478.  
  479.  
  480.           GAP Communications                                         CLACOM
  481.  
  482.  
  483.           Communications Interface
  484.  
  485.           CLACOM supports three serial port interfaces:
  486.  
  487.  
  488.  
  489.                               STANDARD
  490.                               DIGIBOARD
  491.                               INT14/EBIOS
  492.  
  493.  
  494.           The Standard  interface is  used when  working with  the standard
  495.           COM1 thru  COM4 serial  ports on  the Host computer. This will be
  496.           the interface  most often  used.  If  an  end  user  is  using  a
  497.           DigiBoard then  either the DigiBoard or Int14/EBIOS interface may
  498.           be selected.  Most  DigiBoard  users  will  use  the  Int14/EBIOS
  499.           interface. All  input/output to  the DigiBoard  is performed  via
  500.           Interrupt 14  calls and  a Device  Driver (supplied by DigiBoard)
  501.           handles the  interface between  the program  and the  board.  The
  502.           DigiBoard interface  uses Direct Programming. CLACOM talks to the
  503.           board directly  without the need for a Device Driver. In order to
  504.           use this interface, a program called RESETDIG.EXE must be used in
  505.           the AUTOEXEC.BAT  file to  reset  the  DigiBoard  once  when  the
  506.           computer is first booted. This program is supplied as part of the
  507.           CLACOM package and may be freely distributed to your end users.
  508.  
  509.           In order to determine which interface your end users require, you
  510.           should provide a Hardware screen similar to the following:
  511.  
  512.  
  513.  
  514.  
  515.                   SCREEN NOT AVAILABLE IN TEXT BASED DOCUMENTATION
  516.                                  SEE PRINTED MANUAL
  517.  
  518.  
  519.  
  520.  
  521.           If the Standard Interface is selected, the Ports Button should be
  522.           enabled, the  DigiBoard Button  disabled, and if the Ports Button
  523.           is  selected,  a  screen  similar  to  the  following  should  be
  524.           displayed:
  525.  
  526.  
  527.  
  528.  
  529.                   SCREEN NOT AVAILABLE IN TEXT BASED DOCUMENTATION
  530.                                  SEE PRINTED MANUAL
  531.  
  532.  
  533.  
  534.                                        Page 10
  535.  
  536.  
  537.  
  538.           GAP Communications                                         CLACOM
  539.  
  540.  
  541.           If the  DigiBoard or Int14/EBIOS Interface is selected, the Ports
  542.           Button should  be disabled,  the DigiBoard Button enabled, and if
  543.           the DigiBoard  Button  is  selected,  a  screen  similar  to  the
  544.           following should be displayed:
  545.  
  546.  
  547.  
  548.  
  549.                   SCREEN NOT AVAILABLE IN TEXT BASED DOCUMENTATION
  550.                                  SEE PRINTED MANUAL
  551.  
  552.  
  553.  
  554.  
  555.           On the Hardware Screen, if the DigiBoard or Int14/EBIOS Interface                                         
  556.           is selected,  then the  Port Radio Buttons should be disabled. On
  557.           the Port  Assignments Screen,  the Base  and IRQ fields for COM 1             _
  558.           and COM 2 should be marked as "Skip". The reason for this is that
  559.           it makes  no difference what a user types into these fields since
  560.           the standard  Base Address  and IRQ  for these  two ports will be
  561.           used.
  562.  
  563.           On the  DigiBoard Parameters  Screen, the  fields that need to be
  564.           disabled  depend   upon  the   Interface.  If  the  Interface  is
  565.           DigiBoard, then the Memory Window and I/O Port Buttons are valid,
  566.           as is  the Channel  Number field.  Channel Numbers for the Direct                    _
  567.           Interface generally  range from  1 to 16. The sample screens show
  568.           the valid Window and I/O Port address for a DigiBoard.
  569.  
  570.           If, however,  the Interface is Int14/EBIOS, the Memory Window and
  571.           I/O Port  Buttons should  be disabled.  Only the  Channel  Number
  572.           field should  be selectable.  The Int14/EBIOS  Interface uses the
  573.           DigiBoard supplied  Device Driver  and it  already knows what the
  574.           addresses for  the board  are, so  these Radio  Buttons  are  not
  575.           needed for  this Interface.  Channel numbers  for this  Interface                                     __
  576.           generally range  from 4  to 19  (0 -  3 are  reserved for  COM1 -
  577.           COM4).
  578.  
  579.           Don't try  to do range checking on the DigiBoard Channel Numbers.
  580.           These boards  are produced  in several  varieties from 2 ports, 8
  581.           ports, up to 16 ports. An end user that is using a DigiBoard will
  582.           likely know what Channel Number is being configured.
  583.  
  584.           When using  the DigiBoard  Interface an  end user that is using a
  585.           DigiBoard will  also know what Memory Window and I/O Port address
  586.           the board  was configured  for when  the board was installed. The
  587.           valid addresses  are contained  in the  DigiBoard manuals and are
  588.           shown on the sample screens.
  589.  
  590.  
  591.  
  592.                                        Page 11
  593.  
  594.  
  595.  
  596.           GAP Communications                                         CLACOM
  597.  
  598.  
  599.           Keep in mind that in order to use the DigiBoard Direct Interface,
  600.           your end  users must  run the  supplied RESETDIG.EXE  program  in
  601.           their AUTOEXEC.BAT  files. This  program makes sure the DigiBoard
  602.           is reset and able to accept commands when the computer is powered
  603.           on. It  resets all  of the Channels on the board, which is why it                                    _
  604.           is run only once.
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.                                        Page 12
  651.  
  652.  
  653.  
  654.           GAP Communications                                         CLACOM
  655.  
  656.  
  657.           Key Codes
  658.  
  659.           CLACOM includes  a function  called GetKeyc.  If your application
  660.           needs to  send key  codes that  were  generated  from  the  local
  661.           keyboard out  the Communications  Port to  a remote  computer you
  662.           need to  use  this  function  to  gather  input  from  the  local
  663.           keyboard. Clarion's  keyboard routines  can not  be used  because
  664.           Clarion changes  the value  of certain key presses (including the
  665.           standard ASCII codes, 0 - 255).
  666.  
  667.           For instance,  Clarion re-maps  the  following  keys  from  their
  668.           standard ASCII value to a value meaningful only to Clarion:
  669.  
  670.  
  671.  
  672.  
  673.                       Key         Clarion Actual
  674.  
  675.                       Escape      256     27
  676.                       Enter       257     13
  677.                       Backspace   258      8
  678.  
  679.  
  680.           If you  use the Clarion keyboard functions and a user presses the
  681.           backspace key,  Clarion returns  a code  of 258. If you send this
  682.           key code  to the  remote computer,  what  you  will  actually  be
  683.           sending is the code 2 (Clarion's keyboard functions return a LONG
  684.           and Communications  Ports can  only accept  a BYTE, therefore the
  685.           high bytes  of the  return value are truncated and only the lower
  686.           byte is  sent). The  remote  computer  will  either  display  the
  687.           character (a  happy face) or act upon it (to the remote computer,
  688.           it is  a Ctrl-B). The remote computer will not know that you were
  689.           trying to backspace over a previously typed character!
  690.  
  691.           Any character  typed at the keyboard is a valid character to send
  692.           out the  Communications Port if that character has a value of 255
  693.           or less. It shouldn't be re-mapped or translated in any manner.
  694.  
  695.           GetKeyc  returns   keyboard  characters  "as  is".  It  makes  no
  696.           translations on  regular ASCII  characters (0  - 255).  Any  code
  697.           above 255 (an Extended Keyboard code) returns the actual keyboard
  698.           scan code for that key with the value 256 added. By adding 256 to
  699.           the value you can easily determine if the key is an extended key.
  700.           A Backspace is code 8. An Enter is code 13. An Escape is code 27.
  701.  
  702.           Because  Clarion  includes  its  Keyboard  Equate  file  in  your
  703.           application, there  are no  supplied mnemonics  for the key codes
  704.           that GetKeyc  returns. Appendix  A shows the actual key typed and
  705.  
  706.  
  707.  
  708.                                        Page 13
  709.  
  710.  
  711.  
  712.           GAP Communications                                         CLACOM
  713.  
  714.  
  715.           the value  returned by GetKeyc. You can not use BSKey to see if a
  716.           key press  is the  Back Space  key because  of the  keyboard  re-
  717.           mapping equates that Clarion includes in your program. If you do,
  718.           you will  be testing  against the  code 258  when you  need to be
  719.           testing against the code 8.
  720.  
  721.           For instance, this will not work:
  722.  
  723.              keychr    BYTE
  724.              retchr    SHORT
  725.  
  726.              retchr = GetKeyc()                   ! Get Key Press
  727.  
  728.              if retchr = BSKey                    ! Backspace hit
  729.                keychr = retchr                    ! Strip high Byte
  730.                ComPutc(0,keychr)                  ! Actually sends a Ctrl-B
  731.              end
  732.  
  733.  
  734.           This will work:
  735.  
  736.              keychr    BYTE
  737.              retchr    SHORT
  738.  
  739.              retchr = GetKeyc()                   ! Get Key Press
  740.  
  741.              if retchr = 8                        ! Backspace hit
  742.                keychr = retchr                    ! Strip high Byte
  743.                ComPutc(0,keychr)                  ! Sends an 8 (backspace)
  744.              end
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.                                        Page 14
  767.  
  768.  
  769.  
  770.           GAP Communications                                         CLACOM
  771.  
  772.  
  773.           Port Initialization
  774.  
  775.  
  776.           The  first  thing  a  communications  program  normally  does  is
  777.           initialize the  communications port and reset the modem. You will
  778.           notice that the sample program, GTERM, takes a different approach
  779.           to the  usual "terminal"  interface in that it doesn't initialize
  780.           the port until it is ready to use it.
  781.  
  782.           How you  initialize the  communications port  depends upon  which
  783.           Interface the  user has  selected. The  DigiBoard and Int14/EBIOS                                                  
  784.           Interfaces set  up the  port in  a single  step process.  This is
  785.           because some of the low level routines either in the Int14 Device
  786.           Driver or  the on-board BIOS require that all parameters be known
  787.           when initializing a port on the board.
  788.  
  789.           Setting up  the Standard  Interface is  a two  step process.  The
  790.           first step  is to  set up the Interrupt Handler, program the UART
  791.           to generate  interrupts, turn the FIFO buffers on (if the UART is                                           _
  792.           a 16550)  and program  the Interrupt  Controller chip  so that it
  793.           will recognize the UART interrupts. The second step is to set the
  794.           Line Control register in the UART. This is more commonly known as
  795.           setting the Baud Rate, Party, Data, and Stop bits.
  796.  
  797.           Port Numbers for the Standard and DigiBoard Direct Interfaces are
  798.           0 based.  Your users will not be accustomed to entering 0 for COM
  799.           1 or  1 for  COM 2,  therefore your application should use 1 when
  800.           referring to  COM 1,  2 when referring to COM 2, 3 when referring
  801.           to COM  3, etc.,  and you should make the translations to 0 based
  802.           ports before  calling any  of the  Communications routines.  Note
  803.           that the  INT14/EBIOS Interface uses port numbers that begin with
  804.           1.
  805.  
  806.           The following  is an  example on  setting up  the  communications
  807.           port. The  first step  is to  initialize the ANSI driver. This is
  808.           important so that the screen output functions know how large your
  809.           Terminal Screen is and the default color you want to use.
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.                                        Page 15
  825.  
  826.  
  827.  
  828.           GAP Communications                                         CLACOM
  829.  
  830.  
  831.  
  832.  
  833.                NOTE: It  is imperative that you call InitAnsi prior to
  834.                using any  CLACOM function,  particularly Gputc, Gputs,
  835.                or any of the File Transfer routines. The need for this
  836.                is particularly  important  if  you  are  generating  a
  837.                Protected Mode  application because  the screen  output
  838.                functions write  directly to  video memory. In order to
  839.                directly address  video memory, these functions need to
  840.                know the  video segment  address. The  default for this
  841.                address is  B800 or  A000.  In  Protected  Mode,  these
  842.                addresses are not valid. One of the reasons for calling
  843.                InitAnsi is  so  that  it  may  determine  the  correct
  844.                segment address  to use when accessing video memory. If
  845.                you forget to call InitAnsi, your program will crash as
  846.                soon as a character is written to the display.
  847.  
  848.  
  849.           You must  pass the  COM port  number that the ANSI driver will be
  850.           associated with.  The ANSI  Cursor Position Report (CPR) sequence
  851.           is issued  whenever the  driver receives  a Device  Status Report
  852.           (DSR) command.  The CPR  sequence is sent out the COM port. Since
  853.           there is  only one  screen and  one ANSI  driver, the driver must
  854.           know which  port to use. The DSR/CPR sequences are generally only
  855.           used by  BBS  programs  to  determine  if  the  caller  has  ANSI
  856.           capability. The  second step  is to determine which Interface the
  857.           user is using and configure the port accordingly:
  858.  
  859.              InitAnsi(comport,MaxRows,MaxCols,14) ! Initialize ANSI Driver
  860.  
  861.              BaudRate = DEFORMAT(GCN:BaudRate)    ! string to number
  862.  
  863.              data = deformat(GCN:Data)            ! get Data
  864.              stop = deformat(GCN:Stop)            ! Stop
  865.  
  866.              if GCN:Parity = 'Odd'                ! and Parity
  867.                parity = 1
  868.              elsif GCN:Parity = 'Even'
  869.                parity = 2
  870.              else
  871.                parity = 0
  872.              end
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.                                        Page 16
  883.  
  884.  
  885.  
  886.           GAP Communications                                         CLACOM
  887.  
  888.  
  889.              gotdigi = 0                          ! assume no DigiBoard
  890.  
  891.              if clip(GCN:Interface) = 'DigiBoard' ! using DigiBoard
  892.                comport = GCN:DigiChnl - 1         ! 0 base the Port #
  893.                gotdigi = 1                        ! set DigiBoard flag
  894.                anystring = GCN:DigiSeg            ! get Memory Window
  895.                digiseg = StrHex(anystring)             ! as a Hex Number
  896.                anystring = GCN:DigiPort           ! get I/O Port
  897.                digiport = StrHex(anystring)            ! as a Hex Number
  898.  
  899.                retcode =
  900.           DsetUp(DigiSeg,DigiPort,comport,BaudRate,parity,data,stop)
  901.  
  902.                if retcode > 0
  903.                  ! display error message and quit
  904.                end
  905.              elsif clip(GCN:Interface) = 'Int14/EBIOS'      ! Int14/EBIOS
  906.                comport = GCN:DigiChnl             ! Port Number
  907.                gotdigi = 1                        ! set DigiBoard flag
  908.  
  909.                retcode = Int14Set(comport,BaudRate,parity,data,stop)
  910.  
  911.                if retcode > 0
  912.                  ! display error message and quit
  913.                end
  914.              else                                 ! Regular Interface
  915.                ! get Port, IRQ, and BASE Address
  916.  
  917.                IRQ = 0
  918.                base = 0
  919.  
  920.                if GCN:Port = 'COM1'
  921.                  comport = 0
  922.                elsif GCN:Port = 'COM2'
  923.                  comport = 1
  924.                elsif GCN:Port = 'COM3'
  925.                  comport = 2
  926.                  IRQ = GCN:IRQ3
  927.                  anystring = GCN:BASE3
  928.                  base = StrHex(anystring)
  929.                elsif GCN:Port = 'COM4'
  930.                  comport = 3
  931.                  IRQ = GCN:IRQ4
  932.                  anystring = GCN:BASE4
  933.                  base = StrHex(anystring)
  934.                end
  935.                
  936.  
  937.  
  938.  
  939.  
  940.                                        Page 17
  941.  
  942.  
  943.  
  944.           GAP Communications                                         CLACOM
  945.  
  946.  
  947.                ! initialize COM Port and Interrupt Vector
  948.  
  949.                retcode = SetPort(IRQ,base,comport)
  950.  
  951.                if retcode > 0
  952.                  ! display error message and quit
  953.                else
  954.                  ! Set Baud, Parity, Data, and Stop
  955.  
  956.                  retcode = InitPort(comport,BaudRate,parity,data,stop)
  957.  
  958.                  if retcode > 0
  959.                    ResetPort()                    ! Interrupts Off
  960.                    ! display error message and quit
  961.                  end
  962.                end
  963.              end
  964.  
  965.  
  966.           As you can see when using the Standard Interface and there are no
  967.           errors setting up the Port, we then call InitPort to set the Baud
  968.           Rate, Data, etc.
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998.                                        Page 18
  999.  
  1000.  
  1001.  
  1002.           GAP Communications                                         CLACOM
  1003.  
  1004.  
  1005.           Input & Output
  1006.  
  1007.  
  1008.           To gather input from the local keyboard, GetKeyc is used. GetKeyc
  1009.           returns a  SHORT. If  the return  value is  less than 0 then that
  1010.           means no  key was  pressed (GetKeyc actually returns a -1 in this
  1011.           case). If the return value is greater than 255 then that means an
  1012.           extended key was pressed (function key, cursor pad key, etc). You
  1013.           normally do  not send  these extended keys out the communications
  1014.           port unless  the remote  end can accept and handle extended keys.
  1015.           If the  remote end  can handle extended keys, the usual procedure
  1016.           for sending  these keys is to first send a 0, then send the lower
  1017.           8 bits  of the  return value. If the return value is less than or
  1018.           equal to 255, then you assign the return value to a BYTE and call
  1019.           ComPutc to send the keyboard code.
  1020.  
  1021.           The following  example shows how to use GetKeyc and interpret the
  1022.           return value. Note that we do not use the Clarion Key Code Equate
  1023.           labels since they are mapped to different codes:
  1024.  
  1025.              comport   SHORT
  1026.              retchr    SHORT
  1027.              keychr    BYTE
  1028.  
  1029.              retchr = GetKeyc()                   ! get a keyboard char
  1030.  
  1031.              if retchr NOT= -1                    ! if something there
  1032.                if retchr > 255                    ! Extended Key
  1033.                  case retchr                      ! which one
  1034.                    of 278                         ! Alt-U, Upload a File
  1035.                    of 288                         ! Alt-D, Download a File
  1036.                    of 369                         ! Alt-F10, activate Menu
  1037.                  end
  1038.                else                               ! regular keyboard key
  1039.                  keychr = retchr                  ! Translate to BYTE value
  1040.                  ComPutc(comport,keychr)          ! and send it out
  1041.                end
  1042.              end
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.                                        Page 19
  1057.  
  1058.  
  1059.  
  1060.           GAP Communications                                         CLACOM
  1061.  
  1062.  
  1063.           The following  example is  similar to the above but in this case,
  1064.           the remote  end can  handle  extended  keyboard  codes  (commonly
  1065.           called DoorWay mode):
  1066.  
  1067.              comport   SHORT
  1068.              retchr    SHORT
  1069.              keychr    BYTE
  1070.  
  1071.              retchr = GetKeyc()                   ! get a keyboard char
  1072.  
  1073.              if retchr NOT= -1                    ! if something there
  1074.                if retchr > 255                    ! Extended Key
  1075.                  case retchr                      ! which one
  1076.                    of 278                         ! Alt-U, Upload a File
  1077.                    of 288                         ! Alt-D, Download a File
  1078.                    of 369                         ! Alt-F10, activate Menu
  1079.                    else                           ! nothing we care about
  1080.                      keychr = retchr              ! Translate to BYTE value
  1081.                      ComPutc(comport,0)           ! flag it as extended key
  1082.                      ComPutc(comport,keychr)      ! send scan code
  1083.                  end
  1084.                else                               ! regular keyboard key
  1085.                  keychr = retchr                  ! Translate to BYTE value
  1086.                  ComPutc(comport,keychr)          ! and send it out
  1087.                end
  1088.              end
  1089.  
  1090.  
  1091.           Whether or  not local  keyboard characters  are sent to the local
  1092.           screen depends  upon if you originated the connection or answered
  1093.           the connection.  Generally the  originating side does not display
  1094.           keyboard characters.  It simply  sends  the  characters  out  the
  1095.           communications  port   and  the   answering  side   displays  the
  1096.           characters on  its screen and sends the characters back, at which
  1097.           time you retrieve them from your receive buffer and display them.
  1098.           This is sometimes refered to as Full Duplex.
  1099.  
  1100.           Some answering  systems do not echo characters back to the sender
  1101.           (refered to  as Half  Duplex). In  this case,  you will  need  to
  1102.           display the  keyboard character  in addition to sending it to the
  1103.           communications port.
  1104.  
  1105.           If you are writing BBS software, you always display locally typed
  1106.           characters on the screen, and you always echo characters received
  1107.           from the  communications port  back out  the  port.  If  you  are
  1108.           writing Terminal  Emulation software,  whether or  not to display
  1109.           locally typed  characters on the screen is generally a Phone Book
  1110.  
  1111.  
  1112.  
  1113.  
  1114.                                        Page 20
  1115.  
  1116.  
  1117.  
  1118.           GAP Communications                                         CLACOM
  1119.  
  1120.  
  1121.           option for each entry in the phone book. Characters received from
  1122.           the communications port are never sent back out the port.
  1123.  
  1124.           The following  is an  example of  keyboard input  routines  where
  1125.           "Half Duplex" operation is required:
  1126.  
  1127.              comport   SHORT
  1128.              retchr    SHORT
  1129.              keychr    BYTE
  1130.              halfdup   BYTE
  1131.  
  1132.              halfdup = 1                          ! flag to use half duplex
  1133.  
  1134.              retchr = GetKeyc()                   ! get a keyboard char
  1135.  
  1136.              if retchr NOT= -1                    ! if something there
  1137.                if retchr < 256                    ! regular character
  1138.                  keychr = retchr                  ! Translate to BYTE value
  1139.                  ComPutc(comport,keychr)          ! and send it out
  1140.  
  1141.                  if halfdup                       ! if half duplex
  1142.                    Gputc(keychr)                  ! display on local screen
  1143.                  end
  1144.                end
  1145.              end
  1146.  
  1147.  
  1148.           A good  example of  Half Duplex  versus Full  Duplex is  when you
  1149.           enter into  Terminal Emulation  mode when  not connected  with  a
  1150.           remote  computer.   If  the  modem  is  configured  to  not  echo
  1151.           characters back,  then anything you type will not be displayed on
  1152.           the screen.  This is  because there  is no On Line service on the
  1153.           remote end to send the characters back. If you subsequently place
  1154.           an item  on the  Terminal Menu to toggle duplex from full to half
  1155.           and toggle  it to  half, then  what you type will be displayed on
  1156.           the  screen   (providing  you  write  the  code  to  handle  this
  1157.           situation, as in the above example).
  1158.  
  1159.           GPutc and GPuts are the local output routines. The first displays                   _
  1160.           single characters  while the second displays entire strings. Both
  1161.           routines are  tied into the internal ANSI driver which means they                                              _
  1162.           can contain  ANSI display  sequences to  move the  cursor, change
  1163.           colors, clear the screen, etc.
  1164.  
  1165.           ComGetc is  the communications  port input  routine. It retrieves
  1166.           single byte values from the port. In order to distinguish between
  1167.           a no  character available  condition (empty receive buffer) and a
  1168.           legitimate character,  it returns  a negative value (-1) if there
  1169.  
  1170.  
  1171.  
  1172.                                        Page 21
  1173.  
  1174.  
  1175.  
  1176.           GAP Communications                                         CLACOM
  1177.  
  1178.  
  1179.           are no  characters waiting  to be  read. The return value must be
  1180.           assigned to a BYTE before it can be displayed by Gputc.
  1181.  
  1182.           An example of ComGetc and Gputc together:
  1183.  
  1184.              comport   SHORT
  1185.              retchr    SHORT
  1186.              keychr    BYTE
  1187.  
  1188.              retchr = ComGetc(comport)            ! get a remote char
  1189.  
  1190.              if retchr NOT= -1                    ! if something there
  1191.                keychr = retchr                    ! Translate to BYTE value
  1192.                Gputc(keychr)                      ! and display it
  1193.              end
  1194.  
  1195.  
  1196.           ComPutc and  ComPuts are  the communications output routines. The                     __
  1197.           first sends  single characters  while  the  second  sends  entire
  1198.           strings.
  1199.  
  1200.           A word  about the  built in  ANSI driver  and Clarion.  The  ANSI
  1201.           driver writes  directly to  the video display memory (taking care
  1202.           to honor  DESQView's shadow  buffer if operating under DESQView).
  1203.           Because Clarion keeps a backup copy of the video display, Clarion
  1204.           will overwrite  anything placed on the screen by Gputc and Gputs.
  1205.           This occurs  because when  Clarion opens  a screen  or a menu, it
  1206.           first updates the physical screen with the contents of its backup
  1207.           buffer, then opens the screen. The only time this is a problem is
  1208.           when you  are in  Terminal  Mode  and  using  the  CLACOM  output
  1209.           routines.
  1210.  
  1211.           To circumvent  this problem  there is  a procedure called GetScrn
  1212.           which will  update Clarion's  backup buffer  with the contents of
  1213.           the physical  screen. This  procedure should  be called  prior to
  1214.           invoking a Clarion function that writes to the screen.
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.                                        Page 22
  1231.  
  1232.  
  1233.  
  1234.           GAP Communications                                         CLACOM
  1235.  
  1236.  
  1237.           File Transfers
  1238.  
  1239.  
  1240.           CLACOM supports  all of the popular File Transfer Protocols. Each
  1241.           of the  protocols are  given a  number  (with  the  exception  of
  1242.           Zmodem). Before  initiating an  Upload or a Download, you need to
  1243.           prompt the user for a Protocol. Your end users won't be the least
  1244.           bit impressed  about having  to type in a number so your Protocol
  1245.           Browse Box  should display Protocol Names. In the background, you
  1246.           will translate  the Names  into numbers  to send  to the protocol
  1247.           drivers. The  sample Terminal  Program shows an excellent example
  1248.           of how  to prompt  for a Protocol and translate the string into a
  1249.           number to  send  to  the  protocol  drivers.  The  Protocols  are
  1250.           numbered as follows:
  1251.  
  1252.  
  1253.  
  1254.                     0 - ASCII      3 - 1K Xmodem-G
  1255.                     1 - Xmodem     4 - Ymodem
  1256.                     2 - 1K Xmodem  5 - Ymodem-G
  1257.  
  1258.  
  1259.           Note that  as far  as CLACOM is concerned, there is no difference
  1260.           between Checksum  Xmodem and  CRC Xmodem. CLACOM always starts in
  1261.           "CRC Mode" but will adjust itself as necessary.
  1262.  
  1263.           Also note  that both  of the Ymodem protocols (as well as Zmodem)
  1264.           are Batch Protocols and when Downloading, you need not prompt for
  1265.           a File  Name since  the name will be supplied by the sender. When
  1266.           Uploading you  can either provide a single File Name to upload or
  1267.           a Wild Card specification.
  1268.  
  1269.           To Download  (receive) files  using the above protocols, you call
  1270.           the DownLoad  function. The  equivalent Zmodem function is called
  1271.           GetZmodem. To  Upload (send) files using the above protocols, you
  1272.           call the  UpLoad function.  The  equivalent  Zmodem  function  is
  1273.           called SendZmodem or SendZmodem1.
  1274.  
  1275.           When transferring  files you have two options when displaying the
  1276.           transfer statistics  (i.e., the  CPS rating,  bytes  transferred,
  1277.           progress  meter,  etc.).  You  can  use  the  built  in  Transfer
  1278.           Statistics Window or display your own window. The built in window
  1279.           may not  be suitable for some applications. For instance, you may
  1280.           not like  its colors  or its  screen position.  To use  your  own
  1281.           Transfer Statistics  Window, simply  pass the  value of  1 in the
  1282.           statfunc parameter when calling the Upload or Download functions.
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.                                        Page 23
  1289.  
  1290.  
  1291.  
  1292.           GAP Communications                                         CLACOM
  1293.  
  1294.  
  1295.           When using  your own window, the file transfer statistics will be
  1296.           displayed according to how you design the screen. You may display
  1297.           some or  all of  the statistics.  Because Clarion does not have a
  1298.           pointer data  type,  the  transfer  functions  cannot  call  your
  1299.           procedure so  that you  may keep  track of  your own  statistics.
  1300.           Instead, all  they can  do is  update your  transfer window. This
  1301.           means that your screen structure will need to be designed so that
  1302.           it uses  the variables  that the  transfer functions  use to keep
  1303.           track of  the statistics.  These variables are all of the CSTRING
  1304.           data type  and are  usable by  your Clarion application simply by
  1305.           declaring a  GROUP structure  over the first variable. To utilize
  1306.           these  variables  in  your  screen  structure,  declare  a  GROUP
  1307.           structure as follows:
  1308.  
  1309.             TransferVars  GROUP, PRE(XFR), EXTERNAL, NAME('xfervars')
  1310.             FileName      CSTRING(128)            ! File Name
  1311.             FileSize      CSTRING(14)             ! Size of File
  1312.             Blocks        CSTRING(8)              ! # of Blocks in File
  1313.             Bytes         CSTRING(10)             ! # of Bytes in File
  1314.             Errors        CSTRING(8)              ! Current errors
  1315.             CPS           CSTRING(10)             ! Current CPS Rating
  1316.             StatusMes     CSTRING(26)             ! Current Status Message
  1317.             Protocol      CSTRING(14)             ! Current Protocol
  1318.             StatMeter     CSTRING(34)             ! Progress Meter
  1319.                           End
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326.  
  1327.  
  1328.  
  1329.  
  1330.  
  1331.  
  1332.  
  1333.  
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.                                        Page 24
  1347.  
  1348.  
  1349.  
  1350.           GAP Communications                                         CLACOM
  1351.  
  1352.  
  1353.           You will probably have to code the screen structure by hand since
  1354.           Clarion does  not allow you to select global variables for use in
  1355.           screen fields.  You can  use the  screen structure  in the sample
  1356.           application as  a template for your own screens. To reference the
  1357.           transfer statistics  variables, you  declare an  ENTRY field with
  1358.           the SKIP attribute using one of the above variable names:
  1359.  
  1360.             XFERSCREEN  SCREEN(12,60),PRE(XSC),CENTER,SHADOW,COLOR(30)
  1361.               ROW(2,4)  STRING('File Name :')
  1362.               ..........
  1363.               ROW(5,7)  STRING('Blocks :')
  1364.               ..........
  1365.               ROW(8,7)  STRING('Status :')
  1366.               ROW(2,16) ENTRY(@S14),USE(XFR:FileName),SKIP,COLOR(63,78,120)
  1367.               ROW(5,16) ENTRY(@S8),USE(XFR:Blocks),SKIP,COLOR(63,78,120)
  1368.               ROW(8,16) ENTRY(@S26),USE(XFR:StatusMes),SKIP,COLOR(63,78,120)
  1369.             End.
  1370.  
  1371.           Prior to  calling an  Upload or Download function you should open
  1372.           your transfer  screen. When  the file  transfer is completed, you
  1373.           should then  close your screen. The transfer routines will update
  1374.           your screen after each block of data is sent or received (this is
  1375.           the equivalent to you calling the Clarion Display procedure).
  1376.  
  1377.           Note that  when using  your own  transfer window,  if there  is a
  1378.           critical error  such as  the inability to open the file, no error
  1379.           message will  be displayed. You should check the return code from
  1380.           the transfer  functions and  display your  own error  message  if
  1381.           necessary.
  1382.  
  1383.           When Downloading (receiving) files, the files will be placed into
  1384.           the current working directory. If you want the files to be placed
  1385.           into a  specific directory, you should change into that directory
  1386.           prior to  calling a  Download function.  When Uploading (sending)
  1387.           files, the  files are  expected to  be  in  the  current  working
  1388.           directory. You  need to  change into whatever directory the files
  1389.           are located in. One exception to this is Zmodem where there is an
  1390.           alternate Send  function that  allows you  to pass  the directory
  1391.           path as  one of  the parameters  (please see  SendZmodem1 in  the
  1392.           Reference Section for more information about this function).
  1393.  
  1394.  
  1395.  
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402.  
  1403.  
  1404.                                        Page 25
  1405.  
  1406.  
  1407.  
  1408.           GAP Communications                                         CLACOM
  1409.  
  1410.  
  1411.           Capture Buffers
  1412.  
  1413.  
  1414.           CLACOM supports  automatic Scroll  Back or  Capture Buffers. When
  1415.           enabled, any  data (with the exception of ANSI sequences) that is
  1416.           sent to  the ANSI  driver using  Gputs or Gputc is also placed in
  1417.           the capture buffer.
  1418.  
  1419.           The capture  buffer is  capable of  holding 64k  of data  and  is
  1420.           automatically written  to disk when it becomes full. After a disk
  1421.           write, the  buffer is  reset so  that another  64k of data can be
  1422.           stored.
  1423.  
  1424.           Two  functions   are  provided  to  support  capturing  of  data.
  1425.           SetCaptureFile tells  the capture  routines what name to give the
  1426.           capture file.  It should be called first. If you do not call this
  1427.           procedure then  a default name will be used for the capture file.
  1428.           SetCapture is used to turn the capture buffer on or off. You must
  1429.           always be  sure to  call SetCapture with a parameter of 0 to turn
  1430.           the capture  buffer off  when you  are finished  with the capture
  1431.           file. Failure to do so will leave the buffer memory allocated and
  1432.           will prevent  flushing the  capture data  to disk (whatever is in
  1433.           the buffer will be lost).
  1434.  
  1435.           CLACOM is responsible for capturing and saving the data. What you
  1436.           do with the data is up to your application. If you would like for
  1437.           your users  to be able to view the data, you will need to provide
  1438.           Clarion routines for doing so. If you do provide a View procedure
  1439.           to allow  your users  to view  the capture data, be sure to first
  1440.           call SetCapture with a parameter of 0 to flush the capture buffer
  1441.           to disk.  When you  regain control  from the  View procedure, you
  1442.           will once  again need  to call  SetCapture with  a parameter 1 to
  1443.           turn the capture buffer back on.
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.  
  1460.  
  1461.  
  1462.                                        Page 26
  1463.  
  1464.  
  1465.  
  1466.           GAP Communications                                         CLACOM
  1467.  
  1468.  
  1469.           The following is an example of using a capture buffer:
  1470.  
  1471.              ScrFile  CSTRING(64)                 ! Name of ScrollBack File
  1472.  
  1473.              ! set up an automatic Scroll Back Buffer
  1474.  
  1475.              ScrFile = 'GTERM$$.CAP'              ! Give Scroll File a name
  1476.  
  1477.              Do TurnOnCapture                     ! Turn on Capture
  1478.  
  1479.              .....                                ! your program code here
  1480.  
  1481.  
  1482.              ! end of procedure, close Scroll Back Buffer
  1483.  
  1484.              retchr = SetCapture(0)               ! Turn Capture Off
  1485.  
  1486.              Return                               ! Return from Procedure
  1487.  
  1488.              TurnOnCapture Routine                ! Turn on Capture
  1489.                SetCaptureFile(ScrFile)            ! Tell Capture File Name
  1490.                if SetCapture(1)                   ! and turn on Capture
  1491.                  Open(CaptureErr)                 ! couldn't allocate Mem
  1492.                  bell()                           ! make noise
  1493.                  Accept                           ! tell um
  1494.                  Close(CaptureErr)                ! close error screen
  1495.                end
  1496.                Exit                               ! Return from Routine
  1497.  
  1498.  
  1499.           GTERM gives  an excellent  example of how to utilize an automatic
  1500.           Scroll Back  buffer and  allow the  user  to  specify  a  Capture
  1501.           Buffer. It  also shows how to allow the user to view the contents
  1502.           of the  Scroll Back  or the Capture Buffer, clear the buffer, and
  1503.           save it under a different name.
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.                                        Page 27
  1521.  
  1522.  
  1523.  
  1524.           GAP Communications                                         CLACOM
  1525.  
  1526.  
  1527.           Sample Application
  1528.  
  1529.  
  1530.           Included with  CLACOM is  a  sample  Terminal  Emulation  program
  1531.           (called GTERM)  which shows how to use most of the communications
  1532.           routines.  You  may  use  this  application  as  a  template  for
  1533.           designing your  own  communications  program.  GTERMG  is  a  GUI
  1534.           version of the same program (it requires the Clarion GUI kit).
  1535.  
  1536.           The First  Procedure is defined as InitProgram. InitProgram first
  1537.           arms a  ShutDown Procedure  called ResetCbreak.  In then  makes a
  1538.           call to  SetCbreak to  set up the Ctrl-Break handler (a necessary
  1539.           requirement for  any communications program). ResetCbreak will be
  1540.           called automatically  when the  program ends.  It makes a call to
  1541.           RestCbreak to restore the Ctrl-Break handler.
  1542.  
  1543.           InitProgram then  checks to  see if  the Main  Configuration File
  1544.           exists. If  this is  the first  time the  program is run, it will
  1545.           create the configuration file with default values for each of the
  1546.           fields. It  then checks  to see  if the  Protocol File exists. If                                                 __
  1547.           not, it creates the file with the 7 internal protocols. This data
  1548.           could be  set up  in a  Memory Queue,  but placing  it in  a file
  1549.           allows you  to create  an entry screen so that your users can add
  1550.           external  protocols.   You  will  see  from  examining  the  File
  1551.           Properties that  the fields  to allow  for external protocols are
  1552.           already in  the file.  If you  do create a Browse/Form for adding
  1553.           external protocols,  you need  to make sure that the user can not
  1554.           delete or change any of the internal protocols.
  1555.  
  1556.           InitProgram then  calls MainMenu. On MainMenu the user may select
  1557.           the Files Menu, which contains Quit, to exit the program.
  1558.  
  1559.           The Dial Menu brings up a Lookup screen where the user may select
  1560.           a Phone  Number to  call. The  Dialing Directory is tied into the
  1561.           EditPhone Form  so that a user may add or change an entry without
  1562.           having to go to the Setup Menu.
  1563.  
  1564.           When a  phone  number  has  been  selected,  the  Dial  Procedure
  1565.           initializes the  Communications Port  and calls  the number. Upon
  1566.           successful connection  with the remote computer it will place the
  1567.           user  in   Terminal  Mode.   Dial  gives  excellent  examples  on
  1568.           interfacing with a communications port and a modem.
  1569.  
  1570.           The Terminal  Menu puts  the user  directly into  Terminal  Mode.
  1571.           Because Terminal  Mode can be entered either directly or from the
  1572.           Dial Menu,  the procedure checks to see if it was called by Dial.
  1573.           If so, it won't attempt to initialize the Communications Port. If
  1574.           entered from  the Menu,  Terminal initializes the port in exactly
  1575.  
  1576.  
  1577.  
  1578.                                        Page 28
  1579.  
  1580.  
  1581.  
  1582.           GAP Communications                                         CLACOM
  1583.  
  1584.  
  1585.           the same  manner as  Dial,  with  one  exception.  For  the  Port
  1586.           parameters, instead  of  using  the  parameters  from  a  dialing
  1587.           directory entry, it uses the global default parameters.
  1588.  
  1589.           Terminal Mode is really the heart of the application. Whatever is
  1590.           received from the Communications Port is displayed on the screen.
  1591.           Incoming characters  are sent  to the ANSI Driver. If you wish to                                               _
  1592.           emulate a  TTY device,  instead of  sending the characters to the
  1593.           ANSI Driver,  you can  use Clarion's TYPE function (the character
  1594.           will first  have to  be converted  to a  string). Keyboard  codes
  1595.           (those entered  from the  local keyboard)  are checked  to see if
  1596.           they are  extended keys.  Any  keyboard  code  above  255  is  an
  1597.           extended key. If the key code is a regular keyboard character, it
  1598.           is sent  out the  Communications Port.  If the  key  code  is  an
  1599.           extended key  it is  checked to  see if it is the menu activation
  1600.           key (Alt-F10)  or one  of the  "hot keys".  If so,  the  routines
  1601.           associated with  those keys are invoked. If the key code is not a
  1602.           regular  ASCII   character  or  an  extended  key  that  Terminal
  1603.           recognizes it is simply discarded.
  1604.  
  1605.           Please see the section Key Codes for more information on Extended
  1606.           Keyboard Codes  and why you need to use CLACOM's GetKeyc function
  1607.           to retrieve characters from the keyboard.
  1608.  
  1609.           Terminal includes  a Menu  that is activated by pressing the Alt-
  1610.           F10 key.  It allows  the user  to exit  Terminal Mode, Upload and
  1611.           Download Files,  Clear the  Screen, Change  Modem Parameters  and
  1612.           Hang Up  the modem  (drop carrier). You will notice that any menu
  1613.           function that  depends upon  there  being  a  remote  carrier  is
  1614.           disabled if there is no connection with a remote computer.
  1615.  
  1616.           Because Clarion  writes to the screen twice (once to video memory
  1617.           and once  to its  own backup  buffer) Clarion  doesn't know  that
  1618.           you've been using the ANSI driver to display characters. When you                               _
  1619.           use Gputc  and Gputs  to send  incoming characters  to the CLACOM
  1620.           ANSI driver,  Clarion has no idea that you've been writing to the
  1621.           screen. While  in Terminal  Mode, before  you  call  any  Clarion
  1622.           Function that displays something on the screen (with the possible
  1623.           exception of  the TYPE  function) you  need to  update the backup                           _
  1624.           buffer that  Clarion writes  to. This is accomplished with a call
  1625.           to GetScrn. GetScrn reads the contents of the physical screen and
  1626.           updates Clarion's  backup buffer  with the  information. Terminal
  1627.           shows how and when to call GetScrn. If you don't make the call to
  1628.           GetScrn then  Clarion will  erase whatever  is on  your  Terminal
  1629.           Screen before  it displays  the screen  you open. To get a better
  1630.           understanding for  this, comment  out all of the calls to GetScrn
  1631.           in the  Terminal Procedure. Then make and run the program. Make a
  1632.           connection to a remote computer. While in Terminal Mode, activate
  1633.  
  1634.  
  1635.  
  1636.                                        Page 29
  1637.  
  1638.  
  1639.  
  1640.           GAP Communications                                         CLACOM
  1641.  
  1642.  
  1643.           the  Menu  (Alt-F10).  Watch  what  is  on  the  screen  suddenly
  1644.           disappear!
  1645.  
  1646.           The Setup  Menu allows a user to set default Modem Parameters and
  1647.           enter Phone  Book entries.  The Modem  Parameters are used as the
  1648.           defaults for  each Phone  Book entry  and when  entering Terminal
  1649.           Mode from the Terminal Menu.
  1650.  
  1651.           GTERM gives excellent examples on how to use the CLACOM functions
  1652.           and procedures.  It can  be used  as a template to write powerful
  1653.           Terminal  Emulation   programs   that   include   more   terminal
  1654.           emulations, external  protocols,  script  files  (for  automating                              __
  1655.           logons), keyboard  macros, Compuserve  or BBS  Message  handling,
  1656.           Screen Capturing, and lots more.
  1657.  
  1658.           GTERM can  be condensed so that your Mailing List Application can
  1659.           automatically dial a number contained in the data base. It can be
  1660.           expanded to become a popular Term program, even a BBS program!
  1661.  
  1662.  
  1663.  
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685.  
  1686.  
  1687.  
  1688.  
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.                                        Page 30
  1695.  
  1696.  
  1697.  
  1698.           GAP Communications                                         CLACOM
  1699.  
  1700.  
  1701.           Global Variables
  1702.  
  1703.  
  1704.           The following  variables are  declared global  and may be used by
  1705.           your application  to alter  the behavior  of  the  Communications
  1706.           routines. The  names shown  are the  actual  names  used  by  the
  1707.           Communications routines.  See the  sample application  to see how
  1708.           they are declared and named:
  1709.  
  1710.             asciidel  The number  of clock tics to delay after sending each
  1711.                       line in a file when using the ASCII file transfer. 18
  1712.                       tics equals 1 second.
  1713.             combufsiz Sets the  size of  the Receive  Buffer when using the
  1714.                       Direct Interface. The Receive Buffer defaults to 6144
  1715.                       bytes. This  has proven  to be  the optimal  size for
  1716.                       high speed  communications when using a file transfer
  1717.                       protocol such  as Ymodem-G.  However you may increase
  1718.                       or decrease  this  size  by  changing  this  variable
  1719.                       (decreasing the  size will  typically result  in lost
  1720.                       data at high speeds).
  1721.             crscur    Contains the  ANSI driver's  current Cursor Position.
  1722.                       The high  byte contains  the row  coordinates and the
  1723.                       low byte  contains the  column coordinates.  Changing
  1724.                       this variable changes the cursor position.
  1725.             gnormal   Contains the ANSI driver's current Color. This is the
  1726.                       initial color  that you  pass to InitAnsi but it will
  1727.                       change whenever  an ANSI  color sequence  is sent  to
  1728.                       Gputs or  Gputc. Changing  this variable  changes the
  1729.                       color of  subsequent  characters  sent  to  the  ANSI
  1730.                       driver.
  1731.             meterchr  This variable defines the character that makes up the
  1732.                       Progress Meter on the File Transfer Status Window.
  1733.             noascmes  When set  to 1,  disables all  messages  and  windows
  1734.                       associated with  ASCII file transfers. This is useful
  1735.                       when you are using the ASCII upload/download routines
  1736.                       for something other than transferring files.
  1737.             nocts     When set  to 1,  disables the  Clear  To  Send  (CTS)
  1738.                       checking that  is  performed  by  the  Communications
  1739.                       Output routines.  Should never be set unless there is
  1740.                       a specific reason for doing so.
  1741.             usefifo   If a  Communications Port has a 16550 UART installed,
  1742.                       the FIFO  buffers on  the UART  will automatically be
  1743.                       turned  on   and  utilized.   Some  UART  chips  have
  1744.                       defective FIFO  implementations where  turning on the
  1745.                       FIFO  buffers   will  cause  incorrect  behavior.  To
  1746.                       disable the FIFO buffers, set this flag to 0.
  1747.  
  1748.  
  1749.  
  1750.  
  1751.  
  1752.                                        Page 31
  1753.  
  1754.  
  1755.  
  1756.           GAP Communications                                         CLACOM
  1757.  
  1758.  
  1759.           Functions - Quick Reference
  1760.  
  1761.  
  1762.           CkeyPress      - Checks for a remote or local key press.
  1763.           ClrBuf         - Clear the communications receive buffer.
  1764.           ComGetc        - Gets a character from com port.
  1765.           ComGetd        - Gets a character from com port with time-out.
  1766.           ComGets        - Gets a string of characters up to deliminator.
  1767.           ComPutb        - Sends a buffer of data to com port.
  1768.           ComPutc        - Sends a character to com port.
  1769.           ComPuts        - Sends a string to com port.
  1770.           CursorOff      - Turns local cursor off.
  1771.           CursorOn       - Turns local cursor on.
  1772.           DclrTx         - Clear DigiBoard Transmit buffer.
  1773.           DgtTxfree      - Get Free space in DigiBoard Transmit buffer.
  1774.           Dmodem         - Change DigiBoard Port parameters.
  1775.           DownLoad       - Download using Xmodem and Ymodem.
  1776.           Drestore       - Reset DigiBoard Port.
  1777.           DsetUp         - Initialize DigiBoard Port (Direct Interface).
  1778.           Dtr            - Toggles the DTR line on or off.
  1779.           GetCRC16       - Returns a 16 bit CRC value.
  1780.           GetCRC32       - Returns a 32 bit CRC value.
  1781.           GetKeyc        - Gets keyboard character and scan code.
  1782.           GetScrn        - Update Clarion's screen buffer.
  1783.           GetZmodem      - Download using Zmodem.
  1784.           Gputc          - Sends a character to local screen.
  1785.           Gputs          - Sends a string to local screen.
  1786.           InitAnsi       - Initializes ANSI driver.
  1787.           InitPort       - Sets up Communications Port (Std Interface).
  1788.           Int14Set       - Initialize DigiBoard (Int14/EBIOS Interface).
  1789.           Iscd           - Checks if there is a Carrier.
  1790.           LineStat       - Get UART Line Status.
  1791.           ModemPuts      - Send a string to the modem.
  1792.           ModemStat      - Get Modem Status.
  1793.           PeekChr        - Check if character is in Receive Buffer.
  1794.           PosCursor      - Update ANSI Driver Cursor Position.
  1795.           RecvCount      - Returns # of characters in Receive Buffer.
  1796.           ResetPort      - Restores Communications Port (Std Interface).
  1797.           RestCbreak     - Restores Ctrl-Break vector.
  1798.           Rts            - Toggles RTS line on or off.
  1799.           Rxempty        - Checks if any characters in receive buffer.
  1800.           SendBreak      - Send a break signal to the modem.
  1801.           SendZmodem     - Send files using Zmodem.
  1802.           SendZmodem1    - Send files using Zmodem (alternate function).
  1803.           SetCapture     - Turns Capture Buffer On or Off.
  1804.           SetCaptureFile - Sets the name of Capture File.
  1805.           SetPort        - Initializes Communications port.
  1806.           SetCbreak      - Initializes Ctrl-Break vector.
  1807.  
  1808.  
  1809.  
  1810.                                        Page 32
  1811.  
  1812.  
  1813.  
  1814.           GAP Communications                                         CLACOM
  1815.  
  1816.  
  1817.           StrHex         - Translate Hex String to number.
  1818.           StrWord        - Find substring in string.
  1819.           Timer          - Time Delay.
  1820.           UpLoad         - Send files using Xmodem and Ymodem.
  1821.  
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.  
  1856.  
  1857.  
  1858.  
  1859.  
  1860.  
  1861.  
  1862.  
  1863.  
  1864.  
  1865.  
  1866.  
  1867.  
  1868.                                        Page 33
  1869.  
  1870.  
  1871.  
  1872.           GAP Communications                                         CLACOM
  1873.  
  1874.  
  1875.           Functions - Detailed Reference
  1876.  
  1877.  
  1878.           Functions return a value, procedures do not return anything.
  1879.  
  1880.           Procedures cannot  be used in assignment statements. They perform
  1881.           a service  and do not report back as to the successful completion
  1882.           of that service.
  1883.  
  1884.           Functions also  perform a  service but they do report back on how                                                      
  1885.           well that service was performed.
  1886.  
  1887.           The return  value from  a function must be assigned to a variable
  1888.           of like  type or  used in  a comparison statement (this is due to
  1889.           Clarion's strong type checking which will not allow you to call a
  1890.           function without checking its return value).
  1891.  
  1892.           The function  descriptions will note whether or not a function is
  1893.           actually a  Procedure (does  not return  a value)  or a  Function
  1894.           (does return a value).
  1895.  
  1896.           The Examples  will use  a string called cstr to let you know that                                                 _
  1897.           the function  requires a string in the C, NULL terminated, format
  1898.           (CSTRING in  Clarion). Passing Clarion Strings to these functions
  1899.           will not  work. You  will need  to assign the Clarion STRING to a
  1900.           CSTRING and then pass the variable in the function call.
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  
  1922.  
  1923.  
  1924.  
  1925.  
  1926.                                        Page 34
  1927.  
  1928.  
  1929.  
  1930.           GAP Communications                                         CLACOM
  1931.  
  1932.  
  1933.           CkeyPress
  1934.           -----------------------------------------------------------------
  1935.  
  1936.           Purpose       Checks for a remote or local key press.
  1937.  
  1938.                         CkeyPress(port)
  1939.  
  1940.                         SHORT port      COM Port Number
  1941.  
  1942.           Type          Function - Returns SHORT
  1943.  
  1944.           Description   This function will check the local keyboard as well
  1945.                         as the  communications receive  buffer to  see if a
  1946.                         key is waiting to be read. It is most often used in
  1947.                         loops that  need to  wait for  a key  press, either
  1948.                         from remote or local.
  1949.  
  1950.           Return Value  0 = no key is waiting, 1 = a key is waiting.
  1951.  
  1952.           Example       c = CkeyPress(0)          ! key pressed?
  1953.  
  1954.              loop while CkeyPress(0) = 0          ! do nothing
  1955.              end                                  ! until a key is pressed
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.                                        Page 35
  1985.  
  1986.  
  1987.  
  1988.           GAP Communications                                         CLACOM
  1989.  
  1990.  
  1991.           ClrBuf
  1992.           -----------------------------------------------------------------
  1993.  
  1994.           Purpose       Clears the Communications receive buffer.
  1995.  
  1996.                         ClrBuf(port)
  1997.  
  1998.                         SHORT port      COM Port Number
  1999.  
  2000.           Type          Procedure
  2001.  
  2002.           Description   Empties the  receive buffer  such that  any pending
  2003.                         characters are simply ignored.
  2004.  
  2005.           Return Value  None.
  2006.  
  2007.           Example       ClrBuf(0)                 ! clear recv buf (COM 1)
  2008.  
  2009.  
  2010.  
  2011.  
  2012.  
  2013.  
  2014.  
  2015.  
  2016.  
  2017.  
  2018.  
  2019.  
  2020.  
  2021.  
  2022.  
  2023.  
  2024.  
  2025.  
  2026.  
  2027.  
  2028.  
  2029.  
  2030.  
  2031.  
  2032.  
  2033.  
  2034.  
  2035.  
  2036.  
  2037.  
  2038.  
  2039.  
  2040.  
  2041.  
  2042.                                        Page 36
  2043.  
  2044.  
  2045.  
  2046.           GAP Communications                                         CLACOM
  2047.  
  2048.  
  2049.           ComGetb
  2050.           -----------------------------------------------------------------
  2051.  
  2052.           Purpose       Retrieves all the characters in the Receive Buffer.
  2053.  
  2054.                         ComGetb(port, str)
  2055.  
  2056.                         SHORT port        COM Port Number
  2057.                         CSTRING str       String to store characters in
  2058.  
  2059.           Type          Function - Returns SHORT
  2060.  
  2061.           Description   Retrieves all  of the  characters  in  the  Receive
  2062.                         Buffer and stores them in the passed string.
  2063.  
  2064.                         If a 0 is returned, it means the Reveive Buffer was
  2065.                         empty.  In   this  case,  a  NULL  string  will  be
  2066.                         returned.
  2067.  
  2068.                         The string  passed to  this  function  must  be  of
  2069.                         sufficient length to hold all of the characters. It
  2070.                         is very  easy to  overwrite code  or data with this
  2071.                         function if  the passed  string  parameter  is  not
  2072.                         large enough to hold all of the data.
  2073.  
  2074.           Return Value  0 or  the number of characters stored in the passed
  2075.                         string.
  2076.  
  2077.           Example
  2078.  
  2079.              port      SHORT
  2080.              numbytes  SHORT
  2081.              cstr      CSTRING(255)
  2082.  
  2083.              port = 0                             ! use COM 1
  2084.  
  2085.              numbytes = ComGetb(port,cstr)        ! get the string
  2086.  
  2087.  
  2088.  
  2089.  
  2090.  
  2091.  
  2092.  
  2093.  
  2094.  
  2095.  
  2096.  
  2097.  
  2098.  
  2099.  
  2100.                                        Page 37
  2101.  
  2102.  
  2103.  
  2104.           GAP Communications                                         CLACOM
  2105.  
  2106.  
  2107.           ComGetc
  2108.           -----------------------------------------------------------------
  2109.  
  2110.           Purpose       Retrieve a character from communications buffer.
  2111.  
  2112.                         ComGetc(port)
  2113.  
  2114.                         SHORT port      COM Port Number
  2115.  
  2116.           Type          Function - Returns SHORT
  2117.  
  2118.           Description   Checks  the   communications  receive   buffer  and
  2119.                         returns the  next character,  if any.  In order  to
  2120.                         distinguish between  a legitimate  character and  a
  2121.                         "no character"  condition, this  function returns a
  2122.                         SHORT even though a legitimate character is a BYTE.
  2123.                         If the  function does  not return  a -1, the return
  2124.                         value needs  to be  assigned to  a variable of type
  2125.                         BYTE if the character is to be passed to a function
  2126.                         that requires  a BYTE parameter (Gputc and ComPutc,
  2127.                         for instance).
  2128.  
  2129.           Return Value  Next character  in buffer  or -1  for no characters
  2130.                         waiting.
  2131.  
  2132.           Example  c = ComGetc(0)                 ! get a character
  2133.  
  2134.              keychr    BYTE
  2135.              retchr    SHORT
  2136.              comport   SHORT
  2137.  
  2138.              comport = 0                          ! use COM 1
  2139.  
  2140.              retchr = ComGetc(comport)            ! get a character
  2141.  
  2142.              if retchr NOT= -1                    ! anything there?
  2143.                keychr = retchr                    ! yes, truncate high byte
  2144.                Gputc(keychr)                      ! and display
  2145.              end
  2146.  
  2147.  
  2148.  
  2149.  
  2150.  
  2151.  
  2152.  
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.                                        Page 38
  2159.  
  2160.  
  2161.  
  2162.           GAP Communications                                         CLACOM
  2163.  
  2164.  
  2165.           ComGetd
  2166.           -----------------------------------------------------------------
  2167.  
  2168.           Purpose       Retrieve a  character  from  communications  buffer
  2169.                         with delay.
  2170.  
  2171.                         ComGetd(port, secs)
  2172.  
  2173.                         SHORT port      COM Port Number
  2174.                         SHORT secs      Number of seconds to wait
  2175.  
  2176.           Type          Function - Returns SHORT
  2177.  
  2178.           Description   This function  is the  same as ComGetc, except that
  2179.                         if there  are no  characters in the receive buffer,
  2180.                         it will wait for the number of seconds you specify.
  2181.  
  2182.           Return Value  Next character  in buffer  or -10  for time-out (no
  2183.                         characters to read).
  2184.  
  2185.           Example
  2186.  
  2187.              comport   SHORT
  2188.  
  2189.              comport = 0                          ! use COM 1
  2190.  
  2191.              do while ComGetd(comport,2) = -10    ! wait 2 seconds
  2192.              end                                  ! for a character
  2193.  
  2194.  
  2195.  
  2196.  
  2197.  
  2198.  
  2199.  
  2200.  
  2201.  
  2202.  
  2203.  
  2204.  
  2205.  
  2206.  
  2207.  
  2208.  
  2209.  
  2210.  
  2211.  
  2212.  
  2213.  
  2214.  
  2215.  
  2216.                                        Page 39
  2217.  
  2218.  
  2219.  
  2220.           GAP Communications                                         CLACOM
  2221.  
  2222.  
  2223.           ComGets
  2224.           -----------------------------------------------------------------
  2225.  
  2226.           Purpose       Gets a string of characters up to terminator.
  2227.  
  2228.                         ComGets(port, str, chr)
  2229.  
  2230.                         SHORT port      COM Port Number
  2231.                         CSTRING str     String to store characters in
  2232.                         BYTE chr        Character to look for
  2233.  
  2234.           Type          Function - Returns SHORT
  2235.  
  2236.           Description   Retrieves a  string of  characters up  to, but  not
  2237.                         including,   the    terminating   character.    The
  2238.                         characters are  stored in  the string that you pass
  2239.                         as a  parameter. Characters  are stored  until  the
  2240.                         terminator is encountered.
  2241.  
  2242.                         If a 0 is returned, it means the terminator was the
  2243.                         first character  in the  Receive  Buffer.  In  this
  2244.                         case, a NULL string will be returned.
  2245.  
  2246.                         This function does not time out. It will not return
  2247.                         until it encounters the terminator. Unless you know
  2248.                         for a fact that the terminating character is in the
  2249.                         Receive Buffer,  you should  call PeekChr  first to
  2250.                         make certain  that the  terminating character is in
  2251.                         the buffer.
  2252.  
  2253.                         The string  passed to  this  function  must  be  of
  2254.                         sufficient length  to hold  all of  the  characters
  2255.                         that are  stored while  looking for the terminator.
  2256.                         It is very easy to overwrite code or data with this
  2257.                         function if  the passed  string  parameter  is  not
  2258.                         large enough to hold all of the data.
  2259.  
  2260.           Return Value  0 or  the number of characters stored in the passed
  2261.                         string.
  2262.  
  2263.  
  2264.  
  2265.  
  2266.  
  2267.  
  2268.  
  2269.  
  2270.  
  2271.  
  2272.  
  2273.  
  2274.                                        Page 40
  2275.  
  2276.  
  2277.  
  2278.           GAP Communications                                         CLACOM
  2279.  
  2280.  
  2281.           Example
  2282.  
  2283.              port      SHORT
  2284.              numbytes  SHORT
  2285.              cstr      CSTRING(255)
  2286.  
  2287.              port = 0                             ! use COM 1
  2288.  
  2289.              if PeekChr(port,10)                  ! check for Line Feed
  2290.                numbytes = ComGets(port,cstr,10)   ! get the string
  2291.              end
  2292.  
  2293.  
  2294.  
  2295.  
  2296.  
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314.  
  2315.  
  2316.  
  2317.  
  2318.  
  2319.  
  2320.  
  2321.  
  2322.  
  2323.  
  2324.  
  2325.  
  2326.  
  2327.  
  2328.  
  2329.  
  2330.  
  2331.  
  2332.                                        Page 41
  2333.  
  2334.  
  2335.  
  2336.           GAP Communications                                         CLACOM
  2337.  
  2338.  
  2339.           ComPutb
  2340.           -----------------------------------------------------------------
  2341.  
  2342.           Purpose       Sends a buffer of data out the communications port.
  2343.  
  2344.                         ComPutb(port, buffer, len)
  2345.  
  2346.                         SHORT port      COM Port Number
  2347.                         CSTRING buffer  Buffer containing data to send
  2348.                         SHORT len       Number of bytes to send
  2349.  
  2350.           Type          Procedure
  2351.  
  2352.           Description   This function  will send  a user supplied buffer of
  2353.                         len bytes  out the communications port, one byte at
  2354.                         a time.
  2355.  
  2356.           Return Value  None.
  2357.  
  2358.           Example
  2359.  
  2360.              buffer    CSTRING(200)
  2361.  
  2362.              ComPutb(0,buffer,100)                ! Send 100 bytes to COM 1
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.  
  2372.  
  2373.  
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379.  
  2380.  
  2381.  
  2382.  
  2383.  
  2384.  
  2385.  
  2386.  
  2387.  
  2388.  
  2389.  
  2390.                                        Page 42
  2391.  
  2392.  
  2393.  
  2394.           GAP Communications                                         CLACOM
  2395.  
  2396.  
  2397.           ComPutc
  2398.           -----------------------------------------------------------------
  2399.  
  2400.           Purpose       Sends a  single character  out  the  communications
  2401.                         port.
  2402.  
  2403.                         ComPutc(port, ch)
  2404.  
  2405.                         SHORT port      COM Port Number
  2406.                         BYTE ch         Character to send
  2407.  
  2408.           Type          Procedure
  2409.  
  2410.           Description   Will send a single character out the communications
  2411.                         port.
  2412.  
  2413.           Return Value  None.
  2414.  
  2415.           Example       ComPutc(0,13)             ! Send a Carriage Return
  2416.  
  2417.              keychr  BYTE
  2418.              retchr  SHORT
  2419.              comport SHORT
  2420.  
  2421.              comport = 0                          ! use COM 1
  2422.  
  2423.              retchr = GetKeyc                     ! Keyboard hit?
  2424.  
  2425.              if retchr NOT= -1                    ! anything there?
  2426.                if retchr < 256                    ! yes, if regular char
  2427.                  keychr = retchr                  ! strip high byte
  2428.                  ComPutc(comport,keychr)          ! and send it to remote
  2429.                end
  2430.              end
  2431.  
  2432.  
  2433.  
  2434.  
  2435.  
  2436.  
  2437.  
  2438.  
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.  
  2447.  
  2448.                                        Page 43
  2449.  
  2450.  
  2451.  
  2452.           GAP Communications                                         CLACOM
  2453.  
  2454.  
  2455.           ComPuts
  2456.           -----------------------------------------------------------------
  2457.  
  2458.           Purpose       Sends a string of characters out the communications
  2459.                         port.
  2460.  
  2461.                         ComPuts(port, str)
  2462.  
  2463.                         SHORT port      COM Port Number
  2464.                         CSTRING str       String to send
  2465.  
  2466.           Type          Procedure
  2467.  
  2468.           Description   Will  send   a  string   of  characters   out   the
  2469.                         communications port.  Note that unlike ComPutb, the
  2470.                         number of bytes to send is determined by the length
  2471.                         of  the   string.  Therefore  this  function  stops
  2472.                         sending characters  when  it  encounters  the  NULL
  2473.                         byte.
  2474.  
  2475.           Return Value  None.
  2476.  
  2477.           Example
  2478.  
  2479.              comport SHORT
  2480.              cstr    CSTRING(100)
  2481.  
  2482.              comport = 0                          ! use COM 1
  2483.  
  2484.              cstr = 'Send this String'            ! string to send
  2485.              ComPuts(comport,cstr)                ! send string to com port
  2486.  
  2487.  
  2488.  
  2489.  
  2490.  
  2491.  
  2492.  
  2493.  
  2494.  
  2495.  
  2496.  
  2497.  
  2498.  
  2499.  
  2500.  
  2501.  
  2502.  
  2503.  
  2504.  
  2505.  
  2506.                                        Page 44
  2507.  
  2508.  
  2509.  
  2510.           GAP Communications                                         CLACOM
  2511.  
  2512.  
  2513.           CursorOff
  2514.           -----------------------------------------------------------------
  2515.  
  2516.           Purpose       Turns the local cursor off.
  2517.  
  2518.                         CursorOff()
  2519.  
  2520.           Type          Procedure
  2521.  
  2522.           Description   This function  is used  to turn  the cursor  on the
  2523.                         local monitor off.
  2524.  
  2525.           Return Value  None.
  2526.  
  2527.           Example       CursorOff()               ! turn the cursor off
  2528.  
  2529.  
  2530.  
  2531.  
  2532.  
  2533.           CursorOn
  2534.           -----------------------------------------------------------------
  2535.  
  2536.           Purpose       Turns the local cursor on.
  2537.  
  2538.                         CursorOn()
  2539.  
  2540.           Type          Procedure
  2541.  
  2542.           Description   This function  is used  to turn  the cursor  on the
  2543.                         local monitor on.
  2544.  
  2545.           Return Value  None.
  2546.  
  2547.           Example       CursorOn()                ! turn the cursor on
  2548.  
  2549.  
  2550.  
  2551.  
  2552.  
  2553.  
  2554.  
  2555.  
  2556.  
  2557.  
  2558.  
  2559.  
  2560.  
  2561.  
  2562.  
  2563.  
  2564.                                        Page 45
  2565.  
  2566.  
  2567.  
  2568.           GAP Communications                                         CLACOM
  2569.  
  2570.  
  2571.           DclrTx
  2572.           -----------------------------------------------------------------
  2573.  
  2574.           Purpose       Clears the Transmit Buffer on DigiBoard.
  2575.  
  2576.                         DclrTx(port)
  2577.  
  2578.                         SHORT port      COM Port (Channel) Number
  2579.  
  2580.           Type          Procedure
  2581.  
  2582.           Description   When  using   a  DigiBoard  (Interface  is  set  to
  2583.                         DigiBoard or Int14/EBIOS), this function will clear
  2584.                         the Transmit  Buffer for  the specified port on the
  2585.                         DigiBoard.
  2586.  
  2587.           Return Value  None.
  2588.  
  2589.           Example       DclrTx(4)                 ! clear xmit buffer
  2590.  
  2591.  
  2592.  
  2593.  
  2594.  
  2595.  
  2596.  
  2597.  
  2598.  
  2599.  
  2600.  
  2601.  
  2602.  
  2603.  
  2604.  
  2605.  
  2606.  
  2607.  
  2608.  
  2609.  
  2610.  
  2611.  
  2612.  
  2613.  
  2614.  
  2615.  
  2616.  
  2617.  
  2618.  
  2619.  
  2620.  
  2621.  
  2622.                                        Page 46
  2623.  
  2624.  
  2625.  
  2626.           GAP Communications                                         CLACOM
  2627.  
  2628.  
  2629.           DgtTxfree
  2630.           -----------------------------------------------------------------
  2631.  
  2632.           Purpose       Returns number  of  Free  Bytes  in  Digi  Transmit
  2633.                         Buffer.
  2634.  
  2635.                         DgtTxfree(port)
  2636.  
  2637.                         SHORT port      COM Port (Channel) Number
  2638.  
  2639.           Type          Function - Returns USHORT
  2640.  
  2641.           Description   When  using   a  DigiBoard  (Interface  is  set  to
  2642.                         DigiBoard or  Int14/EBIOS), this  function  returns
  2643.                         the number of free bytes in the Transmit Buffer for
  2644.                         the specified port on the DigiBoard.
  2645.  
  2646.           Return Value  None.
  2647.  
  2648.           Example
  2649.  
  2650.              freebytes USHORT
  2651.  
  2652.              freebytes = DgtTxfree(4)             ! get free space
  2653.  
  2654.  
  2655.  
  2656.  
  2657.  
  2658.  
  2659.  
  2660.  
  2661.  
  2662.  
  2663.  
  2664.  
  2665.  
  2666.  
  2667.  
  2668.  
  2669.  
  2670.  
  2671.  
  2672.  
  2673.  
  2674.  
  2675.  
  2676.  
  2677.  
  2678.  
  2679.  
  2680.                                        Page 47
  2681.  
  2682.  
  2683.  
  2684.           GAP Communications                                         CLACOM
  2685.  
  2686.  
  2687.           Dmodem
  2688.           -----------------------------------------------------------------
  2689.  
  2690.           Purpose       Initialize Digi  port to  baud, parity,  data,  and
  2691.                         stop bits
  2692.  
  2693.                         Dmodem(port, baud, parity, data, stop)
  2694.  
  2695.                         SHORT port      COM Port (Channel) Number
  2696.                         LONG baud       BPS rate
  2697.                         SHORT parity    0 = None, 1 = Odd, 2 = Even
  2698.                         SHORT data      6, 7, or 8 data bits
  2699.                         SHORT stop      1 or 2 stop bits
  2700.  
  2701.           Type          Procedure
  2702.  
  2703.           Description   Changes the current port settings on a DigiBoard to
  2704.                         the parity, data bits, stop bits, and baud rate.
  2705.  
  2706.                         The port  parameters are  normally set  when  first
  2707.                         initializing  the  DigiBoard  port.  This  function
  2708.                         allows you  to change  those parameters  while "on-
  2709.                         line".
  2710.  
  2711.           Return Value  None.
  2712.  
  2713.           Example       Dmodem(4,2400,2,7,1)      ! E, 7, 1 - 2400 bps
  2714.  
  2715.  
  2716.  
  2717.  
  2718.  
  2719.  
  2720.  
  2721.  
  2722.  
  2723.  
  2724.  
  2725.  
  2726.  
  2727.  
  2728.  
  2729.  
  2730.  
  2731.  
  2732.  
  2733.  
  2734.  
  2735.  
  2736.  
  2737.  
  2738.                                        Page 48
  2739.  
  2740.  
  2741.  
  2742.           GAP Communications                                         CLACOM
  2743.  
  2744.  
  2745.           DownLoad
  2746.           -----------------------------------------------------------------
  2747.  
  2748.           Purpose       Receives one or more files.
  2749.  
  2750.                         DownLoad(port, protocol, filename, statfunc)
  2751.  
  2752.                         SHORT port           COM Port Number
  2753.                         SHORT protocol       Number of protocol to use
  2754.                         CSTRING filename     Name of file to download
  2755.                         SHORT statfunc       0 or 1 (see below)
  2756.  
  2757.           Type          Function - Returns SHORT
  2758.  
  2759.           Description   This function  allows you  to receive a file from a
  2760.                         remote  computer.  The  protocols  are  defined  as
  2761.                         follows:
  2762.  
  2763.                           0 = ASCII          3 = 1K Xmodem-G
  2764.                           1 = Xmodem         4 = Ymodem
  2765.                           2 = 1K Xmodem      5 = Ymodem-G
  2766.  
  2767.  
  2768.                         Filename is  a CSTRING  containing the  name of the
  2769.                         file to  download.  If  the  protocol  is  a  batch
  2770.                         protocol (Ymodem  or Ymodem-G)  then you may pass a
  2771.                         NULL string  (cstr = '') since the name of the file
  2772.                         will  be  supplied  by  the  remote  sender.  If  a
  2773.                         filename is passed, it will be ignored.
  2774.  
  2775.                         The statfunc  parameter allows  you to override the
  2776.                         default Transfer  Status Window. A value of 0 means
  2777.                         the internal  window will be displayed and updated.
  2778.                         A value  of 1  means you  will open your own window
  2779.                         and the transfer statistics will be displayed on it
  2780.                         instead.
  2781.  
  2782.           Return Value  0 for  successful transfer. If an error occurs, the
  2783.                         following values are returned:
  2784.  
  2785.                         1 - Error opening file    6 - Error writing file
  2786.                         2 - Receiver cancelled    7 - CRC error
  2787.                                                       (1K Xmodem-G
  2788.                         3 - Sender cancelled          or Ymodem-G)
  2789.                         4 - Time out              8 - Too many errors
  2790.                         5 - No carrier            9 - Block error
  2791.  
  2792.  
  2793.  
  2794.  
  2795.  
  2796.                                        Page 49
  2797.  
  2798.  
  2799.  
  2800.           GAP Communications                                         CLACOM
  2801.  
  2802.  
  2803.           Example
  2804.  
  2805.              cstr  CSTRING(100)
  2806.  
  2807.              cstr = 'FILE.ZIP'                 ! receive a single file
  2808.              DownLoad(0,2,cstr,0)              ! using 1K Xmodem
  2809.  
  2810.              cstr = ''                         ! receive 1 or more files
  2811.              DownLoad(0,4,cstr,0)              ! using Ymodem
  2812.  
  2813.  
  2814.  
  2815.  
  2816.  
  2817.  
  2818.  
  2819.  
  2820.  
  2821.  
  2822.  
  2823.  
  2824.  
  2825.  
  2826.  
  2827.  
  2828.  
  2829.  
  2830.  
  2831.  
  2832.  
  2833.  
  2834.  
  2835.  
  2836.  
  2837.  
  2838.  
  2839.  
  2840.  
  2841.  
  2842.  
  2843.  
  2844.  
  2845.  
  2846.  
  2847.  
  2848.  
  2849.  
  2850.  
  2851.  
  2852.  
  2853.  
  2854.                                        Page 50
  2855.  
  2856.  
  2857.  
  2858.           GAP Communications                                         CLACOM
  2859.  
  2860.  
  2861.           Drestore
  2862.           -----------------------------------------------------------------
  2863.  
  2864.           Purpose       Reset Modem attached to a DigiBoard Port.
  2865.  
  2866.                         Drestore(port)
  2867.  
  2868.                         SHORT port      COM Port (Channel) Number
  2869.  
  2870.           Type          Procedure
  2871.  
  2872.           Description   This function  simply  turns  off  the  handshaking
  2873.                         lines to  the modem.  It turns  DTR and RTS off and
  2874.                         disables Hardware Flow control. Should be used only
  2875.                         when using the DigiBoard or Int14/EBIOS Interface.
  2876.  
  2877.           Return Value  None.
  2878.  
  2879.           Example       Drestore(4)       ! Reset Modem
  2880.  
  2881.  
  2882.  
  2883.  
  2884.  
  2885.  
  2886.  
  2887.  
  2888.  
  2889.  
  2890.  
  2891.  
  2892.  
  2893.  
  2894.  
  2895.  
  2896.  
  2897.  
  2898.  
  2899.  
  2900.  
  2901.  
  2902.  
  2903.  
  2904.  
  2905.  
  2906.  
  2907.  
  2908.  
  2909.  
  2910.  
  2911.  
  2912.                                        Page 51
  2913.  
  2914.  
  2915.  
  2916.           GAP Communications                                         CLACOM
  2917.  
  2918.  
  2919.           DsetUp
  2920.           -----------------------------------------------------------------
  2921.  
  2922.           Purpose       Initialize Digi  port to  baud, parity,  data,  and
  2923.                         stop bits.
  2924.  
  2925.                         DsetUp(base, port,  channel,  baud,  parity,  data,
  2926.                         stop)
  2927.  
  2928.                         USHORT base     Memory Window
  2929.                         USHORT port     I/O Port
  2930.                         SHORT channel   Channel Number (port)
  2931.                         LONG baud       BPS rate
  2932.                         SHORT parity    0 = None, 1 = Odd, 2 = Even
  2933.                         SHORT data      6, 7, or 8 data bits
  2934.                         SHORT stop      1 or 2 stop bits
  2935.  
  2936.           Type          Function - Returns SHORT
  2937.  
  2938.           Description   When  using   a  Communications  Interface  set  to
  2939.                         DigiBoard, this  function initializes the specified
  2940.                         port (Channel)  on  the  DigiBoard.  The  DigiBoard
  2941.                         Interface is  a direct  link to  the  DigiBoard  (a
  2942.                         Device Driver  is not needed). In order to use this
  2943.                         interface, the  end user  must have already run the
  2944.                         DigiBoard Reset program called RESETDIG.EXE.
  2945.  
  2946.                         The base  address is  the high  memory address  the
  2947.                         DigiBoard uses  when communicating  with  the  host
  2948.                         computer.
  2949.  
  2950.                         Valid base addresses are:
  2951.  
  2952.                           C000          D000
  2953.                           C800          D800
  2954.  
  2955.  
  2956.                         The port  is the I/O port the DigiBoard is attached
  2957.                         to.
  2958.  
  2959.                         Valid ports are:
  2960.  
  2961.                           100           220
  2962.                           110           300
  2963.                           120           320
  2964.                           200
  2965.  
  2966.  
  2967.  
  2968.  
  2969.  
  2970.                                        Page 52
  2971.  
  2972.  
  2973.  
  2974.           GAP Communications                                         CLACOM
  2975.  
  2976.  
  2977.                         The channel  is the  Communications Port  to use on                           _
  2978.                         the DigiBoard.  When using  the  Direct  Interface,
  2979.                         Channel  Numbers   are  0  based.  Therefore,  this
  2980.                         parameter should be 0 - 15.
  2981.  
  2982.                         Note that  base and port are USHORTS. Because it is
  2983.                         difficult to  gather input  from an  end user  such
  2984.                         that the  result is  a  valid  hexadecimal  number,
  2985.                         these two  fields are  generally stored as strings.
  2986.                         You can  use  the  function  StrHex  to  convert  a                                                   __
  2987.                         Hexadecimal String to an unsigned short.
  2988.  
  2989.           Return Value  0 = Successful.
  2990.                         1 = DigiBoard not Installed or RESETDIG.EXE
  2991.                            not run.
  2992.                         2 = DigiBoard not Responding.
  2993.                         3 = Invalid Parameter passed.
  2994.                         4 = DigiBoard EPROM is too old.
  2995.  
  2996.           Example
  2997.  
  2998.              ! set up 1st port on DigiBoard (Channel = 1)
  2999.              ! DigiBoard Memory Address = D800
  3000.              ! DigiBoard I/O Port = 320
  3001.  
  3002.              digiseg   USHORT
  3003.              digiport  USHORT
  3004.              cstr      CSTRING(12)
  3005.  
  3006.              cstr = 'D800'                        ! Base Address
  3007.              digiseg = StrHex(cstr)               ! as a number
  3008.              cstr = '320'                         ! I/O Port
  3009.              digiport = StrHex(cstr)              ! as a number
  3010.  
  3011.              if DsetUp(digiseg,digiport,0,38400,0,8,1)
  3012.                ShowError('Unable To Initialize DigiBoard')
  3013.              end
  3014.  
  3015.  
  3016.  
  3017.  
  3018.  
  3019.  
  3020.  
  3021.  
  3022.  
  3023.  
  3024.  
  3025.  
  3026.  
  3027.  
  3028.                                        Page 53
  3029.  
  3030.  
  3031.  
  3032.           GAP Communications                                         CLACOM
  3033.  
  3034.  
  3035.           Dtr
  3036.           -----------------------------------------------------------------
  3037.  
  3038.           Purpose       Toggle the DTR line on or off.
  3039.  
  3040.                         Dtr(port, how)
  3041.  
  3042.                         SHORT port      COM Port Number
  3043.                         SHORT how       0 = Turn DTR off
  3044.                                         1 = Turn DTR on
  3045.  
  3046.           Type          Procedure
  3047.  
  3048.           Description   This routine  is used  to turn  the DTR line of the
  3049.                         communications port  on or  off.  Turning  DTR  off
  3050.                         while there  is a  carrier will  cause the modem to
  3051.                         drop carrier.  In order  to send  commands  to  the
  3052.                         modem, DTR needs to be on.
  3053.  
  3054.           Return Value  None.
  3055.  
  3056.           Example
  3057.  
  3058.              cstr  CSTRING(10)
  3059.  
  3060.              cstr = 'ATZ' & '<13>'                ! Modem Init String
  3061.  
  3062.              Dtr(0,1)                             ! wake up modem
  3063.              ComPuts(0,cstr)                 ! reset the modem
  3064.  
  3065.  
  3066.  
  3067.  
  3068.  
  3069.  
  3070.  
  3071.  
  3072.  
  3073.  
  3074.  
  3075.  
  3076.  
  3077.  
  3078.  
  3079.  
  3080.  
  3081.  
  3082.  
  3083.  
  3084.  
  3085.  
  3086.                                        Page 54
  3087.  
  3088.  
  3089.  
  3090.           GAP Communications                                         CLACOM
  3091.  
  3092.  
  3093.           GetCRC16
  3094.           -----------------------------------------------------------------
  3095.  
  3096.           Purpose       Returns a 16 bit CRC.
  3097.  
  3098.                         GetCRC16(crc, value)
  3099.  
  3100.                         SHORT crc       Current CRC
  3101.                         SHORT value     Vaule to add to CRC
  3102.  
  3103.           Type          Function - Returns SHORT
  3104.  
  3105.           Description   This is  an internal  function  used  by  the  File
  3106.                         Transfer routines  to calculate the 16 bit CRC of a
  3107.                         data block.  To use,  you first set the initial CRC
  3108.                         value to  0. Then  for each  character (typically a
  3109.                         data buffer) you pass the current CRC value and the
  3110.                         character for which you wish to obtain a CRC from.
  3111.  
  3112.           Return Value  16 Bit CRC value.
  3113.  
  3114.           Example
  3115.  
  3116.              crc16   SHORT
  3117.              value   SHORT
  3118.  
  3119.              crc16 = 0                            ! Initialize
  3120.  
  3121.              crc16 = GetCRC16(crc16,value)        ! get CRC
  3122.  
  3123.  
  3124.  
  3125.  
  3126.  
  3127.  
  3128.  
  3129.  
  3130.  
  3131.  
  3132.  
  3133.  
  3134.  
  3135.  
  3136.  
  3137.  
  3138.  
  3139.  
  3140.  
  3141.  
  3142.  
  3143.  
  3144.                                        Page 55
  3145.  
  3146.  
  3147.  
  3148.           GAP Communications                                         CLACOM
  3149.  
  3150.  
  3151.           GetCRC32
  3152.           -----------------------------------------------------------------
  3153.  
  3154.           Purpose       Returns a 32 bit CRC.
  3155.  
  3156.                         GetCRC32(value,crc)
  3157.  
  3158.                         SHORT value     Vaule to add to CRC
  3159.                         LONG crc        Current CRC
  3160.  
  3161.           Type          Function - Returns LONG
  3162.  
  3163.           Description   This is  an internal  function used  by the  Zmodem
  3164.                         Transfer routines  to calculate the 32 bit CRC of a
  3165.                         data block.  To use,  you first set the initial CRC
  3166.                         value  to   0FFFFFFFF.  Then   for  each  character
  3167.                         (typically a  data buffer) you pass the current CRC
  3168.                         value and  the character  for  which  you  wish  to
  3169.                         obtain a CRC from.
  3170.  
  3171.           Return Value  32 Bit CRC value.
  3172.  
  3173.           Example
  3174.  
  3175.              crc32   LONG
  3176.              value   SHORT
  3177.  
  3178.              crc32 = 0FFFFFFFFh                   ! Initialize
  3179.  
  3180.              crc32 = GetCRC32(value,crc32)        ! get CRC
  3181.  
  3182.  
  3183.  
  3184.  
  3185.  
  3186.  
  3187.  
  3188.  
  3189.  
  3190.  
  3191.  
  3192.  
  3193.  
  3194.  
  3195.  
  3196.  
  3197.  
  3198.  
  3199.  
  3200.  
  3201.  
  3202.                                        Page 56
  3203.  
  3204.  
  3205.  
  3206.           GAP Communications                                         CLACOM
  3207.  
  3208.  
  3209.           GetKeyc
  3210.           -----------------------------------------------------------------
  3211.  
  3212.           Purpose       Gets keyboard character and scan code.
  3213.  
  3214.                         GetKeyc()
  3215.  
  3216.           Type          Function - Returns SHORT
  3217.  
  3218.           Description   This is the main keyboard input routine. It returns
  3219.                         the keyboard  character or if the key struck was an
  3220.                         extended key,  it will  return a unique code. These
  3221.                         codes are  described in  Appendix A.  This function
  3222.                         should be  used when  designing terminal  emulation
  3223.                         software, BBS  software or  any software  where you
  3224.                         will be  checking the  local keyboard  and the  Com
  3225.                         Port for  key presses.  Clarion's ASK  and  KEYCODE
  3226.                         functions cannot  be  used  since  Clarion  re-maps
  3227.                         extended keys  and some control keys. Any character
  3228.                         in the ASCII range of 0 to 255 is a valid character
  3229.                         and can  be sent  out the Com Port, however Clarion
  3230.                         re-maps some  of  these  characters  and  does  not
  3231.                         return their true byte value.
  3232.  
  3233.                         If the  return value  is greater than 255, then the
  3234.                         key that  was pressed is an Extended Key (i.e., F1,
  3235.                         Up-Arrow,  PgUp,   Home,  etc).  The  Extended  Key
  3236.                         corresponds to  the Keyboard  Scan  code  with  the
  3237.                         value 256 added.
  3238.  
  3239.           Return Value  ASCII code for the key pressed or a unique code for
  3240.                         extended keys.
  3241.  
  3242.           Example
  3243.  
  3244.              retchr  SHORT
  3245.  
  3246.              retchr = GetKeyc()                   ! get a keyboard char
  3247.  
  3248.              if retchr > 255                      ! Extended Key
  3249.                case retchr                        ! which one
  3250.                  of 278                           ! Alt-U, Upload a File
  3251.                  of 288                           ! Alt-D, Download a File
  3252.                  of 369                           ! Alt-F10, activate Menu
  3253.                end
  3254.              end
  3255.  
  3256.  
  3257.  
  3258.  
  3259.  
  3260.                                        Page 57
  3261.  
  3262.  
  3263.  
  3264.           GAP Communications                                         CLACOM
  3265.  
  3266.  
  3267.           GetScrn
  3268.           -----------------------------------------------------------------
  3269.  
  3270.           Purpose       Copies Physical Screen to Clarion Screen Buffer.
  3271.  
  3272.                         GetScrn()
  3273.  
  3274.           Type          Procedure
  3275.  
  3276.           Description   Clarion keeps  a backup copy of the physical screen
  3277.                         in a  buffer. Whenever  you send  something to  the
  3278.                         screen by  either opening a Window, a Menu, or what
  3279.                         have  you,  Clarion  performs  two  operations:  it
  3280.                         updates the physical screen and its screen buffer.
  3281.  
  3282.                         The screen  output routines  in CLACOM  (Gputc  and
  3283.                         Gputs)  write   directly  to  the  physical  screen
  3284.                         memory. Clarion,  therefore, doesn't  know that the
  3285.                         screen has  been written to. When you open a Window
  3286.                         or a  Menu, Clarion  will re-draw  the screen  with
  3287.                         whatever happens  to be  in its  Screen Buffer  and
  3288.                         then open  your Window.  What Clarion  puts on  the
  3289.                         screen will not necessarily be what you see on your
  3290.                         physical screen.  Clarion only  knows about what it
  3291.                         wrote to  the physical  screen.  It  knows  nothing
  3292.                         about what  an outside  function might  have put on
  3293.                         the screen.
  3294.  
  3295.                         If you  are using  the CLACOM  routines to write to
  3296.                         the screen  and you  need to open a Clarion Window,
  3297.                         activate a  Menu, or  otherwise write  to the local
  3298.                         screen using  a Clarion  function, you need to call
  3299.                         GetScrn before  making your  Clarion call.  GetScrn
  3300.                         will copy  the contents  of the  Physical Screen to
  3301.                         the  Clarion   Screen  Buffer.  This  will  prevent
  3302.                         Clarion from  overwriting the  physical screen with
  3303.                         data that no longer belongs there.
  3304.  
  3305.           Return Value  None.
  3306.  
  3307.  
  3308.  
  3309.  
  3310.  
  3311.  
  3312.  
  3313.  
  3314.  
  3315.  
  3316.  
  3317.  
  3318.                                        Page 58
  3319.  
  3320.  
  3321.  
  3322.           GAP Communications                                         CLACOM
  3323.  
  3324.  
  3325.           Example
  3326.  
  3327.              keychr  BYTE
  3328.              retchr    SHORT
  3329.  
  3330.              retchr = GetKeyc()                   ! Keyboard hit?
  3331.  
  3332.              if retchr = -1                       ! nothing there
  3333.                goto getrmt                        ! check remote
  3334.              end
  3335.  
  3336.              keychr = retchr                      ! strip high byte if set
  3337.  
  3338.              if retchr < 256                      ! if not a scan code
  3339.                ComPutc(0,keychr)                  ! send to com port
  3340.                goto getrmt                        ! and check remote
  3341.              end
  3342.  
  3343.              ! Keyboard key was an Extended key. Check if special key
  3344.  
  3345.              ! First though, it is likely that we will be doing something
  3346.              ! that will use Clarion to write to the Screen (open Window,
  3347.              ! Menu, etc). If so, we have to read the physical screen and
  3348.              ! update Clarion's Screen Buffer. This is because Clarion
  3349.              ! doesn't know that our  ANSI driver has been writing to the
  3350.              ! screen. If we don't do this, Clarion will erase whatever is
  3351.              ! on the screen.
  3352.  
  3353.              GetScrn()                            ! update Screen Buffer
  3354.  
  3355.              ! Note that we already know the key is an extended key so we
  3356.              ! are only checking the low byte of the key (same as
  3357.              ! subtracting 256 from the return value).
  3358.  
  3359.              case keychr                          ! get special keys
  3360.                of 22   ! Alt-U, Upload A File
  3361.                  if online = 0                    ! if no carrier,no upload
  3362.                    Open(NotOnLine)                ! Tell um can't upload
  3363.                    bell()                         ! Make noise
  3364.                    Beep(0,300)                    ! Wait 3 seconds
  3365.                    Close(NotOnLine)               ! Close Screen
  3366.                  else                             ! otherwise, upload away
  3367.                    UpFile
  3368.                  end
  3369.              end
  3370.  
  3371.  
  3372.  
  3373.  
  3374.  
  3375.  
  3376.                                        Page 59
  3377.  
  3378.  
  3379.  
  3380.           GAP Communications                                         CLACOM
  3381.  
  3382.  
  3383.           GetZmodem
  3384.           -----------------------------------------------------------------
  3385.  
  3386.           Purpose       Receives 1 or more files using the Zmodem Protocol.
  3387.  
  3388.                         GetZmodem(port, statfunc)
  3389.  
  3390.                         SHORT port      COM Port Number
  3391.                         SHORT statfunc  0 or 1 (see below)
  3392.  
  3393.           Type          Function - Returns SHORT
  3394.  
  3395.           Description   This function  allows you  to receive  one or  more
  3396.                         files using  Zmodem. The  files will  be placed  in
  3397.                         whatever directory  the program happens to be in at
  3398.                         the time  of the  call. You may want to use SETPATH
  3399.                         to change into a work directory prior to the call.
  3400.  
  3401.                         The statfunc  parameter allows  you to override the
  3402.                         default Transfer  Status Window. A value of 0 means
  3403.                         the internal  window will be displayed and updated.
  3404.                         A value  of 1  means you  will open your own window
  3405.                         and the transfer statistics will be displayed on it
  3406.                         instead.
  3407.  
  3408.           Return Value  0 for  successful transfer. If an error occurs, the
  3409.                         following values are returned:
  3410.  
  3411.                         1 - Error opening file    4 - Time out
  3412.                         2 - Receiver cancelled    5 - No carrier
  3413.                         3 - Sender cancelled      6 - Error writing file
  3414.  
  3415.           Example       error = GetZmodem(0,0)    ! Receive using Zmodem
  3416.  
  3417.  
  3418.  
  3419.  
  3420.  
  3421.  
  3422.  
  3423.  
  3424.  
  3425.  
  3426.  
  3427.  
  3428.  
  3429.  
  3430.  
  3431.  
  3432.  
  3433.  
  3434.                                        Page 60
  3435.  
  3436.  
  3437.  
  3438.           GAP Communications                                         CLACOM
  3439.  
  3440.  
  3441.           Gputc
  3442.           -----------------------------------------------------------------
  3443.  
  3444.           Purpose       Sends a single character to local screen.
  3445.  
  3446.                         Gputc(ch)
  3447.  
  3448.                         BYTE ch         Character to send
  3449.  
  3450.           Type          Procedure
  3451.  
  3452.           Description   This is one of the main output routines. It is part
  3453.                         of the ANSI driver. It will send a single character
  3454.                         to the local screen.
  3455.  
  3456.           Return Value  None.
  3457.  
  3458.           Example       Gputc(12)         ! Clear the Screen
  3459.  
  3460.              retchr    SHORT
  3461.              keychr  BYTE
  3462.  
  3463.              retchr = GetKeyc()           ! Keyboard hit?
  3464.  
  3465.              if retchr NOT= -1            ! if something there
  3466.                keychr = retchr            ! truncate high byte
  3467.                Gputc(keychr)              ! and display it
  3468.              end
  3469.  
  3470.  
  3471.  
  3472.  
  3473.  
  3474.  
  3475.  
  3476.  
  3477.  
  3478.  
  3479.  
  3480.  
  3481.  
  3482.  
  3483.  
  3484.  
  3485.  
  3486.  
  3487.  
  3488.  
  3489.  
  3490.  
  3491.  
  3492.                                        Page 61
  3493.  
  3494.  
  3495.  
  3496.           GAP Communications                                         CLACOM
  3497.  
  3498.  
  3499.           Gputs
  3500.           -----------------------------------------------------------------
  3501.  
  3502.           Purpose       Sends a string of characters to local screen.
  3503.  
  3504.                         Gputs(str)
  3505.  
  3506.                         CSTRING str       String to send
  3507.  
  3508.           Type          Procedure
  3509.  
  3510.           Description   This is one of the main output routines and is part
  3511.                         of the  ANSI driver.  It  will  send  a  string  of
  3512.                         characters to the local screen.
  3513.  
  3514.           Return Value  None.
  3515.  
  3516.           Example
  3517.  
  3518.              cstr  CSTRING(100)
  3519.  
  3520.              cstr = 'This is a string of characters'
  3521.  
  3522.              Gputs(cstr)                          ! Display locally
  3523.              ComPuts(0,cstr)                      ! and to COM 1
  3524.  
  3525.              ! this example embeds the CR/LF pair at the beginning
  3526.              ! and end of the string
  3527.  
  3528.              cstr = '<13,10>' & 'This is a string of characters' &
  3529.           '<13,10>'
  3530.  
  3531.              Gputs(cstr)                          ! Display locally
  3532.  
  3533.  
  3534.  
  3535.  
  3536.  
  3537.  
  3538.  
  3539.  
  3540.  
  3541.  
  3542.  
  3543.  
  3544.  
  3545.  
  3546.  
  3547.  
  3548.  
  3549.  
  3550.                                        Page 62
  3551.  
  3552.  
  3553.  
  3554.           GAP Communications                                         CLACOM
  3555.  
  3556.  
  3557.           InitAnsi
  3558.           -----------------------------------------------------------------
  3559.  
  3560.           Purpose       Initialize ANSI driver.
  3561.  
  3562.                         InitAnsi(port, row, col, color)
  3563.  
  3564.                         SHORT port      COM Port Number
  3565.                         BYTE row        Number of Rows on Screen
  3566.                         BYTE col        Number of Columns on Screen
  3567.                         BYTE color      Default Color to use
  3568.  
  3569.           Type          Procedure
  3570.  
  3571.           Description   This function  sets up  the ANSI  driver so that it
  3572.                         knows the maximum number of Rows and Columns on the
  3573.                         Screen and the default color to use when displaying
  3574.                         characters. This  function must  be called prior to
  3575.                         using the  output routines  Gputc and  Gputs. Since                                                  __         __
  3576.                         the ANSI driver writes directly to Video Memory, it
  3577.                         is imperative  that this function be called so that
  3578.                         it can  set internal  variables that tells it where
  3579.                         the cursor  is, the  color attribute  to  use  when
  3580.                         displaying characters  and the  Segment address  of
  3581.                         Video Memory.
  3582.  
  3583.                         You should call this function anytime the Screen is
  3584.                         changed in size (i.e., from 25 to 43 line mode).
  3585.  
  3586.                         The ANSI  driver always  protects the bottom row of
  3587.                         the screen.  In other words, it will not allow text
  3588.                         to be  written there  using Gputc  or Gputs. If you
  3589.                         need to  write to  the bottom  screen row,  use the
  3590.                         Clarion SHOW function.
  3591.  
  3592.                         The color parameter is a standard IBM color code in
  3593.                         the  range  of  0  to  255.  The  Color  codes  are
  3594.                         described in  the Clarion Language Reference Manual
  3595.                         in the Video and Keyboard Chapter.
  3596.  
  3597.                         You must  pass the  COM port  number that  the ANSI
  3598.                         driver will  be associated  with. The  ANSI  Cursor
  3599.                         Position Report  (CPR) sequence  is issued whenever
  3600.                         the driver  receives a  Device Status  Report (DSR)
  3601.                         command. The CPR sequence is sent out the COM port.
  3602.                         Since there is only one screen and one ANSI driver,
  3603.                         the driver must know which port to use. The DSR/CPR
  3604.  
  3605.  
  3606.  
  3607.  
  3608.                                        Page 63
  3609.  
  3610.  
  3611.  
  3612.           GAP Communications                                         CLACOM
  3613.  
  3614.  
  3615.                         sequences are  generally only  used by BBS programs
  3616.                         to determine if the caller has ANSI capability.
  3617.  
  3618.           Return Value  None.
  3619.  
  3620.           Example
  3621.  
  3622.              MaxRows  SHORT
  3623.              MaxCols  SHORT
  3624.  
  3625.              MaxRows = ROWS()                  ! Get Max Number of Rows
  3626.              MaxCols = COLS()                  ! Get Max Number of Columns
  3627.  
  3628.              SetCursor(1,1)                    ! Cursor to top of screen
  3629.              InitAnsi(0,MaxRows,MaxCols,14)    ! Initialize ANSI driver
  3630.  
  3631.  
  3632.  
  3633.  
  3634.  
  3635.  
  3636.  
  3637.  
  3638.  
  3639.  
  3640.  
  3641.  
  3642.  
  3643.  
  3644.  
  3645.  
  3646.  
  3647.  
  3648.  
  3649.  
  3650.  
  3651.  
  3652.  
  3653.  
  3654.  
  3655.  
  3656.  
  3657.  
  3658.  
  3659.  
  3660.  
  3661.  
  3662.  
  3663.  
  3664.  
  3665.  
  3666.                                        Page 64
  3667.  
  3668.  
  3669.  
  3670.           GAP Communications                                         CLACOM
  3671.  
  3672.  
  3673.           InitPort
  3674.           -----------------------------------------------------------------
  3675.  
  3676.           Purpose       Initialize port  to baud,  data, parity,  and  stop
  3677.                         bits.
  3678.  
  3679.                         InitPort(port, baud, parity, data, stop)
  3680.  
  3681.                         SHORT port      COM Port Number
  3682.                         LONG baud       BPS rate
  3683.                         SHORT parity    0 = None, 1 = Odd, 2 = Even
  3684.                         SHORT data      6, 7, or 8 data bits
  3685.                         SHORT stop      1 or 2 stop bits
  3686.  
  3687.           Type          Function - Returns SHORT
  3688.  
  3689.           Description   Sets the  communications port  to the  parity, data
  3690.                         bits, stop bits, and baud rate.
  3691.  
  3692.                         This  function   should  only   be  used  when  the
  3693.                         Communications Interface  is set to Standard. Don't
  3694.                         call when interfacing with a DigiBoard.                                                    _
  3695.  
  3696.           Return Value  0 = Successful.
  3697.                         1 = Port Not Initialized.
  3698.                         2 = Invalid Parameter.
  3699.  
  3700.           Example
  3701.  
  3702.             if InitPort(0,38400,0,8,1)                 ! Initialize COM 1
  3703.               ShowError('Unable To Initialize Port')   ! N,8,1 - 38,400 bps
  3704.             end
  3705.  
  3706.  
  3707.  
  3708.  
  3709.  
  3710.  
  3711.  
  3712.  
  3713.  
  3714.  
  3715.  
  3716.  
  3717.  
  3718.  
  3719.  
  3720.  
  3721.  
  3722.  
  3723.  
  3724.                                        Page 65
  3725.  
  3726.  
  3727.  
  3728.           GAP Communications                                         CLACOM
  3729.  
  3730.  
  3731.           Int14Set
  3732.           -----------------------------------------------------------------
  3733.  
  3734.           Purpose       Initialize Digi  port to  baud, parity,  data,  and
  3735.                         stop bits.
  3736.  
  3737.                         DsetUp(channel, baud, parity, data, stop)
  3738.  
  3739.                         SHORT channel   Channel Number (port)
  3740.                         LONG baud       BPS rate
  3741.                         SHORT parity    0 = None, 1 = Odd, 2 = Even
  3742.                         SHORT data      6, 7, or 8 data bits
  3743.                         SHORT stop      1 or 2 stop bits
  3744.  
  3745.           Type          Function - Returns SHORT
  3746.  
  3747.           Description   When  using   a  Communications  Interface  set  to
  3748.                         Int14/EBIOS,   this    function   initializes   the
  3749.                         specified port  (Channel) on  the  DigiBoard.  This
  3750.                         interface requires  that  the  end  user  have  the
  3751.                         DigiBoard supplied  Universal DOS  Driver installed
  3752.                         as a TSR.
  3753.  
  3754.                         The channel  is the  Communications Port  to use on
  3755.                         the DigiBoard. This should be 4 - 19.
  3756.  
  3757.           Return Value  0 = Successful.
  3758.                         1 = Device Driver not installed or
  3759.                            DigiBoard not installed.
  3760.                         2 = EBIOS not configured.
  3761.                         3 = Invalid Parameter passed.
  3762.  
  3763.           Example
  3764.  
  3765.              ! set up 1st port on DigiBoard (Channel = 4)
  3766.  
  3767.              if Int14Set(4,38400,0,8,1)
  3768.                ShowError('Unable To Initialize DigiBoard')
  3769.              end
  3770.  
  3771.  
  3772.  
  3773.  
  3774.  
  3775.  
  3776.  
  3777.  
  3778.  
  3779.  
  3780.  
  3781.  
  3782.                                        Page 66
  3783.  
  3784.  
  3785.  
  3786.           GAP Communications                                         CLACOM
  3787.  
  3788.  
  3789.           Iscd
  3790.           -----------------------------------------------------------------
  3791.  
  3792.           Purpose       Check for Carrier on the Communications Port.
  3793.  
  3794.                         Iscd(port)
  3795.  
  3796.                         SHORT port      COM Port Number
  3797.  
  3798.           Type          Function - Returns SHORT
  3799.  
  3800.           Description   This function allows you to test the communications
  3801.                         port for a remote carrier signal.
  3802.  
  3803.           Return Value  Returns 0  if there is no carrier and 1 if there is
  3804.                         a carrier.
  3805.  
  3806.           Example
  3807.  
  3808.              if Iscd(0)                   ! is there a carrier?
  3809.                online = 1
  3810.                show(MaxRows,MaxCols - 7,' OnLine')
  3811.              else
  3812.                online = 0
  3813.                show(MaxRows,MaxCols - 7,'OffLine')
  3814.              end
  3815.  
  3816.  
  3817.  
  3818.  
  3819.  
  3820.  
  3821.  
  3822.  
  3823.  
  3824.  
  3825.  
  3826.  
  3827.  
  3828.  
  3829.  
  3830.  
  3831.  
  3832.  
  3833.  
  3834.  
  3835.  
  3836.  
  3837.  
  3838.  
  3839.  
  3840.                                        Page 67
  3841.  
  3842.  
  3843.  
  3844.           GAP Communications                                         CLACOM
  3845.  
  3846.  
  3847.           IsRing
  3848.           -----------------------------------------------------------------
  3849.  
  3850.           Purpose       Check to see if the Phone is Ringing.
  3851.  
  3852.                         IsRing(port)
  3853.  
  3854.                         SHORT port      COM Port Number
  3855.  
  3856.           Type          Function - Returns SHORT
  3857.  
  3858.           Description   This function  allows you check to see if the Phone
  3859.                         is Ringing.
  3860.  
  3861.           Return Value  Returns 0 if the phone is not ringing, 1 if it is.
  3862.  
  3863.           Example
  3864.  
  3865.              port  SHORT
  3866.              cstr  CSTRING
  3867.  
  3868.              port = 0                             ! Use COM 1
  3869.              cstr = 'ATA'                         ! Answer Phone string
  3870.  
  3871.              if IsRing(0)                         ! is there a carrier?
  3872.                ComPuts(port,cstr)                 ! Tell Modem to Answer
  3873.              end
  3874.  
  3875.  
  3876.  
  3877.  
  3878.  
  3879.  
  3880.  
  3881.  
  3882.  
  3883.  
  3884.  
  3885.  
  3886.  
  3887.  
  3888.  
  3889.  
  3890.  
  3891.  
  3892.  
  3893.  
  3894.  
  3895.  
  3896.  
  3897.  
  3898.                                        Page 68
  3899.  
  3900.  
  3901.  
  3902.           GAP Communications                                         CLACOM
  3903.  
  3904.  
  3905.           LineStat
  3906.           -----------------------------------------------------------------
  3907.  
  3908.           Purpose       Returns UART Line Status.
  3909.  
  3910.                         LineStat(port)
  3911.  
  3912.                         SHORT port      COM Port Number
  3913.  
  3914.           Type          Function - Returns BYTE
  3915.  
  3916.           Description   Returns the value of the Line Status Register. Note
  3917.                         that the value returned is the contents of the Line
  3918.                         Status Register  at the  time the  last Line Status
  3919.                         Interrupt occured.  This information  will tell you
  3920.                         if there was a Receiver Overrun, Parity, or Framing
  3921.                         error. The  value is  a Bit Flag. The bits have the
  3922.                         following meanings:
  3923.  
  3924.                         1 - Overrun Error
  3925.                         2 - Parity Error
  3926.                         3 - Framing Error
  3927.  
  3928.                         If a  bit is on, it is set to a 1. If it is off, it
  3929.                         is set  to a  0. To test if a bit is on you use the
  3930.                         Clarion BAND function.
  3931.  
  3932.           Return Value  Bit Flag containing Line Status.
  3933.  
  3934.           Example
  3935.  
  3936.              linstat BYTE
  3937.  
  3938.              linstat = LineStat(0)                ! get Line Status
  3939.  
  3940.              if BAND(linstat,02h)                 ! check for Overrun
  3941.                ! Lost some incomming data
  3942.              end
  3943.  
  3944.  
  3945.  
  3946.  
  3947.  
  3948.  
  3949.  
  3950.  
  3951.  
  3952.  
  3953.  
  3954.  
  3955.  
  3956.                                        Page 69
  3957.  
  3958.  
  3959.  
  3960.           GAP Communications                                         CLACOM
  3961.  
  3962.  
  3963.           ModemPuts
  3964.           -----------------------------------------------------------------
  3965.  
  3966.           Purpose       Sends a Command String to a Modem.
  3967.  
  3968.                         ModemPuts(port, str)
  3969.  
  3970.                         SHORT port      COM Port Number
  3971.                         CSTRING str       String to send
  3972.  
  3973.           Type          Procedure
  3974.  
  3975.           Description   Will  send   a  string   of  characters   out   the
  3976.                         communications port.  This  function  is  generally
  3977.                         used to  send commands  to a modem. It is identical
  3978.                         to ComPuts  except that it interprets and acts upon
  3979.                         certain characters.
  3980.  
  3981.                         The special characters are:
  3982.  
  3983.                          ^M - Send a Carriage Return
  3984.  
  3985.                          ~  - Tilde. Pause for 1/2 second
  3986.  
  3987.                      Note that  the special  characters are not sent to the
  3988.                      modem. Also  note that  in order for a modem to accept
  3989.                      commands, the  modem must  be "offline" (not connected
  3990.                      to a remote modem) and DTR must be set : Dtr(0,1).
  3991.  
  3992.           Return Value        None.
  3993.  
  3994.           Example
  3995.  
  3996.              cstr  CSTRING(100)
  3997.  
  3998.              cstr = 'ATZ^M~~'                     ! Modem Reset String
  3999.  
  4000.              ! The above string will send the Modem Reset String followed
  4001.              ! by a Carriage Return. It will wait 1 second after sending
  4002.              ! the string.
  4003.  
  4004.              ModemPuts(0,cstr)                    ! Send Modem Command
  4005.  
  4006.  
  4007.  
  4008.  
  4009.  
  4010.  
  4011.  
  4012.  
  4013.  
  4014.                                        Page 70
  4015.  
  4016.  
  4017.  
  4018.           GAP Communications                                         CLACOM
  4019.  
  4020.  
  4021.           ModemStat
  4022.           -----------------------------------------------------------------
  4023.  
  4024.           Purpose       Returns Status of the attached Modem.
  4025.  
  4026.                         ModemStat(port)
  4027.  
  4028.                         SHORT port      COM Port Number
  4029.  
  4030.           Type          Function - Returns BYTE
  4031.  
  4032.           Description   Returns the value of the Modem Status Register. The
  4033.                         value is  a Bit  Flag. The  bits have the following
  4034.                         meanings:
  4035.  
  4036.                         4 - CTS    (Clear To Send)
  4037.                         5 - DSR    (Data Set Ready)
  4038.                         6 - RI     (Ring Indicator)
  4039.                         7 - RLSD   (Carrier Detect)
  4040.  
  4041.                         If a  bit is on, it is set to a 1. If it is off, it
  4042.                         is set  to a  0. To test if a bit is on you use the
  4043.                         Clarion BAND function.
  4044.  
  4045.           Return Value  Bit Flag containing Modem Status.
  4046.  
  4047.           Example
  4048.  
  4049.              modstat BYTE
  4050.  
  4051.              modstat = ModemStat(0)               ! get Modem Status
  4052.  
  4053.              if BAND(Modstat,080h)                ! check for Carrier
  4054.                online = 1                         ! got one, set flag
  4055.              else
  4056.                online = 0                         ! no carrier, reset flag
  4057.              end
  4058.  
  4059.  
  4060.  
  4061.  
  4062.  
  4063.  
  4064.  
  4065.  
  4066.  
  4067.  
  4068.  
  4069.  
  4070.  
  4071.  
  4072.                                        Page 71
  4073.  
  4074.  
  4075.  
  4076.           GAP Communications                                         CLACOM
  4077.  
  4078.  
  4079.           PeekChr
  4080.           -----------------------------------------------------------------
  4081.  
  4082.           Purpose       Checks if character is in Receive Buffer.
  4083.  
  4084.                         PeekChr(port, chr)
  4085.  
  4086.                         SHORT port      COM Port Number
  4087.                         BYTE chr        Character to check for
  4088.  
  4089.           Type          Function - Returns SHORT
  4090.  
  4091.           Description   This function  checks the Receiver Buffer to see if
  4092.                         it contains a certain character.
  4093.  
  4094.           Return Value  0 if character not in buffer, 1 if it is.
  4095.  
  4096.           Example
  4097.  
  4098.              port    SHORT
  4099.  
  4100.              port = 0                             ! use COM 1
  4101.  
  4102.              if PeekChr(port,10)                  ! check for Line Feed
  4103.                ! there is a Line Feed in the Buffer
  4104.              end
  4105.  
  4106.  
  4107.  
  4108.  
  4109.  
  4110.  
  4111.  
  4112.  
  4113.  
  4114.  
  4115.  
  4116.  
  4117.  
  4118.  
  4119.  
  4120.  
  4121.  
  4122.  
  4123.  
  4124.  
  4125.  
  4126.  
  4127.  
  4128.  
  4129.  
  4130.                                        Page 72
  4131.  
  4132.  
  4133.  
  4134.           GAP Communications                                         CLACOM
  4135.  
  4136.  
  4137.           PosCursor
  4138.           -----------------------------------------------------------------
  4139.  
  4140.           Purpose       Restore ANSI Driver Cursor Position.
  4141.  
  4142.                         PosCursor()
  4143.  
  4144.           Type          Procedure
  4145.  
  4146.           Description   When opening  a window and then closing it, Clarion
  4147.                         does not  put the cursor back where it was prior to
  4148.                         opening the window. This doesn't cause any problems
  4149.                         because the  ANSI driver maintains its own internal
  4150.                         cursor position.  However, the  screen will  look a
  4151.                         bit strange  if the  cursor  is  "hanging"  in  the
  4152.                         middle of  the screen  when it  should be on row 2,
  4153.                         column 10.
  4154.  
  4155.           Return Value  None.
  4156.  
  4157.           Example       PosCursor()               ! Put Cursor back
  4158.  
  4159.  
  4160.  
  4161.  
  4162.  
  4163.  
  4164.  
  4165.  
  4166.  
  4167.  
  4168.  
  4169.  
  4170.  
  4171.  
  4172.  
  4173.  
  4174.  
  4175.  
  4176.  
  4177.  
  4178.  
  4179.  
  4180.  
  4181.  
  4182.  
  4183.  
  4184.  
  4185.  
  4186.  
  4187.  
  4188.                                        Page 73
  4189.  
  4190.  
  4191.  
  4192.           GAP Communications                                         CLACOM
  4193.  
  4194.  
  4195.           RecvCount
  4196.           -----------------------------------------------------------------
  4197.  
  4198.           Purpose       Gets number of characters in Receive Buffer.
  4199.  
  4200.                         RecvCount(port)
  4201.  
  4202.                         SHORT port      COM Port Number
  4203.  
  4204.           Type          Function - Returns USHORT
  4205.  
  4206.           Description   This function  returns the  number of characters in
  4207.                         the Receive Buffer waiting to be read.
  4208.  
  4209.           Return Value  Number of characters in Receive Buffer.
  4210.  
  4211.           Example
  4212.  
  4213.              port    SHORT
  4214.              numchrs USHORT
  4215.  
  4216.              port = 0                             ! use COM 1
  4217.  
  4218.              numchrs = RecvCount(port)            ! get # of chars
  4219.  
  4220.  
  4221.  
  4222.  
  4223.  
  4224.  
  4225.  
  4226.  
  4227.  
  4228.  
  4229.  
  4230.  
  4231.  
  4232.  
  4233.  
  4234.  
  4235.  
  4236.  
  4237.  
  4238.  
  4239.  
  4240.  
  4241.  
  4242.  
  4243.  
  4244.  
  4245.  
  4246.                                        Page 74
  4247.  
  4248.  
  4249.  
  4250.           GAP Communications                                         CLACOM
  4251.  
  4252.  
  4253.           ResetPort
  4254.           -----------------------------------------------------------------
  4255.  
  4256.           Purpose       Restores the Communications port.
  4257.  
  4258.                         ResetPort(port)
  4259.  
  4260.                         SHORT port      COM Port Number
  4261.  
  4262.           Type          Procedure
  4263.  
  4264.           Description   This function  must be  called prior to exiting the
  4265.                         program or  anytime you  are finished  with the Com
  4266.                         Port. It  restores the interrupt vector used by the
  4267.                         Standard Communications routines.
  4268.  
  4269.                         It is  imperative  that  when  using  the  Standard
  4270.                         Interface you call this function when you no longer
  4271.                         wish  to  access  the  Serial  Port.  The  Standard
  4272.                         Interface sets  up an interrupt vector for the port
  4273.                         and if this vector is not restored prior to exiting
  4274.                         your program, the computer will ultimately crash.
  4275.  
  4276.                         This  function   should  only   be  used  when  the
  4277.                         Communications Interface  is set to Standard. Don't
  4278.                         call when interfacing with a DigiBoard.                                                    _
  4279.  
  4280.           Return Value  None.
  4281.  
  4282.           Example       ResetPort(0)              ! Reset COM 1
  4283.  
  4284.  
  4285.  
  4286.  
  4287.  
  4288.  
  4289.  
  4290.  
  4291.  
  4292.  
  4293.  
  4294.  
  4295.  
  4296.  
  4297.  
  4298.  
  4299.  
  4300.  
  4301.  
  4302.  
  4303.  
  4304.                                        Page 75
  4305.  
  4306.  
  4307.  
  4308.           GAP Communications                                         CLACOM
  4309.  
  4310.  
  4311.           RestCbreak
  4312.           -----------------------------------------------------------------
  4313.  
  4314.           Purpose       Restores the Ctrl-Break vector.
  4315.  
  4316.                         RestCbreak()
  4317.  
  4318.           Type          Procedure
  4319.  
  4320.           Description   This function  must be  called prior to exiting the
  4321.                         program. It  restores the  interrupt vector used by
  4322.                         the Ctrl-Break  routine. If you set up a Ctrl-Break
  4323.                         handler at  the  beginning  of  your  program,  you
  4324.                         should  call   this  function   from   a   SHUTDOWN
  4325.                         procedure. Setting  up a SHUTDOWN procedure insures
  4326.                         that the  Ctrl-Break vector  is restored  prior  to
  4327.                         program termination.
  4328.  
  4329.           Return Value  None.
  4330.  
  4331.           Example       RestCbreak()              ! restore Ctrl-Break
  4332.  
  4333.  
  4334.  
  4335.  
  4336.  
  4337.  
  4338.  
  4339.  
  4340.  
  4341.  
  4342.  
  4343.  
  4344.  
  4345.  
  4346.  
  4347.  
  4348.  
  4349.  
  4350.  
  4351.  
  4352.  
  4353.  
  4354.  
  4355.  
  4356.  
  4357.  
  4358.  
  4359.  
  4360.  
  4361.  
  4362.                                        Page 76
  4363.  
  4364.  
  4365.  
  4366.           GAP Communications                                         CLACOM
  4367.  
  4368.  
  4369.           Rts
  4370.           -----------------------------------------------------------------
  4371.  
  4372.           Purpose       Toggle the RTS line on or off.
  4373.  
  4374.                         Rts(port, how)
  4375.  
  4376.                         SHORT port      COM Port Number
  4377.                         SHORT how       0 = Turn RTS off
  4378.                                         1 = Turn RTS on
  4379.  
  4380.           Type          Procedure
  4381.  
  4382.           Description   This routine  is used  to turn  the Request To Send
  4383.                         line of  the communications port on or off. Turning
  4384.                         RTS off  (providing  the  modem  supports  hardware
  4385.                         handshaking) tells  the modem  to stop sending data
  4386.                         to the  computer. It is typically toggled off while
  4387.                         writing a buffer of data to a disk.
  4388.  
  4389.           Return Value  None.
  4390.  
  4391.           Example       Rts(0,0)                  ! Turn RTS off
  4392.  
  4393.  
  4394.  
  4395.  
  4396.  
  4397.  
  4398.  
  4399.  
  4400.  
  4401.  
  4402.  
  4403.  
  4404.  
  4405.  
  4406.  
  4407.  
  4408.  
  4409.  
  4410.  
  4411.  
  4412.  
  4413.  
  4414.  
  4415.  
  4416.  
  4417.  
  4418.  
  4419.  
  4420.                                        Page 77
  4421.  
  4422.  
  4423.  
  4424.           GAP Communications                                         CLACOM
  4425.  
  4426.  
  4427.           Rxempty
  4428.           -----------------------------------------------------------------
  4429.  
  4430.           Purpose       To check if there are any characters in the receive
  4431.                         buffer.
  4432.  
  4433.                         Rxempty(port)
  4434.  
  4435.                         SHORT port      COM Port Number
  4436.  
  4437.           Type          Function - Returns SHORT
  4438.  
  4439.           Description   This function  checks  the  communications  receive
  4440.                         buffer to  see if  there are any characters waiting
  4441.                         to be read.
  4442.  
  4443.           Return Value  Returns 1  if buffer  is  empty,  0  if  there  are
  4444.                         characters waiting to be read.
  4445.  
  4446.           Example
  4447.  
  4448.              while Rxempty(0)                     ! nothing happening
  4449.              end                                  ! wait for something
  4450.  
  4451.  
  4452.  
  4453.  
  4454.  
  4455.  
  4456.  
  4457.  
  4458.  
  4459.  
  4460.  
  4461.  
  4462.  
  4463.  
  4464.  
  4465.  
  4466.  
  4467.  
  4468.  
  4469.  
  4470.  
  4471.  
  4472.  
  4473.  
  4474.  
  4475.  
  4476.  
  4477.  
  4478.                                        Page 78
  4479.  
  4480.  
  4481.  
  4482.           GAP Communications                                         CLACOM
  4483.  
  4484.  
  4485.           SendBreak
  4486.           -----------------------------------------------------------------
  4487.  
  4488.           Purpose       Sends a Break Signal to Modem.
  4489.  
  4490.                         SendBreak(port)
  4491.  
  4492.                         SHORT port      COM Port Number
  4493.  
  4494.           Type          Procedure
  4495.  
  4496.           Description   Will  send  a  Break  Signal  to  the  Modem.  This
  4497.                         function is  most often used with high speed modems
  4498.                         that have their own transmit buffer and you wish to
  4499.                         clear the buffer. These modems can be configured to
  4500.                         empty their buffer upon receipt of a break signal.
  4501.  
  4502.                         Note that  some modems  do not  react too well to a
  4503.                         break signal. Whether or not to send a break to the
  4504.                         modem so  that you  can clear  its transmit  buffer
  4505.                         should be a configuration option.
  4506.  
  4507.           Return Value  None.
  4508.  
  4509.           Example       SendBreak(0)              ! Send a Break to Modem
  4510.  
  4511.  
  4512.  
  4513.  
  4514.  
  4515.  
  4516.  
  4517.  
  4518.  
  4519.  
  4520.  
  4521.  
  4522.  
  4523.  
  4524.  
  4525.  
  4526.  
  4527.  
  4528.  
  4529.  
  4530.  
  4531.  
  4532.  
  4533.  
  4534.  
  4535.  
  4536.                                        Page 79
  4537.  
  4538.  
  4539.  
  4540.           GAP Communications                                         CLACOM
  4541.  
  4542.  
  4543.           SendZmodem
  4544.           -----------------------------------------------------------------
  4545.  
  4546.           Purpose       Sends one or more files using Zmodem.
  4547.  
  4548.                         SendZmodem(port, filename, statfunc)
  4549.  
  4550.                         SHORT port        COM Port Number
  4551.                         CSTRING filename  Name of file to upload
  4552.                         SHORT statfunc    0 or 1 (see below)
  4553.  
  4554.           Type          Function - Returns SHORT
  4555.  
  4556.           Description   This function  allows you to send one or more files
  4557.                         to a remote computer using the Zmodem Protocol.
  4558.  
  4559.                         Filename is  a CSTRING  containing the  name of the
  4560.                         file  to   upload.  It  may  contain  a  Wild  Card
  4561.                         Specification to send more than one file at a time.
  4562.  
  4563.                         The statfunc  parameter allows  you to override the
  4564.                         default Transfer  Status Window. A value of 0 means
  4565.                         the internal  window will be displayed and updated.
  4566.                         A value  of 1  means you  will open your own window
  4567.                         and the transfer statistics will be displayed on it
  4568.                         instead.
  4569.  
  4570.           Return Value  0 for  successful transfer. If an error occurs, the
  4571.                         following values are returned:
  4572.  
  4573.                         1 - Error opening file    4 - Time out
  4574.                         2 - Receiver cancelled    5 - No carrier
  4575.                         3 - Sender cancelled
  4576.  
  4577.  
  4578.           Example
  4579.  
  4580.              cstr  CSTRING(100)
  4581.  
  4582.              cstr = 'FILE.ZIP'                    ! send a single file
  4583.              SendZmodem(0,cstr,0)
  4584.  
  4585.              cstr = '*.ZIP'                       ! send all the ZIP files
  4586.              SendZmodem(0,cstr,0)
  4587.  
  4588.  
  4589.  
  4590.  
  4591.  
  4592.  
  4593.  
  4594.                                        Page 80
  4595.  
  4596.  
  4597.  
  4598.           GAP Communications                                         CLACOM
  4599.  
  4600.  
  4601.           SendZmodem1
  4602.           -----------------------------------------------------------------
  4603.  
  4604.           Purpose       Sends one or more files using Zmodem.
  4605.  
  4606.                         SendZmodem1(port, filename, path, flag, statfunc)
  4607.  
  4608.                         SHORT port        COM Port Number
  4609.                         CSTRING filename  Name of file to upload
  4610.                         CSTRING path      Path of file to upload
  4611.                         SHORT flag        Control Flag
  4612.                         SHORT statfunc    0 or 1 (see below)
  4613.  
  4614.           Type          Function - Returns SHORT
  4615.  
  4616.           Description   This is  an alternate  Zmodem  send  function  that
  4617.                         allows you  to control  the file sends according to
  4618.                         your needs.  This is  especially useful if you need
  4619.                         to send  more than  one file  and the files are not
  4620.                         all in the same directory.
  4621.  
  4622.                         Filename is  a CSTRING  containing the  name of the
  4623.                         file  to   upload.  It  may  not  be  a  Wild  Card
  4624.                         Specification.
  4625.  
  4626.                         Path is a CSTRING containing the full path to where
  4627.                         the file  is located.  It should  be in the form of
  4628.                         "C:\FILES", without a trailing slash.
  4629.  
  4630.                         Flag is defined as follows:
  4631.  
  4632.                         0   =  This is the First File in the Batch.
  4633.                        >0   =  This is the Second and Subsequent File.
  4634.                        -1   =  End the Batch (no more files to send).
  4635.  
  4636.                         You must  always end  the batch with Zmodem. If you
  4637.                         have only  one file  to send,  you would  call this
  4638.                         function twice.  If you  have three  files to send,
  4639.                         you would call this function four times.
  4640.  
  4641.                         Generally you call this function from within a loop
  4642.                         where the  control variable  is passed  as the flag
  4643.                         parameter. After  all files are sent, you then call
  4644.                         SendZmodem1 with a flag value of -1.
  4645.  
  4646.                         The statfunc  parameter allows  you to override the
  4647.                         default Transfer  Status Window. A value of 0 means
  4648.                         the internal  window will be displayed and updated.
  4649.  
  4650.  
  4651.  
  4652.                                        Page 81
  4653.  
  4654.  
  4655.  
  4656.           GAP Communications                                         CLACOM
  4657.  
  4658.  
  4659.                         A value  of 1  means you  will open your own window
  4660.                         and the transfer statistics will be displayed on it
  4661.                         instead.
  4662.  
  4663.           Return Value  0 for  successful transfer. If an error occurs, the
  4664.                         following values are returned:
  4665.  
  4666.                         1 - Error opening file    4 - Time out
  4667.                         2 - Receiver cancelled    5 - No carrier
  4668.                         3 - Sender cancelled
  4669.           Example
  4670.  
  4671.              r     SHORT 
  4672.              fname CSTRING(100)
  4673.              fpath CSTRING(160)
  4674.  
  4675.              Loop r = 0 To 3                      ! 4 files to send
  4676.                fname = Clip(files[r+1])           ! get file name
  4677.                fpath = Clip(filepath[r+1])        ! get file's path
  4678.  
  4679.                If SendZmodem1(port,fname,fpath,r,0) NOT= 0
  4680.                  Break
  4681.                End
  4682.              End
  4683.  
  4684.              r = SendZmodem1(port,fname,fpath,-1,0)    ! end the Batch
  4685.  
  4686.  
  4687.  
  4688.  
  4689.  
  4690.  
  4691.  
  4692.  
  4693.  
  4694.  
  4695.  
  4696.  
  4697.  
  4698.  
  4699.  
  4700.  
  4701.  
  4702.  
  4703.  
  4704.  
  4705.  
  4706.  
  4707.  
  4708.  
  4709.  
  4710.                                        Page 82
  4711.  
  4712.  
  4713.  
  4714.           GAP Communications                                         CLACOM
  4715.  
  4716.  
  4717.           SetCapture
  4718.           -----------------------------------------------------------------
  4719.  
  4720.           Purpose       Turns Capture Buffer On or Off.
  4721.  
  4722.                         SetCapture(how)
  4723.  
  4724.                         SHORT how       0 = Turn Capture Buffer off
  4725.                                         1 = Turn Capture Buffer on
  4726.  
  4727.           Type          Function - Returns SHORT
  4728.  
  4729.           Description   Turns automatic  data capturing on or off. When the
  4730.                         capture buffer  is on,  any data sent to the screen
  4731.                         using Gputc  or Gputs  will also  be stored  in the
  4732.                         capture buffer (ANSI sequences are stripped).
  4733.  
  4734.                         The capture  buffer is  capable of  holding 64k  of
  4735.                         data.  When   the  buffer   becomes  full,   it  is
  4736.                         automatically written to a disk file.
  4737.  
  4738.                         Whenever you  need to  view the capture buffer, you
  4739.                         should first  flush the  buffer to  disk by calling
  4740.                         SetCapture with  a parameter  of 0. Be sure to turn
  4741.                         the buffer  back on  when you  are ready to capture
  4742.                         more data.
  4743.  
  4744.           Return Value  0  if   memory  for  the  buffer  was  successfully
  4745.                         allocated, 1 if there is insufficient memory.
  4746.  
  4747.  
  4748.  
  4749.  
  4750.  
  4751.  
  4752.  
  4753.  
  4754.  
  4755.  
  4756.  
  4757.  
  4758.  
  4759.  
  4760.  
  4761.  
  4762.  
  4763.  
  4764.  
  4765.  
  4766.  
  4767.  
  4768.                                        Page 83
  4769.  
  4770.  
  4771.  
  4772.           GAP Communications                                         CLACOM
  4773.  
  4774.  
  4775.           Example
  4776.  
  4777.              ScrFile CSTRING(64)                  ! Name of ScrollBack File
  4778.  
  4779.              ! set up an automatic Scroll Back Buffer
  4780.  
  4781.              ScrFile = 'GTERM$$.CAP'              ! Give Scroll File a name
  4782.  
  4783.              Do TurnOnCapture                     ! Turn on Capture
  4784.  
  4785.              .....     ! your program code here
  4786.  
  4787.              ! end of procedure, close Scroll Back Buffer
  4788.  
  4789.              retchr = SetCapture(0)               ! Turn Capture Off
  4790.  
  4791.              Return    ! Return from Procedure
  4792.  
  4793.  
  4794.              TurnOnCapture Routine                ! Turn on Capture
  4795.                SetCaptureFile(ScrFile)            ! Name of file
  4796.                if SetCapture(1)                   ! and turn on Capture
  4797.                  Open(CaptureErr)                 ! No Memory
  4798.                  bell()  ! make noise
  4799.                  Accept  ! tell um
  4800.                  Close(CaptureErr)                ! close error screen
  4801.                end
  4802.                Exit                               ! Return from Routine
  4803.  
  4804.  
  4805.  
  4806.  
  4807.  
  4808.  
  4809.  
  4810.  
  4811.  
  4812.  
  4813.  
  4814.  
  4815.  
  4816.  
  4817.  
  4818.  
  4819.  
  4820.  
  4821.  
  4822.  
  4823.  
  4824.  
  4825.  
  4826.                                        Page 84
  4827.  
  4828.  
  4829.  
  4830.           GAP Communications                                         CLACOM
  4831.  
  4832.  
  4833.           SetCaptureFile
  4834.           -----------------------------------------------------------------
  4835.  
  4836.           Purpose       Names the Capture Buffer File.
  4837.  
  4838.                         SetCaptureFile(filename)
  4839.  
  4840.                         CSTRING filename  Name to use for Capture File
  4841.  
  4842.           Type          Procedure
  4843.  
  4844.           Description   Names the  file that will be used to store captured
  4845.                         data.
  4846.  
  4847.           Return Value  None.
  4848.  
  4849.           Example       See the example for SetCapture.
  4850.  
  4851.  
  4852.  
  4853.  
  4854.  
  4855.  
  4856.  
  4857.  
  4858.  
  4859.  
  4860.  
  4861.  
  4862.  
  4863.  
  4864.  
  4865.  
  4866.  
  4867.  
  4868.  
  4869.  
  4870.  
  4871.  
  4872.  
  4873.  
  4874.  
  4875.  
  4876.  
  4877.  
  4878.  
  4879.  
  4880.  
  4881.  
  4882.  
  4883.  
  4884.                                        Page 85
  4885.  
  4886.  
  4887.  
  4888.           GAP Communications                                         CLACOM
  4889.  
  4890.  
  4891.           SetCbreak
  4892.           -----------------------------------------------------------------
  4893.  
  4894.           Purpose       Initializes the Ctrl-Break vector.
  4895.  
  4896.                         SetCbreak()
  4897.  
  4898.           Type          Procedure
  4899.  
  4900.           Description   To trap Ctrl-C and Ctrl-Break, this function should
  4901.                         be called to set up an interrupt service routine to
  4902.                         trap these  two keys.  It is  imperative  that  the
  4903.                         program not  exit before calling RestCbreak so that
  4904.                         the interrupt vector can be restored.
  4905.  
  4906.                         When using the Standard Communications Interface, a
  4907.                         Ctrl-Break vector  must be  installed to  prevent a
  4908.                         user from  breaking  out  of  your  program  before
  4909.                         you've had  a chance  to restore the Communications
  4910.                         Interrupt vector.
  4911.  
  4912.           Return Value  None.
  4913.  
  4914.           Example       SetCbreak()               ! set up Ctrl-Break ISR
  4915.  
  4916.  
  4917.  
  4918.  
  4919.  
  4920.  
  4921.  
  4922.  
  4923.  
  4924.  
  4925.  
  4926.  
  4927.  
  4928.  
  4929.  
  4930.  
  4931.  
  4932.  
  4933.  
  4934.  
  4935.  
  4936.  
  4937.  
  4938.  
  4939.  
  4940.  
  4941.  
  4942.                                        Page 86
  4943.  
  4944.  
  4945.  
  4946.           GAP Communications                                         CLACOM
  4947.  
  4948.  
  4949.           SetPort
  4950.           -----------------------------------------------------------------
  4951.  
  4952.           Purpose       Initialize the Communications Port.
  4953.  
  4954.                         SetPort(irq, base, port)
  4955.  
  4956.                         SHORT irq       Port IRQ to use
  4957.                         SHORT base      Port Base Address to use
  4958.                         SHORT port      Com Port Number
  4959.  
  4960.           Type          Function - Returns SHORT
  4961.  
  4962.           Description   This is  the port  initialization routine that must
  4963.                         be called  when using  the Standard  Interface.  It
  4964.                         must be called prior to any port I/O calls.
  4965.  
  4966.                         IRQ is  the Interrupt Request number to use for the
  4967.                         port. Base Address is the address where the port is
  4968.                         located. Port  is the COM port number, where COM1 =
  4969.                         0, COM2  = 1, COM3 = 2, and COM4 = 3. For COM 1 and
  4970.                         COM 2,  you may  simply pass  0 as the IRQ and Base
  4971.                         address since  the defaults for these ports will be
  4972.                         used.
  4973.  
  4974.                         Note that  the Communications  Routines always  use
  4975.                         hardware handshaking  (unless the nocts flag is set
  4976.                         to 1).  This means  that if  CTS is not active, the
  4977.                         output  routines   will  not  be  able  to  send  a
  4978.                         character out  the serial  port.  CTS  is  normally
  4979.                         controlled by  a Modem,  however when  not using  a
  4980.                         modem, the  serial cable  must be wired so that CTS
  4981.                         on one  end of the connection is tied to RTS on the
  4982.                         other end.  See Appendix  B for a diagram of a NULL                                                                      _
  4983.                         Modem cable.
  4984.  
  4985.           Return Value  0 = successful.
  4986.                         1 = No UART found at Port Address.
  4987.                         2 = Clear To Send (CTS) is not active.
  4988.  
  4989.           Example
  4990.  
  4991.              ! Set Up Port on COM1
  4992.  
  4993.              if SetPort(0,0,0)
  4994.                ShowError('Unable To Initialize Port')
  4995.              end
  4996.  
  4997.  
  4998.  
  4999.  
  5000.                                        Page 87
  5001.  
  5002.  
  5003.  
  5004.           GAP Communications                                         CLACOM
  5005.  
  5006.  
  5007.           StrHex
  5008.           -----------------------------------------------------------------
  5009.  
  5010.           Purpose       Converts a Hexadecimal string to an Unsigned Short.
  5011.  
  5012.                         StrHex(hexstring)
  5013.  
  5014.                         CSTRING hexstring String containing Hex digits
  5015.  
  5016.           Type          Function - Returns USHORT
  5017.  
  5018.           Description   This function  will  convert  a  string  containing
  5019.                         hexadecimal digits  and return  the value  of  that
  5020.                         string as  an unsigned short. It is most often used
  5021.                         to convert Memory Addresses stored as a string to a
  5022.                         number  that   can  be   utilized   by   the   port
  5023.                         initialization routines.
  5024.  
  5025.           Return Value  0 if  string could  not be  converted, number if it
  5026.                         could.
  5027.  
  5028.           Example
  5029.  
  5030.              cstr    CSTRING(100)
  5031.              hexnum  USHORT
  5032.  
  5033.              cstr = 'D800'                        ! Base Address
  5034.              hexnum = StrHex(cstr)                ! as a number
  5035.  
  5036.  
  5037.  
  5038.  
  5039.  
  5040.  
  5041.  
  5042.  
  5043.  
  5044.  
  5045.  
  5046.  
  5047.  
  5048.  
  5049.  
  5050.  
  5051.  
  5052.  
  5053.  
  5054.  
  5055.  
  5056.  
  5057.  
  5058.                                        Page 88
  5059.  
  5060.  
  5061.  
  5062.           GAP Communications                                         CLACOM
  5063.  
  5064.  
  5065.           StrWord
  5066.           -----------------------------------------------------------------
  5067.  
  5068.           Purpose       Check if one string contains another string.
  5069.  
  5070.                         StrWord(srcstring, substring)
  5071.  
  5072.                         CSTRING srcstring String to search
  5073.                         CSTRING substring String to search for
  5074.  
  5075.           Type          Function - Returns SHORT
  5076.  
  5077.           Description   Clarion's INSTRING  function doesn't work very well
  5078.                         with C  strings (in  fact, it doesn't work at all).
  5079.                         The terminating  NULL seems  to be included as part
  5080.                         of the search value.
  5081.  
  5082.                         StrWord will  search for  a string  to see if it is
  5083.                         contained within  another string. Both strings must
  5084.                         be of  type CSTRING.  If the larger string contains
  5085.                         the smaller  string, the  position  in  the  larger
  5086.                         string where  the smaller  string  begins  will  be
  5087.                         returned.
  5088.  
  5089.                         Note that  the strings  are compared without regard
  5090.                         to case.
  5091.  
  5092.           Return Value  0 if  substring not  found, otherwise  position  in
  5093.                         source string where the substring starts.
  5094.  
  5095.           Example
  5096.  
  5097.              srcstring  CSTRING(100)
  5098.              substring  CSTRING(10)
  5099.  
  5100.              scrstring = 'This is a string'
  5101.              substring = 'string'
  5102.  
  5103.              if StrWord(srcstring,substring)
  5104.                ! srcstring contains substring
  5105.              else
  5106.                ! substring not found
  5107.              end
  5108.  
  5109.  
  5110.  
  5111.  
  5112.  
  5113.  
  5114.  
  5115.  
  5116.                                        Page 89
  5117.  
  5118.  
  5119.  
  5120.           GAP Communications                                         CLACOM
  5121.  
  5122.  
  5123.           Timer
  5124.           -----------------------------------------------------------------
  5125.  
  5126.           Purpose       Pauses for the number of "ticks" specified.
  5127.  
  5128.                         Timer(ticks)
  5129.  
  5130.                         SHORT ticks       Number of timer ticks to pause
  5131.  
  5132.           Type          Procedure
  5133.  
  5134.           Description   This function  allows you  to pause  all processing
  5135.                         for the  specified  number  of  ticks.  It  is  in-
  5136.                         sensitive to processor speed.
  5137.  
  5138.                         The function  simply delays  the number  of "ticks"
  5139.                         indicated by  the passed  parameter. Each  tick  is
  5140.                         1/18 of a second (or 55 milliseconds).
  5141.  
  5142.           Return Value  None.
  5143.  
  5144.           Example       Timer(18)                 ! pause for 1 second
  5145.  
  5146.  
  5147.  
  5148.  
  5149.  
  5150.  
  5151.  
  5152.  
  5153.  
  5154.  
  5155.  
  5156.  
  5157.  
  5158.  
  5159.  
  5160.  
  5161.  
  5162.  
  5163.  
  5164.  
  5165.  
  5166.  
  5167.  
  5168.  
  5169.  
  5170.  
  5171.  
  5172.  
  5173.  
  5174.                                        Page 90
  5175.  
  5176.  
  5177.  
  5178.           GAP Communications                                         CLACOM
  5179.  
  5180.  
  5181.           UpLoad
  5182.           -----------------------------------------------------------------
  5183.  
  5184.           Purpose       Sends one or more files.
  5185.  
  5186.                         UpLoad(port, protocol, filename, statfunc)
  5187.  
  5188.                         SHORT port      COM Port Number
  5189.                         SHORT protocol  Number of protocol to use                                                 _
  5190.                         CSTRING filename  Name of file to upload
  5191.                         SHORT statfunc  0 or 1 (see below)
  5192.  
  5193.           Type          Function - Returns SHORT
  5194.  
  5195.           Description   This function allows you to send a file to a remote
  5196.                         computer. The protocols are defined as follows:
  5197.  
  5198.                           0 = ASCII          3 = 1K Xmodem-G
  5199.                           1 = Xmodem         4 = Ymodem
  5200.                           2 = 1K Xmodem      5 = Ymodem-G
  5201.  
  5202.  
  5203.                         Filename is  a CSTRING  containing the  name of the
  5204.                         file to upload. If the protocol is a batch protocol
  5205.                         (Ymodem or  Ymodem-G) then you may pass a Wild Card
  5206.                         Specification to send more than one file at a time.
  5207.  
  5208.                         The statfunc  parameter allows  you to override the
  5209.                         default Transfer  Status Window. A value of 0 means
  5210.                         the internal  window will be displayed and updated.
  5211.                         A value  of 1  means you  will open your own window
  5212.                         and the transfer statistics will be displayed on it
  5213.                         instead.
  5214.  
  5215.           Return Value  0 for  successful transfer. If an error occurs, the
  5216.                         following values are returned:
  5217.  
  5218.                         1 - Error opening file    4 - Time out
  5219.                         2 - Receiver cancelled    5 - No carrier
  5220.                         3 - Sender cancelled      6 - Error reading file
  5221.  
  5222.  
  5223.  
  5224.  
  5225.  
  5226.  
  5227.  
  5228.  
  5229.  
  5230.  
  5231.  
  5232.                                        Page 91
  5233.  
  5234.  
  5235.  
  5236.           GAP Communications                                         CLACOM
  5237.  
  5238.  
  5239.           Example
  5240.  
  5241.              cstr  CSTRING(100)
  5242.  
  5243.              cstr = 'FILE.ZIP'                    ! send a single file
  5244.              UpLoad(0,2,cstr,0)                   ! using 1K Xmodem
  5245.  
  5246.              cstr = '*.ZIP'                       ! send all the ZIP files
  5247.              UpLoad(0,4,cstr,0)                   ! using Ymodem
  5248.  
  5249.  
  5250.  
  5251.  
  5252.  
  5253.  
  5254.  
  5255.  
  5256.  
  5257.  
  5258.  
  5259.  
  5260.  
  5261.  
  5262.  
  5263.  
  5264.  
  5265.  
  5266.  
  5267.  
  5268.  
  5269.  
  5270.  
  5271.  
  5272.  
  5273.  
  5274.  
  5275.  
  5276.  
  5277.  
  5278.  
  5279.  
  5280.  
  5281.  
  5282.  
  5283.  
  5284.  
  5285.  
  5286.  
  5287.  
  5288.  
  5289.  
  5290.                                        Page 92
  5291.  
  5292.  
  5293.  
  5294.           GAP Communications                                         CLACOM
  5295.  
  5296.  
  5297.           Appendix A
  5298.  
  5299.  
  5300.           GetKeyc obtains  keyboard input  by making  calls to the Computer
  5301.           BIOS. The  BIOS translates keyboard scan codes into unique codes.
  5302.           Any code returned by GetKeyc that is less than or equal to 127 is
  5303.           a regular  ASCII character.  Codes in the range of 128 to 255 are
  5304.           IBM enhanced  ASCII characters.  These codes are returned "as is"
  5305.           (no translations are performed upon them).
  5306.  
  5307.           Key Codes  greater than 255 present a problem. These are extended
  5308.           keys and include the function keys, cursor keys, and the Ctrl and
  5309.           Alt key  combinations. The  BIOS returns  the scan  code of these
  5310.           keys. The  problem is  that the scan code can lie in the range of
  5311.           ASCII characters (0 through 255).
  5312.  
  5313.           In order to distinguish between a displayable ASCII character and
  5314.           an extended  key (F1,  Home, PgDn,  Alt-Equal, etc), GetKeyc adds
  5315.           256 to the key code returned by the BIOS.
  5316.  
  5317.           The following  tables show  the extended  key codes  as  well  as
  5318.           Control  Key   combinations  (which   are  used   extensively  in
  5319.           communications).
  5320.  
  5321.  
  5322.  
  5323.  
  5324.  
  5325.  
  5326.  
  5327.  
  5328.  
  5329.  
  5330.  
  5331.  
  5332.  
  5333.  
  5334.  
  5335.  
  5336.  
  5337.  
  5338.  
  5339.  
  5340.  
  5341.  
  5342.  
  5343.  
  5344.  
  5345.  
  5346.  
  5347.  
  5348.                                        Page 93
  5349.  
  5350.  
  5351.  
  5352.           GAP Communications                                         CLACOM
  5353.  
  5354.  
  5355.           Control Keys and Extended Keys in Numerical Order:
  5356.  
  5357.             Ctrl-A      1       Alt-S        287      Shift-F9          348
  5358.             Ctrl-B      2       Alt-D        288      Shift-F10         349
  5359.             Ctrl-C      3       Alt-F        289      Ctrl-F1           350
  5360.             Ctrl-D      4       Alt-G        290      Ctrl-F2           351
  5361.             Ctrl-E      5       Alt-H        291      Ctrl-F3           352
  5362.             Ctrl-F      6       Alt-J        292      Ctrl-F4           353
  5363.             Ctrl-G      7       Alt-K        293      Ctrl-F5           354
  5364.             Backspace   8       Alt-L        294      Ctrl-F6           355
  5365.             Ctrl-H      8       Alt-Z        300      Ctrl-F7           356
  5366.             Ctrl-I      9       Alt-X        301      Ctrl-F8           357
  5367.             Tab         9       Alt-C        302      Ctrl-F9           358
  5368.             Ctrl-J      10      Alt-V        303      Ctrl-F10          359
  5369.             LineFeed    10      Alt-B        304      Alt-F1            360
  5370.             Ctrl-K      11      Alt-N        305      Alt-F2            361
  5371.             Ctrl-L      12      Alt-M        306      Alt-F3            362
  5372.             Ctrl-M      13      F1           315      Alt-F4            363
  5373.             Enter       13      F2           316      Alt-F5            364
  5374.             Ctrl-N      14      F3           317      Alt-F6            365
  5375.             Ctrl-O      15      F4           318      Alt-F7            366
  5376.             Ctrl-P      16      F5           319      Alt-F8            367
  5377.             Ctrl-Q      17      F6           320      Alt-F9            368
  5378.             Ctrl-R      18      F7           321      Alt-F10           369
  5379.             Ctrl-S      19      F8           322      Ctrl-PrintScreen  370
  5380.             Ctrl-T      20      F9           323      Ctrl-CursorLeft   371
  5381.             Ctrl-U      21      F10          324      Ctrl-CursorRight  372
  5382.             Ctrl-V      22      Home         327      Ctrl-End          373
  5383.             Ctrl-W      23      CursorUp     328      Ctrl-PgDn         374
  5384.             Ctrl-X      24      PgUp         329      Ctrl-Home         375
  5385.             Ctrl-Y      25      CursorLeft   331      Alt-1             376
  5386.             Ctrl-Z      26      CursorRight  333      Alt-2             377
  5387.             Escape      27      End          335      Alt-3             378
  5388.             BackTab     271     CursorDown   336      Alt-4             379
  5389.             Alt-Q       272     PgDn         337      Alt-5             380
  5390.             Alt-W       273     Insert       338      Alt-6             381
  5391.             Alt-E       274     Delete       339      Alt-7             382
  5392.             Alt-R       275     Shift-F1     340      Alt-8             383
  5393.             Alt-T       276     Shift-F2     341      Alt-9             384
  5394.             Alt-Y       277     Shift-F3     342      Alt-0             385
  5395.             Alt-U       278     Shift-F4     343      Alt-Hyphen        386
  5396.             Alt-I       279     Shift-F5     344      Alt-Equal         387
  5397.             Alt-O       280     Shift-F6     345      Ctrl-PgUp         388
  5398.             Alt-P       281     Shift-F7     346                           
  5399.             Alt-A       286     Shift-F8     347                           
  5400.  
  5401.  
  5402.  
  5403.  
  5404.  
  5405.  
  5406.                                        Page 94
  5407.  
  5408.  
  5409.  
  5410.           GAP Communications                                         CLACOM
  5411.  
  5412.  
  5413.           Control Keys and Extended Keys in Alphabetical Order:
  5414.  
  5415.             Alt-0       385     Alt-V        303      Ctrl-T             20
  5416.             Alt-1       376     Alt-W        273      Ctrl-U             21
  5417.             Alt-2       377     Alt-X        301      Ctrl-V             22
  5418.             Alt-3       378     Alt-Y        277      Ctrl-W             23
  5419.             Alt-4       379     Alt-Z        300      Ctrl-X             24
  5420.             Alt-5       380     Backspace      8      Ctrl-Y             25
  5421.             Alt-6       381     BackTab      271      Ctrl-Z             26
  5422.             Alt-7       382     Ctrl-A         1      CursorDown        336
  5423.             Alt-8       383     Ctrl-B         2      CursorLeft        331
  5424.             Alt-9       384     Ctrl-C         3      CursorRight       333
  5425.             Alt-A       286     Ctrl-CLeft   371      CursorUp          328
  5426.             Alt-B       304     Ctrl-CRight  372      Delete            339
  5427.             Alt-C       302     Ctrl-D         4      End               335
  5428.             Alt-D       288     Ctrl-E         5      Enter              13
  5429.             Alt-E       274     Ctrl-End     373      Escape             27
  5430.             Alt-Equal   387     Ctrl-F         6      F1                315
  5431.             Alt-F       289     Ctrl-F1      350      F10               324
  5432.             Alt-F1      360     Ctrl-F10     359      F2                316
  5433.             Alt-F10     369     Ctrl-F2      351      F3                317
  5434.             Alt-F2      361     Ctrl-F3      352      F4                318
  5435.             Alt-F3      362     Ctrl-F4      353      F5                319
  5436.             Alt-F4      363     Ctrl-F5      354      F6                320
  5437.             Alt-F5      364     Ctrl-F6      355      F7                321
  5438.             Alt-F6      365     Ctrl-F7      356      F8                322
  5439.             Alt-F7      366     Ctrl-F8      357      F9                323
  5440.             Alt-F8      367     Ctrl-F9      358      Home              327
  5441.             Alt-F9      368     Ctrl-G         7      Insert            338
  5442.             Alt-G       290     Ctrl-H         8      LineFeed           10
  5443.             Alt-H       291     Ctrl-Home    375      PgDn              337
  5444.             Alt-Hyphen  386     Ctrl-I         9      PgUp              329
  5445.             Alt-I       279     Ctrl-J        10      Shift-F1          340
  5446.             Alt-J       292     Ctrl-K        11      Shift-F10         349
  5447.             Alt-K       293     Ctrl-L        12      Shift-F2          341
  5448.             Alt-L       294     Ctrl-M        13      Shift-F3          342
  5449.             Alt-M       306     Ctrl-N        14      Shift-F4          343
  5450.             Alt-N       305     Ctrl-O        15      Shift-F5          344
  5451.             Alt-O       280     Ctrl-P        16      Shift-F6          345
  5452.             Alt-P       281     Ctrl-PgDn    374      Shift-F7          346
  5453.             Alt-Q       272     Ctrl-PgUp    388      Shift-F8          347
  5454.             Alt-R       275     Ctrl-PrtScr  370      Shift-F9          348
  5455.             Alt-S       287     Ctrl-Q        17      Tab                 9
  5456.             Alt-T       276     Ctrl-R        18                           
  5457.             Alt-U       278     Ctrl-S        19                           
  5458.  
  5459.  
  5460.  
  5461.  
  5462.  
  5463.  
  5464.                                        Page 95
  5465.  
  5466.  
  5467.  
  5468.           GAP Communications                                         CLACOM
  5469.  
  5470.  
  5471.           Appendix B
  5472.  
  5473.  
  5474.           Most  of   the  Null   Modem  connectors   and  cables  that  are
  5475.           commercially   available    are   wired    incorrectly.    Sounds
  5476.           unbelievable,  but   true.  They   are  wired  using  yesterday's
  5477.           technology.
  5478.  
  5479.           Modern day  modems are  intelligent devices.  They are capable of
  5480.           telling the  Host Computer when to stop sending data and are able
  5481.           to determine  when the  computer needs  to have  data sent  to it
  5482.           temporarily suspended.  This concept  is known  as Hardware  Flow
  5483.           Control (CTS/RTS checking).
  5484.  
  5485.           CLACOM was  written  with  Hardware  Flow  Control  in  mind.  No
  5486.           characters will be sent to the communications port if the port is
  5487.           unable to  accept new  characters. This prevents loss of data and
  5488.           insures a reliable connection.
  5489.  
  5490.           Most NULL  Modems are  wired with the CTS/RTS lines either always
  5491.           off or always on.
  5492.  
  5493.           If you  are hardwiring  computers together  via a NULL Modem, you
  5494.           will  probably   have  to  change  some  of  the  wiring  on  the
  5495.           connectors. You  can either  make your own NULL Modem or purchase
  5496.           one. If  you purchase  one, be  sure  that  you  can  remove  the
  5497.           connector shields to gain access to the wiring.
  5498.  
  5499.           The following diagram shows a properly wired NULL Modem:
  5500.  
  5501.  
  5502.  
  5503.  
  5504.                   SCREEN NOT AVAILABLE IN TEXT BASED DOCUMENTATION
  5505.                                  SEE PRINTED MANUAL
  5506.  
  5507.  
  5508.  
  5509.  
  5510.  
  5511.  
  5512.  
  5513.  
  5514.  
  5515.  
  5516.  
  5517.  
  5518.  
  5519.  
  5520.  
  5521.  
  5522.                                        Page 96
  5523.  
  5524.  
  5525.  
  5526.           GAP Communications                                         CLACOM
  5527.  
  5528.  
  5529.  
  5530.  
  5531.           Index
  5532.  
  5533.  
  5534.           Ansi driver    5, 21, 22, 29, 32, 59, 61, 62, 73
  5535.             Initializing 15, 32, 63
  5536.           ASCII File Transfers     31
  5537.           Asciidel  31
  5538.           ASK  57
  5539.           Base Address   11, 87
  5540.           Baud Rate 5, 48, 52, 65, 66, 87
  5541.           Capture   26, 83
  5542.           Channel   11, 12, 52, 53, 66
  5543.           Characters
  5544.             In Receive Buffer 72, 74
  5545.             Sending to com port    19, 32, 43
  5546.             Sending to local screen     19, 32, 61
  5547.           Characters Per Second
  5548.             Uploading & Downloading     23
  5549.           CkeyPress 32, 35
  5550.           Clarion
  5551.             ASK     57
  5552.             Color   63
  5553.             CSTRING 34, 44, 49, 53, 54, 62, 70, 80, 88, 89, 91
  5554.             Cursor  73
  5555.             Export File  8
  5556.             INSTRING     89
  5557.             KEYCODE 13, 57
  5558.             Overlays     8
  5559.             Protected Mode    8, 16
  5560.             Screen  73
  5561.             Screen Buffer     22, 58
  5562.             SHOW    63
  5563.             Strings 89
  5564.             TYPE    29
  5565.             Type Checking     34
  5566.           ClrBuf    32, 36
  5567.           Color     31, 63
  5568.           Combufsiz 31
  5569.           ComGetb   37
  5570.           ComGetc   21, 32, 38
  5571.           ComGetd   32, 39
  5572.           ComGets   32, 40
  5573.           Communications
  5574.             Base address 15, 87
  5575.             Baud rates   5, 15, 87
  5576.             Buffer  31
  5577.  
  5578.  
  5579.  
  5580.                                        Page 97
  5581.  
  5582.  
  5583.  
  5584.           GAP Communications                                         CLACOM
  5585.  
  5586.  
  5587.             Carrier 67
  5588.             CTS     31, 87
  5589.             DigiBoard    10, 15, 65, 75
  5590.             FIFO buffer  5, 15
  5591.               Disabling  31
  5592.             Initializing 15, 48, 52, 65, 66, 87
  5593.             Input   37, 38, 39, 40, 78
  5594.             Interface    10, 65, 75
  5595.             Interrupt    8, 15, 75
  5596.             IRQ     87
  5597.             nocts flag   87
  5598.             Output  42, 43, 44, 70
  5599.             Port    10, 15, 87
  5600.           ComPutb   32, 42
  5601.           ComPutc   22, 32, 43
  5602.           ComPuts   22, 32, 44
  5603.           CPS
  5604.             Uploading & Downloading     23
  5605.           Crash     8, 16, 75
  5606.           CRC  55, 56
  5607.           Crscur    31
  5608.           CSTRING   34, 44, 49, 53, 54, 62, 70, 80, 88, 89, 91
  5609.           Ctrl-Break handler  8, 76, 86
  5610.           CTS  31, 87
  5611.           Cursor    32, 45, 73
  5612.             Setting position of    31
  5613.           CursorOff 32, 45
  5614.           CursorOn  32, 45
  5615.           DclrTx    32, 46
  5616.           Delaying  90
  5617.           DgtTxfree 32, 47
  5618.           DigiBoard 10, 65, 75
  5619.             Channel 11, 12, 52, 53, 66
  5620.             Initializing Port 15, 48, 52, 66
  5621.             Resetting Modem   51
  5622.             Transmit Buffer   46
  5623.               Free Space 47
  5624.           Distribution files  6
  5625.           Dmodem    32, 48
  5626.           DownLoad  32, 49
  5627.           Downloading Files   23, 31, 49, 60
  5628.             Errors  49, 60
  5629.           Drestore  32, 51
  5630.           DsetUp    15, 32, 52
  5631.           Dtr  32, 54
  5632.           Errors
  5633.             Download     49, 60
  5634.             Exception    8
  5635.  
  5636.  
  5637.  
  5638.                                        Page 98
  5639.  
  5640.  
  5641.  
  5642.           GAP Communications                                         CLACOM
  5643.  
  5644.  
  5645.             Overrun, Parity   69
  5646.             Upload  80, 82
  5647.           Exception Error     8
  5648.           Export File    8
  5649.           FIFO buffer    5, 15
  5650.             Disabling    31
  5651.           File Transfer Statistics 23, 31
  5652.           Files
  5653.             Capture 26, 83
  5654.             Downloading  23, 31, 49, 60
  5655.             Uploading    23, 31, 80, 91
  5656.           Functions
  5657.             CkeyPress    35
  5658.             ClrBuf  36
  5659.             ComGetb 37
  5660.             ComGetc 21, 38
  5661.             ComGetd 39
  5662.             ComGets 40
  5663.             ComPutb 42
  5664.             ComPutc 22, 43
  5665.             ComPuts 22, 44
  5666.             CursorOff    45
  5667.             CursorOn     45
  5668.             DclrTx  46
  5669.             DgtTxfree    47
  5670.             Dmodem  48
  5671.             DownLoad     49
  5672.             Drestore     51
  5673.             DsetUp  15, 52
  5674.             Dtr     54
  5675.             GetCRC16     55
  5676.             GetCRC32     56
  5677.             GetKeyc 13, 57, 93
  5678.             GetScrn 58
  5679.             GetZmodem    60
  5680.             Gputc   21, 58, 61, 63
  5681.             Gputs   21, 58, 62, 63
  5682.             InitAnsi     15, 63
  5683.             InitPort     15, 65
  5684.             INSTRING     89
  5685.             Int14Set     15, 66
  5686.             Iscd    67
  5687.             IsRing  68
  5688.             LineStat     69
  5689.             ModemPuts    70
  5690.             ModemStat    71
  5691.             PeekChr 72
  5692.             PosCursor    73
  5693.  
  5694.  
  5695.  
  5696.                                        Page 99
  5697.  
  5698.  
  5699.  
  5700.           GAP Communications                                         CLACOM
  5701.  
  5702.  
  5703.             RecvCount    74
  5704.             ResetPort    75
  5705.             RestCbreak   76
  5706.             Rts     77
  5707.             Rxempty 78
  5708.             SendBreak    79
  5709.             SendZmodem   80
  5710.             SendZmodem1  81
  5711.             SetCapture   26, 83
  5712.             SetCaptureFile    26, 85
  5713.             SetCbreak    86
  5714.             SETPATH 60
  5715.             SetPort 15, 87
  5716.             SHOW    63
  5717.             SHUTDOWN     76
  5718.             StrHex  53, 88
  5719.             StrWord 89
  5720.             Timer   90
  5721.             UpLoad  91
  5722.           GetCRC16  32, 55
  5723.           GetCRC32  32, 56
  5724.           GetKeyc   13, 32, 57, 93
  5725.           GetScrn   32, 58
  5726.           GetZmodem 32, 60
  5727.           Global Variables    31
  5728.             asciidel     31
  5729.             combufsiz    31
  5730.             crscur  31
  5731.             gnormal 31
  5732.             meterchr     31
  5733.             noascmes     31
  5734.             nocts   31
  5735.             usefifo 31
  5736.           Gnormal   31
  5737.           Gputc     21, 32, 58, 61, 63
  5738.           Gputs     21, 32, 58, 62, 63
  5739.           Hardware Handshaking     31, 87
  5740.           InitAnsi  15, 32, 63
  5741.           Initializing
  5742.             ANSI driver  63
  5743.             Interrupt handlers     87
  5744.           InitPort  15, 32, 65
  5745.           Input
  5746.             From com port     19, 32, 37, 38, 39, 40, 78
  5747.             From local & remote    19, 35
  5748.             From local keyboard    13, 19, 32, 57, 93
  5749.           INSTRING  89
  5750.           Int14Set  15, 32, 66
  5751.  
  5752.  
  5753.  
  5754.                                       Page 100
  5755.  
  5756.  
  5757.  
  5758.           GAP Communications                                         CLACOM
  5759.  
  5760.  
  5761.           Interrupt handlers
  5762.             Communications    8, 15, 75
  5763.             Ctrl-Break   8, 76, 86
  5764.           IRQ  11, 87
  5765.           Iscd 32, 67
  5766.           IsRing    68
  5767.           Keyboard  13, 19, 35, 57, 93
  5768.             Clarion Key Codes 13, 57
  5769.           KEYCODE   13, 57
  5770.           Line Status Register     69
  5771.           LineStat  32, 69
  5772.           Lockup    8, 16, 75
  5773.           Meterchr  31
  5774.           Modem     51, 54, 65, 96
  5775.             Clearing buffer   79
  5776.             Sending strings to     70
  5777.           ModemPuts 32, 70
  5778.           ModemStat 32, 71
  5779.           Noascmes  31
  5780.           Nocts     31
  5781.           Nocts flag     87
  5782.           NULL Modem     87, 96
  5783.           Output
  5784.             To com port  19, 32, 42, 43, 44
  5785.             To local screen   19, 32, 61, 62
  5786.             To modem     70
  5787.           Overlays  8, 16
  5788.           Parity Error   69
  5789.           Pausing   90
  5790.           PeekChr   32, 72
  5791.           Phone
  5792.             Ringing 68
  5793.           Port 10, 15, 48, 65, 87
  5794.           PosCursor 32, 73
  5795.           Program
  5796.             Crashing     8, 16
  5797.           Progress Meter 31
  5798.           Protected Mode 8, 16
  5799.           Protocols 5, 23, 28, 30, 49, 60, 91
  5800.             External     28, 30
  5801.           Receive buffer 32, 35, 36, 38, 39, 78, 87
  5802.             Checking for a Character    72
  5803.             Number of characters in     74
  5804.             Setting size of   31
  5805.           Receiver Overrun    69
  5806.           RecvCount 32, 74
  5807.           RESETDIG.EXE   10, 12, 52, 53
  5808.           ResetPort 32, 75
  5809.  
  5810.  
  5811.  
  5812.                                       Page 101
  5813.  
  5814.  
  5815.  
  5816.           GAP Communications                                         CLACOM
  5817.  
  5818.  
  5819.           RestCbreak     32, 76
  5820.           Ring 68
  5821.           Rts  32, 77, 87
  5822.           Rxempty   32, 78
  5823.           Scan codes     57
  5824.           Screen    32, 58, 61, 62, 63, 73
  5825.             Clearing     61
  5826.             Color   63
  5827.             Columns 63
  5828.             Cursor  31, 45
  5829.             Output  19
  5830.             Rows    63
  5831.           Screen Buffer  22, 58
  5832.           Scroll Back Buffer  26, 83
  5833.           SendBreak 32, 79
  5834.           SendZmodem     32, 80
  5835.           SendZmodem1    32, 81
  5836.           SetCapture     26, 32, 83
  5837.           SetCaptureFile 26, 32, 85
  5838.           SetCbreak 32, 86
  5839.           SETPATH   60
  5840.           SetPort   15, 32, 87
  5841.           SHOW 63
  5842.           SHUTDOWN  76
  5843.           Standard Interface  10, 15, 65, 75, 87
  5844.           Statistics
  5845.             File Transfer     23, 31
  5846.           StrHex    33, 53, 88
  5847.           Strings   89
  5848.             Hexadecimal  53
  5849.             INSTRING     89
  5850.             Receiving    37, 40
  5851.             Sending to com port    32, 44, 70
  5852.             Sending to local screen     32, 62
  5853.             Sub string   89
  5854.           StrWord   33, 89
  5855.           Timer     33, 90
  5856.           Transfer Window     23
  5857.           Transmit Buffer     32, 46
  5858.             Free Space   47
  5859.           TYPE 29
  5860.           UpLoad    33, 91
  5861.           Uploading Files     23, 31, 80, 91
  5862.             Errors  80, 82
  5863.           Usefifo   31
  5864.           Variables
  5865.             Global  31
  5866.           Video Memory   16, 58
  5867.  
  5868.  
  5869.  
  5870.                                       Page 102
  5871.  
  5872.  
  5873.  
  5874.           GAP Communications                                         CLACOM
  5875.  
  5876.  
  5877.           Xmodem    5, 23, 32, 33, 49, 50, 91
  5878.           XTRACE    8, 16
  5879.           Ymodem    5, 23, 32, 33, 49, 50, 91
  5880.           Zmodem    5, 23, 60, 80
  5881.  
  5882.  
  5883.  
  5884.  
  5885.  
  5886.  
  5887.  
  5888.  
  5889.  
  5890.  
  5891.  
  5892.  
  5893.  
  5894.  
  5895.  
  5896.  
  5897.  
  5898.  
  5899.  
  5900.  
  5901.  
  5902.  
  5903.  
  5904.  
  5905.  
  5906.  
  5907.  
  5908.  
  5909.  
  5910.  
  5911.  
  5912.  
  5913.  
  5914.  
  5915.  
  5916.  
  5917.  
  5918.  
  5919.  
  5920.  
  5921.  
  5922.  
  5923.  
  5924.  
  5925.  
  5926.  
  5927.  
  5928.                                       Page 103
  5929.