Trailing-Edge
-
PDP-10 Archives
-
BB-JR93N-BB_1990
-
10,7/runoff/runoff.kbd
There are 4 other files named runoff.kbd in the archive. Click here to see a list.
< RUNOFF -- RUNOFF macros for ITPS-10 system
Robert D. Houk -- 30-Jul-77
These macros are intended for two purposes - one is to provide an
interface into ITPS for RUNOFF users to ease their conversion over
to ITPS; the second reason is to provide a prototype macro system
for general use, specifically that same area addressed by RUNOFF.
In general, these macros parallel RUNOFF in name and function -
wherever there is an applicable RUNOFF command there is an ITPS
macro of the same name (usually RUNOFF's abbreviated name) with
the same or similar functionality.
To use the RUNOFF macro system simply include in your text file:
[*setup macro]
[*RUNOFF][preliminary user commands][*BEGIN]
body of user text
[*END]
This command sequence must be followed in order to assure proper
functioning of the macro subsystem. The "preliminary user commands"
are any commands which merely set parameters - such as [*FT] or [*PS],
etc. The [*BEGIN] macro call must precede all user typeset text (in-
cluding all leading, tabbing, etc.)!!! The user should include the
[*END] macro call (to do any device-specific end of take functions)
as the very last piece of his text file.
Important system conventions:
1) All type faces are assumed to be setup (i.e., numbers are
assigned to faces) with the major face (as specifiec by the
[Fnnn] command) a multiple of 10 (decimal); the correspond-
ing italics face as "nnn" + 1; the corresponding bold face
as "nnn" + 2; the corresponding small caps face as "nnn" +3.
Consider the standard line-printer/ASCII setup: face 210 is
the standard face; face 211 is the italics face; face 212 is
the bold face; and face 213 is the small caps face.
2) The setup macro initializes the D-registers (see below) and
defines the incore macro END to be called at the end of the
take to do any device-dependent functions
3) If D1 is zero then +& character is form feed (octal 014); if
positive then D1 contains amount of leading to perform between
"pages".
4) Whenever a value "n" is specified as being "p.p's" then
the numeric value of picas must be followed by a "." character
to delimit the picas and another numeric value to represent the
points:
"50" is fifty points;
".50" is fifty points;
"4.2" is four picas two points (fifty points);
"42.0" is forty-two picas (five hundred and four points);
"42." is illegal (no points "fraction" specified).
Whenever a value is specified as being points then the numeric
value may be either just points or picas.points.
------------------------------------------------------------------------
*** WARNING ***
Following are general warnings concerning restrictions or bugs about
which the user should be aware:
1) In versions of JUSTIF before %301(373) the use of one-shot
face commands is not allowed (e.g., the [WB] command) since
JUSTIF does not properly reset the $F register at the end of
the one-shot.
2) The face modify facility ([FM] command) is not supported.
3) JUSTIF should be assembled to handle at least 128 incore mac-
ros with a minimum size of 48 words each.
In general tracking down errors can be very painful, as JUSTIF is very
sensitive (trusting) of user input. The best way to track down errors is
probably to get the .JH file and simply trace down what happened - char-
acter by character until the "obvious" error appears. Once an error has
occurred JUSTIF has a tendency to propagate the error - hundreds of errors
may happen just because the column width got set wrong for example. If an
error after the first error is not obvious (like illegal command) then try
the file again after having fixed the "obvious" leading errors. JUSTIF is
very trusting of user input and tends to just believe anything you tell it,
especially in macros, and gets correspondlingly confused when you tell it
something wrong.
Probably 99.9% of all errors are in the end attributed to user error, but
errors in the basic system software do happen, especially after a new re-
lease of some sort. If a problem defies solution, try to reduce the number
of variables involved to a minimum - try simple test cases to make sure you
understand the basic functionality being exercised, ask other people for help
(it is truly amazing how consistently one can misread a (e.g.) mis-spelled
word), even trace the .JH file character by character. If all else fails,
give up and try a different approach.
------------------------------------------------------------------------
*** PROGRAMMING ARCANA ***
A very important (and incredibly obscure) macro programming procedure
which can lead to "impossible" (to comprehend) bugs concerns the way
JUSTIF handles "page" breaks (really a vertical column break). JUSTIF
always processes text until a word break before trying to justify a
line of text (it has to go to the end of the word so it can properly
hyphenate the word). This means that any text which exceeds the line,
as finally "set" by the justification routines, must be "reprocessed"
a second time. JUSTIF does this by "re-executing" the input stream
from the point that the line break occured. The obscurity is that
the input stream can contain embedded commands which are also executed
a second time. This leads to some very bizarre (yea, even psychopathic)
cases. Consider a line which contains the following text stream:
. . . re[FB]stric[FR]tions/Z . . .
The usage of the face commands "[FB]" and "[FR]" illustrates why JUSTIF
must process until an unambiguous end of line is encountered - the com-
mands can affect the way the word itself is set. Now, if the line is
finally broken at "restric-" then the "tions" will appear on the next
line. But to JUSTIF, the next line will start "[FR]tions/Z". It is the
"/Z" which causes the grief - it was seen once whilst looking for an
end of word condition, and then again when the end of word was finally
set. The net effect is that the "tions" is overlaid across the begining
of the line which hyphenated "restric-". This trivial (yet still pain-
fully obscure) example can be sidestepped by putting a space between
the "tions" and the "/Z" as so:
. . . re[FB]stric[FR]tions /Z . . .
Since JUSTIF will not set the line until the column which has been
EXCEEDED the "/Z" will only be executed if the "tions" can be guaranteed
to fit the line, and the "/Z" will also be guaranteed to affect only
the final typeset line which contains the "tions" text. (The case cited
above has actually been fixed in JUSTIF, but still serves to illustrate
my point).
The real complications arise when the line break coincides with the page
(or column) break - for in this case the "excess" text must be saved
across any page-break information (which is to say the [VH macro). The
penultimate headache arises when it is a macro itself (such as the [*ELS]
macro herein defined) which finally trips the page break mechanism at
some intermediate point within the macro itself. Since the macro is just
a string of commands (and//or text) itself, these commands are subject
to the same treatment as the "/Z" in the example above. This can lead to
non-obvious (to say the least) behaviour for commands which modify data
such as one of the user registers (e.g., a [ZS command) since the command
can be executed twice! Therefore macros must written in such a manner
that any line break caused by the macro will not doubly-execute any
such commands.
As a real-life example (which took an hour DDT'ing my way through JUSTIF
to initially comprehend), consider the [*ELS] macro below. It starts out
with a call to the [*TBOL] macro - to ensure that any previous text is
set and a new line is started (since [*ELS] by definition terminates
any [*LE] currently being processed). This [*TBOL] macro also has the
effect of guaranteeing that any impending page break that might occur
will occur at the [*TBOL] execution - ensuring that following commands
up to the "[ZET1,TLE0]" command are safe. Now the [*TLE0] macro, if
called (i.e., register T1 contains 0) can cause a page break since it
calls the [*TTP] macro, which in turn . . . If the [*ELS] macro did
not start out with a [*TBOL] call (which it didn't for a long time)
and if the [*ELS] macro was called at the end of a line of text which
EXACTLY fit the page, then the initial commands in the [*ELS] macro
would get executed twice (in particular, the "[ZSI5,1]" command, which
caused I5 to go negative, which lead in turn to calculating negative
indents since the indents are calculated as the product of the [*LS]
nesting level, which . . .)!
Another example is the set of [*HLn] macros below. In the HLn macros
I must save the HLn text body away (in a TTHLn "scratch" macro) before
a possible page break occurs. This is required for running headers
which want to include in the running head the HL level and/or text
for that page. The problem lies with HLn macros which are the very first
text on a page - the HLn macro must be seen and executed before the
page break in order to provide the header information. This requires
that the TTHLn macro be defined and the Hn register be incremented
before the [*TBOL] call (which is what may well force a page break
if there is no more room in the current page). Unfortunately (as de-
scribed above) if the [*TBOL] causes the page break all preceding
commands will be re-executed - leaving the Hn register incremented
twice (it's ok for the TTHLn macro to be redefined since it is re-
defined to be the same thing). Therefore I use register H0 as a sort
of "reeentrancy" counter to indicate how many times the [ZIHn] com-
mand was executed, and to adjust the Hn register accordingly. (As a
corollary, this mean that a running head macro must subtract H0 from
Hn iff H0 .GT. 0 in order to find the correct header level, and fur-
ther, that running feet can't reliably access the current header level
counters.)
So if you encounter problems which seem to arise at page, or even line
boundries (easy to check - add leading text to shift everything down
a word/line or two) look for this case arising - the [VH macro being
called.
Good Luck.
------------------------------------------------------------------------
Register Usage Conventions
(Unless otherwise specified, all
applicable values are in points)
A group Not Used.
B group Not used
C group Multi-column work
C Scratch column counter for [*THVCL]
C0 Column (as opposed to page) width
C1 Column gutter (space between columns)
C2 Number of columns
C3 Total leading ($U) at top of text column(s)
C4 Not used
C5 Not used
C6 Not used
C7 Not used
C8 Not used
C9 Not used
D group Device (setup) specific information
D Not used
D0 Base face
D1 If .EQ. 0 device does form feed'ss (+& char)
If .GT. 0 do [VA!D1] to split pages
D2 If .EQ. 0 no super/subscript (instead do (nn))
If .GT. 0 D2 is percent stored leading for [EJ]
D3 Width of average character (in percent) re em space
D4 Not used
D5 Not used
D6 Not used
D7 Not used
D8 Not used
D9 Not used
E group Not used
F group Reserved for footnoting
G group Running head/foot control
G Not used
G0 .GT. 0 if have seen [*CH] or [*AX]
G1 [*FT] setting for running head
G2 If .LT. 0 then no running head at all
If .EQ. 0 then blank running head
If .GT. 0 then normal running heads
G3 [*FT] setting for running foot
G4 If .LT. 0 then no running foot at all
If .EQ. 0 then blank running foot
If .GT. 0 then normal running foot
G5 Not used
G6 Not used
G7 .NE. 0 then print page number on page header
G8 .NE. 0 then print subtitle on page header
G9 .NE. 0 then print title on page header
H group Header level information
H Not used
H0 Interlock on Hn level increments
H1 Header level 1
H2 Header level 2
H3 Header level 3
H4 Header level 4
H5 Header level 5
H6 Not used
H7 Not used
H8 Not used
H9 Not used
I group Indent information
I Not used
I0 Right margin (effectively the column width)
I1 Left margin (indent from 0)
I2 Indent (both margins) for each [*NOTE]
I3 Nesting level for [*NOTE]
I4 Indent (left margin) for each [*LE]
I5 Nesting level for [*LIST]
I6 Not used
I7 Not used
I8 Not used
I9 Not used
J group Tables information [*TABLE?]
J $U for bottom of longest table sub-column
J0 Total indent from table sub-columns
J1 Width of sub-column 1 (points)
J2 Width of sub-column 2
J3 Width of sub-column 3
J4 Width of sub-column 4
J5 Width of sub-column 5
J6 Space (gutter) between table sub-columns
J7 Space (leading) 'tween table entries
J8 Test page value for start of new table entry
J9 Table indent
K group Not used
L group Listing control and lists
L .GE. 0 then list all ([MJ] command)
.LT. 0 then suppress macro & commands ([MJ%])
L0 .EQ. 0 then L8 leading else L9 leading
L1 List level 1 number
L2 List level 2 number
L3 List level 3 number
L4 List level 4 number
L5 List level 5 number
L6 Extra leading (points) between [*LS]'s
L7 T.P. (lines) after L6 for [*LS]
L8 Extra leading (points) between [*LE]'s
L9 T.P. (lines) after L8 for [*LE]
M group Not used
N group Not used
O group Not used
P group Page formating information
P Page number of current page
P0 Page width
P1 Page depth
P2 Pointsize (regular text)
P3 Leading (regular text)
P4 Pointsize (running head)
P5 Leading (running head)
P6 Pointsize (chapter header)
P7 Leading (chapter header)
P8 Pointsize (running foot)
P9 Leading (running foot)
Q group Paragraphing and other random info
Q Total leading ($U register) at top of page text
Q0 Paragraph indent
Q1 Paragraph leading (extra between paragraphs)
Q2 Paragraph test page
Q3 Not used
Q4 Not used
Q5 Not used
Q6 Not used
Q7 Not used
Q8 Not used
Q9 Not used
R group Scratch and Temporary work registers
S group Scratch and Temporary work registers
T group Scratch and Temporary work registers
U group Not used
V group Not used
W group Not used
X group Not used
Y group Not used
Z group Not used
------------------------------------------------------------------------
Vertical Mark Point usage
0 Not used
1 Not used
2 Not used
3 Not used
4 Not used
5 Not used
6 Not used
7 Temp used by [*THV] and friends
8 Top of current table entry ([*TEn]) column
9 Bottom of longest (so far) table entry column
------------------------------------------------------------------------
Command Macros Listing
(tbs)
------------------------------------------------------------------------
Internal macros Listing
(tbs)
------------------------------------------------------------------------
Command Macros
AX n,title Set appendix number "n", title "title"
>[*COR:AX=[*TBOL]< Make sure previous line is ended
>[ZXG0,1]< Flag in chapter/appendix
>[*COR:TCNUM=@=]< Set text of chapter/appendix number
>[*TITLE]< Define new title
>[*COR:TSUBTT==]< Clear subtitle
>[*THL0]< Clear all header-level information
>[ZGG2,TZXG2]< Get [*FT] setting for running head
>[ZZP][*PGI]< Advance to new page
>< This may unfortunately cause a blank page
>< if the [*TBOL] above terminated the pre-
>< ceding page, but it must be done this way
>[ZGG4,TZXG4]< Get [*FT] setting for running foot
>[ZZG1][ZZG3]< Reset [*FT]
>[*TSAVE][PR!P6,!P7][C.!P0]< Set up for Chapter heading text
>[FB]Appendix [*TCNUM][FR]/C< Print "Appendix n"
>[FB][*TTITLE][FR]/C< And the title beneath it
>[*TRSTR][VA36]/L< Reset for normal text
>=]/Z<
------------------------------------------------------------------------
BEGIN Start typeset output
>[*COR:BEGIN=[ZSG4,1]< Set running foot back
>[ZUD1][ZXD1,-1]< Suppress initial page feed
>[*THV]< First title, etc.
>[ZVD1]< Restore page feed value
>=]/Z<
------------------------------------------------------------------------
BL n Skip "n" * 12 points
>[*COR:BL=[*TBOL]< Make sure at start of line
>[ZXT1,@]< Read "number" of lines
>[ZMT1,12][VA!T1]< Advance that far
>=]/Z<
------------------------------------------------------------------------
CH n,title Set chapter number "n" with title "title"
>[*COR:CH=[*TBOL]< Make sure line is ended
>[ZXG0,1]< Flag in chapter/appendix
>[*COR:TCNUM=@=]< Set text of chapter/appendix number
>[*TITLE]< Define new title
>[*COR:TSUBTT==]< Clear subtitle
>[*THL0]< Clear all header-level information
>[ZGG2,TZXG2]< Get [*FT] setting for running head
>[ZZP][*PGI]< Advance to new page
>< This may unfortunately cause a blank page
>< if the [*TBOL] above terminated the pre-
>< ceding page, but it must be done this way
>[ZGG4,TZXG4]< Get [*FT] setting for running foot
>[ZZG1][ZZG3]< Reset [*FT]
>[*TSAVE][PR!P6,!P7][C.!P0]< Set up for Chapter heading text
>[FB]Chapter [*TCNUM][FR]/C< Print "Chapter n"
>[FB][*TTITLE][FR]/C< Print title beneath that
>[*TRSTR][VA36]/L< Reset for normal text
>=]/Z<
------------------------------------------------------------------------
COL n,g Set multiple columns (note this command
resets both the left and right margins)
n = Number of columns
g = Gutter (p.p's) between columns
>[*COR:COL=[ZXC2,@]< Pickup number of columns
>[ZXC1,@]< Pickup column gutter
>[*TCOLST][*TCOLSX]< Setup for text columns
>[ZXI0,C0][ZZI1]< Reset left and right margins ([*TCALIR] etc.)
>=]/Z<
------------------------------------------------------------------------
ELS End list
>[*COR:ELS=[*TBOL]< Insure at begining of a line
>[ZZL0]< Flag between lists leading
>[ZSI5,1][ZXT1,I5]< Decrement lists nesting level
>[ZET1,TLE0]< Set [*LE] for level 0 (illegal)
>[ZST1,1][ZET1,TLE1]< Set [*LE] for level 1
>[ZST1,1][ZET1,TLE2]< Set [*LE] for level 2
>[ZST1,1][ZET1,TLE3]< Set [*LE] for level 3
>[ZST1,1][ZET1,TLE4]< Set [*LE] for level 4
>[*TCALIL][IL.!T1]< Set new left indent as appropriate
>[*TCALIR][IR.!T1]< Set new right indent as appropriate
>=]/Z<
------------------------------------------------------------------------
END End of typeset text, clean up
>[*COR:END=[*TBOL]< Ensure at begining of line
>[VC%][C.!P0][I%]< Clear world
>[ZGG4,TFOOTD]< Do a running foot if enabled
>[*TDEND]< Do any device-specific end of take clean up
>=]/Z<
------------------------------------------------------------------------
ERROR Increment error counter, print "?"
>[*COR:ERROR=[*TBOL]< Make sure at start of line
>[ZXS9,$E][ZIS9][ME!S9]< Increment JUSTIF error counter
>/L? < Prefix error text
>=]/Z<
------------------------------------------------------------------------
FT Put running head on first page
>[*COR:FT=[ZXG1,1]< Notify [*CH] & [*AX]
>[ZXG2,1]< Notify [*THV]
>=]/z<
------------------------------------------------------------------------
HL1 Header Header level 1 text with header "Header"
>[*COR:HL1=[ZIH0]< Count times reentered
>[*THL1]< Stuff too big to fit in definition here
>[*TBOL]< Now, make sure on a new line
>[ZSH1,H0]< Allow for reentrancy
>[ZXT1,5][ZMT1,P3]< TP of 5 lines with a
>[ZXT2,2][ZMT2,P3]< Skip of 2 lines
>[*TTP]< Make sure have room on page
>[FB][ZNG0,TCNUM][ZNG0,TDOT]< Chapter number if in chapter/appendix
>[ZAH1].0< Header level one numbering
> [*TTHL1][FR]/L/L< Now print the header (in bold face)
>[ZXH0,-1]=]/Z< HL command now processed
------------------------------------------------------------------------
HL2 Header Header level 2 text
>[*COR:HL2=[ZIH0]< Count times reentered
>[*COR:TTHL2=@=]< Save the HL2 text
>[ZIH2]< Increment header level
>[ZZH3][*COR:TTHL3==]< Clear header level 3
>[ZZH4][*COR:TTHL4==]< Clear header level 4
>[ZZH5][*COR:TTHL5==]< Clear header level 5
>[*TBOL]< Now, make sure at begining of line
>[ZSH2,H0]< Allow for reentrancy
>[ZXT1,4][ZMT1,P3]< TP of 4 lines with a
>[ZXT2,1][ZMT2,P3]< Skip of 1 line
>[*TTP]< Make sure have room on pages
>[ZNG0,TCNUM][ZNG0,TDOT]< Chapter number if in chapter/appendix
>[ZAH1].[ZAH2]< Header level 2 numbering
> [*TTHL2]/L/L< List the text body
>[ZXH0,-1]=]/Z< HL2 command finished
------------------------------------------------------------------------
HL3 Header Header level 3 text
>[*COR:HL3=[ZIH0]< Count times reentered
>[*COR:TTHL3=@=]< Save the HL3 text
>[ZIH3]< Increment header level
>[ZZH4][*COR:TTHL4==]< Clear header level 4
>[ZZH5][*COR:TTHL5==]< Clear header level 5
>[*TBOL]< Now, make sure at begining of line
>[ZSH3,H0]< Allow for reentrancy
>[ZXT1,3][ZMT1,P3]< TP of 3 lines with a
>[ZXT2,P3]< Skip of only 1 line
>[*TTP]< Make sure room on page
>[ZNG0,TCNUM][ZNG0,TDOT]< Chapter number if in chapter/appendix
>[ZAH1].[ZAH2].[ZAH3]< Header level 3 numbering
> [*TTHL3]/L< Issue the text body
>[ZXH0,-1]=]/Z< HL3 command finished
------------------------------------------------------------------------
HL4 Header Header level 4 text
>[*COR:HL4=[ZIH0]< Count times reentered
>[*COR:TTHL4=@=]< Save the HL4 text
>[ZIH4]< Increment header level
>[ZZH5][*COR:TTHL5==]< Clear header level 5
>[*TBOL]< Now, make sure at begining of line
>[ZSH4,H0]< Allow for reentrancy
>[ZXT1,2][ZMT1,P3]< TP of 2 lines with a
>[ZXT2,P3]< Skip of 1 line
>[*TTP]< Make sure room on page
>[ZNG0,TCNUM][ZNG0,TDOT]< Chapter number if in chapter/appendix
>[ZAH1].[ZAH2].[ZAH3].[ZAH4]< Header level 4 numbering
> [*TTHL4] - < Issue text body
>[ZXH0,-1]=]/Z< HL4 command finished
------------------------------------------------------------------------
HL5 Header Header level 5 text
>[*COR:HL5=[ZIH0]< Count times reentered
>[*COR:TTHL5=@=]< Save the HL5 text
>[ZIH5]< Increment header level
>[*TBOL]< Now, make sure at begining of line
>[ZSH5,H0]< Adjust header level around reentrancy
>[ZXT1,2][ZMT1,P3]< TP of 2 lines with a
>[ZXT2,P3]< Skip of 1 line
>[*TTP]< Make sure room on page
>[ZNG0,TCNUM][ZNG0,TDOT]< Chapter number if in chapter/appendix
>[ZAH1].[ZAH2].[ZAH3].[ZAH4].< Higher level numbering
>[ZAH5]< Header level 5 numbering
> [*TTHL5] - < Issue text body
>[ZXH0,-1]=]/Z< HL5 command finished
------------------------------------------------------------------------
I n Indent "n" p.p's from left (one-shot)
>[*COR:I=[*TBOL][ZXT1,@]< Read indent amount
>[HL.!T1,0,1]< Indent one line
>=]/Z<
------------------------------------------------------------------------
IVLS i,j,k,l,m Set list parameters
i p.p's indent for each [*LS]
j inter-list extra leading
k inter-list t.p. (lines after "j")
l intra-list extra leading
m intra-list t.p. (lines after "l")
>[*COR:IVLS=[ZXI4,@]< Indent value in p.p's for each [*LS] nesting
>[ZXL6,@]< Inter-list (between lists) extra leading
>[ZXL7,@]< Inter-list test page (in addition to L6)
>[ZXL8,@]< Intra-list (between list items) extra leading
>[ZXL9,@]< Intra-list test page (in addition to L8)
>=]/Z<
------------------------------------------------------------------------
IVTB i, t, v, g Set table sub-column parameters
i indent p.p's
t test page p.p's
v leading between entries
g gutter between sub-columns
>[*COR:IVTB=[ZXJ9,@]< Pickup table indent
>[ZXJ8,@]< Pickup test page value
>[ZXJ7,@]< Pickup (extra) leading between entries
>[ZXJ6,@]< Pickup sub-column gutter
>=]/Z<
------------------------------------------------------------------------
LALL List macro and command expansions
>[*COR:LALL=[ZPL,2]< Bump nesting count of [*LALL]'s
>[ZGL,TMJON]< If .GE. 0 then turn on listing ([MJ])
>[ZSL,1]< Make register "L" contain true value
>=]/Z<
------------------------------------------------------------------------
LE List entry item follows
>[*COR:LE=< Not legal till see [*LS]
>[*ERROR]Not in a "List"/L/L< Issue error message
>=]/Z<
------------------------------------------------------------------------
LM n Set left margin to "n" p.p's from 0
>[*COR:LM=[ZXI1,@]< Remember new left margin
>[*TCALIL][IL.!T1]< Set new left indent
>=]/Z<
------------------------------------------------------------------------
LS Start a new list (recurses)
>[*COR:LS=[*TBOL]< Ensure at begining of a line
>[ZZL0]< Flag between lists leading
>[ZII5][ZXT1,I5]< Increment list level
>[ZST1,1][ZET1,TLE1]< Set for list level 1
>[ZST1,1][ZET1,TLE2]< Set for list level 2
>[ZST1,1][ZET1,TLE3]< Set for list level 3
>[ZST1,1][ZET1,TLE4]< Set for list level 4
>[ZST1,1][ZET1,TLE5]< Set for list level 5
>[*TCALIL][IL.!T1]< Set new left indent as appropriate
>[*TCALIR][IR.!T1]< Set new right indent as appropriate
>=]/Z<
------------------------------------------------------------------------
NHD No running head (but keep paging)
>[*COR:NHD=[ZXG2,-9999999999]< No running head (but keep paging)
>=]/Z<
------------------------------------------------------------------------
NLV n,m,o,p,q Set header level to "n.m.o.p.q"
>[*COR:NLV=[ZXH1,@]< Load header level 1
>[ZXH2,@]< Load header level 2
>[ZXH3,@]< Load header level 3
>[ZXH4,@]< Load header level 4
>[ZXH5,@]< Load header level 5
>=]/Z<
------------------------------------------------------------------------
NM n Set page number to "n", enable paging
>[*COR:NM=[ZXP,@]< Set new page number
>[*PAGING]< Enable paging
>=]/Z<
------------------------------------------------------------------------
NNM Turn off page numbering
>[*COR:NNM=[ZZG7]< No page numbers on running head
>=]/Z<
------------------------------------------------------------------------
NOTE note,text Print "note" bold centered, text
>[*COR:NOTE=[*TBOL]< Make sure at nice place
>[ZII3]< Increment [*NOTE] nesting level
>[*TCALIL][IL.!T1]< New left indent
>[*TCALIR][IR.!T1]< New right indent
>[ZXT1,P3][ZMT1,5]< Test page of 5 lines
>[ZXT2,P3][*TTP]< With one blank line before "note"
>[FB]@[FR]/C/L< Print "NOTE" or whatever in centered bold
>@< The note text itself
>[*TBOL]< Make sure last line terminated
>[ZSI3,1]< Decrement nesting level
>[*TCALIL][IL.!T1]< Reset left indent
>[*TCALIR][IR.!T1]< Reset right indent
>[ZXT1,P3][ZMT1,3]< Test page to make sure not too close
>[ZXT2,P3][*TTP]< To bottom of page
>=]/Z<
------------------------------------------------------------------------
NPA Turn off paging completely
Note that [*AX] and [*CH] reset this
>[*COR:NPA=[VC9999999999]< Set [FB]HUGE[FR] page
>=]/Z<
------------------------------------------------------------------------
NRFOOT Turn off running feet
>[*COR:NRFOOT=[ZXG4,-999999999]<Turn off running feet
>=]/Z<
------------------------------------------------------------------------
NRHEAD Turn off running head(s)
>[*COR:NRHEAD=[ZXG2,-999999999]<Turn off running head(s)
>=]/z<
------------------------------------------------------------------------
NST Turn off subtitles in running head(s)
>[*COR:NST=[ZZG8]< No subtitles on running head(s)
>=]/Z<
------------------------------------------------------------------------
NTI Turn off titles, subtitles in running head(s)
>[*COR:NTI=[ZZG8][ZZG9]< No titles, subtitles on running head(s)
>=]/Z<
------------------------------------------------------------------------
PARA i, s, t Set paragraphing parameters:
Indent "i" p.p's;
Skip "s" points;
Test Page "t" points.
>[*COR:PARA=[ZXQ0,@]< Read in paragraph indent
>[ZXQ1,@]< Read in skip value
>[ZXQ2,@]< Get test page values
>[IP.!Q0,.!Q1]< Tell JUSTIF (TP not yet implemented)
>=]/Z<
------------------------------------------------------------------------
PG Force a new page
>[*COR:PG=[ZXC,1][VB]< Force premature page break at next line
>=]/Z<
------------------------------------------------------------------------
PGI Force a new page immediately
(this defeats allowing following [*HLn]
to provide running header information)
>[*COR:PGI=[ZXC,1][VB]/L< Force premature page break immediately
>=]/Z<
------------------------------------------------------------------------
PGCOL Force a new column
>[*COR:PGCOL=[VB]< Force premature column break
>=]/Z<
------------------------------------------------------------------------
PLCHAP points,leading Pointsize & leading for chap/app
(Must be issued from regular text)
>[*COR:PLCHAP=[ZXP6,@]< Read in pointsize for chapter titles
>[ZXP7,@]< And read in leading
>=]/Z<
------------------------------------------------------------------------
PLFOOT points,leading Pointsize & leading for running feet
(Must be issued from regular text)
>[*COR:PLFOOT=[ZXP8,@]< Read in pointsize for running feet
>[ZXP9,@]< And read in leading
>=]/Z<
------------------------------------------------------------------------
PLHEAD points,leading Pointsize & leading for running head(s)
(Must be issued from regular text)
>[*COR:PLHEAD=[ZXP4,@]< Read in pointsize for running head(s)
>[ZXP5,@]< And read in leading
>=]/Z<
------------------------------------------------------------------------
PLTEXT points,leading Pointsize & leading for regular text
(Must be issued from regular text)
>[*COR:PLTEXT=[ZXP2,@]< Read in pointsize for regular text
>[ZXP3,@]< And read in leading
>[PR!P2,!P3]< Set regular text parameters
>=]/Z<
------------------------------------------------------------------------
PS h, w Set page size "w" p.p's by "h" p.p's
(Does not include space for any running feet,
resets both left and right margins)
>[*COR:PS=[*TBOL]< Insure at begining of fresh line
>[ZXS1,P1]< Old height of page
>[ZXP1,@]< New height of page
>[ZXS2,$M][ZDS2,$Y]< Remainder of old page
>[ZXT1,P1][ZPT1,S2][ZST1,S1]< Current difference of old and new page
>[ZXP0,@][CM.!P0]< Set new width of page
>[ZGT1,TVC]< If .GT. 0 then still room left on page
>[ZET1,PG]< If .EQ. 0 then time for a new page
>[ZLT1,PG]< If .LT. 0 then time for a new page
>[ZGT1,TCOLST]< If not new page, set columns
>[ZXI0,C0][ZZI1]< Reset left and right margin
>< (Necessary for multi-columning)
>=]/Z<
------------------------------------------------------------------------
RFOOT Turn on running feet
>[*COR:RFOOT=[ZXG4,1]< Turn on running feet
>=]/Z<
------------------------------------------------------------------------
RHEAD Turn on running head(s)
>[*COR:RHEAD=[ZXG2,1]< Turn on running head(s)
>=]/Z<
------------------------------------------------------------------------
RM n Set right margin to "n" p.p's from 0
>[*COR:RM=[ZXI0,@]< Read in indent amount
>[*TCALIR][IR.!T1]< Set new right indent
>=]/Z<
------------------------------------------------------------------------
SK n Skip "n" lines
>[*COR:SK=[*TBOL]< Start fresh line
>[AR@][*TEOL]< Skip "n" lines
>=]/Z<
------------------------------------------------------------------------
SP v Set vertical leading to "v" points
>[*COR:SP=[ZXP3,@][V!P3]< Set and remember new stored leading
>=]/Z<
------------------------------------------------------------------------
SUB n Print "n" as subscript
>[*COR:SUB=[ZXT5,$P][ZXT6,$V]< Get current pointsize and leading
>[ZU$P]< Save pointsize for moment
>[ZMT5,60][ZDT5,10000]< T5:=60% of current pointsize
>[ZMT6,D2][ZDT6,10000]< T6:=(D2)% of current leading
>[PR!T5][EJ-!T6]< Smaller print, lower baseline
>[ZET6,TLPRN]< If no baseline then type "(" instead
>@< The subscript itself
>[ZET6,TRPRN]< If no baseline then type ")" instead
>[EJ%][ZVT5][ZDT5,100][PR!T5]< Restore world
>=]/Z<
------------------------------------------------------------------------
SUBTTL text Set page header subtitle to "text"
>[*COR:SUBTTL=<
>[*COR:TSUBTT=@=]< Define new subtitle text
>=]/Z<
------------------------------------------------------------------------
SUP n Print "n" as superscript
>[*COR:SUP=[ZXT5,$P][ZXT6,$V]< Get current pointsize and leading
>[ZU$P]< Save pointsize for moment
>[ZMT5,60][ZDT5,10000]< T5:=60% of current pointsize
>[ZMT6,D2][ZDT6,10000]< T6:=(D2)% of current leading
>[PR!T5][EJ!T6]< Smaller print, lower baseline
>[ZET6,TLPRN]< If no baseline then type "(" instead
>@< The superscript itself
>[ZET6,TRPRN]< If no baseline then type ")" instead
>[EJ%][ZVT5][ZDT5,100][PR!T5]< Restore world
>=]/Z<
------------------------------------------------------------------------
TABLE2 w1, w2 Set for two column table
w1 width of sub-column 1
w2 width of sub-column 2
>[*COR:TABLE2=[ZXJ1,@]< Pickup width of sub-column 1
>[ZXJ2,@]< Pickup width of sub-column 2
>[ZZJ3][ZZJ4][ZZJ5]< Clear others
>=]/Z<
------------------------------------------------------------------------
TABLE3 w1, w2, w3 Set for three column table
w1 width of sub-column 1
w2 width of sub-column 2
w3 width of sub-column 3
>[*COR:TABLE3=[ZXJ1,@]< Pickup width of sub-column 1
>[ZXJ2,@][ZXJ3,@]< Pickup widths of subcolumns 2 and 3
>[ZZJ4][ZZJ5]< Clear the rest
>=]/Z<
------------------------------------------------------------------------
TABLE4 w1, w2, w3, w4 Set for four column table
w1 width of sub-column 1
w2 width of sub-column 2
w3 width of sub-column 3
w4 width of sub-column 4
>[*COR:TABLE4=[ZXJ1,@]< Pickup width of sub-column 1
>[ZXJ2,@][ZXJ3,@][ZXJ4,@]<Pickup widths of subcolumns 2, 3, and 4
>[ZZJ5]< Clear the rest
>=]/Z<
------------------------------------------------------------------------
TABLE5 w1, w2, w3, w4, w5 Set for four column table
w1 width of sub-column 1
w2 width of sub-column 2
w3 width of sub-column 3
w4 width of sub-column 4
>[*COR:TABLE5=[ZXJ1,@]< Pickup width of subcolumn 1
>[ZXJ2,@][ZXJ3,@][ZXJ4,@]<Pickup widths of subcolumns 2, 3, and 4
>[ZXJ5,@]< Pickup width of subcolumn 5
>=]/Z<
------------------------------------------------------------------------
TABS8 Set Tab stops every 8 "spaces"
>[*COR:TABS8=[T%]< First clear old tab stops
>[TS4.10,9.7,14.5,19.2,24.0,28.10,33.7,38.5,43.2,48.0,52.10,57.7,62.5,67.2,72.0,76.10]<
>=]/Z<
------------------------------------------------------------------------
TE2 t1, t2 Text entry for 2-sub-column table
t1 text for sub-column 1
t2 text for sub-column 2
>[*COR:TE2=[*TTEI]< Setup for table entry
>@< Text body of sub-column 1
>[ZXS1,J1][ZXS2,J2][*TTBLTE]< Set for table sub-column 2
>@< Text body of sub-column 2
>[*TTEND]< End of table entry, position past longest
>=]/Z<
------------------------------------------------------------------------
TE3 t1, t2, t3 Text entry for 3-sub-column table
t1 text for sub-column 1
t2 text for sub-column 2
t3 text for sub-column 3
>[*COR:TE3=[*TTEI]< Setup for table entry
>@< Text body of sub-column 1
>[ZXS1,J1][ZXS2,J2][*TTBLTE]< Set for table sub-column 2
>@< Text body of sub-column 2
>[ZXS1,J2][ZXS2,J3][*TTBLTE]< Set for table sub-column 3
>@< Text body of sub-column 3
>[*TTEND]< End of table entry, position past longest
>=]/Z<
------------------------------------------------------------------------
TE4 t1, t2, t3, t4 Text entry for 4-sub-column table
t1 text for sub-column 1
t2 text for sub-column 2
t3 text for sub-column 3
t4 text for sub-column 4
>[*COR:TE4=[*TTEI]< Setup for table entry
>@< Text body of sub-column 1
>[ZXS1,J1][ZXS2,J2][*TTBLTE]< Set for table sub-column 2
>@< Text body of sub-column 2
>[ZXS1,J2][ZXS2,J3][*TTBLTE]< Set for table sub-column 3
>@< Text body of sub-column 3
>[ZXS1,J3][ZXS2,J4][*TTBLTE]< Set for table sub-column 4
>@< Text body of sub-column 4
>[*TTEND]< End of table entry, position past longest
>=]/Z<
------------------------------------------------------------------------
TE5 t1, t2, t3, t4, t5 Text entry for 5-sub-column table
t1 text for sub-column 1
t2 text for sub-column 2
t3 text for sub-column 3
t4 text for sub-column 4
>[*COR:TE5=[*TTEI]< Setup for table entry
>@< Text body of sub-column 1
>[ZXS1,J1][ZXS2,J2][*TTBLTE]< Set for table sub-column 2
>@< Text body of sub-column 2
>[ZXS1,J2][ZXS2,J3][*TTBLTE]< Set for table sub-column 3
>@< Text body of sub-column 3
>[ZXS1,J3][ZXS2,J4][*TTBLTE]< Set for table sub-column 4
>@< Text body of sub-column 4
>[ZXS1,J4][ZXS2,J5][*TTBLTE]< Set for table sub-column 5
>@< Text body of sub-column 5
>[*TTEND]< End of table entry, position past longest
>=]/Z<
------------------------------------------------------------------------
TITLE text Set page header title to "text"
>[*COR:TITLE=<
>[*COR:TTITLE=@=]< Define new title text
>=]/Z<
------------------------------------------------------------------------
TP n, s Test column for at least "n" lines left
if no new column skip "s" lines
>[*COR:TP=[*TBOL]< Make sure at begining of line
>[ZXT1,@][ZMT1,P3]< T1:=t.p. value in points
>[ZXT2,@][ZMT2,P3]< T2:=skip value in points
>[*TTP]< Do the actual test page (column) work
>=]/Z<
------------------------------------------------------------------------
TPV v, s Test column for at least "v" points left
if no new column skip "s" points
>[*COR:TPV=[*TBOL]< Make sure at begining of line
>[ZXT1,@]< T1:=t.p. value in points
>[ZXT2,@]< T2:=skip value in points
>[*TTP]< Do the actual test page (column) work
>=]/Z<
------------------------------------------------------------------------
XALL Turn off macro and command listing
>[*COR:XALL=[ZSL,1]< Bump nesting count of [*SALL]'s
>[ZLL,TMJOFF]< If .LT. 0 then turn off listing ([MJ%])
>=]/Z<
------------------------------------------------------------------------
Internal usage macros
TBOL Make sure at begining of line
>[*COR:TBOL=/?< Make sure at begining of line
>=]/Z<
------------------------------------------------------------------------
TCALIL Calculate total left indent into T1
>[*COR:TCALIL=[ZXT1,I1]< Get left margin
>[ZXT2,I2][ZMT2,I3][ZPT1,T2]< Left indent for [*NOTE]
>[ZXT2,I4][ZMT2,I5][ZPT1,T2]< Left indent for [*LE]
>[ZPT1,J0]< Indent for table sub-column(s)
>=]/Z<
------------------------------------------------------------------------
TCALIR Calculate total right indent into T1
>[*COR:TCALIR=[ZXT1,C0]< Get column width
>[ZST1,I0]< Get indent to right margin
>[ZXT2,I2][ZMT2,I3][ZPT1,T2]< Right indent for [*NOTE]
>=]/Z<
------------------------------------------------------------------------
TCOLST Setup parameters for multi-columns
>[*COR:TCOLST=[ZXT1,C1]< Column gutter
>[ZMT1,C2][ZST1,C1]< T1 := total space devoted to gutter
>[ZXT2,P0][ZST2,T1]< T2 := total space available to text
>[ZDT2,C2][ZXC0,T2]< C0 := width of each column
>[C.!C0][VG.!C1]< Set column width and gutter
>=]/Z<
------------------------------------------------------------------------
TCOLSX Set column parameters
>[*COR:TCOLSX=<
>[ZXC,C2][C.!C0]< Set column width for text column(s)
>< (Must set column width before [VC] com-
>< mand; [VC] remembers widest column set,
>< which otherwise would be [C.!P0] above)
>[ZXT1,$M][ZDT1,$Y]< Calculate column length for text column(s)
>[VM7][VC%][VP7][VC!T1]< Set column length for text column(s)
>< (Must reset [VC%] so [VC] returns here;
>< [VC] remembers longest column set, which
>< otherwise would be from [VC!P1] above)
>[ZXC3,$U]< Remember total leading at start of column
>=]/Z<
------------------------------------------------------------------------
TCNUM Text for chapter/appendix level
>[*COR:TCNUM=< Initially blank
>=]/Z<
------------------------------------------------------------------------
TDASH Print "-"
>[*COR:TDASH=-< "-"
>=]/Z<
------------------------------------------------------------------------
TDOT Print "."
>[*COR:TDOT=.< "."
>=]/Z<
------------------------------------------------------------------------
TEOL Give forced end of line
>[*COR:TEOL=/L< Quad left will do for now
>=]/Z<
------------------------------------------------------------------------
TFACE Set to proper face in T1
>[*COR:TFACE=[ZCT1,10000]< Reduce to font number (ignore [FM])
>[ZXT2,T1][ZCT2,10]< T2:=subface index (1=italics, etc.)
>[ZST1,T2][F!T1]< T1:=master face font number
>[ZST2,1][ZET2,TFI]< If subface 1 then italics face
>[ZST2,1][ZET2,TFB]< If subface 2 then bold face
>[ZST2,1][ZET2,TFS]< If subface 3 then small caps face
>=]/Z<
------------------------------------------------------------------------
TFB Set bold face
>[*COR:TFB=[FB]< Bold face command
>=]/Z<
------------------------------------------------------------------------
TFFEED Do a logical page feed (seperation)
>[*COR:TFFEED=[ZED1,TLPFF]< Do form feed if available
>[ZXT2,D1][ZGT2,TVAT2]< Else do immediate lead 'tween pages
>[ZXQ,$U]/Z< Leading at start of page (text)
>=]/Z<
------------------------------------------------------------------------
TFI Set italics face
>[*COR:TFI=[FI]< Italics face command
>=]/Z<
------------------------------------------------------------------------
TFM Set face modify(ed)
>[*COR:TFM=[FM]< Face modify command
>=]/Z<
------------------------------------------------------------------------
TFOOTD Do a running foot
>[*COR:TFOOTD=<
>[F!D0][PR!P8,!P9]< Set for running foot text
>[ZXT1,$U][ZST1,Q][ZDT1,$Y]< T1:=total points so far this page
>[ZXT2,P1][ZST2,T1][VA!T2]< Position for running foot
>[*TFOOTR]< Print the running foot
>=]/Z<
------------------------------------------------------------------------
TFS Set small caps face
>[*COR:TFS=[FS]< Small caps face command
>=]/Z<
------------------------------------------------------------------------
TFU Set face underline(d)
>[*COR:TFU=[FU]< Face underline command
>=]/Z<
------------------------------------------------------------------------
THEADB Force immediate blank running head
>[*COR:THEADB=<
>[ZUG7][ZUG8][ZUG9]< Save current header setting
>[ZZG7][ZZG8][ZZG9]< Turn off all parts of head
>[*THEADD]< Do the running head
>[ZVG9][ZVG8][ZVG7]< Now restore header settings
>=]/Z<
------------------------------------------------------------------------
THEADD Do a running head
>[*COR:THEADD=<
>[F!D0][PR!P4,!P5]< Set for page header text
>[*THEADR]< Print the running head
>=]/Z<
------------------------------------------------------------------------
THEADR Print the running head text
>[*COR:THEADR=[ZNG9,TTITLE]/Q< Print title if titling
>[ZNG7,TPAGE][ZNG7,TPAGNO]/R< Print page number if numbering
>[ZNG8,TSUBTT]/L/L/L< Print subtitle if subtitling
>=]/Z<
------------------------------------------------------------------------
THL0 Reset all header level information
>[*COR:THL0=[ZXH0,-1]< Just to make sure . . .
>[ZZH1][*COR:TTHL1==]< Clear header level 1
>[ZZH2][*COR:TTHL2==]< Clear header level 2
>[ZZH3][*COR:TTHL3==]< Clear header level 3
>[ZZH4][*COR:TTHL4==]< Clear header level 4
>[ZZH5][*COR:TTHL5==]< Clear header level 5
>=]/Z<
------------------------------------------------------------------------
THL1 Helper for HL1
>[*COR:THL1=[*COR:TTHL1=@=]< Save the HL1 text
>[*COR:TSUBTT=[*TTHL1]=]< And give a free [*SUBTTL] a la RUNOFF
>[ZIH1]< Increment header level
>[ZZH2][*COR:TTHL2==]< Clear header level 2
>[ZZH3][*COR:TTHL3==]< Clear header level 3
>[ZZH4][*COR:TTHL4==]< Clear header level 4
>[ZZH5][*COR:TTHL5==]< Clear header level 5
>< The levels are advanced before the [*TBOL]
>< in case the last command was a [*PG]
>=]/Z<
------------------------------------------------------------------------
THV Paging macro (set by [VH command)
>[*COR:THV=[*TSAVE]< Save the state of the world
>[VM7][VC%][VP7][I%][C.!P0]< Turn off all columning or paging
>[ZGG4,TFOOTD]< Do running foot if set
>[*TFFEED]< Advance to "top of next page"
>[VC!P1]< Set size (length) of this page
>[ZIP]< Increment the page number
>[ZEG2,THEADB]< Do blank header if (e.g.) [*CH]
>[ZGG2,THEADD]< Otherwise do a normal running header
>[ZZG1][ZZG3]< Reset [*FT] anti-blanker
>[ZIG2][ZIG4]< Bump [*CH] blanker
>[*TRSTR]< Restore the state of the world
>=]/Z<
------------------------------------------------------------------------
THVCL End of column macro (calls THV)
>[*COR:THVCL=[ZSC,1][ZEC,THV]< Call THV macro if end of page
>=]/Z<
------------------------------------------------------------------------
TLE0 Define [*LE] for list level 0 (illegal)
>[*COR:TLE0=[*COR:LE=< Define the [*LE] macro
>[*ERROR]Not in a "List"/L/L< Issue error message
>=]< End of [*LE] macro definition
>[ZZL1]< Reset list level 1 counter
>[ZXT1,P3][ZMT1,L7][ZPT1,L6]< Test page value
>[ZXT2,L6][*TTP]< And skip value
>[ZZT1]< Clear T1 for [*LS]/[*ELS]
>=]/Z<
------------------------------------------------------------------------
TLE1 Define [*LE] macro for list level 1
>[*COR:TLE1=[*COR:LE=< Define [*LE] macro
>[*TBOL]< Insure at start of a new line
>[ZXT1,P3][ZMT1,L7][ZPT1,L6]< Inter-list test page value
>[ZXT2,L6][ZEL0,TTP]< Do inter-list leading if first item
>[ZXT1,P3][ZMT1,L9][ZPT1,L8]< Intra-list test page value
>[ZXT2,L8][ZGL0,TTP]< Do intra-list leading if otherwise
>[*TBOL]< Cause page break if one is pending
>[ZIL0]< Note we are now "otherwise" until [*LS]/[*ELS]
>[HL-3,0,1]< Put list item number out 3 picas
>[ZIL1][ZAL1]./Z< Number this list item
>=]< End of [*LE] macro definition
>[ZZL2]< Reset next lower level's counter
>[ZZT1]< Clear T1 for [*LS]/[*ELS]
>=]/Z<
------------------------------------------------------------------------
TLE2 Define [*LE] macro for list level 2
>[*COR:TLE2=[*COR:LE=< Define [*LE] macro
>[*TBOL]< Insure at start of a new line
>[ZXT1,P3][ZMT1,L7][ZPT1,L6]< Inter-list test page value
>[ZXT2,L6][ZEL0,TTP]< Do inter-list leading if first item
>[ZXT1,P3][ZMT1,L9][ZPT1,L8]< Intra-list test page value
>[ZXT2,L8][ZGL0,TTP]< Do intra-list leading if otherwise
>[ZIL0]< Note we are now "otherwise" until [*LS]/[*ELS]
>[HL-3,0,1]< Put list item number out 3 picas
>[ZIL2][ZAL2]./Z< Number this list item
>=]< End of [*LE] macro definition
>[ZZL3]< Reset next lower level's counter
>[ZZT1]< Clear T1 for [*LS]/[*ELS]
>=]/Z<
------------------------------------------------------------------------
TLE3 Define [*LE] macro for list level 3
>[*COR:TLE3=[*COR:LE=< Define [*LE] macro
>[*TBOL]< Insure at start of a new line
>[ZXT1,P3][ZMT1,L7][ZPT1,L6]< Inter-list test page value
>[ZXT2,L6][ZEL0,TTP]< Do inter-list leading if first item
>[ZXT1,P3][ZMT1,L9][ZPT1,L8]< Intra-list test page value
>[ZXT2,L8][ZGL0,TTP]< Do intra-list leading if otherwise
>[ZIL0]< Note we are now "otherwise" until [*LS]/[*ELS]
>[HL-3,0,1]< Put list item number out 3 picas
>[ZIL3][ZAL3]./Z< Number this list item
>=]< End of [*LE] macro definition
>[ZZL4]< Reset next lower level's counter
>[ZZT1]< Clear T1 for [*LS]/[*ELS]
>=]/Z<
------------------------------------------------------------------------
TLE4 Define [*LE] macro for list level 4
>[*COR:TLE4=[*COR:LE=< Define [*LE] macro
>[*TBOL]< Insure at start of a new line
>[ZXT1,P3][ZMT1,L7][ZPT1,L6]< Inter-list test page value
>[ZXT2,L6][ZEL0,TTP]< Do inter-list leading if first item
>[ZXT1,P3][ZMT1,L9][ZPT1,L8]< Intra-list test page value
>[ZXT2,L8][ZGL0,TTP]< Do intra-list leading if otherwise
>[ZIL0]< Note we are now "otherwise" until [*LS]/[*ELS]
>[HL-3,0,1]< Put list item number out 3 picas
>[ZIL4][ZAL4]./Z< Number this list item
>=]< End of [*LE] macro definition
>[ZZL5]< Reset next lower level's counter
>[ZZT1]< Clear T1 for [*LS]/[*ELS]
>=]/Z<
------------------------------------------------------------------------
TLE5 Define [*LE] macro for list level 5
>[*COR:TLE5=[*COR:LE=< Define [*LE] macro
>[*TBOL]< Insure at start of a new line
>[ZXT1,P3][ZMT1,L7][ZPT1,L6]< Inter-list test page value
>[ZXT2,L6][ZEL0,TTP]< Do inter-list leading if first item
>[ZXT1,P3][ZMT1,L9][ZPT1,L8]< Intra-list test page value
>[ZXT2,L8][ZGL0,TTP]< Do intra-list leading if otherwise
>[ZIL0]< Note we are now "otherwise" until [*LS]/[*ELS]
>[HL-3,0,1]< Put list item number out 3 picas
>[ZIL5][ZAL5]./Z< Number this list item
>=]< End of [*LE] macro definition
>[ZZT1]< Clear T1 for [*LS]/[*ELS]
>=]/Z<
------------------------------------------------------------------------
TLPFF Do a line-printer (ASCII) form feed
>[*COR:TLPFF=+&< Print form feed character
>=]/Z<
------------------------------------------------------------------------
TLPRN Print "("
>[*COR:TLPRN=(< "(" CHARACTER
>=]/Z<
------------------------------------------------------------------------
TMJOFF Do [MJ%]
>[*COR:TMJOFF=[MJ%]< Turn off command and macro listing
>=]/Z<
------------------------------------------------------------------------
TMJON Do [MJ]
>[*COR:TMJON=[MJ]< Turn on command and macro listing
>=]/Z<
------------------------------------------------------------------------
TNPGVA Do a skip ([VA!T2]) if not at top of page
>[*COR:TNPGVA=[ZXT1,C3]< Leading at start of this text column(s)
>[ZST1,$U]< Less leading at current position
>[ZLT1,TVAT2]< If .LT. 0 then not at top of column(s)
>[ZXT1,-1]< Insure T1 negative (e.g., [*TTP])
>=]/Z<
------------------------------------------------------------------------
TPAGE Print "Page"
>[*COR:TPAGE=Page < "Page"
>=]/Z<
------------------------------------------------------------------------
TPAGNO Print page number
>[*COR:TPAGNO=[ZGG0,TCNUM]< If chapter/appendix then chapter number
>[ZGG0,TDASH][ZAP]< Print current page number
>=]/Z<
------------------------------------------------------------------------
TPOSB Position to bottom of page (running foot)
>[*COR:TPOSB=[ZXT1,P1]< Total page depth
>[ZPT1,Q]< Total leading at end of page
>[ZST1,$U]< T1 := amount of leading left this page
>[VA!T1]/Z< Position to bottom of [*PS] page
>=]/Z<
------------------------------------------------------------------------
TRPRN Print ")"
>[*COR:TRPRN=)< ")"
>=]/Z<
------------------------------------------------------------------------
TRSTR Restore state of world to normal
(Called only after [*TSAVE])
>[*COR:TRSTR=[ZVT1][*TFACE]< Restore face to user-specified
>[PR!P2,!P3]< Re-set pointsize and leading
>[*TCOLSX]< Re-set column parameters
>[*TCALIL][IL.!T1]< Re-set left indent
>[*TCALIR][IR.!T1]< Re-set right indent
>=]/Z<
------------------------------------------------------------------------
TSAVE Save state of world
>[*COR:TSAVE=[ZU$F]< Save current face
>=]/Z<
------------------------------------------------------------------------
TSUBTT Text body of subtitle
>[*COR:TSUBTT=< Initially null (no subtitle seen yet)
>=]/Z<
------------------------------------------------------------------------
TTBLTE Advance to next table sub-column
>[*COR:TTBLTE=[*TBOL]< Ensure at start of new line
>[*TTBLTV]< Check for longest sub-column
>[ZPJ0,S1][ZPJ0,J6]< Advance sub-column indent measure
>[*TCALIL][IL.!T1]< Set new sub-column indent
>[ZPT1,S2][C.!T1]< Set width for table sub-column
>[VP8]< Position for next table sub-column
>=]/Z<
------------------------------------------------------------------------
TTBLTV Test for longest table sub-column
>[*COR:TTBLTV=[ZXT1,$U]< Total leading so far
>[ZST1,J][ZGT1,TTBLVM]< Mark longest table sub-column
>=]/Z<
------------------------------------------------------------------------
TTBLVM Mark longest table sub-column
>[*COR:TTBLVM=[ZXJ,$U]< Remember leading at longest point
>[VM9]< And markpoint so we can [VP] later
>=]/Z<
------------------------------------------------------------------------
TTEI Internal [*TE?] initializer
>[*COR:TTEI=[*TBOL]< Ensure at start of line
>[ZXT1,J8][ZZT2][ZGT1,TTP]< Do test page
>[*TBOL]< Trip the [VH macro if column break pending
>[VM8]< Mark vertical start of sub-column
>[ZXJ,$U]< Longest sub-column so far
>[ZXJ0,J9][*TCALIL][IL.!T1]< Set initial table indent
>[ZPT1,J1][C.!T1]< Set sub-column 1 column width
>=]/Z<
------------------------------------------------------------------------
TTEND End of TE? commands
>[*COR:TTEND=< Common commands to end TE? commands
>[*TBOL][*TTBLTV][VP9]< Check and position to longest sub-column
>[ZXT1,J8][ZXT2,J7][ZGT1,TTP]< Do any between-entry leading
>[ZZJ0][*TCALIL][IL.!T1]< Reset left margin for normal text
>[C.!C0]< Reset text column width
>=]/Z<
------------------------------------------------------------------------
TTHL1 Text body of HL1
>[*COR:TTHL1=< Initially null
>=]/Z<
------------------------------------------------------------------------
TTHL2 Text body of HL2
>[*COR:TTHL2=< Initially null
>=]/Z<
------------------------------------------------------------------------
TTHL3 Text body of HL3
>[*COR:TTHL3=< Initially null
>=]/Z<
------------------------------------------------------------------------
TTHL4 Text body of HL4
>[*COR:TTHL4=< Initially null
>=]/Z<
------------------------------------------------------------------------
TTHL5 Text body of HL5
>[*COR:TTHL5=< Initially null
>=]/Z<
------------------------------------------------------------------------
TTSDS Print " - "
>[*COR:TTSDS= - < The advertised " - "
>=]/Z<
------------------------------------------------------------------------
TTITLE Text body of title
>[*COR:TTITLE=< Initially null (no title seen yet)
>=]/Z<
------------------------------------------------------------------------
TTP Internal test page (column) worker
T1:=t.p. value in points
T2:=skip value in points
>[*COR:TTP=[ZMT1,$Y][ZST1,$M]< T1:=negative of room left
>[ZLT1,TNPGVA][ZET1,TNPGVA]< If .LE. 0 then room on column, do SKIP
>[ZGT1,PGCOL]< If .GT. 0 then new column, no SKIP
>=]/Z<
------------------------------------------------------------------------
TVAT2 Do [VA!T2]
>[*COR:TVAT2=[VA!T2]< Do [VA!T2] command
>=]/Z<
------------------------------------------------------------------------
TVC Do [VC!T1]
>[*COR:TVC=[VC!T1]< Set new rest of page
>=]/Z<
------------------------------------------------------------------------
TZXG2 Do [ZXG2,G1]
>[*COR:TZXG2=[ZXG2,G1]< Do the [ZXG2,G1] command
>=]/Z<
------------------------------------------------------------------------
TZXG4 Do [ZXG4,G3]
>[*COR:TZXG4=[ZXG4,G3]< Do the [ZXG4,G3] command
>=]/Z<
------------------------------------------------------------------------
Initialization
>[ZXG2,0]< Default is no first title
>[*THL0]< Initialize header-level counters
>[ZXG0,0]< No chapter or appendices yet
>[ZXG7,1][ZXG8,1][ZXG9,1]< Print page number, title, subtitles
>[ZXI0,42.0]< Right margin of 42 picas (7 inches)
>[ZXI1,0]< Left margin of 0 picas
>[ZXI2,3.0][ZXI3,0]< [*NOTE] indent of 3 picas, none yet seen
>[ZXI4,3.0][ZXI5,0]< [*LE] indent of 3 picas, none yet seen
>[ZXL6,1.0][ZXL7,2]< Default inter-list leading and t.p.
>[ZXL8,0.0][ZXL9,1]< Default intra-list leading and t.p.
>[ZXP,0]< Initial page number
>[ZXP0,42.0]< Page size of 42 picas wide
>[ZXP1,60.0]< By 60 picas (10 inches, 60 lines) long
>[ZXP2,10][ZXP3,12]< Regular text at 10 on 12
>[ZXP4,10][ZXP5,12]< Page headers at 10 on 12
>[ZXP6,16][ZXP7,18]< Chapter/appendix titles at 16 on 18
>[ZXP8,10][ZXP9,12]< Footnotes at 10 on 12
>[ZXC0,P0][ZXC1,3.0][ZXC2,1]< Initially one column as wide as page size
>[ZXQ0,3.0]< Paragraph indent of 3 picas
>[ZXQ1,12]< With one blank line between paragraphs
>[ZXQ2,36]< And a test page of at least 36 points
>[ZXJ6,3.0]< Table "gutter" of 3 picas
>[ZXJ7,0]< No extra spacing between table entries
>[ZXJ8,3.0]< Table entry test page of 3 picas
>[ZXJ9,0]< No special table indent
>[*TABS8]< Setup "normal" tab stops
>[*RHEAD][*NRFOOT]< Default is running head, no running foot
>[PR!P2,!P3]< Set pointsize and leading
>[CM.!P0][*TCOLST]< Set column width information
>[VC!P1]< Set column depth
>[*TCALIL][IL.!T1]< Set any left indent
>[*TCALIR][IR.!T1]< Set any right indent
>[VHTHVCL]< Start of column macro
>