Part 22
Streams

Subjects covered...

	Streams
	Channels
	FORMAT, OPEN, CLOSE

The +3 can 'read' data from the keyboard by using INPUT and INKEY$,
and it can 'write' data onto the TV screen or a printer by using PRINT
and LPRINT. However, these commands are really a form of shorthand
designed to protect the user from some of the computer's more complex
features.

To the BASIC PRINT command, for example, the screen and the printer
are no different. 'PRINT "Roseanne"' really means 'take the characters
which make up the word 'Roseanne' and send them somewhere else'. It's
just convenient to use the screen most of the time. Likewise, LPRINT
usually sends data to the printer. In fact, what these commands really
do is to send data to one of a number of channels.

A channel is the way in which the computer communicates with its input
and output devices. There are three channels normally available to
BASIC. These are...

	* The screen (called S)
	* The keyboard (called K)
	* The printer (called P)

Of these, the screen is an output-only device, the keyboard is both an
input and output device, and the printer is either an output-only
device (if it uses the parallel PRINTER socket), or an input and
output device (if it uses the serial RS232 socket). Outputting data to
the keyboard might seem a funny idea, but the computer uses the lower
screen (like INPUT does) to display the characters.

To access a channel, it has to be open. Opening a channel makes it
ready to receive or produce data. A channel is opened by connecting it
to a stream. From BASIC, you would use a command like...

	OPEN #4,"p"

...which means 'connect stream 4 to the printer channel'. Streams are
convenient ways for the computer to switch between channels by
referring to them as numbers. This idea makes it possible to write
programs that can send information to any device without having to use
different commands. (This is known as redirectable (or
device-independent) I/O.)

This might seem over-complicated, and you may well wish to stick to
the standard PRINT and LPRINT commands - that's why they're there,
after all.

PRINT and LPRINT are really the same command. When BASIC is running,
it has three streams normally open. Stream #1 is connected to the
keyboard device (K), and is used by INPUT and INKEY$. Stream #2 is
connected to the screen (S), and is used by PRINT and LIST. Stream #3
is connected to the printer (P), and is used by LPRINT and LLIST. All
of these commands can be redirected to use another device by including
a '#' followed by a current stream number, so...

	PRINT #1;"This is the lower screen"

...will print the message on the lower screen. Similarly...

	PRINT #3;"Who needs LPRINT, Gladys?"

...will use the printer. Conversely, LPRINT can behave like PRINT...

	LPRINT #2;"Confusing, or what?"

...behaves just as if the 'LPRINT #2' were PRINT.

As they stand, these examples are fairly useless but serve to
demonstrate a point. This sort of thing becomes useful if you want to
write a program where the results might go either to the printer or
the screen, like so...

	10 REM squares program for printer
	20 INPUT "do you want to print the results?";a$
	30 LET stream=2
	40 IF a$="y" OR a$="Y" THEN LET stream=3
	50 FOR n=0 TO 10
	60 PRINT #stream;n,n*n
	70 NEXT n

The +3 can cope with 16 streams. As 3 are used by BASIC, and 1 is used
internally, this leaves you with 12. You can use these by...

	10 REM program to read data from RS232
	20 FORMAT LINE 9600
	30 FORMAT LPRINT "r"
	40 OPEN #4,"p"
	50 PRINT INKEY$ #4;
	60 GO TO 50

...which takes characters in from the RS232 interface and prints them
onto the screen.

If you want to read in data from the RS232 into memory directly, you
can replace line 50 with...

	POKE address, CODE (INKEY$ #4)

As we mentioned before, the screen and the paralle PRINTER socket can
only be used by the +3 for output. They cannot be used for input, and
if you try 'PRINT INKEY$ #2', for example, you'll receive an error
report.

It is theoretically possible to redirect BASIC's normal output
streams, so by using...

	10 CLOSE #2
	20 OPEN #2,"p"

...all the PRINT output will go to the printer instead of the screen.
(If you try to do this during editing, the results will be
unpredictable, so it's best left alone.)

On the standard +3 system, streams and channels are of mostly academic
interest. However, certain peripherals and BASIC language extensions
do use the stream system for more complex functions.
[Back] [Contents] [Next]