Specifications
A-8
Guide to Printers and Printing
34.%d – Pops the 2400 off the stack and returns it, in ASCII format, to the in–porgress
calculation of _l.
35.%G_v – Pushes a 6 onto the stack.
36.%* – Pops the 6 and the 2400 off the stack, multiplies them together, and pushes the
resultant 14400 onto the stack.
37.%{300} – Pushes a 300 onto the stack.
38.%/ – Pops the 300 and the 14400 off the stack, divides 14400 by 300, and pushes the
resultant 48 onto the stack.
39.%d – Pops the 48 off the stack and returns it, in ASCII format, to the in–progress
determination of ia, the input data stream pipeline for ASCII jobs.
Why the Stack Language Describing Page Length Works
The LaserPrinter 4029 Series Technical Reference contains a figure and a table that
together describe the printable and unprintable areas on a page, and the paper and
envelope dimensions, in pels, for standard paper and envelope sizes. For example, the
printable area on an 8.5 x 11 (width by length) inch page is 2400 x 3200 pels (width by
length). Note that if the page is rotated either 90 or 270 degrees for landscape printing, the
dimensions are swapped and become 3200 x 2400 pels (width by length).
The evaluation of %IwL begins by checking to see if the l flag was used on the command
line; if it was, then there are no calculations to perform. The requested value will be used.
(That is not a promise that it will work, just that it will be used.) If the l flag was not used on
the command line, then piobe has to figure out how long the page is under the current job
environment, as determined by other command line flags and by colon file defaults.
The first item checked in the evaluation of _l (page length) is page orientation (_z). As noted
above, rotating the page by odd multiples of 90 degrees flips the page dimensions. Looking
at the if–then–else statement that is the beginning of the definition of wY, it can be seen that
the value of _z is a switch that controls which of wJ and wK will be used for page length. If
the page has a portrait orientation, then wK is length. If the page has a landscape
orientation, then wJ is length. After the page length in pels is resolved, the remainder of the
escape sequences in the definition of wY just take vertical line denisty into account while
converting the number of pels to the number of lines.
The wJ attribute is selected because the page orientation is landscape. Thus far all that is
known is that the dimensions have been flipped; what the dimensions actually are is still
unknown. The evaluation of wJ begins by fetching the value (if any) of a command line
usage of the Q flag, which is a printer–dependent value requesting a specific paper size. If
the Q flag was used on the command line, then that value will be used to select the paper
length in pels, otherwise a value for Q will be determined by evaluating Wu, which is a value
for the paper source based on the attributes _O (type of input paper handling) and _u (input
paper source). Note that _Q is defined as %IwQ, whose definition begins with %IWu.
Because Q was not used on the command line, the evaluation of Wu determines that the O
flag wasn’t used either, and so executes the else clause in the outer if–then–else statement
in the definition of Wu, returning the default colon file value of _u, 1, to the evaluation of wQ.
Because this is as deep as the nesting of escape sequences goes for the evaluation of _l, it
is worth taking a closer look at the logic defining Wu. Keep in mind the definitions and legal
values for O, u, and Q, which are:
• O – type of input paper handling – 1 (manual), 2 (continuous forms), 3 (sheet feed) –
default is sheet feed.
• u – input paper source – 1 (primary), 2 (alternate), 3 (envelope) – default is primary.
• Q – paper size for input paper source – values are printer–dependent – defined by
combination of O and u.