[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
unit ECO_asyn;
interface
uses dos, crt;
const (* 8086/8088 hardware flags *)
ff = 12; (* form feed *) cr = 13; (* carriage return *)
dle = 16; (* data link esc. *) xon = 17; (* xon *)
xoff = 19; (* xoff *) sub = 26; (* end of file *)
esc = 27; (* escape *) del = 127; (* delete *)
fk_cr : char = '|'; (* function key definition cr *)
fk_delay : char = '~'; (* function key def. 1 sECOnd wait *)
fk_wait_for : char = '`'; (* function key wait for next char *)
fk_ctrl_mark : char = ''; (* marks next char as ctrl character *)
fk_script_ch : char = '@'; (* script to execute follows *)
fk_delay_time : integer = 10; (* delay to insert between each char *)
bs_string : string = h; (* string to send when back space hit*)
ctrl_bs_string : string = #127; (* string to send when ctrl bs hit *)
half_sECOnd_delay = 500; one_sECOnd_delay = 1000;
two_sECOnd_delay = 2000; three_sECOnd_delay = 3000;
tenth_of_a_sECOnd_delay = 100; on = true; off = false;
data_bits : 5..8 = 8; parity : char = 'N';
stop_bits : 0..2 = 1; comm_port : 1..4 = 1;
baud_rate : 110..38400 = 2400; cmd_line_port : 0..4 = 0;
n_baud_rates = 11;
baud_rates: array[ 1 .. n_baud_rates ] of word =
( 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 );
modem_init : string = 'ATZ|~ATX1|';
modem_dial : string[30] = 'ATDT';
modem_dial_end : string[30] = '|';
modem_busy : string[30] = 'BUSY';
modem_connect : string[30] = 'CONNECT';
modem_no_carrier : string[30] = 'NO CARRIER';
modem_escape : string[30] = '+++';
modem_escape_time : integer = 1500;
modem_hang_up : string[30] = 'ATH0|';
modem_time_out : longint = 60;
modem_redial_delay : longint = 45;
modem_answer : string[30] = 'ATA|';
modem_host_set : string = 'ATZ|~ATX1|~ATS0=1|';
modem_host_unset : string = 'ATZ|~ATX1|~ATS0=0|';
modem_command_delay : integer = 10;
modem_carrier_high : boolean = false;
modem_ring : string[30] = 'RING';
host_auto_baud : boolean = true;
modem_hold_line : boolean = false;
(* communications hardware addresses *)
(* these are specific to ibm pcs and close compatibles. *)
uart_thr = $00; (* offset from base of uart registers for ibm pc *)
uart_rbr = $00; uart_ier = $01; uart_iir = $02; uart_lcr = $03;
uart_mcr = $04; uart_lsr = $05; uart_msr = $06;
i8088_imr = $21; (* port address of the interrupt mask register *)
com1_base = $03f8; (* port addresses for the uart *)
com2_base = $02f8; com3_base = $03e8; com4_base = $02e8;
com1_irq = 4; (* interrupt line for the uart *)
com2_irq = 3; com3_irq = 4; com4_irq = 3;
com1_int = $0c; (* interrupt number for the uart *)
com2_int = $0b; com3_int = $0c; com4_int = $0b;
rs232_base = $0400 (* address of rs 232 com port pointer *);
maxcomports = 4 (* four ports allowed by this code *);
(* port addresses of each com port *)
default_com_base : array[1..maxcomports] of word =
( com1_base, com2_base, com3_base, com4_base );
(* irq line for each port *)
default_com_irq : array[1..maxcomports] of integer =
( com1_irq, com2_irq, com3_irq, com4_irq );
(* interrupt for each port *)
default_com_int : array[1..maxcomports] of integer =
( com1_int, com2_int, com3_int, com4_int );
(*----------------------------------------------------------------------*)
(* *)
(* communications buffer variables *)
(* *)
(* the communications buffers are implemented as circular (ring) *)
(* buffers, or double-ended queues. the asynchronous i/o routines *)
(* enter characters in the receive buffer as they arrive at the *)
(* serial port. higher-level routines may extract characters from *)
(* the receive buffer at leisure. higher-level routines insert *)
(* characters into the send buffer. the asynchronous i/o routines *)
(* then send characters out the serial port when possible. *)
(* *)
(*----------------------------------------------------------------------*)
timeout = 256 (* timeout value *);
async_xon = q (* xon character *);
async_xoff = s (* xoff character *);
async_overrun_error = 2 (* overrun *);
async_parity_error = 4 (* parity error *);
async_framing_error = 8 (* framing error *);
async_break_found = 16 (* break interrupt *);
async_cts = $10 (* clear to send *);
async_rts = $20 (* request to send *);
async_dsr = $20 (* data set ready *);
async_dtr = $10 (* data terminal ready *);
async_rtsdtr = $30 (* rts + dtr *);
type (* i/o buffer type for serial port *)
async_buffer_type = array[0..1] of char;
async_ptr = nc_buffer_type;
var (* port addresses for serial ports *)
com_base : array[1..maxcomports] of word;
(* irq line for each serial port *)
com_irq : array[1..maxcomports] of integer;
(* interrupt for each serial port *)
com_int : array[1..maxcomports] of integer;
async_buffer_ptr : async_ptr (* input buffer address *);
async_obuffer_ptr : async_ptr (* output buffer address *);
async_open_flag : boolean (* true if port opened *);
async_port : integer (* current open port number (1 -- 4) *);
async_base : integer (* base for current open port *);
async_irq : integer (* irq for current open port *);
async_int : integer (* interrupt # for current port *);
async_rs232 : integer (* rs232 address for current port *);
async_buffer_overflow : boolean (* true if buffer overflow has happened *);
async_buffer_used : integer (* amount of input buffer used so far *);
async_maxbufferused : integer (* maximum amount of input buffer used *);
(* async_buffer empty if head = tail *)
async_buffer_head : integer (* loc in async_buffer to put next char *);
async_buffer_tail : integer (* loc in async_buffer to get next char *);
async_buffer_newtail : integer (* for updating tail value *);
async_obuffer_overflow : boolean (* true if buffer overflow has happened *);
async_obuffer_used : integer (* amount of output buffer used *);
async_maxobufferused : integer (* max amount of output buffer used *);
(* async_buffer empty if head = tail *)
async_obuffer_head : integer (* loc in async_buffer to put next char *);
async_obuffer_tail : integer (* loc in async_buffer to get next char *);
async_obuffer_newtail : integer (* for updating tail value *);
async_buffer_low : integer (* low point in receive buffer for xon *);
async_buffer_high : integer (* high point in receive buffer for xoff*);
async_buffer_high_2 : integer (* emergency point for xoff *);
async_xoff_sent : boolean (* if xoff sent *);
async_sender_on : boolean (* if sender is enabled *);
async_send_xoff : boolean (* true to send xoff asap *);
async_xoff_received : boolean (* if xoff received *);
async_xoff_rec_display : boolean (* if xoff received and displayed *);
async_xon_rec_display : boolean (* if xon received *);
async_baud_rate : word (* current baud rate *);
(* save previous serial interrupt status *)
async_save_iaddr : pointer;
async_do_cts : boolean (* true to do clear-to-send checking *);
async_do_dsr : boolean (* true to do data-set-ready checking *);
async_do_xonxoff : boolean (* true to do xon/xoff flow checking *);
async_ov_xonxoff : boolean (* true to do xon/xoff if buffer overfl *);
async_hard_wired_on : boolean (* true if hard-wired connection *);
async_break_length : integer (* length of break in 1/10 sECOnds *);
async_line_status : byte (* line status reg at interrupt *);
async_modem_status : byte (* modem status reg at interrupt *);
async_line_error_flags : byte (* line status bits accumulated *);
async_buffer_size : integer (* stores input buffer size *);
async_obuffer_size : integer (* stores output buffer size *);
async_uart_ier : integer (* interrupt enable register address *);
async_uart_mcr : integer (* interrupt enable register address *);
async_uart_iir : integer (* interrupt id register address *);
async_uart_msr : integer (* modem status register address *);
async_uart_lsr : integer (* line status register address *);
async_output_delay : integer (* delay in ms when output buffer full *);
async_onemsdelay : integer (* loop count value to effect 1 ms delay*);
async_buffer_length : integer (* receive buffer length *);
async_obuffer_length : integer (* send buffer length *);
(* pointer to async_send routine *)
async_send_addr : async_ptr;
break_length : integer;
current_carrier_status,
new_carrier_status,
attended_mode,
hard_wired,
reset_comm_port,
comm_port_changed,
check_cts,check_dsr,
do_xon_xoff_checks : boolean;
(*----------------------------------------------------------------------*)
(* multitasker definitions *)
(*----------------------------------------------------------------------*)
type multitaskertype = ( multitasker_none, doubledos, desqview, topview,
mswindows, apxcore, ezdosit, concurrent_dos,
taskview, multilink, other );
var timesharingactive: boolean; (* true if multitasker active *)
(* which multitasker active *)
multitasker: multitaskertype;
(*----------------------------------------------------------------------*)
(* dos jump stuff *)
(*----------------------------------------------------------------------*)
(* var *) const
heaptop : pointer = nil (* top of heap at program start *);
stacksafetymargin : word = 1000 (* safety margin for stack *);
minspacefordos : word = 20000 (* minimum bytes for dos shell to run *);
procedure bios_rs232_init( comport : integer; comparm : word );
procedure async_close( drop_dtr: boolean );
procedure async_clear_errors;
procedure async_reset_port(
comport : integer;
baudrate : word;
parity : char;
wordsize : integer;
stopbits : integer
);
function async_open(
comport : integer;
baudrate : word;
parity : char;
wordsize : integer;
stopbits : integer
) : boolean;
procedure async_send( c : char );
function async_receive( var c : char ) : boolean;
procedure async_receive_with_timeout( secs : integer; var c : integer );
procedure async_stuff( ch: char );
procedure async_find_delay( var one_ms_delay : integer );
procedure async_init(
async_buffer_max : integer;
async_obuffer_max : integer;
async_high_lev1 : integer;
async_high_lev2 : integer;
async_low_lev : integer
);
function async_carrier_detect : boolean;
function async_carrier_drop : boolean;
procedure async_term_ready( ready_status : boolean );
function async_buffer_check : boolean;
function async_line_error( var error_flags: byte ) : boolean;
function async_ring_detect : boolean;
procedure async_send_break;
procedure async_send_string( s : string );
procedure async_send_string_with_delays(
s : string;
char_delay : integer;
eos_delay : integer
);
function async_percentage_used : real;
procedure async_purge_buffer;
function async_peek( nchars : integer ) : char;
procedure async_setup_port(
comport : integer;
base_address : integer;
irq_line : integer;
int_numb : integer
);
procedure async_release_buffers;
procedure async_flush_output_buffer;
procedure async_drain_output_buffer( max_wait_time : integer );
function async_port_address_given( com_port : integer ) : boolean;
procedure async_send_now( c : char );
function async_wait_for_quiet(
max_wait : longint;
wait_time: longint
) : boolean;
procedure send_modem_command(modem_text: string);
function set_params(first_time: boolean): boolean;
procedure initialize_modem;
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson