Opens the port and initializes the buffer
[<lTrapMode>]) --> lStatus
Tip: The new optional parameter is an enhancement over previous
<nComPort> Designates the number of the port (1 to N).
<nBufferIn> Designates the size of the receiving buffer up to 64
kByte. The default value is 100 bytes.
<nBufferOut> Designates the size of the sending buffer for
background transmission up to 64 kByte. The default specification is a
no send buffer.
<lTrapMode> Designates when the port triggers an interrupt. When
this parameter is .T., the port only triggers an interrupt while
receiving data, and not as a result of transmission failure. The
default value causes the port to trap all occurrences.
COM_OPEN() returns .T. when the port has been successfully opened and
you can select the buffer.
This function allows you to open a serial interface port from COM1 to
COM4. These ports have particular I/O addresses. For example,
CA-Clipper Tools uses 3F8H as a base address for COM1. DOS or BIOS
routines are not even involved; I/O addresses are not read from the BIOS
data area. The default values described in the Introduction to this
chapter are applied, or the values are set using COM_SETIO(). The
availability of a port is tested for these addresses before the port is
A buffer of up to 64 kByte can be reserved for each com port. All
arriving characters are saved here, even when the CA-Clipper program is
active elsewhere with another process. The number of characters in the
buffer can be checked and partially read.
You can also reserve a sending buffer. If you reserve a sending buffer,
COM_SEND() controls the interrupt function for data transmission, which
means that the interrupt occurs in the background. Several functions
are available to control the send buffer.
Interrupts during Transmission Errors
If <lTrapMode> is specified as .T., the UART port only triggers an
interrupt when there is data incoming or interrupt driven data being
sent. Events connected with the MSR or the LSR are no longer taken into
account. This affects the status signal and particularly affects
This capability was added as the result of research that indicated that
some adapter ports seemed to trigger interrupts for no reason. These
interrupts are caused by "trash" on the lines; as a rule, serial port
incoming lines were not terminated (electronically closed). Overflowing
interrupts can disturb program execution and lead to significant loss of
Important! In contrast to other programming languages, like Basic,
COM_OPEN() and COM_INIT() do not affect any control signals. If you
want to address a modem at the serial interface through CA-Clipper, you
must set the DTR and every other signal using the correct CA-Clipper
” Buffer size can be between 100 bytes and 64 kByte. Settings
too large or too small are corrected, increased or decreased,
” To ensure compatibility with earlier versions of CA-Clipper
Tools, the <nComPort>, <nBufferIn>, and <lTrapMode> parameters can be
used without <nBufferOut> (see the example).
” Open a port with monitoring:
IF COM_NUM() > 0
nBuffSize := 4000 // 4000 byte buffer
ComOk := COM_OPEN(1, nBuffSize) // Open COM1
IF .NOT. ComOk
? "Port cannot be opened !"
” Open COM3 with the corresponding send and receive buffer:
? COM_OPEN(3, 1000, 1000) // .T. when successful
” Trigger interrupts for incoming data only, not for
transmission failure (receiving buffer 1000 characters, normal
? COM_OPEN(3, 1000, .T.) // .T. when successful