In the
April 1988 issue of The Micro User I explained
how to use a printer with your Z88, and included a handy little printer
server program. This allowed a Z88 to treat a BBC micro as a printer,
with the Z88's output subsequently being printed by the BBC micro.
What I didn't discuss in that article was how to use the Z88's PipeDream
Printer Driver from within Basic programs.
Now why might this be useful? The main reason is all to do with
the Z88's portability. Putting effect codes like underline directly
into a program means that the program can only be used with one
particular type of printer. On a fixed BBC micro this is unlikely
to be a problem, but a Z88 is likely to be used with more than one
printer, say a dot matrix at home and a daisy wheel in the office.
By sending all of the printing through the PipeDream Printer Driver,
changing printer is just a matter of loading a new definition file
into the Driver.
Using the Printer Driver is not difficult. First off the printer
has to be opened in the program in the same way as a file, using
the device name :PRT.0 instead of the usual file name, for example:
X=OPENOUT":PRT.0"
Then
use PRINT#X or BPUT#X to send output to the printer. It is worth
mentioning that PRINT# on the Z88 is different to the same instruction
on the BBC micro. Each string is sent to the file or device followed
by a carriage return, rather than in the BBC micro's 'internal form'.
Thus each line sent has to be a single string. In practice this
is achieved by converting everything to strings (use STR$ for numbers)
and using '+' instead of the normal ',' separator. When you've finished
with the printer, like a file, the channel should be closed:
CLOSE#X
The
Printer Driver is activated by a series of commands to the VDU drivers.
These are always the number 5 followed by an ASCII code. The first
of these commands to use is the one to ensure that the Driver is
active. This is:
BPUT#X,5:BPUT#X,ACS"["
In this
case BPUT# is used to send the two bytes because PRINT# would add
a carriage return.
PipeDream printer effects are now possible. Fortunately the codes
required are identical to the letter needed after the 'diamond'P
in PipeDream for the same effect. I find it easier to define a function
'P' to send these codes via PRINT#:
DEF FNP(A$)=CHR$(5)+A$
Then
if, for example I want to underline I add FNP("U") to the string
at the appropriate place. Remember that an effect will be turned
off at the end of a line if that's how it is set in the Driver.
Printer
Driver Commands
BPUT# form PRINT# form
Printer Driver on 5,ASC"[" CHR$(5),"["
Printer Driver off 5,ASC"]" CHR$(5),"]"
Underline 5,ASC"U" CHR$(5),"U"
Bold 5,ASC"B" CHR$(5),"B"
Extended Sequence 5,ASC"X" CHR$(5),"X"
Italics 5,ASC"I" CHR$(5),"I"
Subscript 5,ASC"L" CHR$(5),"L"
Superscript 5,ASC"R" CHR$(5),"R"
Alternate font 5,ASC"A" CHR$(5),"A"
User Defined 5,ASC"E" CHR$(5),"E"
©John Allen 2008
|
|