10.3 Functions for Printing
10.3.1 Basic Printing
(prin1 ITM:any): ITM:any expr
(channelprin1 CHAN:io-channel ITM:any): ITM:any expr
Channelprin1 is the basic printing function. For well-formed, non-circular
structures, the result can be parsed by the function read.
(prin2 ITM:any): ITM:any expr
(channelprin2 CHAN:io-channel ITM:any): ITM:any expr
Channelprin2 is similar to channelprin1, except that strings are printed
without the surrounding double quotes, and delimiters within ids are not
preceded by the escape character.
The following example illustrates the difference between prin1 and prin2.
ARGUMENT PRIN1 PRIN2
A!%WORD A!%WORD A%WORD
"STRING" "STRING" STRING
(print U:any): U:any expr
(channelprint CHAN:io-channel U:any): U:any expr
Display U using channelprin1 and then terminate the line using
channelterpri.
10.3.2 Whitespace Printing Functions
(channelterpri CHAN:io-channel): nil expr
Write an end of line character. The number of characters output on the
current line (that which is referenced by channelposn), is defined to be zero
and the number of lines output on the current page (that which is referenced
by channelposn), is incremented.
(spaces N:integer): nil expr
(channelspaces CHAN:io-channel N:integer): nil expr
N spaces are written.
(tab N:integer): nil expr
(channeltab CHAN:io-channel N:integer): nil expr
Move to column N
(channelspaces ch (- N (channelposn ch)))
If the position on the current output line is past column N then channelterpri is called before
moving to column N.
10.3.3 Formatted Printing
(printf FORMAT:string [ARGS:any]): nil expr
(channelprintf CHAN:io-channel FORMAT:string [ARGS:any]):nil expr
Channelprintf is a simple routine for formatted printing. The FORMAT is a
string. The characters of this string are printed unless a a interpret and print
the other arguments to channelprintf. The following format characters are
currently supported.
%b | The next argument is assumed to be an integer, it is passed to
spaces. |
%c | The next argument should be a single character, it is printed by a
call on writechar. |
%d | Print the next argument as a decimal integer. |
%e | The next argument is evaluated by a call on eval. |
%f | Print an end-of-line character if not at the beginning of the output
line (does not use a matching argument). |
%l | Print the next argument using print2l, this is the same as
%w except that lists are printed without the top level pair of
parenthesis. The empty list is printed as a blank. |
%n | Print end-of-line character (does not use a matching argument). |
%o | Print the next argument as an octal integer. |
%p | Print the next argument using prin1. |
%p | Print the next argument using prin1. |
%r | Print the next argument using errprin, the result is the same as %p
except that a surrounding pair of quotes are also printed. |
%s | The next argument is assumed to be a string, the surrounding
double quotes are not printed. |
%t | The next argument is assumed to be an integer, it is passed to tab. |
%w | Print the next argument using prin2. |
%x | Print the next argument as a hexadecimal integer. |
|
If the character following % is not either one of the above or another %, it causes an error. Thus,
to include a % in the format to be printed, use %.
There is no checking for correspondence between the number of arguments that FORMAT
expects and the number given. If the number given is less than the number in the FORMAT
string, garbage will be inserted for the missing arguments. If the number given is greater than the
number in the FORMAT string, then the extra ones are ignored.
(prettyprint U:form): U:form expr
Prettyprints U.
10.3.4 The Fundamental Printing Function
(writechar CH:character): character expr
(channelwritechar CHANNEL:io-channelCH:character): character expr
Write one character to the device specified by CHANNEL. All output is
defined in terms of this function. The number of characters output on the
current line (that which is referenced by channelposn), and the number of
lines output on the current page (that which is referenced by channellposn),
are updated. Each channel specifies an output function, it is this function
that is applied to CHANNEL and CH to actually write the character.
10.3.5 Additional Printing Functions
(prin2l L:any): L:any, nil expr
Prin2, except that a list is printed without the top level parentheses. If L is
a pair then the return value is nil, otherwise the return value will be L.
(channelprin2t CHAN:io-channel X:any): any expr
Output X using channelprin2 and terminate line with channelterpri.
(princ ITM:any): ITM:any expr
(channelprinc CHAN:io-channel ITM:any): ITM:any expr
Same function as channelprin2.
(errprin U:any): None Returned expr
Prin1 with special quotes to highlight U.
(errorprintf FORMAT:string [ARGS:any]): nil expr
Errorprintf is similar to printf, except that errout* is used in place of the
currently selected output channel. Channelterpri is called before and after
printing if the line position is greater than zero.
(channeleject CHAN:io-channel): nil expr
Skip to top of next output page.
10.3.6 Printing Status and Mode
For information on directing various kinds of output see the section on channels.
outputbase* = [Initially: 10]
global
This fluid can be set to control the radix in which integers are printed out. If
the radix is not 10, the radix is given before a sharp sign.
1 lisp> 16
16
2 lisp> (setq outputbase⋆ 8)
8#10
3 lisp> 16
8#20
(channelposn CHAN:io-channel): integer expr
Returns number of characters output on the current line of this channel.
(channellposn CHAN:io-channel): integer expr
Returns number of lines output on this page of this channel.
(linelength LEN:{integer, nil}): integer expr
(channellinelength CHAN:io-channel LEN: {integer, nil}): integer expr
For each channel there is a restriction on the length of output lines. If LEN is
nil then the value returned will be the current maximum length. If LEN is an
integer greater than zero then it will become the new maximum. However,
if the argument is zero there will be no restrictions on the size of the output
lines. The following example illustrates how this length is used. PSL uses a
similar function to apply output functions like prin1.
(de check-line-length (length ch fn token)
(when (and (> (+ (channelposn ch) length)
(channellinelength ch nil))
(> (channellinelength ch nil) 0))
(channelwritechar ch (char eol)))
(idapply fn (list ch token)))
The fluid variables PrinLevel and PrinLength allow the user to control how deep the printer will
print and how many elements at a given level the printer will print. This is useful for objects
which are very large or deep. These variables affect the functions prin1, prin2, princ, print, and
printf (and the corresponding Channel functions).
prinlevel = [Initially: nil]
global
Controls how many levels deep a nested data object will print. If PrinLevel
is nil, then no control is exercised. Otherwise the value should be an integer.
An object to be printed is at level 0.
prinlength = [Initially: nil]
global
Controls how many elements at a given level are printed. A value of nil
indicates that there be no limit to the number of components printed.
Otherwise the value of PrinLength should be an integer.