home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_PAS / MGCOMTP0.ZIP / MG_ENG.DOC next >
Text File  |  1980-01-01  |  32KB  |  986 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.                 /                   MGCOMTP v0.9b                    /  /
  27.               /           Copyright 1994 by Mark Gauthier.         /   /
  28.             /                                                    /    /
  29.           /                                                     /    /
  30.         /                                                     /    /
  31.       /                                                     /     /
  32.     ┌──────────────────────────────────────────────────────┐     /
  33.     │                                                      │    /
  34.     │       HS    AA    CD   OH   RD   SD   TR   MR        │  /
  35.     │                                                      │/
  36.     └──────────────────────────────────────────────────────┘
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.      C O M U N I C A T I O N  F U N C T I O N S  &  P R O C E D U R E S
  51.  
  52.  
  53.          WHAT IS MGCOMTP
  54.          ───────────────
  55.  
  56.               It a unit for TURBO PASCAL that content many procedures and
  57.          functions to access comport.  It is possible to access up to
  58.          eight ports simultaneously and these ports can be open via a
  59.          fossil driver or an interrupt that use 8250 registers.
  60.  
  61.  
  62.          IMPORTANT
  63.          ─────────
  64.  
  65.               This software is SHAREWARE so, i don't guaranty anything
  66.          except it will take space on your disk.  You are responsible
  67.          of any damage that could, append during execution of this
  68.          program.
  69.  
  70.  
  71.          REQUIREMENT
  72.          ───────────
  73.  
  74.               TURBO PASCAL VERSION 5.5,  6,  7, or BORLAND PASCAL 7.0
  75.               You must rename coresponding file to .TPU.
  76.  
  77.               MGCOMTP0.TP5 -> MGCOMTP0.TPU  ( TP 5.5                   )
  78.               MGCOMTP0.TP6 -> MGCOMTP0.TPU  ( TP 6.0                   )
  79.               MGCOMTP0.TP7 -> MGCOMTP0.TPU  ( TP 7.0, BP 7.0 Real Mode )
  80.               MGCOMTP0.TPP ->               ( BP 7.0 Protected mode    )
  81.  
  82.  
  83.          REGISTERED
  84.          ──────────
  85.  
  86.               If you plan to use this software, please complete
  87.          the information sheet at the bottom of this document.
  88.  
  89.  
  90.  
  91.  
  92.          HOW TO CONTACT AUTHOR
  93.          ─────────────────────
  94.  
  95.          By electronics mail on any system:
  96.  
  97.                 FIDONET
  98.                 Mark Gauthier ─> 1:242/818.5
  99.  
  100.                 FRANCOMEDIA
  101.                 Mark Gauthier ─> 101:160/305.5
  102.  
  103.                 or by mail.
  104.  
  105.                                 MGCOM / MARK GAUTHIER
  106.                                 58  Émilien─FRÉNETTE, Sainte─THÉRESE.
  107.                                 QUÉBEC, CANADA
  108.                                 J7E 5K3 
  109.  
  110.  
  111. FUNCTION        OPENCOM
  112. ──────────────────────────────────────────────────────────────────────────
  113.  
  114.  
  115.         SYNTAX:   OpenCom(ComPort:Byte; C: Connect_Type): Boolean;
  116.  
  117.         DESCRIPTION: 
  118.  
  119.              Open a comport whit or whitout a FOSSIL driver.
  120.              Case type of connection is PORTS, then this function
  121.              reserve buffers of transmission and install an interrupt.
  122.  
  123.         PARAMETERS:
  124.  
  125.              comport; a number from 1─8, port to open.
  126.  
  127.              C; How to open port via fossil = FOSSIL, whitout = PORTS.
  128.  
  129.         EXEMPLE: 
  130.  
  131.              BEGIN
  132.                   IF NOT OpenCom(1, Fossil) THEN Halt;
  133.                   {  Open whit fossil COM1  }
  134.              END. 
  135.  
  136.              BEGIN
  137.                   IF NOT OpenCom(1, Ports) THEN Halt;
  138.                   {  Open whitout fossil COM1  }
  139.              END. 
  140.  
  141.  
  142. PROCEDURE       CLOSECOM
  143. ──────────────────────────────────────────────────────────────────────────
  144.  
  145.         SYNTAX:   CloseCom(ComPort:Byte);
  146.  
  147.  
  148.         DESCRIPTION: 
  149.  
  150.              Close a comport that was previously open via function
  151.              OpenCom.  If com was open whitout fossil, interrupt driver is
  152.              uninstall and buffers are clears.  DTR is leave high.
  153.  
  154.         PARAMETERS:
  155.  
  156.              comport; a number from 1─8, port number to close.
  157.  
  158.         EXAMPLE: 
  159.  
  160.              BEGIN
  161.                   IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1  }
  162.                   CloseCom(1);                         { CLOSE COM1 }
  163.              END. 
  164.  
  165.  
  166. PROCEDURE       CLOSEALLCOMS
  167. ──────────────────────────────────────────────────────────────────────────
  168.  
  169.         SYNTAX:   CloseAllComs;
  170.  
  171.  
  172.         DESCRIPTION: 
  173.  
  174.              Procedure that made exactly the same thing than CloseCom,
  175.              except this one close all com currently open via function
  176.              OpenCom.
  177.  
  178.         PARAMETERS:
  179.  
  180.              Nothing;
  181.  
  182.         EXAMPLE: 
  183.  
  184.              BEGIN
  185.                   IF NOT OpenCom(1, Fossil) THEN Halt; { Open COM1   }
  186.                   IF NOT OpenCom(2, Fossil) THEN Halt; { Open COM2   }
  187.                   CloseAllComs;                        { Close COM's }
  188.              END. 
  189.  
  190. PROCEDURE       HANGUP
  191. ──────────────────────────────────────────────────────────────────────────
  192.  
  193.         SYNTAX:   HangUp;
  194.  
  195.  
  196.         DESCRIPTION: 
  197.  
  198.              Procedure that drop line using DTR.  It leave DTR low for
  199.              some 1/1000sec, and return whit DTR high.  Another way to do
  200.              this is to send "+++" wait a bit, and send ATH+#13.
  201.  
  202.         PARAMETERS:
  203.  
  204.              Nothing;
  205.  
  206.         EXEMPLE: 
  207.  
  208.              BEGIN
  209.                   IF NOT OpenCom(1, Fossil) Then;  { OPEN COM1        }
  210.                   {   }                            { Any code.        }
  211.                   HangUp;                          { Dropping the line }
  212.                   CloseAllComs;                    { Close all com's. }
  213.              END. 
  214.  
  215. FUNCTION        CHECKCD
  216. ──────────────────────────────────────────────────────────────────────────
  217.  
  218.         SYNTAX:   CheckCD(ComPort:Byte): Boolean;
  219.  
  220.  
  221.         DESCRIPTION: 
  222.  
  223.              Function that verify the status of CARRIER DETECT that
  224.              itself specify if line is up or down.  If CARRIER DETECT is
  225.              on this function will return TRUE else it return FALSE.
  226.  
  227.         PARAMETERS:
  228.  
  229.              comport; a number from 1─8, com number to check.
  230.  
  231.         EXEMPLE: 
  232.  
  233.              CONST ESC = 27; 
  234.              VAR Ch:Char; 
  235.              BEGIN
  236.                   IF NOT OpenCom(1, Fossil) THEN Halt; { Open COM1        }
  237.                   REPEAT
  238.                         Ch:=ReadKey;                   { Enter character }
  239.                         Write(Ch);                     { Writing          }
  240.                         IF NOT CheckCD(1) THEN         { Check CD value.  }
  241.                         Write('line cut.  ');          { CD is OFF        }
  242.                   UNTIL Ch=Esc;                        { While <> ESC     }
  243.              END. 
  244.  
  245. PROCEDURE       SETDTR
  246. ──────────────────────────────────────────────────────────────────────────
  247.  
  248.         SYNTAX:   SetDTR(ComPort:Byte; S:Boolean);
  249.  
  250.  
  251.         DESCRIPTION: 
  252.  
  253.              Procedure that set the status of DTR.  If S = TRUE then
  254.              DTR is set high, else dtr is set to low.
  255.   
  256.         PARAMETERS:
  257.  
  258.              comport; a number from 1─8, comport number to set dtr.
  259.              S; specify if a DTR must be low or high.
  260.  
  261.         EXEMPLE: 
  262.        
  263.              USES Crt; 
  264.              BEGIN
  265.                   IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1       }
  266.                   SetDTR(1, TRUE);                     { DTR (COM1) High }
  267.                   SetDTR(1, FALSE);                    { DTR (COM1) Low  }
  268.              END. 
  269.  
  270. PROCEDURE       PURGEINPUT
  271. ──────────────────────────────────────────────────────────────────────────
  272.  
  273.         SYNTAX:   PurgeInput(ComPort:Byte);
  274.  
  275.  
  276.         DESCRIPTION: 
  277.          
  278.              Procedure use to destroyed all waiting data in the input
  279.              Buffer.
  280.  
  281.         PARAMETERS:
  282.  
  283.              comport; a number from 1─8, com number where you drop data.
  284.  
  285.         EXEMPLE: 
  286.  
  287.              BEGIN
  288.                   IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1          }    }
  289.                   PurgeInput(1);                       { PURGE INPUT BUFFER }
  290.              END. 
  291.  
  292. PROCEDURE       PURGEOUTPUT
  293. ──────────────────────────────────────────────────────────────────────────
  294.  
  295.         SYNTAX:   PurgeOutput(ComPort:Byte);
  296.  
  297.  
  298.         DESCRIPTION: 
  299.        
  300.              This procedure is similar to Purge Input, except that
  301.              output buffer is clear.
  302.   
  303.         PARAMETERS:
  304.  
  305.              comport; a number from 1─8, com number to clear OutBuf.
  306.               
  307.         EXEMPLE: 
  308.                                   
  309.              BEGIN
  310.                   IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1           }
  311.                   PurgeOutput(1);                      { PURGE OUTPUT BUFFER }
  312.              END. 
  313.  
  314. PROCEDURE       FLUSHOUTPUT
  315. ──────────────────────────────────────────────────────────────────────────
  316.  
  317.         SYNTAX:   FlushOutPut(ComPort:Byte);
  318.  
  319.         DESCRIPTION:
  320.        
  321.              This procedure wait until all characters in output buffer
  322.              are send before returning.
  323.  
  324.   
  325.         EXEMPLE: 
  326.  
  327.              BEGIN
  328.                   IF NOT OpenCom(1 Fossil) THEN Halt; { OUVERTURE cause COM      } 
  329.                   FlushOutput(1);                     { FLUSH "OUTPUT" (COM1) } 
  330.              END. 
  331.  
  332. FUNCTION        READCH
  333. ──────────────────────────────────────────────────────────────────────────
  334.  
  335.         SYNTAX:    ReadCh(ComPort:Byte): Char;
  336.  
  337.  
  338.         DESCRIPTION: 
  339.  
  340.              Function that verify if a character is waiting in the
  341.              input buffer.  If no character is available, the result return
  342.              is #0.  If a characters is available then the result is the
  343.              character number.
  344.   
  345.         PARAMETERS:
  346.  
  347.              comport; a number from 1─8, com number to scan.
  348.          
  349.         EXEMPLE: 
  350.  
  351.              VAR Ch:Char; 
  352.              BEGIN
  353.                   IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1          }
  354.                   REPEAT
  355.                         Ch:=ReadCh(1);                 { SCAN COM1          }
  356.                   UNTIL CH <> #0;                      { if a character is }
  357.              END.                                      { received then EXIT.}   }
  358.  
  359. FUNCTION        READCHW
  360. ──────────────────────────────────────────────────────────────────────────
  361.  
  362.         SYNTAX:    ReadChW(ComPort:Byte): Char;
  363.  
  364.  
  365.         DESCRIPTION: 
  366.  
  367.              Function similar to ReacCh, except this one return only
  368.              when character is available.
  369.   
  370.         PARAMETERS:
  371.  
  372.              comport; a number from 1─8, com number to scan.
  373.          
  374.         EXEMPLE: 
  375.  
  376.              VAR Ch:Char; 
  377.              BEGIN
  378.                   IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
  379.                   Ch:=ReadChW(1);                      { SCAN COM1 }
  380.              END. 
  381.  
  382. FUNCTION        MULTIRECVCH
  383. ──────────────────────────────────────────────────────────────────────────
  384.  
  385.         SYNTAX:    MultiRecvCh(VAR ComPorts: Byte): Char;
  386.  
  387.  
  388.         DESCRIPTION: 
  389.  
  390.              Function that return a character from one of the
  391.              specify COM in parameter Comports.  If all port specify by
  392.              Comports as been scan and no character is available then
  393.              result is #0.  If one character as been pick─up, then
  394.              result contain the character number and comports, contain
  395.              the com number where the character as been pick─up.
  396.   
  397.         PARAMETERS:
  398.  
  399.              comports;  hold port number's to be scan.
  400.  
  401.                         7 6 5 4 3 2 1 0       (Bits)
  402.                         │ │ │ │ │ │ │ └> COM1
  403.                         │ │ │ │ │ │ └──> COM2
  404.                         │ │ │ │ │ └────> COM3
  405.                         │ │ │ │ └──────> COM4
  406.                         │ │ │ └────────> COM5
  407.                         │ │ └──────────> COM6
  408.                         │ └────────────> COM7
  409.                         └──────────────> COM8
  410.  
  411.         EXEMPLE: 
  412.  
  413.              VAR ComPorts:Byte; 
  414.                  Ch:Char; 
  415.              BEGIN
  416.                   IF NOT OpenCom(1, Fossil) THEN Halt; { Open COM1        }
  417.                   IF NOT OpenCom(3, Fossil) THEN Halt; { Open COM3        }
  418.                   ComPorts:=1+4;                       { Com1+Com3        }
  419.                   REPEAT
  420.                         Ch:=MultiRecvCh(ComPorts);     { SCAN COM1 & COM3 }
  421.                   UNTIL CH <> #0;                      { while than <> #0 }
  422.              END. 
  423.  
  424. FUNCTION        MULTIRECVCHW
  425. ──────────────────────────────────────────────────────────────────────────
  426.  
  427.         SYNTAX:    MultiRecvChW(VAR ComPorts: Byte): Char;
  428.  
  429.  
  430.         DESCRIPTION: 
  431.  
  432.              Function similar to MultiRecvCh, except, this one will
  433.              not return until a character is available.
  434.  
  435.   
  436.         PARAMETERS:
  437.  
  438.              comports;  hold port number's to be scan.
  439.  
  440.                         7 6 5 4 3 2 1 0       (Bits) 
  441.                         │ │ │ │ │ │ │ └> COM1
  442.                         │ │ │ │ │ │ └──> COM2
  443.                         │ │ │ │ │ └────> COM3
  444.                         │ │ │ │ └──────> COM4
  445.                         │ │ │ └────────> COM5
  446.                         │ │ └──────────> COM6
  447.                         │ └────────────> COM7
  448.                         └──────────────> COM8
  449.         EXEMPLE: 
  450.  
  451.              VAR ComPorts:Byte; 
  452.                  Ch:Char; 
  453.              BEGIN
  454.                   IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1        }
  455.                   IF NOT OpenCom(3, Fossil) THEN Halt; { OPEN COM3        }
  456.                   ComPorts:=1+4;                       { Com1+Com3        }
  457.                   Ch:=MultiRecvChW(ComPorts);          { SCAN COM1 & COM3 }
  458.              END. 
  459.  
  460. FUNCTION        READBLOCK
  461. ──────────────────────────────────────────────────────────────────────────
  462.  
  463.         SYNTAX:    ReadBlock(ComPort:Byte; BufPtr: Pointer;
  464.                               MaxRead:Word): Word; 
  465.  
  466.  
  467.         DESCRIPTION: 
  468.  
  469.              Function that transfer a specify number of bytes from input
  470.              buffer to a user buffer.  The result of the function indicate
  471.              the number of bytes transfer.
  472.   
  473.         PARAMETERS:
  474.  
  475.              comport; a number from 1─8, com buffer number to be scan.
  476.  
  477.              BufPtr;  Pointer, that point your buffer (user buffer).
  478.                                                                       
  479.              MaxRead; Maximum number of characters to transfert usualy this
  480.                       is your buffer size.
  481.  
  482.         EXEMPLE: 
  483.  
  484.              VAR BytesRead:Word; 
  485.                  BUF : Array[1  10] OF Char; 
  486.              BEGIN
  487.                   IF NOT OpenCom(1, Fossil) THEN Halt;            { Open COM1 }
  488.                   BytesRead:=ReadBlock(1,Addr(Buf[1]),Size(Buf)); { READ Buf  }
  489.              END. 
  490.  
  491. FUNCTION        WRITECH
  492. ──────────────────────────────────────────────────────────────────────────
  493.  
  494.         SYNTAX:    WriteCh(ComPort:Byte; Ch:Char): Boolean;
  495.  
  496.  
  497.         DESCRIPTION: 
  498.  
  499.              Function that send a character, return true is the
  500.              character as been accept and put in output buffer else
  501.              return false.
  502.   
  503.         PARAMETERS:
  504.  
  505.              comport; a number from 1─8, com number to send ch.
  506.  
  507.              Ch;      character to send.
  508.  
  509.         EXEMPLE: 
  510.  
  511.              BEGIN
  512.                    IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1        }
  513.                    IF NOT WriteCh(1, '!') THEN          { SEND character  }
  514.                    Write('a "buffer" is full.'); 
  515.              END. 
  516.  
  517. PROCEDURE       WRITECHW
  518. ──────────────────────────────────────────────────────────────────────────
  519.  
  520.         SYNTAX:   WriteChW(ComPort:Byte; Ch:Char);
  521.  
  522.  
  523.         DESCRIPTION: 
  524.  
  525.              Procedure similar to WriteCh, except this one will not
  526.              return until it find a place in output buffer for your
  527.              character.
  528.   
  529.         PARAMETERS:
  530.  
  531.              ComPort; a number from 1─8, com number to send character.
  532.  
  533.              Ch;      character to send.
  534.  
  535.         EXEMPLE: 
  536.  
  537.              BEGIN
  538.                    IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1        }
  539.                    WriteChW(1, '!')                     { SEND character  }
  540.              END. 
  541.  
  542. PROCEDURE       WRITESTRW
  543. ──────────────────────────────────────────────────────────────────────────
  544.  
  545.         SYNTAX:   WriteStrW(ComPort:Byte; S:String);
  546.  
  547.  
  548.         DESCRIPTION: 
  549.  
  550.              Procedure that send a string.  Procedure will not return
  551.              until all character of the string as been send.
  552.   
  553.         PARAMETERS:
  554.  
  555.              ComPort; a number from 1─8, com number to send string.
  556.  
  557.              S;       String of character.
  558.  
  559.         EXEMPLE: 
  560.  
  561.              BEGIN
  562.                    IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1   }
  563.                    WriteStrW(1, 'Hello!!!')             { SEND STRING }
  564.              END. 
  565.  
  566. PROCEDURE       WRITESTRLNW
  567. ──────────────────────────────────────────────────────────────────────────
  568.  
  569.         SYNTAX:   WriteStrLnW(ComPort:Byte; S:String);
  570.  
  571.  
  572.         DESCRIPTION: 
  573.  
  574.              Procedure similar to WriteStrW, except this one
  575.              add linefeed and Carriage Return code to the end of your
  576.              string.
  577.  
  578.         PARAMETERS:
  579.  
  580.              comport; a number from 1─8, com number to send string.
  581.  
  582.              S;       a string of character.
  583.  
  584.         EXEMPLE: 
  585.  
  586.              BEGIN
  587.                    IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1   }
  588.                    WriteStrLnW(1, 'Hello!!!')           { SEND STRING }
  589.              END. 
  590.  
  591. PROCEDURE       WRITESTRDELAY
  592. ──────────────────────────────────────────────────────────────────────────
  593.  
  594.         SYNTAX:   WriteStrDelay(ComPort:Byte; S:String; x: Word);
  595.  
  596.  
  597.         DESCRIPTION: 
  598.  
  599.              Procedure that send a string of character, and take a pause
  600.              of X 1/1000sec between each character.  This procedure
  601.              do not return until all character of the string as been send.
  602.   
  603.         PARAMETERS:
  604.  
  605.              comport; a number from 1─8, com number to send string.
  606.  
  607.              S;       a string of character.
  608.  
  609.              X;       number of 1/1000sec between each sends.
  610.  
  611.         EXEMPLE: 
  612.  
  613.              BEGIN
  614.                    IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1   }
  615.                    WriteStrDelay(1, 'Hello!!!', 55)     { SEND STRING }
  616.              END. 
  617.  
  618. PROCEDURE       WRITESTRLNDELAY
  619. ──────────────────────────────────────────────────────────────────────────
  620.  
  621.         SYNTAX:   WriteStrLnDelay(ComPort: Byte; S:String; x: Word);
  622.  
  623.  
  624.         DESCRIPTION: 
  625.  
  626.              Procedure similar to WriteStrDelay, except this one
  627.              add linefeed and Carriage Return to your string.
  628.  
  629.         PARAMETERS:
  630.  
  631.              comport; a number from 1─8, com number to send string.
  632.  
  633.              S;       a string of character.
  634.  
  635.              X;       number of 1/1000sec to wait between each sends.
  636.  
  637.         EXEMPLE: 
  638.  
  639.              BEGIN
  640.                    IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1   }
  641.                    WriteStrLnDelay(1, 'Hello!!!', 55)   { SEND STRING }
  642.              END. 
  643.  
  644. FUNCTION        WRITEBLOCK
  645. ──────────────────────────────────────────────────────────────────────────
  646.  
  647.         SYNTAX:    WriteBlock(ComPort:Byte; BufPtr:Pointer;
  648.                                MaxSend:Word): Word; 
  649.  
  650.  
  651.         DESCRIPTION: 
  652.  
  653.              Function that transfer data from user buffer, to output
  654.              buffer.  The function result content the number of byte
  655.              transfer.
  656.  
  657.         PARAMETERS:
  658.  
  659.              comport; a number from 1─8, com buffer number to transfer.
  660.  
  661.              BufPtr;  Pointer, that point on user buffer.
  662.  
  663.              MaxSend; Maximum number of characters to transfer usually,
  664.                       the size of user buffer.
  665.  
  666.         EXEMPLE: 
  667.  
  668.              CONST Buf:Array[1  5] OF CHAR = ('1' '2' '3' '4' '5'); 
  669.                    x:Word; 
  670.              BEGIN
  671.                    IF NOT OpenCom(1, Fossil) THEN Halt;    { OPEN COM1  }
  672.                    x:=WriteBlock(1, Addr(Buf[1]), SizeOf(Buf));
  673.                    { TRANSFERE BUFFER.                                  }
  674.                    { X = a number of characters accept.                 }
  675.              END. 
  676.  
  677. PROCEDURE       MULTISENDCHW
  678. ──────────────────────────────────────────────────────────────────────────
  679.  
  680.         SYNTAX:   MultiSendChW(var ComPorts: Byte; ch:Char);
  681.  
  682.  
  683.         DESCRIPTION: 
  684.  
  685.              Procedure that send a character in all com specify in
  686.              parameter Comports.  It will not return until all com
  687.              accept the character.
  688.   
  689.         PARAMETERS:
  690.  
  691.              comports;  hold port's number to use.
  692.  
  693.                         7 6 5 4 3 2 1 0       (Bits) 
  694.                         │ │ │ │ │ │ │ └> COM1
  695.                         │ │ │ │ │ │ └──> COM2
  696.                         │ │ │ │ │ └────> COM3
  697.                         │ │ │ │ └──────> COM4
  698.                         │ │ │ └────────> COM5
  699.                         │ │ └──────────> COM6
  700.                         │ └────────────> COM7
  701.                         └──────────────> COM8
  702.  
  703.              Ch;        Character to be send.
  704.  
  705.         EXEMPLE: 
  706.  
  707.              VAR ComPorts:Byte; 
  708.                  Ch:Char; 
  709.              BEGIN
  710.                   IF NOT OpenCom(1, Fossil) THEN Halt; { Open a COM1         }
  711.                   IF NOT OpenCom(3, Fossil) THEN Halt; { Open a COM3         }
  712.                   ComPorts:=1+4;                       { Com1+Com3           }
  713.                   Ch:=#27; 
  714.                   MultiSendChW(ComPorts,Ch);           { Send in COM1 & COM3 }
  715.              END. 
  716.  
  717. FUNCTION        MULTISENDCH
  718. ──────────────────────────────────────────────────────────────────────────
  719.  
  720.         SYNTAX:    MultiSendCh(ComPorts: Byte; ch:Char): Byte;
  721.  
  722.  
  723.         DESCRIPTION: 
  724.  
  725.              Function similar a la procedure MultiSendChW, except
  726.              this one will not wait to send the character in all com.
  727.              The function result hold which com have accept the character.
  728.   
  729.         PARAMETERS:
  730.  
  731.              comports;  hold port's number to use.
  732.  
  733.                         7 6 5 4 3 2 1 0       (Bits) 
  734.                         │ │ │ │ │ │ │ └> COM1
  735.                         │ │ │ │ │ │ └──> COM2
  736.                         │ │ │ │ │ └────> COM3
  737.                         │ │ │ │ └──────> COM4
  738.                         │ │ │ └────────> COM5
  739.                         │ │ └──────────> COM6
  740.                         │ └────────────> COM7
  741.                         └──────────────> COM8
  742.  
  743.              Ch;        Character to be send.
  744.  
  745.         EXEMPLE: 
  746.  
  747.              VAR ComPorts:Byte; 
  748.                  Ch:Char; 
  749.                  Accept:Byte; 
  750.              BEGIN
  751.                   IF NOT OpenCom(1, Fossil) THEN Halt; { Open COM1       }
  752.                   IF NOT OpenCom(3, Fossil) THEN Halt; { Open COM3       }
  753.                   ComPorts:=1+4;                       { Com1+Com3       }
  754.                   Ch:=#27; 
  755.                   Accept:=MultiSendCh(ComPorts,Ch);    { Send Ch all COM }
  756.                   If Accept and 1 = 1 Then Write('Com1 Accept ch');
  757.                   If Accept and 4 = 4 Then Write('Com3 Accept ch');
  758.              END.
  759.  
  760. PROCEDURE       SETHANDSHAKE
  761. ──────────────────────────────────────────────────────────────────────────
  762.  
  763.         SYNTAX:   SetHandShake(ComPort:Byte; HARD, Soft: Boolean);
  764.  
  765.  
  766.         DESCRIPTION: 
  767.  
  768.               Procedure that change the verification of transmit mode.
  769.               if HARD is TRUE, then RTS/CTS mode is active.  If
  770.               SOFT is TRUE then Xon/Xoff mode is active.  If they are
  771.               FALSE they are desactived.
  772.   
  773.         PARAMETERS:
  774.  
  775.               comport; a number from 1─8, com number to set.
  776.  
  777.               Hard;    Status of RTS/CTS mode.
  778.  
  779.               Soft;    Status of XON/XOFF mode.
  780.  
  781.         EXEMPLE: 
  782.  
  783.               BEGIN
  784.                    IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1           }
  785.                    SetHandShake(1,TRUE,TRUE);           { COM1 <─RTS/CTS ON   }
  786.                                                         { COM1 <─Xon/XOFF ON  }
  787.               END. 
  788.  
  789. PROCEDURE       SETPARAMS
  790. ──────────────────────────────────────────────────────────────────────────
  791.  
  792.         SYNTAX:  SetParams(ComPort:Byte; Baud:LongInt; WordSize:Byte;
  793.                             Parity:Char; StopBits:Byte); 
  794.  
  795.  
  796.         DESCRIPTION: 
  797.  
  798.               Modify communication parameters for a comport.
  799.   
  800.         PARAMETERS:
  801.  
  802.               comport; a number from 1─8, com number to modify.
  803.  
  804.               Baud;    Transmission speed.
  805.                        if : PORT ─> (300─115200) : FOSSIL ─> (300─38400)
  806.  
  807.               Word Size; from 5─8.
  808.  
  809.               Parity;   'N' ─> NONE,
  810.                         'O' ─> ODD,
  811.                         'E' ─> EVEN.
  812.  
  813.         EXEMPLE: 
  814.  
  815.               BEGIN
  816.                    IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1   }
  817.                    SetParams(1,2400,8,'N',1);           { MODIFY COM1 }
  818.               END. 
  819.  
  820. PROCEDURE       SETCOMHARDWARE
  821. ──────────────────────────────────────────────────────────────────────────
  822.  
  823.         SYNTAX:   SetComHardWare(ComPort:Byte; COMADDR, ComIntr: Word);
  824.  
  825.  
  826.         DESCRIPTION: 
  827.  
  828.               Modify hardware setting for a comport.  This procedure
  829.               do nothing on comport open whit fossil.  You will need to
  830.               use type ports to open special comport address or interrupt.
  831.   
  832.         PARAMETERS:
  833.  
  834.               comport; a number from 1─8, com number to set.
  835.  
  836.               ComAddr; HARDWARE address of this port.
  837.  
  838.               ComIntr; INTERRUPT to use for this port.
  839.  
  840.  
  841.         EXEMPLE: 
  842.  
  843.               { STANDART for COM1 is ADDR = $3F8 and INTR = 4 }
  844.  
  845.               BEGIN
  846.  
  847.                    { Exemple of NON STANDARD ─> COM1 = $3F8 and INTR = 3 }
  848.  
  849.                    IF NOT OpenCom(1, Ports) THEN Halt; { OPEN COM1       }
  850.                    SetComHardWare(1,$3F8,3);           { MODIFY COM1     }
  851.               END. 
  852.  
  853. FUNCTION        GETFOSSILNAME
  854. ──────────────────────────────────────────────────────────────────────────
  855.  
  856.         SYNTAX:    GETFOSSILNAME (ComPort:Byte; Var ID: String): Boolean;
  857.  
  858.  
  859.         DESCRIPTION: 
  860.  
  861.               Function that return the fossil driver name for a specify
  862.               port.  If this function return false the port specify is not
  863.               open whit a fossil driver so ID is unpredictable.  If the return
  864.               value is TRUE ID contain the fossil driver name.
  865.  
  866.         PARAMETERS:
  867.  
  868.               comport; a number from 1─8, com number to get info.
  869.  
  870.               ID;      Contain the fossil driver name.
  871.  
  872.         EXEMPLE: 
  873.  
  874.               VAR Name:String;
  875.               BEGIN
  876.                    IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1     }
  877.                    GetFossilName(1, Name);              { Recover name. }
  878.               END. 
  879.  
  880. FUNCTION        GETSTATUS
  881. ──────────────────────────────────────────────────────────────────────────
  882.  
  883.         SYNTAX:    GetStatus(ComPort:Byte): Word;
  884.  
  885.  
  886.         DESCRIPTION: 
  887.  
  888.               Function that return status for an open port.  Status
  889.               is different between Fossil and ports.
  890.  
  891.               if COMPORT was open whit FOSSIL:
  892.  
  893.               14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (Bits) 
  894.                │  │          │ │ │
  895.                │  │          │ │ └───────────────> "CARRIER Detect"
  896.                │  │          │ └─────────────────> character available.
  897.                │  │          └───────────────────> input buffer overflow
  898.                │  │
  899.                │  │
  900.                │  └──────────────────────────────> space in output buffer
  901.                └─────────────────────────────────> output buffer empty
  902.  
  903.  
  904.               if COMPORT was open whit PORTS:
  905.  
  906.               7 6 5 4 3 2 1 0 (Bits) 
  907.               │ │ │ │ │ │ │ └──> input buffer empty.
  908.               │ │ │ │ │ │ └────> input buffer full.
  909.               │ │ │ │ │ └──────> output buffer empty.
  910.               │ │ │ │ └────────> output buffer full.
  911.               │ │ │ └──────────> input buffer overflow.
  912.               │ │ └────────────> output buffer overflow.
  913.               │ └──────────────> RTS/CTS.
  914.               └────────────────> Xon/XOFF.
  915.  
  916.         PARAMETERS:
  917.  
  918.               comport; a number from 1─8, com number to get info.
  919.  
  920.         EXEMPLE: 
  921.  
  922.               VAR Info:Word; 
  923.               BEGIN
  924.                    IF NOT OpenCom(1 Fossil) THEN Halt;  { OPEN COM1       }
  925.                    Info:=GetStatus(1);                  { Recover STATUS  }
  926.                    IF INFO AND 256 = 256 Then;  { character available ?  }
  927.               END. 
  928.  
  929.                       REGISTERED INFO for MGCOM_TP v0 9
  930.                       ───────────────────────────────
  931.  
  932.  
  933. Last name     :  ______________________________
  934.  
  935. First name    :  ______________________________
  936.  
  937. Address       :  ____________________________________________
  938.  
  939. City          :  ________________________
  940.  
  941. State         :  ____________________
  942.  
  943. Country       :  _________________
  944.  
  945. ZIP           :  _________________
  946.  
  947. DATE          :  _________________
  948.  
  949.  
  950. Where did you get MGCOMTP ? ____________________________________________
  951.  
  952.  
  953. *********************************************************************** 
  954.  
  955.      A payment of 25$CAN or 20$US must be made to MARK GAUTHIER.
  956.      DON'T send cash, if you do so, you take the risk that your money
  957.      can be intercept.
  958.  
  959. *********************************************************************** 
  960.  
  961.  
  962. Comments:
  963.  
  964.         : ___________________________________________________________________
  965.  
  966.           ___________________________________________________________________
  967.  
  968.           ___________________________________________________________________
  969.  
  970.           ___________________________________________________________________
  971.  
  972.           ___________________________________________________________________
  973.  
  974.           ___________________________________________________________________
  975.  
  976.           ___________________________________________________________________
  977.  
  978.  
  979.                                 MGCOM / MARK GAUTHIER
  980.                                 58 Emilien_FRENETTE, Sainte-Thérèse
  981.                                 PQ, CANADA
  982.                                 J7E 5K3 
  983.                                  
  984.  
  985.  
  986.