====== V124=====
^Published By^Date^Version^Knowledge Level^Keywords^
|Revelation Technologies|14 NOV 1989|2.X|EXPERT|V124|
V124 provides facilities for low level access to an
asynchronous communications port.
V124(operator, device.var, buffer, bytes, status)
==== Using V124 ====
By using V124, data may be read from or written to a port,
and communication settings may be altered, although this is
more easily accomplished using the system subroutine V123.
For MS-DOS, the device driver COMMDVR.IBM must be an
assigned device in the CONFIG.SYS file (see the TCL command
TERMINAL). For OS/2, the device driver can be either
COM01.SYS or COM02.SYS.
=== operator ===
Use operator to pass a literal value indicating the operation
to perform. The following is a list of the operators
available:
^Operator^Operation^
|OP|Opens a port to device.var. This should always be preceded by an R/BASIC FLUSH operation.|
|CL|Closes the port associated with device.var. An opened port must be closed to avoid subsequent corruption of files.|
|CI|Control In. Reads the current settings for the port (see CO below for a description of these settings).|
|CO|Control Out. Sets the communication parameters for the port (see the system subroutine V123 for further information regarding these parameters). This must be a string of seven ASCII characters (7 bytes) passed in buffer and specifying the new settings. The format is as follows:\\ \\ __Byte #__ - __Description__\\ 1 - An ASCII character (not an integer) specifying the baud rate code. The codes are as follows:\\ Code - Baud rate\\ 1 - 50\\ 2 - 75\\ 3 - 110\\ 4 - 134.5\\ 5 - 150\\ 6 - 200\\ 7 - 300\\ 8 - 600\\ 9 - 1200\\ 10 - 1800\\ 11 - 2000\\ 12 - 2400\\ 13 - 3600\\ 14 - 4800\\ 15 - 9600\\ 16 - 19200\\ \\ 2 - An ASCII character (not an integer) indicating the number of stop bits\\ \\ 3 - An ASCII character (not an integer) indicating the number of data bits\\ \\ 4- A literal character indicating the parity mode\\ \\ 5 & 6 - Protocol. This is two bytes in length, and requires setting bits 4 and 16. Bit 4 indicates XOFF mode if set. Bit 16 indicates STRIP mode if set.\\ \\ 7 - An ASCII character (not an integer) indicating the break count|
|RD|Read. Data is read from buffer. V124 does not wait for a [CRLF], but reads whatever data is in the buffer.|
|WR|Write. The data specified in buffer is written to the port.|
|TB|Test Break. If the break key is pressed, a break signal is sent to the port.|
=== device.var ===
Use device.var in an OP operation to return the DOS internal
variable for the device driver. This variable is used by
subsequent V124 operators.
=== buffer ===
Use buffer to pass the DOS internal name for the
communications port to access when opening device.var; or, in
the case of a CI or WR specified operator, the data to write
to the port. The ASCII character 0 must be appended to the
DOS internal name specified (as a terminator).
=== bytes ===
Use bytes to pass the number of bytes required for the
operation. This parameter is used only with a CI operator.
=== status ===
V124 returns false in status if the operation is successful,
or true if not. This parameter is used only with an OP or
CI operator.
==== Values returned ====
If operator is CI or RD, the data is passed in buffer. If
operator is CI or OP, status returns true if the operation is
successful and false if not.
==== Correct Use of V124 ====
* The following code demonstrates the use of V124
DECLARE SUBROUTINE V123, V124, MSG
DECLARE FUNCTION FUNCTION.KEY
device.var = ""
buffer = "COMM$":CHAR(0)
bytes = ""
status = ""
* Flush buffers and open the port
FLUSH
V124("OP", device.var, buffer, "", status)
IF status THEN
MSG("Unable to open the device","","","")
STOP
END
* A simple terminal emulator
MSG("Initializing terminal emulation mode","","","")
stop.key = FUNCTION.KEY("F9") ;* exit key
*Input loop, alternately checking input buffer and keyboard
buffer = ""
LOOP UNTIL buffer = stop.key
V124("RD", device.var, buffer) ;* check buffer
PRINT buffer: ;* echo to screen
V124("TB" ,buffer) ;* test for break key
;* get keyboard input and echo to screen
IF buffer NE stop.key THEN
* Write keyboard input to buffer
V124("WR", device.var, buffer)
END
REPEAT
V124("CL", device.var) ;* close port
MSG("Ending terminal emulation","","","")
STOP