home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / MODEM / MUFUS32R.ZIP / MUFASYNC.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-09-02  |  7.9 KB  |  157 lines

  1. UNIT MUFASYNC;
  2.  
  3. {    This unit was converted to Turbo Pascal v5.0 and renamed to
  4.      Mufasync to distinguish it from any new versions from the
  5.      author.  Portions of this code have be placed in the public
  6.      domain, and the rest will be copyright to any of Alan Bishop,
  7.      C. J. Dunford, Michael Quinlan, Gene Harris, or Phillip R.
  8.      Burns, but have been made available for public use in
  9.      non-commercial applications.
  10.  
  11.      Peter Summers  17/8/91      }
  12.  
  13.  
  14. (*----------------------------------------------------------------------*)
  15. (*         MUFASYNC.PAS   --- Asynchronous I/O for Turbo Pascal         *)
  16. (*----------------------------------------------------------------------*)
  17. (*                                                                      *)
  18. (*  Routines:                                                           *)
  19. (*                                                                      *)
  20. (*     BIOS_RS232_Init        ---    Use BIOS to initialize port        *)
  21. (*     Async_Isr              ---    Com port interrupt service routine *)
  22. (*     Async_Init             ---    Performs initialization.           *)
  23. (*     Async_Clear_Errors     ---    Clear pending serial port errors   *)
  24. (*     Async_Reset_Port       ---    Resets UART parameters for port    *)
  25. (*     Async_Open             ---    Sets up COM port                   *)
  26. (*     Async_Close            ---    Closes down COM port               *)
  27. (*     Async_Carrier_Detect   ---    Checks for modem carrier detect    *)
  28. (*     Async_Carrier_Drop     ---    Checks for modem carrier drop      *)
  29. (*     Async_Buffer_Check     ---    Checks if character in COM buffer  *)
  30. (*     Async_Term_Ready       ---    Toggles terminal ready status      *)
  31. (*     Async_Find_Delay       ---    Find busy wait count for 1ms delay *)
  32. (*     Async_Receive          ---    Reads character from COM buffer    *)
  33. (*     Async_Receive_With_Timeout                                       *)
  34. (*                            ---    Receives char. with timeout check  *)
  35. (*     Async_Ring_Detect      ---    If ringing detected                *)
  36. (*     Async_Send             ---    Transmits char over COM port       *)
  37. (*     Async_Send_String      ---    Sends string over COM port         *)
  38. (*     Async_Send_String_With_Delays                                    *)
  39. (*                            ---    Sends string with timed delays     *)
  40. (*     Async_Send_Break       ---    Sends break (attention) signal     *)
  41. (*     Async_Percentage_Used  ---    Returns percentage com buffer used *)
  42. (*     Async_Purge_Buffer     ---    Purges receive buffer              *)
  43. (*     Async_Release_Buffers  ---    Free memory for serial port queues *)
  44. (*     Async_Setup_Port       ---    Define port base, IRQ, RS232 addr  *)
  45. (*     Async_Stuff            ---    Insert char into receive buffer    *)
  46. (*     Async_Flush_Output_Buffer                                        *)
  47. (*                            ---    Flush serial port output buffer    *)
  48. (*     Async_Drain_Output_Buffer                                        *)
  49. (*                            ---    Wait for serial output to drain    *)
  50. (*     Async_Port_Address_Given                                         *)
  51. (*                            ---    Check if port address installed    *)
  52. (*     Async_Send_Now         ---    Send character without buffering   *)
  53. (*     Async_Wait_For_Quiet   ---    Wait for port to quiesce           *)
  54. (*                                                                      *)
  55. (*----------------------------------------------------------------------*)
  56. (*                                                                      *)
  57. (*      MUFASYNC.PAS is split into MUFASYN1, MUFASYN2, and MUFASYN3     *)
  58. (*                                                                      *)
  59. (*----------------------------------------------------------------------*)
  60.  
  61. INTERFACE
  62.  
  63. USES
  64.    Dos, Crt, MufGlobs, MufTimer, MufMTask;
  65.  
  66. PROCEDURE BIOS_RS232_Init( ComPort : INTEGER; ComParm : WORD );
  67. PROCEDURE Async_Close( Drop_DTR: BOOLEAN );
  68. PROCEDURE Async_Clear_Errors;
  69. PROCEDURE Async_Reset_Port( ComPort       : INTEGER;
  70.                             BaudRate      : WORD;
  71.                             Parity        : CHAR;
  72.                             WordSize      : INTEGER;
  73.                             StopBits      : INTEGER  );
  74. FUNCTION  Async_Open( ComPort       : INTEGER;
  75.                       BaudRate      : WORD;
  76.                       Parity        : CHAR;
  77.                       WordSize      : INTEGER;
  78.                       StopBits      : INTEGER  ) : BOOLEAN;
  79. PROCEDURE Async_Send( C : Char );
  80. FUNCTION  Async_Receive( VAR C : Char ) : BOOLEAN;
  81. PROCEDURE Async_Receive_With_Timeout( Secs : INTEGER; VAR C : INTEGER );
  82. PROCEDURE Async_Stuff( Ch: CHAR );
  83. PROCEDURE Async_Find_Delay( VAR One_MS_Delay : INTEGER );
  84. PROCEDURE Async_Init( Async_Buffer_Max  : INTEGER;
  85.                       Async_OBuffer_Max : INTEGER;
  86.                       Async_High_Lev1   : INTEGER;
  87.                       Async_High_Lev2   : INTEGER;
  88.                       Async_Low_Lev     : INTEGER );
  89. FUNCTION  Async_Carrier_Detect : BOOLEAN;
  90. FUNCTION  Async_Carrier_Drop : BOOLEAN;
  91. PROCEDURE Async_Term_Ready( Ready_Status : BOOLEAN );
  92. FUNCTION  Async_Buffer_Check : BOOLEAN;
  93. FUNCTION  Async_Line_Error( VAR Error_Flags: BYTE ) : BOOLEAN;
  94. FUNCTION  Async_Ring_Detect : BOOLEAN;
  95. PROCEDURE Async_Send_Break;
  96. PROCEDURE Async_Send_String( S : AnyStr );
  97. PROCEDURE Async_Send_String_With_Delays( S          : AnyStr;
  98.                                          Char_Delay : INTEGER;
  99.                                          EOS_Delay  : INTEGER  );
  100. FUNCTION  Async_Percentage_Used : REAL;
  101. PROCEDURE Async_Purge_Buffer;
  102. FUNCTION  Async_Peek( Nchars : INTEGER ) : CHAR;
  103. PROCEDURE Async_Setup_Port( ComPort       : INTEGER;
  104.                             Base_Address  : INTEGER;
  105.                             IRQ_Line      : INTEGER;
  106.                             Int_Numb      : INTEGER );
  107. PROCEDURE Async_Release_Buffers;
  108. PROCEDURE Async_Flush_Output_Buffer;
  109. PROCEDURE Async_Drain_Output_Buffer( Max_Wait_Time : INTEGER );
  110. FUNCTION  Async_Port_Address_Given( Com_Port : INTEGER ) : BOOLEAN;
  111. PROCEDURE Async_Send_Now( C : Char );
  112. FUNCTION  Async_Wait_For_Quiet( Max_Wait : LONGINT;
  113.                                 Wait_Time: LONGINT  ) : BOOLEAN;
  114.  
  115. IMPLEMENTATION
  116.                                    (* Ensure multitasking defined       *)
  117. {$DEFINE MTASK}
  118.  
  119. (*$I MUFASYN1.MOD *)
  120. (*$I MUFASYN2.MOD *)
  121. (*$I MUFASYN3.MOD *)
  122.  
  123. BEGIN (* MUFAsync *)
  124.                                    (* Default communications parameters *)
  125.    Async_Do_CTS         := FALSE;
  126.    Async_Do_DSR         := FALSE;
  127.    Async_Hard_Wired_On  := FALSE;
  128.    Async_Break_Length   := 40;     { in 1/100ths of a second, changed by P.S.
  129.                                      from 500, 2/9/91. }
  130.    Async_Do_XonXoff     := FALSE;  { Changed by P.S.  21/8/91  Keep this off
  131.                                      or some screen address codes will be
  132.                                      interpreted as flow control. }
  133.    Async_OV_XonXoff     := TRUE;
  134.    Async_Buffer_Length  := 4096;
  135.    Async_OBuffer_Length := 1132;
  136.                                    (* Port addresses of each com port *)
  137.  
  138.    Default_Com_Base[1]  := COM1_Base;
  139.    Default_Com_Base[2]  := COM2_Base;
  140.    Default_Com_Base[3]  := COM3_Base;
  141.    Default_Com_Base[4]  := COM4_Base;
  142.  
  143.                                    (* IRQ line for each port *)
  144.  
  145.    Default_Com_Irq [1]  := COM1_Irq;
  146.    Default_Com_Irq [2]  := COM2_Irq;
  147.    Default_Com_Irq [3]  := COM3_Irq;
  148.    Default_Com_Irq [4]  := COM4_Irq;
  149.  
  150.                                    (* Pick up address of send-a-character *)
  151.                                    (* routine, which is used by INLINE    *)
  152.                                    (* code.                               *)
  153.  
  154.    Async_Send_Addr := ADDR( Async_Send );
  155.  
  156. END   (* PibAsync *).
  157.