TCONNECT
Syntax |
TCONNECT #pipechan TO #anychan |
Location |
TinyToolkit |
Pipes are serial devices for buffered data transfer, they have two sides:
The input pipe which puts any data into the buffer until it’s full and;
the output pipe which reads the data from the buffer:
input pipe ---> buffer ---> output pipe
There are two kinds of pipes on the QL:
Standard pipes are part of the original QL ROM, the input pipe device name is pipe_<buffer> where <buffer> is the buffer size in bytes (1..32767). It is necessary to know the CHANID of the input pipe to open the output pipe, see FILE_OPEN.
The second type are named pipes which have the same concept except that the output pipe can be identified by name: The input pipe is pipe_<name>_<buffer> and the output pipe pipe_<name>. See the Appendix on Device Drivers regarding Pipes for more information.
TCONNECT makes standard pipes useable: the command expects two opened channels where the first, #pipechan, must be an input pipe and the second, #anychan can be anything. TCONNECT changes the internal meaning of #anychan so that it becomes an output pipe connected to the input pipe #pipechan:
Before TCONNECT:
#pipechan -> input pipe -> buffer scr_2x2 <- #anychan
After TCONNECT:
#pipechan -> input pipe -> buffer -> output pipe -> #anychan
Example
DEVLIST$ returns the devices listed by DEVLIST in a string, separated by spaces. ISDEVICE takes a device and checks with the help of DEVLIST$ if it is a legal device:
100 DEFine FuNction DEVLIST$
110 LOCal list$,dev$: list$=""
120 OPEN#3,pipe_80
130 OPEN#4,scr_
140 TCONNECT #3 TO #4
150 DEVLIST#3
160 INPUT#4,dev$\dev$
170 REPeat read_devs
180 IF NOT PEND(#4) THEN EXIT read_devs
190 INPUT#4,dev$
200 list$=list$&" "&dev$
210 END REPeat read_devs
220 CLOSE#3: CLOSE#4
230 RETurn list$
240 END DEFine DEVLIST$
A legal drive device consists of three letters (the device name), a drive number (1..8) and an underscore:
250 :
260 DEFine FuNction ISDEVICE(dev$)
270 IF LEN(dev$)<>5 THEN RETurn 0
280 IF dev$(5)<>"_" THEN RETurn 0
290 IF dev$(4)<"1" OR dev$(4)>"8" THEN RETurn 0
300 IF NOT (dev$(1 TO 3) INSTR DEVLIST$) THEN RETurn 0
310 RETurn 1
320 END DEFine ISDEVICE
CROSS-REFERENCE
See FILE_OPEN, CHANID, pipes and especially PEND. Some more examples appear at FILE_LEN and FUPDT. QLINK is the same. Qliberator gives the QCONNECT command which is the same.