home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / pibasy.zip / PIBASYNC.PAS < prev    next >
Pascal/Delphi Source File  |  1987-11-11  |  9KB  |  158 lines

  1. UNIT PibAsync;
  2.  
  3. (*----------------------------------------------------------------------*)
  4. (*         PIBASYNC.PAS   --- Asynchronous I/O for Turbo Pascal         *)
  5. (*----------------------------------------------------------------------*)
  6. (*                                                                      *)
  7. (*  Author:  (c) 1985, 1986, 1987 by Philip R. Burns                    *)
  8. (*                                                                      *)
  9. (*  Version: 1.0   (January, 1985)                                      *)
  10. (*           2.0   (June, 1985)                                         *)
  11. (*           2.1   (July, 1985)                                         *)
  12. (*           3.0   (October, 1985)                                      *)
  13. (*           3.1   (October, 1985)                                      *)
  14. (*           3.2   (November, 1985)                                     *)
  15. (*           4.0   (October, 1986)                                      *)
  16. (*           4.1   (December, 1986)                                     *)
  17. (*           4.2   (January, 1987)                                      *)
  18. (*           4.3   (March, 1987)                                        *)
  19. (*           4.4   (July, 1987)                                         *)
  20. (*           4.5   (November, 1987)                                     *)
  21. (*                                                                      *)
  22. (*  Systems: For MSDOS/PC DOS on IBM PCs and close compatibles only.    *)
  23. (*                                                                      *)
  24. (*  History: Some of these routines are based upon ones written by:     *)
  25. (*                                                                      *)
  26. (*              Alan Bishop                                             *)
  27. (*              C. J. Dunford                                           *)
  28. (*              Michael Quinlan                                         *)
  29. (*              Gene Harris                                             *)
  30. (*                                                                      *)
  31. (*           I have cleaned up these other authors' code, fixed some    *)
  32. (*           bugs, and added many new features.                         *)
  33. (*                                                                      *)
  34. (*           In particular, starting with v4.0 of PibTerm, both input   *)
  35. (*           and output to the serial port is buffered and interrupt-   *)
  36. (*           driven.  Also, XON/XOFF support has been moved to the      *)
  37. (*           serial port interrupt handler, which results in fewer      *)
  38. (*           overrun problems.                                          *)
  39. (*                                                                      *)
  40. (*           Suggestions for improvements or corrections are welcome.   *)
  41. (*                                                                      *)
  42. (*           If you use this code in your own programs, please be nice  *)
  43. (*           and give proper credit.                                    *)
  44. (*                                                                      *)
  45. (*----------------------------------------------------------------------*)
  46. (*                                                                      *)
  47. (*  Routines:                                                           *)
  48. (*                                                                      *)
  49. (*     BIOS_RS232_Init        ---    Use BIOS to initialize port        *)
  50. (*     Async_Isr              ---    Com port interrupt service routine *)
  51. (*     Async_Init             ---    Performs initialization.           *)
  52. (*     Async_Clear_Errors     ---    Clear pending serial port errors   *)
  53. (*     Async_Reset_Port       ---    Resets UART parameters for port    *)
  54. (*     Async_Open             ---    Sets up COM port                   *)
  55. (*     Async_Close            ---    Closes down COM port               *)
  56. (*     Async_Carrier_Detect   ---    Checks for modem carrier detect    *)
  57. (*     Async_Carrier_Drop     ---    Checks for modem carrier drop      *)
  58. (*     Async_Buffer_Check     ---    Checks if character in COM buffer  *)
  59. (*     Async_Term_Ready       ---    Toggles terminal ready status      *)
  60. (*     Async_Find_Delay       ---    Find busy wait count for 1ms delay *)
  61. (*     Async_Receive          ---    Reads character from COM buffer    *)
  62. (*     Async_Receive_With_Timeout                                       *)
  63. (*                            ---    Receives char. with timeout check  *)
  64. (*     Async_Ring_Detect      ---    If ringing detected                *)
  65. (*     Async_Send             ---    Transmits char over COM port       *)
  66. (*     Async_Send_String      ---    Sends string over COM port         *)
  67. (*     Async_Send_String_With_Delays                                    *)
  68. (*                            ---    Sends string with timed delays     *)
  69. (*     Async_Send_Break       ---    Sends break (attention) signal     *)
  70. (*     Async_Percentage_Used  ---    Returns percentage com buffer used *)
  71. (*     Async_Purge_Buffer     ---    Purges receive buffer              *)
  72. (*     Async_Release_Buffers  ---    Free memory for serial port queues *)
  73. (*     Async_Setup_Port       ---    Define port base, IRQ, RS232 addr  *)
  74. (*     Async_Stuff            ---    Insert char into receive buffer    *)
  75. (*     Async_Flush_Output_Buffer                                        *)
  76. (*                            ---    Flush serial port output buffer    *)
  77. (*     Async_Drain_Output_Buffer                                        *)
  78. (*                            ---    Wait for serial output to drain    *)
  79. (*     Async_Port_Address_Given                                         *)
  80. (*                            ---    Check if port address installed    *)
  81. (*                                                                      *)
  82. (*----------------------------------------------------------------------*)
  83. (*                                                                      *)
  84. (*      PIBASYNC.PAS was split into PIBASYN1.PAS and PIBASYN2.PAS at    *)
  85. (*      version 3.2 of PibTerm, and into PIBASYN1, PIBASYN2, and        *)
  86. (*      PIBASYN3 for v4.0 of PibTerm.   The UNIT structure was added    *)
  87. (*      for use with Turbo Pascal v4.0.                                 *)
  88. (*                                                                      *)
  89. (*----------------------------------------------------------------------*)
  90.  
  91. INTERFACE
  92.  
  93. USES
  94.    Dos, Crt, Turbo3, GlobType, PibTimer;
  95.  
  96. (*$I PIBASYNC.GLO *)
  97.  
  98. PROCEDURE BIOS_RS232_Init( ComPort : INTEGER; ComParm : WORD );
  99. PROCEDURE Async_Close( Drop_DTR: BOOLEAN );
  100. PROCEDURE Async_Clear_Errors;
  101. PROCEDURE Async_Reset_Port( ComPort       : INTEGER;
  102.                             BaudRate      : WORD;     
  103.                             Parity        : CHAR;
  104.                             WordSize      : INTEGER;
  105.                             StopBits      : INTEGER  );
  106. FUNCTION  Async_Open( ComPort       : INTEGER;
  107.                       BaudRate      : WORD;     
  108.                       Parity        : CHAR;
  109.                       WordSize      : INTEGER;
  110.                       StopBits      : INTEGER  ) : BOOLEAN;
  111.  
  112. PROCEDURE Async_Send( C : Char );
  113. FUNCTION Async_Receive( VAR C : Char ) : BOOLEAN;
  114. PROCEDURE Async_Receive_With_Timeout( Secs : INTEGER; VAR C : INTEGER );
  115. PROCEDURE Async_Stuff( Ch: CHAR );
  116. PROCEDURE Async_Find_Delay( VAR One_MS_Delay : INTEGER );
  117. PROCEDURE Async_Init( Async_Buffer_Max  : INTEGER;
  118.                       Async_OBuffer_Max : INTEGER;
  119.                       Async_High_Lev1   : INTEGER;
  120.                       Async_High_Lev2   : INTEGER;
  121.                       Async_Low_Lev     : INTEGER );
  122. FUNCTION  Async_Carrier_Detect : BOOLEAN;
  123. FUNCTION  Async_Carrier_Drop : BOOLEAN;
  124. PROCEDURE Async_Term_Ready( Ready_Status : BOOLEAN );
  125. FUNCTION  Async_Buffer_Check : BOOLEAN;
  126. FUNCTION  Async_Line_Error( VAR Error_Flags: BYTE ) : BOOLEAN;
  127. FUNCTION  Async_Ring_Detect : BOOLEAN;
  128. PROCEDURE Async_Send_Break;
  129. PROCEDURE Async_Send_String( S : AnyStr );
  130. PROCEDURE Async_Send_String_With_Delays( S          : AnyStr;
  131.                                          Char_Delay : INTEGER;
  132.                                          EOS_Delay  : INTEGER  );
  133. FUNCTION  Async_Percentage_Used : REAL;
  134. PROCEDURE Async_Purge_Buffer;
  135. FUNCTION  Async_Peek( Nchars : INTEGER ) : CHAR;
  136. PROCEDURE Async_Setup_Port( ComPort       : INTEGER;
  137.                             Base_Address  : INTEGER;
  138.                             IRQ_Line      : INTEGER );
  139. PROCEDURE Async_Release_Buffers;
  140. PROCEDURE Async_Flush_Output_Buffer;
  141. PROCEDURE Async_Drain_Output_Buffer( Max_Wait_Time : INTEGER );
  142. FUNCTION  Async_Port_Address_Given( Com_Port : INTEGER ) : BOOLEAN;
  143.  
  144. IMPLEMENTATION
  145.  
  146. (*$I PIBASYN1.MOD *)
  147. (*$I PIBASYN2.MOD *)
  148. (*$I PIBASYN3.MOD *)
  149.  
  150. BEGIN (* PibAsync *)
  151.                                    (* Pick up address of send-a-character *)
  152.                                    (* routine, which is used by INLINE    *)
  153.                                    (* code.                               *)
  154.  
  155.    Async_Send_Addr := ADDR( Async_Send );
  156.  
  157. END   (* PibAsync *).
  158.