* chem.pl: Prepare for groff version 1.20.
[s-roff.git] / contrib / mom / om.tmac
blob7374f9367e1517c3d67aa58d8598834d6cc15bc1
1 .\" om.tmac
2 .ig
3 Mom -- a typesetting/document-processing macro set for groff.
5 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007,
6 2008 Free Software Foundation, Inc.
7      Written by Peter Schaffter (pschaffter@magma.ca)
9 This file is part of groff.
11 groff is free software; you can redistribute it and/or modify it under
12 the terms of the GNU General Public License as published by the Free
13 Software Foundation; either version 2, or (at your option) any later
14 version.
16 groff is distributed in the hope that it will be useful, but WITHOUT ANY
17 WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19 for more details.
21 You should have received a copy of the GNU General Public License along
22 with groff; see the file COPYING.  If not, write to the Free Software
23 Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
25 Version 1.5-c
26 -------------
27 Antoine de St-ExupĂ©ry asserted that elegance in engineering is
28 achieved not when there is nothing left to add, but when there is
29 nothing left to take away.
31 By those standards, mom is a Rube Goldberg contraption.  She was
32 created over the years while groff, and my understanding of it,
33 changed and evolved.  However, I'm a firm believer in "if it
34 ain't broke, don't fix it," so I'm leaving any major clean-up
35 of redundancies and whatnot for a rainy day.
37 Inasmuch as possible, macros that turn a feature on or off follow
38 a similar style.  Invoking the macro without an argument turns
39 the feature on.  Invoking it with any other argument turns it off.
40 Use of the argument OFF is recommended, but not required; users
41 may find other conventions preferable (e.g. NO, X, END, QUIT, etc.).
43 "<anything>" in the description of arguments that can be passed
44 to a macro means that any argument turns the feature off.
46 .\" %beginstrip%
48 \# ====================================================================
50 \# Check which version of groff is being run
51 .if (\n[.x]\n[.y] < 118) \
52 .   ab [mom]: You need GNU troff version 1.18 or higher to run this version of mom.
53 \# Check that GNU troff is being run
54 .if !\n[.g]=1 \
55 .   ab [mom]: The mom macros require that you be running GNU troff.
56 .if \n(.C \
57 .   ab [mom]: The groff mom macros do not work in compatibility mode.
58 \# Add supplementary styles
59 .sty \n[.fp] L       \"  Light Roman
60 .sty \n[.fp] LI      \"  Light Italic
61 .sty \n[.fp] LCD     \"  Light Condensed Roman
62 .sty \n[.fp] LCDI    \"  Light Condensed Italic
63 .sty \n[.fp] LEX     \"  Light Extended Roman
64 .sty \n[.fp] LEXI    \"  Light Extended Italic
65 .sty \n[.fp] CD      \"  Medium/Book Condensed Roman
66 .sty \n[.fp] CDI     \"  Medium/Book Condensed Italic
67 .sty \n[.fp] EX      \"  Medium/Book Extended Roman
68 .sty \n[.fp] EXI     \"  Medium/Book Extended Italic
69 .sty \n[.fp] DB      \"  DemiBold Roman
70 .sty \n[.fp] DBI     \"  DemiBold Italic
71 .sty \n[.fp] BCD     \"  Bold Condensed Roman
72 .sty \n[.fp] BCDI    \"  Bold Condensed Italic
73 .sty \n[.fp] BEX     \"  Bold Extended Roman
74 .sty \n[.fp] BEXI    \"  Bold Extended Italic
75 .sty \n[.fp] HV      \"  Heavy Roman
76 .sty \n[.fp] HVI     \"  Heavy Italic
77 .sty \n[.fp] HVCD    \"  Heavy Condensed Roman
78 .sty \n[.fp] HVCDI   \"  Heavy Condensed Italic
79 .sty \n[.fp] HVEX    \"  Heavy Extended Roman
80 .sty \n[.fp] HVEXI   \"  Heavy Extended Italic
81 .sty \n[.fp] BL      \"  Black Roman
82 .sty \n[.fp] BLI     \"  Black Italic
83 .sty \n[.fp] BLCD    \"  Black Condensed Roman
84 .sty \n[.fp] BLCDI   \"  Black Condensed Italic
85 .sty \n[.fp] BLEX    \"  Black Extended Roman
86 .sty \n[.fp] BLEXI   \"  Black Extended Italic
87 .sty \n[.fp] UBL     \"  Ultra-Black Roman
88 .sty \n[.fp] UBLI    \"  Ultra-Black Italic
90 \# Instruct grops to use square linecaps and joins.
91 \# This instruction is also executed in DO_B_MARGIN, NEWPAGE, and HEADER
93 \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
95 \# ====================================================================
97 \# TYPESETTING MACROS, STRINGS, AND ALIASES
98 \# ========================================
100 \# +++ALIASES+++
102 \# Alias .als as ALIAS, and .aln (number registers) as ALIASN
104 .als      ALIAS           als
105 .als      ALIASN          aln
108 \# ALIASES FOR GROFF REQUESTS
109 \# --------------------------
111 .ALIAS    MAC             de
112 .ALIAS    BR              br
113 .ALIAS    SP              sp
114 .ALIAS    PAGELENGTH      pl
115 .ALIAS    SPREAD          brp
116 .ALIAS    ESC_CHAR        ec
117 .ALIAS    STRING          ds
118 .ALIAS    INCLUDE         so
120 \# ALIASES FOR NUMBER REGISTERS
121 \# ----------------------------
123 .ALIASN  #PT_SIZE        .ps    \"fractional point size in units
124 .ALIASN  #DIVER_DEPTH     dn    \"diversion depth
125 .ALIASN  #DIVER_WIDTH     dl    \"diversion width
126 .ALIASN  #TRAP_DISTANCE  .t     \"distance to next trap
127 .ALIASN  #LEAD           .v     \"line space (.vs, not .ls)
128 .ALIASN  #PAGE_LENGTH    .p     \"page length
129 .ALIASN  #NUM_ARGS       .$     \"number of arguments passed to a macro
130 .ALIASN  #INDENT         .i     \"value of current indent
132 \# ====================================================================
134 \# MISCELLANEOUS
135 \# =============
136 .nr #L_MARGIN \n(.o  \" Tabs, etc require #L_MARGIN
137 .cflags 4 /\(en      \" So slash and en-dashes get broken
138 .warn 8192
140 \# About the warn level
141 \# --------------------
142 \# 
143 \# There's a lot of testing for the presence of number registers and
144 \# strings in this macro file.  Many of the registers and strings
145 \# pop into and out of existence on the fly.  For convenience, I
146 \# often use
147 \# 
148 \#     .if \\n[whatever]    and    .if !\\n[whatever]
149 \# 
150 \# to test "if the register exists and is (not) empty."  Groff,
151 \# encountering such tests when called with the -ww options, emits
152 \# 
153 \#     warning: number register whatever not defined.
154 \# 
155 \# Groff also warns about strings similarly tested for.
156 \# 
157 \# The warn level, above, is high in order to shut off those
158 \# warnings.  If you're futzing in this file and need more verbose
159 \# warnings, either comment out ".warn 8192" or set the warnlevel
160 \# to the one you need (but be ready for lots of what I've just
161 \# described).
163 \# ====================================================================
165 \# +++PAGE LAYOUT+++
167 \# Macros that control the physical layout of the page: paper size
168 \# and margins.
170 \# PAGE WIDTH
171 \# ----------
172 \# *Argument:
173 \#   <width of printer sheet>
174 \# *Function:
175 \#   Stores user supplied page width in register #PAGE_WIDTH.
176 \# *Notes:
177 \#   #PAGE_WIDTH is used to establish the default LL (and right margin).
178 \#   Requires unit of measure.
180 .MAC PAGEWIDTH END
181 .    br
182 .    nr #PAGE_WIDTH \\$1
183 .    if !r#L_MARGIN \{ .L_MARGIN \\n(.o \}
184 .    if !r#R_MARGIN \{ .R_MARGIN 1i \}
185 .END
188 \# L_MARGIN
189 \# --------
190 \# *Argument:
191 \#   <offset from page left>
192 \# *Function:
193 \#   Stores user supplied page offset in register #L_MARGIN.
194 \#   Sets .po to user supplied offset.
195 \# *Notes:
196 \#   Requires unit of measure.
198 .MAC L_MARGIN END
199 .    br
200 .    nr #L_MARGIN (\\$1)
201 .    po \\n[#L_MARGIN]u
202 .END
205 \# R_MARGIN
206 \# --------
207 \# *Argument:
208 \#   <width of right margin>
209 \# *Function:
210 \#   Stores user supplied right margin in register #R_MARGIN.
211 \# *Notes:
212 \#   This is a pseudo-margin.  Right margin is actually a function of
213 \#   line length.  The macro calculates line length from the page offset
214 \#   and the value plugged into #R_MARGIN.
216 \#   N.B. -- PAGEWIDTH and L_MARGIN have to be defined before R_MARGIN.
218 \#   Requires unit of measure.
220 .MAC R_MARGIN END
221 .    br
222 .    nr #R_MARGIN (\\$1)
223 .    ll \\n[#PAGE_WIDTH]u-\\n[#L_MARGIN]u-\\n[#R_MARGIN]u
224 .    ta \\n(.lu
225 .    nr #L_LENGTH \\n(.l
226 .END
229 \# T_MARGIN
230 \# --------
231 \# *Argument:
232 \#   <distance to advance from top of page>
233 \# *Function:
234 \#   Stores the user supplied top margin in register #T_MARGIN.
235 \#   Advances user supplied depth from the top of the page.
236 \# *Notes:
237 \#   Requires unit of measure.
239 .MAC T_MARGIN END
240 .    nr #T_MARGIN (\\$1)
241 .    nr #TOP 1
242 .    if !\\n[#DOCS] \{\
243 .       sp |\\n[#T_MARGIN]u-1v
244 .    \}
245 .    wh 0i DO_T_MARGIN
246 .END
249 \# B_MARGIN
250 \# --------
251 \# *Argument:
252 \#   <space to leave at the bottom of the page>
253 \# *Function:
254 \#   Stores the user supplied bottom margin in register #B_MARGIN.
255 \# *Notes:
256 \#   Requires unit of measure.
258 .MAC B_MARGIN END
259 .    br
260 .    nr #B_MARGIN (\\$1)
261 .    nr #ORIGINAL_B_MARGIN \\n[#B_MARGIN]
262 .    nr #B_MARGIN_SET 1
263 .    wh -\\n[#B_MARGIN]u DO_B_MARGIN
264 .END
267 \# PAGE
268 \# ----
269 \# *Arguments:
270 \#   <pagewidth>  [pagelength [leftmargin [rightmargin [topmargin [bottommargin]]]]]
271 \# *Function:
272 \#   Page set-up.  Collects arguments and passes them to the appropriate
273 \#   macros.
274 \# *Notes:
275 \#   All arguments after pagewidth are optional, but must appear
276 \#   in the order given above.  (User can fill in as much or as
277 \#   little as desired.)
279 \#   All arguments require a unit of measure.
281 .MAC PAGE END
282 .    br
283 .    PAGEWIDTH   \\$1
284 .    PAGELENGTH  \\$2
285 .    ie '\\$3''  \{ .L_MARGIN \\n(.o  \}
286 .    el          \{ .L_MARGIN \\$3    \}
287 .    ie '\\$4''  \{ .R_MARGIN 1i      \}
288 .    el          \{ .R_MARGIN \\$4    \}
289 .    if !'\\$5'' \{ .T_MARGIN \\$5    \}
290 .    if !'\\$6'' \{ .B_MARGIN \\$6    \}
291 .END
293 \# =====================================================================
295 \# +++PAGE CONTROL+++
297 \# Generic macros for breaking pages.
299 \# DO_T_MARGIN
300 \# -----------
301 \# *Argument:
302 \#   <none>
303 \# *Function:
304 \#   Plants the top margin at the top of each page.
305 \# *Notes:
306 \#   The trap is set in .T_MARGIN or .PAGE
308 .MAC DO_T_MARGIN END
309 .    ev T_MARGIN
310 .    nr #TOP 1
311 .    sp |\\n[#T_MARGIN]u-1v
312 .    ev
313 .    sp -\\n[#T_MARGIN_LEAD_ADJ]u
314 .END
317 \# DO_B_MARGIN
318 \# -----------
319 \# *Argument:
320 \#   <none>
321 \# *Function:
322 \#   Plants the bottom margin at the bottom of each page.
323 \# *Notes:
324 \#   The trap is set in .B_MARGIN or .PAGE.
326 .MAC DO_B_MARGIN END
327 .    nr #T_MARGIN_LEAD_ADJ \\n[#LEAD]-12000
328 .    ev B_MARGIN
329 .    bp
330 .    nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
331 .    ev
332 .END
335 \# NEWPAGE
336 \# -------
337 \# *Argument:
338 \#   <none>
339 \# *Function:
340 \#   Breaks to a new page.
341 \# *Notes:
342 \#   If a B_MARGIN has been set, processes that, otherwise, just
343 \#   breaks to a new page.
345 .MAC NEWPAGE END
346 .    ie \\n[#NO_BREAK] \{\
347 '       br
348 .       rr #NO_BREAK
349 .    \}
350 .    el \{\
351 .       br
352 .    \}
353 .    nr #NEWPAGE 1
354 .    ie \\n[#B_MARGIN_SET]=1 \{\
355 .       ie !\\n[#DOCS]=1 \{\
356 .          ev NP
357 .          bp
358 .          nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
359 .          ev
360 .       \}
361 .       el \{\
362 .          if \\n[#COLUMNS]=1 \{ .nr #COL_NUM \\n[#NUM_COLS] \}
363 .          ie !\\n[#FN_DEPTH] \{\
364 .             ch FN_OVERFLOW_TRAP
365 .             DO_B_MARGIN
366 .             wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP
367 .          \}
368 .          el \{\
369 .             DO_B_MARGIN
370 .          \}
371 .       \}
372 .    \}
373 .    el \{\
374 .       DO_B_MARGIN
375 .    \}
376 .END
378 \# =====================================================================
380 \# +++GENERAL STYLE MACROS+++
382 \# Macros that are likely to appear together to define general
383 \# type style: line length, family, font, point size, and line
384 \# spacing.
386 \# LINE LENGTH
387 \# -----------
388 \# *Argument:
389 \#   <line length>
390 \# *Function:
391 \#   Stores user supplied line length in register #L_LENGTH.
392 \#   Sets .ll to #L_LENGTHu
393 \# *Notes:
394 \#   Requires unit of measure.
396 .MAC LL END
397 .    nr #USER_SET_L_LENGTH 1
398 .    ll \\$1
399 .    nr #L_LENGTH \\n(.l
400 .    ta \\n(.lu
401 .END
404 \# +++FAMILY AND FONT+++
406 \# FALLBACK FONT
407 \# -------------
408 \# *Argument:
409 \#   <fallback font> [ ABORT | WARN ] | ABORT | WARN
410 \# *Function:
411 \#   Sets register #ABORT_FT_ERRORS to 1, or defines a fallback font
412 \#   called "dummy" at font position 0.
413 \# *Notes:
414 \#   Calls to non-existent families cause mom to continue processing
415 \#   files using the fallback font until a valid family is entered.
417 \#   Calls to non-existent fonts generate warnings.  If ABORT is passed
418 \#   to FALLBACK_FONT, mom stops processing files after the warning.
419 \#   Otherwise, she continues to process files using the fallback font
420 \#   after the warning is issued.  The default fallback font is CR; the
421 \#   default for font warnings is to abort.
423 .MAC FALLBACK_FONT END
424 .    if \\n[#NUM_ARGS]=1 \{\
425 .       if '\\$1'ABORT' \{ .nr #ABORT_FT_ERRORS 1 \}
426 .       if '\\$1'WARN' \{\
427 .          if r#ABORT_FT_ERRORS \{ .nr #ABORT_FT_ERRORS 0 \}
428 .       \}
429 .       if !'\\$1'ABORT' \{\
430 .          if !'\\$1'WARN' \{\
431 .             fp 0 dummy \\$1
432 .          \}
433 .       \}
434 .    \}
435 .    if \\n[#NUM_ARGS]=2 \{\
436 .       fp 0 dummy \\$1
437 .       if '\\$2'ABORT' \{ .nr #ABORT_FT_ERRORS 1 \}
438 .       if '\\$2'WARN'  \{ .nr #ABORT_FT_ERRORS 0 \}
439 .    \}
440 .END
442 .FALLBACK_FONT CR ABORT
444 \# FAMILY
445 \# ------
446 \# *Argument:
447 \#   <font family>
448 \# *Function:
449 \#   Stores user supplied font family in string $FAMILY.  Sets .fam
450 \#   to $FAMILY.
452 .MAC FAMILY END
453 .    ds $FAMILY \\$1
454 .    if \\n[#PRINT_STYLE]=1 \{\
455 .       fam C
456 .       return
457 .    \}
458 .    if \\n[#IGNORE] \{\
459 .       fam C
460 .       return
461 .    \}
462 .    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
463 .       ds $SAVED_STYLE \\n[.sty]
464 .    \}
465 .    ft 0
466 .    fam \\*[$FAMILY]
467 .    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
468 .       ft \\*[$SAVED_STYLE]
469 .       if !F\\n[.fn] \{\
470 .          ft 0
471 .       \}
472 .    \}
473 .    ie \\n[#PRE_COLLATE]=1 \{ . \}
474 .    el \{\
475 .       if \\n[#COLLATE]=1 \{\
476 .          if !r#START \{ .DOC_FAM \\*[$FAMILY] \}
477 .       \}
478 .    \}
479 .END
482 \# FONT
483 \# ----
484 \# *Argument:
485 \#   R | I | B | BI | <other style extension>
486 \# *Function:
487 \#  Stores user supplied font in $FONT and sets .ft to $FONT.
489 .MAC FT END
490 .    ds $FONT \\$1
491 .    if \\n[#PRINT_STYLE]=1 \{\
492 .       ie '\\$1'I' \{\
493 .          if \\n[#UNDERLINE_ITALIC]=1 \{\
494 .             UNDERLINE
495 .             return
496 .          \}
497 .          if \\n[#ITALIC_MEANS_ITALIC]=1 \{\
498 .             ds $FONT \\$1
499 .             ft \\*[$FONT]
500 .             return
501 .          \}
502 .       \}
503 .       el \{ .UNDERLINE OFF \}
504 .       return
505 .    \}
506 .    ft 0
507 .    ft \\*[$FONT]
508 .    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
509 .       if '\\n[.sty]'' \{\
510 .          if !F\\n[.fn] \{\
511 .             if !S\\*[$FONT] \{\
512 .                tm1 "[mom]: Font style "\\*[$FONT]" at line \\n(.c has not been registered.
513 .                ie \\n[#ABORT_FT_ERRORS]=0 \{\
514 .                   tm1 "       Continuing to process using fallback font.
515 .                \}
516 .                el .ab Aborting.
517 .             \}
518 .             if \\n[.f]=0 \{\
519 .                tm1 "[mom]: Either font style "\\*[$FONT]" at line \\n(.c does not exist in family "\\n[.fam]",
520 .                tm1 "       or family "\\n[.fam]" has not been installed in font/devps.
521 .                ie \\n[#ABORT_FT_ERRORS]=0 \{\
522 .                   tm1 "       Continuing to process using fallback font.
523 .                \}
524 .                el .ab Aborting.
525 .             \}
526 .          \}
527 .       \}
528 .    \}
529 .END
532 \# POINT SIZE
533 \# ----------
534 \# *Arguments:
535 \#   <point size of type>
536 \# *Function:
537 \#   Sets point size to user supplied value in scaled points.
538 \#   If #AUTO_LEAD is on, sets .vs to #AUTOLEAD_VALUE+#PT_SIZE.
539 \# *Notes:
540 \#   Must NOT use a unit of measure.
542 .MAC PT_SIZE END
543 .    if \\n[#PRINT_STYLE]=1 \{ .return \}
544 .    if \\n[#IGNORE]        \{ .return \}
545 .    nr #PT_SIZE_SET 1
546 .    ps \\$1
547 .    if \\n[#AUTO_LEAD] \{\
548 .       ie \\n[#AUTOLEAD_FACTOR] \{ .vs \\n[#PT_SIZE]u*\\n[#AUTOLEAD_VALUE]u/1000u \}
549 .       el \{ .vs \\n[#PT_SIZE]u+\\n[#AUTOLEAD_VALUE]u \}
550 .    \}
551 .    nr #PT_SIZE_IN_UNITS \\n[.ps]
552 .END
555 \# SIZE (inline)
556 \# -------------
557 \# *Arguments:
558 \#   <point size of type>
559 \# *Function:
560 \#   Sets point size to user supplied value in scaled points.
561 \#   Intended to be called inline with \*[SIZE <n><unit>]
562 \# *Notes:
563 \#   Can be used with a unit of measure or not.
565 .MAC SIZE END
567 .ps \\$1
568 .END
571 \# LEADING
572 \# -------
573 \# *Argument:
574 \#   <leading between lines of text>
575 \# *Function:
576 \#   Turns off #AUTOLEAD if it's on.
577 \#   Sets .vs to user supplied value.
578 \# *Notes:
579 \#   Does not require unit of measure.  LS automatically turns off AUTOLEAD.
581 .MAC LS END
582 .    br
583 .    nr #OLD_LEAD \\n(.v
584 .    if \\n[#PRINT_STYLE]=1 \{ .return \}
585 .    if \\n[#IGNORE]        \{ .return \}
586 .    if \\n[#AUTO_LEAD] \{\
587 .       rr #AUTO_LEAD
588 .       rr #AUTOLEAD_FACTOR
589 .    \}
590 .    vs \\$1
591 .    if \\n[#TOP] \{\
592 .       nr #TOP_BASELINE_ADJ \\n(.v-\\n[#OLD_LEAD]
593 .       sp -\\n[#TOP_BASELINE_ADJ]u
594 .       rr #TOP
595 .       rr #TOP_BASELINE_ADJ
596 .    \}
597 .END
599 .MAC RESET_LEAD END
600 '    vs
601 .    ch RESET_LEAD
602 .END
605 \# AUTOLEAD
606 \# --------
607 \# *Argument:
608 \#   <leading value to add to #PT_SIZE> [FACTOR]
609 \# *Function:
610 \#   Stores user supplied auto-lead value in register #AUTOLEAD_VALUE.
611 \#   Adds #AUT0LEAD_VALUE to #PT_SIZE when invoked to set leading.
612 \#   All subsequent PT_SIZE requests reset the leading in the same way until
613 \#   AUTOLEAD is turned off.
614 \# *Notes:
615 \#   With the optional FACTOR argument, the current point size is
616 \#   multiplied by #AUTOLEAD_VALUE instead of the two being added
617 \#   together.
619 .MAC AUTOLEAD END
620 .    if \\n[#PRINT_STYLE]=1 \{ .return \}
621 .    if \\n[#IGNORE]        \{ .return \}
622 .    nr #AUTO_LEAD 1
623 .    nr #OLD_LEAD \\n(.v
624 .    nr #AUTOLEAD_VALUE (p;\\$1)
625 .    ie \\n[#NUM_ARGS]=2 \{\
626 .       if '\\$2'FACTOR' \{\
627 .          nr #AUTOLEAD_FACTOR 1
628 .          vs \\n[#PT_SIZE]u*\\n[#AUTOLEAD_VALUE]u/1000u
629 .       \}
630 .    \}
631 .    el \{\
632 .       vs \\n[#PT_SIZE]u+\\n[#AUTOLEAD_VALUE]u
633 .    \}
634 .    if \\n[#TOP] \{\
635 .       nr #TOP_BASELINE_ADJ \\n(.v-\\n[#OLD_LEAD]
636 .       sp -\\n[#TOP_BASELINE_ADJ]u
637 .       rr #TOP
638 .       rr #TOP_BASELINE_ADJ
639 .    \}
640 .END
643 \# STRINGS FOR INLINE CONTROL OF GENERAL TYPE STYLE
644 \# ------------------------------------------------
645 .ds ROM  \EfR
646 .ds IT   \EfI
647 .ds BD   \EfB
648 .ds BDI  \Ef(BI
649 .ds PREV \Ef[]
650 .ds S    \Es
652 \# =====================================================================
654 \# +++KERNING+++
656 \# AUTOMATIC PAIRWISE KERNING
657 \# --------------------------
658 \# *Arguments:
659 \#   <none> | <anything>
660 \# *Function:
661 \#   Turns automatic pairwise kerning on or off.
663 .MAC KERN END
664 .    ie '\\$1'' \{\
665 .       kern
666 .       nr #KERN 1
667 .    \}
668 .    el \{\
669 .       kern 0
670 .       nr #KERN 0
671 .    \}
672 .END
675 \# INLINE KERNING AND HORIZONTAL MOVEMENT
676 \# --------------------------------------
677 \# Kerning
678 \# 
679 \# Inline kerning provides a simple method for users to adjust the
680 \# amount of space between any two letters.  It's predicated on a
681 \# unit of measure "U", which is 1/36 of the current point size as
682 \# returned by \n[.ps].  E.g., if the current point size is 18,
683 \# \n[.ps] returns 18000u, therefore U=500u.  Since U remains
684 \# proportional relative to the current point size, the amount
685 \# of kerning between two letters as expressed in Us remains
686 \# visually similar regardless of changes in point size.
687 \# 
688 \# N.B.--the amount of inline kerning supplied by \*[BU<n>] or
689 \# \*[FU<n>] is added to or subtracted from any kerning that already
690 \# takes place between two characters when automatic kerning is
691 \# turned on.
692 \# 
693 \# In groff v. 1.17.2, it was not possible to pass arguments to macros that
694 \# were called with inline escapes, nor thence to evaluate conditional
695 \# expressions.  Consequently, each pseudo-escape \[BU<n>] had to be defined
696 \# separately with ".char".
697 \# 
698 \# As of v. 1.18, one can pass arguments to inline strings/macros,
699 \# hence it is now possible to do \*[BU n] where n, inline, is the desired
700 \# number of kern units.  The original .char definitions have been left in
701 \# for backward compatibility with documents created prior to mom-1.1.3c.
703 .nr #KERN_UNIT 36
704 .ds BU   \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
705 .ds FU   \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
707 \# Initialize strings for pre-1.1.3c-style BU and FU
709 .nr #LOOP 0 1
710 .while \n+[#LOOP]<37 \{\
711 .   ds BU\n[#LOOP]  \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
714 .nr #LOOP 0 1
715 .while \n+[#LOOP]<37 \{\
716 .   ds FU\n[#LOOP]  \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
718 .rr #LOOP
720 \# Horizontal movements
721 \# --------------------
722 \# BP1...12.75 and FP1...12.75 move backwards or forwards inline by the
723 \# specified number of points.
725 \# Left in for backward compatibility with mom-1.1.3c, the
726 \# preferred methods for inline horizontal movements are now
727 \# \*[BCK <n><unit>] and \*[FWD <n><unit>].
729 .ds BCK  \h'-\\$1'
730 .ds FWD  \h'\\$1'
732 .ds BP.25    \h'-.25'
733 .ds BP.5     \h'-.5'
734 .ds BP.75    \h'-.75'
735 .ds BP1      \h'-1p'
736 .ds BP1.25   \h'-1.25p'
737 .ds BP1.5    \h'-1.5p'
738 .ds BP1.75   \h'-1.75p'
739 .ds BP2      \h'-2p'
740 .ds BP2.25   \h'-2.25p'
741 .ds BP2.5    \h'-2.5p'
742 .ds BP2.75   \h'-2.75p'
743 .ds BP3      \h'-3p'
744 .ds BP3.25   \h'-3.25p'
745 .ds BP3.5    \h'-3.5p'
746 .ds BP3.75   \h'-3.75p'
747 .ds BP4      \h'-4p'
748 .ds BP4.25   \h'-4.25p'
749 .ds BP4.5    \h'-4.5p'
750 .ds BP4.75   \h'-4.75p'
751 .ds BP5      \h'-5p'
752 .ds BP5.25   \h'-5.25p'
753 .ds BP5.5    \h'-5.5p'
754 .ds BP5.75   \h'-5.75p'
755 .ds BP6      \h'-6p'
756 .ds BP6.25   \h'-6.25p'
757 .ds BP6.5    \h'-6.5p'
758 .ds BP6.75   \h'-6.75p'
759 .ds BP7      \h'-7p'
760 .ds BP7.25   \h'-7.25p'
761 .ds BP7.5    \h'-7.5p'
762 .ds BP7.75   \h'-7.75p'
763 .ds BP8      \h'-8p'
764 .ds BP8.25   \h'-8.25p'
765 .ds BP8.5    \h'-8.5p'
766 .ds BP8.75   \h'-8.75p'
767 .ds BP9      \h'-9p'
768 .ds BP9.25   \h'-9.25p'
769 .ds BP9.5    \h'-9.5p'
770 .ds BP9.75   \h'-9.75p'
771 .ds BP10     \h'-10p'
772 .ds BP10.25  \h'-10.25p'
773 .ds BP10.5   \h'-10.5p'
774 .ds BP10.75  \h'-10.75p'
775 .ds BP11     \h'-11p'
776 .ds BP11.25  \h'-11.25p'
777 .ds BP11.5   \h'-11.5p'
778 .ds BP11.75  \h'-11.75p'
779 .ds BP12     \h'-12p'
780 .ds BP12.25  \h'-12.25p'
781 .ds BP12.5   \h'-12.5p'
782 .ds BP12.75  \h'-12.75p'
784 .ds FP.25    \h'.25'
785 .ds FP.5     \h'.5'
786 .ds FP.75    \h'.75'
787 .ds FP1      \h'1p'
788 .ds FP1.25   \h'1.25p'
789 .ds FP1.5    \h'1.5p'
790 .ds FP1.75   \h'1.75p'
791 .ds FP2      \h'2p'
792 .ds FP2.25   \h'2.25p'
793 .ds FP2.5    \h'2.5p'
794 .ds FP2.75   \h'2.75p'
795 .ds FP3      \h'3p'
796 .ds FP3.25   \h'3.25p'
797 .ds FP3.5    \h'3.5p'
798 .ds FP3.75   \h'3.75p'
799 .ds FP4      \h'4p'
800 .ds FP4.25   \h'4.25p'
801 .ds FP4.5    \h'4.5p'
802 .ds FP4.75   \h'4.75p'
803 .ds FP5      \h'5p'
804 .ds FP5.25   \h'5.25p'
805 .ds FP5.5    \h'5.5p'
806 .ds FP5.75   \h'5.75p'
807 .ds FP6      \h'6p'
808 .ds FP6.25   \h'6.25p'
809 .ds FP6.5    \h'6.5p'
810 .ds FP6.75   \h'6.75p'
811 .ds FP7      \h'7p'
812 .ds FP7.25   \h'7.25p'
813 .ds FP7.5    \h'7.5p'
814 .ds FP7.75   \h'7.75p'
815 .ds FP8      \h'8p'
816 .ds FP8.25   \h'8.25p'
817 .ds FP8.5    \h'8.5p'
818 .ds FP8.75   \h'8.75p'
819 .ds FP9      \h'9p'
820 .ds FP9.25   \h'9.25p'
821 .ds FP9.5    \h'9.5p'
822 .ds FP9.75   \h'9.75p'
823 .ds FP10     \h'10p'
824 .ds FP10.25  \h'10.25p'
825 .ds FP10.5   \h'10.5p'
826 .ds FP10.75  \h'10.75p'
827 .ds FP11     \h'11p'
828 .ds FP11.25  \h'11.25p'
829 .ds FP11.5   \h'11.5p'
830 .ds FP11.75  \h'11.75p'
831 .ds FP12     \h'12p'
832 .ds FP12.25  \h'12.25p'
833 .ds FP12.5   \h'12.5p'
834 .ds FP12.75  \h'12.75p'
837 \# WHOLE LINE KERNING (RW and EW)
838 \# -----------------------------
839 \# The line kerning macros are special instances of track kerning,
840 \# used where a complete line needs to be tightened (or relaxed) in
841 \# order to accomodate or remove one or two more characters
842 \# than the default justification permits.
844 \# *Argument:
845 \#   <amount of overall "kerning" (letter spacing) to apply to the line>
846 \# *Function:
847 \#   Invokes .tkf (track kerning) for the current font with
848 \#   1 as both the upper and lower point size limits, so that
849 \#   the value entered by the user applies regardless of point
850 \#   size.  RW ("Reduce Whitespace") reduces the amount of space
851 \#   between all characters by an equal amount.  EW ("Extra
852 \#   Whitespace") increases the amount of space.
853 \# *Notes:
854 \#   Decimal values are acceptable.
856 \# The groff documentation is a tad confusing about what unit of
857 \# measure is used in track kerning, only that the width of each
858 \# character is increased or decreased by the amount(s) passed as
859 \# arguments to .tkf, and something about linear function of point
860 \# size.  In fact, with the way I've put this macro together, it
861 \# doesn't matter.  All the user needs to know is that a value of
862 \# one will produce an unacceptably tight or loose line at most text
863 \# point sizes; therefore, effective use of RW and EW is in the
864 \# fractional range below 1 (e.g. .25, .5).  Given that RW and EW
865 \# are for massaging type, a certain amount of experimentation and
866 \# previewing is expected and necessary.
867 \# 
868 \# \n(.f holds the current font number, which is acceptable to .tkf.
869 \# 
870 \# RW and EW must be reset to 0 to cancel their effect on subsequent
871 \# output lines.
873 .MAC RW END
874 .    if \\n[#BR_AT_LINE_KERN] \{\
875 .       ie \\n[#JUSTIFY]=1 \{ .brp \}
876 .       el \{ .br \}
877 .    \}
878 .    tkf \\n(.f 1 -\\$1 1 -\\$1
879 .END
882 .MAC EW END
883 .    if \\n[#BR_AT_LINE_KERN] \{\
884 .       ie \\n[#JUSTIFY]=1 \{ .brp \}
885 .       el \{ .br \}
886 .    \}
887 .    tkf \\n(.f 1 \\$1 1 \\$1
888 .END
891 \# BREAK AT LINE KERN
892 \# ------------------
893 \# *Arguments:
894 \#   toggle
895 \# *Function:
896 \#   Enables/disables .br's before .RW and .EW
897 \# *Notes:
898 \#   Mostly, users will want .br's before any kind of line kerning, but
899 \#   there may be cases where they don't.  BR_BEFORE_LINE_KERN is off by
900 \#   default and must be invoked explicitly.
902 .MAC BR_AT_LINE_KERN END
903 .    ie '\\$1'' \{ .nr #BR_AT_LINE_KERN  1 \}
904 .    el         \{ .rr #BR_AT_LINE_KERN \}
905 .END
907 \# =====================================================================
909 \# +++HYPHENATION+++
911 \# AUTO HYPHENATION
912 \# ----------------
913 \# *Arguments:
914 \#   <none> | <anything> | DEFAULT
915 \#                 or
916 \#   LINES <n> | MARGIN <n> | SPACE <n>
917 \# *Function:
918 \#   Turns auto hyphenation on or off, resets the hyphenation style
919 \#   to default, or permits the setting of various hyphenation
920 \#   parameters.
921 \# *Notes:
922 \#   HY, by itself, defaults to .hy 14, i.e. no hyphens after the
923 \#   first two or before the last two characters of a word, and no
924 \#   hyphenation of the last line prior to a trap (e.g., at the
925 \#   bottom of a page).
927 \#   HY DEFAULT resets the hyphenation style to .hy 14 (see
928 \#   above) if that behaviour is desired after changes have been
929 \#   made to LINES, MARGIN, or SPACE.
931 \#   HY LINES <n> sets the number of allowable consecutive hyphenated lines.
933 \#   HY MARGIN <n> sets the amount of space (ipPcm) allowed at the end
934 \#   of a line in QUAD mode before hyphenation is tripped (e.g. if there's
935 \#   only 6 points left, groff won't try to hyphenate the next word).
937 \#   HY SPACE sets the amount of extra interword space (ipPcm) that can
938 \#   be added in JUSTIFY mode to prevent a line from being hyphenated.
940 .MAC HY END
941 .    ie '\\$1'' \{\
942 .       hy 14
943 .       nr #HYPHENATE 1
944 .    \}
945 .    el \{\
946 .       if !'\\$1'LINES'  \{\
947 .          nh
948 .          nr #HYPHENATE 0
949 .       \}
950 .       if !'\\$1'MARGIN' \{\
951 .          nh
952 .          nr #HYPHENATE 0
953 .       \}
954 .       if !'\\$1'SPACE'  \{\
955 .          nh
956 .          nr #HYPHENATE 0
957 .       \}
958 .       if !'\\$1'DEFAULT'  \{\
959 .          nh
960 .          nr #HYPHENATE 0
961 .       \}
962 .       if '\\$1'LINES'   \{ .hlm \\$2 \}
963 .       if '\\$1'MARGIN'  \{ .hym \\$2 \}
964 .       if '\\$1'SPACE'   \{ .hys \\$2 \}
965 .       if '\\$1'DEFAULT' \{\
966 .          hlm -1
967 .          hym 0
968 .          hys 0
969 .       \}
970 .    \}
971 .END
974 \# HYPHENATION PARAMETERS
975 \# ----------------------
976 \# *Arguments:
977 \#   <# of lines> | <size of margin> | <amount of interword space>
978 \# *Function:
979 \#   Allows user to specify .HY LINES, MARGIN, and SPACE with a single command.
981 .MAC HY_SET END
982 .    nr #HY_SET 1
983 .    hlm \\$1
984 .    hym \\$2
985 .    hys \\$3
986 .END
988 \# =====================================================================
990 \# +++VERTICAL SPACING+++
992 \# ADVANCE LEAD
993 \# ------------
994 \# *Argument:
995 \#   <user supplied lead to advance below current baseline>
996 \# *Function:
997 \#   Creates or modifies register #ALD.  Adds user supplied lead
998 \#   below current baseline.
999 \# *Notes:
1000 \#   Requires a unit of measure.
1002 .MAC ALD END
1003 .    if \\n(nl=0 \{ .nr #TOP 1 \}
1004 .    if '\\$0'ALD' \{\
1005 .       nr #ALD (\\$1)
1006 .       sp \\n[#ALD]u
1007 .    \}
1008 .    if '\\$0'ADD_SPACE' \{\
1009 .       nr #ALD (\\$1)
1010 .       rs
1011 .       sp \\n[#ALD]u
1012 .    \}
1013 .    if '\\$0'SPACE' \{\
1014 .       sp \\$1
1015 .    \}
1016 .    if '\\$0'SP' \{\
1017 .       sp \\$1
1018 .    \}
1019 .END
1022 \# REVERSE LEAD
1023 \# ------------
1024 \# *Argument:
1025 \#   <user supplied lead to reverse above current baseline>
1026 \# *Function:
1027 \#   Creates or modifies register #RLD.  Reverses user supplied
1028 \#   lead above current baseline.
1029 \# *Notes:
1030 \#   Requires a unit of measure.
1032 .MAC RLD END
1033 .    nr #RLD (\\$1)
1034 .    sp -\\n[#RLD]u
1035 .END
1037 \# ALD/RLD STRINGS
1038 \# ---------------
1039 \# The strings \*[ALD.25]...\*[ALD12.75] and their corresponding
1040 \# \*[RLD] forms have been left in for backward compatibility with
1041 \# documents created using mom-1.1.3c or earlier.  The prefered methods
1042 \# of advancing and reversing on the page inline are \*[UP <n><unit>]
1043 \# and \*[DOWN <n><unit>].
1045 .ds DOWN      \v'\\$1'
1046 .ds UP        \v'-\\$1'
1048 .ds ALD.25    \v'.25p'
1049 .ds ALD.5     \v'.5p'
1050 .ds ALD.75    \v'.75p'
1051 .ds ALD1      \v'1p'
1052 .ds ALD1.25   \v'1.25p'
1053 .ds ALD1.5    \v'1.5p'
1054 .ds ALD1.75   \v'1.75p'
1055 .ds ALD2      \v'2p'
1056 .ds ALD2.25   \v'2.25p'
1057 .ds ALD2.5    \v'2.5p'
1058 .ds ALD2.75   \v'2.75p'
1059 .ds ALD3      \v'3p'
1060 .ds ALD3.25   \v'3.25p'
1061 .ds ALD3.5    \v'3.5p'
1062 .ds ALD3.75   \v'3.75p'
1063 .ds ALD4      \v'4p'
1064 .ds ALD4.25   \v'4.25p'
1065 .ds ALD4.5    \v'4.5p'
1066 .ds ALD4.75   \v'4.75p'
1067 .ds ALD5      \v'5p'
1068 .ds ALD5.25   \v'5.25p'
1069 .ds ALD5.5    \v'5.5p'
1070 .ds ALD5.75   \v'5.75p'
1071 .ds ALD6      \v'6p'
1072 .ds ALD6.25   \v'6.25p'
1073 .ds ALD6.5    \v'6.5p'
1074 .ds ALD6.75   \v'6.75p'
1075 .ds ALD7      \v'7p'
1076 .ds ALD7.25   \v'7.25p'
1077 .ds ALD7.5    \v'7.5p'
1078 .ds ALD7.75   \v'7.75p'
1079 .ds ALD8      \v'8p'
1080 .ds ALD8.25   \v'8.25p'
1081 .ds ALD8.5    \v'8.5p'
1082 .ds ALD8.75   \v'8.75p'
1083 .ds ALD9      \v'9p'
1084 .ds ALD9.25   \v'9.25p'
1085 .ds ALD9.5    \v'9.5p'
1086 .ds ALD9.75   \v'9.75p'
1087 .ds ALD10     \v'10p'
1088 .ds ALD10.25  \v'10.25p'
1089 .ds ALD10.5   \v'10.5p'
1090 .ds ALD10.75  \v'10.75p'
1091 .ds ALD11     \v'11p'
1092 .ds ALD11.25  \v'11.25p'
1093 .ds ALD11.5   \v'11.5p'
1094 .ds ALD11.75  \v'11.75p'
1095 .ds ALD12     \v'12p'
1096 .ds ALD12.25  \v'12.5p'
1097 .ds ALD12.5   \v'12.5p'
1098 .ds ALD12.75  \v'12.75p'
1100 .ds RLD.25    \v'-.25p'
1101 .ds RLD.5     \v'-.5p'
1102 .ds RLD.75    \v'-.75p'
1103 .ds RLD1      \v'-1p'
1104 .ds RLD1.25   \v'-1.25p'
1105 .ds RLD1.5    \v'-1.5p'
1106 .ds RLD1.75   \v'-1.75p'
1107 .ds RLD2      \v'-2p'
1108 .ds RLD2.25   \v'-2.25p'
1109 .ds RLD2.5    \v'-2.5p'
1110 .ds RLD2.75   \v'-2.75p'
1111 .ds RLD3      \v'-3p'
1112 .ds RLD3.25   \v'-3.25p'
1113 .ds RLD3.5    \v'-3.5p'
1114 .ds RLD3.75   \v'-3.75p'
1115 .ds RLD4      \v'-4p'
1116 .ds RLD4.25   \v'-4.25p'
1117 .ds RLD4.5    \v'-4.5p'
1118 .ds RLD4.75   \v'-4.75p'
1119 .ds RLD5      \v'-5p'
1120 .ds RLD5.25   \v'-5.25p'
1121 .ds RLD5.5    \v'-5.5p'
1122 .ds RLD5.75   \v'-5.75p'
1123 .ds RLD6      \v'-6p'
1124 .ds RLD6.25   \v'-6.25p'
1125 .ds RLD6.5    \v'-6.5p'
1126 .ds RLD6.75   \v'-6.75p'
1127 .ds RLD7      \v'-7p'
1128 .ds RLD7.25   \v'-7.25p'
1129 .ds RLD7.5    \v'-7.5p'
1130 .ds RLD7.75   \v'-7.75p'
1131 .ds RLD8      \v'-8p'
1132 .ds RLD8.25   \v'-8.25p'
1133 .ds RLD8.5    \v'-8.5p'
1134 .ds RLD8.75   \v'-8.75p'
1135 .ds RLD9      \v'-9p'
1136 .ds RLD9.25   \v'-9.25p'
1137 .ds RLD9.5    \v'-9.5p'
1138 .ds RLD9.75   \v'-9.75p'
1139 .ds RLD10     \v'-10p'
1140 .ds RLD10.25  \v'-10.25p'
1141 .ds RLD10.5   \v'-10.5p'
1142 .ds RLD10.75  \v'-10.75p'
1143 .ds RLD11     \v'-11p'
1144 .ds RLD11.25  \v'-11.25p'
1145 .ds RLD11.5   \v'-11.5p'
1146 .ds RLD11.75  \v'-11.75p'
1147 .ds RLD12     \v'-12p'
1148 .ds RLD12.25  \v'-12.5p'
1149 .ds RLD12.5   \v'-12.5p'
1150 .ds RLD12.75  \v'-12.75p'
1152 \# =====================================================================
1154 \# +++REFINEMENTS+++
1156 \# AUTOMATIC LIGATURES
1157 \# -------------------
1158 \# *Arguments:
1159 \#   <none> | <anything>
1160 \# *Function:
1161 \#   Turns automatic ligature generation on or off.
1162 \# *Notes:
1163 \#   Ligatures may be supplied manually with \(fi, \(fl, etc.
1165 .MAC LIGATURES END
1166 .    ie '\\$1'' \{\
1167 .       lg
1168 .       nr #LIGATURES 1
1169 .    \}
1170 .    el \{\
1171 .       lg 0
1172 .       nr #LIGATURES 0
1173 .    \}
1174 .END
1177 \# SMARTQUOTES
1178 \# -----------
1179 \# *Arguments:
1180 \#   [ ,, ] | [ << ] | [ >> ] | <anything>
1181 \#   or
1182 \#   [ DA | DE | ES | FR | IT | NL | NO | PT | SV ] | <anything>
1183 \# *Function:
1184 \#   Turns smartquotes on (optionally with a quoting style from the
1185 \#   argument list, or off).
1186 \# *Notes:
1187 \#   The " character is read outside the macro when mom is
1188 \#   processed.  The strings for open/close ($QUOTE<n>) are then
1189 \#   defined in the macro.
1191 \#   (Note to myself: code for " is \N'34'.)
1193 .char " \\*[$QUOTE\\n[#OPEN_CLOSE]]\R'#OPEN_CLOSE (1-\\n[#OPEN_CLOSE])'
1195 .MAC SMARTQUOTES END
1196 .    rr #ARGS_TO_SQ
1197 .    if \\n[#RESTORE_SQ]=1 \{\
1198 .       rr #RESTORE_SQ
1199 .       ie '\\*[$RESTORE_SQ]'' \{\
1200 .          ds $QUOTE0 \[dq]
1201 .          ds $QUOTE1 \[dq]
1202 .       \}
1203 .       el \{\
1204 .          SMARTQUOTES \\*[$RESTORE_SQ]
1205 .          return
1206 .       \}
1207 .    \}
1208 .    ie '\\$1'' \{\
1209 .       nr #OPEN_CLOSE 0
1210 .       ds $QUOTE0 \\[lq]
1211 .       ds $QUOTE1 \\[rq]
1212 .       ds $RESTORE_SQ \\$1
1213 .    \}
1214 .    el \{\
1215 .       if '\\$1',,' \{\
1216 .          nr #ARGS_TO_SQ 1
1217 .          ds $QUOTE0 \\[Bq]
1218 .          ds $QUOTE1 \\[lq]
1219 .          ds $RESTORE_SQ \\$1
1220 .       \}
1221 .       if '\\$1'<<' \{\
1222 .          nr #ARGS_TO_SQ 1
1223 .          ds $QUOTE0 \\[Fo]
1224 .          ds $QUOTE1 \\[Fc]
1225 .          ds $RESTORE_SQ \\$1
1226 .       \}
1227 .       if '\\$1'>>' \{\
1228 .          nr #ARGS_TO_SQ 1
1229 .          ds $QUOTE0 \\[Fc]
1230 .          ds $QUOTE1 \\[Fo]
1231 .          ds $RESTORE_SQ \\$1
1232 .       \}
1233 .       if '\\$1'DA' \{\
1234 .          nr #ARGS_TO_SQ 1
1235 .          ds $QUOTE0 \\[Fc]
1236 .          ds $QUOTE1 \\[Fo]
1237 .          ds $RESTORE_SQ \\$1
1238 .       \}
1239 .       if '\\$1'DE' \{\
1240 .          nr #ARGS_TO_SQ 1
1241 .          ds $QUOTE0 \\[Bq]
1242 .          ds $QUOTE1 \\[lq]
1243 .          ds $RESTORE_SQ \\$1
1244 .       \}
1245 .       if '\\$1'ES' \{\
1246 .          nr #ARGS_TO_SQ 1
1247 .          ds $QUOTE0 \\[lq]
1248 .          ds $QUOTE1 \\[rq]
1249 .          ds $RESTORE_SQ \\$1
1250 .       \}
1251 .       if '\\$1'FR' \{\
1252 .          nr #ARGS_TO_SQ 1
1253 .          ds $QUOTE0 \\[Fo]\\|
1254 .          ds $QUOTE1 \\|\\[Fc]
1255 .          ds $RESTORE_SQ \\$1
1256 .       \}
1257 .       if '\\$1'IT' \{\
1258 .          nr #ARGS_TO_SQ 1
1259 .          ds $QUOTE0 \\[Fo]\\|
1260 .          ds $QUOTE1 \\|\\[Fc]
1261 .          ds $RESTORE_SQ \\$1
1262 .       \}
1263 .       if '\\$1'NL' \{\
1264 .          nr #ARGS_TO_SQ 1
1265 .          ds $QUOTE0 \\[rq]
1266 .          ds $QUOTE1 \\[rq]
1267 .          ds $RESTORE_SQ \\$1
1268 .       \}
1269 .       if '\\$1'NO' \{\
1270 .          nr #ARGS_TO_SQ 1
1271 .          ds $QUOTE0 \\[Fo]
1272 .          ds $QUOTE1 \\[Fc]
1273 .          ds $RESTORE_SQ \\$1
1274 .       \}
1275 .       if '\\$1'PT' \{\
1276 .          nr #ARGS_TO_SQ 1
1277 .          ds $QUOTE0 \\[Fo]
1278 .          ds $QUOTE1 \\[Fc]
1279 .          ds $RESTORE_SQ \\$1
1280 .       \}
1281 .       if '\\$1'SV' \{\
1282 .          nr #ARGS_TO_SQ 1
1283 .          ds $QUOTE0 \\[Fc]
1284 .          ds $QUOTE1 \\[Fc]
1285 .          ds $RESTORE_SQ \\$1
1286 .       \}
1287 .       if !r#ARGS_TO_SQ \{\
1288 .          ds $QUOTE0 \\[dq]
1289 .          ds $QUOTE1 \\[dq]
1290 .          nr #RESTORE_SQ 1
1291 .       \}
1292 .    \}
1293 .END
1295 .ds $QUOTE0 \[dq]
1296 .ds $QUOTE1 \[dq]
1298 \# Strings for foot and inch marks
1300 .ds FOOT \(fm
1301 .ds INCH \(fm\(fm
1303 \# =====================================================================
1305 \# +++LINE BREAKS+++
1307 \# NO-SPACE BREAK
1308 \# --------------
1309 \# *Argument:
1310 \#   <none>
1311 \# *Function:
1312 \#   Breaks a line without advancing.
1313 \# *Notes:
1314 \#   EL is the mnemonic used on older, dedicated typesetting machines
1315 \#   to indicate "process the line, without advancing the galley
1316 \#   medium."  It stands for End Line.
1318 \#   The \c inline must be appended to the end of input lines when in
1319 \#   nofill mode; in fill modes, the \c inline must not be used.
1321 .MAC EL END
1322 .    TRAP OFF
1323 .    if \\n[#PSEUDO_FILL]=1 \&
1324 .    br
1325 .    sp -1v
1326 .    TRAP
1327 .END
1329 \# An inline escape to accomplish the same thing.  Actually
1330 \# preferable, since it works with filled and non-filled copy and
1331 \# doesn't require the user to remember to use (or not use) the \c.
1333 .ds B \h'|0'\R'#NO_ADVANCE 1'\c
1335 \# =====================================================================
1337 \# +++FILLING/QUADDING/JUSTIFYING+++
1339 \# JUSTIFY
1340 \# -------
1341 \# *Argument:
1342 \#   <none>
1343 \# *Function:
1344 \#   Turns fill on and sets .ad to b.
1345 \# *Notes:
1346 \#   Justifies text left and right.
1348 .MAC JUSTIFY END
1349 .    if \\n[#TAB_ACTIVE]=0 \{\
1350 .       nr #QUAD 1
1351 .       ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
1352 .    \}
1353 '    ce 0
1354 .    QUAD J
1355 .    if \\n[#PRINT_STYLE]=1 \{ .QUAD L \}
1356 .    nr #PSEUDO_FILL 0
1357 .END
1360 \# QUAD
1361 \# ----
1362 \# *Arguments:
1363 \#   L | LEFT | R | RIGHT | C | CENTER/CENTRE
1364 \# *Function:
1365 \#   Turns fill on and sets .ad to l, r, or c.
1366 \# *Notes:
1367 \#   Terminology is a problem here.  Some people call quad left
1368 \#   left justified, flush left, or flush left/rag right (and the
1369 \#   reverse for quad right).  Quad center is sometimes called rag
1370 \#   both.  For our purposes, all "quad" modes mean that groff fill
1371 \#   mode is enabled.
1373 .MAC QUAD END
1374 .    ds $QUAD_VALUE \\$1
1375 .    if \\n[#TAB_ACTIVE]=0 \{\
1376 .       nr #QUAD 1
1377 .       ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
1378 .    \}
1379 '    ce 0
1380 '    fi
1381 .    if '\\*[$QUAD_VALUE]'L'       \{\
1382 .       nr #JUSTIFY 0
1383 .       ad l
1384 .    \}
1385 .    if '\\*[$QUAD_VALUE]'LEFT'    \{\
1386 .       nr #JUSTIFY 0
1387 .       ad l
1388 .    \}
1389 .    if '\\*[$QUAD_VALUE]'R'       \{\
1390 .       nr #JUSTIFY 0
1391 .       ad r
1392 .    \}
1393 .    if '\\*[$QUAD_VALUE]'RIGHT'   \{\
1394 .       nr #JUSTIFY 0
1395 .       ad r
1396 .    \}
1397 .    if '\\*[$QUAD_VALUE]'C'       \{\
1398 .       nr #JUSTIFY 0
1399 .       ad c
1400 .    \}
1401 .    if '\\*[$QUAD_VALUE]'CENTER'  \{\
1402 .       nr #JUSTIFY 0
1403 .       ad c
1404 .    \}
1405 .    if '\\*[$QUAD_VALUE]'CENTRE'  \{\
1406 .       nr #JUSTIFY 0
1407 .       ad c
1408 .    \}
1409 .    if '\\*[$QUAD_VALUE]'J'       \{\
1410 .       nr #JUSTIFY 1
1411 .       ad b
1412 .    \}
1413 .    if '\\*[$QUAD_VALUE]'JUSTIFY' \{\
1414 .       nr #JUSTIFY 1
1415 .       ad b
1416 .    \}
1417 .    nr #PSEUDO_FILL 0
1418 .END
1421 \# LEFT, RIGHT, AND CENTER
1422 \# -----------------------
1423 \# The purpose of these macros is to allow the user to enter lines of
1424 \# text that will be quadded LRC *without* the user having to enter .BR
1425 \# or .br between lines.  For the sake of consistency, all three appear
1426 \# to behave similarly (from the point of view of the user), although
1427 \# the underlying primitives don't.  For this reason, LEFT, RIGHT, and
1428 \# CENTER must be followed by .QUAD [L R C J] or .JUSTIFY to restore
1429 \# text to groff fill mode.
1431 \# LEFT
1432 \# ----
1433 \# *Argument:
1434 \#   <none>
1435 \# *Function:
1436 \#   Turns fill mode off.  Allows user to quad lines left without
1437 \#   requiring the .BR or .br macro.
1438 \# *Notes:
1439 \#   LEFT simply turns fill off.  Lines that exceed the current LL will
1440 \#   not be broken, just continued (indefinitely) until a return is
1441 \#   encountered.  Note that this behaviour differs from the RIGHT and
1442 \#   CENTER macros.
1444 .MAC LEFT END
1445 .    if \\n[#TAB_ACTIVE]=0 \{\
1446 .       rr #QUAD
1447 .       ds $RESTORE_QUAD_VALUE LEFT
1448 .    \}
1449 .    ce 0
1450 .    nf
1451 .    nr #PSEUDO_FILL 1
1452 .\" Fix for a little conflict with DOCTYPE LETTER
1453 .    if '\\n(.z'LETTERHEAD1' \{ .rr #DATE_FIRST \}
1454 .END
1457 \# RIGHT
1458 \# -----
1459 \# *Argument:
1460 \#   <none>
1461 \# *Function:
1462 \#   Turns fill on.  Allows user to quad lines right without
1463 \#   requiring the .BR or .br macro.
1464 \# *Notes:
1465 \#   Lines that exceed the current LL will be broken, with the excess
1466 \#   text quadded right.
1468 .MAC RIGHT END
1469 .    if \\n[#TAB_ACTIVE]=0 \{\
1470 .       rr #QUAD
1471 .       ds $RESTORE_QUAD_VALUE RIGHT
1472 .    \}
1473 .    nf
1474 .    rj 100000
1475 .    nr #PSEUDO_FILL 1
1476 .END
1479 \# CENTER
1480 \# ------
1481 \# *Argument:
1482 \#   <none>
1483 \# *Function:
1484 \#   Turns fill on.  Allows user to center lines without
1485 \#   requiring the .BR or .br macro.
1486 \# *Notes:
1487 \#   Lines that exceed the current LL will be broken, with the excess
1488 \#   text centered.
1490 .MAC CENTER END
1491 .    if \\n[#TAB_ACTIVE]=0 \{\
1492 .       rr #QUAD
1493 .       ds $RESTORE_QUAD_VALUE CENTER
1494 .    \}
1495 .    nf
1496 .    ce 100000
1497 .    nr #PSEUDO_FILL 1
1498 .END
1500 \# =====================================================================
1502 \# +++TABS+++
1504 \# There are two different kinds of tabs available: typesetting tabs
1505 \# and string tabs.
1506 \# 
1507 \# Typesetting tabs are set with TAB_SET, which requires a tab number,
1508 \# an indent (offset) from the left margin and a length (optionally
1509 \# with a quad direction and an instruction to fill lines).  After tabs
1510 \# are set with TAB_SET, they are called with .TAB n, where "n"
1511 \# corresponds to the number passed to TAB_SET as a valid tab number.
1512 \# 
1513 \# String tabs allow the user to mark off tab positions inline.  Tab
1514 \# indents and lengths are calculated from the beginning and end
1515 \# positions of the marks.  Up to 19 string tabs may be created,
1516 \# numbered 1-19.  Once created, they are called with .TAB n,
1517 \# just like typesetting tabs.
1518 \# 
1519 \# Setting up string tabs is a two-step procedure.  First, the user
1520 \# enters an input line in which s/he wants to mark off string tabs.
1521 \# The beginning of a tab is marked with \*[STn], where "n" is
1522 \# the desired number of the tab.  The end of the the tab is marked
1523 \# with \*[STnX].  All ST's must have a matching STX.  String tabs
1524 \# may be nested.
1525 \# 
1526 \# Next, the user invokes .ST n for every string tab defined, and
1527 \# optionally passes quad information to it.  That done, string tabs
1528 \# can be called just like typesetting tabs.
1529 \# 
1530 \# String tabs don't preview properly with gxditview.  Use gv instead.
1532 \# Strings for string tab inlines
1533 \# ------------------------------
1534 \# Initialize string tab markers numbered 1 to 19.
1536 .nr #LOOP 0 1
1537 .while \n+[#LOOP]<20 \{\
1538 .   ds ST\n[#LOOP] \Ek[#ST\n[#LOOP]_OFFSET]
1541 .nr #LOOP 0 1
1542 .while \n+[#LOOP]<20 \{\
1543 .   ds ST\n[#LOOP]X \Ek[#ST\n[#LOOP]_MARK]
1545 .rr #LOOP
1548 \# These are reserved ST numbers for internal use
1549 .ds ST100  \Ek[#ST100_OFFSET]
1550 .ds ST100X \Ek[#ST100_MARK]
1551 .ds ST101  \Ek[#ST101_OFFSET]
1552 .ds ST101X \Ek[#ST101_MARK]
1555 \# QUAD AND SET STRING TABS
1556 \# ------------------------
1557 \# *Arguments:
1558 \#   <stringtab number>  L | R | C | J  [QUAD]
1559 \# *Function:
1560 \#   Creates strings $ST<#>_QUAD_DIR and $ST<#>_FILL, then sets up a
1561 \#   tab based on the collected information.
1562 \# *Notes:
1563 \#   Like TAB_SET, ST invoked without a quad direction will default to LEFT.
1564 \#   If lines should be filled and quadded, use the optional argument QUAD.
1565 \#   N.B. -- indents *must* be turned off before setting string tabs
1566 \#   inside .PAD
1568 .MAC ST END
1569 .    ds $ST\\$1_QUAD_DIR \\$2
1570 .    if \\n[#NUM_ARGS]=3 \{\
1571 .       ds $ST\\$1_FILL QUAD
1572 .    \}
1573 .    nr #ST\\$1_LENGTH \\n[#ST\\$1_MARK]-\\n[#ST\\$1_OFFSET]
1574 .    ie \\n[#IN_TAB] \{\
1575 .       TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u+\\n[#ST_OFFSET]u \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
1576 .    \}
1577 .    el \{\
1578 .       TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
1579 .    \}
1580 .END
1583 \# TAB SET
1584 \# -------
1585 \# *Arguments:
1586 \#   <n>  ident(ipPcm)  length(ipPcm)  [L | R | C | J [QUAD]]
1587 \# *Function:
1588 \#   Creates macros TABn and TAB n, where "n" is any arbitrary number.
1589 \#   TABn is a typesetting tab (i.e. a tab defined as an indent
1590 \#   from the page left offset plus a line length.)
1591 \# *Notes:
1592 \#   n      = arbitrary digit to identify the tab
1593 \#   indent = indent from left margin; unit of measure required
1594 \#   length = length of tab (unit of measure required; can be
1595 \#            \w'<string>'u--if more than one word in string, surround
1596 \#            with double quotes "\w'<three word string>'"
1597 \#   LRCJ   = quad for tab (left, right, center, justified)
1598 \#            If option QUAD afterwards is not given, quad is line for line
1599 \#            (no fill mode), meaning that there's no need for .BR or .br
1600 \#            between lines.
1601 \#   QUAD   = fill tab (so it behaves as if .QUAD LRC or .JUSTIFY
1602 \#            had been given).
1604 \#   N.B. -- indents *must* be turned off before setting tabs
1606 \# Examples:
1607 \# --------
1608 \# 
1609 \# .TAB_SET 1 2P+6p 12P C
1610 \# 
1611 \# means "create a tab numbered 1 that starts 2 picas and 6 points from
1612 \# the left margin, is 12 picas long, and centre each input line."
1613 \# 
1614 \# .TAB_SET 1 2P+6P 12P C QUAD
1615 \# 
1616 \# means exactly the same thing, except that input lines are joined and
1617 \# the area delimted by the tab filled with centered text.
1618 \# 
1619 \# TAB n can be called at any time after being set.
1620 \# 
1621 \# Tabs are NOT columnar in behaviour.  If the text inside a
1622 \# tab runs to several lines, when you call the next tab a break
1623 \# occurs, meaning that the new tab starts one line below the last
1624 \# line in the previous tab.  For columnar behaviour, you must
1625 \# use the multi-column macros in addition to tabs.
1626 \# 
1627 \# If you want tabs to line up bottom-line to bottom-line (most likely
1628 \# single line tabs), use .TN (provided the tabs are numbered sequentially).
1629 \# Otherwise, you must use .EL then .TAB <n> if you want them to align.
1630 \# 
1631 \# If you want to reset tabs, you must use .TQ before .TAB_SET.
1632 \# 
1633 \# Note that indents are turned off automatically whenever a new
1634 \# tab is called with TAB <n>.
1635 \# 
1636 \# Tabs themselves are user-invoked using the TAB macro with a numeric
1637 \# argument, e.g. TAB 1.
1638 \# 
1639 \# Generally, in order not to get confused, it's a good idea
1640 \# to make sure all indents are off before setting tabs.
1642 .MAC TAB_SET END
1643 .    br
1644 .    nr #TAB_NUMBER \\$1
1645 .    ds $CURRENT_TAB \\n[#TAB_NUMBER]
1646 .    nr #TAB_OFFSET (\\$2)
1647 .    nr #TAB_LENGTH (\\$3)
1648 .    MAC TAB\\n[#TAB_NUMBER] DONE \"Define TAB macro
1649 .        if !\\\\n[#TB+]=1 \{ .br \}
1650 .        if \\\\n[#TB+]=1 \{\
1651 .           EL
1652 .           vpt 0
1653 .           rr #TB+
1654 .        \}
1655 .        in 0
1656 .        nr #TAB_ACTIVE 1
1657 .        nr #CURRENT_TAB \\n[#TAB_NUMBER]
1658 .        ds $CURRENT_TAB \\*[$CURRENT_TAB]
1659 .        nr #TAB_OFFSET\\*[$CURRENT_TAB] \\n[#TAB_OFFSET]
1660 .        nr #ST_OFFSET \\n[#TAB_OFFSET]
1661 .        po \\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u
1662 .        ll \\n[#TAB_LENGTH]u
1663 .        ta \En(.lu
1664 .        ie '\\$5'QUAD' \{\
1665 .           if '\\$4'L' \{ .QUAD L  \}
1666 .           if '\\$4'R' \{ .QUAD R  \}
1667 .           if '\\$4'C' \{ .QUAD C  \}
1668 .           if '\\$4'J' \{ .JUSTIFY \}
1669 .        \}
1670 .        el \{\
1671 .           if '\\$4''  \{ .LEFT    \}
1672 .           if '\\$4'L' \{ .LEFT    \}
1673 .           if '\\$4'R' \{ .RIGHT   \}
1674 .           if '\\$4'C' \{ .CENTER  \}
1675 .           if '\\$4'J' \{ .JUSTIFY \}
1676 .        \}
1677 .        if \\\\n[#TN]=1 \{\
1678 .           TRAP
1679 .           rr #TN
1680 .        \}
1681 .DONE
1682 .    rr #TAB_ACTIVE
1683 .END
1686 \# TAB
1687 \# ---
1688 \# *Arguments:
1689 \#   <tab number to tab into>
1690 \# *Function:
1691 \#   Moves to tab number passed as an argument.
1693 .MAC TAB END
1694 .    ds $TAB_NUMBER \\$1
1695 .    TAB\\*[$TAB_NUMBER]
1696 .    nr #IN_TAB 1
1697 .END
1700 \# TAB NEXT
1701 \# --------
1702 \# *Argument:
1703 \#   <none>
1704 \# *Function:
1705 \#   Automagically moves to TAB<n+1> on the same line as the last
1706 \#   line of the previous tab.
1707 \# *Notes:
1708 \#   The \c inline must be appended to the end of input lines when in
1709 \#   nofill mode; in fill modes, the \c inline must not be used.
1711 .MAC TN END
1712 .    nr #TN 1
1713 .    TRAP OFF
1714 .    sp -1v
1715 .    nr #NEXT_TAB \\n[#CURRENT_TAB]+1
1716 .    TAB\\n[#NEXT_TAB]
1717 .    TRAP
1718 .END
1720 \# An inline escape to accomplish the same thing.  Actually
1721 \# preferable, since it works with filled and non-filled copy and
1722 \# doesn't require the user to remember to use (or not use) the \c.
1724 .ds TB+ "\c\\R'#TB+ 1'\\R'#TN 1'\\R'#NEXT_TAB \\n[#CURRENT_TAB]+1'\\*[TAB\\n[#NEXT_TAB]]\c
1726 \# TAB QUIT
1727 \# --------
1728 \# *Argument:
1729 \#   <none>
1730 \# *Function:
1731 \#   Sets #TAB_ACTIVE to "0" (off).
1732 \#   Resets left margin to value in effect prior to tabs.
1733 \#   Resets line length to value in effect prior to tabs.
1734 \#   Checks #QUAD to see if we were in flush or quad mode
1735 \#   prior to tabs (0=off, 1=on).
1736 \#   Resets QUAD [ L|R|C ], LEFT, RIGHT, CENTER, or JUSTIFY
1737 \#   in effect prior to tabs.
1738 \# *Notes:
1739 \#   TQ *must* come before setting any new tabs if you want the
1740 \#   tabs' indents measured from page left.  Otherwise, the tabs'
1741 \#   indents are measured from the left margin of the tab you're
1742 \#   currently in.
1744 .MAC TQ END
1745 .    br
1746 .    rr #TAB_ACTIVE
1747 .    rr #IN_TAB
1748 .    po \\n[#L_MARGIN]u
1749 .    ll \\n[#L_LENGTH]u
1750 .    ta \\n(.lu
1751 .    ie \\n[#QUAD] \{\
1752 .       ie '\\*[$RESTORE_QUAD_VALUE]'J' \{ .JUSTIFY \}
1753 .       el                              \{ .QUAD \\*[$RESTORE_QUAD_VALUE] \}
1754 .    \}
1755 .    el \{\
1756 .       if '\\*[$RESTORE_QUAD_VALUE]'LEFT'   \{ .LEFT \}
1757 .       if '\\*[$RESTORE_QUAD_VALUE]'RIGHT'  \{ .RIGHT \}
1758 .       if '\\*[$RESTORE_QUAD_VALUE]'CENTER' \{ .CENTER \}
1759 .    \}
1760 .END
1762 \# ====================================================================
1764 \# COLOR HANDLING
1765 \# ==============
1767 \# COLOR
1768 \# -----
1769 \# *Arguments:
1770 \#   <pre-defined NEWCOLOR or XCOLOR>
1771 \# *Function:
1772 \#   Allows the inline escape for setting color to be called
1773 \#   as a macro.
1775 .MAC COLOR END
1776 .ie \\n(.u=1 \{\
1778 \\*[\\$1]\c
1780 .el \{ \\*[\\$1] \}
1781 .END
1784 \# NEWCOLOR
1785 \# --------
1786 \# *Arguments:
1787 \#   <color name> [<color scheme>] <color definition>
1788 \# *Function:
1789 \#   Based on .defcolor, allows users to name and define colors using
1790 \#   one of the four color schemes rgb, cmy, cmyk and grey.  The new
1791 \#   color is then defined as a string so that it can be called inline
1792 \#   with \*[COLORNAME] or with .COLOR.
1793 \# *Notes:
1794 \#   With only two args, the default color scheme is rgb.
1796 \#   It is highly recommended that users define new colors as
1797 \#   all-cap strings, to differentiate them from x colors, which must
1798 \#   be in lower case.
1800 .MAC NEWCOLOR END
1801 .    if \\n[#NUM_ARGS]=2 \{\
1802 .       defcolor \\$1 rgb \\$2
1803 .    \}
1804 .    if \\n[#NUM_ARGS]=3 \{\
1805 .       if '\\$2'RGB'  .ds $COLOR_SCHEME rgb
1806 .       if '\\$2'CYM'  .ds $COLOR_SCHEME cym
1807 .       if '\\$2'CMYK' .ds $COLOR_SCHEME cmyk
1808 .       if '\\$2'GRAY' .ds $COLOR_SCHEME gray
1809 .       if '\\$2'GREY' .ds $COLOR_SCHEME gray
1810 .       defcolor \\$1  \\*[$COLOR_SCHEME] \\$3
1811 .    \}
1812 .    ds \\$1 \\m[\\$1]
1813 .END
1816 \# XCOLOR
1817 \# ------
1818 \# *Arguments:
1819 \#   <x color name> [<alias>]
1820 \# *Function:
1821 \#   Defines a string of x color name (i.e. a predefined x
1822 \#   color).  If <alias> is given, creates a string of <alias name>
1823 \#   that references the x color name of the first argument.
1824 \# *Notes:
1825 \#   The color name must be a valid color name from rgb.txt, and
1826 \#   must be given entirely in lower case, all one word.
1828 .MAC XCOLOR END
1829 .    ds \\$1 \m[\\$1]
1830 .    if \\n[#NUM_ARGS]=2 \{\
1831 .       ds \\$2 \m[\\$1]
1832 .       ds $\\$2_FILL \\$1
1833 .    \}
1834 .END
1836 \# Pre-define xcolors black and white
1838 .ds black \m[black]
1839 .ds BLACK \m[black]
1840 .ds white \m[white]
1841 .ds WHITE \m[WHITE]
1843 \# =====================================================================
1845 \# +++MISCELLANEOUS USEFUL MACROS AND STRINGS+++
1847 \# UNDERLINE
1848 \# ---------
1849 \# *Arguments:
1850 \#   <none> | <anything>
1851 \# *Function:
1852 \#   When on, underlines all letters, words, and digits in a passage,
1853 \#   ignoring punctuation and spaces.
1854 \# *Notes:
1855 \#   Only for use when the font family is COURIER, to simulate
1856 \#   typewriter-style underlining of italic  passages.
1858 .MAC UNDERLINE END
1859 .    ie '\\$1'' \{\
1860 .       nr #UNDERLINE_ON 1
1861 .       char A _\bA
1862 .       char B _\bB
1863 .       char C _\bC
1864 .       char D _\bD
1865 .       char E _\bE
1866 .       char F _\bF
1867 .       char G _\bG
1868 .       char H _\bH
1869 .       char I _\bI
1870 .       char J _\bJ
1871 .       char K _\bK
1872 .       char L _\bL
1873 .       char M _\bM
1874 .       char N _\bN
1875 .       char O _\bO
1876 .       char P _\bP
1877 .       char Q _\bQ
1878 .       char R _\bR
1879 .       char S _\bS
1880 .       char T _\bT
1881 .       char U _\bU
1882 .       char V _\bV
1883 .       char W _\bW
1884 .       char X _\bX
1885 .       char Y _\bY
1886 .       char Z _\bZ
1887 .       char \[`A] _\b\[`A]
1888 .       char \[^A] _\b\[^A]
1889 .       char \['A] _\b\['A]
1890 .       char \[:A] _\b\[:A]
1891 .       char \[oA] _\b\[oA]
1892 .       char \[~A] _\b\[~A]
1893 .       char \[AE] _\b\[AE]
1894 .       char \[`E] _\b\[`E]
1895 .       char \[^E] _\b\[^E]
1896 .       char \['E] _\b\['E]
1897 .       char \[:E] _\b\[:E]
1898 .       char \[`I] _\b\[`I]
1899 .       char \[^I] _\b\[^I]
1900 .       char \['I] _\b\['I]
1901 .       char \[:I] _\b\[:I]
1902 .       char \[`O] _\b\[`O]
1903 .       char \[^O] _\b\[^O]
1904 .       char \['O] _\b\['O]
1905 .       char \[:O] _\b\[:O]
1906 .       char \[~O] _\b\[~O]
1907 .       char \[/O] _\b\[/O]
1908 .       char \[`U] _\b\[`U]
1909 .       char \[^U] _\b\[^U]
1910 .       char \['U] _\b\['U]
1911 .       char \[:U] _\b\[:U]
1912 .       char \[,C] _\b\[,C]
1913 .       char \[-D] _\b\[-D]
1914 .       char \[~N] _\b\[~N]
1915 .       char \[TP] _\b\[TP]
1916 .       char \['Y] _\b\['Y]
1917 .       char \[:Y] _\b\[:Y]
1918 .       char a _\ba
1919 .       char b _\bb
1920 .       char c _\bc
1921 .       char d _\bd
1922 .       char e _\be
1923 .       char f _\bf
1924 .       char g _\bg
1925 .       char h _\bh
1926 .       char i _\bi
1927 .       char j _\bj
1928 .       char k _\bk
1929 .       char l _\bl
1930 .       char m _\bm
1931 .       char n _\bn
1932 .       char o _\bo
1933 .       char p _\bp
1934 .       char q _\bq
1935 .       char r _\br
1936 .       char s _\bs
1937 .       char t _\bt
1938 .       char u _\bu
1939 .       char v _\bv
1940 .       char w _\bw
1941 .       char x _\bx
1942 .       char y _\by
1943 .       char z _\bz
1944 .       char \[`a] _\b\[`a]
1945 .       char \[^a] _\b\[^a]
1946 .       char \['a] _\b\['a]
1947 .       char \[:a] _\b\[:a]
1948 .       char \[oa] _\b\[oa]
1949 .       char \[~a] _\b\[~a]
1950 .       char \[ae] _\b\[ae]
1951 .       char \[`e] _\b\[`e]
1952 .       char \[^e] _\b\[^e]
1953 .       char \['e] _\b\['e]
1954 .       char \[:e] _\b\[:e]
1955 .       char \[`i] _\b\[`i]
1956 .       char \[^i] _\b\[^i]
1957 .       char \['i] _\b\['i]
1958 .       char \[:i] _\b\[:i]
1959 .       char \[`o] _\b\[`o]
1960 .       char \[^o] _\b\[^o]
1961 .       char \['o] _\b\['o]
1962 .       char \[:o] _\b\[:o]
1963 .       char \[~o] _\b\[~o]
1964 .       char \[/o] _\b\[/o]
1965 .       char \[`u] _\b\[`u]
1966 .       char \[^u] _\b\[^u]
1967 .       char \['u] _\b\['u]
1968 .       char \[:u] _\b\[:u]
1969 .       char \[,c] _\b\[,c]
1970 .       char \[Sd] _\b\[Sd]
1971 .       char \[~n] _\b\[~n]
1972 .       char \[Tp] _\b\[Tp]
1973 .       char \['y] _\b\['y]
1974 .       char \[:y] _\b\[:y]
1975 .       char \[ss] _\b\[ss]
1976 .       char ' _\b'
1977 .       char 1 _\b1
1978 .       char 2 _\b2
1979 .       char 3 _\b3
1980 .       char 4 _\b4
1981 .       char 5 _\b5
1982 .       char 6 _\b6
1983 .       char 7 _\b7
1984 .       char 8 _\b8
1985 .       char 9 _\b9
1986 .       char 0 _\b0
1987 .    \}
1988 .    el \{\
1989 .       nr #UNDERLINE_ON 0
1990 .       rchar A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \
1991         a b c d e f g h i j k l m n o p q r s t u v w x y z \
1992         \[`A] \[^A] \['A] \[:A] \[oA] \[~A] \[AE] \[`E] \[^E] \['E] \[:E] \
1993         \[`I] \[^I] \['I] \[:I] \[`O] \[^O] \['O] \[:O] \[~O] \[/O] \[`U] \
1994         \[^U] \['U] \[:U] \[,C] \[-D] \[~N] \[TP] \['Y] \[:Y] \
1995         \[`a] \[^a] \['a] \[:a] \[oa] \[~a] \[ae] \[`e] \[^e] \['e] \[:e] \[`i] \
1996         \[^i] \['i] \[:i] \[`o] \[^o] \['o] \[:o] \[~o] \[/o] \[`u] \[^u] \['u] \
1997         \[:u] \[,c] \[Sd] \[~n] \[Tp] \['y] \[:y] \[ss] \
1998         ' 1 2 3 4 5 6 7 8 9 0
1999 .    \}
2000 .END
2003 \# UL/ULX
2004 \# ------
2005 \# *Arguments:
2006 \#   <none>
2007 \# *Function:
2008 \#   Underscores all letters, words, and digits in a passage,
2009 \#   ignoring punctuation and spaces.
2010 \# *Notes:
2011 \#   Intended to be called with inline escapes \*[UL] (underline
2012 \#   on) and \*[ULX] (underline off).  Only works when the font family
2013 \#   is fixed width, to simulate typewriter-style underlining of italic
2014 \#   passages.
2016 .MAC UL END
2017 \c\R'#UNDERLINE_ON 1'
2018 .       char A _\bA
2019 .       char B _\bB
2020 .       char C _\bC
2021 .       char D _\bD
2022 .       char E _\bE
2023 .       char F _\bF
2024 .       char G _\bG
2025 .       char H _\bH
2026 .       char I _\bI
2027 .       char J _\bJ
2028 .       char K _\bK
2029 .       char L _\bL
2030 .       char M _\bM
2031 .       char N _\bN
2032 .       char O _\bO
2033 .       char P _\bP
2034 .       char Q _\bQ
2035 .       char R _\bR
2036 .       char S _\bS
2037 .       char T _\bT
2038 .       char U _\bU
2039 .       char V _\bV
2040 .       char W _\bW
2041 .       char X _\bX
2042 .       char Y _\bY
2043 .       char Z _\bZ
2044 .       char \[`A] _\b\[`A]
2045 .       char \[^A] _\b\[^A]
2046 .       char \['A] _\b\['A]
2047 .       char \[:A] _\b\[:A]
2048 .       char \[oA] _\b\[oA]
2049 .       char \[~A] _\b\[~A]
2050 .       char \[AE] _\b\[AE]
2051 .       char \[`E] _\b\[`E]
2052 .       char \[^E] _\b\[^E]
2053 .       char \['E] _\b\['E]
2054 .       char \[:E] _\b\[:E]
2055 .       char \[`I] _\b\[`I]
2056 .       char \[^I] _\b\[^I]
2057 .       char \['I] _\b\['I]
2058 .       char \[:I] _\b\[:I]
2059 .       char \[`O] _\b\[`O]
2060 .       char \[^O] _\b\[^O]
2061 .       char \['O] _\b\['O]
2062 .       char \[:O] _\b\[:O]
2063 .       char \[~O] _\b\[~O]
2064 .       char \[/O] _\b\[/O]
2065 .       char \[`U] _\b\[`U]
2066 .       char \[^U] _\b\[^U]
2067 .       char \['U] _\b\['U]
2068 .       char \[:U] _\b\[:U]
2069 .       char \[,C] _\b\[,C]
2070 .       char \[-D] _\b\[-D]
2071 .       char \[~N] _\b\[~N]
2072 .       char \[TP] _\b\[TP]
2073 .       char \['Y] _\b\['Y]
2074 .       char \[:Y] _\b\[:Y]
2075 .       char a _\ba
2076 .       char b _\bb
2077 .       char c _\bc
2078 .       char d _\bd
2079 .       char e _\be
2080 .       char f _\bf
2081 .       char g _\bg
2082 .       char h _\bh
2083 .       char i _\bi
2084 .       char j _\bj
2085 .       char k _\bk
2086 .       char l _\bl
2087 .       char m _\bm
2088 .       char n _\bn
2089 .       char o _\bo
2090 .       char p _\bp
2091 .       char q _\bq
2092 .       char r _\br
2093 .       char s _\bs
2094 .       char t _\bt
2095 .       char u _\bu
2096 .       char v _\bv
2097 .       char w _\bw
2098 .       char x _\bx
2099 .       char y _\by
2100 .       char z _\bz
2101 .       char \[`a] _\b\[`a]
2102 .       char \[^a] _\b\[^a]
2103 .       char \['a] _\b\['a]
2104 .       char \[:a] _\b\[:a]
2105 .       char \[oa] _\b\[oa]
2106 .       char \[~a] _\b\[~a]
2107 .       char \[ae] _\b\[ae]
2108 .       char \[`e] _\b\[`e]
2109 .       char \[^e] _\b\[^e]
2110 .       char \['e] _\b\['e]
2111 .       char \[:e] _\b\[:e]
2112 .       char \[`i] _\b\[`i]
2113 .       char \[^i] _\b\[^i]
2114 .       char \['i] _\b\['i]
2115 .       char \[:i] _\b\[:i]
2116 .       char \[`o] _\b\[`o]
2117 .       char \[^o] _\b\[^o]
2118 .       char \['o] _\b\['o]
2119 .       char \[:o] _\b\[:o]
2120 .       char \[~o] _\b\[~o]
2121 .       char \[/o] _\b\[/o]
2122 .       char \[`u] _\b\[`u]
2123 .       char \[^u] _\b\[^u]
2124 .       char \['u] _\b\['u]
2125 .       char \[:u] _\b\[:u]
2126 .       char \[,c] _\b\[,c]
2127 .       char \[Sd] _\b\[Sd]
2128 .       char \[~n] _\b\[~n]
2129 .       char \[Tp] _\b\[Tp]
2130 .       char \['y] _\b\['y]
2131 .       char \[:y] _\b\[:y]
2132 .       char \[ss] _\b\[ss]
2133 .       char ' _\b'
2134 .       char 1 _\b1
2135 .       char 2 _\b2
2136 .       char 3 _\b3
2137 .       char 4 _\b4
2138 .       char 5 _\b5
2139 .       char 6 _\b6
2140 .       char 7 _\b7
2141 .       char 8 _\b8
2142 .       char 9 _\b9
2143 .       char 0 _\b0
2144 .END
2147 .MAC ULX END
2148 \c\R'#UNDERLINE_ON 0'
2149 .    rchar A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \
2150      a b c d e f g h i j k l m n o p q r s t u v w x y z \
2151      \[`A] \[^A] \['A] \[:A] \[oA] \[~A] \[AE] \[`E] \[^E] \['E] \[:E] \
2152      \[`I] \[^I] \['I] \[:I] \[`O] \[^O] \['O] \[:O] \[~O] \[/O] \[`U] \
2153      \[^U] \['U] \[:U] \[,C] \[-D] \[~N] \[TP] \['Y] \[:Y] \
2154      \[`a] \[^a] \['a] \[:a] \[oa] \[~a] \[ae] \[`e] \[^e] \['e] \[:e] \[`i] \
2155      \[^i] \['i] \[:i] \[`o] \[^o] \['o] \[:o] \[~o] \[/o] \[`u] \[^u] \['u] \
2156      \[:u] \[,c] \[Sd] \[~n] \[Tp] \['y] \[:y] \[ss] \
2157      ' 1 2 3 4 5 6 7 8 9 0
2158 .END
2161 \# UNDERSCORE
2162 \# ----------
2163 \# *Arguments:
2164 \#   [<points below baseline>] "text"
2165 \# *Function:
2166 \#   Places an underscore 2 points under the string if no lead given,
2167 \#   otherwise places underscore under string by user specified amount.
2168 \# *Notes:
2169 \#   When using this macro, the string to be underscored must begin
2170 \#   with double-quotes ("), regardless of whether it's the sole
2171 \#   argument or the second.
2172 \#   E.g.:
2173 \#      .UNDERSCORE "Text to be underscored
2174 \#         or
2175 \#      .UNDERSCORE 2p "Text to be underscored
2177 \#   All text is underscored (including punctuation and spaces).
2178 \#   This is the primary difference between UNDERLINE and
2179 \#   UNDERSCORE, aside from the fact the UNDERLINE only works with
2180 \#   fixed width fonts.
2182 \#   UNDERSCORE does not work across line breaks.  Each line of
2183 \#   text must be entered separately with UNDERSCORE.  If the
2184 \#   UNDERSCORE begins in the middle of a line and crosses over a
2185 \#   break, the portion before the break must be entered in its own
2186 \#   UNDERSCORE, as must the portion that comes after the break.
2188 .MAC UNDERSCORE END
2189 .    nr #SAVED_UNDERSCORE_WEIGHT     \\n[#UNDERSCORE_WEIGHT]
2190 .    nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ]
2191 .    ds $SAVED_UNDERSCORE_GAP        \\*[$UNDERSCORE_GAP]
2192 .    if \\n[#FROM_BIB_STRING]=1 \{\
2193 .       nr #UNDERSCORE_WEIGHT     \\n[#BIB_STRING_UNDERLINE_WEIGHT]
2194 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#BIB_STRING_UNDERLINE_WEIGHT_ADJ]
2195 .       ds $UNDERSCORE_GAP        \\*[$BIB_STRING_UNDERLINE_GAP]
2196 .    \}
2197 .    if \\n[#FROM_COVER]=1 \{\
2198 .       nr #UNDERSCORE_WEIGHT     \\n[#COVER_UNDERLINE_WEIGHT]
2199 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#COVER_UNDERLINE_WEIGHT_ADJ]
2200 .       ds $UNDERSCORE_GAP        \\*[$COVER_UNDERLINE_GAP]
2201 .    \}
2202 .    if \\n[#FROM_DOC_COVER]=1 \{\
2203 .       nr #UNDERSCORE_WEIGHT     \\n[#DOCCOVER_UNDERLINE_WEIGHT]
2204 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#DOCCOVER_UNDERLINE_WEIGHT_ADJ]
2205 .       ds $UNDERSCORE_GAP        \\*[$DOCCOVER_UNDERLINE_GAP]
2206 .    \}
2207 .    if \\n[#FROM_DOCTYPE]=1 \{\
2208 .       nr #UNDERSCORE_WEIGHT     \\n[#DOCTYPE_UNDERLINE_WEIGHT]
2209 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#DOCTYPE_UNDERLINE_WEIGHT_ADJ]
2210 .       ds $UNDERSCORE_GAP        \\*[$DOCTYPE_UNDERLINE_GAP]
2211 .    \}
2212 .    if \\n[#FROM_HEAD]=1 \{\
2213 .       nr #UNDERSCORE_WEIGHT     \\n[#HEAD_UNDERLINE_WEIGHT]
2214 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#HEAD_UNDERLINE_WEIGHT_ADJ]
2215 .       ds $UNDERSCORE_GAP        \\*[$HEAD_UNDERLINE_GAP]
2216 .    \}
2217 .    if \\n[#FROM_EN_STRING]=1 \{\
2218 .       nr #UNDERSCORE_WEIGHT     \\n[#EN_STRING_UNDERLINE_WEIGHT]
2219 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#EN_STRING_UNDERLINE_WEIGHT_ADJ]
2220 .       ds $UNDERSCORE_GAP        \\*[$EN_STRING_UNDERLINE_GAP]
2221 .    \}
2222 .    if \\n[#FROM_EN_TITLE]=1 \{\
2223 .       nr #UNDERSCORE_WEIGHT     \\n[#EN_TITLE_UNDERLINE_WEIGHT]
2224 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#EN_TITLE_UNDERLINE_WEIGHT_ADJ]
2225 .       ds $UNDERSCORE_GAP        \\*[$EN_TITLE_UNDERLINE_GAP]
2226 .    \}
2227 .    ie \\n[#NUM_ARGS]=1 \{\
2228 .       nr #TEXT_WIDTH \w'\\$1'
2229 \\$1\
2230 \D't \\n[#UNDERSCORE_WEIGHT]'\
2231 \h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
2232 \v'+(\\*[$UNDERSCORE_GAP])+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
2233 \D'l \\n[#TEXT_WIDTH]u 0'\
2234 \D't \\n[#RULE_WEIGHT]'\
2235 \h'-\\n[#RULE_WEIGHT]u'\
2236 \v'-(\\*[$UNDERSCORE_GAP])-\\n[#UNDERSCORE_WEIGHT_ADJ]u'
2237 .    \}
2238 .    el \{\
2239 .       nr #TEXT_WIDTH \w'\\$2'
2240 \\$2\
2241 \h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
2242 \v'+(\\$1)+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
2243 \D't \\n[#UNDERSCORE_WEIGHT]'\
2244 \D'l \\n[#TEXT_WIDTH]u 0'\
2245 \D't \\n[#RULE_WEIGHT]'\
2246 \h'-\\n[#RULE_WEIGHT]u'\
2247 \v'-(\\$1)-\\n[#UNDERSCORE_WEIGHT_ADJ]u'
2248 .    \}
2249 .    nr #UNDERSCORE_WEIGHT     \\n[#SAVED_UNDERSCORE_WEIGHT]
2250 .    nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ]
2251 .    ds $UNDERSCORE_GAP        \\*[$SAVED_UNDERSCORE_GAP]
2252 .    rr #SAVED_UNDERSCORE_WEIGHT
2253 .    rr #SAVED_UNDERSCORE_WEIGHT_ADJ
2254 .    rm $SAVED_UNDERSCORE_GAP
2255 .END
2258 \# DOUBLE UNDERSCORE
2259 \# -----------------
2260 \# *Arguments:
2261 \#   [points below baseline] [points distance between rules] "text"
2262 \# *Function:
2263 \#   Same as UNDERSCORE, except it produces a double underscore.  The default
2264 \#   distance between the rules is 2 points.
2265 \# *Notes:
2266 \#   The same double-quote requirement as UNDERSCORE.
2269 .MAC UNDERSCORE2 END
2270 .    nr #SAVED_UNDERSCORE_WEIGHT     \\n[#UNDERSCORE_WEIGHT]
2271 .    nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ]
2272 .    ds $SAVED_UNDERSCORE_GAP        \\*[$UNDERSCORE_GAP]
2273 .    ds $SAVED_RULE_GAP              \\*[$RULE_GAP]
2274 .    if \\n[#NUM_ARGS]=2 \{\
2275 .       ds $UNDERSCORE_GAP \\$1
2276 .    \}
2277 .    if \\n[#NUM_ARGS]=3 \{\
2278 .       ds $UNDERSCORE_GAP \\$1
2279 .       ds $RULE_GAP \\$2
2280 .    \}
2281 .    if \\n[#FROM_BIB_STRING] \{\
2282 .       nr #UNDERSCORE_WEIGHT     \\n[#BIB_STRING_UNDERLINE_WEIGHT]
2283 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#BIB_STRING_UNDERLINE_WEIGHT_ADJ]
2284 .       ds $UNDERSCORE_GAP        \\*[$BIB_STRING_UNDERLINE_GAP]
2285 .       ds $RULE_GAP              \\*[$BIB_STRING_RULE_GAP]
2286 .    \}
2287 .    if \\n[#FROM_EN_STRING] \{\
2288 .       nr #UNDERSCORE_WEIGHT     \\n[#EN_STRING_UNDERLINE_WEIGHT]
2289 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#EN_STRING_UNDERLINE_WEIGHT_ADJ]
2290 .       ds $UNDERSCORE_GAP        \\*[$EN_STRING_UNDERLINE_GAP]
2291 .       ds $RULE_GAP              \\*[$EN_STRING_RULE_GAP]
2292 .    \}
2293 .    if \\n[#NUM_ARGS]=1 \{\
2294 .       nr #TEXT_WIDTH \w'\\$1'
2295 \\$1\
2296 \D't \\n[#UNDERSCORE_WEIGHT]'\
2297 \v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
2298 \h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
2299 \D'l \\n[#TEXT_WIDTH]u 0'\
2300 \v'+\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
2301 \h'-\\n[#TEXT_WIDTH]u'\
2302 \D'l \\n[#TEXT_WIDTH]u 0'\
2303 \D't \\n[#RULE_WEIGHT]'\
2304 \h'-\\n[#RULE_WEIGHT]u'\
2305 \v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'
2306 .    \}
2307 .    if \\n[#NUM_ARGS]=2 \{\
2308 .       nr #TEXT_WIDTH \w'\\$2'
2309 \\$2\
2310 \D't \\n[#UNDERSCORE_WEIGHT]'\
2311 \v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
2312 \h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
2313 \D'l \\n[#TEXT_WIDTH]u 0'\
2314 \v'+(\\*[$RULE_GAP])+\\n[#UNDERSCORE_WEIGHT]u'\
2315 \h'-\\n[#TEXT_WIDTH]u'\
2316 \D'l \\n[#TEXT_WIDTH]u 0'\
2317 \D't \\n[#RULE_WEIGHT]'\
2318 \h'-\\n[#RULE_WEIGHT]u'\
2319 \v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])+(\\n[#UNDERSCORE_WEIGHT]u*2u)'
2320 .    \}
2321 .    if \\n[#NUM_ARGS]=3 \{\
2322 .       nr #TEXT_WIDTH \w'\\$3'
2323 \\$3\
2324 \D't \\n[#UNDERSCORE_WEIGHT]'\
2325 \v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
2326 \h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
2327 \D'l \\n[#TEXT_WIDTH]u 0'\
2328 \v'+\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
2329 \h'-\\n[#TEXT_WIDTH]u'\
2330 \D'l \\n[#TEXT_WIDTH]u 0'\
2331 \D't \\n[#RULE_WEIGHT]'\
2332 \h'-\\n[#RULE_WEIGHT]u'\
2333 \v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'
2334 .    \}
2335 .    nr #UNDERSCORE_WEIGHT     \\n[#SAVED_UNDERSCORE_WEIGHT]
2336 .    nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ]
2337 .    ds $UNDERSCORE_GAP        \\*[$SAVED_UNDERSCORE_GAP]
2338 .    rr #SAVED_UNDERSCORE_WEIGHT
2339 .    rr #SAVED_UNDERSCORE_WEIGHT_ADJ
2340 .    rm $SAVED_UNDERSCORE_GAP
2341 .    rm $SAVED_RULE_GAP
2342 .END
2344 \# Default underscoring rule gaps
2346 .ds $BIB_STRING_UNDERLINE_GAP 2p
2347 .ds $BIB_STRING_RULE_GAP      2p
2348 .ds $COVER_UNDERLINE_GAP      2p
2349 .ds $DOCCOVER_UNDERLINE_GAP   2p
2350 .ds $DOCTYPE_UNDERLINE_GAP    2p
2351 .ds $EN_STRING_UNDERLINE_GAP  2p
2352 .ds $EN_STRING_RULE_GAP       2p
2353 .ds $EN_TITLE_UNDERLINE_GAP   2p
2354 .ds $HEAD_UNDERLINE_GAP       2p
2355 .ds $RULE_GAP                 2p
2356 .ds $UNDERSCORE_GAP           2p
2359 \# SUPERSCRIPT INLINES
2360 \# -------------------
2361 \# *Function:
2362 \#   Prints everything after invocation as superscript.
2363 \# *Notes:
2364 \#   \*[SUP] and \*[SUPX] turn superscript on and off respectively.
2365 \#   If running type is pseudo-condensed/expanded, invoke the superscript
2366 \#   strings as \*[CONDSUP] or \*[EXTSUP] and turn off with \*[CONDSUPX]
2367 \#   and \*[EXTSUPX] respectively.
2369 .ds SUP \
2370 \R'#PT_SIZE_IN_UNITS \En[.ps]'\
2371 \R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
2372 \s[\En[#PT_SIZE_IN_UNITS]u]\v'-.26m'\s[\En[#SUP_PT_SIZE]u]
2374 .ds SUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.26m'
2376 .ds CONDSUP \
2377 \R'#PT_SIZE_IN_UNITS \En[.ps]'\
2378 \R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
2379 \s[\En[#PT_SIZE_IN_UNITS]u]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]\E*[COND_FOR_SUP]
2381 .ds CONDSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'\E*[COND]
2383 .ds EXTSUP \
2384 \R'#PT_SIZE_IN_UNITS \En[.ps]'\
2385 \R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
2386 \s[\En[#PT_SIZE_IN_UNITS]u]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]\E*[EXT_FOR_SUP]
2388 .ds EXTSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'\E*[EXT]
2391 \# SLANT
2392 \# -----
2394 \# SETSLANT
2395 \# --------
2396 \# *Arguments:
2397 \#   <number of degrees> | RESET
2398 \# *Function:
2399 \#   Modifies register #DEGREES for use with \*[SLANT], or resets
2400 \#   it to the default.  Defines string \*[SLANTX]
2401 \# *Notes:
2402 \#   \*[SLANT] permits pseudo-italicizing of a font in cases where
2403 \#   no italic font exists in a particular family.
2405 \#   Default # of degrees is 15.
2407 \#   Do not use unit of measure with arg to SETSLANT.
2409 \#   It may be necessary to adjust the spacing on either side of
2410 \#   [SLANT] and [SLANTX].
2412 \#   In docs, SLANT carries over from para to para.
2414 .nr #DEGREES 15
2415 .ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
2416 .ds SLANTX \ER'#SLANT_ON 0'\ES'0'
2418 .MAC SETSLANT END
2419 .    ie '\\$1'RESET' \{\
2420 .       nr #DEGREES 15
2421 .       if \\n[#PRINT_STYLE]=1 \{\
2422 .          if \\n[#UNDERLINE_SLANT] \{ .return \}
2423 .       \}
2424 .       ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
2425 .    \}
2426 .    el \{\
2427 .       nr #DEGREES \\$1
2428 .       if \\n[#PRINT_STYLE]=1 \{\
2429 .          if \\n[#UNDERLINE_SLANT] \{ .return \}
2430 .       \}
2431 .       ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
2432 .    \}
2433 .    ds SLANTX \ER'#SLANT_ON 0'\ES'0'
2434 .END
2437 \# BOLDER
2438 \# ------
2440 \# SETBOLDER
2441 \# ---------
2442 \# *Arguments:
2443 \#   <amount of emboldening> | RESET
2444 \# *Function:
2445 \#   Modifies register #BOLDER_UNITS for use with \*[BOLDER], or resets
2446 \#   it to the default 700 units.
2447 \# *Notes:
2448 \#   \*[BOLDER] allows pseudo-emboldening of a font where no bold
2449 \#   font exists in a particular family.
2451 \#   Default for SETBOLDER is 700 units.  Do not use unit of measure
2452 \#   with arg to SETBOLDER.
2454 .nr #BOLDER_UNITS 700
2456 .MAC SETBOLDER END
2457 .    if \\n[#IGNORE]=1 \{ .return \}
2458 .    ie '\\$1'RESET' \{ .nr #BOLDER_UNITS 700 \}
2459 .    el \{ .nr #BOLDER_UNITS \\$1 \}
2460 .END
2463 .MAC BOLDER END
2465 .bd \\n(.f \\n[#BOLDER_UNITS]
2466 .END
2469 .MAC BOLDERX END
2471 .bd \\n(.f
2472 .END
2474 \# +++CONDENSE/EXTEND+++
2476 \# CONDENSE/EXTEND
2477 \# ---------------
2478 \# *Arguments:
2479 \#   <percentage to condense/expand type size>
2480 \# *Function:
2481 \#   Stores current point size in z's in #PT_SIZE_IN_UNITS, figures out
2482 \#   new point size (for character width) from arg, and defines string
2483 \#   COND or EXT, which set the type size to the new character width,
2484 \#   and sets the height of type to the value stored in CURRENT_PT_SIZE
2485 \# *Notes:
2486 \#   CONDENSE_OR_EXTEND is invoked from the aliases
2487 \#   CONDENSE and EXTEND.  CONDENSE implies <100, EXTEND
2488 \#   implies >100.  Do not use a percent sign in the argument.
2490 \#   There is no default setting for CONDENSE or EXTEND.
2491 \#   80 is a good approximation of condensed type, 120 is okay
2492 \#   for extended.
2494 \#   The value set by CONDENSE or EXTEND applies to all
2495 \#   subsequent \*[COND] or \*[EXT] escapes until a new value is set.
2497 \#  \*[COND] or \*[EXT] must be turned off before all changes of point
2498 \#  size and reinvoked afterwards (if so desired).  This refers to
2499 \#  changes of point size via control lines AND with via inlines.
2501 .MAC CONDENSE_OR_EXTEND END
2502 .    if '\\$0'CONDENSE' \{\
2503 .       ds $COND_PERCENT \\$1
2504 .       if \\n[#PRINT_STYLE]=1 \{\
2505 .          rm $COND_PERCENT
2506 .          ds $COND_PERCENT 100
2507 .       \}
2508 .       ds COND \
2509 \R'#PT_SIZE_IN_UNITS \En[.ps]'\
2510 \R'#CONDENSE 1'\
2511 \R'#COND_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$COND_PERCENT]u)/100'\
2512 \Es[\En[#COND_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
2513 .       ds COND_FOR_SUP \
2514 \R'#COND_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$COND_PERCENT]u)/100'\
2515 \Es[\En[#COND_WIDTH]u]\H'\En[#SUP_PT_SIZE]u'
2516 .    \}
2517 .    if '\\$0'EXTEND' \{\
2518 .       ds $EXT_PERCENT \\$1
2519 .       if \\n[#PRINT_STYLE]=1 \{\
2520 .          rm $EXT_PERCENT
2521 .          ds $EXT_PERCENT 100
2522 .       \}
2523 .       ds EXT \
2524 \R'#PT_SIZE_IN_UNITS \En[.ps]'\
2525 \R'#EXTEND 1'\
2526 \R'#EXT_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$EXT_PERCENT]u)/100'\
2527 \Es[\En[#EXT_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
2528 .       ds EXT_FOR_SUP \
2529 \R'#EXT_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$EXT_PERCENT]u)/100'\
2530 \Es[\En[#EXT_WIDTH]u]\H'\En[#EXT_PT_SIZE]u'
2531 .    \}
2532 .END
2534 .ds CONDX \ER'#CONDENSE 0'\Es0\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
2535 .ds EXTX  \ER'#EXTEND   0'\Es0\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
2538 \# +++PAD LINES+++ (insert space)
2540 \# PAD MARKER
2541 \# ----------
2542 \# *Arguments:
2543 \#   <character to use for marking pad points>
2544 \# *Function:
2545 \#   Defines string $PAD_MARKER, used in PAD
2546 \# *Notes:
2547 \#   $PAD_MARKER is normally # (the pound sign).
2549 .MAC PAD_MARKER END
2550 .    ds $PAD_MARKER \\$1
2551 .END
2554 \# PAD
2555 \# ---
2556 \# *Argments:
2557 \#   "<string of text with padding markers inserted>"
2558 \# *Function:
2559 \#   Defines and redefines padding character (default=pound sign
2560 \#   unless padding character has been set with PAD_MARKER)
2561 \#   several times so that when the string is output at the end
2562 \#   of the macro, every # has been converted to an equal-sized
2563 \#   amount of padding (blank space) on a line. # is equivalent to
2564 \#   CompuGraphic's old <IS>.
2565 \# *Notes:
2566 \#   String tabs may be marked off during PAD.
2568 .MAC PAD END
2569 .    if \\n(.u=1 \{ .nr #FILL_MODE 1 \}
2570 .    nf
2571 .    if !d$PAD_MARKER .ds $PAD_MARKER #
2572 .    char \\*[$PAD_MARKER] \R'#PAD_COUNT \En[#PAD_COUNT]+1'
2573 .    ds $FAMILY_FOR_PAD \\n[.fam]
2574 .    fp \\n[.fp] \\n[.sty]
2575 .    ds $FONT_FOR_PAD   \\*[$FONT]
2576 .    nr #SIZE_FOR_PAD   \\n[.ps]
2577 .    ds $PAD_STRING \\$1
2578 .    as $PAD_STRING \Ekp
2579 .    di PAD_STRING
2580 .    fam \\*[$FAMILY_FOR_PAD]
2581 \\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
2582 .    br
2583 .    di
2584 .    char \\*[$PAD_MARKER] \R'#SPACE_TO_END \En(.l-\Enp'\R'#PAD_SPACE \En[#SPACE_TO_END]/\En[#PAD_COUNT]'
2585 .    di PAD_STRING
2586 .    fam \\*[$FAMILY_FOR_PAD]
2587 \\f]\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
2588 .    br
2589 .    di
2590 .    char \\*[$PAD_MARKER] \h'\En[#PAD_SPACE]u'
2591 .    ie \\n[#SILENT] \{\
2592 .       SILENT
2593 .       fam \\*[$FAMILY_FOR_PAD]
2594 \\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
2595 .       br
2596 .       SILENT OFF
2597 .    \}
2598 .    el \{\
2599 .       fam \\*[$FAMILY_FOR_PAD]
2600 \\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
2601 .       br
2602 .    \}
2603 .    if \\n[#FILL_MODE]=1 \{\
2604 .       fi
2605 .       rr #FILL_MODE
2606 .    \}
2607 .    rr #PAD_COUNT
2608 .    rr #SPACE_TO_END
2609 .    rr #PAD_SPACE
2610 .    rm $PAD_STRING
2611 .    rm PAD_STRING
2612 .    rchar #
2613 .    if '\\$2'NOBREAK' \{\
2614 .       TRAP OFF
2615 .       EOL
2616 .       TRAP
2617 .    \}
2618 .END
2621 \# +++LEADERS+++
2623 \# The leader mechanism is primitive, but it works.  Basically, every
2624 \# macro in this set that includes a line length also sets a single
2625 \# groff tab stop at the right hand end of the line.  That way,
2626 \# whenever Ctrl-A is invoked (always at the end of an input line),
2627 \# leader of the correct length gets deposited.  Ctrl-A is accessed by
2628 \# the string LEADER (i.e. inline, as \*[LEADER]).  Leaders within tabs
2629 \# get their length from the tab line length.
2631 \# SET LEADER CHARACTER
2632 \# --------------------
2633 \# *Arguments:
2634 \#   <character to use whenever \*[LEADER] is invoked>
2635 \# *Function:
2636 \#   Set leader character.
2638 .MAC LEADER_CHARACTER END
2639 .    lc \\$1
2640 .END
2642 .ds LEADER \x01
2644 \# +++DROP CAPS+++
2646 \# DROP CAP FAMILY
2647 \# ---------------
2648 \# *Argument:
2649 \#   <family of drop cap>
2650 \# *Function:
2651 \#   Creates or modifies string $DC_FAM.
2653 .MAC DROPCAP_FAMILY END
2654 .    ds $DC_FAM \\$1
2655 .END
2658 \# DROP CAP FONT
2659 \# -------------
2660 \# *Argument:
2661 \#   <font of drop cap>
2662 \# *Function:
2663 \#   Creates or modifies string $DC_FT.
2665 .MAC DROPCAP_FONT END
2666 .    ds $DC_FT \\$1
2667 .END
2670 \# DROPCAP COLOR
2671 \# -------------
2672 \# *Arguments:
2673 \#   <pre-defined XCOLOR or NEWCOLOR>
2674 \# *Function:
2675 \#   Defines string $DC_COLOR to argument.
2676 \# *Notes:
2677 \#   User must define an XCOLOR or NEWCOLOR before using
2678 \#   DC_COLOR.
2680 .MAC DROPCAP_COLOR END
2681 .    if \\n[#PRINT_STYLE]=1 \{ .return \}
2682 .    nr #DC_COLOR 1
2683 .    ds $DC_COLOR \\$1
2684 .END
2687 \# DROP CAP GUTTER
2688 \# ---------------
2689 \# *Argument:
2690 \#   <width of gutter between drop cap and indented text>
2691 \# *Function:
2692 \#   Creates or modifies register #DC_GUT.
2693 \# *Notes:
2694 \#   Requires unit of measure.  Default is 3p.
2696 .MAC DROPCAP_GUTTER END
2697 .    nr #DC_GUT (\\$1)
2698 .END
2701 \# DROP CAP ADJUST
2702 \# ---------------
2703 \# *Argument:
2704 \#   <+|- # of points to in/decrease point size of drop cap letter>
2705 \# *Function:
2706 \#   Creates or modifies string $DC_ADJUST.
2707 \# *Notes:
2708 \#   Despite its best efforts, DROPCAP doesn't always get the point
2709 \#   size of the drop cap critically perfect.  DROPCAP_ADJUST lets
2710 \#   the user add or subtract points (or fractions of points) to
2711 \#   get the size right.
2713 \#   Requires the + or - sign.
2715 .MAC DROPCAP_ADJUST END
2716 .    ds $DC_ADJUST \\$1
2717 .END
2720 \# DROP CAP
2721 \# --------
2722 \# *Arguments:
2723 \#   <dropcap letter> <# of lines> [COND <% to condense> | EXT <% to extend>]
2724 \# *Function:
2725 \#   Calculates point size of dropcap based on # of lines passed as
2726 \#   arg 2.  Sets indent for text based on dropcap width+gutter.
2727 \#   Advances and prints dropcap; reverses and prints indented text
2728 \#   to bottom of dropcap, then resets indent to left margin (plus
2729 \#   any indent that was in effect prior to invoking DROPCAP).
2730 \# *Notes:
2731 \#   Drop caps put a strain on on resource-challenged systems.
2733 \#   Drop caps when using the doc processing macro PP only work with
2734 \#   initial paragraphs (i.e. at doc start, or after heads), only when
2735 \#   DROPCAPS comes immediately after PP, and only when the PRINTSTYLE
2736 \#   is TYPESET.  If these conditions aren't met, DROPCAPS is silently
2737 \#   ignored.
2739 \#   The COND or EXT argument are processed separately from all
2740 \#   other COND or EXT inlines or macros, hence passing COND or
2741 \#   EXT has no effect on running type.
2743 .MAC DROPCAP END
2744 .    if \\n[#IGNORE]=1 \{\
2745 .       PRINT \\$1\c
2746 .       return
2747 .    \}
2748 .    br
2749 .    if n \{\
2750 .       PRINT \\$1\c
2751 .       return
2752 .    \}
2753 .    if \\n[#DOCS] \{\
2754 .       if \\n[#PRINT_STYLE]=1 \{\
2755 .       PRINT \\$1\c
2756 .       return
2757 .    \}
2758 .       if \\n[#PRINT_STYLE]=2 \{\
2759 .          if \\n[#PP_STYLE]=2 \{\
2760 .             PRINT \\$1\c
2761 .             return
2762 .          \}
2763 .          if \\n[#PP]>1 \{\
2764 .             PRINT \\$1\c
2765 .             return
2766 .          \}
2767 .          ti 0
2768 .       \}
2769 .    \}
2770 .    ds $DROPCAP         \\$1
2771 .    nr #DC_LINES        \\$2-1
2772 .    if \\n[#CONDENSE]=1 \{\
2773 .       ds $RESTORE_COND \\*[$COND_PERCENT]
2774 \\*[CONDX]
2775 .       nr #CONDENSE_WAS_ON 1
2776 .    \}
2777 .    if \\n[#EXTEND]=1 \{\
2778 .       ds $RESTORE_EXT \\*[$EXT_PERCENT]
2779 \\*[EXTX]
2780 .       nr #EXTEND_WAS_ON 1
2781 .    \}
2782 .    if '\\$3'COND'      \{ .CONDENSE \\$4 \}
2783 .    if '\\$3'EXT'       \{ .EXTEND \\$4 \}
2784 .    if !r#DC_GUT        \{ .nr #DC_GUT (3p) \}
2785 .    ds $RESTORE_FAM     \\n[.fam]
2786 .    ds $RESTORE_FT      \\*[$FONT]
2787 .    nr #RESTORE_PT_SIZE \\n[#PT_SIZE]
2788 .    nr #RESTORE_INDENT  \\n(.i
2789 .    SIZESPECS
2790 .    nr #DC_HEIGHT \\n[#DC_LINES]*\\n[#LEAD]+\\n[#CAP_HEIGHT]
2791 .    ie !d$DC_FAM \{ .FAM \\n[.fam] \}
2792 .    el \{ .FAM \\*[$DC_FAM] \}
2793 .    ie !d$DC_FT \{ .FT \\*[$FONT] \}
2794 .    el \{ .FT \\*[$DC_FT] \}
2795 .    while \\n[#GET_DC_HEIGHT]<\\n[#DC_HEIGHT] \{\
2796 .       ps \\n[#PT_SIZE]u+100u
2797 .       SIZESPECS
2798 .       nr #GET_DC_HEIGHT \\n[#CAP_HEIGHT]
2800 .    if d$DC_ADJUST \{ .ps \\*[$DC_ADJUST]p \}
2801 .    mk x
2802 .    sp \\n[#DC_LINES]v
2803 .    if \\n[#DOCS]=1 \{ .SHIM \}
2804 .    ie \\n[#DC_COLOR]=1 \{\
2805 .       ie !'\\$3'' \{\
2806 .          ie '\\$3'COND' \{ .PRINT \m[\\*[$DC_COLOR]]\\*[COND]\\*[$DROPCAP]\\*[CONDX]\m[] \}
2807 .          el \{ .PRINT \m[\\*[$DC_COLOR]]\\*[EXT]\\*[$DROPCAP]\\*[EXTX]\m[] \}
2808 .       \}
2809 .       el \{ .PRINT \m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[] \}
2810 .    \}
2811 .    el \{\
2812 .       ie !'\\$3'' \{\
2813 .          ie '\\$3'COND' \{ .PRINT \\*[COND]\\*[$DROPCAP]\\*[CONDX] \}
2814 .          el \{ .PRINT \\*[EXT]\\*[$DROPCAP]\\*[EXTX] \}
2815 .       \}
2816 .       el \{ .PRINT \m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[] \}
2817 .    \}
2818 .    if '\\$3'COND' \{ \E*[COND] \}
2819 .    if '\\$3'EXT'  \{ \E*[EXT]  \}
2820 .    ie \\n(.i \{ .in +\w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u \}
2821 .    el        \{ .in \w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u \}
2822 .    if '\\$3'COND' \{ \E*[CONDX]\c \}
2823 .    if '\\$3'EXT'  \{ \E*[EXTX]\c \}
2824 .    rt \\nxu
2825 .    FAM \\*[$RESTORE_FAM]
2826 .    FT  \\*[$RESTORE_FT]
2827 .    ps \\n[#RESTORE_PT_SIZE]u
2828 .    if \\n[#CONDENSE_WAS_ON] \{\
2829 .       CONDENSE \\*[$RESTORE_COND]
2830 \\*[COND]\c
2831 .    \}
2832 .    if \\n[#EXTEND_WAS_ON] \{\
2833 .       EXTEND \\*[$RESTORE_EXT]
2834 \\*[EXT]\c
2835 .    \}
2836 .    ie \\n(.u \{ .wh \\n(.du+\\n[#DC_HEIGHT]u-1v DROPCAP_OFF \}
2837 .    el \{ .wh \\n(.du+\\n[#DC_HEIGHT]u DROPCAP_OFF \}
2838 .    rr #CONDENSE_WAS_ON
2839 .    rr #EXTEND_WAS_ON
2840 .    rm $DROPCAP
2841 .    rr #DC_LINES
2842 .    rm $RESTORE_COND
2843 .    rm $RESTORE_EXT
2844 .    rm $RESTORE_FAM
2845 .    rm $RESTORE_FT
2846 .    rr #RESTORE_PT_SIZE
2847 .    rr #RESTORE_INDENT
2848 .    rr #DC_HEIGHT
2849 .    rr #GET_DC_HEIGHT
2850 .    rr x
2851 .END
2853 .MAC DROPCAP_OFF END
2854 '    in \\n[#RESTORE_INDENT]u
2855 .END
2857 \# =====================================================================
2859 \# +++GRAPHICAL OBJECTS+++
2861 \# HORIZONTAL RULE - DRH
2862 \# ---------------------
2863 \# *Arguments:
2864 \#   <none> | <rule weight> <indent> <length> [ <color> ]
2865 \# *Function:
2866 \#   With no arg, draws a full measure rule.  With args, draws
2867 \#   described horizontal rule.
2868 \# *Notes:
2869 \#   Rules are drawn left-to-right, from the baseline down, and
2870 \#   return to their point of origin.  Color must be set in the
2871 \#   macro; otherwise the color will be black, regardless of current
2872 \#   .gcolor.  If no arg given, the rule weight is the one set by
2873 \#   RULE_WEIGHT.
2875 .MAC DRH END
2876 .    if \\n[.vpt]=1 \{\
2877 .       vpt 0
2878 .       nr #RESTORE_TRAP 1
2879 .    \}
2880 .    ie !\\n[#NO_ADVANCE]=1 \{ .br \}
2881 .    el \{\
2882 .       sp -1v
2883 .       rr #NO_ADVANCE
2884 .    \}
2885 .    ie \\n(.u=1 \{\
2886 .       nr #FILLED 1
2887 .       nr #FILL_MODE \\n(.j
2888 .    \}
2889 .    el \{\
2890 .       nr #NOFILL 1
2891 .       if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \}
2892 .       if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \}
2893 .       ce 0
2894 .       rj 0
2895 .    \}
2896 .    nf
2897 .    ds $RL_WEIGHT \\$1
2898 .    ds $RL_INDENT \\$2
2899 .    ds $RL_LENGTH \\$3
2900 .    ie !'\\$4'' \{\
2901 .       ds $RL_COLOR  \\$4
2902 .    \}
2903 .    el \{\
2904 .       ds $RL_COLOR default
2905 .    \}
2906 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
2907 .    nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ]
2908 .    di NULL
2909 .       if \\n[#NUM_ARGS]>=1 \{ .RULE_WEIGHT \\*[$RL_WEIGHT] \}
2910 .    di
2911 .    gcolor \\*[$RL_COLOR]
2912 .    ie \\n[#NUM_ARGS]=0 \{\
2913 .       ie \\n[#INDENT_ACTIVE] \{\
2914 .          nr #RESTORE_L_LENGTH \\n(.l
2915 .          if \\n[#INDENT_BOTH_ACTIVE] \{ .ll \\n(.lu-\\n[#BL_INDENT]u \}
2916 .          if \\n[#INDENT_LEFT_ACTIVE] \{ .ll \\n(.lu-\\n[#L_INDENT]u \}
2917 \D't \\n[#RULE_WEIGHT]'\
2918 \h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
2919 \v'\\n[#RULE_WEIGHT_ADJ]u'\
2920 \D'l \En(.lu 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\
2921 \v'-\\n[#RULE_WEIGHT_ADJ]u'\
2922 \D't \\n[#SAVED_RULE_WEIGHT]'
2923 .          ll \\n[#RESTORE_L_LENGTH]u
2924 .          rr #RESTORE_L_LENGTH
2925 .       \}
2926 .       el \{\
2927 \D't \\n[#RULE_WEIGHT]'\
2928 \h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
2929 \v'\\n[#RULE_WEIGHT_ADJ]u'\
2930 \D'l \En(.lu 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\
2931 \v'-\\n[#RULE_WEIGHT_ADJ]u'\
2932 \D't \\n[#SAVED_RULE_WEIGHT]'
2933 .       \}
2934 .    \}
2935 .    el \{\
2936 \D't \\n[#RULE_WEIGHT]'\
2937 \h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
2938 \v'\\n[#RULE_WEIGHT_ADJ]u'\
2939 \D'l \\*[$RL_LENGTH] 0'\
2940 \v'-\\n[#RULE_WEIGHT_ADJ]u'\
2941 \D't \\n[#SAVED_RULE_WEIGHT]'
2942 .    \}
2943 .    if \\n[#FILLED]=1 \{\
2944 .       if \\n[#FILL_MODE]=0 \{ .QUAD LEFT   \}
2945 .       if \\n[#FILL_MODE]=1 \{ .JUSTIFY     \}
2946 .       if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \}
2947 .       if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT  \}
2948 .       rr #FILLED
2949 .    \}
2950 .    sp -1v
2951 .    if \\n[#NOFILL]=1 \{\
2952 .       if \\n[#NOFILL_MODE]=3 \{ .CENTER \}
2953 .       if \\n[#NOFILL_MODE]=5 \{ .RIGHT  \}
2954 .    \}
2955 .    gcolor
2956 .    nr #RULE_WEIGHT     \\n[#SAVED_WEIGHT]
2957 .    nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ]
2958 .    rr #SAVED_WEIGHT
2959 .    rr #SAVED_WEIGHT_ADJ
2960 .    if \\n[#RESTORE_TRAP]=1 \{\
2961 .       vpt 1
2962 .       rr #RESTORE_TRAP
2963 .    \}
2964 .END
2967 \# RULE
2968 \# ----
2969 \# *Argument:
2970 \#   <none>
2971 \# *Function:
2972 \#   Draws a rule the length of the current measure.
2973 \# *Notes:
2974 \#   A convenience macro.  DRV does the same thing.  Kept in for
2975 \#   backward compatibility.
2977 .MAC RULE END
2978 .    if \\n(.u=1 \{\
2979 .       nr #FILLED 1
2980 .       ds $CURRENT_QUAD \\*[$QUAD_VALUE]
2981 .       nf
2982 .    \}
2983 .    ie \\n[#INDENT_ACTIVE] \{\
2984 .       if \\n[#INDENT_BOTH_ACTIVE] \{ .ll \\n(.lu-\\n[#BL_INDENT]u \}
2985 .       if \\n[#INDENT_LEFT_ACTIVE] \{ .ll \\n(.lu-\\n[#L_INDENT]u \}
2986 .       PRINT \D't \\n[#RULE_WEIGHT]'\v'\\n[#RULE_WEIGHT_ADJ]u'\D'l \En(.lu 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\h'|0'\c
2987 .       ll
2988 .       rr #RESTORE_L_LENGTH
2989 .    \}
2990 .    el \{\
2991 .       PRINT \D't \\n[#RULE_WEIGHT]'\v'\\n[#RULE_WEIGHT_ADJ]u'\D'l \En(.lu 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\h'|0'\c
2992 .    \}
2993 .    if r#FILLED \{\
2994 .       fi
2995 .       rr #FILLED
2996 .       QUAD \\*[$CURRENT_QUAD]
2997 .       rm $CURRENT_QUAD
2998 .    \}
2999 .    EOL
3000 .END
3003 \# VERTICAL RULE - DRV
3004 \# -------------------
3005 \# *Arguments:
3006 \#   <rule weight> <indent> <depth> [ <color> ]
3007 \# *Function:
3008 \#   Draws described vertical rule.
3009 \# *Notes:
3010 \#   Rules are drawn left-to-right, from the baseline down, and
3011 \#   return to their point of origin.  Color must be set in the
3012 \#   macro; otherwise the color will be black, regardless of current
3013 \#   .gcolor.
3015 .MAC DRV END
3016 .    if \\n[.vpt]=1 \{\
3017 .       vpt 0
3018 .       nr #RESTORE_TRAP 1
3019 .    \}
3020 .    ie !\\n[#NO_ADVANCE]=1 \{ .br \}
3021 .    el \{\
3022 .       sp -1v
3023 .       rr #NO_ADVANCE
3024 .    \}
3025 .    ie \\n(.u=1 \{\
3026 .       nr #FILLED 1
3027 .       nr #FILL_MODE \\n(.j
3028 .    \}
3029 .    el \{\
3030 .       nr #NOFILL 1
3031 .       if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \}
3032 .       if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \}
3033 .       ce 0
3034 .       rj 0
3035 .    \}
3036 .    nf
3037 .    ds $RL_WEIGHT \\$1
3038 .    ds $RL_INDENT \\$2
3039 .    ds $RL_DEPTH  \\$3
3040 .    ie !'\\$4'' \{\
3041 .       ds $RL_COLOR  \\$4
3042 .    \}
3043 .    el \{\
3044 .       ds $RL_COLOR default
3045 .    \}
3046 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
3047 .    nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ]
3048 .    di NULL
3049 .       RULE_WEIGHT \\*[$RL_WEIGHT]
3050 .    di
3051 .    gcolor \\*[$RL_COLOR]
3052 \D't \\n[#RULE_WEIGHT]'\
3053 \h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT_ADJ]u'\
3054 \D'l 0 \\*[$RL_DEPTH]'\
3055 \D't \\n[#SAVED_RULE_WEIGHT]'
3056 .    if \\n[#FILLED]=1 \{\
3057 .       if \\n[#FILL_MODE]=0 \{ .QUAD LEFT   \}
3058 .       if \\n[#FILL_MODE]=1 \{ .JUSTIFY     \}
3059 .       if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \}
3060 .       if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT  \}
3061 .       rr #FILLED
3062 .    \}
3063 .    sp -1v
3064 .    if \\n[#NOFILL]=1 \{\
3065 .       if \\n[#NOFILL_MODE]=3 \{ .CENTER \}
3066 .       if \\n[#NOFILL_MODE]=5 \{ .RIGHT  \}
3067 .    \}
3068 .    gcolor
3069 .    nr #RULE_WEIGHT     \\n[#SAVED_WEIGHT]
3070 .    nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ]
3071 .    if \\n[#RESTORE_TRAP]=1 \{\
3072 .       vpt 1
3073 .       rr #RESTORE_TRAP
3074 .    \}
3075 .END
3077 \# BOXES - DBX
3078 \# -----------
3079 \# *Arguments:
3080 \#   <rule weight | SOLID> <indent> <length> <depth> [ <color> ]
3081 \# *Function:
3082 \#   Draws described box.
3083 \# *Notes:
3084 \#   Boxes are drawn left-to-right, from the baseline down, and
3085 \#   return to their point of origin.  Box rules are drawn from the
3086 \#   perimeter inwards.  Color must be set in the macro; otherwise
3087 \#   the color will be black, regardless of current .gcolor.  If no
3088 \#   arg given, the rule weight is the one set by RULE_WEIGHT.
3090 .MAC DBX END
3091 .    if \\n[.vpt]=1 \{\
3092 .       vpt 0
3093 .       nr #RESTORE_TRAP 1
3094 .    \}
3095 .    ie !\\n[#NO_ADVANCE]=1 \{ .br \}
3096 .    el \{\
3097 .       sp -1v
3098 .       rr #NO_ADVANCE
3099 .    \}
3100 .    ie \\n(.u=1 \{\
3101 .       nr #FILLED 1
3102 .       nr #FILL_MODE \\n(.j
3103 .    \}
3104 .    el \{\
3105 .       nr #NOFILL 1
3106 .       if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \}
3107 .       if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \}
3108 .       ce 0
3109 .       rj 0
3110 .    \}
3111 .    nf
3112 .    ie '\\$1'SOLID' \{\
3113 .       nr #BX_SOLID 1
3114 .    \}
3115 .    el \{\
3116 .       ds $BX_WEIGHT \\$1
3117 .    \}
3118 .    ds $BX_INDENT \\$2
3119 .    ds $BX_WIDTH \\$3
3120 .    ds $BX_DEPTH  \\$4
3121 .    ie !'\\$5'' \{\
3122 .       ie d$\\$5_FILL \{\
3123 .          ds $BX_COLOR \\*[$\\$5_FILL]
3124 .       \}
3125 .       el \{\
3126 .          ds $BX_COLOR \\$5
3127 .       \}
3128 .    \}
3129 .    el \{\
3130 .       ds $BX_COLOR default
3131 .    \}
3132 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
3133 .    nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3134 .    if !'\\$1'SOLID' \{\
3135 .       di NULL
3136 .          RULE_WEIGHT \\*[$BX_WEIGHT]
3137 .       di
3138 .    \}
3139 .    ds $BX_INDENT \\*[$BX_INDENT]-\\n[#WEIGHT_ADJ]u
3140 .    ie \\n[#BX_SOLID]=1 \{\
3141 .       fcolor \\*[$BX_COLOR]
3142 \h'\\*[$BX_INDENT]'\
3143 \D'P \\*[$BX_WIDTH] 0 0 \\*[$BX_DEPTH] -\\*[$BX_WIDTH] 0 0 -\\*[$BX_DEPTH]'
3144 .       fcolor
3145 .       rr #BX_SOLID
3146 .    \}
3147 .    el \{\
3148 .       gcolor \\*[$BX_COLOR]
3149 \D't \\n[#RULE_WEIGHT]'\
3150 \h'\\*[$BX_INDENT]'\
3151 \v'\\n[#WEIGHT_ADJ]u'\
3152 \D'p \\*[$BX_WIDTH]-\\n[#RULE_WEIGHT]u 0 0 \\*[$BX_DEPTH]-\\n[#RULE_WEIGHT]u -\\*[$BX_WIDTH]+\\n[#RULE_WEIGHT]u 0 0 -\\*[$BX_DEPTH]+\\n[#RULE_WEIGHT]u'\
3153 \v'-\\n[#WEIGHT_ADJ]u'\
3154 \D't \\n[#SAVED_RULE_WEIGHT]'
3155 .       gcolor
3156 .    \}
3157 .    sp -1v
3158 .    if \\n[#FILLED]=1 \{\
3159 .       if \\n[#FILL_MODE]=0 \{ .QUAD LEFT   \}
3160 .       if \\n[#FILL_MODE]=1 \{ .JUSTIFY     \}
3161 .       if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \}
3162 .       if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT  \}
3163 .       rr #FILLED
3164 .    \}
3165 .    if \\n[#NOFILL]=1 \{\
3166 .       if \\n[#NOFILL_MODE]=3 \{ .CENTER \}
3167 .       if \\n[#NOFILL_MODE]=5 \{ .RIGHT  \}
3168 .    \}
3169 .    nr #RULE_WEIGHT \\n[#SAVED_WEIGHT]
3170 .    nr #WEIGHT_ADJ  \\n[#SAVED_WEIGHT_ADJ]
3171 .    rr #SAVED_WEIGHT
3172 .    rr #SAVED_WEIGHT_ADJ
3173 .    if \\n[#RESTORE_TRAP]=1 \{\
3174 .       vpt 1
3175 .       rr #RESTORE_TRAP
3176 .    \}
3177 .END
3180 \# ELLIPSES - DCL
3181 \# --------------
3182 \# *Arguments:
3183 \#   <rule weight | SOLID> <indent> <width> <depth> [ <color> ]
3184 \# *Function:
3185 \#   Draws described ellipses.
3186 \# *Notes:
3187 \#   Ellipses (circles) are drawn left-to-right, from the baseline
3188 \#   down, and return to their point of origin.  Ellipse rules are
3189 \#   drawn from the perimeter inwards.  Color must be set in the
3190 \#   macro; otherwise the color will be black, regardless of current
3191 \#   .gcolor.  If no arg given, the rule weight is the one set by
3192 \#   RULE_WEIGHT.
3194 .MAC DCL END
3195 .    if \\n[.vpt]=1 \{\
3196 .       vpt 0
3197 .       nr #RESTORE_TRAP 1
3198 .    \}
3199 .    ie !\\n[#NO_ADVANCE]=1 \{ .br \}
3200 .    el \{\
3201 .       sp -1v
3202 .       rr #NO_ADVANCE
3203 .    \}
3204 .    ie \\n(.u=1 \{\
3205 .       nr #FILLED 1
3206 .       nr #FILL_MODE \\n(.j
3207 .    \}
3208 .    el \{\
3209 .       nr #NOFILL 1
3210 .       if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \}
3211 .       if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \}
3212 .       ce 0
3213 .       rj 0
3214 .    \}
3215 .    nf
3216 .    ie '\\$1'SOLID' \{\
3217 .       nr #CL_SOLID 1
3218 .    \}
3219 .    el \{\
3220 .       ds $CL_WEIGHT \\$1
3221 .    \}
3222 .    ds $CL_INDENT \\$2
3223 .    ds $CL_WIDTH  \\$3
3224 .    ds $CL_DEPTH  \\$4
3225 .    ie !'\\$5'' \{\
3226 .       ie d$\\$5_FILL \{\
3227 .          ds $CL_COLOR \\*[$\\$5_FILL]
3228 .       \}
3229 .       el \{\
3230 .          ds $CL_COLOR \\$5
3231 .       \}
3232 .    \}
3233 .    el \{\
3234 .       ds $CL_COLOR default
3235 .    \}
3236 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
3237 .    nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3238 .    if !'\\$1'SOLID' \{\
3239 .       di NULL
3240 .          RULE_WEIGHT \\*[$CL_WEIGHT]
3241 .       di
3242 .    \}
3243 .    ds $CL_INDENT \\*[$CL_INDENT]-\\n[#WEIGHT_ADJ]u
3244 .    ie \\n[#CL_SOLID]=1 \{\
3245 .       fcolor \\*[$CL_COLOR]
3246 \h'\\*[$CL_INDENT]'\
3247 \v'\\*[$CL_DEPTH]/2u'\
3248 \D'E \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\
3249 \v'-\\*[$CL_DEPTH]/2u'
3250 .       fcolor
3251 .       rr #CL_SOLID
3252 .    \}
3253 .    el \{\
3254 .       gcolor \\*[$CL_COLOR]
3255 \D't \\n[#RULE_WEIGHT]'\
3256 \h'\\*[$CL_INDENT]'\
3257 \v'\\*[$CL_DEPTH]/2u'\
3258 \D'e \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\
3259 \v'-(\\*[$CL_DEPTH]/2u)'\
3260 \D't \\n[#SAVED_RULE_WEIGHT]'
3261 .       gcolor
3262 .    \}
3263 .    sp -1v
3264 .    if \\n[#FILLED]=1 \{\
3265 .       if \\n[#FILL_MODE]=0 \{ .QUAD LEFT   \}
3266 .       if \\n[#FILL_MODE]=1 \{ .JUSTIFY     \}
3267 .       if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \}
3268 .       if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT  \}
3269 .       rr #FILLED
3270 .    \}
3271 .    if \\n[#NOFILL]=1 \{\
3272 .       if \\n[#NOFILL_MODE]=3 \{ .CENTER \}
3273 .       if \\n[#NOFILL_MODE]=5 \{ .RIGHT  \}
3274 .    \}
3275 .    nr #RULE_WEIGHT \\n[#SAVED_WEIGHT]
3276 .    nr #WEIGHT_ADJ  \\n[#SAVED_WEIGHT_ADJ]
3277 .    rr #SAVED_WEIGHT
3278 .    rr #SAVED_WEIGHT_ADJ
3279 .    if \\n[#RESTORE_TRAP]=1 \{\
3280 .       vpt 1
3281 .       rr #RESTORE_TRAP
3282 .    \}
3283 .END
3286 \# RULE WEIGHT
3287 \# -----------
3288 \# *Argument:
3289 \#   <weight of rules in points>
3290 \# *Function:
3291 \#   Sets \D't <n>' to the correct number of machine units for the
3292 \#   argument given in points.
3293 \# *Notes:
3294 \#   Decimal fractions are allowed.  Rule weight must be > 100.
3296 .MAC RULE_WEIGHT END
3297 .    di NULL \" Diverted so there's no problem with breaks, spacing, etc.
3298 .       ds $ARG \\$1
3299 .       substring $ARG -1
3300 .       if !\B'\\*[$ARG]' \{\
3301 .             tm1 "[mom]: The argument to \\$0 must not have a unit of measure appended.
3302 .             ab Aborting at \\$0, line \\n[.c].
3303 .       \}
3304 .       length #STR_LENGTH \\$1
3305 .       ds $ARG \\$1
3306 .       substring $ARG 0 0
3307 .       ie '\\*[$ARG]'.' \{\
3308 .          ds $ARG \\$1
3309 .          substring $ARG 1 \\n[#STR_LENGTH]-1
3310 .          nr #WEIGHT \\*[$ARG]*100
3311 .          if (\\n[#WEIGHT]>=1000) \{\
3312 .              while (\\n[#WEIGHT]>=1000) \{\
3313 .                  nr #WEIGHT \\n[#WEIGHT]/10
3314 .   \}
3315         \}
3316 .       \}
3317 .       el \{\
3318 .          ds $ARG \\$1
3319 .          substring $ARG 1 1
3320 .          ie '\\*[$ARG]'.' \{\
3321 .             ds $LHS \\$1
3322 .             substring $LHS 0 0
3323 .             ds $RHS \\$1
3324 .             substring $RHS 2
3325 .             nr #WEIGHT \\*[$LHS]\\*[$RHS]*100
3326 .             if (\\n[#WEIGHT]>=10000) \{\
3327 .                while (\\n[#WEIGHT]>=10000) \{\
3328 .                   nr #WEIGHT \\n[#WEIGHT]/10
3329 .   \}
3330 .             \}
3331 .          \}
3332 .          el \{\
3333 .             ie \\n[#STR_LENGTH]<=2 \{\
3334 .                nr #WEIGHT \\$1*1000
3335 .             \}
3336 .             el \{\
3337 .                ds $ARG \\$1
3338 .                substring $ARG 2 2
3339 .                ie !'\\*[$ARG]'.' \{\
3340 .                   tm1 "[mom]: Invalid argument given to macro \\$0 at line \\n[.c].
3341 .                   tm1 "       Rule weight must be > 100 points.
3342 .                   tm1 "       Falling back to default weight .5 points.
3343 .                   nr #WEIGHT 500
3344 .                \}
3345 .                el \{\
3346 .                   ds $LHS \\$1
3347 .                   substring $LHS 0 1
3348 .                   ds $RHS \\$1
3349 .                   substring $RHS 3
3350 .                   nr #WEIGHT \\*[$LHS]\\*[$RHS]*1000
3351 .                   if (\\n[#WEIGHT]>=100000) \{\
3352 .                      while (\\n[#WEIGHT]>=100000) \{\
3353 .                         nr #WEIGHT \\n[#WEIGHT]/10
3354 .   \}
3355 .                   \}
3356 .                \}
3357 .             \}
3358 .          \}
3359 .       \}
3360 .       nr #WEIGHT_ADJ \\n[#WEIGHT]/2
3361 .       if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT' \{\
3362 .          nr #BIB_STRING_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3363 .          nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3364 .       \}
3365 .       if '\\$0'COVER_UNDERLINE_WEIGHT' \{\
3366 .          nr #COVER_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3367 .          nr #COVER_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3368 .       \}
3369 .       if '\\$0'DOCCOVER_UNDERLINE_WEIGHT' \{\
3370 .          nr #DOCCOVER_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3371 .          nr #DOCCOVER_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3372 .       \}
3373 .       if '\\$0'DOCTYPE_UNDERLINE_WEIGHT' \{\
3374 .          nr #DOCTYPE_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3375 .          nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3376 .       \}
3377 .       if '\\$0'ENDNOTE_STRING_UNDERLINE_WEIGHT' \{\
3378 .          nr #EN_STRING_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3379 .          nr #EN_STRING_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3380 .       \}
3381 .       if '\\$0'ENDNOTE_TITLE_UNDERLINE_WEIGHT' \{\
3382 .          nr #EN_TITLE_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3383 .          nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3384 .       \}
3385 .       if '\\$0'FOOTER_RULE_WEIGHT' \{\
3386 .          nr #FOOTER_RULE_WEIGHT     \\n[#WEIGHT]
3387 .          nr #FOOTER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3388 .       \}
3389 .       if '\\$0'FOOTNOTE_RULE_WEIGHT' \{\
3390 .          nr #FN_RULE_WEIGHT     \\n[#WEIGHT]
3391 .          nr #FN_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3392 .       \}
3393 .       if '\\$0'HEAD_UNDERLINE_WEIGHT' \{\
3394 .          nr #HEAD_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3395 .          nr #HEAD_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3396 .       \}
3397 .       if '\\$0'HEADER_RULE_WEIGHT' \{\
3398 .          nr #HEADER_RULE_WEIGHT     \\n[#WEIGHT]
3399 .          nr #HEADER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3400 .       \}
3401 .       if '\\$0'RULE_WEIGHT' \{\
3402 .          nr #RULE_WEIGHT     \\n[#WEIGHT]
3403 .          nr #RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3404 .       \}
3405 .       if '\\$0'UNDERSCORE_WEIGHT' \{\
3406 .          nr #UNDERSCORE_WEIGHT     \\n[#WEIGHT]
3407 .          nr #UNDERSCORE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3408 .       \}
3409 .    di
3410 .END
3412 \# Aliases
3413 \# ~~~~~~~
3414 .ALIAS BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT RULE_WEIGHT
3415 .ALIAS COVER_UNDERLINE_WEIGHT               RULE_WEIGHT
3416 .ALIAS DOCCOVER_UNDERLINE_WEIGHT            RULE_WEIGHT
3417 .ALIAS DOCTYPE_UNDERLINE_WEIGHT             RULE_WEIGHT
3418 .ALIAS ENDNOTE_STRING_UNDERLINE_WEIGHT      RULE_WEIGHT
3419 .ALIAS ENDNOTE_TITLE_UNDERLINE_WEIGHT       RULE_WEIGHT
3420 .ALIAS FOOTER_RULE_WEIGHT                   RULE_WEIGHT
3421 .ALIAS FOOTNOTE_RULE_WEIGHT                 RULE_WEIGHT
3422 .ALIAS HEAD_UNDERLINE_WEIGHT                RULE_WEIGHT
3423 .ALIAS HEADER_RULE_WEIGHT                   RULE_WEIGHT
3424 .ALIAS UNDERSCORE_WEIGHT                    RULE_WEIGHT
3426 \# Default rule weights
3427 \# ~~~~~~~~~~~~~~~~~~~~
3428 .nr #BIB_STRING_UNDERLINE_WEIGHT 500
3429 .nr #COVER_UNDERLINE_WEIGHT      500
3430 .nr #DOCCOVER_UNDERLINE_WEIGHT   500
3431 .nr #DOCTYPE_UNDERLINE_WEIGHT    500
3432 .nr #EN_STRING_UNDERLINE_WEIGHT  500
3433 .nr #EN_TITLE_UNDERLINE_WEIGHT   500
3434 .nr #FN_RULE_WEIGHT              500
3435 .nr #FOOTER_RULE_WEIGHT          500
3436 .nr #HEAD_UNDERLINE_WEIGHT       500
3437 .nr #HEADER_RULE_WEIGHT          500
3438 .nr #RULE_WEIGHT                 500
3439 .nr #UNDERSCORE_WEIGHT           500
3441 .nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \\n[#BIB_STRING_UNDERLINE_WEIGHT]/2
3442 .nr #COVER_UNDERLINE_WEIGHT_ADJ      \\n[#DOCTYPE_UNDERLINE_WEIGHT]/2
3443 .nr #DOCCOVER_UNDERLINE_WEIGHT_ADJ   \\n[#DOCTYPE_RULE_WEIGHT]/2
3444 .nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ    \\n[#DOCTYPE_RULE_WEIGHT]/2
3445 .nr #EN_STRING_UNDERLINE_WEIGHT_ADJ  \\n[#EN_STRING_UNDERLINE_WEIGHT]/2
3446 .nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ   \\n[#EN_STRING_UNDERLINE_WEIGHT]/2
3447 .nr #FOOTER_RULE_WEIGHT_ADJ          \\n[#FOOTER_RULE_WEIGHT]/2
3448 .nr #FN_RULE_WEIGHT_ADJ              \\n[#FN_RULE_WEIGHT]/2
3449 .nr #HEAD_UNDERLINE_WEIGHT_ADJ       \\n[#HEAD_UNDERLINE_WEIGHT]/2
3450 .nr #HEADER_RULE_WEIGHT_ADJ          \\n[#HEADER_RULE_WEIGHT]/2
3451 .nr #RULE_WEIGHT_ADJ                 \\n[#RULE_WEIGHT]/2
3452 .nr #UNDERSCORE_WEIGHT_ADJ           \\n[#UNDERSCORE_WEIGHT]/2
3454 \# Set default rule weight
3456 .di NULL
3457 \D't 500'
3460 \# =====================================================================
3462 \# +++WORD AND SENTENCE SPACING+++
3464 \# WORD SPACE CONTROL
3465 \# ------------------
3466 \# *Argument:
3467 \#   <+|->wordspace | DEFAULT
3468 \# *Function:
3469 \#   Increases or decreases interword space by user supplied amount.
3470 \#   If DEFAULT, value is set to 12 (groff default).
3471 \# *Notes:
3472 \#   $WS_CONSTANT is the groff default word space.
3473 \#   $WS_VAR is the user supplied amount by which to in/decrease word space.
3474 \#   $WS is a concatenation of WS_CONSTANT and WS_VAR.
3476 \#   Because the user supplied value requires a literal + or - sign,
3477 \#   the macro argument is stored in a string.
3479 \#   \n[.sss] holds the current sentence space value.
3481 .MAC WS END
3482 .    ds $WS_CONSTANT 12
3483 .    ds $WS_VAR \\$1
3484 .    ie '\\$1'DEFAULT' .ds $WS_VAR +0
3485 .    el                .ds $WS (\\*[$WS_CONSTANT]\\*[$WS_VAR])
3486 .    ie \\n[.sss]=12   \{ .ss \\*[$WS] 12 \}
3487 .    el \{\
3488 .       ss \\*[$WS] (\\*[$WS]\\*[$SS_VAR])
3489 .       SS \\*[$SS_VAR]
3490 .    \}
3491 .END
3494 \# SENTENCE SPACE CONTROL
3495 \# ----------------------
3496 \# *Argument:
3497 \#   <+-sentencespace> | 0 | DEFAULT
3498 \# *Function:
3499 \#   Increases or decreases sentence space by user supplied amount.
3500 \#   If 0, sentence spaces are ignored.  If DEFAULT, value is
3501 \#   set to 12 (groff default).
3502 \# *Notes:
3503 \#   Because the user supplied value requires a literal + or - sign,
3504 \#   the macro argument is stored in a string.
3506 \#   Sentence space applies only to input where sentences are separated
3507 \#   by two spaces (and/or, in fill mode [FLUSH L|R|C or JUSTIFY], an EOL).
3508 \#   Changing .SS when sentences are separated by only one space has
3509 \#   no effect on the space between sentences.
3511 \#   \n[.ss] holds the current wordspace value.
3512 \#   \n[.sss] holds the current sentence space value.
3514 .MAC SS END
3515 .    ie '\\$1'0' \{ .ss \\n[.ss] (\\n[.ss]-\\n[.ss]) \}
3516 .    el \{\
3517 .       ie '\\$1'DEFAULT' \{ .ss \\n[.ss] \}
3518 .       el \{\
3519 .          ds $SS_VAR \\$1
3520 .          ss \\n[.ss] (0\\*[$SS_VAR])
3521 .       \}
3522 .    \}
3523 .END
3526 \# =====================================================================
3528 \# +++INDENTS+++
3530 \# There are five styles of indents: left, right, both, temporary,
3531 \# and hanging.  Each is set/invoked with a different macro.
3532 \# Indent macros begin with the letter "I", hence .IL means "indent left,"
3533 \# .IR means "indent right," and so on.
3534 \# 
3535 \# The first time any of the indent macros is used, it requires an
3536 \# argument--the size of the indent (with a unit of measure).  The
3537 \# size may also be entered using the \w escape--very useful
3538 \# for numbered lists using HI.  The unit of measure is required.
3539 \# Subsequent invocations don't require the argument; the indent
3540 \# measure remains the same until it's changed by invoking the macro
3541 \# with an argument again.
3542 \# 
3543 \# If no indents are in effect, the arguments passed to indent macros are
3544 \# measured from the left and right margins of the page.  If a left indent
3545 \# or a right indent is already in effect, the arguments passed to
3546 \# the indent macros are calculated from the current values; in other words,
3547 \# the arguments are additive.  If you quit an indent and later return
3548 \# to it, its value will be the value last in effect, unless you pass
3549 \# it an argument.  If you do pass an argument, it is added to the last
3550 \# value in effect, unless you cleared the indent with one of
3551 \# .I<LRB>X/Q macros.
3552 \# 
3553 \# Example
3554 \# -------
3555 \# 
3556 \# .IL 2P
3557 \# ...some text...
3558 \# .IL 2P
3559 \# ...some text...
3560 \# .IQ
3561 \# ...some text...
3562 \# .IL
3563 \# ...some text...
3564 \# 
3565 \# The first .IL 2P indents text 2P from the left margin.  The second
3566 \# .IL 2P indents text by an additional 2P, i.e. 4P from the left margin.
3567 \# .IQ turns the indent off.  The last .IL (which has no argument)
3568 \# takes its value from the total of all arguments passed to .IL (in
3569 \# this case, 2P and 2P), therefore it indents 2P+2P from the left
3570 \# margin, i.e. 4P.  If you wanted the last .IL to indent just 2P,
3571 \# you'd either have to reset the .IL prior to .IQ (.IL -2P), or pass
3572 \# the last .IL the argument 2P.
3573 \# 
3574 \# To reverse the sense of an indent added to an indent, you may use
3575 \# negative values.
3576 \# 
3577 \# Indents can be turned off individually with ILX, IRX, and IBX.
3578 \# LEFT and RIGHT indents may be combined and manipulated
3579 \# separately, (e.g. you can have an IL of 2P and an IR of 4P
3580 \# operative at the same time, and then change, say, the IL to
3581 \# 4P--thereby left indenting 6P--while the IR remains at 4P.
3582 \# 
3583 \# IB automatically turns off IL and IR.  They have to be reinvoked
3584 \# again when needed. IL and IR automatically turn IB off; it, too,
3585 \# has to be reinvoked with needed.
3586 \# 
3587 \# All indents can be turned off at once with IQ.  The ILX, IRX, IBX,
3588 \# and IQ macros simply turn the indents off; the values stored in
3589 \# the respective indent macros (IL, IR, IB) remain in effect.  If
3590 \# the user wishes to clear the values, the I<LRB>X macros should be
3591 \# invoked with the single argument CLEAR.  IQ CLEAR clears out
3592 \# the values stored for all indent styles.
3593 \# 
3594 \# Indents *must* be turned off before settting string tabs
3595 \# inside PAD.  Generally, in order not to get confused, it's a
3596 \# good idea to turn all indents off before setting any tabs.
3597 \# 
3598 \# TI and HI are special cases.  There's no need to turn them off,
3599 \# since they affect only one line--the first after their
3600 \# invocation.  Like the other indent styles, the first time
3601 \# they're invoked, they require a value in iPpcm; each subsequent
3602 \# invocation without an argument will use the same value.  To
3603 \# change the value, simply pass a new value.  Values for TI and HI
3604 \# are *not* additive.
3605 \# 
3606 \# HI presupposes that you already have a left or both indent on.
3607 \# HI will never hang a line outside the left margin of a document
3608 \# or column.  In other words, you must have IL or IB on before you
3609 \# can use HI.
3611 \# INDENT LEFT
3612 \# -----------
3614 .MAC IL END
3615 .    if \\n[#INDENT_STYLE_BOTH] \{ .IBX \}
3616 .    nr #INDENT_STYLE_LEFT  1
3617 .    nr #INDENT_ACTIVE      1
3618 .    nr #INDENT_LEFT_ACTIVE 1
3619 .    ie '\\$1'' \{\
3620 .       br
3621 .       in \\n[#L_INDENT]u
3622 .       ta \\n(.lu-\\n[#L_INDENT]u
3623 .    \}
3624 .    el \{\
3625 .       br
3626 .       nr #L_INDENT +(\\$1)
3627 .       in \\n[#L_INDENT]u
3628 .       ta \\n(.lu-\\n[#L_INDENT]u
3629 .    \}
3630 .END
3633 \# +++INDENT RIGHT+++
3635 .MAC IR END
3636 .    if \\n[#INDENT_STYLE_BOTH] \{ .IBX \}
3637 .    nr #INDENT_STYLE_RIGHT   1
3638 .    nr #INDENT_ACTIVE        1
3639 .    nr #INDENT_RIGHT_ACTIVE 1
3640 .    ie '\\$1'' \{\
3641 .       br
3642 .       ie \\n[#TAB_ACTIVE] \{\
3643 .          ll \\n(.lu-\\n[#R_INDENT]u
3644 .          ta \\n(.lu-\\n[#L_INDENT]u
3645 .       \}
3646 .       el \{\
3647 .          ll \\n[#L_LENGTH]u-\\n[#R_INDENT]u
3648 .          ta \\n(.lu-\\n[#L_INDENT]u
3649 .       \}
3650 .    \}
3651 .    el \{\
3652 .       br
3653 .       nr #R_INDENT +(\\$1)
3654 .       ie \\n[#TAB_ACTIVE] \{\
3655 .          ll \\n(.lu-\\n[#R_INDENT]u
3656 .          ta \\n(.lu-\\n[#L_INDENT]u
3657 .       \}
3658 .       el \{\
3659 .          ll \\n[#L_LENGTH]u-\\n[#R_INDENT]u
3660 .          ta \\n(.lu-\\n[#L_INDENT]u
3661 .       \}
3662 .    \}
3663 .END
3666 \# +++INDENT BOTH+++
3668 .MAC IB END
3669 .    if \\n[#INDENT_STYLE_LEFT]  \{ .ILX \}
3670 .    if \\n[#INDENT_STYLE_RIGHT] \{ .IRX \}
3671 .    nr #INDENT_STYLE_BOTH  1
3672 .    nr #INDENT_ACTIVE      1
3673 .    nr #INDENT_BOTH_ACTIVE 1
3674 .    ie '\\$1'' \{\
3675 .       br
3676 .       in \\n[#BL_INDENT]u
3677 .       ie \\n[#TAB_ACTIVE] \{\
3678 .          ll \\n(.lu-\\n[#BR_INDENT]u
3679 .          ta \\n(.lu-\\n[#BR_INDENT]u
3680 .       \}
3681 .       el \{\
3682 .          ll \\n[#L_LENGTH]u-\\n[#BR_INDENT]u
3683 .          ta \\n(.lu-\\n[#BR_INDENT]u
3684 .       \}
3685 .    \}
3686 .    el \{\
3687 .       br
3688 .       nr #BL_INDENT (\\n[#INDENT]+\\$1)
3689 .       ie \\n[#NUM_ARGS]=2 \{ .nr #BR_INDENT +(\\$2) \}
3690 .       el                  \{ .nr #BR_INDENT \\n[#BL_INDENT] \}
3691 .       ie \\n[#TAB_ACTIVE] \{\
3692 .          in \\n[#BL_INDENT]u
3693 .          ll \\n(.lu-\\n[#BR_INDENT]u
3694 .          ta \\n(.lu-\\n[#BL_INDENT]u
3695 .       \}
3696 .       el \{\
3697 .          in \\n[#BL_INDENT]u
3698 .          ll \\n[#L_LENGTH]u-\\n[#BR_INDENT]u
3699 .          ta \\n(.lu-\\n[#BR_INDENT]u
3700 .       \}
3701 .    \}
3702 .END
3705 \# +++TEMPORARY INDENT+++
3707 .MAC TI END
3708 .    br
3709 .    ie '\\$1'' \{\
3710 .       ti \\n[#T_INDENT]u
3711 .       if \\n[#INDENT_LEFT_ACTIVE] \{\
3712 .          ti \\n[#T_INDENT]u+\\n[#L_INDENT]u
3713 .       \}
3714 .       if \\n[#INDENT_BOTH_ACTIVE] \{\
3715 .          ti \\n[#T_INDENT]u+\\n[#BL_INDENT]u
3716 .       \}
3717 .    \}
3718 .    el \{\
3719 .       nr #T_INDENT (\\$1)
3720 .       ti \\n[#T_INDENT]u
3721 .    \}
3722 .END
3725 \# +++HANGING INDENT+++
3727 .MAC HI END
3728 .    ie '\\$1'' \{ .ti -\\n[#HL_INDENT]u \}
3729 .    el \{\
3730 .       nr #HL_INDENT (\\$1)
3731 .       ti -\\n[#HL_INDENT]u
3732 .    \}
3733 .END
3736 \# +++INDENTS OFF+++
3738 .MAC ILX END
3739 .    br
3740 .    in 0
3741 .    rr #INDENT_LEFT_ACTIVE
3742 .    if '\\$1'CLEAR' \{\
3743 .       rr #L_INDENT
3744 .       rr #INDENT_STYLE_LEFT
3745 .    \}
3746 .END
3749 .MAC IRX END
3750 .    br
3751 .    rr #INDENT_RIGHT_ACTIVE
3752 .    ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3753 .    el \{\
3754 .       ie \\n[#COLUMNS] \{\
3755 .          ll \\n[#COL_L_LENGTH]u
3756 .          ta \\n(.lu
3757 .       \}
3758 .       el \{\
3759 .          ll \\n[#L_LENGTH]u
3760 .          ta \\n(.lu
3761 .       \}
3762 .    \}
3763 .    if '\\$1'CLEAR' \{\
3764 .       rr #R_INDENT
3765 .       rr #INDENT_STYLE_RIGHT
3766 .    \}
3767 .END
3770 .MAC IBX END
3771 .    br
3772 .    in 0
3773 .    rr #INDENT_BOTH_ACTIVE
3774 .    ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3775 .    el \{\
3776 .       ie \\n[#COLUMNS] \{\
3777 .          ll \\n[#COL_L_LENGTH]u
3778 .          ta \\n(.lu
3779 .       \}
3780 .       el \{\
3781 .          ll \\n[#L_LENGTH]u
3782 .          ta \\n(.lu
3783 .       \}
3784 .    \}
3785 .    if '\\$1'CLEAR' \{\
3786 .       rr #BL_INDENT
3787 .       rr #BR_INDENT
3788 .       rr #INDENT_STYLE_BOTH
3789 .    \}
3790 .END
3793 .MAC IX END
3794 .    if '\\$0'IX' \{\
3795 .       if !\\n[#IX_WARN] \{\
3796 .          tm1 "[mom]: Use of .IX is now deprecated.  Use .IQ instead.
3797 .          tm1 "      .IX will continue to behave as before, but to
3798 .          tm1 "       avoid this message, please update your document.
3799 .          nr #IX_WARN 1
3800 .       \}
3801 .    \}
3802 .    br
3803 .    in 0
3804 .    rr #INDENT_LEFT_ACTIVE
3805 .    rr #INDENT_RIGHT_ACTIVE
3806 .    rr #INDENT_BOTH_ACTIVE
3807 .    if \\n[#INDENT_STYLE_RIGHT] \{\
3808 .       ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3809 .       el \{\
3810 .          ie \\n[#COLUMNS] \{\
3811 .             ll \\n[#COL_L_LENGTH]u
3812 .             ta \\n(.lu
3813 .          \}
3814 .          el \{\
3815 .             ll \\n[#L_LENGTH]u
3816 .             ta \\n(.lu
3817 .          \}
3818 .       \}
3819 .    \}
3820 .    if \\n[#INDENT_STYLE_BOTH] \{\
3821 .       ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3822 .       el \{\
3823 .          ie \\n[#COLUMNS] \{\
3824 .             ll \\n[#COL_L_LENGTH]u
3825 .             ta \\n(.lu
3826 .          \}
3827 .          el \{\
3828 .             ll \\n[#L_LENGTH]u
3829 .             ta \\n(.lu
3830 .          \}
3831 .       \}
3832 .    \}
3833 .    if '\\$1'CLEAR' \{\
3834 .       if \\n[#INDENT_STYLE_RIGHT] \{\
3835 .          ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3836 .          el \{\
3837 .             ie \\n[#COLUMNS] \{\
3838 .                ll \\n[#COL_L_LENGTH]u
3839 .                ta \\n(.lu
3840 .             \}
3841 .             el \{\
3842 .                ll \\n[#L_LENGTH]u
3843 .                ta \\n(.lu
3844 .             \}
3845 .          \}
3846 .       \}
3847 .       if \\n[#INDENT_STYLE_BOTH] \{\
3848 .          ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3849 .          el \{\
3850 .             ie \\n[#COLUMNS] \{\
3851 .                ll \\n[#COL_L_LENGTH]u
3852 .                ta \\n(.lu
3853 .             \}
3854 .             el \{\
3855 .                ll \\n[#L_LENGTH]u
3856 .                ta \\n(.lu
3857 .             \}
3858 .          \}
3859 .       \}
3860 .       rr #L_INDENT
3861 .       rr #R_INDENT
3862 .       rr #BL_INDENT
3863 .       rr #BR_INDENT
3864 .       rr #T_INDENT
3865 .       rr #H_INDENT
3866 .       rr #INDENT_STYLE_LEFT
3867 .       rr #INDENT_STYLE_RIGHT
3868 .       rr #INDENT_STYLE_BOTH
3869 .    \}
3870 .    rr #INDENT_ACTIVE
3871 .END
3873 \# =====================================================================
3875 \# +++MULTIPLE COLUMNS+++
3877 \# MULTIPLE COLUMNS ON
3878 \# -------------------
3879 \# *Arguments:
3880 \#   <none>
3881 \# *Function:
3882 \#   Marks the top of a column set
3884 .MAC MCO END
3885 .mk c
3886 .END
3888 \# MULTIPLE COLUMN RETURN
3889 \# ----------------------
3890 \# *Arguments:
3891 \#   <none>
3892 \# *Function:
3893 \#   Returns to the top of a column set
3895 .MAC MCR END
3896 .    TRAP OFF
3897 .    sp |\\ncu
3898 .    TRAP
3899 .END
3901 \# MULTIPLE COLUMNS OFF
3902 \# --------------------
3903 \# *Arguments:
3904 \#   <none> | <lead to advance beneath bottom of deepest column>
3905 \# *Function:
3906 \#   Advances to the end of a column set
3907 \# *Notes:
3908 \#   With no argument, advances to the next baseline (at the current
3909 \#   leading value) beneath the longest column.  With an argument
3910 \#   (which requires a unit of measure), advances arg distance
3911 \#   beneath the baseline of the deepest column.  If the argument
3912 \#   is zero, advances to the baseline of the deepest column.
3914 .MAC MCX END
3915 .    TRAP OFF
3916 .    ie '\\$1'' \{\
3917 .       TQ
3918 .       sp |\\n(.hu
3919 .    \}
3920 .    el \{\
3921 .       nr #MCX_ALD (\\$1)
3922 .       TQ
3923 .       ie \\n[#MCX_ALD]=0 \{ .sp |\\n(.hu-1v \}
3924 .       el \{ .sp |\\n(.hu+\\n[#MCX_ALD]u \}
3925 .       rr #MCX_ALD
3926 .    \}
3927 .    TRAP
3928 .END
3930 \# =====================================================================
3932 \# +++TYPESETTING SUPPORT MACROS+++
3934 \# TRAP
3935 \# ----
3936 \# *Arguments:
3937 \#   toggle
3938 \# *Function:
3939 \#   Enables/disables traps.
3940 \# *Notes:
3941 \#   EL and TN don't function as advertised on the last line before
3942 \#   a trap (when they break the preceding line, they spring the
3943 \#   trap, and groff won't back up to the line preceding the trap).
3944 \#   TRAP is a kludge to get EL and TN work properly on last lines.
3945 \#   The user simply enloses the offending lines in TRAP OFF/TRAP.
3947 .MAC TRAP END
3948 .    ie '\\$1'' \{ .vpt 1 \}
3949 .    el \{ .vpt 0 \}
3950 .END
3953 \# SILENT
3954 \# ------
3955 \# *Arguments:
3956 \#   <none> | <anything>
3957 \# *Function:
3958 \#   Diverts text so that it doesn't print, or turns the function off.
3959 \# *Notes:
3960 \#   Useful for setting up autotabs where you don't want the line with
3961 \#   the tab marks to print.
3963 \#   Also aliased as COMMENT, in case user wants to input a batch of
3964 \#   text that doesn't print.
3966 .MAC SILENT END
3967 .    nr #SILENT 1
3968 .    if \\n[#QUAD] \{ .br \}
3969 .    ie '\\$1'' \{ .di NO_FLASH \}
3970 .    el \{\
3971 .       br
3972 .       di
3973 .       rm NO_FLASH
3974 .       rr #SILENT
3975 .    \}
3976 .END
3979 \# PRINT
3980 \# -----
3981 \# *Function:
3982 \#   Prints anything.  A macro that helps keep my code nicely indented.
3984 .MAC PRINT END
3985 .    nop \\$*
3986 .END
3989 \# CAPS
3990 \# ----
3991 \# *Arguments:
3992 \#   <none> | <anything>
3993 \# *Function:
3994 \#   Converts text to caps, or, if OFF, reverts to normal caps/lc.
3995 \# *Notes:
3996 \#   For inline control of capitalization style, use \*[UC] and
3997 \#   \*[LC].
3999 .MAC CAPS END
4000 .    ie '\\$1'' \{\
4001 .       tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
4002 .       tr Ă \[`A]
4003 .       tr Ă˘\[^A]
4004 .       tr Ăˇ\['A]
4005 .       tr Ă¤\[:A]
4006 .       tr ĂĄ\[oA]
4007 .       tr ĂŁ\[~A]
4008 .       tr Ă¦\[AE]
4009 .       tr Ă¨\[`E]
4010 .       tr ĂŞ\[^E]
4011 .       tr Ă©\['E]
4012 .       tr Ă«\[:E]
4013 .       tr Ă¬\[`I]
4014 .       tr Ă®\[^I]
4015 .       tr Ă­\['I]
4016 .       tr ĂŻ\[:I]
4017 .       tr Ă˛\[`O]
4018 .       tr Ă´\[^O]
4019 .       tr Ăł\['O]
4020 .       tr Ă¶\[:O]
4021 .       tr Ăµ\[~O]
4022 .       tr Ă¸\[/O]
4023 .       tr Ăą\[`U]
4024 .       tr Ă»\[^U]
4025 .       tr Ăş\['U]
4026 .       tr ĂĽ\[:U]
4027 .       tr Ă§\[,C]
4028 .       tr Ă°\[-D]
4029 .       tr Ă±\[~N]
4030 .       tr Ăľ\[TP]
4031 .       tr Ă˝\['Y]
4032 .       tr Ăż\[:Y]
4033 .       nr #CAPS_ON 1
4034 .    \}
4035 .    el \{\
4036 .       tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
4037 .       tr Ă \[`a]
4038 .       tr Ă˘\[^a]
4039 .       tr Ăˇ\['a]
4040 .       tr Ă¤\[:a]
4041 .       tr ĂĄ\[oa]
4042 .       tr ĂŁ\[~a]
4043 .       tr Ă¦\[ae]
4044 .       tr Ă¨\[`e]
4045 .       tr ĂŞ\[^e]
4046 .       tr Ă©\['e]
4047 .       tr Ă«\[:e]
4048 .       tr Ă¬\[`i]
4049 .       tr Ă®\[^i]
4050 .       tr Ă­\['i]
4051 .       tr ĂŻ\[:i]
4052 .       tr Ă˛\[`o]
4053 .       tr Ă´\[^o]
4054 .       tr Ăł\['o]
4055 .       tr Ă¶\[:o]
4056 .       tr Ăµ\[~o]
4057 .       tr Ă¸\[/o]
4058 .       tr Ăą\[`u]
4059 .       tr Ă»\[^u]
4060 .       tr Ăş\['u]
4061 .       tr ĂĽ\[:u]
4062 .       tr Ă§\[,c]
4063 .       tr Ă°\[Sd]
4064 .       tr Ă±\[~n]
4065 .       tr Ăľ\[Tp]
4066 .       tr Ă˝\['y]
4067 .       tr Ăż\[:y]
4068 .       rr #CAPS_ON
4069 .    \}
4070 .END
4072 .MAC UC END
4074 .    tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
4075 .    tr Ă \[`A]
4076 .    tr Ă˘\[^A]
4077 .    tr Ăˇ\['A]
4078 .    tr Ă¤\[:A]
4079 .    tr ĂĄ\[oA]
4080 .    tr ĂŁ\[~A]
4081 .    tr Ă¦\[AE]
4082 .    tr Ă¨\[`E]
4083 .    tr ĂŞ\[^E]
4084 .    tr Ă©\['E]
4085 .    tr Ă«\[:E]
4086 .    tr Ă¬\[`I]
4087 .    tr Ă®\[^I]
4088 .    tr Ă­\['I]
4089 .    tr ĂŻ\[:I]
4090 .    tr Ă˛\[`O]
4091 .    tr Ă´\[^O]
4092 .    tr Ăł\['O]
4093 .    tr Ă¶\[:O]
4094 .    tr Ăµ\[~O]
4095 .    tr Ă¸\[/O]
4096 .    tr Ăą\[`U]
4097 .    tr Ă»\[^U]
4098 .    tr Ăş\['U]
4099 .    tr ĂĽ\[:U]
4100 .    tr Ă§\[,C]
4101 .    tr Ă°\[-D]
4102 .    tr Ă±\[~N]
4103 .    tr Ăľ\[TP]
4104 .    tr Ă˝\['Y]
4105 .    tr Ăż\[:Y]
4106 .    nr #CAPS_ON 1
4107 .END
4109 .MAC LC END
4111 .    tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
4112 .    tr Ă \[`a]
4113 .    tr Ă˘\[^a]
4114 .    tr Ăˇ\['a]
4115 .    tr Ă¤\[:a]
4116 .    tr ĂĄ\[oa]
4117 .    tr ĂŁ\[~a]
4118 .    tr Ă¦\[ae]
4119 .    tr Ă¨\[`e]
4120 .    tr ĂŞ\[^e]
4121 .    tr Ă©\['e]
4122 .    tr Ă«\[:e]
4123 .    tr Ă¬\[`i]
4124 .    tr Ă®\[^i]
4125 .    tr Ă­\['i]
4126 .    tr ĂŻ\[:i]
4127 .    tr Ă˛\[`o]
4128 .    tr Ă´\[^o]
4129 .    tr Ăł\['o]
4130 .    tr Ă¶\[:o]
4131 .    tr Ăµ\[~o]
4132 .    tr Ă¸\[/o]
4133 .    tr Ăą\[`u]
4134 .    tr Ă»\[^u]
4135 .    tr Ăş\['u]
4136 .    tr ĂĽ\[:u]
4137 .    tr Ă§\[,c]
4138 .    tr Ă°\[Sd]
4139 .    tr Ă±\[~n]
4140 .    tr Ăľ\[Tp]
4141 .    tr Ă˝\['y]
4142 .    tr Ăż\[:y]
4143 .    rr #CAPS_ON
4144 .END
4146 \# SIZESPECS
4147 \# ---------
4148 \# Argument:
4149 \#   <none>
4150 \# Function:
4151 \#   Gets cap-height, x-height, and descender depth of the
4152 \#   current font at the current point size.
4153 \# *Notes:
4154 \#   The routine is diverted so it remains invisible to output.
4156 .MAC SIZESPECS END
4157 .    di TYPESIZE
4158 E\\R'#CAP_HEIGHT \\n[.cht]'
4159 e\\R'#X_HEIGHT \\n[.cht]'
4160 y\\R'#DESCENDER \\n[.cdp]'
4161 .    br
4162 .    di
4163 .END
4165 \# =====================================================================
4167 \# +++TYPESETTING ALIASES+++
4169 .ALIAS    ADD_SPACE       ALD
4170 .ALIAS    CENTRE          CENTER
4171 .ALIAS    COLOUR          COLOR
4172 .ALIAS    COMMENT         SILENT
4173 .ALIAS    CONDENSE        CONDENSE_OR_EXTEND
4174 .ALIAS    EXTEND          CONDENSE_OR_EXTEND
4175 .ALIAS    FAM             FAMILY
4176 .ALIAS    FONT            FT
4177 .ALIAS    HYPHENATE       HY
4178 .ALIAS    HYPHENATION     HY
4179 .ALIAS    HYSET           HY_SET
4180 .ALIAS    IBQ             IBX
4181 .ALIAS    ILQ             ILX
4182 .ALIAS    IQ              IX
4183 .ALIAS    IRQ             IRX
4184 .ALIAS    LIG             LIGATURES
4185 .ALIAS    NEWCOLOUR       NEWCOLOR
4186 .ALIAS    PADMARKER       PAD_MARKER
4187 .ALIAS    SP              ALD
4188 .ALIAS    SPACE           ALD
4189 .ALIAS    TABSET          TAB_SET
4190 .ALIAS    TB              TAB
4191 .ALIAS    UNDERSCORE_2    UNDERSCORE2
4192 .ALIAS    XCOLOUR         XCOLOR
4195 \# ====================================================================
4197 \# DOCUMENT PROCESSING MACROS, STRINGS AND ALIASES
4198 \# ===============================================
4200 \# +++PAGE DIMENSIONS+++
4202 \# PAPER SIZE
4203 \# ----------
4204 \# *Arguments:
4205 \#   LETTER | LEGAL | STATEMENT | TABLOID | LEDGER | FOLIO | QUARTO | 10x14 | EXECUTIVE | A3 | A4 | A5 | B4 | B5
4206 \# *Function:
4207 \#   Sets up dimensions for different paper sizes.
4209 .MAC PAPER END
4210 .    ds $PAPER \\$1
4211 .    if '\\*[$PAPER]'LETTER' \{\
4212 .       PAGEWIDTH  8.5i
4213 .       PAGELENGTH 11i
4214 .    \}
4215 .    if '\\*[$PAPER]'LEGAL' \{\
4216 .       PAGEWIDTH  8.5i
4217 .       PAGELENGTH 14i
4218 .    \}
4219 .    if '\\*[$PAPER]'STATEMENT' \{\
4220 .       PAGEWIDTH  5.5i
4221 .       PAGELENGTH 8.5i
4222 .    \}
4223 .    if '\\*[$PAPER]'TABLOID' \{\
4224 .       PAGEWIDTH  11i
4225 .       PAGELENGTH 17i
4226 .    \}
4227 .    if '\\*[$PAPER]'LEDGER' \{\
4228 .       PAGEWIDTH  17i
4229 .       PAGELENGTH 11i
4230 .    \}
4231 .    if '\\*[$PAPER]'FOLIO' \{\
4232 .       PAGEWIDTH  8.5i
4233 .       PAGELENGTH 13i
4234 .    \}
4235 .    if '\\*[$PAPER]'QUARTO' \{\
4236 .       PAGEWIDTH  610p
4237 .       PAGELENGTH 780p
4238 .    \}
4239 .    if '\\*[$PAPER]'10x14' \{\
4240 .       PAGEWIDTH  10i
4241 .       PAGELENGTH 14i
4242 .    \}
4243 .    if '\\*[$PAPER]'EXECUTIVE' \{\
4244 .       PAGEWIDTH  7.25i
4245 .       PAGELENGTH 10.5i
4246 .    \}
4247 .    if '\\*[$PAPER]'A3' \{\
4248 .       PAGEWIDTH  842p
4249 .       PAGELENGTH 1190p
4250 .    \}
4251 .    if '\\*[$PAPER]'A4' \{\
4252 .       PAGEWIDTH  595p
4253 .       PAGELENGTH 842p
4254 .    \}
4255 .    if '\\*[$PAPER]'A5' \{\
4256 .       PAGEWIDTH  421p
4257 .       PAGELENGTH 595p
4258 .    \}
4259 .    if '\\*[$PAPER]'B4' \{\
4260 .       PAGEWIDTH  709p
4261 .       PAGELENGTH 1002p
4262 .    \}
4263 .    if '\\*[$PAPER]'B5' \{\
4264 .       PAGEWIDTH  501p
4265 .       PAGELENGTH 709p
4266 .    \}
4267 .    if !r#L_MARGIN \{ .L_MARGIN \\n(.o \}
4268 .    if !r#R_MARGIN \{ .R_MARGIN 1i \}
4269 .END
4272 \# ====================================================================
4274 \# +++PRINTSTYLE -- TYPEWRITE OR TYPESET+++
4276 \# PRINTSTYLE
4277 \# ----------
4278 \# *Arguments:
4279 \#   TYPESET | TYPEWRITE [SINGLESPACE]
4280 \# *Function:
4281 \#   Sets type specs for typewriter-style or typeset output.
4282 \# *Notes:
4283 \#   Number registers: TYPEWRITE=1, TYPESET=2.
4285 .MAC PRINTSTYLE END
4286 .    if !\\n[#COLLATE]=1 \{\
4287 .       if !d$PAPER \{ .PAPER LETTER \}
4288 .       if '\\$1'TYPEWRITE' \{\
4289 .          nr #PRINT_STYLE 1
4290 .          if !\\n[#DOC_TYPE]=4 \{ .L_MARGIN 6P \}
4291 .          if !\\n[#DOC_TYPE]=4 \{ .R_MARGIN 6P \}
4292 .          TYPEWRITER
4293 .          color 0
4294 .          ie '\\$2'SINGLESPACE' \{\
4295 .             nr #SINGLE_SPACE 1
4296 .             vs 12
4297 .             nr #ORIGINAL_DOC_LEAD \\n(.v
4298 .          \}
4299 .          el \{\
4300 .             vs 24
4301 .             nr #ORIGINAL_DOC_LEAD \\n(.v
4302 .          \}
4303 .          QUAD    L
4304 .          HY      OFF
4305 .          SMARTQUOTES OFF
4306 .          if !\\n[#PP_INDENT] \{\
4307 .             in 3P                 \"Set indent
4308 .             nr #PP_INDENT \\n(.i  \"Read into #PP_INDENT
4309 .             in 0                  \"Remove indent
4310 .          \}
4311 .          HDRFTR_RIGHT_CAPS
4312 .          nr #BOLDER_UNITS 0
4313 .          nr #CONDENSE 0
4314 .          nr #EXTEND 0
4315 .          if !\\n[#ITALIC_MEANS_ITALIC]  \{ .rm IT \}
4316 .          rm BD
4317 .          rm BDI
4318 .          if !\\n[#ITALIC_MEANS_ITALIC] \{ .rm PREV          \}
4319 .          if !\\n[#SLANT_MEANS_SLANT]   \{ .UNDERLINE_SLANT  \}
4320 .          if !\\n[#ITALIC_MEANS_ITALIC] \{ .UNDERLINE_ITALIC \}
4321 .          if !\\n[#UNDERLINE_QUOTES]    \{ .UNDERLINE_QUOTES \}
4322 .          nr #IGNORE_COLUMNS 1
4323 .          nr #RULE_WEIGHT 500
4324 .          nr #HEAD_UNDERLINE_WEIGHT 500
4325 .          char \(em --
4326 .          tr `'
4327 .       \}
4328 .       if '\\$1'TYPESET' \{\
4329 .          nr #PRINT_STYLE 2
4330 .          if !\\n[#DOC_TYPE]=4 \{ .L_MARGIN 6P \}
4331 .          if !\\n[#DOC_TYPE]=4 \{ .R_MARGIN 6P \}
4332 .          FAMILY  T
4333 .          FT      R
4334 .          if !\\n[#DOC_TYPE]=4 \{ .PT_SIZE 12.5 \}
4335 .          if !\\n[#DOC_TYPE]=4 \{ .LS 16 \}
4336 .          JUSTIFY
4337 .          HY
4338 .          HY_SET 2 36p 1p
4339 .          KERN
4340 .          LIG
4341 .          SS 0
4342 .          SMARTQUOTES
4343 .          if !\\n[#PP_INDENT] \{\
4344 .             in 2m                 \"Set indent
4345 .             nr #PP_INDENT \\n(.i  \"Read into #PP_INDENT
4346 .             in 0                  \"Remove indent
4347 .          \}
4348 .          HDRFTR_RIGHT_CAPS
4349 .          rr #IGNORE_COLUMNS
4350 .       \}
4351 .    \}
4352 .END
4355 \# Macros to control behaviour of PRINTSTYLE TYPEWRITE
4357 \# First, a little utility macro.
4359 .MAC TYPEWRITER END
4360 .    fam C
4361 .    ft  R
4362 .    ps  12
4363 .END
4366 \# ITALIC MEANS ITALIC
4367 \# -------------------
4368 \# *Argument:
4369 \#   <none>
4370 \# *Function:
4371 \#   Instructs TYPEWRITE to treat italics as italics, whether
4372 \#   invoked via control lines or inline.
4373 \# *Notes:
4374 \#   ITALIC_MEANS_ITALIC and UNDERLINE_ITALIC are mututally exclusive,
4375 \#   hence invoking the one automatically turns off the other.
4377 .MAC ITALIC_MEANS_ITALIC END
4378 .    if \\n[#PRINT_STYLE]=1 \{\
4379 .       nr #ITALIC_MEANS_ITALIC 1
4380 .       rr #UNDERLINE_ITALIC
4381 .       rm ROM
4382 .       rm IT
4383 .       rm PREV
4384 .       ds ROM  \EfR
4385 .       ds IT   \EfI
4386 .       ds PREV \EfR
4387 .    \}
4388 .END
4391 \# UNDERLINE ITALIC
4392 \# ----------------
4393 \# *Argument:
4394 \#   <none>
4395 \# *Function:
4396 \#   Instructs TYPEWRITE to underline italics, whether invoked
4397 \#   via control lines or inline.
4398 \# *Notes:
4399 \#   UNDERLINE_ITALIC and ITALIC_MEANS_ITALIC are mututally exclusive,
4400 \#   hence invoking the one automatically turns off the other.
4402 \#   UNDERLINE_ITALIC is the default for TYPEWRITE.
4404 .MAC UNDERLINE_ITALIC END
4405 .    if \\n[#PRINT_STYLE]=1 \{\
4406 .       nr #UNDERLINE_ITALIC 1
4407 .       rr #ITALIC_MEANS_ITALIC
4408 .       rm ROM
4409 .       rm IT
4410 .       rm PREV
4411 .       ds ROM  \E*[ULX]
4412 .       ds IT   \E*[UL]
4413 .       ds PREV \E*[ULX]
4414 .    \}
4415 .END
4418 \# UNDERLINE SLANT
4419 \# ---------------
4420 \# *Arguments:
4421 \#   <none> | <anything>
4422 \# *Function:
4423 \#   Instructs TYPEWRITE to underline occurences of \*[SLANT], or
4424 \#   turns feature off.
4425 \# *Notes:
4426 \#   Users may want \*[SLANT] to mean slant in TYPEWRITE, although
4427 \#   most of the time, \*[SLANT] most likely means the user wanted
4428 \#   italic but didn't have it, ergo the need to tell TYPEWRITE to
4429 \#   treat \*[SLANT] as italic (i.e. underlined).
4431 \#   UNDERLINE_SLANT and SLANT_MEANS_SLANT are mututally exclusive,
4432 \#   hence invoking the one automatically turns off the other.
4434 \#   UNDERLINE_SLANT is the default for TYPEWRITE.
4436 .MAC UNDERLINE_SLANT END
4437 .    if \\n[#PRINT_STYLE]=1 \{\
4438 .       rr #SLANT_MEANS_SLANT
4439 .       nr #UNDERLINE_SLANT 1
4440 .       rm SLANT
4441 .       rm SLANTX
4442 .       ds SLANT  \ER'#SLANT_ON 1'\E*[UL]
4443 .       ds SLANTX \ER'#SLANT_ON 0'\E*[ULX]
4444 .    \}
4445 .END
4448 .MAC SLANT_MEANS_SLANT END
4449 .    if \\n[#PRINT_STYLE]=1 \{\
4450 .       rr #UNDERLINE_SLANT
4451 .       nr #SLANT_MEANS_SLANT 1
4452 .       rm SLANT
4453 .       rm SLANTX
4454 .       ds SLANT  \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
4455 .       ds SLANTX \ER'#SLANT_ON 0'\ES'0'
4456 .    \}
4457 .END
4460 .MAC IGNORE_COLUMNS END
4461 .    if \\n[#PRINT_STYLE]=1 \{ .nr #NO_COLUMNS 1 \}
4462 .END
4465 \# ====================================================================
4467 \# +++COPY STYLE -- DRAFT OR FINAL+++
4469 \# COPY STYLE
4470 \# ----------
4471 \# *Arguments:
4472 \#   DRAFT | FINAL
4473 \# *Function:
4474 \#   Sets registers that are used to determine what to put
4475 \#   in the default header, and how to number pages.
4476 \# *Notes:
4477 \#   DOCTYPE must come before COPYSTYLE.
4479 .MAC COPYSTYLE END
4480 .    ds $COPY_STYLE \\$1
4481 .    if '\\*[$COPY_STYLE]'DRAFT' \{\
4482 .       nr #COPY_STYLE 1
4483 .       if !d$DRAFT \{ .DRAFT 1 \}
4484 .    \}
4485 .    if '\\*[$COPY_STYLE]'FINAL' \{ .nr #COPY_STYLE 2         \}
4486 .    if !d$CHAPTER_STRING        \{ .CHAPTER_STRING "Chapter" \}
4487 .    if !d$DRAFT_STRING          \{ .DRAFT_STRING "Draft"     \}
4488 .    if !d$REVISION_STRING       \{ .REVISION_STRING "Rev."   \}
4489 .\" Default
4490 .    if \\n[#DOC_TYPE]=1 \{\
4491 .       ie \\n[#COPY_STYLE]=1 \{\
4492 .          ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4493 .          el \{ .PAGENUM_STYLE roman \}
4494 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4495 .             ie \\n[#DRAFT_WITH_PAGENUM] \{\
4496 .                ds $HDRFTR_CENTER
4497 .             \}
4498 .             el \{\
4499 .                ie '\\*[$REVISION]'' \{\
4500 .                   ds $HDRFTR_CENTER \
4501                     \\*[$DRAFT_STRING]\\*[$DRAFT]
4502 .                \}
4503 .                el \{\
4504 .                   ds $HDRFTR_CENTER \
4505                     \\*[$DRAFT_STRING]\\*[$DRAFT], \
4506                     \\*[$REVISION_STRING] \\*[$REVISION]
4507 .                \}
4508 .             \}
4509 .          \}
4510 .       \}
4511 .       el \{\
4512 .          ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4513 .          el \{ .PAGENUM_STYLE DIGIT \}
4514 .          if r#DRAFT_WITH_PAGENUM \{ .rr #DRAFT_WITH_PAGENUM \}
4515 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4516 .             ds $HDRFTR_CENTER
4517 .             rr #USER_DEF_HDRFTR_CENTER
4518 .          \}
4519 .       \}
4520 .    \}
4521 .\" Chapter
4522 .    if \\n[#DOC_TYPE]=2 \{\
4523 .\" Copystyle DRAFT
4524 .       ie \\n[#COPY_STYLE]=1 \{\
4525 .          ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4526 .          el \{ .PAGENUM_STYLE roman \}
4527 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4528 .             ie \\n[#DRAFT_WITH_PAGENUM] \{\
4529 .                ie '\\*[$CHAPTER]'' \{\
4530 .                   ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4531 .                      ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4532 .                   \}
4533 .                   el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING]
4534 .                \}
4535 .                el \{\
4536 .                   ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4537 .                      ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4538 .                   \}
4539 .                   el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER]
4540 .                \}
4541 .             \}
4542 .             el \{\
4543 .                ie '\\*[$REVISION]'' \{\
4544 .                   ie '\\*[$CHAPTER]'' \{\
4545 .                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4546 .                         ie '\\*[$DRAFT]'' \{\
4547 .                            ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4548 .                         \}
4549 .                         el \{\
4550 .                            ds $HDRFTR_CENTER \
4551                              \\*[$CHAPTER_TITLE], \
4552                              \\*[$DRAFT_STRING]\\*[$DRAFT]
4553 .                         \}
4554 .                      \}
4555 .                      el \{\
4556 .                         ie '\\*[$DRAFT]'' \{\
4557 .                            ds $HDRFTR_CENTER \
4558                              \\*[$CHAPTER_STRING]
4559 .                         \}
4560 .                         el \{\
4561 .                            ds $HDRFTR_CENTER \
4562                              \\*[$CHAPTER_STRING], \
4563                              \\*[$DRAFT_STRING]\\*[$DRAFT]
4564 .                         \}
4565 .                      \}
4566 .                   \}
4567 .                   el \{\
4568 .                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4569 .                         ie '\\*[$DRAFT]'' \{\
4570 .                            ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4571 .                         \}
4572 .                         el \{\
4573 .                            ds $HDRFTR_CENTER \
4574                              \\*[$CHAPTER_TITLE_1], \
4575                              \\*[$DRAFT_STRING]\\*[$DRAFT]
4576 .                         \}
4577 .                      \}
4578 .                      el \{\
4579 .                         ie '\\*[$DRAFT]'' \{\
4580 .                            ds $HDRFTR_CENTER \
4581                              \\*[$CHAPTER_STRING] \\*[$CHAPTER]
4582 .                         \}
4583 .                         el \{\
4584 .                            ds $HDRFTR_CENTER \
4585                              \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
4586                              \\*[$DRAFT_STRING]\\*[$DRAFT]
4587 .                         \}
4588 .                      \}
4589 .                   \}
4590 .                \}
4591 .                el \{\
4592 .                   ie '\\*[$CHAPTER]'' \{\
4593 .                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4594 .                         ie '\\*[$DRAFT]'' \{\
4595 .                            ds $HDRFTR_CENTER \
4596                              \\*[$CHAPTER_TITLE], \
4597                              \\*[$REVISION_STRING] \\*[$REVISION]
4598 .                         \}
4599 .                         el \{\
4600 .                            ds $HDRFTR_CENTER \
4601                              \\*[$CHAPTER_TITLE], \
4602                              \\*[$DRAFT_STRING]\\*[$DRAFT], \
4603                              \\*[$REVISION_STRING] \\*[$REVISION]
4604 .                         \}
4605 .                      \}
4606 .                      el \{\
4607 .                         ie '\\*[$DRAFT]'' \{\
4608 .                            ds $HDRFTR_CENTER \
4609                              \\*[$CHAPTER_STRING], \
4610                              \\*[$REVISION_STRING] \\*[$REVISION]
4611 .                         \}
4612 .                         el \{\
4613 .                            ds $HDRFTR_CENTER \
4614                              \\*[$CHAPTER_STRING], \
4615                              \\*[$DRAFT_STRING]\\*[$DRAFT], \
4616                              \\*[$REVISION_STRING] \\*[$REVISION]
4617 .                         \}
4618 .                      \}
4619 .                   \}
4620 .                   el \{\
4621 .                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4622 .                         ie '\\*[$DRAFT]'' \{\
4623 .                            ds $HDRFTR_CENTER \
4624                              \\*[$CHAPTER_TITLE], \
4625                              \\*[$REVISION_STRING] \\*[$REVISION]
4626 .                         \}
4627 .                         el \{\
4628 .                            ds $HDRFTR_CENTER \
4629                              \\*[$CHAPTER_TITLE], \
4630                              \\*[$DRAFT_STRING]\\*[$DRAFT], \
4631                              \\*[$REVISION_STRING] \\*[$REVISION]
4632 .                         \}
4633 .                      \}
4634 .                      el \{\
4635 .                         ie '\\*[$DRAFT]'' \{\
4636 .                            ds $HDRFTR_CENTER \
4637                              \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
4638                              \\*[$REVISION_STRING] \\*[$REVISION]
4639 .                         \}
4640 .                         el \{\
4641 .                            ds $HDRFTR_CENTER \
4642                              \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
4643                              \\*[$DRAFT_STRING]\\*[$DRAFT], \
4644                              \\*[$REVISION_STRING] \\*[$REVISION]
4645 .                         \}
4646 .                      \}
4647 .                   \}
4648 .                \}
4649 .             \}
4650 .          \}
4651 .       \}
4652 .\" Copystyle FINAL
4653 .       el \{\
4654 .          if r#DRAFT_WITH_PAGENUM \{ .rr #DRAFT_WITH_PAGENUM \}
4655 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4656 .             ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4657 .             el \{ .PAGENUM_STYLE DIGIT \}
4658 .             ie '\\*[$CHAPTER]'' \{\
4659 .                ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4660 .                   ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4661 .                \}
4662 .                el \{\
4663 .                   ds $HDRFTR_CENTER \\*[$CHAPTER_STRING]
4664 .                \}
4665 .             \}
4666 .             el \{\
4667 .                ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4668 .                   ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4669 .                \}
4670 .                el \{\
4671 .                   ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER]
4672 .                \}
4673 .             \}
4674 .          \}
4675 .       \}
4676 .    \}
4677 .\" Named
4678 .    if \\n[#DOC_TYPE]=3 \{\
4679 .       ie \\n[#COPY_STYLE]=1 \{\
4680 .          ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4681 .          el \{ .PAGENUM_STYLE roman \}
4682 .          ie \\n[#DRAFT_WITH_PAGENUM] \{\
4683 .             ds $HDRFTR_CENTER \\*[$DOC_TYPE]
4684 .          \}
4685 .          el \{\
4686 .             if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4687 .                ie '\\*[$REVISION]'' \{\
4688 .                   ie '\\*[$DRAFT]'' \{\
4689 .                      ds $HDRFTR_CENTER \\*[$DOC_TYPE]
4690 .                   \}
4691 .                   el \{\
4692 .                      ds $HDRFTR_CENTER \
4693                        \\*[$DOC_TYPE], \
4694                        \\*[$DRAFT_STRING]\\*[$DRAFT]
4695 .                   \}
4696 .                \}
4697 .                el \{\
4698 .                   ie '\\*[$DRAFT]'' \{\
4699 .                      ds $HDRFTR_CENTER \
4700                        \\*[$DOC_TYPE], \
4701                        \\*[$REVISION_STRING] \\*[$REVISION]
4702 .                   \}
4703 .                   el \{\
4704 .                      ds $HDRFTR_CENTER \
4705                        \\*[$DOC_TYPE], \
4706                        \\*[$DRAFT_STRING]\\*[$DRAFT], \
4707                        \\*[$REVISION_STRING] \\*[$REVISION]
4708 .                   \}
4709 .                \}
4710 .             \}
4711 .          \}
4712 .       \}
4713 .       el \{\
4714 .          if r#DRAFT_WITH_PAGENUM \{ .rr #DRAFT_WITH_PAGENUM \}
4715 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4716 .             ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4717 .             el \{ .PAGENUM_STYLE DIGIT \}
4718 .             ds $HDRFTR_CENTER \\*[$DOC_TYPE]
4719 .          \}
4720 .       \}
4721 .    \}
4722 .END
4724 \# ====================================================================
4726 \# +++COLLECT DOC INFO -- STRINGS AND REGISTERS FOR REFERENCE MACROS+++
4728 \# *Arguments:
4729 \#   various string/register arguments
4730 \# *Function:
4731 \#   Collect information about documents.
4734 .MAC DOCTITLE END
4735 .    rr #DOCTITLE_NUM
4736 .    nr #DOCTITLE_NUM 0 1
4737 .    while \\n[#NUM_ARGS]>\\n[#DOCTITLE_NUM] \{\
4738 .       ds $DOC_TITLE_\\n+[#DOCTITLE_NUM] \\$\\n[#DOCTITLE_NUM]
4740 .    ds $DOC_TITLE \\$*
4741 .END
4743 .MAC TITLE END \"Document title
4744 .    ie \\n[#NUM_ARGS]=0 \{\
4745 .       if \\n[#TITLE_NUM] \{\
4746 .          nr #ITEM 0 1
4747 .          while \\n[#TITLE_NUM]>\\n[#ITEM] \{\
4748 .             rm $TITLE_\\n+[#ITEM]
4750 .          rr #TITLE_NUM
4751 .       \}
4752 .    \}
4753 .    el \{\
4754 .       nr #TITLE_NUM 0 1
4755 .       while \\n[#NUM_ARGS]>\\n[#TITLE_NUM] \{\
4756 .          ds $TITLE_\\n+[#TITLE_NUM] \\$\\n[#TITLE_NUM]
4758 .       ds $TITLE \\$*
4759 .    \}
4760 .END
4763 .MAC SUBTITLE END \"Document sub-title
4764 .    ie \\n[#NUM_ARGS]=0 \{\
4765 .       if \\n[#SUBTITLE_NUM] \{\
4766 .          nr #ITEM 0 1
4767 .          while \\n[#SUBTITLE_NUM]>\\n[#ITEM] \{\
4768 .             rm $SUBTITLE_\\n+[#ITEM]
4770 .          rr #SUBTITLE_NUM
4771 .          rm $SUBTITLE
4772 .       \}
4773 .    \}
4774 .    el \{\
4775 .    if '\\$1'DOC_COVER' \{\
4776 .       shift
4777 .       nr #SUBTITLE_DOCCOVER_NUM 0 1
4778 .       while \\n[#NUM_ARGS]>\\n[#SUBTITLE_DOCCOVER_NUM] \{\
4779 .           ds $SUBTITLE_DOCCOVER_\\n+[#SUBTITLE_DOCCOVER_NUM] \\$\\n[#SUBTITLE_DOCCOVER_NUM]
4781 .       return
4782 .    \}
4783 .    if '\\$1'COVER' \{\
4784 .       shift
4785 .       nr #SUBTITLE_COVER_NUM 0 1
4786 .       while \\n[#NUM_ARGS]>\\n[#SUBTITLE_COVER_NUM] \{\
4787 .           ds $SUBTITLE_COVER_\\n+[#SUBTITLE_COVER_NUM] \\$\\n[#SUBTITLE_COVER_NUM]
4789 .       return
4790 .    \}
4791 .       nr #SUBTITLE_NUM 0 1
4792 .       while \\n[#NUM_ARGS]>\\n[#SUBTITLE_NUM] \{\
4793 .          ds $SUBTITLE_\\n+[#SUBTITLE_NUM] \\$\\n[#SUBTITLE_NUM]
4795 .       ds $SUBTITLE \\$*
4796 .    \}
4797 .END
4800 .MAC CHAPTER END \"If document is a chapter, the chapter number
4801 .    nr #CHAPTER_CALLED 1
4802 .    ds $CHAPTER \\$1
4803 .    if r#CH_NUM \{\
4804 .       if \B'\\*[$CHAPTER]' \{\
4805 .          nr #CH_NUM \\*[$CHAPTER]
4806 .       \}
4807 .    \}
4808 .END
4811 .MAC CHAPTER_TITLE END \" This defines what comes after Chapter #
4812 .    ie \\n[#NUM_ARGS]=0 \{\
4813 .       if \\n[#CHAPTER_TITLE_NUM] \{\
4814 .          nr #ITEM 0 1
4815 .          while \\n[#CHAPTER_TITLE_NUM]>\\n[#ITEM] \{\
4816 .             rm $CHAPTER_TITLE_\\n+[#ITEM]
4818 .          rr #CHAPTER_TITLE_NUM
4819 .          rm $CHAPTER_TITLE
4820 .       \}
4821 .    \}
4822 .    el \{\
4823 .       rr #CHAPTER_TITLE_NUM
4824 .       nr #CHAPTER_TITLE_NUM 0 1
4825 .       while \\n[#NUM_ARGS]>\\n[#CHAPTER_TITLE_NUM] \{\
4826 .          ds $CHAPTER_TITLE_\\n+[#CHAPTER_TITLE_NUM] \\$\\n[#CHAPTER_TITLE_NUM]
4828 .       ds $CHAPTER_TITLE \\$*
4829 .    \}
4830 .END
4833 .MAC DRAFT END \"Draft number
4834 .    ie '\\$1'' .ds $DRAFT 
4835 .    el         .ds $DRAFT " \\$1
4836 .END
4839 .MAC REVISION END \"Revision number
4840 .    ds $REVISION \\$1
4841 .END
4844 .MAC DRAFT_WITH_PAGENUMBER END \"Attach draft/revision strings to page number
4845 .    nr #DRAFT_WITH_PAGENUM 1
4846 .END
4849 .MAC AUTHOR END \"Author.  Enclose all args fully in double quotes.
4850 .    if '\\$1'DOC_COVER' \{\
4851 .       shift
4852 .       nr #AUTHOR_DOCCOVER_NUM 0 1
4853 .       while \\n[#NUM_ARGS]>\\n[#AUTHOR_DOCCOVER_NUM] \{\
4854 .           ds $AUTHOR_DOCCOVER_\\n+[#AUTHOR_DOCCOVER_NUM] \\$\\n[#AUTHOR_DOCCOVER_NUM]
4856 .       return
4857 .    \}
4858 .    if '\\$1'COVER' \{\
4859 .       shift
4860 .       nr #AUTHOR_COVER_NUM 0 1
4861 .           while \\n[#NUM_ARGS]>\\n[#AUTHOR_COVER_NUM] \{\
4862 .       ds $AUTHOR_COVER_\\n+[#AUTHOR_COVER_NUM] \\$\\n[#AUTHOR_COVER_NUM]
4864 .       return
4865 .    \}
4866 .    nr #AUTHOR_NUM 0 1
4867 .    rm $AUTHORS
4868 .    while \\n[#NUM_ARGS]>\\n[#AUTHOR_NUM] \{\
4869 .       ds $AUTHOR_\\n+[#AUTHOR_NUM] \\$\\n[#AUTHOR_NUM]
4870 .       as $AUTHORS \\*[$AUTHOR_\\n[#AUTHOR_NUM]], \"
4872 .    substring $AUTHORS 0 -3
4873 .    ds $AUTHOR \\*[$AUTHOR_1]
4874 .END
4876 .ALIAS EDITOR AUTHOR
4878 .MAC COPYRIGHT END \"For use on cover pages only
4879 .   ie \\n[#NUM_ARGS]=1 \{\
4880 .       ds $COPYRIGHT \[co]\\$1
4881 .       rm $COPYRIGHT_DOCCOVER
4882 .       rm $COPYRIGHT_COVER
4883 .    \}
4884 .    el \{\
4885 .       if '\\$1'DOC_COVER' \{\
4886 .          ds $COPYRIGHT_DOCCOVER \[co]\\$2
4887 .       \}
4888 .       if '\\$1'COVER' \{\
4889 .          ds $COPYRIGHT_COVER \[co]\\$2
4890 .       \}
4891 .    \}
4892 .END
4895 .MAC MISC END \"For use on cover pages only; enclose all args in double quotes
4896 .    ie \\n[#NUM_ARGS]=0 \{\
4897 .       if \\n[#MISC_NUM] \{\
4898 .          nr #ITEM 0 1
4899 .          while \\n[#MISC_NUM]>\\n[#ITEM] \{\
4900 .             rm $MISC_\\n+[#ITEM]
4902 .          rr #MISC_NUM
4903 .          rr #NUM_MISCS
4904 .       \}
4905 .       if \\n[#MISC_DOCCOVER_NUM] \{\
4906 .          nr #ITEM 0 1
4907 .          while \\n[#MISC_DOCCOVER_NUM]>\\n[#ITEM] \{\
4908 .             rm $MISC_DOCCOVER_\\n+[#ITEM]
4910 .          rr #MISC_DOCCOVER_NUM
4911 .          rr #NUM_MISCS
4912 .       \}
4913 .       if \\n[#MISC_COVER_NUM] \{\
4914 .          nr #ITEM 0 1
4915 .          while \\n[#MISC_COVER_NUM]>\\n[#ITEM] \{\
4916 .             rm $MISC_COVER_\\n+[#ITEM]
4918 .          rr #MISC_COVER_NUM
4919 .          rr #NUM_MISCS
4920 .       \}
4921 .    \}
4922 .    el \{\
4923 .       if !'\\$1'DOC_COVER' \{\
4924 .         if !'\\$1'COVER' \{ .nr #NEITHER 1 \}
4925 .       \}
4926 .       if !'\\$1'COVER' \{\
4927 .          if !'\\$1'DOC_COVER'\{ .nr #NEITHER 1 \}
4928 .       \}
4929 .       if '\\$1'DOC_COVER' \{\
4930 .          shift
4931 .          nr #MISC_DOCCOVER_NUM 0 1
4932 .          while \\n[#NUM_ARGS]>\\n[#MISC_DOCCOVER_NUM] \{\
4933 .          ds $MISC_DOCCOVER_\\n+[#MISC_DOCCOVER_NUM] \\$\\n[#MISC_DOCCOVER_NUM]
4935 .          nr #NUM_MISCS_DOCCOVER \\n[#NUM_ARGS]
4936 .       \}
4937 .       if '\\$1'COVER' \{\
4938 .          shift
4939 .          nr #MISC_COVER_NUM 0 1
4940 .          while \\n[#NUM_ARGS]>\\n[#MISC_COVER_NUM] \{\
4941 .          ds $MISC_COVER_\\n+[#MISC_COVER_NUM] \\$\\n[#MISC_COVER_NUM]
4943 .          nr #NUM_MISCS_COVER \\n[#NUM_ARGS]
4944 .       \}
4945 .       if \\n[#NEITHER]=1 \{\
4946 .          nr #MISC_NUM 0 1
4947 .          while \\n[#NUM_ARGS]>\\n[#MISC_NUM] \{\
4948 .             ds $MISC_\\n+[#MISC_NUM] \\$\\n[#MISC_NUM]
4950 .          nr #NUM_MISCS \\n[#NUM_ARGS]
4951 .          rr #NEITHER
4952 .       \}
4953 .   \}
4954 .END
4957 .MAC PAGENUMBER END \"Page # that appears on page one.
4958 .    nr #n%_AT_PAGENUM_SET \\n%
4959 .    nr #PAGE_NUM_ADJ \\$1-\\n[#n%_AT_PAGENUM_SET]
4960 .    rr #n%_AT_PAGENUM_SET
4961 .    nr #PAGE_NUM_SET 1
4962 .END
4964 \# ====================================================================
4966 \# +++TYPE OF DOCUMENT+++
4968 \# DOCUMENT TYPE
4969 \# -------------
4970 \# *Argument:
4971 \#   DEFAULT | CHAPTER | NAMED "<whatever> | LETTER
4972 \# *Function:
4973 \#   Creates strings and sets registers for document types.
4974 \# *Notes:
4975 \#   Number registers: DEFAULT=1, CHAPTER=2, NAMED=3, LETTER=4
4977 .MAC DOCTYPE END
4978 .    if '\\$1'DEFAULT' \{\
4979 .       nr #DOC_TYPE 1
4980 .    \}
4981 .    if '\\$1'CHAPTER' \{\
4982 .       nr #DOC_TYPE 2
4983 .    \}
4984 .    if '\\$1'NAMED' \{\
4985 .       ds $DOC_TYPE \\$2
4986 .       nr #DOC_TYPE 3
4987 .    \}
4988 .    if '\\$1'LETTER' \{\
4989 .       nr #DOC_TYPE 4
4990 .       L_MARGIN 1.125i
4991 .       R_MARGIN 1.125i
4992 .       PT_SIZE 12
4993 .       LS 13.5
4994 .       DOCHEADER OFF
4995 .       PARA_INDENT 3m
4996 .       INDENT_FIRST_PARAS
4997 .       PARA_SPACE
4998 .       ds $SUITE \En[#SUITE]
4999 .       HEADER_MARGIN 3P+6p
5000 .       HEADER_GAP 3P
5001 .       FOOTERS
5002 .       FOOTER_RULE OFF
5003 .       FOOTER_LEFT ""
5004 .       FOOTER_CENTER ""
5005 .       FOOTER_RIGHT_SIZE +0
5006 .       FOOTER_RIGHT "\&.../\E*[$SUITE]
5007 .       FOOTER_ON_FIRST_PAGE
5008 .       em ALL_DONE
5009 .    \}
5010 .END
5012 \# +++LETTER MACROS+++
5014 \# First, create a register to hold incrementing numbers to be
5015 \# appended to LETTERHEAD.
5017 .nr #FIELD 0 1
5019 \# DATE
5020 \# ----
5021 \# *Arguments:
5022 \#   <none>
5023 \# *Function:
5024 \#   Stores date (entered on the line after .DATE) in diversion
5025 \#   LETTERHEAD<n>
5027 .MAC DATE END
5028 .    if !'\\n(.z'' \{ .di \}
5029 .    di LETTERHEAD\\n+[#FIELD]
5030 .    ie \\n[#FIELD]=1 \{\
5031 .       nr #DATE_FIRST 1
5032 .       RIGHT
5033 .    \}
5034 .    el \{\
5035 .       LEFT
5036 .    \}
5037 .END
5040 \# TO
5041 \# --
5042 \# *Arguments:
5043 \#   <none>
5044 \# *Function:
5045 \#   Stores addressee address (entered on the line after .TO) in
5046 \#   diversion LETTERHEAD<n>
5048 .MAC TO END
5049 .    if !'\\n(.z'' \{ .di \}
5050 .    di LETTERHEAD\\n+[#FIELD]
5051 .    LEFT
5052 .END
5055 \# FROM
5056 \# ----
5057 \# *Arguments:
5058 \#   <none>
5059 \# *Function:
5060 \#   Stores addresser address (entered on the line after .FROM) in
5061 \#   diversion LETTERHEAD<n>
5063 .MAC FROM END
5064 .    if !'\\n(.z'' \{ .di \}
5065 .    di LETTERHEAD\\n+[#FIELD]
5066 .    LEFT
5067 .END
5070 \# GREETING
5071 \# --------
5072 \# *Arguments:
5073 \#   <none>
5074 \# *Function:
5075 \#   Stores greeting (entered on the line after .GREETING) in
5076 \#   diversion LETTERHEAD<n>
5078 .MAC GREETING END
5079 .    if !'\\n(.z'' \{ .di \}
5080 .    di LETTERHEAD\\n+[#FIELD]
5081 .    LEFT
5082 .END
5085 \# CLOSING
5086 \# -------
5087 \# *Arguments:
5088 \#   <closing string>
5089 \# *Function:
5090 \#   Stores greeting in diversion CLOSING.
5092 .MAC CLOSING END
5093 .    br
5094 .    nr #CLOSING 1
5095 .    di CLOSING
5096 .    LEFT
5097 .END
5100 \# NO SUITE
5101 \# --------
5102 \# *Arguments:
5103 \#   <none>
5104 \# *Function:
5105 \#   Redefines $FOOTER_RIGHT to blank so that a suite number doesn't
5106 \#   appear at the bottom of letter pages.
5108 .MAC NO_SUITE END
5109 .    FOOTER_RIGHT ""
5110 .END
5112 \# ====================================================================
5114 \# +++DEFAULTS+++
5116 \# TYPE-STYLE CONTROL MACROS
5117 \# -------------------------
5118 \# The control macros for family, font, size, quad and color are here
5119 \# grouped together.  Each (e.g. _FAMILY or _FONT) tests for a calling
5120 \# alias before performing the action(s) appropriate to the calling
5121 \# macro.  Defaults for all these guys are set in DEFAULTS, and listed
5122 \# in the "Control Macros" section of the documentation pertinent to
5123 \# the macro whose style is to be changed.
5125 .MAC _FAMILY END
5126 .    if '\\$0'AUTHOR_FAMILY'                  
5127 .    if '\\$0'BIBLIOGRAPHY_FAMILY'            .ds $BIB_FAM \\$1
5128 .    if '\\$0'BIBLIOGRAPHY_STRING_FAMILY'     .ds $BIB_STRING_FAM \\$1
5129 .    if '\\$0'BLOCKQUOTE_FAMILY'              .ds $BQUOTE_FAM \\$1
5130 .    if '\\$0'CITATION_FAMILY'                .ds $BQUOTE_FAM \\$1
5131 .    if '\\$0'CITE_FAMILY'                    .ds $BQUOTE_FAM \\$1
5132 .    if '\\$0'CHAPTER_TITLE_FAMILY'           .ds $CHAPTER_TITLE_FAM \\$1
5133 .    if '\\$0'COVER_AUTHOR_FAMILY'            .ds $COVER_AUTHOR_FAM \\$1
5134 .    if '\\$0'COVER_CHAPTER_TITLE_FAMILY'     .ds $COVER_CHAPTER_TITLE_FAM \\$1
5135 .    if '\\$0'COVER_COPYRIGHT_FAMILY'         .ds $COVER_COPYRIGHT_FAM \\$1
5136 .    if '\\$0'COVER_DOCTYPE_FAMILY'           .ds $COVER_DOCTYPE_FAM \\$1
5137 .    if '\\$0'COVER_FAMILY'                   .ds $COVER_FAM \\$1
5138 .    if '\\$0'COVER_SUBTITLE_FAMILY'          .ds $COVER_SUBTITLE_FAM \\$1
5139 .    if '\\$0'COVER_TITLE_FAMILY'             .ds $COVER_TITLE_FAM \\$1
5140 .    if '\\$0'DOC_COVER_AUTHOR_FAMILY'        .ds $DOC_COVER_AUTHOR_FAM \\$1
5141 .    if '\\$0'DOC_COVER_CHAPTER_TITLE_FAMILY' .ds $DOC_COVER_CHAPTER_TITLE_FAM \\$1
5142 .    if '\\$0'DOC_COVER_COPYRIGHT_FAMILY'     .ds $DOC_COVER_COPYRIGHT_FAM \\$1
5143 .    if '\\$0'DOC_COVER_DOCTYPE_FAMILY'       .ds $DOC_COVER_DOCTYPE_FAM \\$1
5144 .    if '\\$0'DOC_COVER_FAMILY'               .ds $DOC_COVER_FAM \\$1
5145 .    if '\\$0'DOC_COVER_SUBTITLE_FAMILY'      .ds $DOC_COVER_SUBTITLE_FAM \\$1
5146 .    if '\\$0'DOC_COVER_TITLE_FAMILY'         .ds $DOC_COVER_TITLE_FAM \\$1
5147 .    if '\\$0'DOCHEADER_FAMILY'               .ds $DOCHEADER_FAM \\$1
5148 .    if '\\$0'DOCTYPE_FAMILY'                 .ds $DOCTYPE_FAM \\$1
5149 .    if '\\$0'ENDNOTE_FAMILY'                 .ds $EN_FAM \\$1
5150 .    if '\\$0'ENDNOTE_NUMBER_FAMILY'          .ds $EN_NUMBER_FAM \\$1
5151 .    if '\\$0'ENDNOTE_LINENUMBER_FAMILY'      .ds $EN_LN_FAM \\$1
5152 .    if '\\$0'ENDNOTE_STRING_FAMILY'          .ds $EN_STRING_FAM \\$1
5153 .    if '\\$0'ENDNOTE_TITLE_FAMILY'           .ds $EN_TITLE_FAM \\$1
5154 .    if '\\$0'EPIGRAPH_FAMILY'                .ds $EPI_FAM \\$1
5155 .    if '\\$0'FOOTNOTE_FAMILY'                .ds $FN_FAM \\$1
5156 .    if '\\$0'HDRFTR_CENTER_FAMILY'           .ds $HDRFTR_CENTER_FAM \\$1
5157 .    if '\\$0'HDRFTR_FAMILY' \{\
5158 .       ds $HDRFTR_FAM        \\$1
5159 .       ds $HDRFTR_LEFT_FAM   \\$1
5160 .       ds $HDRFTR_CENTER_FAM \\$1
5161 .       ds $HDRFTR_RIGHT_FAM  \\$1
5162 .    \}
5163 .    if '\\$0'HDRFTR_LEFT_FAMILY'             .ds $HDRFTR_LEFT_FAM \\$1
5164 .    if '\\$0'HDRFTR_RIGHT_FAMILY'            .ds $HDRFTR_RIGHT_FAM \\$1
5165 .    if '\\$0'HEAD_FAMILY'                    .ds $HEAD_FAM \\$1
5166 .    if '\\$0'LINENUMBER_FAMILY'              .ds $LN_FAM \\$1
5167 .    if '\\$0'PAGENUM_FAMILY'                 .ds $PAGE_NUM_FAM \\$1
5168 .    if '\\$0'PARAHEAD_FAMILY'                .ds $PH_FAM \\$1
5169 .    if '\\$0'QUOTE_FAMILY'                   .ds $QUOTE_FAM \\$1
5170 .    if '\\$0'SUBHEAD_FAMILY'                 .ds $SH_FAM \\$1
5171 .    if '\\$0'SUBTITLE_FAMILY'                .ds $SUBTITLE_FAM \\$1
5172 .    if '\\$0'TITLE_FAMILY'                   .ds $TITLE_FAM \\$1
5173 .    if '\\$0'TOC_FAMILY'                     .ds $TOC_FAM \\$1
5174 .    if '\\$0'TOC_FAM'                        .ds $TOC_FAM \\$1
5175 .    if '\\$0'TOC_HEADER_FAMILY'              .ds $TOC_HEADER_FAM \\$1
5176 .    if '\\$0'TOC_HEAD_FAMILY'                .ds $TOC_HEAD_FAM \\$1
5177 .    if '\\$0'TOC_PARAHEAD_FAMILY'            .ds $TOC_PH_FAM \\$1
5178 .    if '\\$0'TOC_PN_FAMILY'                  .ds $TOC_PN_FAM \\$1
5179 .    if '\\$0'TOC_SUBHEAD_FAMILY'             .ds $TOC_SH_FAM \\$1
5180 .    if '\\$0'TOC_TITLE_FAMILY'               .ds $TOC_TITLE_FAM \\$1
5181 .END
5184 .MAC _FONT END
5185 .    if '\\$0'AUTHOR_FONT'                  .ds $AUTHOR_FT \\$1
5186 .    if '\\$0'BIBLIOGRAPHY_FONT'            .ds $BIB_FT \\$1
5187 .    if '\\$0'BIBLIOGRAPHY_STRING_FONT'     .ds $BIB_STRING_FT \\$1
5188 .    if '\\$0'BLOCKQUOTE_FONT'              .ds $BQUOTE_FT \\$1
5189 .    if '\\$0'CITATION_FONT'                .ds $BQUOTE_FT \\$1
5190 .    if '\\$0'CITE_FONT'                    .ds $BQUOTE_FT \\$1
5191 .    if '\\$0'CHAPTER_TITLE_FONT'           .ds $CHAPTER_TITLE_FT \\$1
5192 .    if '\\$0'COVER_AUTHOR_FONT'            .ds $COVER_AUTHOR_FT \\$1
5193 .    if '\\$0'COVER_CHAPTER_TITLE_FONT'     .ds $COVER_CHAPTER_TITLE_FT \\$1
5194 .    if '\\$0'COVER_COPYRIGHT_FONT'         .ds $COVER_COPYRIGHT_FT \\$1
5195 .    if '\\$0'COVER_DOCTYPE_FONT'           .ds $COVER_DOCTYPE_FT \\$1
5196 .    if '\\$0'COVER_SUBTITLE_FONT'          .ds $COVER_SUBTITLE_FT \\$1
5197 .    if '\\$0'COVER_TITLE_FONT'             .ds $COVER_TITLE_FT \\$1
5198 .    if '\\$0'DOC_COVER_AUTHOR_FONT'        .ds $DOC_COVER_AUTHOR_FT \\$1
5199 .    if '\\$0'DOC_COVER_CHAPTER_TITLE_FONT' .ds $DOC_COVER_CHAPTER_TITLE_FT \\$1
5200 .    if '\\$0'DOC_COVER_COPYRIGHT_FONT'     .ds $DOC_COVER_COPYRIGHT_FT \\$1
5201 .    if '\\$0'DOC_COVER_DOCTYPE_FONT'       .ds $DOC_COVER_DOCTYPE_FT \\$1
5202 .    if '\\$0'DOC_COVER_SUBTITLE_FONT'      .ds $DOC_COVER_SUBTITLE_FT \\$1
5203 .    if '\\$0'DOC_COVER_TITLE_FONT'         .ds $DOC_COVER_TITLE_FT \\$1
5204 .    if '\\$0'DOCTYPE_FONT'                 .ds $DOCTYPE_FT \\$1
5205 .    if '\\$0'ENDNOTE_FONT'                 .ds $EN_FT \\$1
5206 .    if '\\$0'ENDNOTE_NUMBER_FONT'          .ds $EN_NUMBER_FT \\$1
5207 .    if '\\$0'ENDNOTE_LINENUMBER_FONT'      .ds $EN_LN_FT \\$1
5208 .    if '\\$0'ENDNOTE_STRING_FONT'          .ds $EN_STRING_FT \\$1
5209 .    if '\\$0'ENDNOTE_TITLE_FONT'           .ds $EN_TITLE_FT \\$1
5210 .    if '\\$0'EPIGRAPH_FONT'                .ds $EPI_FT \\$1
5211 .    if '\\$0'FOOTNOTE_FONT'                .ds $FN_FT \\$1
5212 .    if '\\$0'HDRFTR_CENTER_FONT'           .ds $HDRFTR_CENTER_FT \\$1
5213 .    if '\\$0'HDRFTR_LEFT_FONT'             .ds $HDRFTR_LEFT_FT \\$1
5214 .    if '\\$0'HDRFTR_RIGHT_FONT'            .ds $HDRFTR_RIGHT_FT \\$1
5215 .    if '\\$0'HEAD_FONT'                    .ds $HEAD_FT \\$1
5216 .    if '\\$0'LINENUMBER_FONT'              .ds $LN_FT \\$1
5217 .    if '\\$0'PAGENUM_FONT'                 .ds $PAGE_NUM_FT \\$1
5218 .    if '\\$0'PARAHEAD_FONT'                .ds $PH_FT \\$1
5219 .    if '\\$0'QUOTE_FONT'                   .ds $QUOTE_FT \\$1
5220 .    if '\\$0'SUBHEAD_FONT'                 .ds $SH_FT \\$1
5221 .    if '\\$0'SUBTITLE_FONT'                .ds $SUBTITLE_FT \\$1
5222 .    if '\\$0'TITLE_FONT'                   .ds $TITLE_FT \\$1
5223 .    if '\\$0'TOC_HEADER_FONT'              .ds $TOC_HEADER_FT \\$1
5224 .    if '\\$0'TOC_HEAD_FONT'                .ds $TOC_HEAD_FT \\$1
5225 .    if '\\$0'TOC_PARAHEAD_FONT'            .ds $TOC_PH_FT \\$1
5226 .    if '\\$0'TOC_PN_FONT'                  .ds $TOC_PN_FT \\$1
5227 .    if '\\$0'TOC_SUBHEAD_FONT'             .ds $TOC_SH_FT \\$1
5228 .    if '\\$0'TOC_TITLE_FONT'               .ds $TOC_TITLE_FT \\$1
5229 .END
5232 .MAC _SIZE END
5233 .    if '\\$0'AUTHOR_SIZE'                  .ds $AUTHOR_SIZE_CHANGE \\$1
5234 .    if '\\$0'BIBLIOGRAPHY_STRING_SIZE'     .ds $BIB_STRING_SIZE_CHANGE \\$1
5235 .    if '\\$0'BLOCKQUOTE_SIZE'              .ds $BQUOTE_SIZE_CHANGE \\$1
5236 .    if '\\$0'CITATION_SIZE'                .ds $BQUOTE_SIZE_CHANGE \\$1
5237 .    if '\\$0'CITE_SIZE'                    .ds $BQUOTE_SIZE_CHANGE \\$1
5238 .    if '\\$0'CHAPTER_TITLE_SIZE'           .ds $CHAPTER_TITLE_SIZE_CHANGE \\$1
5239 .    if '\\$0'COVER_AUTHOR_SIZE'            .ds $COVER_AUTHOR_SIZE_CHANGE \\$1
5240 .    if '\\$0'COVER_CHAPTER_TITLE_SIZE'     .ds $COVER_CHAPTER_TITLE_SIZE_CHANGE \\$1
5241 .    if '\\$0'COVER_COPYRIGHT_SIZE'         .ds $COVER_COPYRIGHT_SIZE_CHANGE \\$1
5242 .    if '\\$0'COVER_DOCTYPE_SIZE'           .ds $COVER_DOCTYPE_SIZE_CHANGE \\$1
5243 .    if '\\$0'COVER_SUBTITLE_SIZE'          .ds $COVER_SUBTITLE_SIZE_CHANGE \\$1
5244 .    if '\\$0'COVER_TITLE_SIZE'             .ds $COVER_TITLE_SIZE_CHANGE \\$1
5245 .    if '\\$0'DOC_COVER_AUTHOR_SIZE'        .ds $DOC_COVER_AUTHOR_SIZE_CHANGE \\$1
5246 .    if '\\$0'DOC_COVER_CHAPTER_TITLE_SIZE' .ds $DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE \\$1
5247 .    if '\\$0'DOC_COVER_COPYRIGHT_SIZE'     .ds $DOC_COVER_COPYRIGHT_SIZE_CHANGE \\$1
5248 .    if '\\$0'DOC_COVER_DOCTYPE_SIZE'       .ds $DOC_COVER_DOCTYPE_SIZE_CHANGE \\$1
5249 .    if '\\$0'DOC_COVER_SUBTITLE_SIZE'      .ds $DOC_COVER_SUBTITLE_SIZE_CHANGE \\$1
5250 .    if '\\$0'DOC_COVER_TITLE_SIZE'         .ds $DOC_COVER_TITLE_SIZE_CHANGE \\$1
5251 .    if '\\$0'DOCTYPE_SIZE'                 .ds $DOCTYPE_SIZE_CHANGE \\$1
5252 .    if '\\$0'ENDNOTE_NUMBER_SIZE'          .ds $EN_NUMBER_SIZE_CHANGE \\$1
5253 .    if '\\$0'ENDNOTE_LINENUMBER_SIZE'      .ds $EN_LN_SIZE_CHANGE \\$1
5254 .    if '\\$0'ENDNOTE_STRING_SIZE'          .ds $EN_STRING_SIZE_CHANGE \\$1
5255 .    if '\\$0'ENDNOTE_TITLE_SIZE'           .ds $EN_TITLE_SIZE_CHANGE \\$1
5256 .    if '\\$0'EPIGRAPH_SIZE'                .ds $EPI_SIZE_CHANGE \\$1
5257 .    if '\\$0'FOOTNOTE_SIZE'                .ds $FN_SIZE_CHANGE \\$1
5258 .    if '\\$0'HDRFTR_CENTER_SIZE'           .ds $HDRFTR_CENTER_SIZE_CHANGE \\$1
5259 .    if '\\$0'HDRFTR_LEFT_SIZE'             .ds $HDRFTR_LEFT_SIZE_CHANGE \\$1
5260 .    if '\\$0'HDRFTR_RIGHT_SIZE'            .ds $HDRFTR_RIGHT_SIZE_CHANGE \\$1
5261 .    if '\\$0'HDRFTR_SIZE'                  .ds $HDRFTR_SIZE_CHANGE \\$1
5262 .    if '\\$0'HEAD_SIZE'                    .ds $HEAD_SIZE_CHANGE \\$1
5263 .    if '\\$0'LINENUMBER_SIZE'              .ds $LN_SIZE_CHANGE \\$1
5264 .    if '\\$0'PAGENUM_SIZE'                 .ds $PAGE_NUM_SIZE_CHANGE \\$1
5265 .    if '\\$0'PARAHEAD_SIZE'                .ds $PH_SIZE_CHANGE \\$1
5266 .    if '\\$0'QUOTE_SIZE'                   .ds $QUOTE_SIZE_CHANGE \\$1
5267 .    if '\\$0'SUBHEAD_SIZE'                 .ds $SH_SIZE_CHANGE \\$1
5268 .    if '\\$0'SUBTITLE_SIZE'                .ds $SUBTITLE_SIZE_CHANGE \\$1
5269 .    if '\\$0'TITLE_SIZE'                   .ds $TITLE_SIZE_CHANGE \\$1
5270 .    if '\\$0'TOC_HEADER_SIZE'              .ds $TOC_HEADER_SIZE_CHANGE \\$1
5271 .    if '\\$0'TOC_HEAD_SIZE'                .ds $TOC_HEAD_SIZE_CHANGE \\$1
5272 .    if '\\$0'TOC_PARAHEAD_SIZE'            .ds $TOC_PH_SIZE_CHANGE \\$1
5273 .    if '\\$0'TOC_PN_SIZE'                  .ds $TOC_PN_SIZE_CHANGE \\$1
5274 .    if '\\$0'TOC_SUBHEAD_SIZE'             .ds $TOC_SH_SIZE_CHANGE \\$1
5275 .    if '\\$0'TOC_TITLE_SIZE'               .ds $TOC_TITLE_SIZE_CHANGE \\$1
5276 .END
5279 .MAC _COLOR END
5280 .    if \\n[#PRINT_STYLE]=1 \{ .return \}
5281 .    if '\\$0'ATTRIBUTE_COLOR' \{\
5282 .       nr #ATTRIBUTE_COLOR 1
5283 .       ds $ATTRIBUTE_COLOR \\$1
5284 .    \}
5285 .    if '\\$0'AUTHOR_COLOR' \{\
5286 .       nr #AUTHOR_COLOR 1
5287 .       ds $AUTHOR_COLOR \\$1
5288 .    \}
5289 .    if '\\$0'BLOCKQUOTE_COLOR' \{\
5290 .       nr #BQUOTE_COLOR 1
5291 .       ds $BQUOTE_COLOR \\$1
5292 .    \}
5293 .    if '\\$0'CITATION_COLOR' \{\
5294 .       nr #BQUOTE_COLOR 1
5295 .       ds $BQUOTE_COLOR \\$1
5296 .    \}
5297 .    if '\\$0'CITE_COLOR' \{\
5298 .       nr #BQUOTE_COLOR 1
5299 .       ds $BQUOTE_COLOR \\$1
5300 .    \}
5301 .    if '\\$0'CHAPTER_TITLE_COLOR' \{\
5302 .       nr #CHAPTER_TITLE_COLOR 1
5303 .       ds $CHAPTER_TITLE_COLOR \\$1
5304 .    \}
5305 .    if '\\$0'COVER_ATTRIBUTE_COLOR' \{\
5306 .       nr #COVER_ATTRIBUTE_COLOR 1
5307 .       ds $COVER_ATTRIBUTE_COLOR \\$1
5308 .    \}
5309 .    if '\\$0'COVER_AUTHOR_COLOR' \{\
5310 .       nr #COVER_AUTHOR_COLOR 1
5311 .       ds $COVER_AUTHOR_COLOR \\$1
5312 .    \}
5313 .    if '\\$0'COVER_CHAPTER_TITLE_COLOR' \{\
5314 .       nr #COVER_CHAPTER_TITLE_COLOR 1
5315 .       ds $COVER_CHAPTER_TITLE_COLOR \\$1
5316 .    \}
5317 .    if '\\$0'COVER_COLOR' \{\
5318 .       nr #COVER_COLOR 1
5319 .       ds $COVER_COLOR \\$1
5320 .    \}
5321 .    if '\\$0'COVER_COPYRIGHT_COLOR' \{\
5322 .       nr #COVER_COPYRIGHT_COLOR 1
5323 .       ds $COVER_COPYRIGHT_COLOR \\$1
5324 .    \}
5325 .    if '\\$0'COVER_MISC_COLOR' \{\
5326 .       nr #COVER_MISC_COLOR 1
5327 .       ds $COVER_MISC_COLOR \\$1
5328 .    \}
5329 .    if '\\$0'COVER_TITLE_COLOR' \{\
5330 .       nr #COVER_TITLE_COLOR 1
5331 .       ds $COVER_TITLE_COLOR \\$1
5332 .    \}
5333 .    if '\\$0'COVER_SUBTITLE_COLOR' \{\
5334 .       nr #COVER_SUBTITLE_COLOR 1
5335 .       ds $COVER_SUBTITLE_COLOR \\$1
5336 .    \}
5337 .    if '\\$0'COVER_DOCTYPE_COLOR' \{\
5338 .       nr #COVER_DOCTYPE_COLOR 1
5339 .       ds $COVER_DOCTYPE_COLOR \\$1
5340 .    \}
5341 .    if '\\$0'DOC_COVER_ATTRIBUTE_COLOR' \{\
5342 .       nr #DOC_COVER_ATTRIBUTE_COLOR 1
5343 .       ds $DOC_COVER_ATTRIBUTE_COLOR \\$1
5344 .    \}
5345 .    if '\\$0'DOC_COVER_AUTHOR_COLOR' \{\
5346 .       nr #DOC_COVER_AUTHOR_COLOR 1
5347 .       ds $DOC_COVER_AUTHOR_COLOR \\$1
5348 .    \}
5349 .    if '\\$0'DOC_COVER_CHAPTER_TITLE_COLOR' \{\
5350 .       nr #DOC_COVER_CHAPTER_TITLE_COLOR 1
5351 .       ds $DOC_COVER_CHAPTER_TITLE_COLOR \\$1
5352 .    \}
5353 .    if '\\$0'DOC_COVER_COLOR' \{\
5354 .       nr #DOC_COVER_COLOR 1
5355 .       ds $DOC_COVER_COLOR \\$1
5356 .    \}
5357 .    if '\\$0'DOC_COVER_COPYRIGHT_COLOR' \{\
5358 .       nr #DOC_COVER_COPYRIGHT_COLOR 1
5359 .       ds $DOC_COVER_COPYRIGHT_COLOR \\$1
5360 .    \}
5361 .    if '\\$0'DOC_COVER_MISC_COLOR' \{\
5362 .       nr #DOC_COVER_MISC_COLOR 1
5363 .       ds $DOC_COVER_MISC_COLOR \\$1
5364 .    \}
5365 .    if '\\$0'DOC_COVER_TITLE_COLOR' \{\
5366 .       nr #DOC_COVER_TITLE_COLOR 1
5367 .       ds $DOC_COVER_TITLE_COLOR \\$1
5368 .    \}
5369 .    if '\\$0'DOC_COVER_SUBTITLE_COLOR' \{\
5370 .       nr #DOC_COVER_SUBTITLE_COLOR 1
5371 .       ds $DOC_COVER_SUBTITLE_COLOR \\$1
5372 .    \}
5373 .    if '\\$0'DOC_COVER_DOCTYPE_COLOR' \{\
5374 .       nr #DOC_COVER_DOCTYPE_COLOR 1
5375 .       ds $DOC_COVER_DOCTYPE_COLOR \\$1
5376 .    \}
5377 .    if '\\$0'DOCHEADER_COLOR' \{\
5378 .       nr #DOCHEADER_COLOR 1
5379 .       ds $DOCHEADER_COLOR \\$1
5380 .    \}
5381 .    if '\\$0'DOCTYPE_COLOR' \{\
5382 .       nr #DOCTYPE_COLOR 1
5383 .       ds $DOCTYPE_COLOR \\$1
5384 .    \}
5385 .    if '\\$0'EPIGRAPH_COLOR' \{\
5386 .       nr #EPI_COLOR 1
5387 .       ds $EPI_COLOR \\$1
5388 .    \}
5389 .    if '\\$0'FINIS_COLOR' \{\
5390 .       nr #FINIS_COLOR 1
5391 .       ds $FINIS_COLOR \\$1
5392 .    \}
5393 .    if '\\$0'FOOTNOTE_COLOR' \{\
5394 .       nr #FOOTNOTE_COLOR 1
5395 .       ds $FOOTNOTE_COLOR \\$1
5396 .    \}
5397 .    if '\\$0'HDRFTR_CENTER_COLOR' \{\
5398 .       nr #HDRFTR_CENTER_COLOR 1
5399 .       ds $HDRFTR_CENTER_COLOR \\$1
5400 .    \}
5401 .    if '\\$0'HDRFTR_COLOR' \{\
5402 .       nr #HDRFTR_COLOR 1
5403 .       ds $HDRFTR_COLOR \\$1
5404 .    \}
5405 .    if '\\$0'HDRFTR_LEFT_COLOR' \{\
5406 .       nr #HDRFTR_LEFT_COLOR 1
5407 .       ds $HDRFTR_LEFT_COLOR \\$1
5408 .    \}
5409 .    if '\\$0'HDRFTR_RIGHT_COLOR' \{\
5410 .       nr #HDRFTR_RIGHT_COLOR 1
5411 .       ds $HDRFTR_RIGHT_COLOR \\$1
5412 .    \}
5413 .    if '\\$0'HDRFTR_RULE_COLOR' \{\
5414 .       nr #HDRFTR_RULE_COLOR 1
5415 .       ds $HDRFTR_RULE_COLOR \\$1
5416 .    \}
5417 .    if '\\$0'HEAD_COLOR' \{\
5418 .       nr #HEAD_COLOR 1
5419 .       ds $HEAD_COLOR \\$1
5420 .    \}
5421 .    if '\\$0'LINEBREAK_COLOR' \{\
5422 .       nr #LINEBREAK_COLOR 1
5423 .       ds $LINEBREAK_COLOR \\$1
5424 .    \}
5425 .    if '\\$0'LINENUMBER_COLOR' \{\
5426 .       nr #LINENUMBER_COLOR 1
5427 .       ds $LN_COLOR \\$1
5428 .    \}
5429 .    if '\\$0'PAGENUM_COLOR' \{\
5430 .       nr #PAGE_NUM_COLOR 1
5431 .       ds $PAGENUM_COLOR \\$1
5432 .    \}
5433 .    if '\\$0'PARAHEAD_COLOR' \{\
5434 .       nr #PH_COLOR 1
5435 .       ds $PH_COLOR \\$1
5436 .    \}
5437 .    if '\\$0'QUOTE_COLOR' \{\
5438 .       nr #QUOTE_COLOR 1
5439 .       ds $QUOTE_COLOR \\$1
5440 .    \}
5441 .    if '\\$0'SUBHEAD_COLOR' \{\
5442 .       nr #SH_COLOR 1
5443 .       ds $SH_COLOR \\$1
5444 .    \}
5445 .    if '\\$0'SUBTITLE_COLOR' \{\
5446 .       nr #SUBTITLE_COLOR 1
5447 .       ds $SUBTITLE_COLOR \\$1
5448 .    \}
5449 .    if '\\$0'TITLE_COLOR' \{\
5450 .       nr #TITLE_COLOR 1
5451 .       ds $TITLE_COLOR \\$1
5452 .    \}
5453 .END
5456 .MAC _QUAD END
5457 .    if '\\$0'BIBLIOGRAPHY_QUAD' \{\
5458 .       ds $BIB_QUAD \\$1
5459 .       if '\\*[$BIB_QUAD]'R' .ab Fatal error: \\$0 must be set to either L or J
5460 .       if '\\*[$BIB_QUAD]'C' .ab Fatal error: \\$0 must be set to either L or J
5461 .    \}
5462 .    if '\\$0'BIBLIOGRAPHY_STRING_QUAD' .ds $BIB_STRING_QUAD \\$1
5463 .    if '\\$0'BLOCKQUOTE_QUAD'          .ds $BQUOTE_QUAD \\$1
5464 .    if '\\$0'CITATION_QUAD'            .ds $BQUOTE_QUAD \\$1
5465 .    if '\\$0'CITE_QUAD'                .ds $BQUOTE_QUAD \\$1
5466 .    if '\\$0'COVER_COPYRIGHT_QUAD'     .ds $COVER_COPYRIGHT_QUAD \\$1
5467 .    if '\\$0'COVER_MISC_QUAD'          .ds $COVER_MISC_QUAD \\$1
5468 .    if '\\$0'DOC_COVER_COPYRIGHT_QUAD' .ds $DOC_COVER_COPYRIGHT_QUAD \\$1
5469 .    if '\\$0'DOC_COVER_MISC_QUAD'      .ds $DOC_COVER_MISC_QUAD \\$1
5470 .    if '\\$0'DOC_QUAD' \{\
5471 .        ds $DOC_QUAD \\$1
5472 .        QUAD \\*[$DOC_QUAD]
5473 .    \}
5474 .    if '\\$0'ENDNOTE_QUAD' \{\
5475 .       ds $EN_QUAD \\$1
5476 .       if '\\*[$EN_QUAD]'R' .ab Fatal error: \\$0 must be set to either L or J
5477 .       if '\\*[$EN_QUAD]'C' .ab Fatal error: \\$0 must be set to either L or J
5478 .    \}
5479 .    if '\\$0'ENDNOTE_STRING_QUAD'      .ds $EN_STRING_QUAD \\$1
5480 .    if '\\$0'ENDNOTE_TITLE_QUAD'       .ds $EN_TITLE_QUAD \\$1
5481 .    if '\\$0'EPIGRAPH_QUAD'            .ds $EPI_QUAD \\$1
5482 .    if '\\$0'FOOTNOTE_QUAD'            .ds $FN_QUAD \\$1
5483 .    if '\\$0'HEAD_QUAD'                .ds $HEAD_QUAD \\$1
5484 .    if '\\$0'SUBHEAD_QUAD'             .ds $SH_QUAD \\$1
5485 .    if '\\$0'TOC_HEADER_QUAD'          .ds $TOC_HEADER_QUAD \\$1
5486 .END
5489 \# DEFAULTS
5490 \# --------
5491 \# *Arguments:
5492 \#   <none>
5493 \# *Function:
5494 \#   Sets up defaults if no values are entered prior to START.
5495 \# *Notes:
5496 \#   The defaults for $CHAPTER_STRING, $DRAFT_STRING, and
5497 \#   $REVISION_STRING are in the COPYSTYLE macro.
5499 .MAC DEFAULTS END
5500 .    if !d$PAPER \{ .PAPER LETTER \}
5501 .    if !\\n[#DOC_TYPE]   \{ .DOCTYPE DEFAULT \}
5502 .    ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
5503 .    el \{\
5504 .       if !\\n[#COPY_STYLE]=1 \{ .PAGENUM_STYLE DIGIT \}
5505 .    \}
5506 .    if !\\n[#COPY_STYLE] \{ .COPYSTYLE FINAL \}
5507 .    if \\n[#DRAFT_WITH_PAGENUM] \{ .COPYSTYLE \\*[$COPY_STYLE] \}
5508 .    if \\n[#DOC_TYPE]=4 \{\
5509 .       if !\\n[#USER_SET_L_LENGTH] \{\
5510 .          R_MARGIN \\n[#R_MARGIN]u
5511 .          rr #USER_SET_L_LENGTH
5512 .       \}
5513 .       if \\n[#PRINT_STYLE]=1 \{ .PRINTSTYLE TYPEWRITE SINGLESPACE \}
5514 .    \}
5515 .    if \\n[#COPY_STYLE]=1 \{\
5516 .       COPYSTYLE DRAFT
5517 .       PAGENUMBER 1
5518 .    \}
5519 .    if !r#DOC_HEADER \{ .DOCHEADER  \}
5520 .    if !r#HEADERS_ON \{ .HEADERS    \}
5521 .    if !r#PAGINATE   \{ .PAGINATE   \}
5522 .    if \\n[#FOOTERS_ON] \{\
5523 .       HEADERS OFF
5524 .       if \\n[#PAGE_NUM_POS_SET]=0 \{ .PAGENUM_POS TOP CENTER \}
5525 .    \}
5526 .    if !r#HEADER_MARGIN \{ .HEADER_MARGIN 4P+6p \}
5527 .    if !r#HEADER_GAP    \{ .HEADER_GAP    3P    \}
5528 .    if \\n[#FOOTERS_ON] \{\
5529 .       if \\n[#PAGINATE]=0 \{\
5530 .          if !r#T_MARGIN \{ .T_MARGIN 6P \}
5531 .       \}
5532 .    \}
5533 .    if \\n[#HEADERS_ON]=0    \{\
5534 .       if \\n[#FOOTERS_ON]=0 \{\
5535 .          if !r#T_MARGIN \{ .T_MARGIN 6P \}
5536 .       \}
5537 .    \}
5538 .    if !r#T_MARGIN          \{ .T_MARGIN \\n[#HEADER_MARGIN]+\\n[#HEADER_GAP] \}
5539 .    if !r#DOCHEADER_ADVANCE \{ .nr #DOCHEADER_ADVANCE \\n[#T_MARGIN] \}
5540 .    if !r#FOOTER_MARGIN     \{ .FOOTER_MARGIN 3P \}
5541 .    if !r#FOOTER_GAP        \{ .FOOTER_GAP    3P \}
5542 .    if !r#B_MARGIN          \{ .B_MARGIN \\n[#FOOTER_MARGIN]u+\\n[#FOOTER_GAP]u \}
5543 .    if (\\n[#FOOTER_MARGIN]+\\n(.v)>\\n[#B_MARGIN] \{\
5544 .       tm1 "[mom]: Your chosen bottom margin for running text is too close to the footer margin.
5545 .       tm1 "       No footers or bottom-of-page page numbers will be printed.
5546 .       tm1 "       Please reset B_MARGIN or FOOTER_MARGIN to allow enough space.
5547 .       tm1 "       If no footers or bottom-of-page page numbers are required,
5548 .       tm1 "       type in .FOOTER_MARGIN 0 before .START
5549 .    \}
5550 .    if !r#HEADER_RULE_GAP   \{ .HEADER_RULE_GAP 4p \}
5551 .    if !r#FOOTER_RULE_GAP   \{ .FOOTER_RULE_GAP 4p \}
5552 .    if !r#HDRFTR_RULE       \{ .HDRFTR_RULE        \}
5553 .    if !r#PAGE_NUM_SET      \{ .PAGENUMBER 1       \}
5554 .\" Read in number registers and strings for type parameters
5555 .    nr #DOC_L_MARGIN \\n[#L_MARGIN]
5556 .    nr #DOC_L_LENGTH \\n[#L_LENGTH]
5557 .    nr #DOC_R_MARGIN \\n[#PAGE_WIDTH]-(\\n[#DOC_L_MARGIN]+\\n[#L_LENGTH])
5558 .    ds $DOC_FAM      \\*[$FAMILY]
5559 .    nr #DOC_PT_SIZE  \\n[#PT_SIZE]
5560 .    nr #DOC_LEAD     \\n[#LEAD]
5561 .\" #SAVED_DOC_LEAD is set in COLLATE
5562 .    if r#SAVED_DOC_LEAD \{\
5563 .       if !\\n[#DOC_LEAD]=\\n[#SAVED_DOC_LEAD] \{ .nr #RERUN_TRAPS 1 \}
5564 .    \}
5565 .    ie \\n[#ADJ_DOC_LEAD]=1 \{ . \}
5566 .    el \{\
5567 .       if !\\n[#DOC_LEAD_ADJUST_OFF] \{\
5568 .          DOC_LEAD_ADJUST
5569 .       \}
5570 .    \}
5571 .    ds $DOC_QUAD      \\*[$QUAD_VALUE]
5572 .    if '\\*[$FONT]''  \{ .FT R \}
5573 .    if '\\*[$PP_FT]'' \{\
5574 .       ds $PP_FT \\*[$FONT]
5575 .    \}
5576 .    if !'\\*[$PP_FT]'' \{\
5577 .       ds $PP_FT \\*[$FONT]
5578 .    \}
5579 .\" Counters
5580 .    nr #PP 0
5581 .    nr #FN_NUMBER 0 1
5582 .    nr #EN_NUMBER 0 1
5583 .    nr #FN_COUNT_FOR_COLS 0 1
5584 .    nr #DONE_ONCE 0 1
5585 .    RESET_HEAD_NUMBER
5586 .    RESET_SUBHEAD_NUMBER
5587 .    RESET_PARAHEAD_NUMBER
5588 .\" General style defaults for both PRINTSTYLEs
5589 .    nr #PP_STYLE 1
5590 .    PARA_INDENT \\n[#PP_INDENT]u
5591 .    if !d$HDRFTR_FAM           \{ .HDRFTR_FAMILY  \\*[$DOC_FAM] \}
5592 .    if !d$HDRFTR_SIZE_CHANGE   \{ .HDRFTR_SIZE    +0            \}
5593 .    if !d$PAGE_NUM_FAM         \{ .PAGENUM_FAMILY \\*[$DOC_FAM] \}
5594 .    if !d$PAGE_NUM_FT          \{ .PAGENUM_FONT   R             \}
5595 .    if !d$PAGE_NUM_SIZE_CHANGE \{ .PAGENUM_SIZE   +0            \}
5596 .    if !r#PAGE_NUM_POS_SET     \{ .PAGENUM_POS BOTTOM CENTER    \}
5597 .    ie \\n[#PAGE_NUM_HYPHENS_SET] \{\
5598 .       if \\n[#PAGE_NUM_HYPHENS]=0  \{ .PAGENUM_HYPHENS OFF \}
5599 .       if \\n[#PAGE_NUM_HYPHENS]=1  \{ .PAGENUM_HYPHENS     \}
5600 .    \}
5601 .    el \{ .PAGENUM_HYPHENS \}
5602 .    if !d$HEAD_QUAD         \{ .HEAD_QUAD CENTER  \}
5603 .    if !r#HEAD_CAPS         \{ .HEAD_CAPS         \}
5604 .    if !r#HEAD_UNDERLINE    \{ .HEAD_UNDERLINE    \}
5605 .    if !d$SH_QUAD           \{ .SUBHEAD_QUAD LEFT \}
5606 .    if !r#HDRFTR_RIGHT_CAPS \{ .HDRFTR_RIGHT_CAPS \}
5607 .    if \\n[#HDRFTR_RIGHT_CAPS]=0 \{\
5608 .       if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE +0 \}
5609 .    \}
5610 .    if !d$FN_FAM               \{ .FOOTNOTE_FAMILY \\*[$DOC_FAM]      \}
5611 .    if !d$FN_FT                \{ .FOOTNOTE_FONT R                    \}
5612 .    if !d$FN_QUAD              \{ .FOOTNOTE_QUAD \\*[$DOC_QUAD]       \}
5613 .    if !r#FN_RULE              \{ .FOOTNOTE_RULE                      \}
5614 .    if !r#FN_MARKERS           \{ .FOOTNOTE_MARKERS                   \}
5615 .    if \\n[#FN_MARKERS]=1 \{\
5616 .       if !\\n[#FN_MARKER_STYLE] \{ .FOOTNOTE_MARKER_STYLE STAR       \}
5617 .    \}
5618 .    if !\\n[#EN_MARKER_STYLE]  \{ .ENDNOTE_MARKER_STYLE NUMBER        \}
5619 .    if !d$EN_PN_STYLE          \{ .ENDNOTES_PAGENUM_STYLE digit       \}
5620 .    if !d$EN_FAM               \{ .ENDNOTE_FAMILY \\*[$DOC_FAM]       \}
5621 .    if !d$EN_FT                \{ .ENDNOTE_FONT R                     \}
5622 .    if !d$EN_QUAD              \{ .ENDNOTE_QUAD \\*[$DOC_QUAD]        \}
5623 .    if !d$EN_STRING            \{ .ENDNOTE_STRING "Endnotes"          \}
5624 .    if !d$EN_STRING_FAM        \{ .ENDNOTE_STRING_FAMILY \\*[$EN_FAM] \}
5625 .    if !d$EN_STRING_QUAD       \{ .ENDNOTE_STRING_QUAD CENTER         \}
5626 .    if !r#EN_STRING_UNDERLINE  \{ .nr #EN_STRING_UNDERLINE 2          \}
5627 .    if !r#EN_STRING_CAPS       \{ .ENDNOTE_STRING_CAPS                \}
5628 .    if !d$EN_TITLE \{\
5629 .       ie \\n[#DOC_TYPE]=2 \{\
5630 .          ie !'\\*[$CHAPTER_TITLE_1]'' \{\
5631 .             ie '\\*[$CHAPTER]'' \{ .ENDNOTE_TITLE "\\*[$CHAPTER_TITLE]" \}
5632 .             el \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]" \}
5633 .          \}
5634 .             el \{\
5635 .                ie '\\*[$CHAPTER]'' \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING]" \}
5636 .                el \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"    \}
5637 .             \}
5638 .          \}
5639 .       el \{ .ENDNOTE_TITLE "\\*[$TITLE]" \}
5640 .    \}
5641 .    if !d$EN_TITLE_FAM          \{ .ENDNOTE_TITLE_FAMILY \\*[$EN_FAM]      \}
5642 .    if !d$EN_TITLE_QUAD         \{ .ENDNOTE_TITLE_QUAD LEFT                \}
5643 .    if !r#EN_TITLE_UNDERLINE    \{ .nr #EN_TITLE_UNDERLINE 1               \}
5644 .    if !d$EN_NUMBER_FAM         \{ .ENDNOTE_NUMBER_FAMILY \\*[$EN_FAM]     \}
5645 .    if !d$EN_LN_FAM             \{ .ENDNOTE_LINENUMBER_FAMILY \\*[$EN_FAM] \}
5646 .    if !r#EN_NUMBERS_ALIGN_LEFT \{\
5647 .       if !r#EN_NUMBERS_ALIGN_RIGHT \{ .ENDNOTE_NUMBERS_ALIGN_RIGHT 2  \}
5648 .    \}
5649 .    if !d$EN_LN_GAP             \{ .ENDNOTE_LINENUMBER_GAP 1.5n        \}
5650 .    if !r#EN_ALLOWS_HEADERS     \{ .ENDNOTES_ALLOWS_HEADERS            \}
5651 .    if !d$BIB_PN_STYLE          \{ .BIBLIOGRAPHY_PAGENUM_STYLE digit         \}
5652 .    if !d$BIB_FAM               \{ .BIBLIOGRAPHY_FAMILY \\*[$DOC_FAM]        \}
5653 .    if !d$BIB_FT                \{ .BIBLIOGRAPHY_FONT R                      \}
5654 .    if !d$BIB_QUAD              \{ .BIBLIOGRAPHY_QUAD \\*[$DOC_QUAD]         \}
5655 .    if !d$BIB_STRING            \{ .BIBLIOGRAPHY_STRING "Bibliography"       \}
5656 .    if !d$BIB_STRING_FAM        \{ .BIBLIOGRAPHY_STRING_FAMILY \\*[$BIB_FAM] \}
5657 .    if !d$BIB_STRING_QUAD       \{ .BIBLIOGRAPHY_STRING_QUAD CENTER          \}
5658 .    if !r#BIB_STRING_UNDERLINE  \{ .nr #BIB_STRING_UNDERLINE 2               \}
5659 .    if !r#BIB_STRING_CAPS       \{ .BIBLIOGRAPHY_STRING_CAPS                 \}
5660 .    if !d$TOC_HEADER_STRING     \{ .TOC_HEADER_STRING "Contents"  \}
5661 .    if !d$TOC_HEADER_QUAD       \{ .TOC_HEADER_QUAD LEFT          \}
5662 .    if !d$TOC_PN_STYLE          \{ .TOC_PAGENUM_STYLE roman       \}
5663 .    if !r#TOC_PN_PADDING        \{ .TOC_PADDING   3               \}
5664 .    if !r#TOC_TITLE_INDENT      \{ .TOC_TITLE_INDENT    0         \}
5665 .\" String defaults for both PRINTSTYLEs
5666 .    ie \\n[#DOC_TYPE]=1 \{\
5667 .       ie '\\*[$DOC_TITLE]'' \{\
5668 .          if \\n[#USER_DEF_HDRFTR_LEFT]=0  .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
5669 .          if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
5670 .       \}
5671 .       el \{\
5672 .          if \\n[#COPY_STYLE]=1 \{ .DRAFT_WITH_PAGENUMBER \}
5673 .          if \\n[#USER_DEF_HDRFTR_LEFT]=0   .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
5674 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 .ds $HDRFTR_CENTER \\*[$TITLE]
5675 .          if \\n[#USER_DEF_HDRFTR_RIGHT]=0  .ds $HDRFTR_RIGHT \\*[$DOC_TITLE]
5676 .       \}
5677 .    \}
5678 .    el \{\
5679 .       if \\n[#USER_DEF_HDRFTR_LEFT]=0  .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
5680 .       if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
5681 .    \}
5682 .    if !d$ATTRIBUTE_STRING .ds $ATTRIBUTE_STRING by
5683 .    if !d$FINIS_STRING      \{ .FINIS_STRING "End"       \}
5684 .    if !r#FINIS_STRING_CAPS \{ .nr #FINIS_STRING_CAPS 1  \}
5685 .\" Covers
5686 .    if !r#DOC_COVERS_OFF           \{ .nr #DOC_COVERS 1           \}
5687 .    if !r#COVERS_OFF               \{ .nr #COVERS 1               \}
5688 .    if !d$COVER_COPYRIGHT_QUAD     \{ .COVER_COPYRIGHT_QUAD R     \}
5689 .    if !d$COVER_MISC_QUAD          \{ .COVER_MISC_QUAD L          \}
5690 .    if !d$DOC_COVER_COPYRIGHT_QUAD \{ .DOC_COVER_COPYRIGHT_QUAD R \}
5691 .    if !d$DOC_COVER_MISC_QUAD      \{ .DOC_COVER_MISC_QUAD L      \}
5692 .    if !r#DOCCOVER_UNDERLINE       \{ .DOC_COVER_UNDERLINE        \}
5693 .    if !r#COVER_UNDERLINE          \{ .COVER_UNDERLINE            \}
5694 .\" Defaults for printstyle TYPEWRITE
5695 .    if \\n[#PRINT_STYLE]=1 \{\
5696 .       if \\n[#UNDERLINE_QUOTES]=1 \{ .UNDERLINE_QUOTES         \}
5697 .       if \\n[#UNDERLINE_QUOTES]=0 \{ .UNDERLINE_QUOTES OFF     \}
5698 .\" +Quotes and blockquotes
5699 .       if !r#Q_OFFSET_VALUE \{\
5700 .          if '\\*[$Q_OFFSET_VALUE]'' \{ .QUOTE_INDENT 2 \}
5701 .       \}
5702 .\" +Epigraphs
5703 .       if !r#EPI_OFFSET_VALUE \{\
5704 .          if '\\*[$EPI_OFFSET_VALUE]'' \{ .EPIGRAPH_INDENT 2 \}
5705 .       \}
5706 .\" +Linebreaks
5707 .       if !d$LINEBREAK_CHAR        \{ .LINEBREAK_CHAR    * 3 2p \}
5708 .\" +Footnotes
5709 .       if !d$FN_SIZE_CHANGE        \{ .FOOTNOTE_SIZE     +0     \}
5710 .       if !r#FN_RULE_LENGTH        \{ .FOOTNOTE_RULE_LENGTH 2i  \}
5711 .\" +Paragraph heads
5712 .       if !r#PH_INDENT    \{ .PARAHEAD_INDENT \\n[#PP_INDENT]u/2u \}
5713 .\" +Endnotes
5714 .       if !r#EN_PP_INDENT \{ .ENDNOTE_PARA_INDENT \\n[#PP_INDENT] \}
5715 .\" +Footnotes
5716 .       if !r#FN_RULE_ADJ           \{ .FOOTNOTE_RULE_ADJ  6p    \}
5717 .\" +Slant stuff
5718 .       if !r#SLANT_MEANS_SLANT \{\
5719 .          ie \\n[#UNDERLINE_SLANT]=1 \{ .UNDERLINE_SLANT \}
5720 .          el \{ .UNDERLINE_SLANT OFF \}
5721 .       \}
5722 .    \}
5723 .\" Defaults for printstyle TYPESET
5724 .    if \\n[#PRINT_STYLE]=2 \{\
5725 .       if !d$DOCHEADER_LEAD_ADJ \{ .DOCHEADER_LEAD +0 \}
5726 .\" +Cover
5727 .       if !d$COVER_LEAD_ADJ \{ .COVER_LEAD +0 \}
5728 .       if !d$COVER_FAM \{ .COVER_FAMILY \\*[$DOC_FAM] \}
5729 .\" (title)
5730 .       if !d$COVER_TITLE_FAM \{\
5731 .          ie !d$COVER_FAM \{ .COVER_TITLE_FAMILY \\*[$DOC_FAM] \}
5732 .          el            \{ .COVER_TITLE_FAMILY \\*[$COVER_FAM] \}
5733 .       \}
5734 .       if !d$COVER_TITLE_FT          \{ .COVER_TITLE_FONT B    \}
5735 .       if !d$COVER_TITLE_SIZE_CHANGE \{ .COVER_TITLE_SIZE +3.5 \}
5736 .\" (chapter title)
5737 .       if !d$COVER_CHAPTER_TITLE_FAM \{\
5738 .          ie !d$COVER_FAM \{ .COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM] \}
5739 .          el            \{ .COVER_CHAPTER_TITLE_FAMILY \\*[$COVER_FAM] \}
5740 .       \}
5741 .       if !d$COVER_CHAPTER_TITLE_FT          \{ .COVER_CHAPTER_TITLE_FONT BI \}
5742 .       if !d$COVER_CHAPTER_TITLE_SIZE_CHANGE \{ .COVER_CHAPTER_TITLE_SIZE +4 \}
5743 .\" (subtitle)
5744 .       if !d$COVER_SUBTITLE_FAM \{\
5745 .          ie !d$COVER_FAM \{ .COVER_SUBTITLE_FAMILY \\*[$DOC_FAM] \}
5746 .          el            \{ .COVER_SUBTITLE_FAMILY \\*[$COVER_FAM] \}
5747 .       \}
5748 .       if !d$COVER_SUBTITLE_FT          \{ .COVER_SUBTITLE_FONT R  \}
5749 .       if !d$COVER_SUBTITLE_SIZE_CHANGE \{ .COVER_SUBTITLE_SIZE +0 \}
5750 .\" (attribution and author[s])
5751 .       if !d$COVER_AUTHOR_FAM \{\
5752 .          ie !d$COVER_FAM \{ .COVER_AUTHOR_FAMILY \\*[$DOC_FAM] \}
5753 .          el      \{ .COVER_AUTHOR_FAMILY \\*[$COVER_FAM] \}
5754 .       \}
5755 .       if !d$COVER_AUTHOR_FT          \{ .COVER_AUTHOR_FONT I  \}
5756 .       if !d$COVER_AUTHOR_SIZE_CHANGE \{ .COVER_AUTHOR_SIZE +0 \}
5757 .\" (doctype if "named")
5758 .       if !d$COVER_DOCTYPE_FAM \{\
5759 .          ie !d$COVER_FAM \{ .COVER_DOCTYPE_FAMILY \\*[$DOC_FAM] \}
5760 .          el            \{ .COVER_DOCTYPE_FAMILY \\*[$COVER_FAM] \}
5761 .       \}
5762 .       if !d$COVER_DOCTYPE_FT          \{ .COVER_DOCTYPE_FONT BI \}
5763 .       if !d$COVER_DOCTYPE_SIZE_CHANGE \{ .COVER_DOCTYPE_SIZE +3 \}
5764 .\" (copyright)
5765 .       if !d$COVER_COPYRIGHT_FAM \{\
5766 .          ie !d$COVER_FAM \{ .COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM] \}
5767 .          el            \{ .COVER_COPYRIGHT_FAMILY \\*[$COVER_FAM] \}
5768 .       \}
5769 .       if !d$COVER_COPYRIGHT_FT          \{ .COVER_COPYRIGHT_FONT R  \}
5770 .       if !d$COVER_COPYRIGHT_SIZE_CHANGE \{ .COVER_COPYRIGHT_SIZE -2 \}
5771 .\" +Doc cover
5772 .       if !d$DOC_COVER_LEAD_ADJ \{ .DOC_COVER_LEAD +0 \}
5773 .       if !d$DOC_COVER_FAM \{ .DOC_COVER_FAMILY \\*[$DOC_FAM] \}
5774 .\" (title)
5775 .       if !d$DOC_COVER_TITLE_FAM \{\
5776 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_TITLE_FAMILY \\*[$DOC_FAM] \}
5777 .          el            \{ .DOC_COVER_TITLE_FAMILY \\*[$DOC_COVER_FAM] \}
5778 .       \}
5779 .       if !d$DOC_COVER_TITLE_FT          \{ .DOC_COVER_TITLE_FONT B    \}
5780 .       if !d$DOC_COVER_TITLE_SIZE_CHANGE \{ .DOC_COVER_TITLE_SIZE +3.5 \}
5781 .\" (chapter title)
5782 .       if !d$DOC_COVER_CHAPTER_TITLE_FAM \{\
5783 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM] \}
5784 .          el            \{ .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_COVER_FAM] \}
5785 .       \}
5786 .       if !d$DOC_COVER_CHAPTER_TITLE_FT          \{ .DOC_COVER_CHAPTER_TITLE_FONT BI \}
5787 .       if !d$DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE \{ .DOC_COVER_CHAPTER_TITLE_SIZE +4 \}
5788 .\" (subtitle)
5789 .       if !d$DOC_COVER_SUBTITLE_FAM \{\
5790 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_FAM] \}
5791 .          el            \{ .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_COVER_FAM] \}
5792 .       \}
5793 .       if !d$DOC_COVER_SUBTITLE_FT          \{ .DOC_COVER_SUBTITLE_FONT R  \}
5794 .       if !d$DOC_COVER_SUBTITLE_SIZE_CHANGE \{ .DOC_COVER_SUBTITLE_SIZE +0 \}
5795 .\" (attribution and author[s])
5796 .       if !d$DOC_COVER_AUTHOR_FAM \{\
5797 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_FAM] \}
5798 .          el            \{ .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_COVER_FAM] \}
5799 .       \}
5800 .       if !d$DOC_COVER_AUTHOR_FT          \{ .DOC_COVER_AUTHOR_FONT I  \}
5801 .       if !d$DOC_COVER_AUTHOR_SIZE_CHANGE \{ .DOC_COVER_AUTHOR_SIZE +0 \}
5802 .\" (doctype if "named")
5803 .       if !d$DOC_COVER_DOCTYPE_FAM \{\
5804 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_FAM] \}
5805 .          el            \{ .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_COVER_FAM] \}
5806 .       \}
5807 .       if !d$DOC_COVER_DOCTYPE_FT          \{ .DOC_COVER_DOCTYPE_FONT BI \}
5808 .       if !d$DOC_COVER_DOCTYPE_SIZE_CHANGE \{ .DOC_COVER_DOCTYPE_SIZE +3 \}
5809 .\" (copyright)
5810 .       if !d$DOC_COVER_COPYRIGHT_FAM \{\
5811 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM] \}
5812 .          el            \{ .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_COVER_FAM] \}
5813 .       \}
5814 .       if !d$DOC_COVER_COPYRIGHT_FT          \{ .DOC_COVER_COPYRIGHT_FONT R  \}
5815 .       if !d$DOC_COVER_COPYRIGHT_SIZE_CHANGE \{ .DOC_COVER_COPYRIGHT_SIZE -2 \}
5816 .\" +Docheader
5817 .       if !d$DOCHEADER_FAM \{ .DOCHEADER_FAMILY \\*[$DOC_FAM] \}
5818 .       if !d$TITLE_FAM \{\
5819 .          ie !d$DOCHEADER_FAM \{ .TITLE_FAMILY \\*[$DOC_FAM]       \}
5820 .          el                  \{ .TITLE_FAMILY \\*[$DOCHEADER_FAM] \}
5821 .       \}
5822 .       if !d$TITLE_FT \{ .TITLE_FONT B \}
5823 .       if !d$TITLE_SIZE_CHANGE \{\
5824 .          ie \\n[#DOC_TYPE]=2 \{ .TITLE_SIZE +4 \}
5825 .          el \{ .TITLE_SIZE +3.5 \}
5826 .       \}
5827 .       if !d$CHAPTER_TITLE_FAM \{\
5828 .          ie !d$DOCHEADER_FAM \{ .CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]       \}
5829 .          el                  \{ .CHAPTER_TITLE_FAMILY \\*[$DOCHEADER_FAM] \}
5830 .       \}
5831 .       if !d$CHAPTER_TITLE_FT          \{ .CHAPTER_TITLE_FONT   BI \}
5832 .       if !d$CHAPTER_TITLE_SIZE_CHANGE \{ .CHAPTER_TITLE_SIZE  +4  \}
5833 .       if !d$SUBTITLE_FAM \{\
5834 .          ie !d$DOCHEADER_FAM \{ .SUBTITLE_FAMILY \\*[$DOC_FAM]       \}
5835 .          el                  \{ .SUBTITLE_FAMILY \\*[$DOCHEADER_FAM] \}
5836 .       \}
5837 .       if !d$SUBTITLE_FT          \{ .SUBTITLE_FONT      R  \}
5838 .       if !d$SUBTITLE_SIZE_CHANGE \{ .SUBTITLE_SIZE     +0  \}
5839 .       if !d$AUTHOR_FAM \{\
5840 .          ie !d$DOCHEADER_FAM \{ .AUTHOR_FAMILY \\*[$DOC_FAM]       \}
5841 .          el                  \{ .AUTHOR_FAMILY \\*[$DOCHEADER_FAM] \}
5842 .       \}
5843 .       if !d$AUTHOR_FT          \{ .AUTHOR_FONT  I \}
5844 .       if !d$AUTHOR_SIZE_CHANGE \{ .AUTHOR_SIZE +0 \}
5845 .       if !d$DOCTYPE_FAM \{\
5846 .          ie !d$DOCHEADER_FAM \{ .DOCTYPE_FAMILY \\*[$DOC_FAM]       \}
5847 .          el                  \{ .DOCTYPE_FAMILY \\*[$DOCHEADER_FAM] \}
5848 .       \}
5849 .       if !d$DOCTYPE_FT           \{ .DOCTYPE_FONT      BI \}
5850 .       if !d$DOCTYPE_SIZE_CHANGE  \{ .DOCTYPE_SIZE      +3 \}
5851 .       if !r#DOCTYPE_UNDERLINE    \{ .DOCTYPE_UNDERLINE    \}
5852 .\" +Headers and footers
5853 .       if !d$HDRFTR_LEFT_FAM      \{ .HDRFTR_LEFT_FAMILY \\*[$DOC_FAM] \}
5854 .       if !d$HDRFTR_LEFT_FT       \{ .HDRFTR_LEFT_FONT R               \}
5855 .       if \\n[#HDRFTR_LEFT_CAPS]  \{\
5856 .          if !d$HDRFTR_LEFT_SIZE_CHANGE \{ .HDRFTR_LEFT_SIZE  -2 \}
5857 .       \}
5858 .       if !d$HDRFTR_LEFT_SIZE_CHANGE \{ .HDRFTR_LEFT_SIZE     -.5           \}
5859 .       if !d$HDRFTR_CENTER_FAM       \{ .HDRFTR_CENTER_FAMILY \\*[$DOC_FAM] \}
5860 .       if !d$HDRFTR_CENTER_FT        \{ .HDRFTR_CENTER_FONT   I             \}
5861 .       if \\n[#HDRFTR_CENTER_CAPS] \{\
5862 .          if !d$HDRFTR_CENTER_SIZE_CHANGE \{ .HDRFTR_CENTER_SIZE -2 \}
5863 .       \}
5864 .       if !d$HDRFTR_CENTER_SIZE_CHANGE \{ .HDRFTR_CENTER_SIZE -.5            \}
5865 .       if !d$HDRFTR_RIGHT_FAM          \{ .HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM] \}
5866 .       if !d$HDRFTR_RIGHT_FT           \{ .HDRFTR_RIGHT_FONT   R             \}
5867 .       if \\n[#HDRFTR_RIGHT_CAPS] \{\
5868 .          if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE -2 \}
5869 .       \}
5870 .       if !d$HDRFTR_RIGHT_SIZE_CHANGE  \{ .HDRFTR_RIGHT_SIZE  -.5              \}
5871 .\" +Heads
5872 .       if !d$HEAD_FAM                  \{ .HEAD_FAMILY        \\*[$DOC_FAM]    \}
5873 .       if !d$HEAD_FT                   \{ .HEAD_FONT          B                \}
5874 .       if !d$HEAD_SIZE_CHANGE          \{ .HEAD_SIZE          +1               \}
5875 .       if !r#HEAD_SPACE                \{ .HEAD_SPACE                          \}
5876 .\" +Subheads
5877 .       if !d$SH_FAM                    \{ .SUBHEAD_FAMILY     \\*[$DOC_FAM]    \}
5878 .       if !d$SH_FT                     \{ .SUBHEAD_FONT       B                \}
5879 .       if !d$SH_SIZE_CHANGE            \{ .SUBHEAD_SIZE       +.5              \}
5880 .\" +Paragraph heads
5881 .       if !d$PH_FAM                    \{ .PARAHEAD_FAMILY    \\*[$DOC_FAM]    \}
5882 .       if !d$PH_FT                     \{ .PARAHEAD_FONT      BI               \}
5883 .       if !d$PH_SIZE_CHANGE            \{ .PARAHEAD_SIZE      -.25             \}
5884 .       if !r#PH_INDENT                 \{ .PARAHEAD_INDENT \\n[#PP_INDENT]u/2u \}
5885 .\" +Quotes
5886 .       if !d$QUOTE_FAM                 \{ .QUOTE_FAMILY       \\*[$DOC_FAM]    \}
5887 .       if !d$QUOTE_FT                  \{ .QUOTE_FONT         I                \}
5888 .       if !d$QUOTE_SIZE_CHANGE         \{ .QUOTE_SIZE         +0               \}
5889 .       if !r#Q_OFFSET_VALUE \{\
5890 .          if '\\*[$Q_OFFSET_VALUE]''   \{ .QUOTE_INDENT 3 \}
5891 .       \}
5892 .\" +Blockquotes
5893 .\"  Note: the leading for quotes and blockquotes is set after .DEFAULTS in START
5894 .       if !d$BQUOTE_FAM                \{ .BLOCKQUOTE_FAMILY  \\*[$DOC_FAM]    \}
5895 .       if !d$BQUOTE_FT                 \{ .BLOCKQUOTE_FONT    R                \}
5896 .       if !d$BQUOTE_SIZE_CHANGE        \{ .BLOCKQUOTE_SIZE    -1               \}
5897 .       if !d$BQUOTE_QUAD               \{ .BLOCKQUOTE_QUAD    LEFT             \}
5898 .\" +Epigraphs
5899 .       if !d$EPI_FAM                   \{ .EPIGRAPH_FAMILY    \\*[$DOC_FAM]    \}
5900 .       if !d$EPI_FT                    \{ .EPIGRAPH_FONT      R                \}
5901 .       if !d$EPI_SIZE_CHANGE           \{ .EPIGRAPH_SIZE      -1.5             \}
5902 .       if !r#EPI_AUTOLEAD              \{ .EPIGRAPH_AUTOLEAD  2                \}
5903 .       if !d$EPI_QUAD                  \{ .EPIGRAPH_QUAD      \\*[$DOC_QUAD]   \}
5904 .       if !r#EPI_OFFSET_VALUE \{\
5905 .          if '\\*[$EPI_OFFSET_VALUE]'' \{ .EPIGRAPH_INDENT 3 \}
5906 .       \}
5907 .\" +Linebreaks
5908 .       if !d$LINEBREAK_CHAR            \{ .LINEBREAK_CHAR * 3 3p               \}
5909 .       if !d$LINEBREAK_COLOR           \{ .LINEBREAK_COLOR black               \}
5910 .\" +Footnotes
5911 .       if !r#FN_RULE_LENGTH            \{ .FOOTNOTE_RULE_LENGTH 4P             \}
5912 .       if !r#FN_RULE_ADJ               \{ .FOOTNOTE_RULE_ADJ  3p               \}
5913 .       if !d$FN_SIZE_CHANGE            \{ .FOOTNOTE_SIZE      -2               \}
5914 .       if !r#FN_AUTOLEAD               \{ .FOOTNOTE_AUTOLEAD  2                \}
5915 .\" +Endnotes
5916 .       if !r#EN_PS                     \{ .ENDNOTE_PT_SIZE (\\n[#DOC_PT_SIZE]u)\}
5917 .       if !d$EN_STRING_FT              \{ .ENDNOTE_STRING_FONT B               \}
5918 .       if !d$EN_STRING_SIZE_CHANGE     \{ .ENDNOTE_STRING_SIZE +1              \}
5919 .       if !d$EN_TITLE_FT               \{ .ENDNOTE_TITLE_FONT  B               \}
5920 .       if !d$EN_TITLE_SIZE_CHANGE      \{ .ENDNOTE_TITLE_SIZE  +0              \}
5921 .       if !d$EN_NUMBER_FT              \{ .ENDNOTE_NUMBER_FONT B               \}
5922 .       if !d$EN_LN_FT                  \{ .ENDNOTE_LINENUMBER_FONT R           \}
5923 .       if !d$EN_NUMBER_SIZE_CHANGE     \{ .ENDNOTE_NUMBER_SIZE +0              \}
5924 .       if !r#EN_PP_INDENT              \{ .ENDNOTE_PARA_INDENT 1.5m            \}
5925 .\" +Bibliography
5926 .       if !r#BIB_LIST                  \{ .BIBLIOGRAPHY_TYPE LIST .                  \}
5927 .       if !r#BIB_PS                    \{ .BIBLIOGRAPHY_PT_SIZE (\\n[#DOC_PT_SIZE]u) \}
5928 .       if !d$BIB_STRING_FT             \{ .BIBLIOGRAPHY_STRING_FONT B                \}
5929 .       if !d$BIB_STRING_SIZE_CHANGE    \{ .BIBLIOGRAPHY_STRING_SIZE +1               \}
5930 .\" +Table of contents
5931 .       if !d$TOC_FAM                   \{ .TOC_FAMILY  \\*[$DOC_FAM]           \}
5932 .       if !r#TOC_PS                    \{ .TOC_PT_SIZE (\\n[#DOC_PT_SIZE]u)    \}
5933 .       if !r#TOC_LEAD                  \{ .TOC_LEAD    \\n[#DOC_LEAD]u ADJUST  \}
5934 .       if !d$TOC_HEADER_FAM            \{ .TOC_HEADER_FAMILY \\*[$TOC_FAM]     \}
5935 .       if !d$TOC_HEADER_SIZE_CHANGE    \{ .TOC_HEADER_SIZE +4                  \}
5936 .       if !d$TOC_HEADER_FT             \{ .TOC_HEADER_FONT  B                  \}
5937 .       if !d$TOC_TITLE_FAM             \{ .TOC_TITLE_FAMILY \\*[$TOC_FAM]      \}
5938 .       if !d$TOC_PN_FAM                \{ .TOC_PN_FAMILY    \\*[$TOC_FAM]      \}
5939 .       if !d$TOC_HEAD_FAM              \{ .TOC_HEAD_FAMILY  \\*[$TOC_FAM]      \}
5940 .       if !d$TOC_SH_FAM                \{ .TOC_SUBHEAD_FAMILY  \\*[$TOC_FAM]   \}
5941 .       if !d$TOC_PH_FAM                \{ .TOC_PARAHEAD_FAMILY \\*[$TOC_FAM]   \}
5942 .       if !d$TOC_TITLE_FT              \{ .TOC_TITLE_FONT    BI                \}
5943 .       if !d$TOC_PN_FT                 \{ .TOC_PN_FONT       R                 \}
5944 .       if !d$TOC_HEAD_FT               \{ .TOC_HEAD_FONT     B                 \}
5945 .       if !d$TOC_SH_FT                 \{ .TOC_SUBHEAD_FONT  R                 \}
5946 .       if !d$TOC_PH_FT                 \{ .TOC_PARAHEAD_FONT I                 \}
5947 .       if !d$TOC_TITLE_SIZE_CHANGE     \{ .TOC_TITLE_SIZE    +.5               \}
5948 .       if !d$TOC_PN_SIZE_CHANGE        \{ .TOC_PN_SIZE       +0                \}
5949 .       if !d$TOC_HEAD_SIZE_CHANGE      \{ .TOC_HEAD_SIZE     +.5               \}
5950 .       if !d$TOC_SH_SIZE_CHANGE        \{ .TOC_SUBHEAD_SIZE  +0                \}
5951 .       if !d$TOC_PH_SIZE_CHANGE        \{ .TOC_PARAHEAD_SIZE +0                \}
5952 .       ps \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
5953 .       if !r#TOC_HEAD_INDENT           \{ .TOC_HEAD_INDENT \w'\0\0.'           \}
5954 .       ps
5955 .       ps \\n[#TOC_PS]u\\*[$TOC_HEAD_SIZE_CHANGE]
5956 .       if !r#TOC_SH_INDENT             \{ .TOC_SUBHEAD_INDENT \\n[#TOC_HEAD_INDENT]+\w'\0\0.'       \}
5957 .       ps
5958 .       ps \\n[#TOC_PS]u\\*[$TOC_SH_SIZE_CHANGE]
5959 .       if !r#TOC_PH_INDENT             \{ .TOC_PARAHEAD_INDENT \\n[#TOC_SH_INDENT]+\w'\0\0.'       \}
5960 .       ps
5961 .    \}
5962 .\" +Refer support
5963 .    if !r#EN_REF \{ .nr #FN_REF 1 \}
5964 .    if '\\*[$REF_FN_INDENT]'' \{\
5965 .       if \\n[#PRINT_STYLE]=1 \{ .INDENT_REFS FOOTNOTE 2m   \}
5966 .       if \\n[#PRINT_STYLE]=2 \{ .INDENT_REFS FOOTNOTE 1.5m \}
5967 .    \}
5968 .    if '\\*[$REF_EN_INDENT]'' \{\
5969 .       if \\n[#PRINT_STYLE]=1 \{ .INDENT_REFS ENDNOTE 2m   \}
5970 .       if \\n[#PRINT_STYLE]=2 \{ .INDENT_REFS ENDNOTE 1.5m \}
5971 .    \}
5972 .    if '\\*[$REF_BIB_INDENT]'' \{\
5973 .       if \\n[#PRINT_STYLE]=1 \{ .INDENT_REFS BIBLIO 2m    \}
5974 .       if \\n[#PRINT_STYLE]=2 \{ .INDENT_REFS BIBLIO 1.5m  :\}
5975 .    \}
5976 .\" Adjust doc leading for PRINTSTYLE TYPESET
5977 .    if \\n[#PRINT_STYLE]=2 \{\
5978 .       ie \\n[#ADJ_DOC_LEAD]=1 \{ .DOC_LEAD_ADJUST \}
5979 .       el \{ . \}
5980 .    \}
5981 .\" This diversion is to get a value for #FN_AUTOLEAD
5982 .    di NULL
5983 .       ev NULL
5984 .       if \\n[#PRINT_STYLE]=1 \{\
5985 .          ps 12
5986 .          ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#ORIGINAL_DOC_LEAD]u \}
5987 .          el \{ .vs \\n[#ORIGINAL_DOC_LEAD]u/2u \}
5988 .       \}
5989 .       if \\n[#PRINT_STYLE]=2 \{\
5990 .          PT_SIZE  \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
5991 .          AUTOLEAD \\n[#FN_AUTOLEAD]
5992 .       \}
5993 .       nr #FN_LEAD \\n[#LEAD]
5994 .       if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#DOC_LEAD]u \}
5995 .       ev
5996 .    di
5997 .    ie !\\n[#COLLATE] \{\
5998 .\" DOC_LEAD adjusted (or not) here
5999 .       TRAPS
6000 .\" Endnote, bibliography and toc leading
6001 .       nr #OK_PROCESS_LEAD 1
6002 .       nr #RESTORE_DOC_LEAD \\n(.v
6003 .       nr #RESTORE_B_MARGIN \\n[#B_MARGIN]
6004 .       if \\n[#PRINT_STYLE]=1 \{\
6005 .          ie \\n[#SINGLE_SPACE] \{\
6006 .             ENDNOTE_LEAD 12 ADJUST
6007 .             BIBLIOGRAPHY_LEAD 12 ADJUST
6008 .          \}
6009 .          el \{\
6010 .             ie \\n[#EN_SINGLESPACE] \{ .ENDNOTE_LEAD 12 ADJUST \}
6011 .             el \{ .ENDNOTE_LEAD 24 ADJUST \}
6012 .             ie \\n[#BIB_SINGLESPACE] \{ .BIBLIOGRAPHY_LEAD 12 ADJUST \}
6013 .             el \{ .BIBLIOGRAPHY_LEAD 24 ADJUST \}
6014 .          \}
6015 .       \}
6016 .       if \\n[#PRINT_STYLE]=2 \{\
6017 .          ie !d$EN_LEAD \{ .ENDNOTE_LEAD 14 ADJUST \}
6018 .          el \{ .ENDNOTE_LEAD \\*[$EN_LEAD] \\*[$ADJUST_EN_LEAD] \}
6019 .          ie !d$BIB_LEAD \{ .BIBLIOGRAPHY_LEAD 14 ADJUST \}
6020 .          el \{ .BIBLIOGRAPHY_LEAD \\*[$BIB_LEAD] \\*[$ADJUST_BIB_LEAD] \}
6021 .          ie !d$TOC_LEAD \{ .TOC_LEAD \\n[#RESTORE_DOC_LEAD]u \}
6022 .          el \{ .TOC_LEAD \\*[$TOC_LEAD] \\*[$ADJUST_TOC_LEAD] \}
6023 .          rm $ADJUST_EN_LEAD
6024 .          rm $ADJUST_BIB_LEAD
6025 .          rm $ADJUST_TOC_LEAD
6026 .       \}
6027 .       ie !d$BIB_SPACE \{ .BIBLIOGRAPHY_SPACING 1v \}
6028 .       el \{\
6029 .          if \\n[#DEFER_BIB_SPACING]=1 \{\
6030 .             BIBLIOGRAPHY_SPACING \\*[$BIB_SPACE]
6031 .             rr #DEFER_BIB_SPACING
6032 .          \}
6033 .       \}
6034 .       DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
6035 .       nr #B_MARGIN \\n[#RESTORE_B_MARGIN]
6036 .    \}
6037 .    el \{\
6038 .       if \\n[#COLLATE] \{\
6039 .          if !\\n[#PRINT_STYLE]=1 \{\
6040 .             if \\n[#RERUN_TRAPS] \{ .TRAPS \}
6041 .          \}
6042 .       \}
6043 .    \}
6044 .    if \\n[#PRINT_STYLE]=1 \{ .nr #IGNORE 1 \}
6045 .END
6047 \# ====================================================================
6049 \# +++START THE DOCUMENT+++
6051 \# THE START MACRO
6052 \# ---------------
6053 \# *Arguments:
6054 \#   <none>
6055 \# *Function:
6056 \#   Reads in default document style parameters and any parameter
6057 \#   the user has changed before issuing START.
6058 \#   Using the information gathered in the opening macros,
6059 \#   prints appropriate title (or chapter #), subtitle, author
6060 \#   and document type (if appropriate).
6061 \# *Notes:
6062 \#   The .PRINT \& (zero-width character) is required to get the
6063 \#   subsequent .sp request to work as advertised.
6065 \#   The overall document line length, family, and point-size
6066 \#   are stored in #DOC_L_LENGTH, $DOC_FAM, and #DOC_PT_SIZE for
6067 \#   use in the HEADER and FOOTER macros.
6069 \#  First, define some strings for point sizes
6071 \# Doc cover
6072 .ds $DOC_COVER_AUTHOR_PT_SIZE        \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_AUTHOR_SIZE_CHANGE]
6073 .ds $DOC_COVER_CHAPTER_TITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE]
6074 .ds $DOC_COVER_COPYRIGHT_PT_SIZE     \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_COPYRIGHT_SIZE_CHANGE]
6075 .ds $DOC_COVER_DOCTYPE_PT_SIZE       \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_DOCTYPE_SIZE_CHANGE]
6076 .ds $DOC_COVER_SUBTITLE_PT_SIZE      \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_SUBTITLE_SIZE_CHANGE]
6077 .ds $DOC_COVER_TITLE_PT_SIZE         \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_TITLE_SIZE_CHANGE]
6078 \# Cover
6079 .ds $COVER_AUTHOR_PT_SIZE        \\n[#DOC_PT_SIZE]u\\*[$COVER_AUTHOR_SIZE_CHANGE]
6080 .ds $COVER_CHAPTER_TITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$COVER_CHAPTER_TITLE_SIZE_CHANGE]
6081 .ds $COVER_COPYRIGHT_PT_SIZE     \\n[#DOC_PT_SIZE]u\\*[$COVER_COPYRIGHT_SIZE_CHANGE]
6082 .ds $COVER_DOCTYPE_PT_SIZE       \\n[#DOC_PT_SIZE]u\\*[$COVER_DOCTYPE_SIZE_CHANGE]
6083 .ds $COVER_SUBTITLE_PT_SIZE      \\n[#DOC_PT_SIZE]u\\*[$COVER_SUBTITLE_SIZE_CHANGE]
6084 .ds $COVER_TITLE_PT_SIZE         \\n[#DOC_PT_SIZE]u\\*[$COVER_TITLE_SIZE_CHANGE]
6085 \# Docheader
6086 .ds $AUTHOR_PT_SIZE         \\n[#DOC_PT_SIZE]u\\*[$AUTHOR_SIZE_CHANGE]
6087 .ds $CHAPTER_TITLE_PT_SIZE  \\n[#DOC_PT_SIZE]u\\*[$CHAPTER_TITLE_SIZE_CHANGE]
6088 .ds $COPYRIGHT_PT_SIZE      \\n[#DOC_PT_SIZE]u\\*[$COPYRIGHT_SIZE_CHANGE]
6089 .ds $DOCTYPE_PT_SIZE        \\n[#DOC_PT_SIZE]u\\*[$DOCTYPE_SIZE_CHANGE]
6090 .ds $SUBTITLE_PT_SIZE       \\n[#DOC_PT_SIZE]u\\*[$SUBTITLE_SIZE_CHANGE]
6091 .ds $TITLE_PT_SIZE          \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE]
6093 \# Next, some utility macros for various routines to prevent repetition
6095 .    if '\\$1'DOC_COVER' \{\
6096 .       shift
6097 .       nr #AUTHOR_DOCCOVER_NUM 0 1
6098 .       while \\n[#NUM_ARGS]>\\n[#AUTHOR_DOCCOVER_NUM] \{\
6099 .       ds $AUTHOR_DOCCOVER_\\n+[#AUTHOR_DOCCOVER_NUM] \\$\\n[#AUTHOR_DOCCOVER_NUM]
6101 .       return
6102 .    \}
6103 .    if '\\$1'COVER' \{\
6104 .       shift
6105 .       nr #AUTHOR_COVER_NUM 0 1
6106 .       while \\n[#NUM_ARGS]>\\n[#AUTHOR_COVER_NUM] \{\
6107 .       ds $AUTHOR_COVER_\\n+[#AUTHOR_COVER_NUM] \\$\\n[#AUTHOR_COVER_NUM]
6109 .       return
6110 .    \}
6112 .MAC PRINT_AUTHORS END
6113 .    ie r#DOING_COVER \{\
6114 .       if \\n[#DOC_COVER]=1 \{\
6115 .          ie !'\\*[$AUTHOR_DOCCOVER_1]'' \{\
6116 .             nr #AUTHORS \\n[#AUTHOR_DOCCOVER_NUM]
6117 .             nr #NEXT_AUTHOR 0 1
6118 .             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
6119 .                ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \{\
6120 .                   PRINT \m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_DOCCOVER_\\n+[#NEXT_AUTHOR]]\m[]
6121 .                \}
6122 .                el \{ .PRINT \\*[$AUTHOR_DOCCOVER_\\n+[#NEXT_AUTHOR]] \}
6124 .          \}
6125 .          el \{\
6126 .             nr #AUTHORS \\n[#AUTHOR_NUM]
6127 .             nr #NEXT_AUTHOR 0 1
6128 .             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
6129 .                ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \{\
6130 .                   PRINT \m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
6131 .                \}
6132 .                el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \}
6134 .          \}
6135 .          return
6136 .       \}
6137 .       if \\n[#COVER]=1 \{\
6138 .          ie !'\\*[$AUTHOR_COVER_1]'' \{\
6139 .             nr #AUTHORS \\n[#AUTHOR_COVER_NUM]
6140 .             nr #NEXT_AUTHOR 0 1
6141 .             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
6142 .                ie \\n[#COVER_AUTHOR_COLOR]=1 \{\
6143 .                   PRINT \m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_COVER_\\n+[#NEXT_AUTHOR]]\m[]
6144 .                \}
6145 .                el \{ .PRINT \\*[$AUTHOR_COVER_\\n+[#NEXT_AUTHOR]] \}
6147 .          \}
6148 .          el \{\
6149 .             nr #AUTHORS \\n[#AUTHOR_NUM]
6150 .             nr #NEXT_AUTHOR 0 1
6151 .             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
6152 .                ie \\n[#COVER_AUTHOR_COLOR]=1 \{\
6153 .                   PRINT \m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
6154 .                \}
6155 .                el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \}
6157 .          \}
6158 .          return
6159 .       \}
6160 .    \}
6161 .    el \{\
6162 .       nr #AUTHORS \\n[#AUTHOR_NUM]
6163 .       nr #NEXT_AUTHOR 0 1
6164 .       while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
6165 .          ie \\n[#AUTHOR_COLOR]=1 \{\
6166 .             PRINT \m[\\*[$AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
6167 .          \}
6168 .          el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \}
6170 .    \}
6171 .END
6173 .MAC DEFAULT_DOCHEADER END
6174 .    if !'\\*[$TITLE_1]'' \{\
6175 .       CENTER
6176 .       FAMILY  \\*[$TITLE_FAM]
6177 .       FT      \\*[$TITLE_FT]
6178 .       PT_SIZE \\*[$TITLE_PT_SIZE]
6179 .       LS      \\n[#DOCHEADER_LEAD]u
6180 .       nr #ARG_NUM 0 1
6181 .       while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6182 .          ie \\n[#TITLE_COLOR]=1 \{\
6183 .             PRINT "\m[\\*[$TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
6184 .          \}
6185 .          el \{\
6186 .             PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
6187 .          \}
6189 .    \}
6190 .    if !'\\*[$SUBTITLE_1]'' \{\
6191 .       FAMILY  \\*[$SUBTITLE_FAM]
6192 .       FT      \\*[$SUBTITLE_FT]
6193 .       PT_SIZE \\*[$SUBTITLE_PT_SIZE]
6194 .       nr #ARG_NUM 0 1
6195 .       while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
6196 .          ie \\n[#SUBTITLE_COLOR]=1 \{\
6197 .             PRINT "\m[\\*[$SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n[#ARG_NUM]]\m[]
6198 .          \}
6199 .          el \{\
6200 .             PRINT "\\*[$SUBTITLE_\\n[#ARG_NUM]]
6201 .          \}
6203 .    \}
6204 .    if !'\\*[$AUTHOR_1]'' \{\
6205 .       FAMILY  \\*[$AUTHOR_FAM]
6206 .       FT      \\*[$AUTHOR_FT]
6207 .       PT_SIZE \\*[$AUTHOR_PT_SIZE]
6208 .       ie \\n[#ATTRIBUTE_COLOR]=1 \{\
6209 .          PRINT \&\m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
6210 .       \}
6211 .       el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \}
6212 .       PRINT_AUTHORS
6213 .    \}
6214 .    FAMILY \\*[$DOC_FAM]
6215 .    FT R
6216 .END
6219 .MAC CHAPTER_DOCHEADER END
6220 .    CENTER
6221 .    FAMILY  \\*[$TITLE_FAM]
6222 .    FT      \\*[$TITLE_FT]
6223 .    PT_SIZE \\*[$TITLE_PT_SIZE]
6224 .    LS      \\n[#DOCHEADER_LEAD]u
6225 .\" Chapter title only
6226 .    ie '\\*[$CHAPTER]'' \{\
6227 .       ie !'\\*[$CHAPTER_TITLE_1]'' \{\
6228 .          if \\n[#PRINT_STYLE]=2 \{\
6229 .             FAMILY  \\*[$CHAPTER_TITLE_FAM]
6230 .             FT      \\*[$CHAPTER_TITLE_FT]
6231 .             PT_SIZE \\*[$CHAPTER_TITLE_PT_SIZE]
6232 .             LS      \\n[#DOCHEADER_LEAD]u
6233 .          \}
6234 .          nr #ARG_NUM 0 1
6235 .          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6236 .             ie \\n[#TITLE_COLOR]=1 \{\
6237 .                PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
6238 .             \}
6239 .             el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
6241 .       \}
6242 .       el \{\
6243 .          ie \\n[#TITLE_COLOR]=1 \{\
6244 .             PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING]\m[]
6245 .          \}
6246 .          el \{ .PRINT \\*[$CHAPTER_STRING] \}
6247 .       \}
6248 .    \}
6249 .\" Chapter string, possibly with a chapter title
6250 .    el \{\
6251 .       ie \\n[#TITLE_COLOR]=1 \{\
6252 .          PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
6253 .       \}
6254 .       el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
6255 .       if !'\\*[$CHAPTER_TITLE_1]'' \{\
6256 .          if \\n[#PRINT_STYLE]=2 \{\
6257 .             FAMILY  \\*[$CHAPTER_TITLE_FAM]
6258 .             FT      \\*[$CHAPTER_TITLE_FT]
6259 .             PT_SIZE \\*[$CHAPTER_TITLE_PT_SIZE]
6260 .             LS      \\n[#DOCHEADER_LEAD]u
6261 .             ALD \\n[.v]u/4u \"Put a little space before the chapter title
6262 .          \}
6263 .          nr #ARG_NUM 0 1
6264 .          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6265 .             ie \\n[#CHAPTER_TITLE_COLOR]=1 \{\
6266 .                PRINT \m[\\*[$CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
6267 .             \}
6268 .          el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
6270 .          RLD \\n[#DOC_LEAD]u \" Just looks better this way
6271 .       \}
6272 .    \}
6273 .    FAMILY \\*[$DOC_FAM]
6274 .    FT R
6275 .END
6278 .MAC NAMED_DOCHEADER END
6279 .    CENTER
6280 .    FAMILY  \\*[$TITLE_FAM]
6281 .    FT      \\*[$TITLE_FT]
6282 .    PT_SIZE \\*[$TITLE_PT_SIZE]
6283 .    LS      \\n[#DOCHEADER_LEAD]u
6284 .    if !'\\*[$TITLE_1]'' \{\
6285 .       nr #ARG_NUM 0 1
6286 .       while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6287 .          ie \\n[#TITLE_COLOR]=1 \{\
6288 .             PRINT "\m[\\*[$TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
6289 .          \}
6290 .          el \{\
6291 .             PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
6292 .          \}
6294 .    \}
6295 .    if !'\\*[$SUBTITLE]'' \{\
6296 .       FAMILY  \\*[$SUBTITLE_FAM]
6297 .       FT      \\*[$SUBTITLE_FT]
6298 .       PT_SIZE \\*[$SUBTITLE_PT_SIZE]
6299 .       nr #ARG_NUM 0 1
6300 .       while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
6301 .          ie \\n[#SUBTITLE_COLOR]=1 \{\
6302 .             PRINT "\m[\\*[$SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n[#ARG_NUM]]\m[]
6303 .          \}
6304 .          el \{\
6305 .             PRINT "\\*[$SUBTITLE_\\n[#ARG_NUM]]
6306 .          \}
6308 .    \}
6309 .    if !'\\*[$AUTHOR_1]'' \{\
6310 .       FAMILY  \\*[$AUTHOR_FAM]
6311 .       FT      \\*[$AUTHOR_FT]
6312 .       PT_SIZE \\*[$AUTHOR_PT_SIZE]
6313 .       ie \\n[#ATTRIBUTE_COLOR]=1 \{\
6314 .          PRINT \&\m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
6315 .       \}
6316 .       el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \}
6317 .       PRINT_AUTHORS
6318 .    \}
6319 .    FAMILY  \\*[$DOCTYPE_FAM]
6320 .    FT      \\*[$DOCTYPE_FT]
6321 .    PT_SIZE \\*[$DOCTYPE_PT_SIZE]
6322 .    LS      \\n[#DOCHEADER_LEAD]u
6323 .    ALD     \\n[#DOCHEADER_LEAD]u
6324 .    nr #FROM_DOCTYPE 1
6325 .    if \\n[#DOCTYPE_COLOR]=1 \{\
6326 .       COLOR \\*[$DOCTYPE_COLOR]
6327 .    \}
6328 .    ie \\n[#DOCTYPE_UNDERLINE]=1 \{\
6329 .       UNDERSCORE \\*[$DOCTYPE_UNDERLINE_GAP] "\\*[$DOC_TYPE]"
6330 .     \}
6331 .    el \{\
6332 .       PRINT "\\*[$DOC_TYPE]"
6333 .    \}
6334 .    COLOR black
6335 .    FAMILY \\*[$DOC_FAM]
6336 .    FT R
6337 .    rr #FROM_DOCTYPE
6338 .END
6341 \# COVER PAGE
6342 \# ----------
6343 \# *Arguments:
6344 \#   TITLE | DOCTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE | COVERTITLE ...
6345 \#   ... [ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC BLANKPAGE ]
6346 \# *Function:
6347 \#   Toggles the number register for each cover page element
6348 \#   passed as an argument.
6349 \# *Notes:
6350 \#   TITLE, DOCTITLE, CHAPTER, CHAPTER_TITLE or CHAPTER+TITLE must
6351 \#   be supplied.  After that, users may enter as many or as few of
6352 \#   the arguments as they like; however, the arguments must appear
6353 \#   in the order given above.  BLANKPAGE, as the final argument,
6354 \#   inserts a blank page after the cover.
6356 \#   If called as DOC_COVER, performs the same operations, but
6357 \#   applies everything to a doc cover.
6359 .MAC COVER END
6360 .    ie '\\$0'DOC_COVER' \{\
6361 .       if '\\$\\n[#NUM_ARGS]'BLANKPAGE' \{ .nr #DOCCOVER_BLANKPAGE 1 \}
6362 .       nr #DOC_COVER 1
6363 .       if '\\$1'TITLE'         \{ .nr #DOC_COVER_TITLE     1 \}
6364 .       if '\\$1'DOCTITLE'      \{ .nr #DOC_COVER_TITLE     2 \}
6365 .       if '\\$1'CHAPTER'       \{ .nr #DOC_COVER_TITLE     3 \}
6366 .       if '\\$1'CHAPTER_TITLE' \{ .nr #DOC_COVER_TITLE     4 \}
6367 .       if '\\$1'CHAPTER+TITLE' \{ .nr #DOC_COVER_TITLE     5 \}
6368 .       if '\\$1'COVERTITLE'    \{ .nr #DOC_COVER_TITLE     6 \}
6369 .       if '\\$2'SUBTITLE'      \{ .nr #DOC_COVER_SUBTITLE  1 \}
6370 .       if '\\$2'AUTHOR'        \{ .nr #DOC_COVER_AUTHOR    1 \}
6371 .       if '\\$2'DOCTYPE'       \{ .nr #DOC_COVER_DOCTYPE   1 \}
6372 .       if '\\$2'COPYRIGHT'     \{ .nr #DOC_COVER_COPYRIGHT 1 \}
6373 .       if '\\$2'MISC'          \{ .nr #DOC_COVER_MISC      1 \}
6374 .       if '\\$3'AUTHOR'        \{ .nr #DOC_COVER_AUTHOR    1 \}
6375 .       if '\\$3'DOCTYPE'       \{ .nr #DOC_COVER_DOCTYPE   1 \}
6376 .       if '\\$3'COPYRIGHT'     \{ .nr #DOC_COVER_COPYRIGHT 1 \}
6377 .       if '\\$3'MISC'          \{ .nr #DOC_COVER_MISC      1 \}
6378 .       if '\\$4'DOCTYPE'       \{ .nr #DOC_COVER_DOCTYPE   1 \}
6379 .       if '\\$4'COPYRIGHT'     \{ .nr #DOC_COVER_COPYRIGHT 1 \}
6380 .       if '\\$4'MISC'          \{ .nr #DOC_COVER_MISC      1 \}
6381 .       if '\\$5'COPYRIGHT'     \{ .nr #DOC_COVER_COPYRIGHT 1 \}
6382 .       if '\\$5'MISC'          \{ .nr #DOC_COVER_MISC      1 \}
6383 .       if '\\$6'MISC'          \{ .nr #DOC_COVER_MISC      1 \}
6384 .    \}
6385 .    el \{\
6386 .       if '\\$\\n[#NUM_ARGS]'BLANKPAGE' \{ .nr #COVER_BLANKPAGE 1 \}
6387 .       nr #COVER 1
6388 .       if '\\$1'TITLE'         \{ .nr #COVER_TITLE     1 \}
6389 .       if '\\$1'DOCTITLE'      \{ .nr #COVER_TITLE     2 \}
6390 .       if '\\$1'CHAPTER'       \{ .nr #COVER_TITLE     3 \}
6391 .       if '\\$1'CHAPTER_TITLE' \{ .nr #COVER_TITLE     4 \}
6392 .       if '\\$1'CHAPTER+TITLE' \{ .nr #COVER_TITLE     5 \}
6393 .       if '\\$1'COVERTITLE'    \{ .nr #COVER_TITLE     6 \}
6394 .       if '\\$2'SUBTITLE'      \{ .nr #COVER_SUBTITLE  1 \}
6395 .       if '\\$2'AUTHOR'        \{ .nr #COVER_AUTHOR    1 \}
6396 .       if '\\$2'DOCTYPE'       \{ .nr #COVER_DOCTYPE   1 \}
6397 .       if '\\$2'COPYRIGHT'     \{ .nr #COVER_COPYRIGHT 1 \}
6398 .       if '\\$2'MISC'          \{ .nr #COVER_MISC      1 \}
6399 .       if '\\$3'AUTHOR'        \{ .nr #COVER_AUTHOR    1 \}
6400 .       if '\\$3'DOCTYPE'       \{ .nr #COVER_DOCTYPE   1 \}
6401 .       if '\\$3'COPYRIGHT'     \{ .nr #COVER_COPYRIGHT 1 \}
6402 .       if '\\$3'MISC'          \{ .nr #COVER_MISC      1 \}
6403 .       if '\\$4'DOCTYPE'       \{ .nr #COVER_DOCTYPE   1 \}
6404 .       if '\\$4'COPYRIGHT'     \{ .nr #COVER_COPYRIGHT 1 \}
6405 .       if '\\$4'MISC'          \{ .nr #COVER_MISC      1 \}
6406 .       if '\\$5'COPYRIGHT'     \{ .nr #COVER_COPYRIGHT 1 \}
6407 .       if '\\$5'MISC'          \{ .nr #COVER_MISC      1 \}
6408 .       if '\\$6'MISC'          \{ .nr #COVER_MISC      1 \}
6409 .    \}
6410 .END
6413 .MAC COVERTITLE END
6414 .    ie '\\$0'DOC_COVERTITLE' \{\ 
6415 .       ie \\n[#NUM_ARGS]=0 \{\
6416 .          if \\n[#DOC_COVER_TITLE_NUM] \{\
6417 .             nr #ITEM 0 1
6418 .             while \\n[#DOC_COVER_TITLE_NUM]>\\n[#ITEM] \{\
6419 .                rm $DOC_COVER_TITLE_\\n+[#ITEM]
6421 .             rr #DOC_COVER_TITLE_NUM
6422 .             rm $DOC_COVER_TITLE
6423 .          \}
6424 .       \}
6425 .       el \{\
6426 .          nr #DOC_COVER_TITLE_NUM 0 1
6427 .          while \\n[#NUM_ARGS]>\\n[#DOC_COVER_TITLE_NUM] \{\
6428 .             ds $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
6430 .          ds $DOC_COVER_TITLE \\$*
6431 .       \}
6432 .    \}
6433 .    el \{\
6434 .       ie \\n[#NUM_ARGS]=0 \{\
6435 .          if \\n[#COVER_TITLE_NUM] \{\
6436 .             nr #ITEM 0 1
6437 .             while \\n[#COVER_TITLE_NUM]>\\n[#ITEM] \{\
6438 .                rm $COVER_TITLE_\\n+[#ITEM]
6440 .             rr #COVER_TITLE_NUM
6441 .             rm $COVER_TITLE
6442 .          \}
6443 .       \}
6444 .       el \{\
6445 .          nr #COVER_TITLE_NUM 0 1
6446 .          while \\n[#NUM_ARGS]>\\n[#COVER_TITLE_NUM] \{\
6447 .             ds $COVER_TITLE_\\n+[#COVER_TITLE_NUM] \\$\\n[#COVER_TITLE_NUM]
6449 .          ds $COVER_TITLE \\$*
6450 .       \}
6451 .    \}
6452 .END
6455 \# COVER PAGE LEADING
6456 \# ------------------
6457 \# *Arguments:
6458 \#   <+|- amount by which to in/decrease leading of cover/doc cover>
6459 \# *Function:
6460 \#   Stores user supplied lead in/decrease in string $COVER_LEAD_ADJ
6461 \#   or $DOC_COVER_LEAD_ADJ, depending on whether the macro was called
6462 \#   with an alias (DOC_COVER_LEAD).
6463 \# *Notes:
6464 \#   A unit of measure must be supplied.  Decimal fractions OK.
6465 \#   Default is +0, i.e. same as DOC_LEAD.
6467 .MAC COVER_LEAD END
6468 .    ie '\\$0'DOC_COVER_LEAD' \{\
6469 .       ds $DOC_COVER_LEAD_ADJ \\$1
6470 .    \}
6471 .    el \{\
6472 .       ds $COVER_LEAD_ADJ \\$1
6473 .    \}
6474 .END
6477 \# COVER PAGE START POSITION
6478 \# -------------------------
6479 \# *Arguments:
6480 \#   <distance from page top at which to start cover/doc cover>
6481 \# *Function:
6482 \#   Stores user supplied lead in/decrease in #COVER_START_POS
6483 \#   or #DOC_COVER_START_POS, depending on whether the macro was
6484 \#   called by an alias (DOC_COVER_ADVANCE).
6485 \# *Notes:
6486 \#   A unit of measure must be supplied.  Decimal fractions OK.
6487 \#   If user doesn't invoke this macro, the default starting
6488 \#   position for both covers and doc covers is 1/3 of the way
6489 \#   down the page (setup in DO_COVER).
6491 .MAC COVER_ADVANCE END
6492 .    ie '\\$0'DOC_COVER_ADVANCE' \{\
6493 .       nr #DOC_COVER_START_POS (\\$1)
6494 .    \}
6495 .    el \{\
6496 .       nr #COVER_START_POS (\\$1)
6497 .    \}
6498 .END
6501 \# UNDERLINE CONTROL
6502 \# -----------------
6503 \# *Arguments:
6504 \#   [ DOUBLE ] [ <underline weight> [<underline gap>] ] | <none> | <anything>
6505 \# *Function:
6506 \#   Toggles underlining of the element indicated by the calling alias
6507 \#   on or off.  Uses #<element>_UNDERLINE_WEIGHT to set the weight,
6508 \#   and defines string $<element>_UNDERLINE_GAP.
6509 \# *Notes:
6510 \#   Calling aliases COVER_ and DOCCOVER_ only apply if DOCTYPE is
6511 \#   NAMED and the DOCTYPE arg is passed to COVER or DOC_COVER.
6513 .MAC _UNDERLINE END
6514 .    ie '\\$1'' \{\
6515 .       if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE'  \{ .nr #BIB_STRING_UNDERLINE 1 \}
6516 .       if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{ .nr #BIB_STRING_UNDERLINE 1 \}
6517 .       if '\\$0'COVER_UNDERLINE'                \{ .nr #COVER_UNDERLINE      1 \}
6518 .       if '\\$0'DOC_COVER_UNDERLINE'            \{ .nr #DOCCOVER_UNDERLINE   1 \}
6519 .       if '\\$0'DOCTYPE_UNDERLINE'              \{ .nr #DOCTYPE_UNDERLINE    1 \}
6520 .       if '\\$0'HEAD_UNDERLINE'                 \{ .nr #HEAD_UNDERLINE       1 \}
6521 .       if '\\$0'ENDNOTE_STRING_UNDERLINE'       \{ .nr #EN_STRING_UNDERLINE  1 \}
6522 .       if '\\$0'ENDNOTE_STRING_UNDERSCORE'      \{ .nr #EN_STRING_UNDERLINE  1 \}
6523 .       if '\\$0'ENDNOTE_TITLE_UNDERLINE'        \{ .nr #EN_TITLE_UNDERLINE   1 \}
6524 .       if '\\$0'ENDNOTE_TITLE_UNDERSCORE'       \{ .nr #EN_TITLE_UNDERLINE   1 \}
6525 .    \}
6526 .    el \{\
6527 .       ie \\n[#NUM_ARGS]=1 \{\
6528 .          ds $ARG \\$1
6529 .          substring $ARG -1
6530 .          ie \B'\\*[$ARG]' \{\
6531 .             if !\\n[#PRINT_STYLE]=1 \{\
6532 .                if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE'  \{ .BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1 \}
6533 .                if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{ .BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1 \}
6534 .                if '\\$0'COVER_UNDERLINE'                \{ .COVER_UNDERLINE_WEIGHT               \\$1 \}
6535 .                if '\\$0'DOC_COVER_UNDERLINE'            \{ .DOCCOVER_UNDERLINE_WEIGHT            \\$1 \}
6536 .                if '\\$0'DOCTYPE_UNDERLINE'              \{ .DOCTYPE_UNDERLINE_WEIGHT             \\$1 \}
6537 .                if '\\$0'HEAD_UNDERLINE'                 \{ .HEAD_UNDERLINE_WEIGHT                \\$1 \}
6538 .                if '\\$0'ENDNOTE_STRING_UNDERLINE'       \{ .ENDNOTE_STRING_UNDERLINE_WEIGHT      \\$1 \}
6539 .                if '\\$0'ENDNOTE_STRING_UNDERSCORE'      \{ .ENDNOTE_STRING_UNDERLINE_WEIGHT      \\$1 \}
6540 .                if '\\$0'ENDNOTE_TITLE_UNDERLINE'        \{ .ENDNOTE_TITLE_UNDERLINE_WEIGHT       \\$1 \}
6541 .                if '\\$0'ENDNOTE_TITLE_UNDERSCORE'       \{ .ENDNOTE_TITLE_UNDERLINE_WEIGHT       \\$1 \}
6542 .             \}
6543 .          \}
6544 .          el \{\
6545 .             if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{\
6546 .                ie '\\$1'DOUBLE' \{ .nr #BIB_STRING_UNDERLINE 2 \}
6547 .                el \{ .nr #BIB_STRING_UNDERLINE 0 \}
6548 .             \}
6549 .             if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{\
6550 .                ie '\\$1'DOUBLE' \{ .nr #BIB_STRING_UNDERLINE 2 \}
6551 .                el \{ .nr #BIB_STRING_UNDERLINE 0 \}
6552 .             \}
6553 .             if '\\$0'COVER_UNDERLINE'          \{ .nr #COVER_UNDERLINE     0 \}
6554 .             if '\\$0'DOC_COVER_UNDERLINE'      \{ .nr #DOCCOVER_UNDERLINE  0 \}
6555 .             if '\\$0'DOCTYPE_UNDERLINE'        \{ .nr #DOCTYPE_UNDERLINE   0 \}
6556 .             if '\\$0'HEAD_UNDERLINE'           \{ .nr #HEAD_UNDERLINE      0 \}
6557 .             if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\
6558 .                ie '\\$1'DOUBLE' \{ .nr #EN_STRING_UNDERLINE 2 \}
6559 .                el \{ .nr #EN_STRING_UNDERLINE 0 \}
6560 .             \}
6561 .             if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\
6562 .                ie '\\$1'DOUBLE' \{ .nr #EN_STRING_UNDERLINE 2 \}
6563 .                el \{ .nr #EN_STRING_UNDERLINE 0 \}
6564 .             \}
6565 .          \}
6566 .       \}
6567 .       el \{\
6568 .          if !\\n[#PRINT_STYLE]=1 \{\
6569 .             if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{\
6570 .                nr #BIB_STRING_UNDERLINE 1
6571 .                if '\\$1'DOUBLE' \{\
6572 .                   nr #BIB_STRING_UNDERLINE 2
6573 .                   shift
6574 .                \}
6575 .                BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
6576 .                if !'\\$2'' \{\
6577 .                   ds $BIB_STRING_UNDERLINE_GAP \\$2
6578 .                \}
6579 .                if !'\\$3'' \{\
6580 .                   ds $BIB_STRING_RULE_GAP \\$3
6581 .                \}
6582 .             \}
6583 .             if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{\ 
6584 .                nr #BIB_STRING_UNDERLINE 1
6585 .                if '\\$1'DOUBLE' \{\
6586 .                   nr #BIB_STRING_UNDERLINE 2
6587 .                   shift
6588 .                \}
6589 .                BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
6590 .                if !'\\$2'' \{\
6591 .                   ds $BIB_STRING_UNDERLINE_GAP \\$2
6592 .                \}
6593 .                if !'\\$3'' \{\
6594 .                   ds $BIB_STRING_RULE_GAP \\$3
6595 .                \}
6596 .             \}
6597 .             if '\\$0'COVER_UNDERLINE' \{\
6598 .                nr #COVER_UNDERLINE 1
6599 .                COVER_UNDERLINE_WEIGHT  \\$1
6600 .                ds $COVER_UNDERLINE_GAP \\$2
6601 .             \}
6602 .             if '\\$0'DOC_COVER_UNDERLINE' \{\
6603 .                nr #DOCCOVER_UNDERLINE 1
6604 .                DOCCOVER_UNDERLINE_WEIGHT  \\$1
6605 .                ds $DOCCOVER_UNDERLINE_GAP \\$2
6606 .             \}
6607 .             if '\\$0'DOCTYPE_UNDERLINE' \{\
6608 .                nr #DOCTYPE_UNDERLINE 1
6609 .                DOCTYPE_UNDERLINE_WEIGHT  \\$1
6610 .                ds $DOCTYPE_UNDERLINE_GAP \\$2
6611 .             \}
6612 .             if '\\$0'HEAD_UNDERLINE' \{\
6613 .                nr #HEAD_UNDERLINE 1
6614 .                HEAD_UNDERLINE_WEIGHT  \\$1
6615 .                ds $HEAD_UNDERLINE_GAP \\$2
6616 .             \}
6617 \# ENDNOTE_STRING_UNDERLINE and ENDNOTE_STRING_UNDERSCORE are identical;
6618 \# the _UNDERSCORE version is left in for backward compatibility.
6619 .             if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\
6620 .                nr #EN_STRING_UNDERLINE 1
6621 .                if '\\$1'DOUBLE' \{\
6622 .                   nr #EN_STRING_UNDERLINE 2
6623 .                   shift
6624 .                \}
6625 .                ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
6626 .                if !'\\$2'' \{\
6627 .                   ds $EN_STRING_UNDERLINE_GAP \\$2
6628 .                \}
6629 .                if !'\\$3'' \{\
6630 .                   ds $EN_STRING_RULE_GAP \\$3
6631 .                \}
6632 .             \}
6633 .             if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\ 
6634 .                nr #EN_STRING_UNDERLINE 1
6635 .                if '\\$1'DOUBLE' \{\
6636 .                   nr #EN_STRING_UNDERLINE 2
6637 .                   shift
6638 .                \}
6639 .                ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
6640 .                if !'\\$2'' \{\
6641 .                   ds $EN_STRING_UNDERLINE_GAP \\$2
6642 .                \}
6643 .                if !'\\$3'' \{\
6644 .                   ds $EN_STRING_RULE_GAP \\$3
6645 .                \}
6646 .             \}
6647 \# ENDNOTE_TITLE_UNDERLINE and ENDNOTE_TITLE_UNDERSCORE are identical;
6648 \# the _UNDERSCORE version is left in for backward compatibility.
6649 .             if '\\$0'ENDNOTE_TITLE_UNDERLINE' \{\
6650 .                nr #ENDNOTE_TITLE_UNDERLINE 1
6651 .                ENDNOTE_TITLE_UNDERLINE_WEIGHT  \\$1
6652 .                ds $EN_TITLE_UNDERLINE_GAP \\$2
6653 .             \}
6654 .             if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \{\
6655 .                nr #ENDNOTE_TITLE_UNDERLINE 1
6656 .                ENDNOTE_TITLE_UNDERLINE_WEIGHT  \\$1
6657 .                ds $EN_TITLE_UNDERLINE_GAP \\$2
6658 .             \}
6659 .          \}
6660 .       \}
6661 .    \}
6662 .END
6664 .ALIAS BIBLIOGRAPHY_STRING_UNDERSCORE _UNDERLINE
6665 .ALIAS BIBLIOGRAPHY_STRING_UNDERLINE  _UNDERLINE
6666 .ALIAS COVER_UNDERLINE                _UNDERLINE
6667 .ALIAS DOC_COVER_UNDERLINE            _UNDERLINE
6668 .ALIAS DOCTYPE_UNDERLINE              _UNDERLINE
6669 .ALIAS HEAD_UNDERLINE                 _UNDERLINE
6670 .ALIAS ENDNOTE_STRING_UNDERLINE       _UNDERLINE
6671 .ALIAS ENDNOTE_STRING_UNDERSCORE      _UNDERLINE
6672 .ALIAS ENDNOTE_TITLE_UNDERLINE        _UNDERLINE
6673 .ALIAS ENDNOTE_TITLE_UNDERSCORE       _UNDERLINE
6676 \# COVERS - WHETHER TO PRINT
6677 \# -------------------------
6678 \# *Arguments:
6679 \#   <none> | <anything>
6680 \# *Function:
6681 \#   Creates or removes registers #COVERS and #COVERS_OFF, checked for
6682 \#   in DEFAULTS (in START) prior to printing
6684 .MAC COVERS END
6685 .    ie '\\$0'DOC_COVERS' \{\
6686 .       ie '\\$1'' \{\
6687 .          rr #DOC_COVERS_OFF
6688 .          nr #DOC_COVERS 1
6689 .       \}
6690 .       el \{\
6691 .          rr #DOC_COVERS
6692 .          nr #DOC_COVERS_OFF 1
6693 .       \}
6694 .    \}
6695 .    el \{\
6696 .       ie '\\$1'' \{\
6697 .          rr #COVERS_OFF
6698 .          nr #COVERS 1
6699 .       \}
6700 .       el \{\
6701 .          rr #COVERS
6702 .          nr #COVERS_OFF 1
6703 .       \}
6704 .    \}
6705 .END
6708 \# COVER_COUNTS_PAGES
6709 \# ------------------
6710 \# *Arguments:
6711 \#   <none> | <anything>
6712 \# *Function:
6713 \#   Creates or removes registers #COVERS_COUNT or #DOCCOVERS_COUNT,
6714 \#   used in END_COVER to determine whether to increment the page
6715 \#   number silently when doc covers or covers are output.
6717 .MAC COVER_COUNTS_PAGES END
6718 .    if '\\$0'DOC_COVER_COUNTS_PAGES' \{\
6719 .       ie '\\$1'' \{ .nr #DOCCOVERS_COUNT 1 \}
6720 .       el \{ .rr #DOCCOVERS_COUNT \}
6721 .       return
6722 .    \}
6723 .    if '\\$0'COVER_COUNTS_PAGES' \{\
6724 .       ie '\\$1'' \{ .nr #COVERS_COUNT 1 \}
6725 .       el \{ .rr #COVERS_COUNT \}
6726 .       return
6727 .    \}
6728 .END
6731 .MAC DO_COVER END
6732 .    nr #DOING_COVER 1
6733 .    ev COVER
6734 .    evc 0
6735 .    TRAP OFF
6736 .    if \\n[#PAGINATE]=1 \{\
6737 .       nr #PAGINATION_WAS_ON 1
6738 .       rr #PAGINATE
6739 .    \}
6740 .    if \\n[#HEADERS_ON]=1 \{\
6741 .       nr #HEADERS_WERE_ON 1
6742 .       HEADERS OFF
6743 .    \}
6744 .    if \\n[#FOOTERS_ON]=1 \{\
6745 .       nr #FOOTERS_WERE_ON 1
6746 .       FOOTERS OFF
6747 .    \}
6748 .    if \\n[#COLUMNS]=1 \{\
6749 .       nr #COLUMNS_WERE_ON 1
6750 .       rr #COLUMNS
6751 .    \}
6752 .\" Doc cover
6753 .    ie '\\$0'DO_DOC_COVER' \{\
6754 .       if !r#DOC_COVER_START_POS \{\
6755 .          nr #DOC_COVER_START_POS \\n[#PAGE_LENGTH]/3
6756 .       \}
6757 .       if \\n[#PRINT_STYLE]=1 \{\
6758 .          ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u*2u \}
6759 .          el \{ .vs \\n[#DOC_LEAD]u \}
6760 .       \}
6761 .       if \\n[#PRINT_STYLE]=2 \{\
6762 .          LS \\n[#DOC_LEAD]u\\*[$DOC_COVER_LEAD_ADJ]
6763 .          nr #DOC_COVER_LEAD \\n[#LEAD]
6764 .       \}
6765 .       PRINT \&
6766 .       sp |\\n[#DOC_COVER_START_POS]u-1v
6767 .       if \\n[#DOC_COVER_COLOR]=1 \{\
6768 .          nf
6769 \m[\\*[$DOC_COVER_COLOR]]
6770 .          EOL
6771 .       \}
6772 .       CENTER
6773 .       FAMILY  \\*[$DOC_COVER_TITLE_FAM]
6774 .       FT      \\*[$DOC_COVER_TITLE_FT]
6775 .       PT_SIZE \\*[$DOC_COVER_TITLE_PT_SIZE]
6776 .       LS      \\n[#DOC_COVER_LEAD]u
6777 .       if \\n[#PRINT_STYLE]=1 \{ .TYPEWRITER \}
6778 .       if \\n[#DOC_COVER_TITLE]=1 \{\
6779 .          ie \\n[#PRINT_STYLE]=1 \{\
6780 .             CAPS
6781 .             nr #ARG_NUM 0 1
6782 .             while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6783 .                UNDERSCORE "\\*[$TITLE_\\n[#ARG_NUM]]"
6785 .             CAPS OFF
6786 .          \}
6787 .          el \{\
6788 .          nr #ARG_NUM 0 1
6789 .          while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6790 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6791 .                PRINT "\m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
6792 .             \}
6793 .             el \{\
6794 .                PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
6795 .             \}
6797 .          \}
6798 .       \}
6799 .       if \\n[#DOC_COVER_TITLE]=2 \{\
6800 .          ie \\n[#PRINT_STYLE]=1 \{\
6801 .             CAPS
6802 .             nr #ARG_NUM 0 1
6803 .             while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
6804 .                UNDERSCORE "\\*[$DOC_TITLE_\\n[#ARG_NUM]]"
6806 .             CAPS OFF
6807 .          \}
6808 .          el \{\
6809 .          nr #ARG_NUM 0 1
6810 .          while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
6811 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6812 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_TITLE_\\n[#ARG_NUM]]\m[]
6813 .             \}
6814 .             el \{ .PRINT \\*[$DOC_TITLE_\\n[#ARG_NUM]] \}
6816 .          \}
6817 .       \}
6818 .       if \\n[#DOC_COVER_TITLE]=3 \{\
6819 .          ie \\n[#PRINT_STYLE]=1 \{\
6820 .             CAPS
6821 .             PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
6822 .             CAPS OFF
6823 .          \}
6824 .          el \{\
6825 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6826 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
6827 .             \}
6828 .             el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
6829 .          \}
6830 .       \}
6831 .       if \\n[#DOC_COVER_TITLE]=4 \{\
6832 .          ie \\n[#PRINT_STYLE]=1 \{\
6833 .             CAPS
6834 .             nr #ARG_NUM 0 1
6835 .                ie \\n[#SINGLE_SPACE]=0 \{\
6836 .                   vs \\n[#DOC_LEAD]u/2u
6837 .                \}
6838 .                el \{\
6839 .                   vs \\n[#DOC_LEAD]u
6840 .                \}
6841 .                sp
6842 .             while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6843 .                UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
6845 .             CAPS OFF
6846 .             if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \}
6847 .          \}
6848 .          el \{\
6849 .          nr #ARG_NUM 0 1
6850 .          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6851 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6852 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
6853 .             \}
6854 .             el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
6856 .          \}
6857 .       \}
6858 .       if \\n[#DOC_COVER_TITLE]=5 \{\
6859 .          ie \\n[#PRINT_STYLE]=1 \{\
6860 .             CAPS
6861 .             PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
6862 .             CAPS OFF
6863 .          \}
6864 .          el \{\
6865 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6866 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
6867 .             \}
6868 .             el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
6869 .          \}
6870 .          if !'\\*[$CHAPTER_TITLE_1]'' \{\
6871 .             ie \\n[#PRINT_STYLE]=1 \{\
6872 .                ie \\n[#SINGLE_SPACE]=0 \{\
6873 .                   vs \\n[#DOC_LEAD]u/2u
6874 .                \}
6875 .                el \{\
6876 .                   vs \\n[#DOC_LEAD]u
6877 .                \}
6878 .                sp
6879 .                nr #ARG_NUM 0 1
6880 .                while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6881 .                   UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
6883 .                if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \}
6884 .             \}
6885 .             el \{\
6886 .                FAMILY  \\*[$DOC_COVER_CHAPTER_TITLE_FAM]
6887 .                FT      \\*[$DOC_COVER_CHAPTER_TITLE_FT]
6888 .                PT_SIZE \\*[$DOC_COVER_CHAPTER_TITLE_PT_SIZE]
6889 .                nr #ARG_NUM 0 1
6890 .                ALD \\n[.v]u/4u \"Put a little space before the chapter title
6891 .                while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6892 .                   ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6893 .                      PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
6894 .                   \}
6895 .                   el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
6897 .             \}
6898 .          \}
6899 .       \}
6900 .       if \\n[#DOC_COVER_TITLE]=6 \{\
6901 .          ie \\n[#PRINT_STYLE]=1 \{\
6902 .             CAPS
6903 .             nr #ARG_NUM 0 1
6904 .             while \\n[#DOC_COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6905 .                UNDERSCORE "\\*[$DOC_COVER_TITLE_\\n[#ARG_NUM]]"
6907 .             CAPS OFF
6908 .          \}
6909 .          el \{\
6910 .             nr #ARG_NUM 0 1
6911 .             while \\n[#DOC_COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6912 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6913 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_COVER_TITLE_\\n[#ARG_NUM]]\m[]
6914 .             \}
6915 .             el \{ .PRINT \\*[$DOC_COVER_TITLE_\\n[#ARG_NUM]] \}
6917 .          \}
6918 .       \}
6919 .       if !\\n[#DOC_TYPE]=2 \{\
6920 .          if \\n[#DOC_COVER_SUBTITLE]=1 \{\
6921 .             FAMILY  \\*[$DOC_COVER_SUBTITLE_FAM]
6922 .             FT      \\*[$DOC_COVER_SUBTITLE_FT]
6923 .             PT_SIZE \\*[$DOC_COVER_SUBTITLE_PT_SIZE]
6924 .             if \\n[#PRINT_STYLE]=1 \{\
6925 .                TYPEWRITER
6926 .                ie \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \}
6927 .                el \{ .vs \\n[#DOC_LEAD]u \}
6928 .                sp
6929 .             \}
6930 .       if \\n[#DOC_COVER]=1 \{\
6931 .          ie !'\\*[$SUBTITLE_DOCCOVER_1]'' \{\
6932 .             nr #SUBTITLES \\n[#SUBTITLE_DOCCOVER_NUM]
6933 .             nr #NEXT_SUBTITLE 0 1
6934 .             while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
6935 .                ie \\n[#DOC_COVER_SUBTITLE_COLOR]=1 \{\
6936 .                   PRINT \m[\\*[$DOC_COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_DOCCOVER_\\n+[#NEXT_SUBTITLE]]\m[]
6937 .                \}
6938 .                el \{ .PRINT \\*[$SUBTITLE_DOCCOVER_\\n+[#NEXT_SUBTITLE]] \}
6940 .          \}
6941 .          el \{\
6942 .             nr #SUBTITLES \\n[#SUBTITLE_NUM]
6943 .             nr #NEXT_SUBTITLE 0 1
6944 .             while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
6945 .                ie \\n[#DOC_COVER_SUBTITLE_COLOR]=1 \{\
6946 .                   PRINT \m[\\*[$DOC_COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]]\m[]
6947 .                \}
6948 .                el \{ .PRINT \\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]] \}
6950 .          \}
6951 .       \}
6952 .             if \\n[#PRINT_STYLE]=1 \{\
6953 .                if \\n[#SINGLE_SPACE]=0 \{ .vs \}
6954 .             \}
6955 .          \}
6956 .          if \\n[#PRINT_STYLE]=1 \{\
6957 .             if !r#DOC_COVER_SUBTITLE \{ .sp \}
6958 .          \}
6959 .       \}
6960 .       if \\n[#DOC_COVER_AUTHOR]=1 \{\
6961 .          FAMILY  \\*[$DOC_COVER_AUTHOR_FAM]
6962 .          FT      \\*[$DOC_COVER_AUTHOR_FT]
6963 .          PT_SIZE \\*[$DOC_COVER_AUTHOR_PT_SIZE]
6964 .          if \\n[#PRINT_STYLE]=1 \{\
6965 .             TYPEWRITER
6966 .             ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \}
6967 .             el \{ .vs \\n[#DOC_LEAD]u/2u \}
6968 .             sp
6969 .          \}
6970 .          ie d$ATTRIBUTE_STRING_DOCCOVER \{\
6971 .             ie \\n[#DOC_COVER_ATTRIBUTE_COLOR]=1 \{\
6972 .                PRINT \&\m[\\*[$DOC_COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING_DOCCOVER]\m[]
6973 .             \}
6974 .             el \{ .PRINT \&\\*[$ATTRIBUTE_STRING_DOCCOVER] \}
6975 .          \}
6976 .          el \{\
6977 .             if d$ATTRIBUTE_STRING \{\
6978 .                ie \\n[#DOC_COVER_ATTRIBUTE_COLOR]=1 \{\
6979 .                   PRINT \&\m[\\*[$DOC_COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
6980 .                \}
6981 .                el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \}
6982 .             \}
6983 .          \}
6984 .          PRINT_AUTHORS
6985 .       \}
6986 .       FAMILY  \\*[$DOC_COVER_DOCTYPE_FAM]
6987 .       FT      \\*[$DOC_COVER_DOCTYPE_FT]
6988 .       PT_SIZE \\*[$DOC_COVER_DOCTYPE_PT_SIZE]
6989 .       SP
6990 .       if \\n[#DOC_TYPE]=3 \{\
6991 .          if \\n[#DOC_COVER_DOCTYPE]=1 \{\
6992 .             ie \\n[#PRINT_STYLE]=1 \{\
6993 .                TYPEWRITER
6994 .                vs \\n[#DOC_LEAD]u
6995 .                UNDERSCORE2 "\\*[$DOC_TYPE]"
6996 .             \}
6997 .             el \{\
6998 .                nr #FROM_DOC_COVER 1
6999 .                ie \\n[#DOC_COVER_DOCTYPE_COLOR]=1 \{\
7000 .                   COLOR \\*[$DOC_COVER_DOCTYPE_COLOR]
7001 .                   ie \\n[#DOCCOVER_UNDERLINE]= 1 \{ .UNDERSCORE \\*[$DOCCOVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \}
7002 .                   el \{ .PRINT "\\*[$DOC_TYPE]" \}
7003 .                \}
7004 .                el \{\
7005 .                   ie \\n[#DOCCOVER_UNDERLINE]=1 \{ .UNDERSCORE \\*[$DOCCOVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \}
7006 .                   el \{ .PRINT "\\*[$DOC_TYPE]" \}
7007 .                \}
7008 .                rr #FROM_DOC_COVER
7009 .             \}
7010 .          \}
7011 .       \}
7012 .       sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
7013 .       ie \\n[#PRINT_STYLE]=1 \{\
7014 .          TYPEWRITER
7015 .          ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \}
7016 .          el \{ .vs \\n[#DOC_LEAD]u/2u \}
7017 .       \}
7018 .       el \{\
7019 .          FAMILY  \\*[$DOC_COVER_COPYRIGHT_FAM]
7020 .          FT      \\*[$DOC_COVER_COPYRIGHT_FT]
7021 .          AUTOLEAD 2
7022 .          PT_SIZE \\*[$DOC_COVER_COPYRIGHT_PT_SIZE]
7023 .       \}
7024 .       if \\n[#DOC_COVER_COPYRIGHT]=1 \{\
7025 .          if !'\\*[$COPYRIGHT_DOCCOVER]'' \{\
7026 .             ds $SAVED_COPYRIGHT \\*[$COPYRIGHT]
7027 .             ds $COPYRIGHT \\*[$COPYRIGHT_DOCCOVER]
7028 .          \}
7029 .          QUAD \\*[$DOC_COVER_COPYRIGHT_QUAD]
7030 .          ie \\n[#DOC_COVER_COPYRIGHT_COLOR]=1 \{\
7031 .             PRINT \m[\\*[$DOC_COVER_COPYRIGHT_COLOR]]\\*[$COPYRIGHT]\m[]
7032 .          \}
7033 .          el \{ .PRINT \\*[$COPYRIGHT] \}
7034 .          ds $COPYRIGHT \\*[$SAVED_COPYRIGHT]
7035 .       \}
7036 .       sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
7037 .       if \\n[#DOC_COVER_MISC]=1 \{\
7038 .          QUAD \\*[$DOC_COVER_MISC_QUAD]
7039 .          ie !'\\*[$MISC_DOCCOVER_1]'' \{\
7040 .             nr #MISCS \\n[#MISC_DOCCOVER_NUM]
7041 .             sp -\\n[#MISCS]+1
7042 .             nr #NEXT_MISC 0 1
7043 .             while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
7044 .                ie \\n[#DOC_COVER_MISC_COLOR]=1 \{\
7045 .                   PRINT \m[\\*[$DOC_COVER_MISC_COLOR]]\\*[$MISC_DOCCOVER_\\n+[#NEXT_MISC]]\m[]
7046 .                   rm $MISC_DOCCOVER_\\n[#NEXT_MISC]
7047 .                   rm $MISC_\\n[#NEXT_MISC]
7048 .                   br
7049 .                \}
7050 .                el \{\
7051 .                   PRINT \\*[$MISC_DOCCOVER_\\n+[#NEXT_MISC]]
7052 .                   rm $MISC_DOCCOVER_\\n[#NEXT_MISC]
7053 .                   rm $MISC_\\n[#NEXT_MISC]
7054 .                   br
7055 .                \}
7057 .                rm $MISC_\\n+[#NEXT_MISC]
7058 .          \}
7059 .          el \{\
7060 .             nr #MISCS \\n[#MISC_NUM]
7061 .             sp -\\n[#MISCS]+1
7062 .             nr #NEXT_MISC 0 1
7063 .             while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
7064 .                ie \\n[#DOC_COVER_MISC_COLOR]=1 \{\
7065 .                   PRINT \m[\\*[$DOC_COVER_MISC_COLOR]]\\*[$MISC_\\n+[#NEXT_MISC]]\m[]
7066 .                   br
7067 .                \}
7068 .                el \{\
7069 .                   PRINT \\*[$MISC_\\n+[#NEXT_MISC]]
7070 .                   br
7071 .                \}
7073 .          \}
7074 .       \}
7075 .       if \\n[#DOCCOVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ +1 \}
7076 .       nr #DOCCOVER_END 1
7077 .       END_COVER
7078 .    \}
7079 .\" Cover
7080 .    el \{\
7081 .       if !r#COVER_START_POS \{\
7082 .          nr #COVER_START_POS \\n[#PAGE_LENGTH]/3
7083 .       \}
7084 .       if \\n[#PRINT_STYLE]=1 \{\
7085 .          ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u*2u \}
7086 .          el \{ .vs \\n[#DOC_LEAD]u \}
7087 .       \}
7088 .       if \\n[#PRINT_STYLE]=2 \{\
7089 .          LS \\n[#DOC_LEAD]u\\*[$COVER_LEAD_ADJ]
7090 .          nr #COVER_LEAD \\n[#LEAD]
7091 .       \}
7092 .       PRINT \&
7093 .       sp |\\n[#COVER_START_POS]u-1v
7094 .       if \\n[#COVER_COLOR]=1 \{\
7095 .          nf
7096 \m[\\*[$COVER_COLOR]]
7097 .          EOL
7098 .       \}
7099 .       CENTER
7100 .       FAMILY  \\*[$COVER_TITLE_FAM]
7101 .       FT      \\*[$COVER_TITLE_FT]
7102 .       PT_SIZE \\*[$COVER_TITLE_PT_SIZE]
7103 .       LS      \\n[#COVER_LEAD]u
7104 .       if \\n[#PRINT_STYLE]=1 \{ .TYPEWRITER \}
7105 .       if \\n[#COVER_TITLE]=1 \{\
7106 .          ie \\n[#PRINT_STYLE]=1 \{\
7107 .             CAPS
7108 .             nr #ARG_NUM 0 1
7109 .             while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7110 .                UNDERSCORE "\\*[$TITLE_\\n[#ARG_NUM]]"
7112 .             CAPS OFF
7113 .          \}
7114 .          el \{\
7115 .          nr #ARG_NUM 0 1
7116 .          while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7117 .             ie \\n[#COVER_TITLE_COLOR]=1 \{\
7118 .                PRINT "\m[\\*[$COVER_TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
7119 .             \}
7120 .             el \{\
7121 .                PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
7122 .             \}
7124 .          \}
7125 .       \}
7126 .       if \\n[#COVER_TITLE]=2 \{\
7127 .          ie \\n[#PRINT_STYLE]=1 \{\
7128 .             CAPS
7129 .             nr #ARG_NUM 0 1
7130 .             while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
7131 .                UNDERSCORE "\\*[$DOC_TITLE_\\n[#ARG_NUM]]"
7133 .             CAPS OFF
7134 .          \}
7135 .          el \{\
7136 .          nr #ARG_NUM 0 1
7137 .          while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
7138 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
7139 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_TITLE_\\n[#ARG_NUM]]\m[]
7140 .             \}
7141 .             el \{ .PRINT \\*[$DOC_TITLE_\\n[#ARG_NUM]] \}
7143 .          \}
7144 .       \}
7145 .       if \\n[#COVER_TITLE]=3 \{\
7146 .          ie \\n[#PRINT_STYLE]=1 \{\
7147 .             CAPS
7148 .             PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
7149 .             CAPS OFF
7150 .          \}
7151 .          el \{\
7152 .             ie \\n[#COVER_TITLE_COLOR]=1 \{\
7153 .                PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
7154 .             \}
7155 .             el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
7156 .          \}
7157 .       \}
7158 .       if \\n[#COVER_TITLE]=4 \{\
7159 .          ie \\n[#PRINT_STYLE]=1 \{\
7160 .                ie \\n[#SINGLE_SPACE]=0 \{\
7161 .                   vs \\n[#DOC_LEAD]u/2u
7162 .                \}
7163 .                el \{\
7164 .                   vs \\n[#DOC_LEAD]u
7165 .                \}
7166 .                sp
7167 .             CAPS
7168 .             nr #ARG_NUM 0 1
7169 .             while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7170 .                UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
7172 .             CAPS OFF
7173 .             if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \}
7174 .          \}
7175 .          el \{\
7176 .          nr #ARG_NUM 0 1
7177 .          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7178 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
7179 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
7180 .             \}
7181 .             el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
7183 .          \}
7184 .       \}
7185 .       if \\n[#COVER_TITLE]=5 \{\
7186 .          ie \\n[#PRINT_STYLE]=1 \{\
7187 .             CAPS
7188 .             PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
7189 .             CAPS OFF
7190 .          \}
7191 .          el \{\
7192 .             ie \\n[#COVER_TITLE_COLOR]=1 \{\
7193 .                PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
7194 .             \}
7195 .             el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
7196 .          \}
7197 .          if !'\\*[$CHAPTER_TITLE_1]'' \{\
7198 .             ie \\n[#PRINT_STYLE]=1 \{\
7199 .                ie \\n[#SINGLE_SPACE]=0 \{\
7200 .                   vs \\n[#DOC_LEAD]u/2u
7201 .                \}
7202 .                el \{\
7203 .                   vs \\n[#DOC_LEAD]u
7204 .                \}
7205 .                sp
7206 .                nr #ARG_NUM 0 1
7207 .                while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7208 .                   UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
7210 .                if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \}
7211 .             \}
7212 .             el \{\
7213 .                FAMILY  \\*[$COVER_CHAPTER_TITLE_FAM]
7214 .                FT      \\*[$COVER_CHAPTER_TITLE_FT]
7215 .                PT_SIZE \\*[$COVER_CHAPTER_TITLE_PT_SIZE]
7216 .                ALD \\n[.v]u/4u \"Put a little space before the chapter title
7217 .                nr #ARG_NUM 0 1
7218 .                while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7219 .                   ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
7220 .                      PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
7221 .                   \}
7222 .                   el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
7224 .             \}
7225 .          \}
7226 .       \}
7227 .       if \\n[#COVER_TITLE]=6 \{\
7228 .          ie \\n[#PRINT_STYLE]=1 \{\
7229 .             CAPS
7230 .             nr #ARG_NUM 0 1
7231 .             while \\n[#COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7232 .                UNDERSCORE "\\*[$COVER_TITLE_\\n[#ARG_NUM]]"
7234 .             CAPS OFF
7235 .          \}
7236 .          el \{\
7237 .             nr #ARG_NUM 0 1
7238 .             while \\n[#COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7239 .             ie \\n[#COVER_TITLE_COLOR]=1 \{\
7240 .                PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$COVER_TITLE_\\n[#ARG_NUM]]\m[]
7241 .             \}
7242 .             el \{ .PRINT \\*[$COVER_TITLE_\\n[#ARG_NUM]] \}
7244 .          \}
7245 .       \}
7246 .       if !\\n[#DOC_TYPE]=2 \{\
7247 .          if \\n[#COVER_SUBTITLE]=1 \{\
7248 .             FAMILY  \\*[$COVER_SUBTITLE_FAM]
7249 .             FT      \\*[$COVER_SUBTITLE_FT]
7250 .             PT_SIZE \\*[$COVER_SUBTITLE_PT_SIZE]
7251 .             if \\n[#PRINT_STYLE]=1 \{\
7252 .                TYPEWRITER
7253 .                if \\n[#PRINT_STYLE]=1 \{\
7254 .                   TYPEWRITER
7255 .                   ie \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \}
7256 .                   el \{ .vs \\n[#DOC_LEAD]u \}
7257 .                   sp
7258 .                \}
7259 .             \}
7260 .       if \\n[#COVER]=1 \{\
7261 .          ie !'\\*[$SUBTITLE_COVER_1]'' \{\
7262 .             nr #SUBTITLES \\n[#SUBTITLE_COVER_NUM]
7263 .             nr #NEXT_SUBTITLE 0 1
7264 .             while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
7265 .                ie \\n[#COVER_SUBTITLE_COLOR]=1 \{\
7266 .                   PRINT \m[\\*[$COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_COVER_\\n+[#NEXT_SUBTITLE]]\m[]
7267 .                \}
7268 .                el \{ .PRINT \\*[$SUBTITLE_COVER_\\n+[#NEXT_SUBTITLE]] \}
7270 .          \}
7271 .          el \{\
7272 .             nr #SUBTITLES \\n[#SUBTITLE_NUM]
7273 .             nr #NEXT_SUBTITLE 0 1
7274 .             while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
7275 .                ie \\n[#COVER_SUBTITLE_COLOR]=1 \{\
7276 .                   PRINT \m[\\*[$COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]]\m[]
7277 .                \}
7278 .                el \{ .PRINT \\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]] \}
7280 .          \}
7281 .       \}
7282 .             if \\n[#PRINT_STYLE]=1 \{\
7283 .                if \\n[#SINGLE_SPACE]=0 \{ .vs \}
7284 .             \}
7285 .          \}
7286 .          if \\n[#PRINT_STYLE]=1 \{\
7287 .             if !r#COVER_SUBTITLE \{ .sp \}
7288 .          \}
7289 .       \}
7290 .       if \\n[#COVER_AUTHOR]=1 \{\
7291 .          FAMILY  \\*[$COVER_AUTHOR_FAM]
7292 .          FT      \\*[$COVER_AUTHOR_FT]
7293 .          PT_SIZE \\*[$COVER_AUTHOR_PT_SIZE]
7294 .          if \\n[#PRINT_STYLE]=1 \{\
7295 .             TYPEWRITER
7296 .             ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \}
7297 .             el \{ .vs \\n[#DOC_LEAD]u/2u \}
7298 .             sp
7299 .          \}
7300 .          ie d$ATTRIBUTE_STRING_COVER \{\
7301 .             ie \\n[#COVER_ATTRIBUTE_COLOR]=1 \{\
7302 .                PRINT \&\m[\\*[$COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING_COVER]\m[]
7303 .             \}
7304 .             el \{ .PRINT \&\\*[$ATTRIBUTE_STRING_COVER] \}
7305 .          \}
7306 .          el \{\
7307 .             if d$ATTRIBUTE_STRING \{\
7308 .                ie \\n[#COVER_ATTRIBUTE_COLOR]=1 \{\
7309 .                   PRINT \&\m[\\*[$COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
7310 .                \}
7311 .                el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \}
7312 .             \}
7313 .          \}
7314 .          PRINT_AUTHORS
7315 .       \}
7316 .       FAMILY  \\*[$COVER_DOCTYPE_FAM]
7317 .       FT      \\*[$COVER_DOCTYPE_FT]
7318 .       PT_SIZE \\*[$COVER_DOCTYPE_PT_SIZE]
7319 .       SP
7320 .       if \\n[#DOC_TYPE]=3 \{\
7321 .          if \\n[#COVER_DOCTYPE]=1 \{\
7322 .             ie \\n[#PRINT_STYLE]=1 \{\
7323 .                TYPEWRITER
7324 .                vs \\n[#DOC_LEAD]u
7325 .                UNDERSCORE2 "\\*[$DOC_TYPE]"
7326 .             \}
7327 .             el \{\
7328 .                nr #FROM_COVER 1
7329 .                ie \\n[#COVER_DOCTYPE_COLOR]=1 \{\
7330 .                   COLOR \\*[$COVER_DOCTYPE_COLOR]
7331 .                   ie \\n[#COVER_UNDERLINE]= 1 \{ .UNDERSCORE \\*[$COVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \}
7332 .                   el \{ .PRINT "\\*[$DOC_TYPE] \}
7333 .                \}
7334 .                el \{\
7335 .                   ie \\n[#COVER_UNDERLINE]=1 \{ .UNDERSCORE \\*[$COVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \}
7336 .                   el \{ .PRINT "\\*[$DOC_TYPE]" \}
7337 .                \}
7338 .                rr #FROM_COVER
7339 .             \}
7340 .          \}
7341 .       \}
7342 .       sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
7343 .       ie \\n[#PRINT_STYLE]=1 \{\
7344 .          TYPEWRITER
7345 .          ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \}
7346 .          el \{ .vs \\n[#DOC_LEAD]u/2u \}
7347 .       \}
7348 .       el \{\
7349 .          FAMILY  \\*[$COVER_COPYRIGHT_FAM]
7350 .          FT      \\*[$COVER_COPYRIGHT_FT]
7351 .          AUTOLEAD 2
7352 .          PT_SIZE \\*[$COVER_COPYRIGHT_PT_SIZE]
7353 .       \}
7354 .       if \\n[#COVER_COPYRIGHT]=1 \{\
7355 .          if !'\\*[$COPYRIGHT_COVER]'' \{\
7356 .             ds $SAVED_COPYRIGHT \\*[$COPYRIGHT]
7357 .             ds $COPYRIGHT \\*[$COPYRIGHT_COVER]
7358 .          \}
7359 .          QUAD \\*[$COVER_COPYRIGHT_QUAD]
7360 .          ie \\n[#COVER_COPYRIGHT_COLOR]=1 \{\
7361 .             PRINT \m[\\*[$COVER_COPYRIGHT_COLOR]]\\*[$COPYRIGHT]\m[]
7362 .          \}
7363 .          el \{ .PRINT \\*[$COPYRIGHT] \}
7364 .          ds $COPYRIGHT \\*[$SAVED_COPYRIGHT]
7365 .       \}
7366 .       sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
7367 .       if \\n[#COVER_MISC]=1 \{\
7368 .          QUAD \\*[$COVER_MISC_QUAD]
7369 .          ie !'\\*[$MISC_COVER_1]'' \{\
7370 .             nr #MISCS \\n[#MISC_COVER_NUM]
7371 .             sp -\\n[#MISCS]+1
7372 .             nr #NEXT_MISC 0 1
7373 .             while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
7374 .                ie \\n[#COVER_MISC_COLOR]=1 \{\
7375 .                   PRINT \m[\\*[$COVER_MISC_COLOR]]\\*[$MISC_COVER_\\n+[#NEXT_MISC]]\m[]
7376 .                   br
7377 .                \}
7378 .                el \{\
7379 .                   PRINT \\*[$MISC_COVER_\\n+[#NEXT_MISC]]
7380 .                   br
7381 .                \}
7383 .          \}
7384 .          el \{\
7385 .             nr #MISCS \\n[#MISC_NUM]
7386 .             sp -\\n[#MISCS]+1
7387 .             nr #NEXT_MISC 0 1
7388 .             while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
7389 .                ie \\n[#COVER_MISC_COLOR]=1 \{\
7390 .                   PRINT \m[\\*[$COVER_MISC_COLOR]]\\*[$MISC_\\n+[#NEXT_MISC]]\m[]
7391 .                   br
7392 .                \}
7393 .                el \{\
7394 .                   PRINT \\*[$MISC_\\n+[#NEXT_MISC]]
7395 .                   br
7396 .                \}
7398 .          \}
7399 .       \}
7400 .       if \\n[#COVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ +1 \}
7401 .       nr #COVER_END 1
7402 .       END_COVER
7403 .    \}
7404 .END
7406 \# Macro to terminate (doc)cover processing
7408 .MAC END_COVER END
7409 .    EOL
7410 .    TRAP
7411 .    NEWPAGE
7412 .    if \\n[#PAGINATION_WAS_ON]=1 \{ .nr % +1 \}
7413 .    if \\n[#DOCCOVER_END]=1 \{\
7414 .       ie \\n[#DOCCOVER_BLANKPAGE]=1 \{\
7415 .          NEWPAGE
7416 .          rr #DOCCOVER_BLANKPAGE
7417 .          if !\\n[#DOCCOVERS_COUNT]=1 \{ .nr % -2 \}
7418 .       \}
7419 .       el \{\
7420 .          if !\\n[#DOCCOVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ -1 \}
7421 .       \}
7422 .       rr #DOCCOVER_END
7423 .    \}
7424 .    if \\n[#COVER_END]=1 \{\
7425 .       ie \\n[#COVER_BLANKPAGE]=1 \{\
7426 .          NEWPAGE
7427 .          rr #COVER_BLANKPAGE
7428 .          if !\\n[#COVERS_COUNT]=1 \{ .nr % -2 \}
7429 .       \}
7430 .       el \{\
7431 .          if !\\n[#COVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ -1 \}
7432 .       \}
7433 .       rr #COVER_END
7434 .    \}
7435 .    ev
7436 .    if \\n[#PAGINATION_WAS_ON] \{\
7437 .       rr #PAGINATION_WAS_ON
7438 .       PAGINATE
7439 .       PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]-1
7440 .    \}
7441 .    if \\n[#HEADERS_WERE_ON] \{\
7442 .       rr #HEADERS_WERE_ON
7443 .       HEADERS
7444 .    \}
7445 .    if \\n[#FOOTERS_WERE_ON] \{\
7446 .       rr #FOOTERS_WERE_ON
7447 .       FOOTERS
7448 .    \}
7449 .    if \\n[#COLUMNS_WERE_ON]=1 \{\
7450 .       rr #COLUMNS_WERE_ON 1
7451 .       nr #COLUMNS 1
7452 .    \}
7453 .    rr #DOING_COVER
7454 .END
7456 \# Macro to begin document processing
7458 .MAC START END
7459 .    nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
7460 .    if !\\n[#PRINT_STYLE] \{\
7461 .       PRINTSTYLE TYPEWRITE
7462 .       PRINT \&
7463 .       po 6P
7464 .       ll 39P
7465 .       ta \\n(.lu
7466 .       sp |1i-1v
7467 .       CENTER
7468 .       PRINT "You neglected to enter a PRINTSTYLE"
7469 .       fl
7470 .       ab [mom]: PRINTSTYLE missing.  Aborting.
7471 .    \}
7472 .    nr #DOCS 1
7473 .    if \\n[#LINENUMBERS]=1 \{\
7474 .       NUMBER_LINES OFF
7475 .       nr #LINENUMBERS 2
7476 .    \}
7477 .    if \\n[#COLLATE] \{\
7478 .       COPYSTYLE \\*[$COPY_STYLE]
7479 .       nr #HEADERS_ON \\n[#HEADER_STATE]
7480 .       if \\n[#PAGE_NUM_V_POS]=1 \{ .nr #PAGINATE \\n[#PAGINATION_STATE] \}
7481 .       sp |\\n[#HEADER_MARGIN]u
7482 .       PRINT \&
7483 .       if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
7484 .          PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
7485 .          rm $RESTORE_PAGENUM_STYLE
7486 .       \}
7487 .    \}
7488 .    DEFAULTS
7489 .\" Quote and blockquote default leads are the same as #DOC_LEAD, so
7490 .\" they have to be set after DEFAULTS (where DOC_LEAD is finalized)
7491 .    if !r#Q_AUTOLEAD     \{ .nr #Q_LEAD \\n[#DOC_LEAD]    \}
7492 .    if !r#BQ_AUTOLEAD    \{ .nr #BQ_LEAD \\n[#DOC_LEAD]   \}
7493 .    if !r#EN_Q_AUTOLEAD  \{ .nr #EN_Q_LEAD \\n[#EN_LEAD]  \}
7494 .    if !r#EN_BQ_AUTOLEAD \{ .nr #EN_BQ_LEAD \\n[#EN_LEAD] \}
7495 .\" Covers and doc covers
7496 .    if \\n[#DOC_COVERS]=1 \{\
7497 .       if \\n[#DOC_COVER]=1 \{\
7498 .          DO_DOC_COVER
7499 .          rr #DOC_COVER
7500 .          rr #DOC_COVER_TITLE
7501 .          rr #DOC_COVER_SUBTITLE
7502 .          rr #DOC_COVER_AUTHOR
7503 .          rr #DOC_COVER_DOCTYPE
7504 .          rr #DOC_COVER_COPYRIGHT
7505 .          rr #DOC_COVER_MISC
7506 .       \}
7507 .    \}
7508 .    if \\n[#COVERS]=1 \{\
7509 .       if \\n[#COVER]=1 \{\
7510 .          DO_COVER
7511 .          rr #COVER
7512 .          rr #COVER_TITLE
7513 .          rr #COVER_SUBTITLE
7514 .          rr #COVER_AUTHOR
7515 .          rr #COVER_DOCTYPE
7516 .          rr #COVER_COPYRIGHT
7517 .          rr #COVER_MISC
7518 .       \}
7519 .    \}
7520 .\" Collate related stuff
7521 .    ie \\n[#COLLATED_DOC]=1 \{\
7522 .\" Collect TITLE for TOC.
7523 .       nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
7524 .       af #TOC_ENTRY_PN \\g[#PAGENUMBER]
7525 .       ie \\n[#USER_SET_TITLE_ITEM] \{\
7526 .          ds $TOC_TITLE_ITEM \\*[$USER_SET_TITLE_ITEM]\\|
7527 .          rr #USER_SET_TITLE_ITEM
7528 .          rm $USER_SET_TITLE_ITEM
7529 .       \}
7530 .       el \{\
7531 .          ie \\n[#DOC_TYPE]=2 \{\
7532 .             ie '\\*[$CHAPTER_TITLE]'' \{\
7533 .                ds $TOC_TITLE_ITEM \\*[$CHAPTER_STRING] \\*[$CHAPTER]\\|
7534 .             \}
7535 .             el \{\
7536 .                ie '\\*[$CHAPTER]'' \{\
7537 .                   ds $TOC_TITLE_ITEM \\*[$CHAPTER_TITLE]\\|
7538 .                \}
7539 .                el \{\
7540 .                   ds $TOC_TITLE_ITEM \\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]\\|
7541 .                \}
7542 .             \}
7543 .          \}
7544 .          el \{\
7545 .             ds $TOC_TITLE_ITEM \\*[$TITLE]\\|
7546 .          \}
7547 .       \}
7548 .       if \\n[#TOC_AUTHORS]=1 \{\
7549 .          ie '\\*[$TOC_AUTHORS]'' \{\
7550 .             as $TOC_TITLE_ITEM /\\|\\*[$AUTHOR_1]\\|
7551 .          \}
7552 .          el \{\
7553 .             as $TOC_TITLE_ITEM /\\|\\*[$TOC_AUTHORS]\\|
7554 .             rm $TOC_AUTHORS
7555 .          \}
7556 .       \}
7557 .\" Note the use of \!, which transparently embeds the macros used
7558 .\" in the TOC_ENTRIES diversion.  The elements they control must be
7559 .\" processed literally when the diversion is output.
7560 .       ev TOC_EV
7561 .       da TOC_ENTRIES
7562 .       if \\n[#PRINT_STYLE]=1 \{\
7563 \!.        fam C
7564 \!.        ft  R
7565 \!.        ps  12
7566 .       \}
7567 .       if \\n[#PRINT_STYLE]=2 \{\
7568 \!.        FAMILY  \\*[$TOC_TITLE_FAM]
7569 \!.        FT      \\*[$TOC_TITLE_FT]
7570 \!.        PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
7571 .       \}
7572 \!.     TRAP OFF
7573 \!.     PAD_MARKER ^
7574 .       ie \\n[#PRINT_STYLE]=1 \{\
7575 \!.        PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]"
7576 .       \}
7577 .       el \{\
7578 \!.        PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]"
7579 .       \}
7580 \!.     PAD_MARKER #
7581 \!.    EOL
7582 \!.    ST 100 L
7583 \!.    ST 101 R
7584 .      if \\n[#PRINT_STYLE]=2 \{\
7585 \!.       FAMILY  \\*[$TOC_PN_FAM]
7586 \!.       FT      \\*[$TOC_PN_FT]
7587 \!.       PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
7588 .      \}
7589 \!.    TAB 100
7590 \!.    PRINT \\*[LEADER]
7591 \!.    TN
7592 \!.    TRAP
7593 \!.    PRINT \\n[#TOC_ENTRY_PN]
7594 \!.    TQ
7595 .      di
7596 .      ev
7597 .    \}
7598 .    el \{\
7599 .       nr #FIRST_DOC_TITLE_PN \\n%+\\n[#PAGE_NUM_ADJ]
7600 .       af #FIRST_DOC_TITLE_PN \\g[#PAGENUMBER]
7601 .       nr #FIRST_DOC_TOC_PN_PADDING \\n[#TOC_PN_PADDING]
7602 .    \}
7603 .\" End TITLE collection
7604 .    if \\n[#PRINT_PAGENUM_ON_PAGE_1] \{\
7605 .       sp |\\n[#HEADER_MARGIN]u
7606 .       PRINT_PAGE_NUMBER
7607 .    \}
7608 .    rr #COLLATE
7609 .    rr #PAGINATION_STATE
7610 .\" End collate stuff
7611 .    ie \\n[#DOC_HEADER]=0 \{\
7612 .       PRINT \&
7613 .       if \\n[#DOC_TYPE]=4 \{\
7614 .          if !'\\n(.z'' \{ .di \}
7615 .       \}
7616 .       nr #STORED_PP_INDENT \\n[#PP_INDENT]
7617 .       PARA_INDENT 0
7618 .       PP
7619 .       PARA_INDENT \\n[#STORED_PP_INDENT]u
7620 .       rr #STORED_PP_INDENT
7621 .       ie r#ADVANCE_FROM_TOP \{\
7622 .          sp |\\n[#ADVANCE_FROM_TOP]u-1v
7623 .          if \\n[#ADJ_DOC_LEAD]=1 \{ .SHIM \}
7624 .       \}
7625 .       el \{ .sp |\\n[#T_MARGIN]u-1v \}
7626 .       if \\n[#COLUMNS] \{\
7627 .          mk dc
7628 .          nr #COL_NUM 0 1
7629 .          po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
7630 .          nr #L_MARGIN \\n(.o
7631 .          ll \\n[#COL_L_LENGTH]u
7632 .       \}
7633 .       nr #PP 0
7634 .    \}
7635 .    el \{\
7636 .       if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ] \}
7637 .       nr #DOCHEADER_LEAD \\n[#LEAD]
7638 .\" Default
7639 .       if \\n[#DOC_TYPE]=1 \{\
7640 .          PRINT \&
7641 .          sp |\\n[#DOCHEADER_ADVANCE]u-1v
7642 .          ev DOCHEADER
7643 .          if \\n[#DOCHEADER_COLOR]=1 \{\
7644 .             nf
7645 \m[\\*[$DOCHEADER_COLOR]]
7646 .             EOL
7647 .          \}
7648 .          L_MARGIN \\n[#DOC_L_MARGIN]u
7649 .          LL       \\n[#DOC_L_LENGTH]u
7650 .          ta \\n(.lu
7651 .          if \\n[#PRINT_STYLE]=1 \{\
7652 .             CENTER
7653 .             TYPEWRITER
7654 .             if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \}
7655 .             if !'\\*[$TITLE_1]'' \{\
7656 .                CAPS
7657 .                nr #ARG_NUM 0 1
7658 .                while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7659 .                   UNDERSCORE 4p "\\*[$TITLE_\\n[#ARG_NUM]]"
7661 .                CAPS OFF
7662 .             \}
7663 .             if !'\\*[$SUBTITLE]'' \{\
7664 .                sp
7665 .                nr #ARG_NUM 0 1
7666 .                while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
7667 .                   UNDERSCORE 4p "\\*[$SUBTITLE_\\n[#ARG_NUM]]"
7669 .             \}
7670 .             if !'\\*[$AUTHOR_1]'' \{\
7671 .                sp
7672 .                PRINT \&\\*[$ATTRIBUTE_STRING]
7673 .                nr #AUTHORS \\n[#AUTHOR_NUM]
7674 .                nr #NEXT_AUTHOR 0 1
7675 .                while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
7676 .                   PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
7678 .             \}
7679 .          \}
7680 .          if \\n[#PRINT_STYLE]=2 \{\
7681 .             DEFAULT_DOCHEADER
7682 .          \}
7683 .          ev
7684 .       \}
7685 .\" Chapter
7686 .       if \\n[#DOC_TYPE]=2 \{\
7687 .          PRINT \&
7688 .          sp |\\n[#DOCHEADER_ADVANCE]u-1v
7689 .          ev DOCHEADER
7690 .          if \\n[#DOCHEADER_COLOR]=1 \{\
7691 .             nf
7692 \m[\\*[$DOCHEADER_COLOR]]
7693 .             EOL
7694 .          \}
7695 .          L_MARGIN \\n[#DOC_L_MARGIN]u
7696 .          LL       \\n[#DOC_L_LENGTH]u
7697 .          ta \\n(.lu
7698 .          if \\n[#PRINT_STYLE]=1 \{\
7699 .             CENTER
7700 .             TYPEWRITER
7701 .             vs \\n[#DOC_LEAD]u
7702 .             if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \}
7703 .             ie '\\*[$CHAPTER]'' \{\
7704 .                CAPS
7705 .                ie !'\\*[$CHAPTER_TITLE]'' \{\
7706 .                   nr #ARG_NUM 0 1
7707 .                   while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7708 .                      UNDERSCORE 4p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
7710 .                \}
7711 .                el \{\
7712 .                   CAPS
7713 .                   UNDERSCORE 4p "\\*[$CHAPTER_STRING]"
7714 .                \}
7715 .                CAPS OFF
7716 .                RLD 1v
7717 .             \}
7718 .             el \{\
7719 .                CAPS
7720 .                PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
7721 .                CAPS OFF
7722 .                if !'\\*[$CHAPTER_TITLE]'' \{\
7723 .                   sp
7724 .                   nr #ARG_NUM 0 1
7725 .                   while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7726 .                      UNDERSCORE 4p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
7728 .                \}
7729 .                RLD 1v
7730 .             \}
7731 .             if \\n[#SINGLE_SPACE] \{ .ALD 2v \}
7732 .          \}
7733 .          if \\n[#PRINT_STYLE]=2 \{\
7734 .             CHAPTER_DOCHEADER
7735 .             di DOCHEADER_DIVERSION \" This diversion is only
7736 .             br                     \" necessary to find the depth of the
7737 .             CHAPTER_DOCHEADER      \" docheader
7738 .             br
7739 .             di
7740 .             nr #DOCHEADER_DEPTH \\n(dn-\\n[#DOCHEADER_LEAD] \" Storing the depth (height) of the diversion
7741 .                                                             \" in #DOCHEADER_DEPTH
7742 .             rm DOCHEADER_DIVERSION                          \" Removing the diversion macro
7743 .          \}
7744 .          ev
7745 .       \}
7746 .\" Named
7747 .       if \\n[#DOC_TYPE]=3 \{\
7748 .          PRINT \&
7749 .          sp |\\n[#DOCHEADER_ADVANCE]u-1v
7750 .          ev DOCHEADER
7751 .          if \\n[#DOCHEADER_COLOR]=1 \{\
7752 .             nf
7753 \m[\\*[$DOCHEADER_COLOR]]
7754 .             EOL
7755 .          \}
7756 .          L_MARGIN \\n[#DOC_L_MARGIN]u
7757 .          LL       \\n[#DOC_L_LENGTH]u
7758 .          ta \\n(.lu
7759 .          if \\n[#PRINT_STYLE]=1 \{\
7760 .             CENTER
7761 .             TYPEWRITER
7762 .             if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \}
7763 .             CAPS
7764 .             if !'\\*[$TITLE]'' \{\
7765 .                nr #ARG_NUM 0 1
7766 .                while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7767 .                   UNDERSCORE 4p "\\*[$TITLE_\\n[#ARG_NUM]]"
7769 .             \}
7770 .             CAPS OFF
7771 .             if !'\\*[$SUBTITLE]'' \{\
7772 .                sp
7773 .                nr #ARG_NUM 0 1
7774 .                while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
7775 .                   UNDERSCORE 4p "\\*[$SUBTITLE_\\n[#ARG_NUM]]"
7777 .             \}
7778 .             if !'\\*[$AUTHOR_1]'' \{\
7779 .                sp
7780 .                PRINT \&\\*[$ATTRIBUTE_STRING]
7781 .                nr #AUTHORS \\n[#AUTHOR_NUM]
7782 .                nr #NEXT_AUTHOR 0 1
7783 .                while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
7784 .                   PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
7786 .             \}
7787 .             ie \\n[#SINGLE_SPACE]=0 \{ .sp 2 \}
7788 .             el \{ .sp \}
7789 .             UNDERSCORE2 4p "\\*[$DOC_TYPE]"
7790 .             if \\n[#SINGLE_SPACE]=1 \{ .sp \}
7791 .          \}
7792 .          if \\n[#PRINT_STYLE]=2 \{\
7793 .             NAMED_DOCHEADER
7794 .          \}
7795 .          ev
7796 .       \}
7797 .       if !\\n[#DOC_TYPE]=4 \{\
7798 .          if \\n[#PRINT_STYLE]=1 \{\
7799 .             sp
7800 .          \}
7801 .          if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#DOC_LEAD]u*2u \}
7802 .          if \\n[#COLUMNS] \{\
7803 .             nr #COL_NUM 0 1
7804 .             nr #L_LENGTH_FOR_EPI \\n[#L_LENGTH]
7805 .             po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
7806 .             nr #L_MARGIN \\n(.o
7807 .             LL \\n[#COL_L_LENGTH]u
7808 .             ta \\n(.lu
7809 .             mk dc
7810 .          \}
7811 .       \}
7812 .    \}
7813 .    LS \\n[#DOC_LEAD]u
7814 .    if \\n[#ADJ_DOC_LEAD]=1 \{\
7815 .       ie !r#ADVANCE_FROM_TOP \{\
7816 .          if \\n[#DOC_HEADER]=1 \{ .SHIM \}
7817 .       \}
7818 .       el \{ .rr #ADVANCE_FROM_TOP \}
7819 .    \}
7820 .    QUAD \\*[$DOC_QUAD]
7821 .    CLEANUP_DEFAULTS
7822 .    nr #START_FOR_FOOTERS 1
7823 .    if \\n[#COLLATED_DOC]=1 \{\
7824 .       if !\\n[MNinit_DEFERRED]=1 \{\
7825 .          MN_INIT rerun
7826 .       \}
7827 .    \}
7828 .    if \\n[#MNinit_DEFERRED]=1 \{\
7829 .       rr #MNinit_DEFERRED
7830 .       nr #START_FOR_MNinit 1
7831 .       MN_INIT \\*[$MN-arg1] \\*[$MN-arg2] \\*[$MN-arg3] \\*[$MN-arg4] \\*[$MN-arg5] \\*[$MN-arg6] \\*[$MN-arg7] \\*[$MN-arg8] \\*[$MN-arg9]
7832 .    \}
7833 .    nr #START_FOR_MNinit 2
7834 .    if !\\n[#DOC_TYPE]=4 \{ .em TERMINATE \}
7835 .    if \\n[#LINENUMBERS]=2 \{\
7836 .       NUMBER_LINES RESUME
7837 .       nr #LINENUMBERS 1
7838 .    \}
7839 .    if \\n[#RUN_ON]=1 \{\
7840 .       if \\n[#FN_MARKER_STYLE]=1 \{ .RUNON_WARNING \}
7841 .       if \\n[#FN_MARKER_STYLE]=2 \{ .RUNON_WARNING \}
7842 .    \}
7843 .END
7845 .MAC CLEANUP_DEFAULTS END
7846 .    nr #START 1
7847 .\" Family strings for docheader
7848 .    rm $AUTHOR_FAM
7849 .    rm $CHAPTER_TITLE_FAM
7850 .    rm $DOCTYPE_FAM
7851 .    rm $SUBTITLE_FAM
7852 .    rm $TITLE_FAM
7853 .\" Family strings for cover
7854 .    rm $COVER_AUTHOR_FAM
7855 .    rm $COVER_CHAPTER_TITLE_FAM
7856 .    rm $COVER_COPYRIGHT_FAM
7857 .    rm $COVER_DOCTYPE_FAM
7858 .    rm $COVER_LEAD_ADJ
7859 .    rm $COVER_SUBTITLE_FAM
7860 .    rm $COVER_TITLE_FAM
7861 .\" Family strings for doc cover
7862 .    rm $DOC_COVER_AUTHOR_FAM
7863 .    rm $DOC_COVER_CHAPTER_TITLE_FAM
7864 .    rm $DOC_COVER_COPYRIGHT_FAM
7865 .    rm $DOC_COVER_DOCTYPE_FAM
7866 .    rm $DOC_COVER_LEAD_ADJ
7867 .    rm $DOC_COVER_SUBTITLE_FAM
7868 .    rm $DOC_COVER_TITLE_FAM
7869 .\" Quad args to copyright and misc
7870 .    rm $COVER_COPYRIGHT_QUAD
7871 .    rm $COVER_MISC_QUAD
7872 .    rm $DOC_COVER_COPYRIGHT_QUAD
7873 .    rm $DOC_COVER_MISC_QUAD
7874 .\" Miscellaneous strings
7875 .    rm $TOC_TITLE_ITEM
7876 .    rm $DOCHEADER_LEAD_ADJ
7877 .\" Various registers
7878 .    rr #ADJ_DOC_LEAD
7879 .    rr #ADVANCE_FROM_TOP
7880 .    rr #COVER_LEAD
7881 .    rr #DEPTH_1
7882 .    rr #DEPTH_2
7883 .    rr #DOC_COVER_LEAD
7884 .    if \\n[#DOC_HEADER]=1 \{ .nr #DOC_HEADER 2 \}
7885 .    rr #DOCHEADER_ADVANCE
7886 .    rr #DOCHEADER_EXTRA_SPACE
7887 .    rr #DOCHEADER_LEAD
7888 .    rr #DOCHEADER_SPACE_ADJ
7889 .    rr #MISC_NUM
7890 .    rr #MISCS
7891 .    rr #NEXT_AUTHOR
7892 .    rr #NEXT_MISC
7893 .END
7895 \# ====================================================================
7897 \# +++MACROS TO CHANGE SOME DEFAULTS+++
7899 \# DOCUMENT HEADER
7900 \# ---------------
7901 \# *Argument:
7902 \#   <none> | <anything> [distance to advance from top of page]
7903 \# *Function:
7904 \#   Turns printing of document header on or off.  If a second argument
7905 \#   in units of measure is given, advances that distance from the
7906 \#   top of the page without printing the document header.
7907 \# *Notes:
7908 \#   Default is on.  If the 1st argument is <anything> (which turns
7909 \#   document headers off), the optional 2nd argument may be given
7910 \#   (with a unit of measure).
7912 .MAC DOCHEADER END
7913 .    ie '\\$1'' \{ .nr #DOC_HEADER 1 \}
7914 .    el \{\
7915 .       if !'\\$2'' \{ .nr #ADVANCE_FROM_TOP (\\$2) \}
7916 .       nr #DOC_HEADER 0
7917 .    \}
7918 .END
7921 \# DOCUMENT HEADER LEADING
7922 \# -----------------------
7923 \# *Arguments:
7924 \#   <+|- amount by which to in/decrease leading of doc header>
7925 \# *Function:
7926 \#   Stores user supplied lead in/decrease in string $DOCHEADER_LEAD_ADJ.
7927 \# *Notes:
7928 \#   A unit of measure must be supplied.  Decimal fractions OK.
7929 \#   Default is +0, i.e. same as DOC_LEAD.
7931 .MAC DOCHEADER_LEAD END
7932 .    ds $DOCHEADER_LEAD_ADJ \\$1
7933 .END
7936 \# DOCHEADER ADVANCE
7937 \# -----------------
7938 \# *Arguments:
7939 \#   <docheader start position>
7940 \# *Function:
7941 \#   Creates register #DOCHEADER_ADVANCE, used in START.
7942 \# *Notes:
7943 \#   Unit of measure required.
7944 \#   Default is same as T_MARGIN.
7946 .MAC DOCHEADER_ADVANCE END
7947 .    nr #DOCHEADER_ADVANCE (\\$1)
7948 .END
7951 \# DOCUMENT LEFT MARGIN
7952 \# --------------------
7953 \# *Argument:
7954 \#   <left margin of document>
7955 \# *Function:
7956 \#   Creates or modifies register #DOC_L_MARGIN.
7957 \# *Notes:
7958 \#   Affects EVERYTHING on the page.
7960 .MAC DOC_LEFT_MARGIN END
7961 .    br
7962 .    nr #DOC_L_MARGIN (\\$1)
7963 .    L_MARGIN \\n[#DOC_L_MARGIN]u
7964 .END
7967 \# DOCUMENT RIGHT MARGIN
7968 \# ---------------------
7969 \# *Argument:
7970 \#   <right margin of document>
7971 \# *Function:
7972 \#   Creates or modifies register #DOC_R_MARGIN.
7973 \# *Notes:
7974 \#   Affects EVERYTHING on the page.
7976 .MAC DOC_RIGHT_MARGIN END
7977 .    br
7978 .    nr #DOC_R_MARGIN (\\$1)
7979 .    R_MARGIN \\n[#DOC_R_MARGIN]
7980 .    nr #DOC_L_LENGTH \\n[#L_LENGTH]
7981 .END
7984 \# DOCUMENT LINE LENGTH
7985 \# --------------------
7986 \# *Argument:
7987 \#   <line length of document>
7988 \# *Function:
7989 \#   Creates or modifies string $DOC_L_LENGTH.
7990 \# *Notes:
7991 \#   Affects EVERYTHING on the page.
7993 .MAC DOC_LINE_LENGTH END
7994 .    br
7995 .    nr #DOC_L_LENGTH (\\$1)
7996 .    LL \\n[#DOC_L_LENGTH]u
7997 .    ta \\n(.lu
7998 .END
8001 \# DOCUMENT FAMILY
8002 \# ---------------
8003 \# *Argument:
8004 \#   <family of running text>
8005 \# *Function:
8006 \#   Creates or modifies string $DOC_FAM.
8007 \# *Notes:
8008 \#   Affects everything EXCEPT headers and footers.
8010 .MAC DOC_FAMILY END
8011 .    br
8012 .    ds $DOC_FAM       \\$1
8013 .    ds $FAMILY        \\*[$DOC_FAM]
8014 .    AUTHOR_FAMILY     \\*[$DOC_FAM]
8015 .    BLOCKQUOTE_FAMILY \\*[$DOC_FAM]
8016 .    DOCHEADER_FAMILY  \\*[$DOC_FAM]
8017 .    DOCTYPE_FAMILY    \\*[$DOC_FAM]
8018 .    EPIGRAPH_FAMILY   \\*[$DOC_FAM]
8019 .    FOOTNOTE_FAMILY   \\*[$DOC_FAM]
8020 .    HDRFTR_FAMILY     \\*[$DOC_FAM]
8021 .    HEAD_FAMILY       \\*[$DOC_FAM]
8022 .    LINENUMBER_FAMILY \\*[$DOC_FAM]
8023 .    PARAHEAD_FAMILY   \\*[$DOC_FAM]
8024 .    QUOTE_FAMILY      \\*[$DOC_FAM]
8025 .    SUBHEAD_FAMILY    \\*[$DOC_FAM]
8026 .    SUBTITLE_FAMILY   \\*[$DOC_FAM]
8027 .    TITLE_FAMILY      \\*[$DOC_FAM]
8028 .END
8031 \# DOCUMENT POINT SIZE
8032 \# -------------------
8033 \# *Argument:
8034 \#   <point size of running text>
8035 \# *Function:
8036 \#   Creates or modifies register #DOC_PT_SIZE.
8037 \# *Notes:
8038 \#   DOC_PT_SIZE is the basis for calculating all type sizes in
8039 \#   a document.
8041 .MAC DOC_PT_SIZE END
8042 .    if \\n[#IGNORE] \{ .return \}
8043 .    br
8044 .    PT_SIZE \\$1
8045 .    nr #DOC_PT_SIZE \\n[#PT_SIZE]
8046 .END
8049 \# DOCUMENT LEAD
8050 \# -------------
8051 \# *Argument:
8052 \#   <lead (".vs") of running text> [ADJUST]
8053 \# *Function:
8054 \#   Creates or modifies register #DOC_LEAD.  If the optional
8055 \#   ADJUST argument is given, adjusts leading so that the last
8056 \#   line of text falls exactly on #B_MARGIN.
8057 \# *Notes:
8058 \#   DOC_LEAD is the basis for calculating all leading changes in
8059 \#   a document.  Default for TYPESET is 16; 24 for TYPEWRITE.
8061 \#   Because the visible bottom or footer margin of a page depends
8062 \#   on the overall document lead supplied by the register #DOC_LEAD,
8063 \#   DOC_LEAD, in the body of a document, should always be associated
8064 \#   with the start of a new page (in other words, just before or
8065 \#   just after a manual NEWPAGE).
8067 .MAC DOC_LEAD END
8068 .    if \\n[#IGNORE] \{ .return \}
8069 .    br
8070 .    vs \\$1
8071 .    nr #DOC_LEAD \\n[#LEAD]
8072 .    if '\\$2'ADJUST' \{ .TRAPS \}
8073 .END
8076 \# ADJUST DOCUMENT LEAD
8077 \# --------------------
8078 \# *Arguments:
8079 \#   <none> | <anything>
8080 \# *Function:
8081 \#   Adjusts document lead so that the last line of text falls exactly
8082 \#   on #B_MARGIN.
8084 .MAC DOC_LEAD_ADJUST END
8085 .    ie '\\$1'' \{\
8086 .       nr #ADJ_DOC_LEAD 1
8087 .       rr #DOC_LEAD_ADJUST_OFF
8088 .    \}
8089 .    el \{\
8090 .       nr #ADJ_DOC_LEAD 0
8091 .       nr #DOC_LEAD_ADJUST_OFF 1
8092 .    \}
8093 .END
8096 \# SHIM
8097 \# ----
8098 \# *Argument:
8099 \#   None
8100 \# *Function:
8101 \#   Advances to the next "valid" baseline.
8102 \# *Notes:
8103 \#   If a user plays around with spacing in a doc (say, with ALD),
8104 \#   it isn't easy to get mom back on track so she can achieve
8105 \#   perfectly flush bottom margins.  Any time SHIM is used, it
8106 \#   ensures that the next output line falls on a valid baseline.
8108 \# First, a little convenience macro
8110 .MAC PROCESS_SHIM END
8111 .    while \\n+[#VALID_BASELINE]<\\n[#CURRENT_V_POS] \{\
8114 .    nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
8115 .END
8117 \# And a macro to disable SHIM (useful sometimes with QUOTE and
8118 \# BLOCKQUOTE)
8120 .MAC NO_SHIM END
8121 .    ie '\\$1'' \{ .nr #NO_SHIM 1 \}
8122 .    el         \{ .rr #NO_SHIM   \}
8123 .END
8125 .MAC SHIM END
8126 .    ie r#NO_SHIM \{ .return \}
8127 .    el \{\
8128 .       nr #VALID_BASELINE \\n[#T_MARGIN]-1v \\n[#DOC_LEAD]
8129 .       if !r#CURRENT_V_POS \{ .nr #CURRENT_V_POS \\n(.d \}
8130 .       ie r#ADVANCE_FROM_TOP \{\
8131 .          ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\
8132 .             while \\n-[#VALID_BASELINE]>\\n[#CURRENT_V_POS] \{\
8135 .             nr #VALID_BASELINE +\\n[#DOC_LEAD]
8136 .             nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
8137 .          \}
8138 .          el \{\
8139 .             PROCESS_SHIM
8140 .          \}
8141 .       \}
8142 .       el \{\
8143 .          PROCESS_SHIM
8144 .       \}
8145 .       ALD \\n[#SHIM]u
8146 .       rr #CURRENT_V_POS
8147 .    \}
8148 .END
8152 \# ====================================================================
8154 \# +++INTERNATIONALIZATION+++
8156 \# ATTRIBUTE STRING
8157 \# ----------------
8158 \# *Argument:
8159 \#   <what goes in the "by" slot before author in the document header>
8160 \# *Function:
8161 \#   Creates or modifies string $ATTRIBUTE_STRING.
8162 \# *Notes:
8163 \#   Default is "by".  A blank string ("") may be used if no
8164 \#   attribution is desired.
8166 .MAC ATTRIBUTE_STRING END
8167 .    if !'\\$1'DOC_COVER' \{\
8168 .       if !'\\$1'COVER' \{ .nr #NEITHER 1 \}
8169 .    \}
8170 .    if !'\\$1'COVER' \{\
8171 .       if !'\\$1'DOC_COVER' \{ .nr #NEITHER 1 \}
8172 .    \}
8173 .    if '\\$1'DOC_COVER' \{\
8174 .       ds $ATTRIBUTE_STRING_DOCCOVER \\$2
8175 .    \}
8176 .    if '\\$1'COVER' \{\
8177 .       ds $ATTRIBUTE_STRING_COVER \\$2
8178 .    \}
8179 .    if \\n[#NEITHER]=1 \{\
8180 .       ds $ATTRIBUTE_STRING \\$1
8181 .       rr #NEITHER
8182 .    \}
8183 .END
8186 \# CHAPTER STRING
8187 \# --------------
8188 \# *Argument:
8189 \#   <what to print any time the word "chapter" is required>
8190 \# *Function:
8191 \#   Creates or modifies string $CHAPTER_STRING.
8192 \# *Notes:
8193 \#   Default is "chapter".
8195 .MAC CHAPTER_STRING END
8196 .    ds $CHAPTER_STRING \\$1
8197 .END
8200 \# DRAFT STRING
8201 \# ------------
8202 \# *Argument:
8203 \#   <what to print any time the word "draft" is required>
8204 \# *Function:
8205 \#   Creates or modifies string $DRAFT_STRING.
8206 \# *Notes:
8207 \#   Default is "draft".
8209 .MAC DRAFT_STRING END
8210 .    ds $DRAFT_STRING \\$1
8211 .END
8214 \# REVISION STRING
8215 \# ---------------
8216 \# *Argument:
8217 \#   <what to print any time the word "revision" is required>
8218 \# *Function:
8219 \#   Creates or modifies string $REVISION_STRING.
8220 \# *Notes:
8221 \#   Default is "revision".
8223 .MAC REVISION_STRING END
8224 .    ds $REVISION_STRING \\$1
8225 .END
8228 \# FINIS STRING
8229 \# ------------
8230 \# *Argument:
8231 \#   <what to print with the finis macro>
8232 \# *Function:
8233 \#   Creates or modifies string $FINIS_STRING.
8234 \# *Notes:
8235 \#   Default is "END".
8237 .MAC FINIS_STRING END
8238 \#.    if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS \}
8239 .    ds $FINIS_STRING \\$1
8240 \#.    if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS OFF \}
8241 .END
8243 .MAC FINIS_STRING_CAPS END
8244 .    ie '\\$1'' \{ .nr #FINIS_STRING_CAPS 1 \}
8245 .    el \{ .nr #FINIS_STRING_CAPS 0 \}
8246 .END
8248 \# ====================================================================
8250 \# +++RECTO/VERSO+++
8252 \# RECTO_VERSO
8253 \# -----------
8254 \# *Arguments:
8255 \#   <none> | <anything>
8256 \# *Function:
8257 \#   Switches HDRFTR_LEFT and HDRFTR_RIGHT on alternate pages.  Also
8258 \#   switches page numbers left and right if either is chosen rather
8259 \#   than the default centered page numbers.  Switches left and right
8260 \#   margins if differing values have been entered.
8261 \# *Notes:
8262 \#   Default is OFF.
8264 .MAC RECTO_VERSO END
8265 .    ie '\\$1'' \{ .nr #RECTO_VERSO 1 \}
8266 .    el \{ .nr #RECTO_VERSO 0 \}
8267 .END
8269 \# ====================================================================
8271 \# +++EPIGRAPHS+++
8273 \# EPIGRAPH INDENT
8274 \# ---------------
8275 \# *Argument:
8276 \#   <value by which to multiply PP_INDENT for block epigraphs>
8277 \# *Function:
8278 \#   Creates or modifies register #EPI_OFFSET_VALUE.
8279 \# *Notes:
8280 \#   Default is 2 for TYPEWRITE, 3 for TYPESET.
8282 .MAC EPIGRAPH_INDENT END
8283 .    if r#EPI_OFFSET_VALUE        \{ .rr #EPI_OFFSET_VALUE \}
8284 .    if !'\\*[$EPI_OFFSET_VALUE]'' \{ .rm $EPI_OFFSET_VALUE \}
8285 .    ds $EVAL_EI_ARG \\$1
8286 .    substring $EVAL_EI_ARG -1
8287 .    ie \B'\\*[$EVAL_EI_ARG]' \{\
8288 .       nr #EPI_OFFSET_VALUE \\$1
8289 .    \}
8290 .    el \{\
8291 .       ds $EPI_OFFSET_VALUE \\$1
8292 .    \}
8293 .    rm $EVAL_EI_ARG
8294 .END
8297 \# EPIGRAPH AUTOLEAD
8298 \# -----------------
8299 \# *Argument:
8300 \#   <amount of lead to add to the epigraph ps for epigraph leading>
8301 \# *Function:
8302 \#   Creates or modifies register #EPI_AUTOLEAD.
8303 \# *Notes:
8304 \#   Default is 2 (for TYPESET; TYPEWRITE doesn't require this).
8306 .MAC EPIGRAPH_AUTOLEAD END
8307 .    nr #EPI_AUTOLEAD \\$1
8308 .END
8311 \# EPIGRAPH
8312 \# --------
8313 \# *Arguments:
8314 \#   BLOCK | <anything>
8315 \# *Function:
8316 \#   Places an epigraph before the document's text, after the
8317 \#   document header, or after a HEAD.
8318 \# *Notes:
8319 \#   #EPIGRAPH 1 = centered; 2 = block
8321 \#   By default, epigraphs are centered, allowing the user
8322 \#   to input them on a line per line basis.  To change this
8323 \#   behaviour, the user can supply the argument BLOCK, which
8324 \#   will produce indented, filled text similar to BLOCKQUOTE.
8326 \#   If a block epigraph contains more than one para, ALL paras of
8327 \#   the epigraph must be preceded by PP.  Otherwise, PP is optional.
8329 .MAC EPIGRAPH END
8330 .    nr #PP_STYLE 2
8331 .    nr #Q_PP     0
8332 .    if \\n[#LINENUMBERS]=1 \{\
8333 .       NUMBER_LINES OFF
8334 .       nr #LINENUMBERS 2
8335 .    \}
8336 .    if \\n[#START] \{\
8337 .       if \\n[#PRINT_STYLE]=1 \{\
8338 .          if \\n[#AUTHOR_LINES]=1 \{ .ALD \\n[#DOC_LEAD]u \}
8339 .       \}
8340 .    \}
8341 .    ie '\\$1'' \{\
8342 .       nr #EPIGRAPH 1
8343 .       ev EPIGRAPH
8344 .       nr #IN_DIVER 1
8345 .       ll \\n[#L_LENGTH]u
8346 .       ta \\n(.lu
8347 .       CHECK_INDENT
8348 .       if \\n[#COLUMNS] \{\
8349 .          ie \\n[#START] \{\
8350 .              ll \\n[#DOC_L_LENGTH]u
8351 .              ta \\n(.lu
8352 .          \}
8353 .          el \{\
8354 .             ll \\n[#COL_L_LENGTH]u
8355 .             ta \\n(.lu
8356 .          \}
8357 .       \}
8358 .       CENTER
8359 .       if \\n[#PRINT_STYLE]=1 \{\
8360 .          fam C
8361 .          ft  R
8362 .          if '\\*[$EPI_FT]'I' \{\
8363 .             FT I
8364 .          \}
8365 .          ps  12
8366 .          ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
8367 .          el \{ .vs  \\n[#DOC_LEAD]u/2u \}
8368 .          nr #EPI_LEAD      \\n[#LEAD]
8369 .          nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
8370 .       \}
8371 .       if \\n[#PRINT_STYLE]=2 \{\
8372 .          FAMILY   \\*[$EPI_FAM]
8373 .          FT       \\*[$EPI_FT]
8374 .          PT_SIZE  \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
8375 .          if \\n[#EPI_COLOR]=1 \{\
8376 .             nf
8377 \m[\\*[$EPI_COLOR]]
8378 .             EOL
8379 .          \}
8380 .          AUTOLEAD \\n[#EPI_AUTOLEAD]
8381 .          nr #EPI_LEAD      \\n[#LEAD]
8382 .          nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
8383 .       \}
8384 .       di EPI_TEXT
8385 .       nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
8386 .       HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
8387 .       hy 14
8388 .       nr #EPI_ACTIVE 1
8389 .    \}
8390 .    el \{\
8391 .       ie '\\$1'BLOCK' \{\
8392 .          nr #EPIGRAPH 2
8393 .          ev EPIGRAPH
8394 .          ie \\n[#START] \{\
8395 .             ie \\n[#COLUMNS] \{\
8396 .                ie r#EPI_OFFSET_VALUE \{\
8397 .                   ll \\n[#L_LENGTH_FOR_EPI]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
8398 .                \}
8399 .                el \{\
8400 .                   ll \\n[#L_LENGTH_FOR_EPI]u-(\\*[$EPI_OFFSET_VALUE]u*2u)
8401 .                \}
8402 .                ta \\n(.lu
8403 .             \}
8404 .             el \{\
8405 .                ie r#EPI_OFFSET_VALUE \{\
8406 .                   ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
8407 .                \}
8408 .                el \{\
8409 .                   ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
8410 .                \}
8411 .                ta \\n(.lu
8412 .             \}
8413 .          \}
8414 .          el \{\
8415 .             ie r#EPI_OFFSET_VALUE \{\
8416 .                ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
8417 .             \}
8418 .             el \{\
8419 .                ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
8420 .             \}
8421 .             ta \\n(.lu
8422 .             if \\n[#COLUMNS] \{\
8423 .                ie r#EPI_OFFSET_VALUE \{\
8424 .                   ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
8425 .                \}
8426 .                el \{\
8427 .                   ll \\n[#COL_L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
8428 .                \}
8429 .                ta \\n(.lu
8430 .             \}
8431 .             CHECK_INDENT
8432 .          \}
8433 .          if \\n[#PRINT_STYLE]=1 \{\
8434 .             fam C
8435 .             ft  R
8436 .             if '\\*[$EPI_FT]'I' \{\
8437 .                FT I
8438 .             \}
8439 .             ps  12
8440 .             ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
8441 .             el \{ .vs  \\n[#DOC_LEAD]u/2u \}
8442 .             QUAD LEFT
8443 .             HY OFF
8444 .             nr #EPI_LEAD \\n[#LEAD]
8445 .             nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
8446 .             di EPI_TEXT
8447 .             nr #EPI_ACTIVE 1
8448 .          \}
8449 .          if \\n[#PRINT_STYLE]=2 \{\
8450 .             FAMILY   \\*[$EPI_FAM]
8451 .             FT       \\*[$EPI_FT]
8452 .             PT_SIZE  \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
8453 .          if \\n[#EPI_COLOR]=1 \{\
8454 .             nf
8455 \m[\\*[$EPI_COLOR]]
8456 .             EOL
8457 .          \}
8458 .             AUTOLEAD \\n[#EPI_AUTOLEAD]
8459 .             QUAD     \\*[$EPI_QUAD]
8460 .             nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
8461 .             HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
8462 .             hy 14
8463 .             nr #EPI_LEAD \\n[#LEAD]
8464 .             nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
8465 .             di EPI_TEXT
8466 .             nr #EPI_ACTIVE 1
8467 .          \}
8468 .       \}
8469 .       el \{\
8470 .          DO_EPIGRAPH
8471 .       \}
8472 .    \}
8473 .END
8476 \# DO EPIGRAPH
8477 \# -----------
8478 \# *Arguments:
8479 \#   <none>
8480 \# *Function:
8481 \#   Ends diversion started in EPIGRAPH.  Makes spacing
8482 \#   adjustments to compensate for the difference between epigraph
8483 \#   leading and overall document leading, so that the bottom of
8484 \#   the pages remain flush.
8485 \# *Notes:
8486 \#   In addition to its usual place at the beginning of a
8487 \#   document, EPIGRAPH may also be used after HEAD.
8489 .MAC DO_EPIGRAPH END
8490 .    br
8491 .    di
8492 .    rr #IN_DIVER
8493 .    if \\n[#RESET_FN_COUNTERS]=2 \{\
8494 .       if !\\n[#FN_COUNT]=1 \{\
8495 .          if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
8496 .             DIVER_FN_2_POST
8497 .             rr #RESET_FN_COUNTERS
8498 .          \}
8499 .       \}
8500 .    \}
8501 .    nr #SAVED_FN_NUMBER \\n[#FN_NUMBER]
8502 .    nr #DONE_ONCE 0 1
8503 .    REMOVE_INDENT
8504 .    ev
8505 .    nr #EPI_DEPTH \\n[#DIVER_DEPTH]-\\n[#EPI_LEAD]
8506 .    nr #EPI_LINES \\n[#EPI_DEPTH]/\\n[#EPI_LEAD]
8507 .    ie \\n[#START] \{\
8508 .       RLD \\n[#SHIM]u
8509 .       nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
8510 .       while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8511 .             nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
8513 .       if \\n[#PRINT_STYLE]=1 \{\
8514 .          if !\\n[#SINGLE_SPACE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
8515 .       \}
8516 .       if \\n[#PRINT_STYLE]=2 \{\
8517 .          ie !\\n[#DOC_TYPE]=2 \{ .RLD \\n[#DOC_LEAD]u \}
8518 .          el \{\
8519 .             ie '\\*[$CHAPTER_TITLE]'' \{ .RLD \\n[#DOC_LEAD]u \}
8520 .             el \{\
8521 .                if '\\*[$CHAPTER]'' \{ .RLD \\n[#DOC_LEAD]u \}
8522 .             \}
8523 .          \}
8524 .          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
8525 .             ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
8526 .          \}
8527 .          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8528 .             ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
8529 .          \}
8530 .       \}
8531 .    \}
8532 .    el \{\
8533 .       ie \\n[#EPI_DEPTH]<\\n[#TRAP_DISTANCE] \{\
8534 .          nr #EPI_FITS 1
8535 .          nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
8536 .          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8537 .                nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
8539 .          ie \\n[#PRINT_STYLE]=1 \{\
8540 .             if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u/2u \}
8541 .          \}
8542 .          el \{\
8543 .             if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
8544 .                ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
8545 .             \}
8546 .             if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8547 .                ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
8548 .             \}
8549 .          \}
8550 .          if \\n[#DIVER_FN]=2 \{ .rr #DIVER_FN \}
8551 .       \}
8552 .       el \{\
8553 .          nr #EPI_LINES_TO_TRAP 0 1
8554 .          while \\n[#EPI_LEAD]*\\n+[#EPI_LINES_TO_TRAP]<\\n[#TRAP_DISTANCE] \{\
8555 .                nr #LOOP 1
8557 .          nr #EPI_LINES_TO_TRAP -1
8558 .          nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_TRAP]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_TRAP]*\\n[#EPI_LEAD])
8559 .          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8560 .                nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
8562 .          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u \}
8563 .          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u-\\n[#DOC_LEAD]u \}
8564 .      \}
8565 .    \}
8566 .    if \\n[#EPIGRAPH]=1 \{\
8567 .       po \\n[#L_MARGIN]u
8568 .       if \\n[#COLUMNS] \{\
8569 .          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
8570 .          nr #L_MARGIN \\n(.o
8571 .       \}
8572 .    \}
8573 .    if \\n[#EPIGRAPH]=2 \{\
8574 .       ie r#EPI_OFFSET_VALUE \{\
8575 .          nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
8576 .       \}
8577 .       el \{ .nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE] \}
8578 .       if \\n[#COLUMNS] \{\
8579 .          ie r#EPI_OFFSET_VALUE \{\
8580 .             nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
8581 .          \}
8582 .          el \{ .nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE] \}
8583 .       \}
8584 .       po \\n[#EPI_OFFSET]u
8585 .    \}
8586 .    nf
8587 .    EPI_TEXT
8588 .    br
8589 .    ie \\n[#START] \{\
8590 .       if \\n[#PRINT_STYLE]=1 \{\
8591 .          SHIM
8592 .       \}
8593 .       if \\n[#PRINT_STYLE]=2 \{\
8594 .          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
8595 .             ALD \\n[#EPI_WHITESPACE]u/2u
8596 .          \}
8597 .          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8598 .             ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
8599 .          \}
8600 .          SHIM
8601 .       \}
8602 .    \}
8603 .    el \{\
8604 .       rr #EPI_ACTIVE
8605 .       ie \\n[#EPI_FITS] \{\
8606 .          ie \\n[#FN_FOR_EPI] \{\
8607 .             nr #EPI_LINES_TO_END 1
8608 .             nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
8609 .             while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8610 .                   nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
8612 .             ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
8613 .          \}
8614 .          el \{\
8615 .             ie \\n[#PRINT_STYLE]=1 \{\
8616 .                if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u \}
8617 .             \}
8618 .             el \{\
8619 .                if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
8620 .                   ALD \\n[#EPI_WHITESPACE]u/2u
8621 .                \}
8622 .                if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8623 .                   ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
8624 .                \}
8625 .             \}
8626 .          \}
8627 .       \}
8628 .       el \{\
8629 .          nr #EPI_LINES_TO_END \\n[#EPI_LINES]-\\n[#EPI_LINES_TO_TRAP]
8630 .          if \\n[#LOOP] \{ .nr #EPI_LINES_TO_END +1 \}
8631 .          rr #LOOP
8632 .          nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
8633 .          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8634 .                nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
8636 .          ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
8637 .          if \\n[#PRINT_STYLE]=1 \{\
8638 .             if !\\n[#SINGLE_SPACE] \{\
8639 .                nr #EPI_LINES_EVEN \\n[#EPI_LINES_TO_END]%2
8640 .                ie \\n[#EPI_LINES_EVEN] \{ .ALD .5v \}
8641 .                el \{ .RLD .5v \}
8642 .                rr #EPI_LINES_EVEN
8643 .             \}
8644 .          \}
8645 .       \}
8646 .    \}
8647 .    nr #PP_STYLE 1
8648 .    rr #EPI_FITS
8649 .    ALD \\n[#DOC_LEAD]u
8650 .    QUAD \\*[$DOC_QUAD]
8651 .    po \\n[#L_MARGIN]u
8652 .    if \\n[#COLUMNS] \{\
8653 .       po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
8654 .       nr #L_MARGIN \\n(.o
8655 .    \}
8656 .    if \\n[#START] \{\
8657 .       if \\n[#COLUMNS] \{\
8658 .          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
8659 .          nr #L_MARGIN \\n(.o
8660 .          mk dc
8661 .       \}
8662 .    \}
8663 .    if \\n[#LINENUMBERS]=2 \{\
8664 .       NUMBER_LINES RESUME
8665 .       nr #LINENUMBERS 1
8666 .    \}
8667 .END
8669 \# ====================================================================
8671 \# +++FINIS MACRO+++
8673 \# FINIS
8674 \# -----
8675 \# *Arguments:
8676 \#   <none>
8677 \# *Function:
8678 \#   Deposits --END-- at the end of a document.
8680 .MAC FINIS END
8681 .    br
8682 .    ev FINIS
8683 .    evc 0
8684 .    if \\n[#TAB_ACTIVE] \{ .TQ \}
8685 .    if \\n[#INDENT_ACTIVE] \{ .IQ CLEAR \}
8686 .    nr #EM_ADJUST (1m/8)
8687 .    if \\n[#COLUMNS] \{\
8688 .       po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
8689 .       nr #L_MARGIN \\n(.o
8690 .    \}
8691 .    ALD \\n[#DOC_LEAD]u
8692 .    CENTER
8693 .    if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS \}
8694 .    if \\n[#PRINT_STYLE]=1 \{ .PRINT "--\\*[$FINIS_STRING]--\}
8695 .    if \\n[#PRINT_STYLE]=2 \{\
8696 .       ie \\n[#FINIS_COLOR] \{\
8697 .          PRINT "\m[\\*[$FINIS_COLOR]]\v'-\\n[#EM_ADJUST]u'\(em\v'+\\n[#EM_ADJUST]u'\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\(em\m[]
8698 .       \}
8699 .       el \{ .PRINT \v'-\\n[#EM_ADJUST]u'\(em\v'+\\n[#EM_ADJUST]u'\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\(em\m[] \}
8700 .    \}
8701 .    if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS OFF \}
8702 .    ev
8703 .END
8705 \# ====================================================================
8707 \# +++HEADERS/FOOTERS+++
8709 \# Define a string so that the current page number can be incorporated
8710 \# into the strings for hdrftr left, right, and center.  NOTE: This is
8711 \# not the same thing as using the shortform # in hdrftr strings.
8713 .ds PAGE# \En[#PAGENUMBER]
8716 \# HDRFTR RULE GAP
8717 \# ---------------
8718 \# *Argument:
8719 \#   <amount of space between header/footer and header/footer rule>
8720 \# *Function:
8721 \#   Creates or modifies register #HDRFTR_RULE_GAP to hold amount
8722 \#   of space between header/footer and header/footer rule.
8723 \# *Notes:
8724 \#   Default is 4p.
8726 .MAC HDRFTR_RULE_GAP END
8727 .    nr #HDRFTR_RULE_GAP (\\$1)
8728 .    if '\\$0'HEADER_RULE_GAP' \{\
8729 .       nr #HEADER_RULE_GAP \\n[#HDRFTR_RULE_GAP]
8730 .       if r#FOOTER_RULE_GAP \{ .nr #FOOTER_RULE_GAP \\n[#FOOTER_RULE_GAP] \}
8731 .    \}
8732 .    if '\\$0'FOOTER_RULE_GAP' \{\
8733 .       nr #FOOTER_RULE_GAP \\n[#HDRFTR_RULE_GAP]
8734 .       if r#HEADER_RULE_GAP \{ .nr #HEADER_RULE_GAP \\n[#HEADER_RULE_GAP] \}
8735 .    \}
8736 .END
8739 \# HDRFTR LEFT
8740 \# -----------
8741 \# *Argument:
8742 \#   <what to put in the left position of page header/footers>
8743 \# *Function:
8744 \#   Creates or modifies string $HDRFTR_LEFT.
8745 \#   Creates register #USER_DEF_HDRFTR_LEFT, which, if 1,
8746 \#   overrides the $HDRFTR_LEFT string created by default
8747 \#   in DEFAULTS.
8748 \# *Notes:
8749 \#   Especially useful if doc has more than one author, and a list
8750 \#   of authors by last name is desired in header/footers.
8751 \#   Default is author.
8753 \#   If the argument is the # character, simply prints the current
8754 \#   page number.
8756 \#   If the user wants to *incorporate* the page number into the string,
8757 \#   \*[PAGE#] must be used.  For example, if the user wants to put
8758 \#   an elipsis before the page number in the string, s/he should use
8759 \#   ...\*[PAGE#], not ...#
8761 .MAC HDRFTR_LEFT END
8762 .    nr #USER_DEF_HDRFTR_LEFT 1
8763 .    ds $HDRFTR_LEFT \\$1
8764 .END
8767 \# HDRFTR LEFT CAPS
8768 \# ----------------
8769 \# *Argument:
8770 \#   <none> | <anything>
8771 \# *Function:
8772 \#   Turns capitalisation of $HDRFTR_LEFT (typically, the author of
8773 \#   the document) on or off.
8774 \# *Notes:
8775 \#   Default is on.
8777 .MAC HDRFTR_LEFT_CAPS END
8778 .    ie '\\$1'' \{\
8779 .        nr #HDRFTR_LEFT_CAPS 1
8780 .    \}
8781 .    el \{\
8782 .       nr #HDRFTR_LEFT_CAPS 0
8783 .       ds $HDRFTR_LEFT_SIZE_CHANGE +0
8784 .    \}
8785 .END
8788 \# HDRFTR CENTER
8789 \# -------------
8790 \# *Argument:
8791 \#   <what to put in the centre position of page header/footers>
8792 \# *Function:
8793 \#   Creates or modifies string $HDRFTR_CENTER.
8794 \#   Creates register #USER_DEF_HDRFTR_CENTER, which, if 1,
8795 \#   overrides the $HDRFTR_CENTER string created by default
8796 \#   in COPYSTYLE.
8797 \# *Notes:
8798 \#   Default is document type if DOCTYPE NAMED, Chapter # if DOCTYPE
8799 \#   CHAPTER, draft and revision number if COPYSTYLE DRAFT.
8801 \#   If the argument is the # character, simply prints the current
8802 \#   page number.
8804 \#   If the user wants to *incorporate* the page number into the string,
8805 \#   \*[PAGE#] must be used.  For example, if the user wants to put
8806 \#   an elipsis before the page number in the string, s/he should use
8807 \#   ...\*[PAGE#], not ...#
8809 .MAC HDRFTR_CENTER END
8810 .    nr #USER_DEF_HDRFTR_CENTER 1
8811 .    if '\\$0'FOOTER_CENTER' \{\
8812 .       ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
8813 .       ds $HDRFTR_CENTER_NEW \\$1
8814 .    \}
8815 .    if '\\$0'FOOTER_CENTRE' \{\
8816 .       ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
8817 .       ds $HDRFTR_CENTER_NEW \\$1
8818 .    \}
8819 .    ds $HDRFTR_CENTER \\$1
8820 .END
8823 \# HDRFTR CENTER CAPS
8824 \# ------------------
8825 \# *Argument:
8826 \#   <none> | <anything>
8827 \# *Function:
8828 \#   Turns capitalisation of $HDRFTR_CENTER (typically, doctype of
8829 \#   the document) on or off.
8830 \# *Notes:
8831 \#   Default is on.
8833 .MAC HDRFTR_CENTER_CAPS END
8834 .    ie '\\$1'' \{\
8835 .       nr #HDRFTR_CENTER_CAPS 1
8836 .    \}
8837 .    el \{\
8838 .       nr #HDRFTR_CENTER_CAPS 0
8839 .       ds $HDRFTR_CENTER_SIZE_CHANGE +0
8840 .    \}
8841 .END
8844 \# HDRFTR CENTER PADDING
8845 \# ---------------------
8846 \# *Argument:
8847 \#   LEFT | RIGHT <amount of padding to put left or right of hdrftr
8848 \#   center string>
8849 \# *Function:
8850 \#   Creates or modifies registers #HDRFTR_CTR_PAD_LEFT or
8851 \#   #HDRFTR_CTR_PAD_RIGHT.
8852 \# *Notes:
8853 \#   By default, the HDRFTR_CENTER string is centered on the doc
8854 \#   line length.  Long titles or long author names can screw up
8855 \#   visual centering, or create overprints.  This macro allows the
8856 \#   user to pad the center string by the specified amount of space
8857 \#   to fix these problems.  Use only one of LEFT or RIGHT.
8859 \#   A unit of measure is required.
8861 .MAC HDRFTR_CENTER_PAD END
8862 .    if '\\$1'LEFT' \{\
8863 .       nr #HDRFTR_CTR_PAD_LEFT (\\$2)
8864 .    \}
8865 .    if '\\$1'RIGHT' \{\
8866 .       nr #HDRFTR_CTR_PAD_RIGHT (\\$2)
8867 .    \}
8868 .END
8871 \# SWITCH HDRFTR CENTER PADDING SIDE - support macro
8872 \# --------------------------------
8873 \# *Argument:
8874 \#   <none>
8875 \# *Function:
8876 \#   Switches the padding side of hdrftr center padding.
8877 \# *Notes:
8878 \#   Required to keep spacing around hdrftr string constant
8879 \#   in recto/verso documents.
8881 .MAC SWITCH_HDRFTR_CENTER_PAD END
8882 .    nr #HDRFTR_CTR_PAD_TMP  \\n[#HDRFTR_CTR_PAD_LEFT]
8883 .    HDRFTR_CENTER_PAD LEFT  \\n[#HDRFTR_CTR_PAD_RIGHT]u
8884 .    HDRFTR_CENTER_PAD RIGHT \\n[#HDRFTR_CTR_PAD_TMP]u
8885 .END
8888 \# HDRFTR RIGHT
8889 \# ------------
8890 \# *Argument:
8891 \#   <what to put in the right position of page header/footers>
8892 \# *Function:
8893 \#   Creates or modifies string $HDRFTR_RIGHT.
8894 \#   Creates register #USER_DEF_HDRFTR_RIGHT, which, if 1,
8895 \#   overrides the $HDRFTR_RIGHT string created by default
8896 \#   in DEFAULTS.
8897 \# *Notes:
8898 \#   Default is document title.
8900 \#   If the argument is the # character, simply prints the current
8901 \#   page number.
8903 \#   If the user wants to *incorporate* the page number into the string,
8904 \#   \*[PAGE#] must be used.  For example, if the user wants to put
8905 \#   an elipsis before the page number in the string, s/he should use
8906 \#   ...\*[PAGE#], not ...#
8908 .MAC HDRFTR_RIGHT END
8909 .    nr #USER_DEF_HDRFTR_RIGHT 1
8910 .    ds $HDRFTR_RIGHT \\$1
8911 .END
8914 \# HDRFTR RIGHT CAPS
8915 \# -----------------
8916 \# *Argument:
8917 \#   <none> | <anything>
8918 \# *Function:
8919 \#   Turns capitalisation of $HDRFTR_RIGHT (typically, the title of
8920 \#   the document) on or off.
8921 \# *Notes:
8922 \#   Default is on.
8924 .MAC HDRFTR_RIGHT_CAPS END
8925 .    ie '\\$1'' \{\
8926 .       nr #HDRFTR_RIGHT_CAPS 1
8927 .    \}
8928 .    el \{\
8929 .       nr #HDRFTR_RIGHT_CAPS 0
8930 .       ds $HDRFTR_RIGHT_SIZE_CHANGE +0
8931 .    \}
8932 .END
8935 \# HDRFTR RULE
8936 \# -----------
8937 \# *Arguments:
8938 \#   <none> | <anything>
8939 \# *Function:
8940 \#   If invoked via the alias HDRFTR_RULE_INTERNAL in HDRFTR, prints a rule
8941 \#   under the header/over the footer.  Otherwise, turns HDRFTR_RULE
8942 \#   on or off.
8944 .MAC HDRFTR_RULE END   \"To print rule under header/over footer.
8945 .    if \\n[#HEADERS_ON] \{ .nr #HDRFTR_RULE_GAP \\n[#HEADER_RULE_GAP] \}
8946 .    if \\n[#FOOTERS_ON] \{ .nr #HDRFTR_RULE_GAP \\n[#FOOTER_RULE_GAP] \}
8947 .    if '\\$0'HDRFTR_RULE_INTERNAL' \{\
8948 .       ie \\n[#USERDEF_HDRFTR] \{\
8949 .          nr #CAP_HEIGHT_ADJUST \\n[#HDRFTR_HEIGHT]
8950 .          if \\n[#HEADERS_ON] \{\
8951 .             rt \\nyu
8952 .             ALD \\n[#HDRFTR_RULE_GAP]u
8953 .             nr #HDRFTR_RULE_WEIGHT     \\n[#HEADER_RULE_WEIGHT]
8954 .             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ]
8955 .          \}
8956 .          if \\n[#FOOTERS_ON] \{\
8957 .             rt \\nyu
8958 .             RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u
8959 .             nr #HDRFTR_RULE_WEIGHT     \\n[#FOOTER_RULE_WEIGHT]
8960 .             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ]
8961 .          \}
8962 .          ie \\n[#HDRFTR_RULE_COLOR]=1 \{\
8963 \m[\\*[$HDRFTR_RULE_COLOR]]\
8964 \D't \\n[#HDRFTR_RULE_WEIGHT]u'\
8965 \h'|0'\
8966 \v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
8967 \D'l \\n[#DOC_L_LENGTH]u 0'\
8968 \D't \\n[#RULE_WEIGHT]u'\
8969 \h'-\\n[#RULE_WEIGHT]u'\
8970 \m[]
8971 .          \}
8972 .          el \{\
8973 \D't \\n[#HDRFTR_RULE_WEIGHT]u'\
8974 \h'|0'\
8975 \v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
8976 \D'l \\n[#DOC_L_LENGTH]u 0'\
8977 \D't \\n[#RULE_WEIGHT]u'\
8978 \h'-\\n[#RULE_WEIGHT]u'
8979 .          \}
8980 .          br
8981 .       \}
8982 .       el \{\
8983 .          if \\n[#PRINT_STYLE]=1 \{\
8984 .             nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT]
8985 .          \}
8986 .          if \\n[#PRINT_STYLE]=2 \{\
8987 .             ie \\n[#LEFT_CAP_HEIGHT]>\\n[#CENTER_CAP_HEIGHT] \{\
8988 .                nr #CAP_HEIGHT_ADJUST \\n[#LEFT_CAP_HEIGHT]
8989 .             \}
8990 .             el \{ .nr #CAP_HEIGHT_ADJUST \\n[#CENTER_CAP_HEIGHT] \}
8991 .             ie \\n[#CAP_HEIGHT_ADJUST]>\\n[#RIGHT_CAP_HEIGHT] \{\
8992 .                nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT_ADJUST]
8993 .             \}
8994 .             el \{ .nr #CAP_HEIGHT_ADJUST \\n[#RIGHT_CAP_HEIGHT] \}
8995 .          \}
8996 .          if \\n[#HEADERS_ON] \{\
8997 .             rt \\nyu
8998 .             ALD \\n[#HDRFTR_RULE_GAP]u
8999 .             nr #HDRFTR_RULE_WEIGHT     \\n[#HEADER_RULE_WEIGHT]
9000 .             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ]
9001 .          \}
9002 .          if \\n[#FOOTERS_ON] \{\
9003 .             rt \\nyu
9004 .             RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u
9005 .             nr #HDRFTR_RULE_WEIGHT     \\n[#FOOTER_RULE_WEIGHT]
9006 .             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ]
9007 .          \}
9008 .          ie \\n[#HDRFTR_RULE_COLOR]=1 \{\
9009 \m[\\*[$HDRFTR_RULE_COLOR]]\
9010 \D't \\n[#HDRFTR_RULE_WEIGHT]u'\
9011 \h'|0'\
9012 \v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
9013 \D'l \\n[#DOC_L_LENGTH]u 0'\
9014 \D't \\n[#RULE_WEIGHT]u'\
9015 \h'-\\n[#RULE_WEIGHT]u'\
9016 \m[]
9017 .          \}
9018 .          el \{\
9019 \D't \\n[#HDRFTR_RULE_WEIGHT]u'\
9020 \h'|0'\
9021 \v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
9022 \D'l \\n[#DOC_L_LENGTH]u 0'\
9023 \D't \\n[#RULE_WEIGHT]u'\
9024 \h'-\\n[#RULE_WEIGHT]u'
9025 .          \}
9026 .          br
9027 .       \}
9028 .    \}
9029 .    if '\\$0'HEADER_RULE' \{\
9030 .       nr #HEADERS_ON  1
9031 .       ie '\\$1'' \{\
9032 .          nr #HEADER_RULE 1
9033 .          nr #HDRFTR_RULE 1
9034 .       \}
9035 .       el \{\
9036 .          nr #HEADER_RULE 0
9037 .          nr #HDRFTR_RULE 0
9038 .       \}
9039 .    \}
9040 .    if '\\$0'FOOTER_RULE' \{\
9041 .       nr #FOOTERS_ON  1
9042 .       ie '\\$1'' \{\
9043 .          nr #FOOTER_RULE 1
9044 .          nr #HDRFTR_RULE 1
9045 .       \}
9046 .       el \{\
9047 .          nr #FOOTER_RULE 0
9048 .          nr #HDRFTR_RULE 0
9049 .       \}
9050 .    \}
9051 .    if '\\$0'HDRFTR_RULE' \{\
9052 .       ie '\\$1'' \{ .nr #HDRFTR_RULE 1 \}
9053 .       el         \{ .nr #HDRFTR_RULE 0 \}
9054 .    \}
9055 .END
9058 .ALIAS HDRFTR_RULE_INTERNAL HDRFTR_RULE
9061 \# HDRFTR PLAIN
9062 \# ------------
9063 \# *Arguments:
9064 \#   <none>
9065 \# *Function:
9066 \#   Sets the family, font, and point size of all strings in
9067 \#   header/footers to the same family and point size as running
9068 \#   text.  Font for the header/footer becomes roman throughout.
9070 .MAC HDRFTR_PLAIN END
9071 .    HDRFTR_FAMILY        \\*[$DOC_FAM]
9072 .    HDRFTR_PT_SIZE       \\n[#DOC_PT_SIZE]
9073 .    HDRFTR_LEFT_FAMILY   \\*[$DOC_FAM]
9074 .    HDRFTR_LEFT_FONT     R
9075 .    HDRFTR_LEFT_SIZE     +0
9076 .    HDRFTR_LEFT_CAPS     OFF
9077 .    HDRFTR_CENTER_FAMILY \\*[$DOC_FAM]
9078 .    HDRFTR_CENTER_FONT   R
9079 .    HDRFTR_CENTER_SIZE   +0
9080 .    HDRFTR_CENTER_CAPS   OFF
9081 .    HDRFTR_RIGHT_FAMILY  \\*[$DOC_FAM]
9082 .    HDRFTR_RIGHT_FONT    R
9083 .    HDRFTR_RIGHT_SIZE    +0
9084 .    HDRFTR_RIGHT_CAPS    OFF
9085 .END
9088 \# SWITCH HDRFTR
9089 \# -------------
9090 \# *Arguments:
9091 \#   <none> | <anything>
9092 \# *Function:
9093 \#   Creates or modifies register #SWITCH_HDRFTR, used to switch
9094 \#   default location of HDRFTR_LEFT and HDRFTR_RIGHT.
9095 \# *Notes:
9096 \#   Default is OFF.
9098 \# Typically, the author string appears at the left of header/footers,
9099 \# and the title string appears at the right.  This switches the
9100 \# location of the two.  Useful in conjuction with RECTO_VERSO to tweak
9101 \# switches on alternate pages to come out as the user wishes.  The
9102 \# assumption of RECTO_VERSO is that the first page of the document
9103 \# (recto) is odd, and even though it has no header/footer, if it did
9104 \# have one, it would print as AUTHOR...CENTER...TITLE (or whatever
9105 \# strings the user has supplied for HDRFTR_LEFT/RIGHT), meaning that
9106 \# the next page, which does have a header/footer, will come out as
9107 \# TITLE...CENTER...AUTHOR (or whatever strings the user has supplied
9108 \# for HDRFTR_LEFT/RIGHT).  SWITCH_HDRFTRS allows the user to get the
9109 \# desired string in the desired place on the desired recto/verso page.
9110 \# 
9111 .MAC SWITCH_HDRFTR END
9112 .    ie '\\$1'' \{ .nr #SWITCH_HDRFTR 1 \}
9113 .    el \{ .nr #SWITCH_HDRFTR 0 \}
9114 .END
9117 \# USER DEFINED HDRFTR RECTO
9118 \# -------------------------
9119 \# *Arguments:
9120 \#   L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_recto_string>
9121 \# *Function:
9122 \#   Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_RECTO_QUAD,
9123 \#   stores string in $USERDEF_HDRFTR_RECTO.
9124 \# *Notes:
9125 \#   For use when users don't want 3-part headers/footers, but rather
9126 \#   want to design their own headers/footers and need different
9127 \#   headers/footers on recto and verso pages.  Using just
9128 \#   HEADER_RECTO, even when recto/verso is not on, allows users to
9129 \#   design their own headers/footers for doc pages.
9131 .MAC HDRFTR_RECTO END
9132 .    nr #USERDEF_HDRFTR 1
9133 .    if '\\$1'L'      \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 1 \}
9134 .    if '\\$1'LEFT'   \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 1 \}
9135 .    if '\\$1'C'      \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
9136 .    if '\\$1'CENTER' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
9137 .    if '\\$1'CENTRE' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
9138 .    if '\\$1'R'      \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 3 \}
9139 .    if '\\$1'RIGHT'  \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 3 \}
9140 .    shift
9141 .    if '\\$1'CAPS' \{ .nr #HDRFTR_RECTO_CAPS 1 \}
9142 .    ds $USERDEF_HDRFTR_RECTO \\$2
9143 .END
9146 \# USER DEFINED HDRFTR VERSO
9147 \# -------------------------
9148 \# *Arguments:
9149 \#   L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_verso_string>
9150 \# *Function:
9151 \#   Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_VERSO_QUAD,
9152 \#   stores string in $USERDEF_HDRFTR_VERSO.
9153 \# *Notes:
9154 \#   For use when users don't want 3-part headers/footers, but rather
9155 \#   want to design their own headers/footers and need different
9156 \#   headers/footers on recto and verso pages.
9158 .MAC HDRFTR_VERSO END
9159 .    nr #USERDEF_HDRFTR 1
9160 .    if '\\$1'L'      \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 1 \}
9161 .    if '\\$1'LEFT'   \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 1 \}
9162 .    if '\\$1'C'      \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
9163 .    if '\\$1'CENTER' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
9164 .    if '\\$1'CENTRE' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
9165 .    if '\\$1'R'      \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 3 \}
9166 .    if '\\$1'RIGHT'  \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 3 \}
9167 .    shift
9168 .    if '\\$1'CAPS' \{ .nr #HDRFTR_VERSO_CAPS 1 \}
9169 .    ds $USERDEF_HDRFTR_VERSO \\$2
9170 .END
9172 \# PRINT FOOTER ON FIRST PAGE
9173 \# --------------------------
9174 \# *Arguments:
9175 \#   <none> | <anything>
9176 \# *Function:
9177 \#   Toggles register #PRINT_FOOTER_ON_PAGE_1
9178 \# *Notes:
9179 \#   Lets user choose whether to print footer on first
9180 \#   page of doc.
9182 .MAC FOOTER_ON_FIRST_PAGE END
9183 .    ie '\\$1'' \{ .nr #PRINT_FOOTER_ON_PAGE_1 1 \}
9184 .    el \{ .rr #PRINT_FOOTER_ON_PAGE_1 \}
9185 .END
9188 \# PRINT PAGE NUMBER ON FIRST PAGE
9189 \# -------------------------------
9190 \# *Arguments:
9191 \#   <none> | <anything>
9192 \# *Function:
9193 \#   Toggles register #PRINT_PAGENUM_ON_PAGE_1
9194 \# *Notes:
9195 \#   Lets user choose whether to print page number on first
9196 \#   page of doc and after collate when footers are on or page numbering
9197 \#   has been user set at top of page.
9199 .MAC PAGENUM_ON_FIRST_PAGE END
9200 .    ie '\\$1'' \{ .nr #PRINT_PAGENUM_ON_PAGE_1 1 \}
9201 .    el \{ .rr #PRINT_PAGENUM_ON_PAGE_1 \}
9202 .END
9205 \# PRINT HEADER/FOOTER
9206 \# -------------------
9207 \# *Arguments:
9208 \#   <none>
9209 \# *Function:
9210 \#   Based on defaults or values entered by user, prints a
9211 \#   three-part title at either the top or the bottom of the page.
9212 \# *Notes:
9213 \#   Called from within either HEADER or FOOTER.
9215 .MAC PRINT_HDRFTR END
9216 .    if \\n[#DOC_TYPE]=4 \{\
9217 .       nr #SUITE \En[.pn]
9218 .    \}
9219 .    if \\n[#FOOTERS_ON] \{\
9220 .       if \\n[#START_FOR_FOOTERS] \{\
9221 .          rr #START_FOR_FOOTERS
9222 .          if !\\n[#PRINT_FOOTER_ON_PAGE_1] \{\
9223 .             ie !\\n[#HDRFTR_BOTH] \{ .return \}
9224 .             el \{\
9225 .                rr #FOOTERS_ON
9226 .                nr #HEADERS_ON 1
9227 .                ie \\n[#HEADER_RULE]=1 \{ .HEADER_RULE \}
9228 .                el \{ .HEADER_RULE OFF \}
9229 .                HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
9230 .                return
9231 .             \}
9232 .          \}
9233 .       \}
9234 .    \}
9235 .    if \\n[#USERDEF_HDRFTR] \{\
9236 .       PRINT_USERDEF_HDRFTR
9237 .       return
9238 .    \}
9239 .    if \\n[#SWITCH_HDRFTR] \{\
9240 .       ds $HDRFTR_TMP_SWITCH             \\*[$HDRFTR_LEFT]
9241 .       ds $HDRFTR_LEFT                   \\*[$HDRFTR_RIGHT]
9242 .       ds $HDRFTR_RIGHT                  \\*[$HDRFTR_TMP_SWITCH]
9243 .       ds $HDRFTR_TMP_SIZE_CHANGE_SWITCH \\*[$HDRFTR_LEFT_SIZE_CHANGE]
9244 .       ds $HDRFTR_LEFT_SIZE_CHANGE       \\*[$HDRFTR_RIGHT_SIZE_CHANGE]
9245 .       ds $HDRFTR_RIGHT_SIZE_CHANGE      \\*[$HDRFTR_TMP_SIZE_CHANGE_SWITCH]
9246 .       nr #HDRFTR_TMP_CAPS_SWITCH        \\n[#HDRFTR_LEFT_CAPS]
9247 .       nr #HDRFTR_LEFT_CAPS              \\n[#HDRFTR_RIGHT_CAPS]
9248 .       nr #HDRFTR_RIGHT_CAPS             \\n[#HDRFTR_TMP_CAPS_SWITCH]
9249 .       ds $HDRFTR_TMP_COLOR_SWITCH       \\*[$HDRFTR_LEFT_COLOR]
9250 .       ds $HDRFTR_LEFT_COLOR             \\*[$HDRFTR_RIGHT_COLOR]
9251 .       ds $HDRFTR_RIGHT_COLOR            \\*[$HDRFTR_TMP_COLOR_SWITCH]
9252 .       rr #HDRFTR_TMP_CAPS_SWITCH
9253 .       rm $HDRFTR_TMP_SWITCH
9254 .       rm $HDRFTR_TMP_SIZE_CHANGE_SWITCH
9255 .       rm $HDRFTR_TMP_COLOR_SWITCH
9256 .       nr #SWITCH_HDRFTR 0
9257 .    \}
9258 .    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
9259 .    if \\n[#ENDNOTES] \{ .PAGENUM_STYLE \\*[$EN_PN_STYLE] \}
9260 .    if \\n[#PRINT_STYLE]=1 \{\
9261 .       if \\n[#FOOTERS_ON] \{\
9262 .          di NULL
9263 .          SIZESPECS
9264 .          nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
9265 .          di
9266 .       \}
9267 .       if o                        \{ .RIGHT \}
9268 .       if e                        \{ .LEFT  \}
9269 .       if \\n[#RECTO_VERSO]=0      \{ .LEFT  \}
9270 .       if \\n[#HDRFTR_LEFT_CAPS]   \{ .CAPS  \}
9271 .       ie '\\*[$HDRFTR_LEFT]'#' \{\
9272 .           PRINT \\n[#PAGENUMBER]
9273 .       \}
9274 .       el \{\
9275 .          ie !'\\*[$HDRFTR_LEFT]'' \{ . PRINT \\*[$HDRFTR_LEFT] \}
9276 .          el \{ .PRINT \& \}
9277 .       \}
9278 .       if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS OFF \}
9279 .       CENTER
9280 .       if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS \}
9281 .       rt \\nyu
9282 .       ie '\\*[$HDRFTR_CENTER]'#' \{\
9283 .           PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
9284 .       \}
9285 .       el \{\
9286 .          ie !'\\*[$HDRFTR_CENTER]'' \{ .PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u' \}
9287 .          el \{ .PRINT \& \}
9288 .       \}
9289 .       if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS OFF \}
9290 .       if o                        \{ .LEFT  \}
9291 .       if e                        \{ .RIGHT \}
9292 .       if \\n[#RECTO_VERSO]=0      \{ .RIGHT \}
9293 .       if \\n[#HDRFTR_RIGHT_CAPS]  \{ .CAPS  \}
9294 .       rt \\nyu
9295 .       ie '\\*[$HDRFTR_RIGHT]'#' \{\
9296 .           PRINT \\n[#PAGENUMBER]
9297 .       \}
9298 .       el \{\
9299 .          ie !'\\*[$HDRFTR_RIGHT]'' \{ .PRINT \\*[$HDRFTR_RIGHT] \}
9300 .          el \{ .PRINT \& \}
9301 .       \}
9302 .       if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS OFF \}
9303 .    \}
9304 .    if \\n[#PRINT_STYLE]=2 \{\
9305 .       if \\n[#HDRFTR_COLOR]=1 \{\
9306 .          nf
9307 \m[\\*[$HDRFTR_COLOR]]
9308 .       \}
9309 .       fam     \\*[$HDRFTR_LEFT_FAM]
9310 .       ft      \\*[$HDRFTR_LEFT_FT]
9311 .       ps      \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_LEFT_SIZE_CHANGE]
9312 .       vs      12
9313 .       if \\n[#FOOTERS_ON] \{\
9314 .          di NULL
9315 .          SIZESPECS
9316 .          nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
9317 .          di
9318 .       \}
9319 .       if o                      \{ .LEFT  \}
9320 .       if e                      \{ .RIGHT \}
9321 .       if \\n[#RECTO_VERSO]=0    \{ .LEFT  \}
9322 .       if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS  \}
9323 .       ie '\\*[$HDRFTR_LEFT]'#' \{\
9324 .          ie \\n[#HDRFTR_LEFT_COLOR]=1 \{\
9325 .             PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\n[#PAGENUMBER]\m[]
9326 .          \}
9327 .          el \{\
9328 .             PRINT \\n[#PAGENUMBER]
9329 .          \}
9330 .       \}
9331 .       el \{\
9332 .          ie !'\\*[$HDRFTR_LEFT]'' \{\
9333 .             ie \\n[#HDRFTR_LEFT_COLOR]=1 \{\
9334 .                 PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\*[$HDRFTR_LEFT]\m[]
9335 .             \}
9336 .             el \{\
9337 .                 PRINT \\*[$HDRFTR_LEFT]
9338 .             \}
9339 .          \}
9340 .          el \{ .PRINT \& \}
9341 .       \}
9342 .       if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS OFF \}
9343 .       fam     \\*[$HDRFTR_CENTER_FAM]
9344 .       ft      \\*[$HDRFTR_CENTER_FT]
9345 .       ps      \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_CENTER_SIZE_CHANGE]
9346 .       vs      12
9347 .       if \\n[#FOOTERS_ON] \{\
9348 .          di NULL
9349 .          SIZESPECS
9350 .          nr #CENTER_CAP_HEIGHT \\n[#CAP_HEIGHT]
9351 .          di
9352 .       \}
9353 .       CENTER
9354 .       if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS \}
9355 .       rt \\nyu
9356 .       ie '\\*[$HDRFTR_CENTER]'#' \{\
9357 .           ie \\n[#HDRFTR_CENTER_COLOR]=1 \{\
9358 .              PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\\n[#PAGENUMBER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[]
9359 .           \}
9360 .           el \{\
9361 .              PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
9362 .           \}
9363 .       \}
9364 .       el \{\
9365 .          ie !'\\*[$HDRFTR_CENTER]'' \{\
9366 .             ie \\n[#HDRFTR_CENTER_COLOR]=1 \{\
9367 .                PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\\*[$HDRFTR_CENTER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[]
9368 .             \}
9369 .             el \{\
9370 .                PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
9371 .             \}
9372 .          \}
9373 .          el \{ .PRINT \& \}
9374 .       \}
9375 .       if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS OFF \}
9376 .       fam     \\*[$HDRFTR_RIGHT_FAM]
9377 .       ft      \\*[$HDRFTR_RIGHT_FT]
9378 .       ps      \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_RIGHT_SIZE_CHANGE]
9379 .       vs      12
9380 .       if \\n[#FOOTERS_ON] \{\
9381 .          di NULL
9382 .          SIZESPECS
9383 .          nr #RIGHT_CAP_HEIGHT \\n[#CAP_HEIGHT]
9384 .          di
9385 .       \}
9386 .       if o                       \{ .RIGHT \}
9387 .       if e                       \{ .LEFT  \}
9388 .       if \\n[#RECTO_VERSO]=0     \{ .RIGHT \}
9389 .       if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS  \}
9390 .       rt \\nyu
9391 .       ie '\\*[$HDRFTR_RIGHT]'#' \{\
9392 .          ie \\n[#HDRFTR_RIGHT_COLOR]=1 \{\
9393 .             PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\n[#PAGENUMBER]\m[]
9394 .          \}
9395 .          el \{\
9396 .             PRINT \\n[#PAGENUMBER]
9397 .          \}
9398 .       \}
9399 .       el \{\
9400 .          ie !'\\*[$HDRFTR_RIGHT]'' \{\
9401 .             ie \\n[#HDRFTR_RIGHT_COLOR]=1 \{\
9402 .                PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\*[$HDRFTR_RIGHT]\m[]
9403 .             \}
9404 .             el \{\
9405 .                PRINT \\*[$HDRFTR_RIGHT]
9406 .             \}
9407 .          \}
9408 .          el \{ .PRINT \& \}
9409 .       \}
9410 .       if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS OFF \}
9411 .    \}
9412 .    if \\n[#HDRFTR_RULE] \{\
9413 .       HDRFTR_RULE_INTERNAL
9414 .    \}
9415 .    br
9416 .END
9419 \# PRINT USER DEFINED HEADER/FOOTER
9420 \# --------------------------------
9421 \# *Arguments:
9422 \#   <none>
9423 \# *Function:
9424 \#   Based on defaults or values entered by user, prints a single part
9425 \#   (i.e. not 3-part) title at either the top or the bottom of the page.
9426 \# *Notes:
9427 \#   Called from within PRINT_HDRFTR.
9429 .MAC PRINT_USERDEF_HDRFTR END
9430 .    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
9431 .    fc ^ #
9432 .    if \\n[#PRINT_STYLE]=2 \{\
9433 .       fam  \\*[$HDRFTR_FAM]
9434 .       ft      R
9435 .       ps \\n[#HDRFTR_PT_SIZE]u
9436 .       if \\n[#HDRFTR_COLOR]=1 \{\
9437 .          nf
9438 .          COLOR \\*[$HDRFTR_COLOR]
9439 .       \}
9440 .    \}
9441 .    ie \\n[#RECTO_VERSO] \{\
9442 .       if o \{\
9443 .          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT   \}
9444 .          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
9445 .          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT  \}
9446 .          if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS \}
9447 .          PRINT \\*[$USERDEF_HDRFTR_RECTO]
9448 .          if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS OFF \}
9449 .          EOL
9450 .          if \\n[#FOOTERS_ON] \{\
9451 .             di NULL
9452 .             SIZESPECS
9453 .             nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
9454 .             di
9455 .          \}
9456 .       \}
9457 .       if e \{\
9458 .          ie !'\\*[$USERDEF_HDRFTR_VERSO]'' \{\
9459 .             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=1 \{ .LEFT   \}
9460 .             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=2 \{ .CENTER \}
9461 .             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=3 \{ .RIGHT  \}
9462 .             if \\n[#HDRFTR_VERSO_CAPS]=1 \{ .CAPS \}
9463 .             PRINT \\*[$USERDEF_HDRFTR_VERSO]
9464 .             if \\n[#HDRFTR_VERSO_CAPS]=1 \{ .CAPS OFF \}
9465 .             EOL
9466 .             if \\n[#FOOTERS_ON] \{\
9467 .                di NULL
9468 .                SIZESPECS
9469 .                nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
9470 .                di
9471 .             \}
9472 .          \}
9473 .          el \{\
9474 .             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT   \}
9475 .             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
9476 .             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT  \}
9477 .             if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS \}
9478 .             PRINT \\*[$USERDEF_HDRFTR_RECTO]
9479 .             if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS OFF \}
9480 .             EOL
9481 .             if \\n[#FOOTERS_ON] \{\
9482 .                di NULL
9483 .                SIZESPECS
9484 .                nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
9485 .                di
9486 .             \}
9487 .          \}
9488 .       \}
9489 .    \}
9490 .    el \{\
9491 .       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT   \}
9492 .       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
9493 .       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT  \}
9494 .       if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS \}
9495 .       PRINT \\*[$USERDEF_HDRFTR_RECTO]
9496 .       if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS OFF \}
9497 .       EOL
9498 .       if \\n[#FOOTERS_ON] \{\
9499 .          di NULL
9500 .          SIZESPECS
9501 .          nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
9502 .          di
9503 .       \}
9504 .    \}
9505 .    fc
9506 .    if \\n[#PRINT_STYLE]=2 \{\
9507 .       ie \\n[#HDRFTR_COLOR]=1 \m[\\*[$HDRFTR_COLOR]]
9508 .       el \m[black]
9509 .    \}
9510 .    if \\n[#HDRFTR_RULE] \{\
9511 .       HDRFTR_RULE_INTERNAL
9512 .    \}
9513 .END
9516 \# +++HEADERS+++
9518 \# HEADERS (off or on)
9519 \# -------------------
9520 \# *Arguments:
9521 \#   <none> | <anything>
9522 \# *Function:
9523 \#   Turns headers at the top of the page off or on.
9524 \# *Notes:
9525 \#   Default is on.
9527 .MAC HEADERS END
9528 .    ie '\\$1'' \{ .nr #HEADERS_ON 1 \}
9529 .    el \{ .nr #HEADERS_ON 0 \}
9530 .END
9533 \# HEADER MARGIN
9534 \# -------------
9535 \# *Argument:
9536 \#   <amount of space between top of page and header>
9537 \# *Function:
9538 \#   Creates or modifies register #HEADER_MARGIN to hold amount
9539 \#   of space between top of page and header.
9540 \# *Notes:
9541 \#   Requires unit of measure.  Default is 4P+6p, measured top-of-page
9542 \#   to baseline.
9544 .MAC HEADER_MARGIN END
9545 .    nr #HEADER_MARGIN (\\$1)
9546 .END
9549 \# HEADER GAP
9550 \# ----------
9551 \# *Argument:
9552 \#   <amount of space between header and running text>
9553 \# *Function:
9554 \#   Creates or modifies register #HEADER_GAP to hold amount
9555 \#   of space between header and running text.
9556 \# *Notes:
9557 \#   Default is 1P+6p.
9559 .MAC HEADER_GAP END
9560 .    nr #HEADER_GAP (\\$1)
9561 .END
9564 \# HEADER
9565 \# ------
9566 \# *Arguments:
9567 \#   <none>
9568 \# *Function:
9569 \#   Prints header appropriate to DOC_TYPE, PRINTSTYLE, and COPYSTYLE.
9570 \# *Notes:
9571 \#   In order to convert the title string to caps in the header (in the
9572 \#   event that the user enters .TITLE in caps/lc), I've used
9573 \#   quad left, quad centre, and quad right to arrange the three bits
9574 \#   of the header, rather than .tl.  This allows the use of the CAPS macro.
9575 \#   The downside is that I have to add \\v'-(\\n[#LEAD]u*<n>) in order
9576 \#   for -Tlatin1 output to align the header/footer strings on the baseline.
9577 \#   The console output still isn't brilliant, but at least it's
9578 \#   comprehensible.
9580 .MAC HEADER END
9581 .    MNtop
9582 .    rr #FROM_FOOTER
9583 .    nr #FROM_HEADER 1
9584 .    nr #LAST_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]
9585 .    if \\n[#FN_DEPTH] \{ .PROCESS_FN_LEFTOVER \}
9586 .    rr #RULED
9587 .    if \\n[#RESET_FN_NUMBER] \{ .nr #FN_NUMBER 0 1 \}
9588 .    po \\n[#DOC_L_MARGIN]u
9589 .    if \\n[#RECTO_VERSO] \{\
9590 .       if !\\n[#TOC_RV_SWITCH] \{\
9591 .          nr #DOC_LR_MARGIN_TMP \\n[#DOC_L_MARGIN]
9592 .          DOC_LEFT_MARGIN  \\n[#DOC_R_MARGIN]u
9593 .          DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u
9594 .          SWITCH_HDRFTR_CENTER_PAD
9595 .       \}
9596 .       rr #TOC_RV_SWITCH
9597 .    \}
9598 .    ev HEADER
9599 .    if \\n[#PAGE_NUM_V_POS]=1 \{ .vs 0 \}
9600 .    sp |\\n[#HEADER_MARGIN]u-1v
9601 .    mk y
9602 .    ll \\n[#DOC_L_LENGTH]u
9603 .    ta \\n(.lu
9604 .    if \\n[#PRINT_STYLE]=1 \{\
9605 .       fam C
9606 .       ft  R
9607 .       ps  12\\*[$HDRFTR_SIZE_CHANGE]
9608 .    \}
9609 .    if \\n[#PRINT_STYLE]=2 \{\
9610 .      fam \\*[$HDRFTR_FAM]
9611 .      ft  R
9612 .      ps  \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
9613 .      vs  12
9614 .    \}
9615 .    nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
9616 .    if \\n[#CAPS_ON] \{\
9617 .       nr #CAPS_WAS_ON 1
9618 .       CAPS OFF
9619 .    \}
9620 .    if \\n[#UNDERLINE_ON] \{\
9621 .       nr #UNDERLINE_WAS_ON 1
9622 .       UNDERLINE OFF
9623 .    \}
9624 .    if \\n[#PRINT_STYLE]=1 \{\
9625 .       if \\n[#ENDNOTES]=1 \{\
9626 .\" Single-spaced endotes have a different lead
9627 .          if \\n[#EN_SINGLESPACE] \{\
9628 .             nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
9629 .             nr #DOC_LEAD \\n[#EN_LEAD]u
9630 .          \}
9631 .       \}
9632 .    \}
9633 .    nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
9634 .    RLD 1v
9635 .    ie \\n[#HEADERS_ON] \{\
9636 .       PRINT_HDRFTR
9637 .       sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
9638 .    \}
9639 .    el \{\
9640 .       ie \\n[#PAGE_NUM_V_POS]=1 \{\
9641 .          ie \\n[#PAGINATE] \{\
9642 .             PRINT_PAGE_NUMBER
9643 .             sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
9644 .          \}
9645 .          el \{ .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u \}
9646 .       \}
9647 .       el \{ .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u \}
9648 .    \}
9649 .    if \\n[#PRINT_STYLE]=1 \{\
9650 .       if \\n[#ENDNOTES]=1 \{\
9651 .          if \\n[#EN_SINGLESPACE] \{\
9652 .             nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
9653 .             rr #RESTORE_DOC_LEAD
9654 .          \}
9655 .       \}
9656 .    \}
9657 .    nr #PAGE_TOP \\n(nl
9658 .    ev
9659 .    po \\n[#L_MARGIN]u
9660 .    if \\n[#RECTO_VERSO] \{\
9661 .       nr #L_MARGIN +\\n[#L_MARGIN_DIFF]
9662 .    \}
9663 .    if \\n[#CAPS_WAS_ON] \{\
9664 .       CAPS
9665 .       rr #CAPS_WAS_ON
9666 .    \}
9667 .    if \\n[#UNDERLINE_WAS_ON] \{\
9668 .       UNDERLINE
9669 .       rr #UNDERLINE_WAS_ON
9670 .    \}
9671 .    if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9672 .    if \\n[#QUOTE] \{\
9673 .       ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9674 .       el \{\
9675 .          ie r#Q_OFFSET_VALUE \{\
9676 .             nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
9677 .          \}
9678 .          el \{\
9679 .             nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
9680 .          \}
9681 .          po \\n[#Q_OFFSET]u
9682 .       \}
9683 .       if \\n[#PRINTSTYLE]=2 \{ .ALD \\n[#Q_LEAD_DIFF]u \}
9684 .    \}
9685 .    if \\n[#EPIGRAPH] \{\
9686 .       ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9687 .       el \{\
9688 .          ie r#EPI_OFFSET_VALUE \{\
9689 .             nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
9690 .          \}
9691 .          el \{\
9692 .             nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
9693 .          \}
9694 .          po \\n[#EPI_OFFSET]u
9695 .       \}
9696 .    \}
9697 .    ie \\n[#EPIGRAPH] \{\
9698 .       ie !\\n[#EPI_ACTIVE] \{\
9699 .          ns
9700 .          rr #EPI_ACTIVE
9701 .       \}
9702 .       el \{\
9703 .          ie \\n[#EPI_FITS] \{ .ns \}
9704 .          el \{ .ALD \\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u \}
9705 .       \}
9706 .    \}
9707 .    el \{ .ns \}
9708 .    ns
9709 .    if \\n[#COLUMNS] \{\
9710 .       nr #FN_COUNT_FOR_COLS 0 1
9711 .       nr #L_MARGIN \\n[#DOC_L_MARGIN]
9712 .       if \\n[#RECTO_VERSO] \{ .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u \}
9713 .       nr #COL_NUM 0 1
9714 .       mk dc
9715 .       po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
9716 .       nr #L_MARGIN \\n(.o
9717 .       if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9718 .       ll \\n[#COL_L_LENGTH]u
9719 .       ta \\n(.lu
9720 .       if \\n[#QUOTE] \{\
9721 .          ie r#Q_OFFSET_VALUE \{\
9722 .             po +(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
9723 .          \}
9724 .          el \{\
9725 .             po +\\*[$Q_OFFSET_VALUE]
9726 .          \}
9727 .       \}
9728 .       if \\n[#EPIGRAPH] \{\
9729 .          if \\n[#EPI_ACTIVE] \{\
9730 .             ie \\n[#EPI_FITS] \{ . \}
9731 .             el \{ .nr dc -\\n[#EPI_LEAD_DIFF] \}
9732 .          \}
9733 .          ie r#EPI_OFFSET_VALUE \{\
9734 .             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+(\\n[#PP_INDENT]u*\\n[#EPI_OFFSET_VALUE]u)
9735 .          \}
9736 .          el \{\
9737 .             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+\\*[$EPI_OFFSET_VALUE]
9738 .          \}
9739 .       \}
9740 .    \}
9741 .    if \\n[#RESET_FN_COUNTERS]=1 \{\
9742 .       rr #RESET_FN_COUNTERS
9743 .       PROCESS_FN_IN_DIVER
9744 .       nr #FN_COUNT \\n[#SAVED_FN_COUNT] 1
9745 .       if \\n[#COLUMNS]=1 \{ .nr #FN_COUNT_FOR_COLS \\n[#SAVED_FN_COUNT_FOR_COLS] 1 \}
9746 .       ie \\n[#RESET_FN_NUMBER]=1 \{ .nr #FN_NUMBER \\n[#SAVED_FN_NUMBER] 1 \}
9747 .       el \{ .nr #FN_NUMBER \\n[#FN_NUMBER] 1 \}
9748 .       rm FN_IN_DIVER
9749 .       if dRUNON_FN_IN_DIVER \{ .rm RUNON_FN_IN_DIVER \}
9750 .    \}
9751 .    if \\n[#PRINT_STYLE]=1 \{\
9752 .       if \\n[#SLANT_ON] \{\
9753 .          if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
9754 .       \}
9755 .       if \\n[#UNDERLINE_ON]=1 \{\
9756 .          if \\n[#UNDERLINE_ITALIC] \{ .UNDERLINE \}
9757 .       \}
9758 .    \}
9759 .    rr #FROM_HEADER
9760 .    rr #DEFER_SPACE_ADDED
9761 .    if !\\n[#FN_DEPTH] \{\
9762 .       if r#DIVERTED \{ .rr #DIVERTED \}
9763 .    \}
9764 .    if \\n[#MN_OVERFLOW_LEFT]=1 \{\
9765 .       MN LEFT
9766 .       nf
9767 .       MN_OVERFLOW_LEFT
9768 .       MN
9769 .    \}
9770 .    if \\n[#MN_OVERFLOW_RIGHT]=1 \{\
9771 .       MN RIGHT
9772 .       nf
9773 .       MN_OVERFLOW_RIGHT
9774 .       MN
9775 .    \}
9776 .    rm MN_OVERFLOW_LEFT
9777 .    rr #MN_OVERFLOW_LEFT
9778 .    rr #no-repeat-MN-left
9779 .    rm MN_OVERFLOW_RIGHT
9780 .    rr #MN_OVERFLOW_RIGHT
9781 .    rr #no-repeat-MN-right
9782 .    if \\n[#PRE_COLLATE]=1 \{ .rr #PRE_COLLATE \}
9783 .END
9785 \# ====================================================================
9787 \# +++FOOTERS+++
9789 \# FOOTERS (off or on)
9790 \# -------------------
9791 \# *Arguments:
9792 \#   <none> | <anything>
9793 \# *Function:
9794 \#   Turns footers at the bottom of the page off or on.
9795 \# *Notes:
9796 \#   Default is off.  If on, page numbers automatically go at
9797 \#   the top, centered, unless pagination has been turned off,
9798 \#   or the pagenumber position has been changed to left or right.
9800 .MAC FOOTERS END
9801 .    ie '\\$1''   \{\
9802 .       rr #HEADERS_ON
9803 .       nr #FOOTERS_ON 1
9804 .       PAGENUM_POS TOP CENTER
9805 .    \}
9806 .    el \{ .nr #FOOTERS_ON 0 \}
9807 .END
9810 \# FOOTER MARGIN
9811 \# -------------
9812 \# *Argument:
9813 \#   <footer margin>
9814 \# *Function:
9815 \#   Creates or modifies register #FOOTER_MARGIN which holds the
9816 \#   amount of space to leave between the page number and the bottom
9817 \#   of the page.
9818 \# *Notes:
9819 \#   Unit of measure required.  Default is 3P.
9821 .MAC FOOTER_MARGIN END
9822 .    ie \\n%>0 \{ .nr #FOOTER_MARGIN (\\$1) \}
9823 .    el \{ . \}
9824 .END
9827 \# FOOTER GAP
9828 \# ----------
9829 \# *Argument:
9830 \#   <distance from end of running text to page # or footer>
9831 \# *Function:
9832 \#   Creates or modifies register #FOOTER_GAP which holds the
9833 \#   amount of space to leave between running text and the page number.
9834 \# *Notes:
9835 \#   Requires unit of measure.  Default is 3P.  Measured baseline to
9836 \#   baseline.
9838 .MAC FOOTER_GAP END
9839 .    ie \\n%>0 \{ .nr #FOOTER_GAP (\\$1) \}
9840 .    el \{ . \}
9841 .END
9844 \# FOOTER
9845 \# ------
9846 \# *Arguments:
9847 \#   <none>
9848 \# *Function:
9849 \#   Places footer at bottom of page if #FOOTERS=1, otherwise
9850 \#   places page number at bottom of page (if #PAGINATE=1).
9851 \#   Page numbers are in arabic or roman according to COPYSTYLE.
9852 \#   DRAFT starts the document at page 1 regardless of PAGENUMBER.
9853 \#   FINAL respects PAGENUMBER.
9855 .MAC FOOTER END
9856 .    ev PAGE_TRANSITION
9857 .    if \\n[MN-left]>0 \{\
9858 .       if !\\n[#no-repeat-MN-left]=1 \{\
9859 .          MNbottom-left
9860 .          nr #no-repeat-MN-left 1
9861 .       \}
9862 .       if '\\n(.z'MN_OVERFLOW_LEFT' \{\
9863 .          di
9864 .          nr #MN_OVERFLOW_LEFT 1
9865 .          rr #OVERFLOW_LEFT
9866 .       \}
9867 .    \}
9868 .    if \\n[MN-right]>0 \{\
9869 .       if (\\n[MN-right] > 0) \{\
9870 .          if !\\n[#no-repeat-MN-right]=1 \{\
9871 .             MNbottom-right
9872 .          \}
9873 .       \}
9874 .       if '\\n(.z'MN_OVERFLOW_RIGHT' \{\
9875 .          di
9876 .          nr #MN_OVERFLOW_RIGHT 1
9877 .          rr #OVERFLOW_RIGHT
9878 .       \}
9879 .    \}
9880 .    ch MN_OVERFLOW_TRAP
9881 .    nr #SAVED_LEAD \\n(.v
9882 .    nr #L_MARGIN_DIFF \\n[#L_MARGIN]-\\n[#DOC_L_MARGIN]
9883 .    if !\\n[#FN_DEFER] \{\
9884 .       nr #DIVER_DEPTH 0
9885 .       if \\n[#FN_DEPTH] \{\
9886 .          if \\n[#DIVERTED]=3 \{ .nr #FN_DEPTH +\\n[#VFP_DIFF] \}
9887 .          vpt 0
9888 .          sp |\\n[#PAGE_LENGTH]u-(\\n[#B_MARGIN]u+\\n[#FN_DEPTH]u-\\n[#DOC_LEAD]u)
9889 .          vpt 1
9890 .          po \\n[#DOC_L_MARGIN]u
9891 .          if \\n[#COLUMNS] \{\
9892 .             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
9893 .             nr #L_MARGIN \\n(.o
9894 .             nr #FROM_FOOTER 1
9895 .          \}
9896 .          nf
9897 .          FOOTNOTES
9898 .          rm FOOTNOTES
9899 .          if dRUNON_FOOTNOTES \{ .rm RUNON_FOOTNOTES \}
9900 .          if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#SAVED_LEAD]u \}
9901 .          if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#SAVED_LEAD]u \}
9902 .          if '\\n(.z'FN_OVERFLOW' \{\
9903 .              di
9904 .              nr #FN_OVERFLOW_DEPTH \\n[#DIVER_DEPTH]
9905 .          \}
9906 .          nr #FN_COUNT_AT_FOOTER \\n[#FN_COUNT]
9907 .          nr #FN_COUNT 0
9908 .          if \\n[#COL_NEXT] \{\
9909 .             ie !\\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #COL_NUM \\n-[#COL_NUM] \}
9910 .             el \{ .nr #COL_NUM \\n[#NUM_COLS] 1 \}
9911 .          \}
9912 .       \}
9913 .       rr #DIVERTED
9914 .    \}
9915 .    ie \\n[#COLUMNS]=1 \{\
9916 .       ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .DO_FOOTER \}
9917 .       el \{\
9918 .          ie \\n[#ENDNOTES] \{ .sp |\\n(ecu-\\n[#EN_LEAD]u \}
9919 .          el \{ .sp |\\n(dcu \}
9920 .          po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
9921 .          nr #L_MARGIN \\n(.o
9922 .          if \\n[#FN_DEPTH] \{ .PROCESS_FN_LEFTOVER \}
9923 .          LS \\n[#SAVED_LEAD]u
9924 .          if \\n[#PREV_FN_DEFERRED] \{\
9925 .             nr #PREV_FN_DEFERRED 2
9926 .          \}
9927 .          rr #RULED
9928 .          if !\\n[#EPIGRAPH] \{ .rr #COL_NEXT \}
9929 .          if !\\n[#QUOTE]    \{ .rr #COL_NEXT \}
9930 .          if \\n[#RESET_FN_COUNTERS]=1 \{\
9931 .             rr #RESET_FN_COUNTERS
9932 .             PROCESS_FN_IN_DIVER
9933 .             LS \\n[#SAVED_LEAD]u
9934 .             nr #FN_COUNT \\n[#FN_COUNT] 1
9935 .             nr #FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS] 1
9936 .             rm FN_IN_DIVER
9937 .             if dRUNON_FN_IN_DIVER \{ .rm RUNON_FN_IN_DIVER \}
9938 .          \}
9939 .          rr #DEFER_SPACE_ADDED
9940 .          if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9941 .          if \\n[#QUOTE] \{\
9942 .             ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9943 .             el \{\
9944 .                ie r#Q_OFFSET_VALUE \{\
9945 .                   nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
9946 .                \}
9947 .                el \{\
9948 .                   nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
9949 .                \}
9950 .                if \\n[#COLUMNS] \{\
9951 .                   ie r#Q_OFFSET_VALUE \{\
9952 .                      nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
9953 .                   \}
9954 .                   el \{\
9955 .                      nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE]
9956 .                   \}
9957 .                \}
9958 .                po \\n[#Q_OFFSET]u
9959 .             \}
9960 .          \}
9961 .          if \\n[#EPIGRAPH] \{\
9962 .             ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9963 .             el \{\
9964 .                ie r#EPI_OFFSET_VALUE \{\
9965 .                   nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
9966 .                \}
9967 .                el \{\
9968 .                   nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
9969 .                \}
9970 .                if \\n[#COLUMNS] \{\
9971 .                   ie r#EPI_OFFSET_VALUE \{\
9972 .                      nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
9973 .                   \}
9974 .                   el \{\
9975 .                      nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
9976 .                   \}
9977 .                \}
9978 .                po \\n[#EPI_OFFSET]u
9979 .             \}
9980 .          \}
9981 .          ie \\n[#EPIGRAPH] \{\
9982 .             ie !\\n[#EPI_ACTIVE] \{\
9983 .                ns
9984 .                rr #EPI_ACTIVE
9985 .             \}
9986 .             el \{\
9987 .                sp |\\n(dcu+(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
9988 .                rr #EPI_ACTIVE
9989 .             \}
9990 .          \}
9991 .          el \{ .ns \}
9992 .          ev
9993 .       \}
9994 .       ns
9995 .       rr #DIVERTED
9996 .    \}
9997 .    el \{ .DO_FOOTER \}
9998 .END
10001 \# PROCESS FOOTER
10002 \# --------------
10003 \# *Arguments:
10004 \#   <none>
10005 \# *Function:
10006 \#   Prints footer (page number, or 3-part footer).
10007 \#   Resets CAPS and UNDERLINE if they were on.
10009 .MAC DO_FOOTER END
10010 .\" Have to change position of FN_OVERFLOW_TRAP or it screws up the
10011 .\" placement of page numbers (or footers).  It's reset to its original
10012 .\" position at the end of the macro.
10013 .    if r#SAVED_FOOTER_POS \{ .ch FOOTER \\n[#SAVED_FOOTER_POS]u \}
10014 .    rr #SAVED_FOOTER_POS
10015 .    ie (\\n[#FOOTER_MARGIN]+\\n(.v)>\\n[#B_MARGIN] \{\
10016 .       nr #SKIP_FOOTER 1
10017 .    \}
10018 .    el \{\
10019 .       vpt 0
10020 .       sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u-1v
10021 .       mk y
10022 .       vpt 1
10023 .    \}
10024 .    ev FOOTER
10025 .    po \\n[#DOC_L_MARGIN]u
10026 .    ll \\n[#DOC_L_LENGTH]u
10027 .    ta \\n(.lu
10028 .    if \\n[#PRINT_STYLE]=1 \{\
10029 .       TYPEWRITER
10030 .    \}
10031 .    if \\n[#PRINT_STYLE]=2 \{\
10032 .       fam  \\*[$HDRFTR_FAM]
10033 .       ft      R
10034 .       ps \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
10035 .    \}
10036 .    vs \\n[#SAVED_LEAD]u
10037 .    nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
10038 .    if \\n[#CAPS_ON] \{\
10039 .       nr #CAPS_WAS_ON 1
10040 .       CAPS OFF
10041 .    \}
10042 .    if \\n[#UNDERLINE_ON] \{\
10043 .       nr #UNDERLINE_WAS_ON 1
10044 .       UNDERLINE OFF
10045 .    \}
10046 .    ie \\n[#FOOTERS_ON] \{\
10047 .       if !\\n[#SKIP_FOOTER]=1 \{ .PRINT_HDRFTR \}
10048 .    \}
10049 .    el \{\
10050 .       if \\n[#PAGINATE] \{\
10051 .          if \\n[#PAGE_NUM_V_POS]=2 \{\
10052 .             if !\\n[#SKIP_FOOTER]=1 \{ .PRINT_PAGE_NUMBER \}
10053 .          \}
10054 .       \}
10055 .    \}
10056 .    rr #SKIP_FOOTER
10057 .    if \\n[#CAPS_WAS_ON] \{\
10058 .       CAPS
10059 .       rr #CAPS_WAS_ON
10060 .    \}
10061 .    if \\n[#UNDERLINE_WAS_ON] \{\
10062 .       UNDERLINE
10063 .       rr #UNDERLINE_WAS_ON
10064 .    \}
10065 .    ev
10066 .    rr #SAVED_LEAD
10067 .    bp
10068 .\" This ev pops the PAGE_TRANSITION environment still active at the
10069 .\" end of HEADER
10070 .    ev
10071 .END
10073 \# ====================================================================
10075 \# +++HEADERS AND FOOTERS+++
10077 \# HEADERS_AND_FOOTERS
10078 \# -------------------
10079 \# *Arguments:
10080 \#   HEADER_RECTO_QUAD \
10081 \#   HEADER_RECTO_STRING \
10082 \#   FOOTER_RECTO_QUAD \
10083 \#   FOOTER_RECTO_STRING \
10084 \#   HEADER_VERSO_QUAD \
10085 \#   HEADER_VERSO_STRING \
10086 \#   FOOTER_VERSO_QUAD \
10087 \#   FOOTER_VERSO_STRING
10088 \#   | <anything>
10089 \# *Function:
10090 \#   Allows having both headers and footers.  Sets register
10091 \#   #HDRFTR_BOTH to 1; collects HEADER/FOOTER_RECTO/VERSO
10092 \#   information; appends FOOTER_RECTO and FOOTER_VERSO to
10093 \#   START and turns off pagination; appends to macros
10094 \#   PRINT_USERDEF_HDRFTR and HEADER the necessary number
10095 \#   register manipulations and redefinitions of the
10096 \#   HEADER/FOOTER_RECTO/VERSO strings so that both
10097 \#   headers and footers get printed, with the appropriate
10098 \#   strings for each
10099 \# *Notes:
10100 \#   Works in conjunction with HDRFTR_RECTO and HDRFTR_VERSO (qqv.),
10101 \#   ergo all style changes must be done inline in the strings
10102 \#   passed as arguments.
10104 .MAC HEADERS_AND_FOOTERS END
10105 .    ie \\n[#NUM_ARGS]>1 \{\
10106 .    nr #HDRFTR_BOTH 1
10107 .    nr #FOOTERS_ON  1
10108 .    if !r#HEADER_RULE .nr #HEADER_RULE 1
10109 .    if !r#FOOTER_RULE .nr #FOOTER_RULE 1
10110 .    ds $HDR_RECTO_QUAD   \\$1
10111 .    ds $HDR_RECTO_STRING \\$2
10112 .    ds $FTR_RECTO_QUAD   \\$3
10113 .    ds $FTR_RECTO_STRING \\$4
10114 .    ds $HDR_VERSO_QUAD   \\$5
10115 .    ds $HDR_VERSO_STRING \\$6
10116 .    ds $FTR_VERSO_QUAD   \\$7
10117 .    ds $FTR_VERSO_STRING \\$8
10118 .am START DONE
10119 .   if \\\\n[#HDRFTR_BOTH]=1 \{\
10120 .      FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
10121 .      FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
10122 .      if \\\\n[#HEADER_RULE]=1 \{ .HEADER_RULE \}
10123 .      ie \\\\n[#FOOTER_RULE]=1 \{ .FOOTER_RULE \}
10124 .      el \{ .FOOTER_RULE OFF \}
10125 .      if r#PAGINATE .rr #PAGINATE
10126 .      if r#PAGE_NUM_V_POS .rr #PAGE_NUM_V_POS
10128 .DONE
10129 .am PRINT_USERDEF_HDRFTR DONE
10130 .   if \\\\n[#HDRFTR_BOTH]=1 \{\
10131 .      if \\n[#FOOTERS_ON]=1 \{\
10132 .         if !\\\\n[#COLLATE]=1 \{\
10133 .         HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
10134 .         HEADER_VERSO \\*[$HDR_VERSO_QUAD] "\\*[$HDR_VERSO_STRING]"
10135 .         rr #FOOTERS_ON
10136 .         nr #HEADERS_ON 1
10137 .         ie \\\\n[#HEADER_RULE]=1 \{ .HEADER_RULE \}
10138 .         el \{ .HEADER_RULE OFF \}
10139 .      \}
10140 .      \}
10141 .      if \\n[#HEADERS_ON]=1 \{\
10142 .         FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
10143 .         FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
10144 .      \}
10145 .   \}
10146 .DONE
10147 .am HEADER DONE
10148 .   if \\\\n[#HDRFTR_BOTH]=1 \{\
10149 .      if r#START_FOR_FOOTERS .rr #START_FOR_FOOTERS
10150 .      rr #HEADERS_ON
10151 .      nr #FOOTERS_ON 1
10152 .      FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
10153 .      FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
10154 .      ie \\\\n[#FOOTER_RULE]=1 \{ .FOOTER_RULE \}
10155 .      el \{ .FOOTER_RULE OFF \}
10156 .   \}
10157 .DONE
10158 .    \}
10159 .    el \{\
10160 .       rr #HDRFTR_BOTH
10161 .       rr #USERDEF_HDRFTR
10162 .       rm $USERDEF_HDRFTR_RECTO
10163 .       rm $USERDEF_HDRFTR_VERSO
10164 .       FOOTERS OFF
10165 .       HEADERS
10166 .       if \\n[#COLLATE]=1 \{\
10167 .          nr #HEADER_STATE 1
10168 .          nr #PAGINATION_STATE 1
10169 .       \}
10170 .       PAGINATE
10171 .       PAGENUM_POS BOTTOM CENTER
10172 .       nr #HF_OFF 1
10173 .    \}
10174 .END
10176 \# ====================================================================
10178 \# +++HEADS+++
10180 \# ---Head numbers---
10182 \# NUMBER HEADS
10183 \# ------------
10184 \# *Arguments:
10185 \#   <none> | <anything>
10186 \# *Function:
10187 \#   Toggles register #NUMBER_HEAD; sets incrementing register #HEAD_NUM.
10188 \# *Notes:
10189 \#   Default is OFF.
10191 .MAC NUMBER_HEADS END
10192 .    ie '\\$1'' \{\
10193 .       nr #NUMBER_HEAD 1
10194 .       if !\\n[#HEAD_NUM] \{ .nr #HEAD_NUM 0 1 \}
10195 .    \}
10196 .    el \{ .rr #NUMBER_HEAD \}
10197 .END
10200 \# RESET HEAD NUMBER
10201 \# -----------------
10202 \# *Arguments:
10203 \#   <none> | <desired head number>
10204 \# *Function:
10205 \#   Resets incrementing register #HEAD_NUM to 1 or, if there's
10206 \#   an argument, to user supplied number.
10207 \# *Notes:
10208 \#   Also resets subhead and parahead numbers.  If this is not
10209 \#   desired, subhead and parahead numbers may be reset individually.
10211 .MAC RESET_HEAD_NUMBER END
10212 .    ie '\\$1'' \{\
10213 .       nr #HEAD_NUM 0 1
10214 .       nr #SH_NUM   0 1
10215 .       nr #PH_NUM   0 1
10216 .    \}
10217 .    el \{\
10218 .       nr #HEAD_NUM \\$1-1 1
10219 .       nr #SH_NUM   0 1
10220 .       nr #PH_NUM   0 1
10221 .    \}
10222 .END
10225 \# NUMBER SUBHEADS
10226 \# ---------------
10227 \# *Arguments:
10228 \#   <none> | <anything>
10229 \# *Function:
10230 \#   Toggles register #NUMBER_SH; sets incrementing register #SH_NUM.
10231 \# *Notes:
10232 \#   Default is OFF.
10234 .MAC NUMBER_SUBHEADS END
10235 .    ie '\\$1'' \{\
10236 .       nr #NUMBER_SH 1
10237 .       if !\\n[#SH_NUM] \{ .nr #SH_NUM 0 1 \}
10238 .    \}
10239 .    el \{ .rr #NUMBER_SH \}
10240 .END
10243 \# RESET SUBHEAD NUMBER
10244 \# --------------------
10245 \# *Arguments:
10246 \#   <none> | <desired subhead number>
10247 \# *Function:
10248 \#   Resets incrementing register #SH_NUM to 1 or, if there's
10249 \#   an argument, to user supplied number.
10250 \# *Notes:
10251 \#   When the subhead number is reset, it resets the parahead number as
10252 \#   well.  If this behaviour is not what's wanted, RESET_SUBHEAD_NUMBER
10253 \#   allows the user to set the parahead number to whatever s/he desires.
10255 .MAC RESET_SUBHEAD_NUMBER END
10256 .    ie '\\$1'' \{ .nr #SH_NUM 0 1 \}
10257 .    el \{\
10258 .       nr #SH_NUM \\$1-1 1
10259 .       nr #PH_NUM 0 1
10260 .       \}
10261 .END
10264 \# NUMBER PARAHEADS
10265 \# ----------------
10266 \# *Arguments:
10267 \#   <none> | <anything>
10268 \# *Function:
10269 \#   Toggles register #NUMBER_PH; sets incrementing register #PH_NUM.
10270 \# *Notes:
10271 \#   Default is OFF.
10273 .MAC NUMBER_PARAHEADS END
10274 .    ie '\\$1'' \{\
10275 .       nr #NUMBER_PH 1
10276 .       if !\\n[#PH_NUM] \{ .nr #PH_NUM 0 1 \}
10277 .    \}
10278 .    el \{ .rr #NUMBER_PH \}
10279 .END
10282 \# RESET PARAHEAD NUMBER
10283 \# ---------------------
10284 \# *Arguments:
10285 \#   <none> | <desired parahead number>
10286 \# *Function:
10287 \#   Resets incrementing register #PH_NUM to 1 or, if there's
10288 \#   an argument, to user supplied number.
10289 \# *Notes:
10290 \#   Resetting the parahead number resets the parahead number
10291 \#   only.
10293 .MAC RESET_PARAHEAD_NUMBER END
10294 .    ie '\\$1'' \{ .nr #PH_NUM 0 1 \}
10295 .    el \{ .nr #SH_NUM \\$1-1 1 \}
10296 .END
10299 \# PREFIX CHAPTER NUMBERS TO NUMBERED HEADS, SUBHEADS AND PARAHEADS
10300 \# ----------------------------------------------------------------
10301 \# *Arguments:
10302 \#   <none> | <chapter number> | <anything>
10303 \# *Function:
10304 \#   Toggles register #PREFIX_CH_NUM. Sets register #CH_NUM from
10305 \#   string $CHAPTER if $CHAPTER is a digit; if <chapter number> arg
10306 \#   given, sets #CH_NUM to arg.
10307 \# *Notes:
10308 \#   Default is OFF.
10310 .MAC PREFIX_CHAPTER_NUMBER END
10311 .    ie '\\$1'' \{\
10312 .       ie r#CH_NUM \{\
10313 .          nr #PREFIX_CH_NUM 1
10314 .          if \\n[#CHAPTER_CALLED] \{\
10315 .             ie \B'\\*[$CHAPTER]' \{\
10316 .                nr #CH_NUM \\*[$CHAPTER]
10317 .             \}
10318 .             el \{\
10319 .                PREFIX_CH_NUM_WARNING
10320 .             \}
10321 .             rr #CHAPTER_CALLED
10322 .          \}
10323 .       \}
10324 .       el \{\
10325 .          ie \B'\\*[$CHAPTER]' \{\
10326 .             nr #PREFIX_CH_NUM 1
10327 .             nr #CH_NUM \\*[$CHAPTER]
10328 .          \}
10329 .          el \{\
10330 .             PREFIX_CH_NUM_WARNING
10331 .          \}
10332 .       \}
10333 .    \}
10334 .    el \{\
10335 .       ie \B'\\$1' \{\
10336 .          nr #CH_NUM \\$1
10337 .          nr #PREFIX_CH_NUM 1
10338 .       \}
10339 .       el \{\
10340 .          rr #PREFIX_CH_NUM
10341 .       \}
10342 .    \}
10343 .END
10345 .MAC PREFIX_CH_NUM_WARNING END
10346 .    tm1 "[mom]: PREFIX_CHAPTER_NUMBER cannot determine a chapter number.
10347 .    tm1 "       Please enter the current chapter number as a digit after
10348 .    tm1 "       PREFIX_CHAPTER_NUMBER.
10349 .    ab Aborting on PREFIX_CHAPTER_NUMBER at line \\n(.c.
10350 .END
10353 \# ---Main heads---
10355 \# HEAD CAPS
10356 \# ---------
10357 \# *Arguments:
10358 \#   <none> | <anything>
10359 \# *Function:
10360 \#   Creates or modifies register #HEAD_CAPS.
10361 \# *Notes:
10362 \#   Default is on.
10364 .MAC HEAD_CAPS END
10365 .    ie '\\$1'' \{ .nr #HEAD_CAPS 1 \}
10366 .    el \{ .nr #HEAD_CAPS 0 \}
10367 .END
10370 \# HEAD SPACE
10371 \# ----------
10372 \# *Arguments:
10373 \#   <none> | <anything>
10374 \# *Function:
10375 \#   Creates register #HEAD_SPACE, which toggles whether the space
10376 \#   before heads is 1 extra line space ("off") or 2 ("on").  Used only
10377 \#   in PRINTSTYLE TYPESET.
10378 \# *Notes:
10379 \#   Default is on.
10381 .MAC HEAD_SPACE END
10382 .    ie '\\$1'' \{ .nr #HEAD_SPACE 1 \}
10383 .    el \{ .nr #HEAD_SPACE 0 \}
10384 .END
10387 \# MAIN HEAD
10388 \# ---------
10389 \# *Arguments:
10390 \#   "text of main head" ["text of main head"] ...
10391 \# *Function:
10392 \#   In TYPEWRITE, prints main heads centered, all caps, underlined.
10393 \#   In TYPESET, prints bold main heads 1 point larger than running
10394 \#   text, all caps, underlined.
10395 \# *Notes:
10396 \#   The HEAD macro requires that double-quotes (") surround
10397 \#   each line of text.
10399 .MAC HEAD END
10400 .    br
10401 .    if \\n[#PRINT_STYLE]=1 \{ .ne \\n[#NUM_ARGS]+2 \}
10402 .    if \\n[#PRINT_STYLE]=2 \{\
10403 .       ie \\n[#HEAD_SPACE] \{ .ne \\n[#NUM_ARGS]+3 \}
10404 .       el \{ .ne \\n[#NUM_ARGS]+2 \}
10405 .    \}
10406 .\" Collect head for TOC.
10407 .    nr #ARG_NUM 0 1
10408 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
10409 .    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
10410 .    while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10411 .       ie \\n[#ARG_NUM]=\\n[#NUM_ARGS] \{\
10412 .          as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\\|
10413 .       \}
10414 .       el \{\
10415 .\" Note that in the .as lines, below, \ at the end has a literal
10416 .\" space after it.
10417 .          ie \\n[#NUMBER_HEAD] \{\
10418 .             ie \\n[#ARG_NUM]=0 \{\
10419 .                as $TOC_HEAD_ITEM \\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\ \"
10420 .                nr #HEAD_NUM \\n-[#HEAD_NUM]
10421 .             \}
10422 .             el \{\
10423 .                as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\ \"
10424 .             \}
10425 .          \}
10426 .          el \{\
10427 .             as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\ \"
10428 .          \}
10429 .       \}
10431 .\" Note the use of \!, which transparently embeds the macros used
10432 .\" in the TOC_ENTRIES diversion.  The elements they control must be
10433 .\" processed literally when the diversion is output.
10434 .    ev TOC_EV
10435 .    da TOC_ENTRIES
10436 .    if \\n[#PRINT_STYLE]=1 \{\
10437 \!.     fam C
10438 \!.     ft  R
10439 \!.     ps  12
10440 .    \}
10441 .    if \\n[#PRINT_STYLE]=2 \{\
10442 \!.     FAMILY  \\*[$TOC_HEAD_FAM]
10443 \!.     FT      \\*[$TOC_HEAD_FT]
10444 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_HEAD_SIZE_CHANGE]
10445 .    \}
10446 \!.  TRAP OFF
10447 \!.  PAD_MARKER ^
10448 .    ie \\n[#PRINT_STYLE]=1 \{\
10449 \!.     PAD "\\h'2m'\\*[$TOC_HEAD_ITEM]\\*[$TOC_PN_TYPEWRITE]"
10450 .    \}
10451 .    el \{\
10452 \!.     PAD "\\h'\\n[#TOC_HEAD_INDENT]u'\\*[$TOC_HEAD_ITEM]\\*[$TOC_PN]"
10453 .    \}
10454 \!.  PAD_MARKER #
10455 \!.  EOL
10456 \!.  ST 100 L
10457 \!.  ST 101 R
10458 .    if \\n[#PRINT_STYLE]=2 \{\
10459 \!.     FAMILY  \\*[$TOC_PN_FAM]
10460 \!.     FT      \\*[$TOC_PN_FT]
10461 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
10462 .    \}
10463 \!.  TAB 100
10464 \!.  PRINT \\*[LEADER]
10465 \!.  TN
10466 \!.  TRAP
10467 \!.  PRINT \\n[#TOC_ENTRY_PN]
10468 \!.  TQ
10469 .    di
10470 .    ev
10471 .\" End collection of head for TOC
10472 .\" Process head
10473 .    nr #HEAD 1
10474 .    ev HEAD
10475 .    ll \\n[#L_LENGTH]u
10476 .    ta \\n(.lu
10477 .    if \\n[#COLUMNS] \{\
10478 .       ll \\n[#COL_L_LENGTH]u
10479 .       ta \\n(.lu
10480 .    \}
10481 .    CHECK_INDENT
10482 .    QUAD \\*[$HEAD_QUAD]
10483 .    if \\n[#PRINT_STYLE]=1 \{\
10484 .       TYPEWRITER
10485 .       vs  \\n[#DOC_LEAD]u
10486 .       UNDERLINE OFF
10487 .    \}
10488 .    if \\n[#PRINT_STYLE]=2 \{\
10489 .       FAMILY  \\*[$HEAD_FAM]
10490 .       FT      \\*[$HEAD_FT]
10491 .       PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$HEAD_SIZE_CHANGE]
10492 .       LS      \\n[#DOC_LEAD]u
10493 .    \}
10494 .    if r#QUOTE             \{ .rr #QUOTE \}
10495 .    if r#EPIGRAPH          \{ .rr #EPIGRAPH \}
10496 .    ie \\n[#START] \{\
10497 .       if \\n[#DOC_HEADER]=0 \{ .RLD 1v \}
10498 .    \}
10499 .    el \{\
10500 .       if \\n[#PRINT_STYLE]=1 \{\
10501 .          if !\\n[#LINEBREAK] \{\
10502 .             ALD \\n[#DOC_LEAD]u
10503 .             if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
10504 .          \}
10505 .       \}
10506 .       if \\n[#PRINT_STYLE]=2 \{\
10507 .          ie \\n[#PP_SPACE] \{\
10508 .             ie \\n[#END_QUOTE] \{ . \}
10509 .             el \{\
10510 .                if !\\n[#LINEBREAK] \{\
10511 .                   if \\n[#HEAD_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
10512 .                \}
10513 .             \}
10514 .          \}
10515 .          el \{\
10516 .             ie \\n[#HEAD_SPACE] \{ .ALD \\n[#DOC_LEAD]u*2u \}
10517 .             el \{ .ALD \\n[#DOC_LEAD]u \}
10518 .          \}
10519 .          if \\n[#END_QUOTE] \{\
10520 .             if !\\n[#Q_FITS] \{\
10521 .                RLD \\n[#DOC_LEAD]u
10522 .                if \\n[#PP_ACTIVE] \{ .ALD \\n[#DOC_LEAD]u \}
10523 .             \}
10524 .             if \\n[#Q_AT_TOP] \{\
10525 .                RLD \\n[#DOC_LEAD]u
10526 .                if \\n[#Q_AT_TOP] \{ .ALD \\n[#DOC_LEAD]u \}
10527 .             \}
10528 .          \}
10529 .          if \\n[#LINEBREAK] \{\
10530 .             if \\n[#HEAD_SPACE] \{ .RLD \\n[#DOC_LEAD]u \}
10531 .          \}
10532 .       \}
10533 .    \}
10534 .\" Print head
10535 .    nr #ARG_NUM 0 1
10536 .    nr #FROM_HEAD 1
10537 .    if \\n[#HEAD_CAPS] \{ .CAPS \}
10538 .    if \\n[#PRINT_STYLE]=2 \{\
10539 .       if \\n[#HEAD_COLOR]=1 \{\
10540 .          TRAP OFF
10541 .          COLOR \\*[$HEAD_COLOR]
10542 .          EOL
10543 .          TRAP
10544 .       \}
10545 .    \}
10546 .    if \\n[#PRINT_STYLE]=1 \{\
10547 .       ie \\n[#HEAD_CAPS]=1 \{\
10548 .          ds $HEAD_UNDERLINE_GAP 2p
10549 .       \}
10550 .       el \{\
10551 .          ds $HEAD_UNDERLINE_GAP 4p
10552 .       \}
10553 .    \}
10554 .    while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10555 .       ie \\n[#NUMBER_HEAD] \{\
10556 .          ie \\n[#ARG_NUM]=0 \{\
10557 .             ie \\n[#PREFIX_CH_NUM]=1 \{\
10558 .                ds $CH_NUM \\n[#CH_NUM].
10559 .             \}
10560 .             el \{\
10561 .                rm $CH_NUM
10562 .             \}
10563 .             br
10564 .             ie \\n[#HEAD_UNDERLINE]=0 \{\
10565 .                PRINT "\\*[$CH_NUM]\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]"
10566 .             \}
10567 .             el \{\
10568 .                UNDERSCORE \\*[$HEAD_UNDERLINE_GAP] "\\*[$CH_NUM]\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]"
10569 .             \}
10570 .             br
10571 .          \}
10572 .          el \{\
10573 .             br
10574 .             ie \\n[#HEAD_UNDERLINE]=0 \{\
10575 .                PRINT "\\$[\\n+[#ARG_NUM]]"
10576 .             \}
10577 .             el \{\
10578 .                UNDERSCORE \\*[$HEAD_UNDERLINE_GAP] "\\$[\\n+[#ARG_NUM]]"
10579 .             \}
10580 .             br
10581 .          \}
10582 .       \}
10583 .       el \{\
10584 .          br
10585 .          ie \\n[#HEAD_UNDERLINE]=0 \{\
10586 .             PRINT "\\$[\\n+[#ARG_NUM]]"
10587 .          \}
10588 .          el \{\
10589 .             UNDERSCORE \\*[$HEAD_UNDERLINE_GAP] "\\$[\\n+[#ARG_NUM]]"
10590 .          \}
10591 .          br
10592 .       \}
10594 .    REMOVE_INDENT
10595 .    CAPS OFF
10596 .    ev
10597 .    ALD \\n[#DOC_LEAD]u
10598 .    if \\n[#NUMBER_HEAD] \{ .RESET_SUBHEAD_NUMBER  \}
10599 .    if \\n[#NUMBER_SH]   \{ .RESET_PARAHEAD_NUMBER \}
10600 .    if r#START      \{ .rr #START     \}
10601 .    if r#EPIGRAPH   \{ .rr #EPIGRAPH  \}
10602 .    if r#QUOTE      \{ .rr #QUOTE     \}
10603 .    if r#Q_FITS     \{ .rr #Q_FITS    \}
10604 .    if r#END_QUOTE  \{ .rr #END_QUOTE \}
10605 .    if r#LINEBREAK  \{ .rr #LINEBREAK \}
10606 .    if r#Q_AT_TOP   \{ .rr #Q_AT_TOP  \}
10607 .    if r#PP_ACTIVE  \{ .rr #PP_ACTIVE \}
10608 .    rr #ARG_NUM
10609 .    rr #FROM_HEAD
10610 .    rm $TOC_HEAD_ITEM
10611 .    nr #PP 0
10612 .END
10615 \# ---Subheads---
10617 \# SUBHEAD
10618 \# -------
10619 \# *Arguments:
10620 \#   "text of subhead" ["text of subhead"] ...
10621 \# *Function:
10622 \#   In TYPEWRITE, prints subheads underlined.
10623 \#   In TYPESET, prints subheads bold, .5 points larger than running
10624 \#   text.
10625 \#   In both styles, a line space precedes the subhead, and a small
10626 \#   amount of lead comes after.
10627 \# *Notes:
10628 \#   As with the HEAD macro, double-quotes (") must surround
10629 \#   each line of text.
10631 .MAC SUBHEAD END
10632 .    br
10633 .    ne \\n[#NUM_ARGS]+2
10634 .\" Collect subhead for TOC.
10635 .    nr #ARG_NUM 0 1
10636 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
10637 .    while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10638 .       ie \\n[#ARG_NUM]=\\n[#NUM_ARGS] \{\
10639 .          as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\\|
10640 .       \}
10641 .       el \{\
10642 .\" Note that in the .as lines, below, \ at the end has a literal
10643 .\" space after it.
10644 .          ie \\n[#NUMBER_SH] \{\
10645 .             ie \\n[#ARG_NUM]=0 \{\
10646 .                as $TOC_SH_ITEM \\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]\ \"
10647 .                nr #SH_NUM \\n-[#SH_NUM]
10648 .             \}
10649 .             el \{\
10650 .                as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\ \"
10651 .             \}
10652 .          \}
10653 .          el \{\
10654 .             as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\ \"
10655 .          \}
10656 .       \}
10658 .\" Note the use of \!, which transparently embeds the macros used
10659 .\" in the TOC_ENTRIES diversion.  The elements they control must be
10660 .\" processed literally when the diversion is output.
10661 .    ev TOC_EV
10662 .    da TOC_ENTRIES
10663 .    if \\n[#PRINT_STYLE]=1 \{\
10664 \!.     fam C
10665 \!.     ft  R
10666 \!.     ps  12
10667 .    \}
10668 .    if \\n[#PRINT_STYLE]=2 \{\
10669 \!.     FAMILY  \\*[$TOC_SH_FAM]
10670 \!.     FT      \\*[$TOC_SH_FT]
10671 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_SH_SIZE_CHANGE]
10672 .    \}
10673 \!.  TRAP OFF
10674 \!.  PAD_MARKER ^
10675 .    ie \\n[#PRINT_STYLE]=1 \{\
10676 \!.     PAD "\\h'4m'\\*[$TOC_SH_ITEM]\\*[$TOC_PN_TYPEWRITE]"
10677 .    \}
10678 .    el \{\
10679 \!.     PAD "\\h'\\n[#TOC_SH_INDENT]u'\\*[$TOC_SH_ITEM]\\*[$TOC_PN]"
10680 .    \}
10681 \!.  PAD_MARKER #
10682 \!.  EOL
10683 \!.  ST 100 L
10684 \!.  ST 101 R
10685 .    if \\n[#PRINT_STYLE]=2 \{\
10686 \!.     FAMILY  \\*[$TOC_PN_FAM]
10687 \!.     FT      \\*[$TOC_PN_FT]
10688 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
10689 .    \}
10690 \!.  TAB 100
10691 \!.  PRINT \\*[LEADER]
10692 \!.  TN
10693 \!.  TRAP
10694 \!.  PRINT \\n[#TOC_ENTRY_PN]
10695 \!.  TQ
10696 .    di
10697 .    ev
10698 .\" End collection of head for TOC
10699 .\" Process subhead
10700 .    nr #ARG_NUM 0 1
10701 .    if r#QUOTE    \{ .rr #QUOTE    \}
10702 .    if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
10703 .    ev SUBHEAD
10704 .    ll \\n[#L_LENGTH]u
10705 .    ta \\n(.lu
10706 .    if \\n[#COLUMNS] \{\
10707 .       ll \\n[#COL_L_LENGTH]u
10708 .       ta \\n(.lu
10709 .    \}
10710 .    CHECK_INDENT
10711 .    if \\n[#PRINT_STYLE]=1 \{\
10712 .       TYPEWRITER
10713 .       vs  \\n[#DOC_LEAD]u
10714 .       QUAD   \\*[$SH_QUAD]
10715 .       UNDERLINE OFF
10716 .    \}
10717 .    if \\n[#PRINT_STYLE]=2 \{\
10718 .       FAMILY  \\*[$SH_FAM]
10719 .       FT      \\*[$SH_FT]
10720 .       PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$SH_SIZE_CHANGE]
10721 .       LS      \\n[#DOC_LEAD]u
10722 .       QUAD    \\*[$SH_QUAD]
10723 .    \}
10724 .    if \\n[#PRINT_STYLE]=1 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/5 \}
10725 .    if \\n[#PRINT_STYLE]=2 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/8 \}
10726 .    ie \\n[#START] \{ .RLD 1v \}
10727 .    el \{\
10728 .       ie \\n[#HEAD]=1 \{ . \}
10729 .       el \{\
10730 .          if \\n[#PRINT_STYLE]=1 \{\
10731 .             if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
10732 .          \}
10733 .          if \\n[#PRINT_STYLE]=2 \{\
10734 .             ie \\n[#PP_SPACE]=1 \{\
10735 .                ie !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
10736 .                el \{ .RLD \\n[#DOC_LEAD]u \}
10737 .             \}
10738 .             el \{\
10739 .                if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
10740 .             \}
10741 .          \}
10742 .       \}
10743 .    \}
10744 .\" Print subhead
10745 .    if \\n[#PRINT_STYLE]=1 \{\
10746 .       while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10747 .          ie \\n[#NUMBER_SH] \{\
10748 .             ie \\n[#ARG_NUM]=0 \{\
10749 .                ie \\n[#PREFIX_CH_NUM]=1 \{\
10750 .                   ds $CH_NUM \\n[#CH_NUM].
10751 .                \}
10752 .                el \{\
10753 .                   rm $CH_NUM
10754 .                \}
10755 .                ie \\n[#NUMBER_HEAD] \{\
10756 .                   br
10757 .                   UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]"
10758 .                   br
10759 .                \}
10760 .                el \{\
10761 .                   br
10762 .                   UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]"
10763 .                   br
10764 .                \}
10765 .             \}
10766 .             el \{\
10767 .                br
10768 .                UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]"
10769 .                br
10770 .             \}
10771 .          \}
10772 .          el \{\
10773 .             br
10774 .             UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]"
10775 .             br
10776 .          \}
10778 .    \}
10779 .    if \\n[#PRINT_STYLE]=1 \{\
10780 .       if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
10781 .    \}
10782 .    if \\n[#PRINT_STYLE]=2 \{\
10783 .       if \\n[#SH_COLOR]=1 \{ .COLOR \\*[$SH_COLOR] \}
10784 .       ie \\n[#PP_SPACE]=0 \{\
10785 .          while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10786 .             ie \\n[#NUMBER_SH] \{\
10787 .                ie \\n[#ARG_NUM]=0 \{\
10788 .                   ie \\n[#PREFIX_CH_NUM]=1 \{\
10789 .                      ds $CH_NUM \\n[#CH_NUM].
10790 .                   \}
10791 .                   el \{\
10792 .                      rm $CH_NUM
10793 .                   \}
10794 .                   ie \\n[#NUMBER_HEAD] \{\
10795 .                      br
10796 .                      PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]
10797 .                      br
10798 .                   \}
10799 .                   el \{\
10800 .                      br
10801 .                      PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]
10802 .                      br
10803 .                   \}
10804 .                \}
10805 .                el \{\
10806 .                   br
10807 .                   PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
10808 .                   br
10809 .                \}
10810 .             \}
10811 .             el \{\
10812 .                br
10813 .                PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
10814 .                br
10815 .             \}
10817 .       \}
10818 .       el \{\
10819 .          ALD \\n[#DOC_LEAD]u
10820 .          if \\n[#HEAD]=1      \{ .RLD \\n[#DOC_LEAD]u \}
10821 .          if \\n[#END_QUOTE]   \{ .RLD \\n[#DOC_LEAD]u \}
10822 .          if \\n[#EPIGRAPH]    \{ .RLD \\n[#DOC_LEAD]u \}
10823 .          while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10824 .             ie \\n[#NUMBER_SH] \{\
10825 .                ie \\n[#ARG_NUM]=0 \{\
10826 .                   ie \\n[#PREFIX_CH_NUM]=1 \{\
10827 .                      ds $CH_NUM \\n[#CH_NUM].
10828 .                   \}
10829 .                   el \{\
10830 .                      rm $CH_NUM
10831 .                   \}
10832 .                   ie \\n[#NUMBER_HEAD] \{\
10833 .                      br
10834 .                      PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]]
10835 .                      br
10836 .                   \}
10837 .                   el \{\
10838 .                      br
10839 .                      PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]
10840 .                      br
10841 .                   \}
10842 .                \}
10843 .                el \{\
10844 .                   br
10845 .                   PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
10846 .                   br
10847 .                \}
10848 .             \}
10849 .             el \{\
10850 .                br
10851 .                PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
10852 .                br
10853 .             \}
10855 .          ALD \\n[#DOC_LEAD]u
10856 .       \}
10857 .    \}
10858 .    REMOVE_INDENT
10859 .    ev
10860 .    if \\n[#NUMBER_SH] \{ .RESET_PARAHEAD_NUMBER \}
10861 .    if r#START     \{ .rr #START     \}
10862 .    if r#EPIGRAPH  \{ .rr #EPIGRAPH  \}
10863 .    if r#Q_FITS    \{ .rr #Q_FITS    \}
10864 .    if r#END_QUOTE \{ .rr #END_QUOTE \}
10865 .    if r#LINEBREAK \{ .rr #LINEBREAK \}
10866 .    rm $TOC_SH_ITEM
10867 .    nr #PP 0
10868 .    nr #HEAD 2
10869 .END
10871 \# ---Paragraph heads---
10873 \# PARAHEAD INDENT
10874 \# ---------------
10875 \# *Argument:
10876 \#   <size of indent>
10877 \# *Function:
10878 \#   Creates or modifies register #PH_INDENT.
10879 \# *Notes:
10880 \#   Default is 1/2 #PP_INDENT for TYPESET and TYPEWRITE.
10882 .MAC PARAHEAD_INDENT END
10883 .    nr #PH_INDENT (\\$1)
10884 .END
10887 \# PARAHEAD
10888 \# --------
10889 \# *Arguments:
10890 \#   "<para head>"
10891 \# *Function:
10892 \#   Deposits a paragraph head at the start and into the body of a
10893 \#   paragraph.
10894 \# *Notes:
10895 \#   PARAHEAD *must* come after PP.
10897 .MAC PARAHEAD END
10898 .\" Collect parahead for TOC.
10899 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
10900 .    ie \\n[#NUMBER_PH] \{\
10901 .       ds $TOC_PH_ITEM \\n+[#PH_NUM].\0\\$1\\|
10902 .       nr #PH_NUM \\n-[#PH_NUM]
10903 .    \}
10904 .    el \{\
10905 .       ds $TOC_PH_ITEM \\$1\\|
10906 .    \}
10907 .    ev TOC_EV
10908 .    da TOC_ENTRIES
10909 .    if \\n[#PRINT_STYLE]=1 \{\
10910 \!.       fam C
10911 \!.       ft  R
10912 \!.       ps  12
10913 .    \}
10914 .    if \\n[#PRINT_STYLE]=2 \{\
10915 \!.     FAMILY  \\*[$TOC_PH_FAM]
10916 \!.     FT      \\*[$TOC_PH_FT]
10917 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PH_SIZE_CHANGE]
10918 .    \}
10919 \!.  TRAP OFF
10920 \!.  PAD_MARKER ^
10921 .    ie \\n[#PRINT_STYLE]=1 \{\
10922 \!.     PAD "\\h'6m'\\*[$TOC_PH_ITEM]\\*[$TOC_PN_TYPEWRITE]"
10923 .    \}
10924 .    el \{\
10925 \!.     PAD "\\h'\\n[#TOC_PH_INDENT]u'\\*[$TOC_PH_ITEM]\\*[$TOC_PN]"
10926 .    \}
10927 \!.  PAD_MARKER #
10928 \!.  EOL
10929 \!.  ST 100 L
10930 \!.  ST 101 R
10931 .    if \\n[#PRINT_STYLE]=2 \{\
10932 \!.     FAMILY  \\*[$TOC_PN_FAM]
10933 \!.     FT      \\*[$TOC_PN_FT]
10934 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
10935 .    \}
10936 \!.  TAB 100
10937 \!.  PRINT \\*[LEADER]
10938 \!.  TN
10939 \!.  TRAP
10940 \!.  PRINT \\n[#TOC_ENTRY_PN]
10941 \!.  TQ
10942 .    di
10943 .    ev
10944 .\" End collection of parahead for TOC
10945 .\" Process parahead
10946 .    if \\n[#SLANT_ON] \{\
10947 .       nr #SLANT_WAS_ON 1
10948 \E*[SLANTX]
10949 .    \}
10950 .    ie \\n[#PP]=1 \{\
10951 .       if \\n[#INDENT_FIRST_PARAS] \{\
10952 .          ti \\n[#PH_INDENT]u
10953 .       \}
10954 .    \}
10955 .    el \{ .ti \\n[#PH_INDENT]u \}
10956 .    ie \\n[#PREFIX_CH_NUM]=1 \{\
10957 .       ds $CH_NUM \\n[#CH_NUM].
10958 .    \}
10959 .    el \{\
10960 .       rm $CH_NUM
10961 .    \}
10962 .    if \\n[#PRINT_STYLE]=1 \{\
10963 .       TYPEWRITER
10964 .       UNDERLINE OFF
10965 .       ie \\n[#NUMBER_PH] \{\
10966 .          if \\n[#NUMBER_HEAD] \{\
10967 .             ie \\n[#NUMBER_SH] \{\
10968 .                UNDERSCORE "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1"
10970 .             \}
10971 .             el \{\
10972 .                UNDERSCORE "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#PH_NUM].\\ \\$1"
10974 .             \}
10975 .          \}
10976 .          ie \\n[#NUMBER_SH] \{\
10977 .             if !\\n[#NUMBERED] \{\
10978 .                UNDERSCORE "\\*[$CH_NUM]\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1"
10980 .             \}
10981 .          \}
10982 .          el \{\
10983 .             if !\\n[#NUMBERED] \{\
10984 .                UNDERSCORE "\\*[$CH_NUM]\\n+[#PH_NUM].\\ \\$1"
10986 .             \}
10987 .          \}
10988 .       \}
10989 .       el \{\
10990 .          UNDERSCORE "\\$1"
10992 .       \}
10993 .       if \\n[#SLANT_WAS_ON] \{\
10994 .          if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
10995 .          if \\n[#SLANT_MEANS_SLANT] \{\
10996 \E*[SLANT]\c
10997 .          \}
10998 .          rr #SLANT_WAS_ON
10999 .       \}
11000 .    \}
11001 .    if \\n[#PRINT_STYLE]=2 \{\
11002 .       FAM     \\*[$PH_FAM]
11003 .       FT      \\*[$PH_FT]
11004 .       PT_SIZE \\*[$PH_SIZE_CHANGE]
11005 .       if \\n[#PH_COLOR]=1 \{ .COLOR \\*[$PH_COLOR] \}
11006 .          ie \\n[#NUMBER_PH] \{\
11007 .             ie \\n[#PREFIX_CH_NUM]=1 \{\
11008 .                ds $CH_NUM \\n[#CH_NUM].
11009 .             \}
11010 .             el \{\
11011 .                rm $CH_NUM
11012 .             \}
11013 .             if \\n[#NUMBER_HEAD] \{\
11014 .                ie \\n[#NUMBER_SH] \{\
11015 .                   PRINT "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
11016 .                \}
11017 .                el \{\
11018 .                   PRINT "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
11019 .                \}
11020 .             \}
11021 .             ie \\n[#NUMBER_SH] \{\
11022 .                if !\\n[#NUMBERED] \{\
11023 .                   PRINT "\\*[$CH_NUM]\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
11024 .                \}
11025 .             \}
11026 .             el \{\
11027 .                if !\\n[#NUMBERED] \{\
11028 .                   PRINT "\\*[$CH_NUM]\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
11029 .                \}
11030 .             \}
11031 .          \}
11032 .          el \{\
11033 .             PRINT "\\$1\h'.6m'\c"
11034 .          \}
11035 .       \}
11036 .    FAMILY  \\*[$DOC_FAM]
11037 .    FT      \\*[$PP_FT]
11038 .    PT_SIZE \\n[#DOC_PT_SIZE]u
11039 .    if \\n[#PH_COLOR]=1 \m[]\c
11040 .    if \\n[#SLANT_WAS_ON] \{\
11041 .       rr #SLANT_WAS_ON
11042 \E*[SLANT]\c
11043 .    \}
11044 .    rr #NUMBERED
11045 .    rm $TOC_PH_ITEM
11046 .END
11049 \# ====================================================================
11051 \# +++LINE BREAKS+++
11053 \# LINEBREAK CHARACTER
11054 \# -------------------
11055 \# *Arguments:
11056 \#   [character] [iterations] [vertical adjustment]
11057 \# *Function:
11058 \#   Allows user to specify a line break character and the number
11059 \#   of times to repeat it horiontally.
11060 \# *Notes:
11061 \#   Without an argument, LINEBREAK_CHAR will deposit a blank line.
11063 \#   Vertical adjustment requires a unit of measure (most likely
11064 \#   "p"), and has to be preceded by +|-
11066 .MAC LINEBREAK_CHAR END
11067 .    nr #REPEAT 1
11068 .    ds $LINEBREAK_CHAR \\$1
11069 .    ds $LINEBREAK_CHAR_V_ADJ \\$3
11070 .    if '\\*[$LINEBREAK_CHAR_V_ADJ]'' \{\
11071 .       ds $LINEBREAK_CHAR_V_ADJ +0
11072 .    \}
11073 .    while \\$2>\\n[#REPEAT] \{\
11074 .       as $LINEBREAK_CHAR "\\ \\$1
11075 .       nr #REPEAT \\n[#REPEAT]+1
11077 .   rr #REPEAT
11078 .END
11081 \# LINE BREAK
11082 \# ----------
11083 \# *Arguments:
11084 \#   <none>
11085 \# *Function:
11086 \#   Deposits line break character.
11087 \# *Notes:
11088 \#   If $LINEBREAK_CHAR is blank, simply advances 2 line spaces.
11090 .MAC LINEBREAK END
11091 .    if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
11092 .    po \\n[#DOC_L_MARGIN]u
11093 .    ie  '\\*[$LINEBREAK_CHAR]'' \{ .ALD \\n[#DOC_LEAD]u*2 \}
11094 .    el \{\
11095 .       if \\n[#PRINT_STYLE]=1 \{\
11096 .          ie \\n[#END_QUOTE] \{ . \}
11097 .          el \{ .ALD \\n[#DOC_LEAD]u \}
11098 .       \}
11099 .       if \\n[#PRINT_STYLE]=2 \{\
11100 .          ie \\n[#END_QUOTE] \{ . \}
11101 .          el \{ .ALD \\n[#DOC_LEAD]u \}
11102 .       \}
11103 .       ev LINEBREAK
11104 .       evc 0
11105 .       CENTER
11106 .       PRINT \m[\\*[$LINEBREAK_COLOR]]\\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\\*[$LINEBREAK_CHAR]\\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\m[]
11107 .       if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
11108 .       if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#DOC_LEAD]u \}
11109 .       ev
11110 .       QUAD \\*[$DOC_QUAD]
11111 .    \}
11112 .    nr #LINEBREAK 1
11113 .    if r#QUOTE     \{ .rr #QUOTE     \}
11114 .    if r#END_QUOTE \{ .rr #END_QUOTE \}
11115 .    nr #PP 0
11116 .END
11118 \# ====================================================================
11120 \# +++PARAGRAPHS+++
11122 \# PARAGRAPH FONT
11123 \# --------------
11124 \# *Argument:
11125 \#   <font of running text>
11126 \# *Function:
11127 \#   Creates or modifies string $PP_FT.
11128 \# *Notes:
11129 \#   Affects all paragraphs.
11131 .MAC PP_FONT END
11132 .    if \n[#PRINT_STYLE]=1 \{\
11133 .       ie \n[#ITALIC_MEANS_ITALIC] \{ .nop \}
11134 .       el \{ .return \}
11135 .    \}
11136 .    br
11137 .    if \\n[#COLLATE]=1 \{\
11138 .       if !'\\*[$SAVED_PP_FT]'' \{ .rm $SAVED_PP_FT \}
11139 .    \}
11140 .    ds $PP_FT \\$1
11141 .    FT \\*[$PP_FT]
11142 .END
11145 \# PARAGRAPH INDENT
11146 \# ----------------
11147 \# *Argument:
11148 \#   <amount to indent paragraphs in running text (ipPcm)>
11149 \# *Function:
11150 \#   Allows user to change the default para indent.  The change will
11151 \#   affect the indent of QUOTEs and BLOCKQUOTEs as well.
11152 \# *Notes:
11153 \#   Default for printstyle TYPEWRITE is 1/2-inch.  Default for
11154 \#   printstyle TYPESET is 2 ems.  The defaults are set in
11155 \#   PRINTSTYLE, not DEFAULTS.
11157 .MAC PARA_INDENT END
11158 .    nr #PP_INDENT (\\$1)
11159 .END
11162 \# INDENT FIRST PARAGRAPHS
11163 \# -----------------------
11164 \# *Arguments:
11165 \#   <none> | <anything>
11166 \# *Function:
11167 \#   By default, the first para of a document, as well as the first
11168 \#   paras of blockquotes and block-style epigraphs are not indented.
11169 \#   When invoked, this macro will indent all paras.
11170 \# *Notes:
11171 \#   Default is OFF.
11173 .MAC INDENT_FIRST_PARAS END
11174 .    ie '\\$1'' \{ .nr #INDENT_FIRST_PARAS 1 \}
11175 .    el \{ .rr #INDENT_FIRST_PARAS   \}
11176 .END
11179 \# INTER-PARAGRAPH SPACING
11180 \# -----------------------
11181 \# *Arguments:
11182 \#   <none> | <anything>
11183 \# *Function:
11184 \#   Adds a line space between paragraphs in body text.  Block quotes
11185 \#   are unaffected.
11186 \# *Notes:
11187 \#   Default is OFF.  PARA_SPACE ON is not recommended for use
11188 \#   with PRINTSTYLE TYPEWRITE.
11190 .MAC PARA_SPACE END
11191 .    ie '\\$1'' \{ .nr #PP_SPACE 1 \}
11192 .    el \{ .rr #PP_SPACE   \}
11193 .END
11196 \# PARAGRAPH
11197 \# ---------
11198 \# *Arguments:
11199 \#   <none>
11200 \# *Function:
11201 \#   Figures out what to do with paragraphs under differing conditions.
11202 \# *Notes:
11203 \#   For the time being, there's no automatic widow/orphan control.
11204 \#   Controlling them isn't just a matter of establishing an arbitrary
11205 \#   number of lines needed for a para, since groff doesn't then
11206 \#   handle single line paragraphs gracefully.  Usually, the whole
11207 \#   page needs to be tweaked.
11209 \#   Note the use of transparent line break (\!.br) to get
11210 \#   PP to work within blockquotes and epigraphs.
11212 \#   PP_STYLE 1 = regular paras; 2 = blockquotes, epigraphs
11214 .MAC PP END
11215 .    br
11216 .    if \\n[#DOC_TYPE]=4 \{\
11217 .       if !'\\n(.z'' \{ .di \}
11218 .       nr #TOTAL_FIELDS \\n[#FIELD]
11219 .       nr #FIELD        0 1
11220 .       nr #NUM_FIELDS   0 1
11221 .       if \\n[#TOTAL_FIELDS]>0 \{\
11222 .          while \\n+[#NUM_FIELDS]<=\\n[#TOTAL_FIELDS] \{\
11223 .             nf
11224 .             LETTERHEAD\\n+[#FIELD]
11225 .             QUAD \\*[$DOC_QUAD]
11226 .             ALD \\n[#DOC_LEAD]u
11227 .             if \\n[#DATE_FIRST]=1 \{ .ALD \\n[#DOC_LEAD]u \}
11228 .             rr #DATE_FIRST
11229 .             rm LETTERHEAD\\n[#FIELD]
11231 .          rr #FIELD
11232 .          rr #NUM_FIELDS
11233 .          rr #TOTAL_FIELDS
11234 .       \}
11235 .    \}
11236 .    rr #PP_ACTIVE
11237 .    if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
11238 .    if \\n[#PP_STYLE]=1 \{\
11239 .       if \\n[#ENDNOTE] \{\
11240 .          nr #RESET_PARA_SPACE \\n[#PP_SPACE]
11241 .          ie \\n[#EN_PP_SPACE] \{ .PARA_SPACE \}
11242 .          el \{ .PARA_SPACE OFF \}
11243 .       \}
11244 .       br
11245 .       if !\\n[#ENDNOTE] \{ .po \\n[#L_MARGIN]u \}
11246 .       if \\n[#COLUMNS] \{\
11247 .          if !\\n[#ENDNOTE] \{\
11248 .             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
11249 .             nr #L_MARGIN \\n(.o
11250 .          \}
11251 .       \}
11252 .       if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
11253 .       ie \\n[#PRINT_STYLE]=1 \{\
11254 .          TYPEWRITER
11255 .          ie \\n[#ENDNOTE] \{ .vs \\n[#EN_LEAD]u \}
11256 .          el \{ .vs \\n[#DOC_LEAD]u \}
11257 .          QUAD \\*[$DOC_QUAD]
11258 .          UNDERLINE OFF
11259 .          if \\n[#SLANT_ON] \{\
11260 .             if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
11261 .          \}
11262 .          if '\\*[$PP_FT]'I' \{\
11263 .             if \\n[#ITALIC_MEANS_ITALIC] \{ .FT I \}
11264 .          \}
11265 .       \}
11266 .       el \{\
11267 .          ie \\n[#ENDNOTE] \{\
11268 .             FAMILY  \\*[$EN_FAM]
11269 .             FT      \\*[$EN_FT]
11270 .             PT_SIZE \\n[#EN_PS]u
11271 .             vs      \\n[#EN_LEAD]u
11272 .             QUAD    \\*[$EN_QUAD]
11273 .          \}
11274 .          el \{\
11275 .             FAMILY  \\*[$DOC_FAM]
11276 .             if !'\\*[$SAVED_PP_FT]'' \{\
11277 .                ds $PP_FT \\*[$SAVED_PP_FT]
11278 .                rm $SAVED_PP_FT
11279 .             \}
11280 .             FT \\*[$PP_FT]
11281 .             PT_SIZE \\n[#DOC_PT_SIZE]u
11282 .             LS      \\n[#DOC_LEAD]u
11283 .             QUAD    \\*[$DOC_QUAD]
11284 .          \}
11285 .       \}
11286 .       ie \\n[#PP]=0 \{\
11287 .          if \\n[#INDENT_FIRST_PARAS] \{\
11288 .             ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
11289 .             el \{ .ti \\n[#PP_INDENT]u \}
11290 .             if '\\n(.z'END_NOTES' \{\
11291 .                ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
11292 .             \}
11293 .          \}
11294 .          if r#END_QUOTE \{\
11295 .             if \\n[#END_QUOTE] \{\
11296 .                if !\\n[#LINEBREAK] \{\
11297 .                   ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
11298 .                   el \{ .ti \\n[#PP_INDENT]u \}
11299 .                   if '\\n(.z'END_NOTES' \{\
11300 .                      ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
11301 .                   \}
11302 .                \}
11303 .             \}
11304 .          \}
11305 .       \}
11306 .       el \{\
11307 .          br
11308 .          if \\n[#PP_SPACE] \{\
11309 .             if \\n[#PRINT_STYLE]=2 \{\
11310 .                ie \\n[#END_QUOTE] \{\
11311 .                   ALD \\n[#DOC_LEAD]u
11312 .                   rr #END_QUOTE
11313 .                   nr #NO_SPACE 1
11314 .                   nr #BASELINE_MARK \\n(nl
11315 .                \}
11316 .                el \{\
11317 .                   if \\n[#NO_SPACE]=1 \{\
11318 .                      rr #NO_SPACE
11319 .                   \}
11320 .                   if !\\n(nl=\\n[#BASELINE_MARK] \{\
11321 .                      ALD \\n[#DOC_LEAD]u
11322 .                      rr #BASELINE_MARK
11323 .                   \}
11324 .                \}
11325 .             \}
11326 .          \}
11327 .          ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
11328 .          el \{ .ti \\n[#PP_INDENT]u \}
11329 .          if '\\n(.z'END_NOTES' \{\
11330 .             ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
11331 .          \}
11332 .       \}
11333 .       if r#START     \{ .rr #START     \}
11334 .       if r#QUOTE     \{ .rr #QUOTE     \}
11335 .       if r#END_QUOTE \{ .rr #END_QUOTE \}
11336 .       if r#HEAD      \{ .rr #HEAD      \}
11337 .       if r#EPIGRAPH  \{ .rr #EPIGRAPH  \}
11338 .       if r#Q_FITS    \{ .rr #Q_FITS    \}
11339 .       if r#LINEBREAK \{ .rr #LINEBREAK \}
11340 .       if \\n[#ENDNOTE] \{\
11341 .          ie \\n[#RESET_PARA_SPACE] \{ .PARA_SPACE \}
11342 .          el \{ .PARA_SPACE OFF \}
11343 .       \}
11344 .       if \\n[#CONDENSE] \{\
11345 \E*[COND]\c
11346 .       \}
11347 .       if \\n[#EXTEND]=1 \{\
11348 \E*[EXT]\c
11349 .       \}
11350 .       nr #PP +1
11351 .    \}
11352 .    if \\n[#PP_STYLE]=2 \{\
11353 \!.     br
11354 .       if \\n[#BROKEN_QUOTE] \{\
11355 .          ie \\n(nl=\\n[#PAGE_TOP] \{ .nr #Q_PP 1 \}
11356 .          el \{ .nr #Q_PP 0 \}
11357 .          rr #BROKEN_QUOTE
11358 .       \}
11359 .       ie \\n[#Q_PP]=0 \{\
11360 .          if \\n[#INDENT_FIRST_PARAS] \{\
11361 .             ti \\n[#PP_INDENT]u/2u
11362 .          \}
11363 .          if \\n[#ENDNOTE] \{\
11364 .             ie \\n[#INDENT_FIRSTS] \{ .ti \\n[#PP_INDENT]u/2u \}
11365 .             el \{ .ti 0 \}
11366 .          \}
11367 .       \}
11368 .       el \{\
11369 .          ti \\n[#PP_INDENT]u/2u
11370 .          if \\n[#PP_SPACE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
11371 .       \}
11372 .       if \\n[#CONDENSE] \{\
11373 \E*[COND]\c
11374 .       \}
11375 .       if \\n[#EXTEND]=1 \{\
11376 \E*[EXT]\c
11377 .       \}
11378 .    nr #Q_PP +1
11379 .    \}
11380 \# This takes care of multi-paragraph dialogue, where each para
11381 \# is introduced by an open quote whereas the previous para has
11382 \# no close quote.
11383 .    if \\n[#OPEN_CLOSE]=1 \{\
11384 .       nr #OPEN_CLOSE 0
11385 .    \}
11386 .    nr #PP_ACTIVE 1
11387 .END
11389 \# ====================================================================
11391 \# +++QUOTES+++
11393 \# ---Line for line quotes, i.e. poetry or code snippets---
11395 \# UNDERLINE QUOTES
11396 \# ----------------
11397 \# *Arguments:
11398 \#   <none> | <anything>
11399 \# *Function:
11400 \#   Creates or modifies register #UNDERLINE_QUOTES (toggle).
11401 \#   If on, line for line quotes are underlined when printstyle
11402 \#   is TYPEWRITE.
11403 \# *Notes:
11404 \#   Default is ON for printstyle TYPEWRITE.
11406 .MAC UNDERLINE_QUOTES END
11407 .    ie '\\$1'' \{ .nr #UNDERLINE_QUOTES 1 \}
11408 .    el \{ .rr #UNDERLINE_QUOTES \}
11409 .END
11412 \# QUOTE INDENT
11413 \# ------------
11414 \# *Argument:
11415 \#   <integer> | <integer with unit of measure appended>
11416 \# *Function:
11417 \#   Creates or modifies register #Q_OFFSET_VALUE.
11418 \# *Notes:
11419 \#   If just an integer given, value by which to multiply PARA_INDENT
11420 \#   to get quote indent.  If integer with a unit of measure appended,
11421 \#   absolute value of quote indent.
11423 \#  Default is 3 for typeset; 2 for typewrite.
11425 .MAC QUOTE_INDENT END
11426 .    if r#Q_OFFSET_VALUE         \{ .rr #Q_OFFSET_VALUE \}
11427 .    if !'\\*[$Q_OFFSET_VALUE]'' \{ .rm $Q_OFFSET_VALUE \}
11428 .    ds $EVAL_QI_ARG \\$1
11429 .    substring $EVAL_QI_ARG -1
11430 .    ie \B'\\*[$EVAL_QI_ARG]' \{\
11431 .       nr #Q_OFFSET_VALUE \\$1
11432 .    \}
11433 .    el \{\
11434 .       ds $Q_OFFSET_VALUE \\$1
11435 .    \}
11436 .    rm $EVAL_QI_ARG
11437 .END
11440 \# QUOTE_AUTOLEAD
11441 \# --------------
11442 \# *Arguments:
11443 \#   <autolead value>
11444 \# *Function:
11445 \#   Sets autolead for quotes and/or blockquotes.
11447 .MAC QUOTE_AUTOLEAD END
11448 .    if '\\$0'QUOTE_AUTOLEAD'      \{ .nr #Q_AUTOLEAD \\$1 \}
11449 .    if '\\$0'BLOCKQUOTE_AUTOLEAD' \{ .nr #BQ_AUTOLEAD \\$1 \}
11450 .    if '\\$0'ENDNOTE_QUOTE_AUTOLEAD'      \{ .nr #EN_Q_AUTOLEAD \\$1 \}
11451 .    if '\\$0'ENDNOTE_BLOCKQUOTE_AUTOLEAD' \{ .nr #EN_BQ_AUTOLEAD \\$1 \}
11452 .END
11454 .ALIAS BLOCKQUOTE_AUTOLEAD         QUOTE_AUTOLEAD
11455 .ALIAS ENDNOTE_QUOTE_AUTOLEAD      QUOTE_AUTOLEAD
11456 .ALIAS ENDNOTE_BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD
11458 \# ALWAYS FULLSPACE QUOTES
11459 \# -----------------------
11460 \# *Arguments:
11461 \#   <none> | <anything>
11462 \# *Function:
11463 \#   Toggles register #FULLSPACE_QUOTES.
11464 \# *Notes:
11465 \#   If user doesn't like the default 1/2 line space above and below
11466 \#   quotes, s/he can turn it off here.  Has no effect in TYPEWRITE.
11468 .MAC ALWAYS_FULLSPACE_QUOTES END
11469 .    if '\\$1'' \{ .nr #FULLSPACE_QUOTES 1 \}
11470 .    el \{ .rr #FULLSPACE_QUOTES \}
11471 .END
11474 \# QUOTE
11475 \# -----
11476 \# *Arguments:
11477 \#   <none> | <anything>
11478 \# *Function:
11479 \#   Indents quoted text on a line for line basis, or turns QUOTE off.
11480 \# *Notes:
11481 \#   Owing to the need to bottom align TYPESET pages, quoted text gets
11482 \#   diverted so its depth can be measured (in DO_QUOTE) for determining
11483 \#   how much space to put before and after.
11485 \# QUOTE
11486 \# -----
11487 \# *Arguments:
11488 \#   <none> | <anything>
11489 \# *Function:
11490 \#   Indents quoted text on a line for line basis, or turns QUOTE off.
11491 \# *Notes:
11492 \#   Owing to the need to bottom align TYPESET pages, quoted text gets
11493 \#   diverted so its depth can be measured (in DO_QUOTE) for determining
11494 \#   how much space to put before and after.
11496 .MAC QUOTE END
11497 .    br
11498 .    if \\n[#LINENUMBERS]=1 \{\
11499 .       nr #LINENUMBERS 2
11500 .       nr #NEXT_LN \\n(ln
11501 .       nm
11502 .    \}
11503 .    ie '\\$1'' \{\
11504 .       ev QUOTE
11505 .       if \\n[#LINENUMBERS]=2 \{\
11506 .          if \\n[#SILENT_QUOTE_LN]=1 \{ .nm \\n[#NEXT_LN] 1000 -4 \}
11507 .       \}
11508 .       nr #IN_DIVER 1
11509 .       nr #QUOTE 1
11510 .       di P_QUOTE
11511 .       ie r#Q_OFFSET_VALUE \{\
11512 .          ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
11513 .       \}
11514 .       el \{ .ll \\n[#L_LENGTH]u-\\*[$Q_OFFSET_VALUE] \}
11515 .       if \\n[#LINENUMBERS]=2 \{\
11516 .          if \\n[#QUOTE_LN]=1 \{\
11517 .             nm \\n(ln "" \\*[$Q_LN_GUTTER] -3-\\*[$Q_LN_GUTTER]
11518 .          \}
11519 .       \}
11520 .       ta \\n(.lu
11521 .       if \\n[#COLUMNS] \{\
11522 .          ie r#Q_OFFSET_VALUE \{\
11523 .             ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
11524 .          \}
11525 .          el \{\
11526 .             ll \\n[#COL_L_LENGTH]u-\\*[$Q_OFFSET_VALUE]
11527 .          \}
11528 .          ta \\n(.lu
11529 .       \}
11530 .       if \\n[#PRINT_STYLE]=1 \{\
11531 .          TYPEWRITER
11532 .          vs \\n[#DOC_LEAD]u
11533 .          LEFT
11534 .       \}
11535 .       if \\n[#PRINT_STYLE]=2 \{\
11536 .          FAMILY  \\*[$QUOTE_FAM]
11537 .          FT      \\*[$QUOTE_FT]
11538 .          PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$QUOTE_SIZE_CHANGE]
11539 .          ie !r#Q_AUTOLEAD  \{ .LS \\n[#Q_LEAD]u \}
11540 .          el \{\
11541 .             AUTOLEAD \\n[#Q_AUTOLEAD]
11542 .             nr #Q_LEAD \\n(.v
11543 .          \}
11544 .          if \\n[#ENDNOTE] \{\
11545 .             PT_SIZE \\n[#EN_PS]u\\*[$QUOTE_SIZE_CHANGE]
11546 .             ie !r#EN_Q_AUTOLEAD  \{ .LS \\n[#EN_Q_LEAD]u \}
11547 .             el \{\
11548 .                AUTOLEAD \\n[#EN_Q_AUTOLEAD]
11549 .                nr #EN_Q_LEAD \\n(.v
11550 .             \}
11551 .          \}
11552 .          nr #Q_LEAD_REAL \\n(.v
11553 .          LEFT
11554 .          if \\n[#QUOTE_COLOR]=1 \{\
11555 .             nf
11556 \m[\\*[$QUOTE_COLOR]]
11557 .             EOL
11558 .          \}
11559 .       \}
11560 .       if \\n[#LINENUMBERS]=2 \{\
11561 .          ie \\n[#QUOTE_LN]=1 \{\
11562 .             if '\\*[$Q_LN_GUTTER]'' .ds $Q_LN_GUTTER \\*[$LN_GUTTER]
11563 .             nm \\n(ln "" \\*[$Q_LN_GUTTER] -3-\\*[$Q_LN_GUTTER]
11564 .          \}
11565 .          el \{\
11566 .             if !\\n[#SILENT_QUOTE_LN] \{ .NUMBER_LINES OFF \}
11567 .          \}
11568 .       \}
11569 .       nr #Q_TOP \\n(nl
11570 .       if \\n[#PRINT_STYLE]=1 \{\
11571 .          if \\n[#UNDERLINE_QUOTES] \{\
11572 .               FT I
11573 .          \}
11574 .       \}
11575 .    \}
11576 .    el \{ .DO_QUOTE \}
11577 .END
11580 \# CODE
11581 \# ----
11582 \# *Arguments:
11583 \#   <none [ BR | BREAK | SPREAD ]> | <anything [ BR | BREAK | SPREAD ]>
11584 \# *Function:
11585 \#   Takes care of admistrivia associated with setting code snippets.
11587 .MAC CODE END
11589 .    if '\\$1'BR' \{\
11590 .       br
11591 .       shift
11592 .     \}
11593 .    if '\\$1'BREAK' \{\
11594 .       br
11595 .       shift
11596 .     \}
11597 .    if '\\$1'SPREAD' \{\
11598 .       brp
11599 .       shift
11600 .     \}
11601 .    ie '\\$1'' \{\
11602 .       ds $PRE_CODE_FAM \\n[.fam]
11603 .       ds $PRE_CODE_FT \\n[.sty]
11604 .       if !\\n[#PRINT_STYLE]=1 \{\
11605 .          ie \\n[#CODE_FAM]=1 \{ .fam \\*[$CODE_FAM] \}
11606 .          el \{ .fam C \}
11607 .       \}
11608 .       ft  R
11609 .       if \\n[#UNDERLINE_QUOTES]=1 \{\
11610 .           nr #RESTORE_UNDERLINE 1
11611 .           UNDERLINE_QUOTES OFF
11612 .           FT R
11613 .       \}
11614 .       if \\n[#PRINT_STYLE]=2 \{\
11615 .          tr `'
11616 .       \}
11617 .       if \\n[#RESTORE_SQ]=1 \{\
11618 .          nr #SQ_WAS_ON 1
11619 .          SMARTQUOTES OFF
11620 .       \}
11621 .    \}
11622 .    el \{\
11623 .       fam \\*[$PRE_CODE_FAM]
11624 .       ft  \\*[$PRE_CODE_FT]
11625 .       rr $RESTORE_FT
11626 .       if \\n[#RESTORE_UNDERLINE]=1 \{\
11627 .          rr #RESTORE_UNDERLINE
11628 .          UNDERLINE_QUOTES
11629 .       \}
11630 .       if \\n[#SQ_WAS_ON]=1 \{\
11631 .          rr #SQ_WAS_ON
11632 .          SMARTQUOTES
11633 .       \}
11634 .       if \\n[#PRINT_STYLE]=2 \{\
11635 .          tr ``
11636 .       \}
11637 .    \}
11638 .    if \\n[#NUM_ARGS]=2 \{\
11639 .       if '\\$2'BR'     \{ .br  \}
11640 .       if '\\$2'BREAK'  \{ .br  \}
11641 .       if '\\$2'SPREAK' \{ .brp \}
11642 .    \}
11643 .END
11645 \# CODE_FAMILY
11646 \# -----------
11647 \# *Arguments:
11648 \#   <family>
11649 \# *Function:
11650 \#   Creates register #CODE_FAM and string $CODE_FAM for use by CODE.
11652 .MAC CODE_FAMILY END
11653 .    nr #CODE_FAM 1
11654 .    ds $CODE_FAM \\$1
11655 .END
11658 \# ---Blockquotes---
11660 \# BLOCKQUOTE
11661 \# ----------
11662 \# *Arguments:
11663 \#   <none> | <anything>
11664 \# *Function:
11665 \#   Indents quoted text in fill mode and shortens line length
11666 \#   equivalently, or turns BLOCKQUOTE off.
11667 \# *Notes:
11668 \#   Owing to the need to bottom align TYPESET pages, quoted text gets
11669 \#   diverted so its depth can be measured (in DO_QUOTE) for determining
11670 \#   how much space to put before and after.
11672 \#   .PP after blockquote is optional if there's only one para,
11673 \#   but REQUIRED if there's more than one.
11675 .MAC BLOCKQUOTE END
11676 .    br
11677 .    if \\n[#LINENUMBERS]=1 \{\
11678 .       nr #LINENUMBERS 2
11679 .       nr #NEXT_LN \\n(ln
11680 .       nm
11681 .    \}
11682 .    ie '\\$1'' \{\
11683 .       ev BLOCKQUOTE
11684 .       if \\n[#LINENUMBERS]=2 \{\
11685 .          if \\n[#SILENT_BQUOTE_LN]=1 \{ .nm \\n[#NEXT_LN] 1000 -4 \}
11686 .       \}
11687 .       nr #IN_DIVER 1
11688 .       nr #QUOTE    2
11689 .       nr #PP_STYLE 2
11690 .       nr #Q_PP     0
11691 .       di B_QUOTE
11692 .       ie r#Q_OFFSET_VALUE \{\
11693 .          ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11694 .       \}
11695 .       el \{ .ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u) \}
11696 .       if \\n[#ENDNOTE] \{\
11697 .          if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
11698 .             ie r#Q_OFFSET_VALUE \{\
11699 .                ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11700 .             \}
11701 .             el \{\
11702 .                ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$Q_OFFSET_VALUE]*2u)
11703 .             \}
11704 .          \}
11705 .          if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
11706 .             ie r#Q_OFFSET_VALUE \{\
11707 .                ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11708 .             \}
11709 .             el \{\
11710 .                ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]u*2u)
11711 .             \}
11712 .          \}
11713 .       \}
11714 .       ta \\n(.lu
11715 .       CHECK_INDENT
11716 .       if \\n[#COLUMNS] \{\
11717 .          ie r#Q_OFFSET_VALUE \{\
11718 .             ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11719 .          \}
11720 .          el \{\
11721 .             ll \\n[#COL_L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
11722 .          \}
11723 .          if \\n[#ENDNOTE] \{\
11724 .             if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
11725 .                ie r#Q_OFFSET_VALUE \{\
11726 .                   ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11727 .                \}
11728 .                el \{\
11729 .                   ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$Q_OFFSET_VALUE]*2u)
11730 .                \}
11731 .             \}
11732 .             if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
11733 .                ie r#Q_OFFSET_VALUE \{\
11734 .                   ll \\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11735 .                \}
11736 .                el \{\
11737 .                   ll \\n[#COL_L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
11738 .                \}
11739 .             \}
11740 .          \}
11741 .          ta \\n(.lu
11742 .       \}
11743 .       if \\n[#PRINT_STYLE]=1 \{\
11744 .          TYPEWRITER
11745 .          vs \\n[#DOC_LEAD]u
11746 .          QUAD LEFT
11747 .          HY OFF
11748 .       \}
11749 .       if \\n[#PRINT_STYLE]=2 \{\
11750 .          FAMILY  \\*[$BQUOTE_FAM]
11751 .          FT      \\*[$BQUOTE_FT]
11752 .          PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$BQUOTE_SIZE_CHANGE]
11753 .          ie !\\n[#BQ_AUTOLEAD] \{ .LS \\n[#BQ_LEAD]u \}
11754 .          el \{\
11755 .             AUTOLEAD \\n[#BQ_AUTOLEAD]
11756 .             nr #BQ_LEAD \\n(.v
11757 .          \}
11758 .          if \\n[#ENDNOTE] \{\
11759 .             PT_SIZE \\n[#EN_PS]u\\*[$BQUOTE_SIZE_CHANGE]
11760 .             ie !r#EN_BQ_AUTOLEAD  \{ .LS \\n[#EN_BQ_LEAD]u \}
11761 .             el \{\
11762 .                AUTOLEAD \\n[#EN_BQ_AUTOLEAD]
11763 .                nr #EN_BQ_LEAD \\n(.v
11764 .             \}
11765 .          \}
11766 .          nr #Q_LEAD_REAL \\n(.v
11767 .          if \\n[#BQUOTE_COLOR]=1 \{\
11768 .             nf
11769 \m[\\*[$BQUOTE_COLOR]]
11770 .             EOL
11771 .          \}
11772 .          QUAD \\*[$BQUOTE_QUAD]
11773 .          nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
11774 .          HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
11775 .          hy 14
11776 .       \}
11777 .       if \\n[#LINENUMBERS]=2 \{\
11778 .          ie \\n[#BQUOTE_LN]=1 \{\
11779 .             if '\\*[$BQ_LN_GUTTER]'' .ds $BQ_LN_GUTTER \\*[$LN_GUTTER]
11780 .             nm \\n(ln "" \\*[$BQ_LN_GUTTER] -3-\\*[$BQ_LN_GUTTER]
11781 .          \}
11782 .          el \{\
11783 .             if !\\n[#SILENT_BQUOTE_LN] \{ .NUMBER_LINES OFF \}
11784 .          \}
11785 .       \}
11786 .       nr #Q_TOP \\n(nl
11787 .       if \\n[#INDENT_FIRST_PARAS] \{\
11788 .          ie !\\n[#ENDNOTE] \{\
11789 .             if \\n[#PRINT_STYLE]=1 \{ .ti \\n[#PP_INDENT]u/2u \}
11790 .             if \\n[#PRINT_STYLE]=2 \{ .ti \\n[#PP_INDENT]u/2u \}
11791 .          \}
11792 .          el \{\
11793 .             if \\n[#INDENT_FIRSTS]=1 \{\
11794 .                if \\n[#PRINT_STYLE]=1 \{ .ti \\n[#EN_PP_INDENT]u/2u \}
11795 .                if \\n[#PRINT_STYLE]=2 \{ .ti \\n[#EN_PP_INDENT]u/2u \}
11796 .             \}
11797 .          \}
11798 .       \}
11799 .    \}
11800 .    el \{ .DO_QUOTE \}
11801 .END
11804 \# DO QUOTE
11805 \# --------
11806 \# *Arguments:
11807 \#   <none>
11808 \# *Function:
11809 \#   Ends the diversion P_QUOTE or B_QUOTE.  Spaces them according to
11810 \#   PRINTSTYLE, whether there's inter-paragraph spacing, and page
11811 \#   position.  TYPEWRITE treats spacing the same way in all circumstance
11812 \#   (viz. an extra line space).  TYPESET puts in only half
11813 \#   line spaces if the entire quote plus 1 line of body under the quote
11814 \#   fits on the the page; otherwise it puts in a full extra blank
11815 \#   line.  (This is to ensure the page remains bottom aligned).
11817 .MAC DO_QUOTE END
11818 .    br
11819 .    if \\n[#DIVER_LN_OFF] \{\
11820 \!.     NUMBER_LINES OFF
11821 .       rr #DIVER_LN_OFF
11822 .    \}
11823 .    di
11824 .    rr #IN_DIVER
11825 .    if \\n[#RESET_FN_COUNTERS]=2 \{\
11826 .       if !\\n[#FN_COUNT]=1 \{\
11827 .          if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
11828 .             DIVER_FN_2_POST
11829 .             rr #RESET_FN_COUNTERS
11830 .          \}
11831 .       \}
11832 .    \}
11833 .    nr #SAVED_FN_NUMBER \\n[#FN_NUMBER]
11834 .    nr #DONE_ONCE 0 1
11835 .    REMOVE_INDENT
11836 .    ev
11837 .    nr #Q_DEPTH (\\n[#DIVER_DEPTH]-\\n[#Q_LEAD_REAL])+\\n[#LEAD]
11838 .    nr #Q_LEAD_DIFF \\n[#LEAD]-\\n[#Q_LEAD_REAL]
11839 .    SILENT
11840 .    br
11841 .    nf
11842 .    nr #CURRENT_V_POS \\n(nl+\\n[#Q_LEAD_DIFF]+(\\n[#DIVER_DEPTH]-\\n[#Q_DEPTH_REAL])
11843 .    SHIM
11844 .    SILENT OFF
11845 .    nr #Q_SPACE_ADJ \\n[#SHIM]/2
11846 .    nr #TRAP \\n(.t-1
11847 .    if \\n[#ENDNOTE] \{\
11848 .       nr #RESET_QUOTE_SPACING \\n[#FULLSPACE_QUOTES]
11849 .       ALWAYS_FULLSPACE_QUOTES
11850 .    \}
11851 .    if \\n[#PRINT_STYLE]=1 \{\
11852 .       if \\n[#START]=1 \{ . \}
11853 .       if \\n[#START]=0 \{\
11854 .          if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
11855 .       \}
11856 .       if \\n[#HEAD] \{\
11857 .          if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \}
11858 .       \}
11859 .    \}
11860 .    if \\n[#PRINT_STYLE]=2 \{\
11861 .       ie \\n[#PP_SPACE] \{\
11862 .          ie \\n[#HEAD]>0 \{ . \}
11863 .          el \{\
11864 .             ie \\n[#START] \{ . \}
11865 .             el \{ .ALD \\n[#DOC_LEAD]u \}
11866 .          \}
11867 .       \}
11868 .       el \{\
11869 .          ie \\n[#Q_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
11870 .             ie (\\n[#TRAP_DISTANCE]-1)-\\n[#Q_DEPTH]<\\n[#DOC_LEAD] \{\
11871 .                Q_NOFIT
11872 .             \}
11873 .             el \{\
11874 .                Q_FITS
11875 .             \}
11876 .          \}
11877 .          el \{\
11878 .             Q_NOFIT
11879 .          \}
11880 .       \}
11881 .    \}
11882 .    ie r#Q_OFFSET_VALUE \{\
11883 .       nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
11884 .    \}
11885 .    el \{ .nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE] \}
11886 .    if \\n[#COLUMNS] \{\
11887 .       ie r#Q_OFFSET_VALUE \{\
11888 .          nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
11889 .       \}
11890 .       el \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE] \}
11891 .    \}
11892 .    if !\\n[#ENDNOTE] \{ .po \\n[#Q_OFFSET]u \}
11893 .    if \\n[#ENDNOTE] \{\
11894 .       ie r#Q_OFFSET_VALUE \{ .in +\\n[#EN_PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u \}
11895 .       el \{ .in +\\*[$Q_OFFSET_VALUE] \}
11896 .    \}
11897 .    ie \\n[#START]=1 \{\
11898 .       ie !\\n[#Q_LEAD_DIFF]<0 \{ .ALD \\n[#Q_SPACE_ADJ]u \}
11899 .       el \{ .RLD 0-\\n[#Q_LEAD_DIFF]u \}
11900 .    \}
11901 .    el \{\
11902 .       if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#Q_SPACE_ADJ]u \}
11903 .    \}
11904 .    if \\n[#QUOTE]=1 \{\
11905 .       nf
11906 .       P_QUOTE
11907 .       if !\\n[#START] \{ .rr #QUOTE \}
11908 .    \}
11909 .    if \\n[#QUOTE]=2 \{\
11910 .       nf
11911 .       B_QUOTE
11912 .    \}
11913 .    if \\n[#PRINT_STYLE]=1 \{\
11914 .       ALD \\n[#DOC_LEAD]u
11915 .       if !\\n[.v]=\\n[#DOC_LEAD] \{ .SHIM \}
11916 .    \}
11917 .    if \\n[#PRINT_STYLE]=2 \{\
11918 .       ie \\n[#START] \{\
11919 .          ie \\n[#PP_SPACE] \{\
11921 .          \}
11922 .          el \{\
11923 .             ALD \\n[#DOC_LEAD]u
11924 .             SHIM
11925 .          \}
11926 .       \}
11927 .       el \{\
11928 .          ie \\n[#PP_SPACE] \{ . \}
11929 .          el \{\
11930 .             ie \\n[#HEAD]=1 \{\
11931 .                ALD \\n[#DOC_LEAD]u
11932 .                SHIM
11933 .             \}
11934 .             el \{\
11935 .                ie \\n[#FULLSPACE_QUOTES] \{\
11936 .                   ie \\n[#ENDNOTE] \{ .ALD \\n[#EN_LEAD]u \}
11937 .                   el \{ .ALD \\n[#DOC_LEAD]u \}
11938 .                \}
11939 .                el \{ .ALD (\\n[#DOC_LEAD]u/2u) \}
11940 .                ie \\n[#Q_FITS] \{\
11941 .                   ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\
11942 .                      nr #Q_AT_TOP 1
11943 .                      nr #DELAY_SHIM 1
11944 .                   \}
11945 .                   el \{ .SHIM \}
11946 .                \}
11947 .                el \{\
11948 .                   SHIM
11949 .\" Make sure that Q_LEAD_DIFF is not added to the first line of
11950 .\" normal text at the top of any page following output of a quote
11951 .\" whose last line falls on B_MARGIN of the previous page.
11952 .                   if \\n(nl=(\\n[#T_MARGIN]-\\n[#DOC_LEAD]+\\n[#Q_LEAD_DIFF]) \{\
11953 .                      PRINT \&
11954 .                      br
11955 .                      sp -1v-\\n[#Q_LEAD_DIFF]u
11956 .                   \}
11957 .                \}
11958 .             \}
11959 .          \}
11960 .       \}
11961 .    \}
11962 .    if \\n[#LINENUMBERS]=2 \{\
11963 .       nr #LINENUMBERS 1
11964 .       if !\\n[#ENDNOTE] \{\
11965 .          ie \\n[#RESTORE_LN_NUM]=1 \{ .nm \\n[#NEXT_LN] \}
11966 .          el \{ .nm +0 \}
11967 .       \}
11968 .    \}
11969 .    if \\n[#ENDNOTE] \{ .nr #FULLSPACE_QUOTES \\n[#RESET_QUOTE_SPACING] \}
11970 .    if r#HEAD        \{ .rr #HEAD     \}
11971 .    if r#EPIGRAPH    \{ .rr #EPIGRAPH \}
11972 .    rr #Q_PP
11973 .    rr #LINEBREAK
11974 .    nr #PP_STYLE  1
11975 .    nr #END_QUOTE 1
11976 .    if !\\n[#ENDNOTE] \{ .po \\n[#L_MARGIN]u \}
11977 .    if \\n[#ENDNOTE] \{\
11978 .       in \\n[#EN_TEXT_INDENT]u
11979 .    \}
11980 .    if \\n[#COLUMNS] \{\
11981 .       if !\\n[#ENDNOTE] \{\
11982 .          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
11983 .          nr #L_MARGIN \\n(.o
11984 .       \}
11985 .       if \\n[#ENDNOTE] \{\
11986 .          in \\n[#EN_TEXT_INDENT]u
11987 .       \}
11988 .    \}
11989 .    ie !\\n[#ENDNOTE] \{\
11990 .       nr #RESET_PP_INDENT \\n[#PP_INDENT]
11991 .       PARA_INDENT 0
11992 .       PP
11993 .       PARA_INDENT \\n[#RESET_PP_INDENT]u
11994 .       QUAD \\*[$DOC_QUAD]
11995 .    \}
11996 .    el \{\
11997 .       nr #RESET_EN_PP_INDENT \\n[#EN_PP_INDENT]
11998 .       ENDNOTE_PARA_INDENT 0
11999 .       PP
12000 .       ENDNOTE_PARA_INDENT \\n[#RESET_EN_PP_INDENT]u
12001 .       QUAD \\*[EN_QUAD]
12002 .    \}
12003 .    if r#DELAY_SHIM \{\
12004 .       SHIM
12005 .       rr #DELAY_SHIM
12006 .    \}
12007 .END
12010 \# Utility macros for DO_QUOTE
12011 \# ---------------------------
12013 .MAC Q_FITS END
12014 .    nr #Q_FITS 1
12015 .    ie \\n[#HEAD]=1 \{\
12016 .       ALD \\n[#Q_LEAD_DIFF]u
12017 .    \}
12018 .    el \{\
12019 .       ie \\n[#START] \{ . \}
12020 .       el \{\
12021 .          ie \\n[#FULLSPACE_QUOTES] \{\
12022 .             ie \\n[#ENDNOTE] \{ .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
12023 .             el \{ .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
12024 .          \}
12025 .          el \{\
12026 .\" This seems to be the only way to get the baseline of quotes that start
12027 .\" at the top of the page to fall on the first line of the "grid" (i.e on
12028 .\" the first valid baseline of the page).
12029 .             ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\
12030 .                if \\n[#QUOTE]=1 \{\
12031 .                   rn P_QUOTE Q_TEMP
12032 .                   di P_QUOTE
12033 .                   vs \\n[#Q_LEAD]u
12034 .                   PRINT \&
12035 .                   sp -1v+\\n[#Q_LEAD_DIFF]u
12036 .                   Q_TEMP
12037 .                   di
12038 .                \}
12039 .                if \\n[#QUOTE]=2 \{\
12040 .                   rn B_QUOTE Q_TEMP
12041 .                   di B_QUOTE
12042 .                   vs \\n[#BQ_LEAD]u
12043 .                   PRINT \&
12044 .                   sp -1v+\\n[#Q_LEAD_DIFF]u
12045 .                   Q_TEMP
12046 .                   di
12047 .                \}
12048 .                rm Q_TEMP
12049 .             \}
12050 .             el \{\
12051 .                ALD (\\n[#DOC_LEAD]u/2u)+\\n[#Q_LEAD_DIFF]u
12052 .             \}
12053 .          \}
12054 .       \}
12055 .       if \\n[#DIVER_FN]=2 \{ .rr #DIVER_FN \}
12056 .    \}
12057 .END
12059 .MAC Q_NOFIT END
12060 .    rr #Q_FITS
12061 .    ie r#HEAD \{\
12062 .       if \\n[#HEAD]=1 \{ . \}
12063 .    \}
12064 .    el \{\
12065 .       ie \\n[#FULLSPACE_QUOTES] \{\
12066 .          ie \\n[#ENDNOTE] \{ .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
12067 .          el \{ .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
12068 .       \}
12069 .       el \{ .ALD (\\n[#DOC_LEAD]u/2u)+\\n[#Q_LEAD_DIFF]u \}
12070 .       nr #Q_PARTIAL_DEPTH 0 \\n[#Q_LEAD_REAL]
12071 .       while \\n+[#Q_PARTIAL_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
12074 .       nr #Q_PARTIAL_DEPTH -\\n[#Q_LEAD_REAL]
12075 .       nr #Q_SPACE_ADJ (\\n[#TRAP_DISTANCE]-1)-\\n[#Q_PARTIAL_DEPTH]+\\n[#Q_LEAD_DIFF]u
12076 .\" Hack to deal with the fact that even though the above routine
12077 .\" makes the bottom line of the quote fall exactly on the bottom
12078 .\" margin when traps are disabled, it refuses to do so when traps
12079 .\" are on.  The difference by which it's off is #Q_LEAD_DIFF
12080 .\" (the +\\n[#Q_LEAD_DIFF] at the end of the line, above).  Hack
12081 .\" solution: temporarily lower the FOOTER trap position.
12082 .       nr #SAVED_FOOTER_POS \\n[#VARIABLE_FOOTER_POS]
12083 .       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+.25v
12084 .    \}
12085 .END
12087 \# ====================================================================
12089 \# BREAK QUOTE
12090 \# -----------
12091 \# *Arguments:
12092 \#   <none>
12093 \# *Function:
12094 \#   Ends the diversion P_QUOTE or B_QUOTE, breaks to a new
12095 \#   page, and reinvokes BLOCKQUOTE.
12096 \# *Notes:
12097 \#   Because quotes go into a diversion before they're output,
12098 \#   footnotes in quotes that cross pages behave erratically.  The footnote
12099 \#   isn't processed until the diversion ends, hence the footnote
12100 \#   marker in the quote isn't always correct for the new page (it's
12101 \#   picked up from the old one).  BREAK_QUOTE is a workaround for
12102 \#   this problem.
12104 .MAC BREAK_QUOTE END
12105 .    br
12106 .    di
12107 .    nr #BROKEN_QUOTE 1
12108 .    REMOVE_INDENT
12109 .    ev
12110 .    nr #Q_DEPTH \\n[#DIVER_DEPTH]+\\n[#LEAD]
12111 .    if \\n[#PRINT_STYLE]=1 \{\
12112 .       if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
12113 .       if \\n[#HEAD] \{\
12114 .          if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \}
12115 .       \}
12116 .    \}
12117 .    if \\n[#PRINT_STYLE]=2 \{\
12118 .       ie \\n[#PP_SPACE] \{\
12119 .          ie \\n[#HEAD]=1 \{ . \}
12120 .          el \{\
12121 .             if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
12122 .          \}
12123 .       \}
12124 .       el \{\
12125 .          rr #Q_FITS
12126 .          ie r#HEAD \{\
12127 .             if \\n[#HEAD]=1 \{ . \}
12128 .          \}
12129 .          el \{ .ALD \\n[#DOC_LEAD]u \}
12130 .       \}
12131 .    \}
12132 .    ie r#Q_OFFSET_VALUE \{\
12133 .       nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
12134 .    \}
12135 .    el \{\
12136 .       nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
12137 .    \}
12138 .    if \\n[#COLUMNS] \{\
12139 .       ie r#Q_OFFSET_VALUE \{\
12140 .          nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
12141 .       \}
12142 .       el \{\
12143 .          nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE]
12144 .       \}
12145 .    \}
12146 .    po \\n[#Q_OFFSET]u
12147 .    if \\n[#QUOTE]=1 \{\
12148 .       nf
12149 .       P_QUOTE
12150 .    \}
12151 .    if \\n[#QUOTE]=2 \{\
12152 .       nf
12153 .       B_QUOTE
12154 .    \}
12155 .    if r#HEAD     \{ .rr #HEAD     \}
12156 .    if r#EPIGRAPH \{ .rr #EPIGRAPH \}
12157 .    rr #Q_PP
12158 .    rr #LINEBREAK
12159 .    nr #PP_STYLE  1
12160 .    nr #END_QUOTE 1
12161 .    if \\n[#PRINT_STYLE]=1 \{\
12162 .       if \\n[#UNDERLINE_QUOTES] \{\
12163 .          UNDERLINE OFF
12164 .       \}
12165 .    \}
12166 .    po \\n[#L_MARGIN]u
12167 .    if \\n[#COLUMNS] \{\
12168 .       po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
12169 .       nr #L_MARGIN \\n(.o
12170 .    \}
12171 .    QUAD \\*[$DOC_QUAD]
12172 .    sp |\\n[#PAGE_LENGTH]u  \" To trip footer/header
12173 .    BLOCKQUOTE
12174 .END
12176 \# ====================================================================
12178 \# +++PAGINATION+++
12180 \# PAGINATE
12181 \# --------
12182 \# *Arguments:
12183 \#   <none> | <anything>
12184 \# *Function:
12185 \#   Turns page numbering off or on during document processing.
12186 \# *Notes:
12187 \#   Default is on.
12189 .MAC PAGINATE END
12190 .    ie '\\$1'' \{ .nr #PAGINATE 1 \}
12191 .    el \{ .nr #PAGINATE 0 \}
12192 .    if \\n[#HF_OFF]=1 \{\
12193 .       rr #PAGINATION_STATE
12194 .       rr #HF_OFF
12195 .    \}
12196 .END
12199 \# SUSPEND PAGINATION (before ENDNOTES)
12200 \# ------------------
12201 \# *Argument:
12202 \#   <none>
12203 \# *Function:
12204 \#   Creates register #SUSPEND_PAGINATION
12205 \# *Notes:
12206 \#   Useful only to suspend pagination before outputting endnotes.
12208 .MAC SUSPEND_PAGINATION END
12209 .    nr #SUSPEND_PAGINATION 1
12210 .END
12212 \# RESTORE PAGINATION (after ENDNOTES)
12213 \# ------------------
12214 \# *Argument:
12215 \#   <none>
12216 \# *Function:
12217 \#   Removes register #SUSPEND_PAGINATION.  Creates register
12218 \#   #DEFER_PAGINATION
12219 \# *Notes:
12220 \#   Useful only to restore pagination after outputting endnotes.
12222 .MAC RESTORE_PAGINATION END
12223 .    rr #SUSPEND_PAGINATION
12224 .    if \\n[#PAGE_NUM_V_POS]=1 \{ .PAGINATE \}
12225 .    if \\n[#PAGE_NUM_V_POS]=2 \{ .nr #DEFER_PAGINATION 1 \}
12226 .END
12229 \# PAGE NUMBER FORMAT
12230 \# ------------------
12231 \# *Arguments:
12232 \#   DIGIT | ROMAN | roman | ALPHA | alpha
12233 \# *Function:
12234 \#   Assigns user entered format to #PAGENUMBER.
12236 .MAC PAGENUM_STYLE END
12237 .    nr #PAGENUM_STYLE_SET 1
12238 .    if '\\$1'DIGIT'  \{\
12239 .       ds $PAGENUM_STYLE \\$1
12240 .       af #PAGENUMBER 1
12241 .    \}
12242 .    if '\\$1'ROMAN'  \{\
12243 .       ds $PAGENUM_STYLE \\$1
12244 .       af #PAGENUMBER I
12245 .    \}
12246 .    if '\\$1'roman'  \{\
12247 .       ds $PAGENUM_STYLE \\$1
12248 .       af #PAGENUMBER i
12249 .    \}
12250 .    if '\\$1'ALPHA'  \{\
12251 .       ds $PAGENUM_STYLE \\$1
12252 .       af #PAGENUMBER A
12253 .    \}
12254 .    if '\\$1'alpha'  \{\
12255 .       ds $PAGENUM_STYLE \\$1
12256 .       af #PAGENUMBER a
12257 .    \}
12258 .END
12261 \# HYPHENS AROUND PAGE NUMBERS
12262 \# ---------------------------
12263 \# *Arguments:
12264 \#   <none> | <anything>
12265 \# *Function:
12266 \#   Creates or modifies register #PAGE_NUM_HYPHENS.
12267 \#   Used to dis/enable hyphens on either side of page numbers.
12268 \# *Notes:
12269 \#   Default is on.
12271 .MAC PAGENUM_HYPHENS END
12272 .    nr #PAGE_NUM_HYPHENS_SET 1
12273 .    ie '\\$1'' \{ .nr #PAGE_NUM_HYPHENS 1 \}
12274 .    el \{ .rr #PAGE_NUM_HYPHENS   \}
12275 .END
12278 \# PAGENUMBER POSITION
12279 \# -------------------
12280 \# *Arguments:
12281 \#   TOP | BOTTOM  LEFT | CENTER | RIGHT
12282 \# *Function:
12283 \#   Creates or modifies various PAGE_NUM_H | V_POS registers.
12284 \#   Used to position page numbers.
12285 \# *Notes:
12286 \#   Default is center/bottom.
12288 .MAC PAGENUM_POS END
12289 .    nr #PAGE_NUM_POS_SET 1
12290 .    if '\\$1'TOP'    \{ .nr #PAGE_NUM_V_POS 1 \}
12291 .    if '\\$1'BOTTOM' \{ .nr #PAGE_NUM_V_POS 2 \}
12292 .    if '\\$2'LEFT'   \{ .nr #PAGE_NUM_H_POS 1 \}
12293 .    if '\\$2'CENTER' \{ .nr #PAGE_NUM_H_POS 2 \}
12294 .    if '\\$2'CENTRE' \{ .nr #PAGE_NUM_H_POS 2 \}
12295 .    if '\\$2'RIGHT'  \{ .nr #PAGE_NUM_H_POS 3 \}
12296 .END
12299 .MAC PN_WITH_HYPHENS END
12300 .    nr #HYPHEN_ADJ \\n[#CAP_HEIGHT]/12
12301 .    ds $HYPHEN \v'-\En[#HYPHEN_ADJ]u'-\v'\En[#HYPHEN_ADJ]u'
12302 .    PRINT \m[\\*[$PAGENUM_COLOR]]\\*[$HYPHEN]\|\\n[#PAGENUMBER]\|\\*[$HYPHEN]
12303 .    br
12304 .END
12307 \# PRINT PAGE NUMBER
12308 \# -----------------
12309 \# *Arguments:
12310 \#   <none>
12311 \# *Function:
12312 \#   Prints page number if PAGINATE=1.
12314 .MAC PRINT_PAGE_NUMBER END
12315 .    ev PAGENUMBER
12316 .    nf
12317 .    na
12318 .    po \\n[#DOC_L_MARGIN]u
12319 .    ll \\n[#DOC_L_LENGTH]u
12320 .    ta \\n(.lu
12321 .    FAMILY  \\*[$PAGE_NUM_FAM]
12322 .    FT      \\*[$PAGE_NUM_FT]
12323 .    PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$PAGE_NUM_SIZE_CHANGE]
12324 .    if \\n[#PRINT_STYLE]=1 \{\
12325 .       TYPEWRITER
12326 .    \}
12327 .    if \\n[#PAGE_NUM_V_POS]=1 \{ .vs 0 \}
12328 .    if o \{\
12329 .       ie \\n[#PAGE_NUM_H_POS]=1 \{ .LEFT  \}
12330 .       el                        \{ .RIGHT \}
12331 .    \}
12332 .    if e \{\
12333 .       ie \\n[#PAGE_NUM_H_POS]=1 \{ .RIGHT  \}
12334 .       el                        \{ .LEFT   \}
12335 .    \}
12336 .    if \\n[#PAGE_NUM_H_POS]=2    \{ .CENTER \}
12337 .    if \\n[#RECTO_VERSO]=0 \{\
12338 .       if \\n[#PAGE_NUM_H_POS]=1 \{ .LEFT   \}
12339 .       if \\n[#PAGE_NUM_H_POS]=2 \{ .CENTER \}
12340 .       if \\n[#PAGE_NUM_H_POS]=3 \{ .RIGHT  \}
12341 .    \}
12342 .    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
12343 .    if \\n[#EN_FIRST_PAGE] \{\
12344 .       if \\n[#EN_FIRST_PN] \{ .PAGENUMBER \\n[#EN_FIRST_PN] \}
12345 .       rr #EN_FIRST_PAGE
12346 .    \}
12347 .    if \\n[#BIB_FIRST_PAGE] \{\
12348 .       if \\n[#BIB_FIRST_PN] \{ .PAGENUMBER \\n[#BIB_FIRST_PN] \}
12349 .       rr #BIB_FIRST_PAGE
12350 .    \}
12351 .    if \\n[#TOC_FIRST_PAGE] \{\
12352 .       PAGENUMBER 1
12353 .       rr #TOC_FIRST_PAGE
12354 .    \}
12355 .    ie \\n[#DRAFT_WITH_PAGENUM] \{\
12356 .       ie '\\*[$REVISION]'' \{\
12357 .          PRINT "\\*[$DRAFT_STRING]\\*[$DRAFT] / \\n[#PAGENUMBER]"
12358 .       \}
12359 .       el \{\
12360 .          ie '\\*[$DRAFT]'' \{\
12361 .             PRINT "\\*[$REVISION_STRING] \\*[$REVISION] / \\n[#PAGENUMBER]"
12362 .          \}
12363 .          el \{\
12364 .             PRINT "\\*[$DRAFT_STRING]\\*[$DRAFT], \\*[$REVISION_STRING] \\*[$REVISION] / \\n[#PAGENUMBER]"
12365 .          \}
12366 .       \}
12367 .    \}
12368 .    el \{\
12369 .       ie \\n[#PAGE_NUM_HYPHENS] \{\
12370 .          if '\\*[$PAGENUM_STYLE]'DIGIT' \{\
12371 .             di NULL
12372 1\\R'#CAP_HEIGHT \\n[.cht]'
12373 .             di
12374 .             PN_WITH_HYPHENS
12375 .          \}
12376 .          if '\\*[$PAGENUM_STYLE]'ROMAN' \{\
12377 .             di NULL
12378 I\\R'#CAP_HEIGHT \\n[.cht]'
12379 .             di
12380 .             PN_WITH_HYPHENS
12381 .          \}
12382 .          if '\\*[$PAGENUM_STYLE]'ALPHA' \{\
12383 .             di NULL
12384 E\\R'#CAP_HEIGHT \\n[.cht]'
12385 .             di
12386 .             PN_WITH_HYPHENS
12387 .          \}
12388 .          if '\\*[$PAGENUM_STYLE]'roman' \{\
12389 .             PRINT \m[\\*[$PAGENUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
12390 .          \}
12391 .          if '\\*[$PAGENUM_STYLE]'alpha' \{\
12392 .             PRINT "\m[\\*[$PAGENUM_COLOR]]-\|\\n[#PAGENUMBER]\|-"
12393 .          \}
12394 .       \}
12395 .       el \{ .PRINT "\m[\\*[$PAGENUM_COLOR]]\\n[#PAGENUMBER]" \}
12396 .    \}
12397 .    ev
12398 .    nr #DIVER_DEPTH 0
12399 .END
12401 \# ====================================================================
12403 \# +++FOOTNOTES+++
12405 \# Mom's footnote handling is baroque, to say the least.  There are
12406 \# redundancies in a number of the macros involved, as well as some
12407 \# registers that probably don't get used anymore.  The baggage is left
12408 \# in in case some new footnote oddity/challenge gets thrown my way.
12409 \# 
12410 \# The macros are heavily commented.
12412 \# FOOTNOTE AUTOLEAD
12413 \# -----------------
12414 \# *Arguments:
12415 \#   <autolead value for footnotes>
12416 \# *Function:
12417 \#   Creates or modifies register #FN_AUTOLEAD.
12418 \# *Notes:
12419 \#   Default is #DOC_LEAD/2 for TYPEWRITE; 2 for TYPESET
12421 .MAC FOOTNOTE_AUTOLEAD END
12422 .    nr #FN_AUTOLEAD \\$1
12423 .END
12426 \# FOOTNOTE MARKERS
12427 \# ----------------
12428 \# *Arguments:
12429 \#   <none> | <anything>
12430 \# *Function:
12431 \#   Turns generation of footnote markers on or off.
12432 \# *Notes:
12433 \#   Default is on.
12435 .MAC FOOTNOTE_MARKERS END
12436 .    ie '\\$1'' \{ .nr #FN_MARKERS 1 \}
12437 .    el \{ .nr #FN_MARKERS 0 \}
12438 .END
12441 \# FOOTNOTE MARKER STYLE
12442 \# ---------------------
12443 \# *Arguments:
12444 \#   STAR | NUMBER | LINE
12445 \# *Function:
12446 \#   Sets register #FN_MARKER_STYLE, used in FOOTNOTE to determine
12447 \#   the style of footnote markers.
12448 \# *Notes:
12449 \#   1=STAR; 2=NUMBER; 3=LINE.  LINE means "use output line numbers".
12450 \#   Default is STAR.
12452 .MAC FOOTNOTE_MARKER_STYLE END
12453 .    if '\\$1'STAR' \{\
12454 .       if \\n[#FN_MARKER_STYLE]=3 \{\
12455 .          if !\\n[#NEWPAGE]=1 \{\
12456 .             tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is LINE.
12457 .             tm1 "       You cannot change footnote marker style without
12458 .             tm1 "       first breaking to a new page with NEWPAGE.
12459 .             tm1 "       Ignoring request FOOTNOTE_MARKER_STYLE STAR at line \\n(.c.
12460 .             return
12461 .          \}
12462 .       \}
12463 .       if \\n[#RUN_ON]=1 \{\
12464 .          tm1 "[mom]: FOOTNOTE_MARKER_STYLE STAR at line \\n(.c is incompatible
12465 .          tm1 "       with RUN_ON footnotes.  Ignoring request.
12466 .          return
12467 .       \}
12468 .       nr #FN_MARKER_STYLE 1
12469 .       if \\n[#NEWPAGE]=1 \{ .rr #NEWPAGE \}
12470 .       FOOTNOTE_MARKERS
12471 .    \}
12472 .    if '\\$1'NUMBER' \{\
12473 .       if \\n[#FN_MARKER_STYLE]=3 \{\
12474 .          if !\\n[#NEWPAGE]=1 \{\
12475 .             tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is NUMBER.
12476 .             tm1 "       You cannot change footnote marker style without
12477 .             tm1 "       first breaking to a new page with NEWPAGE.
12478 .             tm1 "       Ignoring request FOOTNOTE_MARKER_STYLE NUMBER at line \\n(.c.
12479 .             return
12480 .          \}
12481 .       \}
12482 .       if \\n[#RUN_ON]=1 \{\
12483 .          tm1 "[mom]: FOOTNOTE_MARKER_STYLE NUMBER at line \\n(.c is incompatible
12484 .          tm1 "       with RUN_ON footnotes.  Ignoring request.
12485 .          return
12486 .       \}
12487 .       nr #FN_MARKER_STYLE 2
12488 .       if \\n[#NEWPAGE]=1 \{ .rr #NEWPAGE \}
12489 .       FOOTNOTE_MARKERS
12490 .    \}
12491 .    if '\\$1'LINE' \{\
12492 .       nr #FN_MARKER_STYLE 3
12493 .       FOOTNOTE_MARKERS OFF
12494 .       if !\\n[#FN_LN_SEP] \{\
12495 .          if !\\n[#FN_LN_BRACKETS] \{ .FOOTNOTE_LINENUMBER_BRACKETS SQUARE \}
12496 .       \}
12497 .    \}
12498 .END
12501 \# FOOTNOTE LINENUMBER MARK
12502 \# ------------------------
12503 \# *Function:
12504 \#   This string, when called inline, stores the current output line
12505 \#   number in register #FN_MARK for use with FOOTNOTE.
12507 .ds FN-MARK \R'#FN_MARK \En(ln'
12510 \# FOOTNOTE LINENUMBER SEPARATOR
12511 \# -----------------------------
12512 \# *Argument:
12513 \#   <user-defined separator>
12514 \# *Function:
12515 \#   Stores user-defined separator (for use then
12516 \#   FOOTNOTE_MARKER_STYLE is LINE) in string $FN_LN_SEP.  The
12517 \#   separator is intended to be used when the user wishes a
12518 \#   separator, rather than the choice of brackets offered by
12519 \#   FOOTNOTE_LINENUMBER_BRACKETS.
12521 .MAC FOOTNOTE_LINENUMBER_SEPARATOR END
12522 .    rr #FN_LN_BRACKETS
12523 .    nr #FN_LN_SEP 1
12524 .    ds $FN_LN_SEP "\\$1
12525 .END
12528 \# FOOTNOTE LINENUMBER BRACKETS
12529 \# ----------------------------
12530 \# *Argument:
12531 \#   PARENS | SQUARE | BRACES or ( | [ | {
12532 \# *Function:
12533 \#   Sets register #FN_LN_BRACKETS to 1, and creates strings
12534 \#   $FN_OPEN_BRACKET and $FN_CLOSE_BRACKET according to the given
12535 \#   argument.
12537 .MAC FOOTNOTE_LINENUMBER_BRACKETS END
12538 .    rr #FN_LN_SEP
12539 .    nr #FN_LN_BRACKETS 1
12540 .    if '\\$1'PARENS' \{\
12541 .       ds $FN_OPEN_BRACKET (
12542 .       ds $FN_CLOSE_BRACKET )
12543 .    \}
12544 .    if '\\$1'(' \{\
12545 .       ds $FN_OPEN_BRACKET (
12546 .       ds $FN_CLOSE_BRACKET )
12547 .    \}
12548 .    if '\\$1'SQUARE' \{\
12549 .       ds $FN_OPEN_BRACKET [
12550 .       ds $FN_CLOSE_BRACKET ]
12551 .    \}
12552 .    if '\\$1'[' \{\
12553 .       ds $FN_OPEN_BRACKET [
12554 .       ds $FN_CLOSE_BRACKET ]
12555 .    \}
12556 .    if '\\$1'BRACES' \{\
12557 .       ds $FN_OPEN_BRACKET {
12558 .       ds $FN_CLOSE_BRACKET }
12559 .    \}
12560 .    if '\\$1'{' \{\
12561 .       ds $FN_OPEN_BRACKET {
12562 .       ds $FN_CLOSE_BRACKET }
12563 .    \}
12564 .END
12567 \# RESET FOOTNOTE NUMBER
12568 \# ---------------------
12569 \# *Arguments:
12570 \#   <none> | PAGE
12571 \# *Function:
12572 \#   Resets register #FN_NUMBER to 1.  If argument is PAGE, creates
12573 \#   toggle #RESET_FN_NUMBER which is checked in HEADER.  If 1,
12574 \#   numbered footnotes on every page start at 1.
12576 .MAC RESET_FOOTNOTE_NUMBER END
12577 .    ie '\\$1'' \{ .nr #FN_NUMBER 0 1 \}
12578 .    el \{ .nr #RESET_FN_NUMBER 1 \}
12579 .END
12582 \# FOOTNOTE RULE LENGTH
12583 \# --------------------
12584 \# *Arguments:
12585 \#   <length of rule used to separate footnotes from running text>
12586 \# *Function:
12587 \#   Creates or modifies registers #FN_RULE_LENGTH.
12588 \# *Notes:
12589 \#   Requires unit of measure (iPpcm).
12590 \#   Default is 4P for both PRINTSTYLEs.
12592 .MAC FOOTNOTE_RULE_LENGTH END
12593 .    nr #FN_RULE_LENGTH (\\$1)
12594 .END
12597 \# FOOTNOTE_RULE_ADJ
12598 \# -----------------
12599 \# *Arguments:
12600 \#   <number of points to raise footnote rule from it's baseline position>
12601 \# *Function:
12602 \#   Creates or modifies register #FN_RULE_ADJ.
12603 \# *Notes:
12604 \#   Default is 3p for both TYPESTYLES.
12606 \#   Requires unit of measure.
12608 .MAC FOOTNOTE_RULE_ADJ END
12609 .    nr #FN_RULE_ADJ (\\$1)
12610 .END
12613 \# FOOTNOTE RULE
12614 \# -------------
12615 \# *Arguments:
12616 \#   <none> | <anything>
12617 \# *Function:
12618 \#   Turns printing of footnote separator rule on or off.  If invoked as
12619 \#   PRINT_FOOTNOTE_RULE, prints footnote separator rule.
12620 \# *Notes:
12621 \#   Default is on.
12623 \#   Invoked in FOOTNOTE (as PRINT_FOOTNOTE_RULE) as 1st line of a footnote
12624 \#   if the footnote number (#FN_COUNT) is 1.
12626 .MAC FOOTNOTE_RULE END
12627 .    ie '\\$0'PRINT_FOOTNOTE_RULE' \{\
12628 .       if \\n[#FN_RULE]=0 \{ .RLD 1v \}
12629 .       RLD 1v
12630 .       LEFT
12631 \v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\
12632 \D't \\n[#FN_RULE_WEIGHT]'\
12633 \h'-\\n[#FN_RULE_WEIGHT]u'\
12634 \D'l \\n[#FN_RULE_LENGTH]u 0'\
12635 \v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u'
12636 \!.     PT_SIZE \\n[#DOC_PT_SIZE]u\\*$[FN_SIZE_CHANGE]
12637 .       QUAD \\*[$FN_QUAD]
12638 .    \}
12639 .    el \{\
12640 .       ie '\\$1'' \{ .nr #FN_RULE 1 \}
12641 .       el \{ .nr #FN_RULE 0 \}
12642 .    \}
12643 .END
12646 \# FOOTNOTE SPACING
12647 \# ----------------
12648 \# *Arguments:
12649 \#   <per item post footnote spacing> | <anything>
12650 \# *Function:
12651 \#   Enables printing of post footnote spacing.
12652 \# *Notes:
12653 \#   Default is no space.
12655 .MAC FOOTNOTE_SPACING END
12656 .    ie \B'\\$1' \{ .nr #FN_SPACE (\\$1) \}
12657 .    el \{ .nr #FN_SPACE 0 \}
12658 .END
12661 \# RUN ON FOOTNOTES
12662 \# ----------------
12663 \# *Arguments:
12664 \#   <none> | <anything>
12665 \# *Function:
12666 \#   Toggles run-on footnotes on or off.
12668 .MAC FOOTNOTES_RUN_ON END
12669 .    ie '\\$1'' \{\
12670 .       if \\n[#FN_COUNT]>0 \{\
12671 .          tm1 "[mom]: Switching to run-on footnotes at line \\n(.c will cause
12672 .          tm1 "       you to loose footnotes already formatted for this page.
12673 .          tm1 "       Ignoring request FOOTNOTES_RUN_ON.
12674 .          rr #RUN_ON
12675 .          return
12676 .       \}
12677 .       nr #RUN_ON 1
12678 .       if \\n[#FN_MARKER_STYLE]=1 \{ .RUNON_WARNING \}
12679 .       if \\n[#FN_MARKER_STYLE]=2 \{ .RUNON_WARNING \}
12680 .    \}
12681 .    el \{\
12682 .       if \\n[#FN_COUNT]>0 \{\
12683 .          if \\n[#RUN_ON]=1 \{\
12684 .             tm1 "[mom]: Switching off run-on footnotes at line \\n(.c will cause
12685 .             tm1 "       you to loose footnotes already formatted for this page.
12686 .             tm1 "       Ignoring request FOOTNOTES_RUN_ON \\$1.
12687 .             return
12688 .          \}
12689 .       \}
12690 .       rr #RUN_ON
12691 .    \}
12692 .END
12695 .MAC RUNON_WARNING END
12696 .    if \\n[#FN_MARKER_STYLE]=1 \{\
12697 .       tm1 "[mom]: The footnote marker style active at line \\n(.c is STAR,
12698 .       tm1 "       which is incompatible with run-on footnotes.  Please change
12699 .       tm1 "       the footnote marker style to LINE.  Continuing to process,
12700 .       tm1 "       but ignoring request FOOTNOTES_RUN_ON.
12701 .       rr #RUN_ON
12702 .    \}
12703 .    if \\n[#FN_MARKER_STYLE]=2 \{\
12704 .       tm1 "[mom]: The footnote marker style active at line \\n(.c is NUMBER,
12705 .       tm1 "       which is incompatible with run-on footnotes.  Please change
12706 .       tm1 "       the footnote marker style to LINE.  Continuing to process,
12707 .       tm1 "       but ignoring request FOOTNOTES_RUN_ON.
12708 .       rr #RUN_ON
12709 .    \}
12710 .END
12712 \# FOOTNOTE
12713 \# --------
12714 \# *Arguments:
12715 \#   <none> | INDENT  L|LEFT|R|RIGHT|B|BOTH  <indent value> | <anything>
12716 \# *Function:
12717 \#   Begins collecting and diverting footnote text if no argument
12718 \#   given.  Otherwise, ends diversion FOOTNOTES, measures footnote
12719 \#   depth, and sets footnote trap.
12720 \# *Notes:
12721 \#   The input line preceding a footnote call MUST terminate with \c
12722 \#   or the footnote marker will be spaced away from the word it
12723 \#   should be joined to.
12725 \#   If FOOTNOTE is invoked with INDENT, the footnote will
12726 \#   be indented.  An indent style and an indent value must be given.
12727 \#   Subsequent footnotes will NOT be indented; INDENT must be given
12728 \#   for each footnote the user wants indented.
12730 .MAC FOOTNOTE END
12731 .    ie '\\$1'' \{\
12732 .       if \\n[#FN_MARKER_STYLE]=3 \{\
12733 .          if !\\n[#LINENUMBERS] \{\
12734 .             tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
12735 .             tm1 "       FOOTNOTE_MARKER_STYLE is LINE.
12736 .             ab Aborting on FOOTNOTE at line \\n(.c.
12737 .          \}
12738 .          if \\n[#FN_MARK]=0 \{ .nr #FN_MARK \\n(ln \}
12739 .          nr #FN_MARK_2 \\n(ln
12740 .          if '\\n(.z'P_QUOTE' \{\
12741 .             nr #FN_MARK -1
12742 .             nr #FN_MARK_2 -1
12743 .          \}
12744 .          if \\n[#IN_DIVER]=1 \{\
12745 .             if '\\n(.z'P_QUOTE' \{\
12746 .                if !\\n[#QUOTE_LN]=1 \{\
12747 .                   if !\\n[#SILENT_QUOTE_LN]=1 \{\
12748 .                      tm1 "[mom]: You have requested a line-numbered footnote inside a
12749 .                      tm1 "       QUOTE at line \\n(.c, but line-numbering has not been enabled
12750 .                      tm1 "       for QUOTES.  Printing footnote with label "0".
12751 .                      rr #FN_MARK
12752 .                      rr #FN_MARK_2
12753 .                   \}
12754 .                \}
12755 .             \}
12756 .             if '\\n(.z'B_QUOTE' \{\
12757 .                if !\\n[#BQUOTE_LN]=1 \{\
12758 .                   if !\\n[#SILENT_BQUOTE_LN]=1 \{\
12759 .                      tm1 "[mom]: You have requested a line-numbered footnote inside a
12760 .                      tm1 "       BLOCKQUOTE at line \\n(.c, but line-numbering has not been enabled
12761 .                      tm1 "       for BLOCKQUOTES.  Printing footnote with label "0".
12762 .                      rr #FN_MARK
12763 .                      rr #FN_MARK_2
12764 .                   \}
12765 .                \}
12766 .             \}
12767 .          \}
12768 .       \}
12769 .\" Begin processing footnotes that occur inside QUOTE, BLOCKQUOTE
12770 .\" or EPIGRAPH.
12771 .       if \\n[#IN_DIVER]=1 \{\
12772 .          nr #PAGE_POS \\n(nl+\\n(.d+\\n[#DOC_LEAD]
12773 .          nr #FOOTER_POS \\n[#PAGE_LENGTH]+(\\n[#VARIABLE_FOOTER_POS]-1)
12774 .          nr #SPACE_TO_FOOTER \\n[#FOOTER_POS]-\\n[#PAGE_POS]
12775 .\" Are we on a "defer" line?  If so, defer the text of the footnote.
12776 .          ie \\n[#SPACE_TO_FOOTER]=\\n[#DOC_LEAD]:\\n[#SPACE_TO_FOOTER]=0 \{\
12777 .             nr #DIVER_FN 2 \" treat like a normal deferred footnote
12778 .          \}
12779 .          el \{\
12780 .             nr #DIVER_FN 2 \" treat like a normal footnote
12781 .          \}
12782 .          if \\n[#PAGE_POS]>\\n[#FOOTER_POS] \{\
12783 .             nr #DIVER_FN 1 \" move this footnote
12784 .          \}
12785 .\" Test for situation where, because a final line of QUOTE, BLOCKQUOTE
12786 .\" or EPIGRAPH isn't yet adjusted at this point, the last word on the
12787 .\" line may *seem* to belong to the final line of the page, but will,
12788 .\" in fact, become the first word of the subsequent page.  In such
12789 .\" circumstances, we want the the footnote to be treated as a "moved"
12790 .\" diversion footnote.
12791 .          if \\n(.k>\\n(.l \{ .nr #DIVER_FN 1 \}
12792 .          if r#DIVER_FN \{\
12793 .             if !\\n[#DIVER_FN]=2 \{ .\\n+[#DONE_ONCE] \}
12794 .\" A footnote inside a diversion will become the 1st footnote on the
12795 .\" following page/column.
12796 .             if \\n[#DIVER_FN]=1 \{ .DIVER_FN_1_PRE \}
12797 .\" A footnote inside a diversion that should be treated like a
12798 .\" normal footnote (including defers.)
12799 .             if \\n[#DIVER_FN]=2 \{ .DIVER_FN_2_PRE \}
12800 .          \}
12801 .          nr #SAVED_FN_COUNT \\n[#FN_COUNT]+1
12802 .          nr #SAVED_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]+1
12803 .       \}
12804 .\" End processing footnotes that occur inside QUOTE, BLOCKQUOTE or
12805 .\" EPIGRAPH.
12807 .\" Test for situation where, because a final line of running text
12808 .\" isn't yet adjusted at this point, the last word on the line may
12809 .\" *seem* to belong to the final line of the page, but will, in
12810 .\" fact, become the first word of the subsequent page.  In such
12811 .\" circumstances, we want the the footnote marker in running text to
12812 .\" be the correct one for the 1st footnote on the page.
12813 .       if \\n(.k>\\n(.l \{\
12814 .          if (\\n(nl+\\n[#DOC_LEAD])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
12815 .             ie \\n[#COLUMNS]=1 \{\
12816 .                if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
12817 .                   if \\n[#FN_MARKER_STYLE]=1 \{\
12818 .                      nr #FN_COUNT_FOR_COLS 0 1
12819 .                   \}
12820 .                   if \\n[#FN_MARKER_STYLE]=2 \{\
12821 .                      if \\n[#RESET_FN_NUMBER] \{\
12822 .                         nr #FN_NUMBER 0 1
12823 .                         nr #NOT_YET_ADJUSTED 1
12824 .                      \}
12825 .                   \}
12826 .                \}
12827 .             \}
12828 .             el \{\
12829 .                if \\n[#FN_MARKER_STYLE]=1 \{\
12830 .                   nr #FN_COUNT 0 1
12831 .                \}
12832 .                if \\n[#FN_MARKER_STYLE]=2 \{\
12833 .                   if \\n[#RESET_FN_NUMBER] \{\
12834 .                      nr #FN_NUMBER 0 1
12835 .                      nr #NOT_YET_ADJUSTED 1
12836 .                   \}
12837 .                \}
12838 .             \}
12839 .          \}
12840 .       \}
12841 .       if \\n[#FN_MARKERS] \{\
12842 .\" Housekeeping
12843 .          if \\n[#CONDENSE] \{ \*[CONDX]\c \}
12844 .          if \\n[#EXTEND]   \{ \*[EXTX]\c  \}
12845 .          if \\n[#PRINT_STYLE]=1 \{\
12846 .             if \\n[#UNDERLINE_ON] \{\
12847 .                nr #UNDERLINE_WAS_ON 1
12848 .                UNDERLINE OFF
12849 .             \}
12850 .          \}
12851 .\" Add footnote markers to running text...
12852 .          if !\\n[#NO_FN_MARKER] \{\
12853 .\" ...but not if TERMINATE has not been called
12854 .             if !r#TERMINATE \{\
12855 .\" Marker style star/dagger/double-dagger
12856 .                if \\n[#FN_MARKER_STYLE]=1 \{\
12857 .\" Columnar docs either move col to col, or last col to next page.
12858 .\" They require their own special FN_COUNT because regular FN_COUNT
12859 .\" is used to figure out things like whether or not to put a rule
12860 .\" above footnotes (in addition to keeping track of the footnote
12861 .\" count in non-columnar docs).
12862 .                   ie \\n[#COLUMNS]=1 \{\
12863 .                      if \\n[#FN_COUNT_FOR_COLS]=0 \{ .PRINT \*[BU2]*\c            \}
12864 .                      if \\n[#FN_COUNT_FOR_COLS]=1 \{ .PRINT \*[BU1]\(dg\c         \}
12865 .                      if \\n[#FN_COUNT_FOR_COLS]=2 \{ .PRINT \(dd\c                \}
12866 .                      if \\n[#FN_COUNT_FOR_COLS]=3 \{ .PRINT \*[BU2]**\c           \}
12867 .                      if \\n[#FN_COUNT_FOR_COLS]=4 \{ .PRINT \*[BU1]\(dg\(dg\c     \}
12868 .                      if \\n[#FN_COUNT_FOR_COLS]=5 \{ .PRINT \(dd\(dd\c            \}
12869 .                      if \\n[#FN_COUNT_FOR_COLS]=6 \{ .PRINT \*[BU2]***\c          \}
12870 .                      if \\n[#FN_COUNT_FOR_COLS]=7 \{ .PRINT \*[BU1]\(dg\(dg\(dg\c \}
12871 .                      if \\n[#FN_COUNT_FOR_COLS]=8 \{ .PRINT \(dd\(dd\(dd\c        \}
12872 .                      if \\n[#FN_COUNT_FOR_COLS]=9 \{ .PRINT \*[BU2]****\c         \}
12873 .                   \}
12874 .                   el \{\
12875 .                      if \\n[#FN_COUNT]=0 \{ .PRINT \*[BU2]*\c            \}
12876 .                      if \\n[#FN_COUNT]=1 \{ .PRINT \*[BU1]\(dg\c         \}
12877 .                      if \\n[#FN_COUNT]=2 \{ .PRINT \(dd\c                \}
12878 .                      if \\n[#FN_COUNT]=3 \{ .PRINT \*[BU2]**\c           \}
12879 .                      if \\n[#FN_COUNT]=4 \{ .PRINT \*[BU1]\(dg\(dg\c     \}
12880 .                      if \\n[#FN_COUNT]=5 \{ .PRINT \(dd\(dd\c            \}
12881 .                      if \\n[#FN_COUNT]=6 \{ .PRINT \*[BU2]***\c          \}
12882 .                      if \\n[#FN_COUNT]=7 \{ .PRINT \*[BU1]\(dg\(dg\(dg\c \}
12883 .                      if \\n[#FN_COUNT]=8 \{ .PRINT \(dd\(dd\(dd\c        \}
12884 .                      if \\n[#FN_COUNT]=9 \{ .PRINT \*[BU2]****\c         \}
12885 .                   \}
12886 .                \}
12887 .\" Marker style superscript numbers
12888 .                if \\n[#FN_MARKER_STYLE]=2 \{\
12889 .                   if \\n[#PRINT_STYLE]=1 \{ .PRINT "\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#FN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c" \}
12890 .                   if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n+[#FN_NUMBER]\*[SUPX]\c" \}
12891 .                \}
12892 .             \}
12893 .          \}
12894 .       \}
12895 .\" More housekeeping
12897 .\" #SPACE_REMAINING is the space left between where we are
12898 .\" on the page and the bottom margin.  It's used to determine whether
12899 .\" or not the footnote will overflow, and how many lines of
12900 .\" footnotes will fit on the page if some have to overflow.
12901 .       ie \\n[#DIVER_FN]=2 \{\
12902 .          nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-(\\n[#PAGE_POS])
12903 .       \}
12904 .       el \{\
12905 .          nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n(nl
12906 .       \}
12907 .       if \\n[#FROM_DIVERT_FN]=1 \{\
12908 .          nr #SPACE_REMAINING \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]
12909 .          rr #FROM_DIVERT_FN
12910 .       \}
12911 .       nr #PP_STYLE_PREV \\n[#PP_STYLE]
12912 .       nr #PP_STYLE 2
12913 .       if \\n[#INDENT_FIRST_PARAS] \{ .nr #INDENT_FIRSTS 1 \}
12914 .       INDENT_FIRST_PARAS
12915 .\" Prepare FOOTNOTE to receive footnote text.
12916 .       ev FOOTNOTES
12917 .       ll \\n[#DOC_L_LENGTH]u
12918 .       ta \\n(.lu
12919 .       if \\n[#COLUMNS]=1 \{\
12920 .          ll \\n[#COL_L_LENGTH]u
12921 .          ta \\n(.lu
12922 .       \}
12923 .       if \\n[#FN_R_INDENT]  \{\
12924 .          ll -\\n[#FN_R_INDENT]u
12925 .          ta \\n(.lu
12926 .       \}
12927 .       if \\n[#FN_BR_INDENT] \{\
12928 .          ll -\\n[#FN_BR_INDENT]u
12929 .          ta \\n(.lu
12930 .       \}
12931 .       FAMILY   \\*[$FN_FAM]
12932 .       FT       \\*[$FN_FT]
12933 .       PT_SIZE  \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
12934 .       AUTOLEAD \\n[#FN_AUTOLEAD]
12935 .       QUAD     \\*[$FN_QUAD]
12936 .       if \\n[#PRINT_STYLE]=1 \{\
12937 .          TYPEWRITER
12938 .          ie \\n[#SINGLE_SPACE] \{ .vs \\n[#ORIGINAL_DOC_LEAD]u \}
12939 .          el \{ .vs \\n[#ORIGINAL_DOC_LEAD]u/2u \}
12940 .          QUAD LEFT
12941 .          HY OFF
12942 .       \}
12943 .       nr #FN_LEAD \\n[#LEAD]
12944 .\" Begin diversion FOOTNOTES or FN_IN_DIVER
12945 .       ie r#COUNTERS_RESET \{\
12946 .          ie \\n[#DONE_ONCE]=1 \{\
12947 .             ie \\n[#RUN_ON] \{\
12948 .                di RUNON_FN_IN_DIVER
12949 .                nr #RUNON_FN_IN_DIVER 1
12950 .             \}
12951 .             el \{ .di FN_IN_DIVER \}
12952 .          \}
12953 .          el \{\
12954 .             ie \\n[#RUN_ON] \{\
12955 .                da RUNON_FN_IN_DIVER
12956 .                nr #RUNON_FN_IN_DIVER 1
12957 .             \}
12958 .             el \{ .da FN_IN_DIVER \}
12959 .          \}
12960 .       \\n+[#DONE_ONCE]
12961 .       \}
12962 .       el \{\
12963 .          ie \\n[#RUN_ON] \{\
12964 .             da RUNON_FOOTNOTES
12965 .             nr #RUNON_FOOTNOTES 1
12966 .          \}
12967 .          el \{ .da FOOTNOTES \}
12968 .       \}
12969 .       if \\n[#FOOTNOTE_COLOR]=1 \{\
12970 .          TRAP OFF
12971 .          nf
12972 \m[\\*[$FOOTNOTE_COLOR]]
12973 .          EOL
12974 .          fi
12975 .          TRAP
12976 .       \}
12977 .       if \\n[#EPIGRAPH] \{ .nr #FN_FOR_EPI 1 \}
12978 .\" When a deferred footnote is also the 1st footnote on the page,
12979 .\" and when the page it's output on also has footnotes, some
12980 .\" whitespace is needed between the deferred footnote and the
12981 .\" first footnote belonging to the output page so that there's
12982 .\" no confusion when two stars (or two number 1s) appear in
12983 .\" footnotes...
12984 .       if \\n[#FN_DEFER_SPACE] \{\
12985 .\" ...but only add the extra space if TERMINATE has not been called
12986 .          if !r#TERMINATE \{\
12987 .\" ...and not if defer space has already been added
12988 .             if !\\n[#DEFER_SPACE_ADDED] \{\
12989 .\" ...and not if the footnote count the last time we checked for
12990 .\" a defer situation inside a diversion is greater than 1.
12991 .                if !\\n[#SAVED_DIVER_FN_COUNT]>1 \{\
12992 .                   if \\n[#FN_MARKER_STYLE]=1 \{ .ALD 1v \}
12993 .                   if \\n[#RESET_FN_NUMBER] \{ .ALD 1v \}
12994 .                   nr #DEFER_SPACE_ADDED 1
12995 .                \}
12996 .             \}
12997 .          \}
12998 .          rr #FN_DEFER_SPACE
12999 .          rr #SAVED_DIVER_FN_COUNT
13000 .       \}
13001 .       if \\n[#DIVERTED]=3 \{\
13002 .          if \\n[#FN_COUNT]>0 \{\
13003 \!.           RLD 1v
13004 .          \}
13005 .       \}
13006 .\" Add footnote rule (or, if no rule, some whitespace).
13007 .\" N.B.- this line increments #FN_COUNT each and every time FOOTNOTE
13008 .\" is run.
13009 .       if \\n+[#FN_COUNT]=1 \{\
13010 .\" If a footnote is called in a diversion, and the footnote has to
13011 .\" be moved, don't put in the rule now (it's taken care of when
13012 .\" FN_IN_DIVER is output into FOOTNOTE in PROCESS_FN_IN_DIVER).
13013 .          if !\\n[#DONT_RULE_ME]=1 \{\
13014 .             if !\\n[#FN_DEPTH] \{\
13015 .                if \\n[#PRINT_STYLE]=1 \{\
13016 .                   if !\\n[#RUN_ON] \{ .ALD \\n[#DOC_LEAD]u \}
13017 .                \}
13018 .                ie \\n[#FN_RULE]=1 \{\
13019 .                   if !\\n[#RUN_ON] \{ .PRINT_FOOTNOTE_RULE \}
13020 .                \}
13021 .                el \{ .ALD 1v \}
13022 .                nr #RULED 1
13023 .             \}
13024 .          \}
13025 .       \}
13026 .       rr #DONT_RULE_ME
13027 .\" Add footnote markers to footnote text...
13028 .       ie \\n[#FN_MARKERS] \{\
13029 .          if \\n[#FN_SPACE]>0 \{\
13030 .             if \\n[#FN_COUNT]>0 \{\
13031 .                ALD \\n[#FN_SPACE]u
13032 .             \}
13033 .          \}
13034 .          if !\\n[#NO_FN_MARKER] \{\
13035 .\" ...but not if TERMINATE has been called.
13036 .             if !r#TERMINATE \{\
13037 .                if \\n[#REF]=1 \{\
13038 \!.                 in +\\*[$REF_FN_INDENT]
13039 \!.                 ti -\\*[$REF_FN_INDENT]
13040 .                \}
13041 .                if \\n[#FN_MARKER_STYLE]=1 \{\
13042 .                   ie \\n[#COLUMNS]=1 \{\
13043 .                      \\n+[#FN_COUNT_FOR_COLS]
13044 .                      if \\n[#FN_COUNT_FOR_COLS]=1  \{ .PRINT *\c            \}
13045 .                      if \\n[#FN_COUNT_FOR_COLS]=2  \{ .PRINT \(dg\c         \}
13046 .                      if \\n[#FN_COUNT_FOR_COLS]=3  \{ .PRINT \(dd\c         \}
13047 .                      if \\n[#FN_COUNT_FOR_COLS]=4  \{ .PRINT **\c           \}
13048 .                      if \\n[#FN_COUNT_FOR_COLS]=5  \{ .PRINT \(dg\(dg\c     \}
13049 .                      if \\n[#FN_COUNT_FOR_COLS]=6  \{ .PRINT \(dd\(dd\c     \}
13050 .                      if \\n[#FN_COUNT_FOR_COLS]=7  \{ .PRINT ***\c          \}
13051 .                      if \\n[#FN_COUNT_FOR_COLS]=8  \{ .PRINT \(dg\(dg\(dg\c \}
13052 .                      if \\n[#FN_COUNT_FOR_COLS]=9  \{ .PRINT \(dd\(dd\(dd\c \}
13053 .                      if \\n[#FN_COUNT_FOR_COLS]=10 \{ .PRINT ****\c         \}
13054 .                   \}
13055 .                   el \{\
13056 .                      if \\n[#FN_COUNT]=1  \{ .PRINT *\c            \}
13057 .                      if \\n[#FN_COUNT]=2  \{ .PRINT \(dg\c         \}
13058 .                      if \\n[#FN_COUNT]=3  \{ .PRINT \(dd\c         \}
13059 .                      if \\n[#FN_COUNT]=4  \{ .PRINT **\c           \}
13060 .                      if \\n[#FN_COUNT]=5  \{ .PRINT \(dg\(dg\c     \}
13061 .                      if \\n[#FN_COUNT]=6  \{ .PRINT \(dd\(dd\c     \}
13062 .                      if \\n[#FN_COUNT]=7  \{ .PRINT ***\c          \}
13063 .                      if \\n[#FN_COUNT]=8  \{ .PRINT \(dg\(dg\(dg\c \}
13064 .                      if \\n[#FN_COUNT]=9  \{ .PRINT \(dd\(dd\(dd\c \}
13065 .                      if \\n[#FN_COUNT]=10 \{ .PRINT ****\c         \}
13066 .                   \}
13067 .                \}
13068 .                if \\n[#FN_MARKER_STYLE]=2 \{\
13069 .                   if \\n[#COLUMNS]=1 \{\
13070 .                      \\n+[#FN_COUNT_FOR_COLS]
13071 .                   \}
13072 .                   if \\n[#NOT_YET_ADJUSTED]=1 \{\
13073 .                      nr #FN_NUMBER 1 1
13074 .                      rr #NOT_YET_ADJUSTED
13075 .                   \}
13076 .                   if \\n[#PRINT_STYLE]=1 \{ .PRINT "(\\n[#FN_NUMBER])\c" \}
13077 .                   if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n[#FN_NUMBER]\*[SUPX]\*[FU 2]\c" \}
13078 .                \}
13079 .             \}
13080 .          \}
13081 .       \}
13082 .       el \{\
13083 .\" Line-numbered footnotes handling
13084 .          if \\n[#FN_MARKER_STYLE]=3 \{\
13085 .             if \\n[#FN_SPACE]>0 \{\
13086 .                if !\\n[#RUN_ON]=1 \{\
13087 .                   if \\n[#FN_COUNT]>0 \{\
13088 .                      ALD \\n[#FN_SPACE]u
13089 .                   \}
13090 .                \}
13091 .             \}
13092 .             if \\n[#REF]=1 \{\
13093 .                if !\\n[#RUN_ON]=1 \{\
13094 \!.                 in +\\*[$REF_FN_INDENT]
13095 \!.                 ti -\\*[$REF_FN_INDENT]
13096 .                \}
13097 .             \}
13098 .             ie \\n[#FN_LN_BRACKETS]=1 \{\
13099 .                ds $FN_LINENUMBER \v'-.085m'\\*[$FN_OPEN_BRACKET]\v'.085m'
13100 .                ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \{\
13101 .                   as $FN_LINENUMBER \\n[#FN_MARK]\v'-.085m'\\*[$FN_CLOSE_BRACKET]\v'.085m' \"
13102 .                \}
13103 .                el \{\
13104 .                   as $FN_LINENUMBER \\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\v'-.085m'\\*[$FN_CLOSE_BRACKET]\v'.085m' \"
13105 .                \}
13106 .             \}
13107 .             el \{\
13108 .                ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \{\
13109 .                   ds $FN_LINENUMBER \\n[#FN_MARK]\\*[$FN_LN_SEP]
13110 .                \}
13111 .                el \{\
13112 .                   ds $FN_LINENUMBER \\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\\*[$FN_LN_SEP]
13113 .                \}
13114 .             \}
13115 .             if !\\n[#NO_FN_MARKER] \{\
13116 .                PRINT \\*[$FN_LINENUMBER]\c
13117 .             \}
13118 .             rm $FN_LINENUMBER
13119 .             nr #FN_MARK 0
13120 .          \}
13121 .       \}
13122 .    \}
13123 .    el \{\
13124 .\" If INDENT arg is passed to FOOTNOTE, calculate the indent...
13125 .       ie '\\$1'INDENT' \{\
13126 .          ev FOOTNOTES
13127 .          if '\\$2'L'     \{ .in (\\$3)  \}
13128 .          if '\\$2'LEFT'  \{ .in (\\$3)  \}
13129 .          if '\\$2'R'     \{ .nr #FN_R_INDENT (\\$3) \}
13130 .          if '\\$2'RIGHT' \{ .nr #FN_R_INDENT (\\$3) \}
13131 .          if '\\$2'B' \{\
13132 .             nr #FN_BL_INDENT (\\$3)
13133 .             ie '\\$4'' \{ .nr #FN_BR_INDENT \\n[#FN_BL_INDENT] \}
13134 .             el \{ .nr #FN_BR_INDENT (\\$4) \}
13135 .             in \\n[#FN_BL_INDENT]u
13136 .          \}
13137 .          if '\\$2'BOTH' \{\
13138 .             nr #FN_BL_INDENT (\\$3)
13139 .             ie '\\$4'' \{ .nr #FN_BR_INDENT \\n[#FN_BL_INDENT] \}
13140 .             el \{ .nr #FN_BR_INDENT (\\$4) \}
13141 .             in \\n[#FN_BL_INDENT]u
13142 .          \}
13143 .          ev
13144 .\" ...then re-run FOOTNOTE without an argument.
13145 .          FOOTNOTE
13146 .       \}
13147 .       el \{\
13148 .          br
13149 .\" Add "defer space" if the previously diverted footnote was the
13150 .\" 1st footnote proper to its page (i.e. it looks like a deferred
13151 .\" footnote but it's really an overflow).
13152 .          if \\n[#DIVERTED] \{\
13153 .             if \\n[#PREV_FN_DEFERRED]=1 \{\
13154 .                if \\n[#FN_MARKER_STYLE]=1 \{ .ALD \\n[#FN_LEAD]u \}
13155 .                if \\n[#RESET_FN_NUMBER] \{ .ALD \\n[#FN_LEAD]u \}
13156 .                nr #PREV_FN_DEFERRED 2
13157 .             \}
13158 .          \}
13159 .          if \\n[#REF]=1 \{\
13160 \!.           in
13161 .          \}
13162 .\" Terminate FOOTNOTES or FN_IN_DIVER diversion
13163 .          di
13164 .          HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
13165 .          hy 14
13166 .\" More housekeeping
13167 .\" Turn off indent possibly set by FOOTNOTE INDENT
13168 .          in 0
13169 .\" Restore sentence spacing
13170 .          if \\n[#PRINT_STYLE]=2 \{\
13171 .             if d$RESTORE_SS_VAR \{ .SS \\*[$RESTORE_SS_VAR] \}
13172 .             rm $RESTORE_SS_VAR
13173 .          \}
13174 .          if \\n[#PRINT_STYLE]=1 \{\
13175 .             if \\n[#UNDERLINE_WAS_ON] \{\
13176 .                UNDERLINE
13177 .                rr #UNDERLINE_WAS_ON
13178 .             \}
13179 .          \}
13180 .          ev
13181 .          rr #FN_R_INDENT
13182 .          rr #FN_BR_INDENT
13183 .          nr #PP_STYLE \\n[#PP_STYLE_PREV]
13184 .          if !\\n[#INDENT_FIRSTS] \{ .INDENT_FIRST_PARAS OFF \}
13185 .          rr #INDENT_FIRSTS
13186 .\" Calculate footnote depth, but not if #COUNTERS_RESET (created in
13187 .\" DIVER_FN_1_PRE) to instruct FOOTNOTES to skip this step for now
13188 .\" (it's taken care of when FN_IN_DIVER is output into FOOTNOTES in
13189 .\" PROCESS_FN_IN_DIVER).
13190 .          ie r#COUNTERS_RESET \{\
13191 .             rr #COUNTERS_RESET
13192 .          \}
13193 .          el \{\
13194 .             nr #GET_DEPTH 1
13195 .\" If the footnote is the 1st on the page and it falls too close
13196 .\" to the bottom margin, defer the footnote text to the next page...
13197 .             if (\\n[#SPACE_REMAINING]-1)<=(\\n[#DOC_LEAD]) \{\
13198 .\" ...but not if PROCESS_FN_LEFTOVER has set #PREV_FN_DEFERRED to 1
13199 .                if !\\n[#PREV_FN_DEFERRED]=1 \{\
13200 .                   nr #FN_DEFER 1
13201 .                   nr #FN_DEPTH +\\n[#DIVER_DEPTH]
13202 .                   rr #GET_DEPTH
13203 .\" This is required so that the defer space clause can distinguish
13204 .\" a real #FN_COUNT=1 from one generated if FOOTNOTE is run inside
13205 .\" QUOTE, BLOCKQUOTE or EPIGRAPH
13206 .                   if \\n[#DIVER_FN]=2 \{\
13207 .                      nr #SAVED_DIVER_FN_COUNT \\n[#FN_COUNT]
13208 .                      rr #DIVER_FN
13209 .                   \}
13210 .                \}
13211 .             \}
13212 .\" Calculate the footnote depth.
13213 .             if \\n[#GET_DEPTH]=1 \{\
13214 .\" Save the previous footnote depth (for use when there will be
13215 .\" some overflowed footnote text).
13216 .                nr #SAVED_FN_DEPTH_1 \\n[#FN_DEPTH]
13217 .\" Add the depth of the current footnote to any already existent
13218 .\" footnotes.
13219 .                nr #FN_DEPTH +\\n[#DIVER_DEPTH]
13220 .\" Special handling for run-on footnotes
13221 .                if \\n[#RUN_ON]=1 \{\
13222 .                   if \\n[#RUNON_FOOTNOTES] \{\
13223 .                      unformat RUNON_FOOTNOTES
13224 .                   \}
13225 .                   if \\n[#RUNON_FN_IN_DIVER] \{\
13226 .                      unformat RUNON_FN_IN_DIVER
13227 .                   \}
13228 .                   ev FOOTNOTES
13229 .\" Recreate FOOTNOTES with rule followed by text of unformatted
13230 .\" run-on footnotes.
13231 .                   di FOOTNOTES
13232 .                   ie \\n[#FN_RULE]=0 \{ .RLD 1v \}
13233 .                   el \{\
13234 \v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\
13235 \D't \\n[#FN_RULE_WEIGHT]'\
13236 \h'-\\n[#FN_RULE_WEIGHT]u'\
13237 \D'l \\n[#FN_RULE_LENGTH]u 0'\
13238 \v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u'
13239 .                   \}
13240 .                   br
13241 .                   if \\n[#RUNON_FOOTNOTES] \{\
13242 .                      RUNON_FOOTNOTES
13243 .                      rr #RUNON_FOOTNOTES
13244 .                   \}
13245 .                   if \\n[#RUNON_FN_IN_DIVER] \{\
13246 .                      RUNON_FN_IN_DIVER
13247 .                      rr #RUNON_FN_IN_DIVER
13248 .                   \}
13249 .                   br
13250 .                   di
13251 .                   ev
13252 .                   nr #FN_DEPTH \\n[#DIVER_DEPTH]
13253 .                   nr #SAVED_VFP 0+\\n[#VARIABLE_FOOTER_POS]
13254 .                   nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
13255 .                \}
13256 .\" Save the new depth
13257 .                nr #SAVED_FN_DEPTH_2 \\n[#FN_DEPTH]
13258 .\" Signal that defer space should be added when PROCESS_FN_LEFTOVER
13259 .\" processes deferred footnotes.
13260 .                if \\n[#FN_DEFER] \{\
13261 .                   if \\n[#FN_COUNT]=2 \{\
13262 .                      ie \\n[#COLUMNS] \{\
13263 .                         if !\\n[#FROM_FOOTER] \{\
13264 .                            if \\n[#FN_DEFER]=1 \{ .nr #FN_DEFER_SPACE 1 \}
13265 .                            if \\n[#FN_COUNT_FOR_COLS]>=1 \{ .rr #FN_DEFER_SPACE \}
13266 .                            if \\n[#FROM_HEADER] \{ .nr #FN_DEFER_SPACE 1 \}
13267 .                         \}
13268 .                      \}
13269 .                      el \{\
13270 .                         nr #FN_DEFER_SPACE 1
13271 .                      \}
13272 .                   \}
13273 .                   rr #FN_DEFER
13274 .                \}
13275 .\" If the depth of the whole footnote won't fit in the space
13276 .\" between where we are on the page and the bottom margin, calculate
13277 .\" how much of it will fit.
13278 .                if \\n[#FN_DEPTH]>\\n[#SPACE_REMAINING] \{\
13279 .                   nr #FN_LINES 0 1
13280 .                   while (\\n+[#FN_LINES]*\\n[#FN_LEAD])<\\n[#SPACE_REMAINING] \{\
13281 .                      nr #FN_DEPTH (\\n[#FN_LINES]*\\n[#FN_LEAD])
13283 .                   nr #VFP_DIFF \\n[#FN_DEPTH]-\\n[#SAVED_FN_DEPTH_1]
13284 .                   nr #OVERFLOW 1
13285 .\" Very occasionally, #VFP_DIFF, on a 1st footnote that isn't to
13286 .\" be deferred, comes up with a depth equal to exactly 1 line
13287 .\" of footnotes, i.e. enough room to print the rule and nothing
13288 .\" else.  The following tests for such a condition, and rather than
13289 .\" attempting to treat the footnote as an overflow, it tells mom to
13290 .\" treat it as a special kind of deferred footnote (#FN_DEFER 2).
13291 .                   if \\n[#SAVED_FN_DEPTH_1]=0 \{\
13292 .                      if \\n[#FN_DEPTH]=\\n[#FN_LEAD] \{\
13293 .                         nr #FN_DEFER 2
13294 .                         nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_2]
13295 .                         rr #OVERFLOW
13296 .                      \}
13297 .                   \}
13298 .                \}
13299 .\" Calculate VFP based on whether the footnote overflows, or is to
13300 .\" be treated normally.
13301 .                ie \\n[#OVERFLOW]=1 \{\
13302 .                   if \\n[#RUN_ON] \{\
13303 .                      rr #VARIABLE_FOOTER_POS
13304 .                      nr #VARIABLE_FOOTER_POS \\n[#SAVED_VFP]
13305 .                   \}
13306 .                   ie \\n[#FN_COUNT]=1 \{\
13307 .                      ie \\n[#RULED]=1 \{\
13308 .                         ie \\n[#COLUMNS]=1 \{\
13309 .                            ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13310 .                               ie \\n[#FROM_FOOTER] \{\
13311 .                                  ie \\n[#FN_COUNT_FOR_COLS]>1 \{\
13312 .                                     nr #FN_DEPTH -\\n[#FN_DEPTH]
13313 .                                     if \\n[#DIVERTED]=1 \{ .nr #DIVERTED 3 \}
13314 .                                     if !\\n[#PREV_FN_DEFERRED]=1 \{\
13315 .                                        nr #FN_DEPTH -\\n[#VFP_DIFF]
13316 .                                     \}
13317 .                                  \}
13318 .                                  el \{\
13319 .                                     nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
13320 .                                     if \\n[#DIVERTED]=1 \{ .nr #DIVERTED 3 \}
13321 .                                  \}
13322 .                               \}
13323 .                               el \{\
13324 .                                  nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
13325 .                               \}
13326 .                            \}
13327 .                            el \{\
13328 .                               nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
13329 .                            \}
13330 .                         \}
13331 .                         el \{ .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH]) \}
13332 .                      \}
13333 .                      el \{\
13334 .                         nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
13335 .                         if \\n[#DIVERTED]=1 \{ .nr #DIVERTED 3 \}
13336 .                         if !\\n[#PREV_FN_DEFERRED]=1 \{\
13337 .                            ie \\n[#COLUMNS]=1 \{\
13338 .                               if !\\n[#FROM_FOOTER] \{\
13340 .                               \}
13341 .                            \}
13342 .                            el \{\
13343 .                               nr #FN_DEPTH -\\n[#VFP_DIFF]
13344 .                            \}
13345 .                         \}
13346 .                         if \\n[#DIVERTED]=3 \{\
13347 .                            if !\\n[#PREV_FN_DEFERRED] \{\
13348 .                               if !\\n[#FROM_FOOTER] \{\
13349 .                                  if \\n[#FN_COUNT]=1 \{\
13350 .                                     if !\\n[#VFP_DIFF] \{\
13351 .                                        if \\n[#FN_MARKER_STYLE]=1 \{\
13352 .                                           da FOOTNOTES
13353 \!.                                            ALD \\n[#FN_LEAD]u
13354 .                                           di
13355 .                                        \}
13356 .                                        if \\n[#RESET_FN_NUMBER] \{\
13357 .                                           da FOOTNOTES
13358 \!.                                            ALD \\n[#FN_LEAD]u
13359 .                                           di
13360 .                                        \}
13361 .                                     \}
13362 .                                  \}
13363 .                               \}
13364 .                            \}
13365 .                         \}
13366 .                      \}
13367 .\" Not sure what I was thinking with this next line.  As is, it
13368 .\" moves the already established VFP trap for footnote 1 higher up
13369 .\" the page, resulting in a VFP that's higher on the page than the
13370 .\" current page position.  Leaving it in anyway, commented out, in
13371 .\" case the logic and the conditions under which it should
13372 .\" apply reveal themselves.
13373 \#.                    nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
13374 .                      nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF]
13375 .                   \}
13376 .                   el \{\
13377 .                      nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
13378 .                      nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF]
13379 .                   \}
13380 .                   rr #OVERFLOW
13381 .                   rr #RULED
13382 .                \}
13383 .                el \{\
13384 .                   nr #VARIABLE_FOOTER_POS -\\n[#DIVER_DEPTH]
13385 .                   if \\n[#PREV_FN_DEFERRED]=1 \{\
13386 .                      if \\n[#DIVERTED] \{\
13387 .                         if !\\n[#FN_DEPTH]=\\n[#SAVED_FN_DEPTH_1] \{\
13388 .                            nr #FN_DEPTH +\\n[#FN_LEAD]
13389 .                            nr #VARIABLE_FOOTER_POS -\\n[#FN_LEAD]
13390 .                            rr #PREV_FN_DEFERRED
13391 .                         \}
13392 .                      \}
13393 .                   \}
13394 .                   if \\n[#FN_COUNT]>1 \{\
13395 .                      nr #NO_BACK_UP 1
13396 .                      rr #DIVERTED
13397 .                      rr #RULED
13398 .                   \}
13399 .                \}
13400 .             \}
13401 .          \}
13402 .          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
13403 .\" See VFP_CHECK for an explanation of the next lines.
13404 .\" The trap has to be removed, prior to setting it, each time
13405 .\" FOOTNOTE is run.
13406 .          if \\n[#PRINT_STYLE]=2 \{\
13407 .             ch VFP_CHECK
13408 .             wh \\n[#VARIABLE_FOOTER_POS]u-\\n[#DOC_LEAD]u VFP_CHECK
13409 .          \}
13410 .\" If we have a footnote whose text has to be deferred to the next
13411 .\" page, reset the FOOTER trap to its original location.
13412 .          if \\n[#FN_DEFER] \{\
13413 .             nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
13414 .             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
13415 .          \}
13416 .       \}
13417 .       nr #NO_FN_MARKER 0
13418 .    \}
13419 .    if \\n[#NUM_ARGS]=2 \{\
13420 .       if '\\$2'BREAK' \{ .BR \}
13421 .       if '\\$2'BR' \{ .BR \}
13422 .    \}
13423 .END
13425 \# Utility macros to manage footnotes that occur inside diversions
13426 \# ---------------------------------------------------------------
13428 \# There are some redundancies here; they're left in in case unforeseen
13429 \# footnote situations crop up in the future that might require
13430 \# manipulation of them.
13432 \# 1. Pre-footnote processing for footnotes in diversions
13434 \# a) A footnote inside a diversion will be moved entirely (marker
13435 \# in running text and text of footnote) to the next page/column.
13437 .MAC DIVER_FN_1_PRE END
13438 .    nr #RESET_FN_COUNTERS 1
13439 .    nr #COUNTERS_RESET 1
13440 .    if \\n[#DONE_ONCE]=1 \{\
13441 .       if \\n[#FN_DEFER] \{\
13442 .          if \\n[#SAVED_DIVER_FN_COUNT]=1 \{\
13443 .             ie \\n[#COLUMNS]=1 \{\
13444 .                if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_DEFER_SPACE 1 \}
13445 .             \}
13446 .             el \{\
13447 .                nr #FN_DEFER_SPACE 1
13448 .             \}
13449 .          \}
13450 .       \}
13451 .       if \\n[#FN_MARKER_STYLE]=1 \{\
13452 .          if \\n[#FN_COUNT]>0 \{ .nr #FN_COUNT 0 1 \}
13453 .          if \\n[#COLUMNS]=1 \{\
13454 .             if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13455 .                nr #FN_COUNT_FOR_COLS 0 1
13456 .             \}
13457 .          \}
13458 .       \}
13459 .       if \\n[#FN_MARKER_STYLE]=2 \{\
13460 .          if \\n[#RESET_FN_NUMBER]=1 \{\
13461 .             ie \\n[#COLUMNS]=1 \{\
13462 .                if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_NUMBER 0 1 \}
13463 .             \}
13464 .             el \{\
13465 .                nr #FN_NUMBER 0 1
13466 .             \}
13467 .          \}
13468 .       \}
13469 .    \}
13470 .END
13472 \# b) Treat as a normal footnote, including defers.
13474 .MAC DIVER_FN_2_PRE END
13475 .    nr #RESET_FN_COUNTERS 2
13476 .END
13478 \# 2. Post-footnote processing for footnotes in diversions
13480 \# Even when a footnote inside a diversion is treated as
13481 \# "normal," some manipulation of registers is required.  The
13482 \# macro is called in DO_QUOTE (i.e. at the termination of
13483 \# quotes and blockquotes) and in DO_EPIGRAPH.
13485 .MAC DIVER_FN_2_POST END
13486 .    if \\n[#DONE_ONCE]=1 \{\
13487 .       if \\n[#FN_MARKER_STYLE]=1 \{\
13488 .          if \\n[#FN_COUNT]=0 \{\
13489 .             nr #DONT_RULE_ME 1
13490 .          \}
13491 .          if \\n[#FN_COUNT]>0 \{\
13492 .             nr #FN_COUNT 0 1
13493 .          \}
13494 .          if \\n[#COLUMNS]=1 \{\
13495 .             if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_COUNT_FOR_COLS 0 1 \}
13496 .             if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13497 .             \}
13498 .          \}
13499 .       \}
13500 .       if \\n[#FN_MARKER_STYLE]=2 \{\
13501 .          if \\n[#FN_COUNT]=0 \{\
13502 .             nr #DONT_RULE_ME 1
13503 .          \}
13504 .          if \\n[#FN_COUNT]>0 \{\
13505 .             nr #FN_COUNT 0 1
13506 .          \}
13507 .          if \\n[#RESET_FN_NUMBER]=1 \{\
13508 .             ie \\n[#COLUMNS]=1 \{\
13509 .                if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_NUMBER 0 1 \}
13510 .             \}
13511 .             el \{\
13512 .                nr #FN_NUMBER 0 1
13513 .             \}
13514 .          \}
13515 .       \}
13516 .    \}
13517 .END
13519 \# The main macros that handle footnote processing.
13520 \# -----------------------------------------------
13521 \# Sometimes, #VARIABLE_FOOTER_POS sets FOOTER at a location that gives
13522 \# the impression another line of running text could fit on the page.
13523 \# VFP_CHECK is always set to the line just above the one where FOOTER
13524 \# will be sprung, and checks for this condition.  If it exists, FOOTER
13525 \# is set one line lower on the page, thus squeezing in an extra line
13526 \# of running text.  This is a judgment call on my part, but seems to
13527 \# work well.  If there are problems (e.g. footnotes really do look
13528 \# jammed), the user should probably adjust FOOTNOTE_AUTOLEAD and/or
13529 \# FOOTNOTE_RULE_ADJ.
13530 \# 
13531 \# The macro has to be run in its own environment, otherwise the first
13532 \# word of the last line before the footnotes gets chopped.
13534 .MAC VFP_CHECK END
13535 .    ev VFP_CHECK
13536 .\" The trap also has to be removed each time VFP_CHECK is run
13537 .    if \\n[#PRINT_STYLE]=2 \{\
13538 .       ch VFP_CHECK
13539 .       SIZESPECS
13540 .       ie !\\n[#IN_DIVER] \{ .nr #PAGE_POS \\n(nl \}
13541 .       el \{ .nr #PAGE_POS \\n(nl+\\n(.d+(\\n[#DOC_LEAD]) \}
13542 .       nr #FOOTER_POS \\n[#PAGE_LENGTH]+(\\n[#VARIABLE_FOOTER_POS])
13543 .       nr #SPACE_TO_FOOTER \\n[#FOOTER_POS]-\\n[#PAGE_POS]
13544 .       nr #FN_GAP \\n[#SPACE_TO_FOOTER]%\\n[#DOC_LEAD]
13545 .       if !\\n[#FN_GAP]<0 \{\
13546 .          if \\n[#FN_GAP]<\\n[#DOC_LEAD] \{\
13547 .             ie (\\n[#PAGE_POS]+(\\n[#FN_DEPTH]+\\n[#FN_GAP]))>(\\n[#VISUAL_B_MARGIN]) \{\
13548 .                nr #VARIABLE_FOOTER_POS 0+\\n[#VARIABLE_FOOTER_POS]
13549 .             \}
13550 .             el \{\
13551 .                ie \\n[#DOC_LEAD]-\\n[#FN_GAP]<\\n[#DESCENDER] \{\
13552 .                   nr #VARIABLE_FOOTER_POS +\\n[#DOC_LEAD]
13553 .                   ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
13554 .                \}
13555 .                el \{\
13556 .                   nr #VARIABLE_FOOTER_POS 0+\\n[#VARIABLE_FOOTER_POS]
13557 .                \}
13558 .             \}
13559 .          \}
13560 .       \}
13561 .    \}
13562 .    ev
13563 .END
13565 \# FN_OVERFLOW_TRAP starts off "underneath" FOOTER, but is revealed
13566 \# as #VARIABLE_FOOTER_POSITION changes the position of FOOTER.
13567 \# FN_OVERFLOW_TRAP simply starts diversion FN_OVERFLOW to "catch"
13568 \# the overflow.  The diversion is ended in FOOTER, immediately after
13569 \# FOOTER outputs the diversion, FOOTNOTES, before PROCESS_FN_LEFTOVER
13570 \# is run (either in HEADER, or in FOOTER if moving col to col).
13572 .MAC FN_OVERFLOW_TRAP END
13573 .    if \\n[#FN_COUNT] \{\
13574 .       di FN_OVERFLOW
13575 .       ie !\\n[#NO_BACK_UP]=1 \{\
13576 .          if \\n[#PREV_FN_DEFERRED] \{\
13577 .             ie \\n[#COLUMNS]=1 \{\
13578 .                if \\n[#FROM_FOOTER] \{\
13579 .                   if \\n[#PREV_FN_DEFERRED] \{\
13580 .                      if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13581 .                      rr #PREV_FN_DEFERRED
13582 .                      \}
13583 .                   \}
13584 .                \}
13585 .                if !\\n[#FROM_FOOTER] \{\
13586 .                   if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13587 .                      if !\\n[#LAST_FN_COUNT_FOR_COLS]>1 \{\
13588 \!.                       RLD \\n[#FN_LEAD]u
13589 .                      \}
13590 .                   \}
13591 .                \}
13592 .             \}
13593 .             el \{\
13594 \!.              RLD \\n[#FN_LEAD]u
13595 .             \}
13596 .          \}
13597 .       \}
13598 .       el \{\
13599 .          rr #NO_BACK_UP
13600 .          rr #PREV_FN_DEFERRED
13601 .       \}
13602 .    \}
13603 .\" When #FROM_DIVERT_FN is 1, it signals to FOOTNOTE, when run from
13604 .\" within DIVERT_FN_LEFTOVER, to set #SPACE_REMAINING to the total
13605 .\" area allowable for running text.
13606 .    nr #FROM_DIVERT_FN 1
13607 .END
13609 \# PROCESS_FN_LEFTOVER is called at the top of HEADER, and in
13610 \# FOOTER if we're moving from one column to the next (i.e. after
13611 \# outputting FOOTNOTES).  It checks for whether we have a "deferred
13612 \# footnote" situation, and resets counters and number registers
13613 \# accordingly.  Lastly, if we have some footnote overflow, it calls
13614 \# DIVERT_FN_OVERFLOW.
13616 .MAC PROCESS_FN_LEFTOVER END
13617 .    if \\n[#PREV_FN_DEFERRED]=2 \{\
13618 .       if \\n[#FN_COUNT_AT_FOOTER]>1 \{ .rr #PREV_FN_DEFERRED \}
13619 .    \}
13620 .    if !\\n[#FN_DEFER] \{\
13621 .       nr #FN_COUNT 0 1
13622 .       nr #FN_DEPTH 0
13623 .       nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
13624 .    \}
13625 .    if r#FN_DEFER \{\
13626 .       if \\n[#FN_DEFER]=1 \{\
13627 .          nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
13628 .       \}
13629 .       if \\n[#FN_DEFER]=2 \{\
13630 .          nr #FN_DEPTH 0
13631 .          nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
13632 .       \}
13633 .    \}
13634 .    nr #SPACE_REMAINING 0
13635 .    ch FOOTER -\\n[#B_MARGIN]u
13636 .    if \\n[#FN_DEFER] \{\
13637 .       nr #NO_FN_MARKER 1
13638 .       FOOTNOTE
13639 .       nf
13640 .       FOOTNOTE OFF
13641 .       ie \\n[#COLUMNS]=1 \{\
13642 .          if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13643 .             if !\\n[#FROM_FOOTER] \{\
13644 .                if \\n[#FN_COUNT_FOR_COLS]=1 \{ .nr #PREV_FN_DEFERRED 1 \}
13645 .             \}
13646 .          \}
13647 .       \}
13648 .       el \{ .nr #PREV_FN_DEFERRED 1 \}
13649 .    \}
13650 .    if !\\n[#FN_DEFER] \{\
13651 .       if \\n[#FN_OVERFLOW_DEPTH] \{\
13652 .          DIVERT_FN_LEFTOVER
13653 .       \}
13654 .    \}
13655 .    ie \\n[#COLUMNS]=1 \{\
13656 .       if \\n[#COL_NUM]>1 \{\
13657 .          if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_COUNT 0 1 \}
13658 .       \}
13659 .    \}
13660 .    el \{ .nr #FN_COUNT 0 1 \}
13661 .    if \\n[#DIVER_FN]=2 \{ .rr #DIVER_FN \}
13662 .    rr #FROM_DIVERT_FN
13663 .END
13665 \# DIVERT_FN_LEFTOVER is called in PROCESS_FN_LEFTOVER (at
13666 \# the top of HEADER, and in FOOTER if we're moving from one column
13667 \# to the next).
13669 .MAC DIVERT_FN_LEFTOVER END
13670 .    nr #NO_FN_MARKER 1
13671 .    nr #DIVERTED 1
13672 .    FOOTNOTE
13673 .    nf
13674 .    FN_OVERFLOW
13675 .    FOOTNOTE OFF
13676 .    if \\n[#PREV_FN_DEFERRED] \{\
13677 .       nr #FN_DEPTH -\\n[#FN_LEAD]
13678 .       nr #VARIABLE_FOOTER_POS +\\n[#FN_LEAD]
13679 .       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
13680 .       if \\n[#PREV_FN_DEFERRED]=2 \{\
13681 .          nr #PREV_FN_DEFERRED 1
13682 .          rr #DIVERTED
13683 .       \}
13684 .    \}
13685 .    rr #FN_OVERFLOW_DEPTH
13686 .END
13688 \# This is a special macro to deal with footnotes that are set inside
13689 \# diversions (QUOTE, BLOCKQUOTE and EPIGRAPH).  It's called in HEADER
13690 \# (and in FOOTER, if we're moving from column to column), and comes
13691 \# after PROCESS_FOOTNOTE_LEFTOVER in those two macros.
13693 .MAC PROCESS_FN_IN_DIVER END
13694 .    nr #SPACE_REMAINING 0
13695 .    ch FOOTER -\\n[#B_MARGIN]u
13696 .    nr #NO_FN_MARKER 1
13697 .    if !\\n[#RESET_FN_COUNTERS]=2 \{\
13698 .       rr #RESET_FN_COUNTERS
13699 .    \}
13700 .    FOOTNOTE
13701 .    if \\n[#FN_OVERFLOW_DEPTH] \{ .nf \}
13702 .    ie dRUNON_FN_IN_DIVER \{\
13703 .       RUNON_FN_IN_DIVER
13704 .       rm RUNON_FN_IN_DIVER
13705 .    \}
13706 .    el \{\
13707 .       nf
13708 .       FN_IN_DIVER
13709 .    \}
13710 .    FOOTNOTE OFF
13711 .    rr #DIVER_FN
13712 .END
13714 \# ====================================================================
13716 \# +++ENDNOTES+++
13718 \# When endnotes are output, the spacing between the notes is always
13719 \# 1 extra linespace.  This can have bottom margin consequences.  If
13720 \# this doesn't bother you, don't worry about it.  If it does bother
13721 \# you, and you want to adjust the spacing between any two endnotes (as
13722 \# they're output), make the spacing adjustments (.ALD/.RLD) at the
13723 \# *end* of endnotes (i.e. just before .ENDNOTE OFF), not at the top.
13724 \# 
13725 \# Endnotes must be output manually with .ENDNOTES. This allows user
13726 \# the flexibility to output endnotes at the end of each collated
13727 \# document, or to output them at the end of the entire document.
13729 \# Control macros
13730 \# --------------
13732 \# ENDNOTE POINT SIZE
13733 \# ------------------
13734 \# *Argument:
13735 \#   <base point size for endnotes>
13736 \# *Function:
13737 \#   Creates or modifies register #EN_PS.
13738 \# *Notes:
13739 \#   Default is same as running text in body of document.
13741 \#   This size control macro differs from other size control macros
13742 \#   in that it sets an absolute point size, not a relative one.  This
13743 \#   is because a) endnotes always appear separate from the body of
13744 \#   a document and therefore don't need to be relative to the body
13745 \#   of the document, and b) there are quite a few elements of the
13746 \#   endnotes page(s) that need to be relative to the base point size
13747 \#   of that page.  If the base endnote point size were relative to
13748 \#   the body of the document (i.e. a _SIZE macro taking a +|- value)
13749 \#   getting the rest of the endnote elements sized properly could
13750 \#   become very confusing.
13752 .MAC ENDNOTE_PT_SIZE END
13753 .    nr #EN_PS (p;\\$1)
13754 .END
13757 \# ENDNOTE LEAD
13758 \# ------------
13759 \# *Argument:
13760 \#   <base leading to use in endnotes> [ ADJUST ]
13761 \# *Function:
13762 \#   Creates or modifies register #EN_LEAD.  Creates or removes
13763 \#   register #ADJ_EN_LEAD.  Stores arguments in strings if ENDNOTE_LEAD
13764 \#   set before START.
13765 \# *Notes:
13766 \#   Default is 14 points for TYPESET, adjusted; 24 for TYPEWRITE.
13768 .MAC ENDNOTE_LEAD END
13769 .    if !\\n[#OK_PROCESS_LEAD] \{\
13770 .       ds $EN_LEAD \\$1
13771 .       if !'\\$2'' \{\
13772 .           ds $ADJUST_EN_LEAD \\$2
13773 .       \}
13774 .       return
13775 .    \}
13776 .    rr #ADJ_EN_LEAD
13777 .    nr #EN_LEAD (p;\\$1)
13778 .    if '\\$2'ADJUST' \{\
13779 .       nr #ORIG_DOC_LEAD \\n[#DOC_LEAD]
13780 .       nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
13781 .       nr #ADJ_DOC_LEAD 1
13782 .       nr #ADJ_EN_LEAD 1
13783 .       nr #NO_TRAP_RESET 1
13784 .       DOC_LEAD \\n[#EN_LEAD]u ADJUST
13785 .       nr #EN_LEAD \\n[#DOC_LEAD]
13786 .       DOC_LEAD \\n[#ORIG_DOC_LEAD]u
13787 .       rr #NO_TRAP_RESET
13788 .       nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
13789 .       rr #ORIG_DOC_LEAD
13790 .    \}
13791 .END
13794 \# ENDNOTES_HDRFTR_CENTER
13795 \# ----------------------
13796 \# *Argument:
13797 \#   toggle
13798 \# *Function:
13799 \#   Creates or removes toggle register #EN_HDRFTR_CENTER, used to
13800 \#   determine whether mom should print a/the hdrftr center string
13801 \#   on the endnotes page.  Primarily to enable/disable printing of the
13802 \#   chapter name in hdrftrs when DOCTYPE CHAPTER.
13803 \# *Notes:
13804 \#   Default is OFF
13806 .MAC ENDNOTES_HDRFTR_CENTER END
13807 .    ie '\\$1'' \{ .nr #EN_HDRFTR_CENTER 1 \}
13808 .    el         \{ .rr #EN_HDRFTR_CENTER   \}
13809 .END
13812 \# ENDNOTE STRING
13813 \# --------------
13814 \# *Argument:
13815 \#   <title for endnotes page>
13816 \# *Function:
13817 \#   Creates or modifies string $EN_STRING.
13818 \# *Notes:
13819 \#   Default is "Endnotes"
13821 .MAC ENDNOTE_STRING END
13822 .    ds $EN_STRING \\$1
13823 .END
13826 .MAC ENDNOTE_STRING_ADVANCE END
13827 .    nr #EN_STRING_ADVANCE (\\$1)
13828 .END
13831 \# ENDNOTE STRING CAPS
13832 \# -------------------
13833 \# *Arguments:
13834 \#   <none> | <anything>
13835 \# *Function:
13836 \#   Turns capitalization of the endnotes pages title string
13837 \#   "Endnotes" on or off.
13838 \# *Notes:
13839 \#   Users may want the endnotes pages title string to be in caps,
13840 \#   but the toc entry for endnotes in lower case.  If the argument
13841 \#   to ENDNOTE_STRING is in lower case and ENDNOTE_STRING_CAPS is
13842 \#   turned on, this is exactly what will happen.
13844 \#   Default is on.
13846 .MAC ENDNOTE_STRING_CAPS END
13847 .   ie '\\$1'' \{ .nr #EN_STRING_CAPS 1 \}
13848 .   el \{ .rr #EN_STRING_CAPS \}
13849 .END
13852 \# ENDNOTE TITLE
13853 \# -------------
13854 \# *Argument:
13855 \#   <string that appears before the first endnote pertaining to any document>
13856 \# *Function:
13857 \#   Creates string $EN_TITLE.
13858 \# *Notes:
13859 \#   Default is the document title, or, if doc is a chapter, "Chapter #"
13861 .MAC ENDNOTE_TITLE END
13862 .    ds $EN_TITLE \\$1
13863 .END
13866 \# ENDNOTE MARKER STYLE
13867 \# --------------------
13868 \# *Arguments:
13869 \#   NUMBER | LINE
13870 \# *Function:
13871 \#   Sets register #EN_MARKER_STYLE, used in ENDNOTE to determine
13872 \#   the style of endnote markers (labels).
13873 \# *Notes:
13874 \#   1=NUMBER; 2=LINE.  LINE means "use output line numbers".
13875 \#   Default is NUMBER.
13877 .MAC ENDNOTE_MARKER_STYLE END
13878 .    if '\\$1'NUMBER' \{\
13879 .       nr #EN_MARKER_STYLE 1
13880 .    \}
13881 .    if '\\$1'LINE' \{\
13882 .       nr #EN_MARKER_STYLE 2
13883 .       if !\\n[#EN_LN_SEP] \{\
13884 .          if !\\n[#EN_LN_BRACKETS] \{ .ENDNOTE_LINENUMBER_BRACKETS SQUARE \}
13885 .       \}
13886 .    \}
13887 .END
13890 \# ENDNOTE LINENUMBER MARK
13891 \# -----------------------
13892 \# *Function:
13893 \#   This string, when called inline, stores the current output line
13894 \#   number in register #EN_MARK for use with ENDNOTE.
13896 .ds EN-MARK \R'#EN_MARK \En(ln'
13899 \# ENDNOTE LINENUMBER SEPARATOR
13900 \# ----------------------------
13901 \# *Argument:
13902 \#   <user-defined separator>
13903 \# *Function:
13904 \#   Stores user-defined separator (for use then
13905 \#   ENDNOTE_MARKER_STYLE is LINE) in string $EN_LN_SEP.  The
13906 \#   separator is intended to be used when the user wishes a
13907 \#   separator, rather than the choice of brackets offered by
13908 \#   ENDNOTE_LINENUMBER_BRACKETS.
13910 .MAC ENDNOTE_LINENUMBER_SEPARATOR END
13911 .    rr #EN_LN_BRACKETS
13912 .    nr #EN_LN_SEP 1
13913 .    ds $EN_LN_SEP "\\$1
13914 .END
13917 \# ENDNOTE LINENUMBER BRACKETS
13918 \# ---------------------------
13919 \# *Argument:
13920 \#   PARENS | SQUARE | BRACES or ( | [ | {
13921 \# *Function:
13922 \#   Sets register #EN_LN_BRACKETS to 1, and creates strings
13923 \#   $EN_OPEN_BRACKET and $EN_CLOSE_BRACKET according to the given argument.
13925 .MAC ENDNOTE_LINENUMBER_BRACKETS END
13926 .    rr #EN_LN_SEP
13927 .    nr #EN_LN_BRACKETS 1
13928 .    if '\\$1'PARENS' \{\
13929 .       ds $EN_OPEN_BRACKET (
13930 .       ds $EN_CLOSE_BRACKET )
13931 .    \}
13932 .    if '\\$1'(' \{\
13933 .       ds $EN_OPEN_BRACKET (
13934 .       ds $EN_CLOSE_BRACKET )
13935 .    \}
13936 .    if '\\$1'SQUARE' \{\
13937 .       ds $EN_OPEN_BRACKET [
13938 .       ds $EN_CLOSE_BRACKET ]
13939 .    \}
13940 .    if '\\$1'[' \{\
13941 .       ds $EN_OPEN_BRACKET [
13942 .       ds $EN_CLOSE_BRACKET ]
13943 .    \}
13944 .    if '\\$1'BRACES' \{\
13945 .       ds $EN_OPEN_BRACKET {
13946 .       ds $EN_CLOSE_BRACKET }
13947 .    \}
13948 .    if '\\$1'{' \{\
13949 .       ds $EN_OPEN_BRACKET {
13950 .       ds $EN_CLOSE_BRACKET }
13951 .    \}
13952 .END
13955 \# ENDNOTE LINENUMBER GAP
13956 \# ----------------------
13957 \# *Argument:
13958 \#   <space between line-number labels and endnotes text>
13959 \# *Function:
13960 \#   Defines string $EN_LN_GAP, used during printing of line-number
13961 \#   labels in ENDNOTE.
13963 .MAC ENDNOTE_LINENUMBER_GAP END
13964 .    ds $EN_LN_GAP \\$1
13965 .END
13968 \# ENDNOTE NUMBERS ALIGN RIGHT
13969 \# ---------------------------
13970 \# *Argument:
13971 \#   <max. number of digit placeholders that will appear in endnotes>
13972 \# *Function:
13973 \#   Toggles register #EN_NUMBERS_ALIGN_RIGHT on; creates register
13974 \#   #EN_NUMBER_PLACEHOLDERS.
13975 \# *Notes:
13976 \#   Default is for footnote numbers to be right aligned to 2 placeholders.
13978 .MAC ENDNOTE_NUMBERS_ALIGN_RIGHT END
13979 .    rr #EN_NUMBERS_ALIGN_LEFT
13980 .    nr #EN_NUMBERS_ALIGN_RIGHT 1
13981 .    nr #EN_NUMBER_PLACEHOLDERS \\$1
13982 .END
13985 \# ENDNOTE NUMBERS ALIGN LEFT
13986 \# --------------------------
13987 \# *Argument:
13988 \#   none
13989 \# *Function:
13990 \#   Toggles register #EN_NUMBERS_ALIGN_LEFT on.
13991 \# *Notes:
13992 \#   Default is for footnote numbers to be right aligned to 2 placeholders
13993 \#   (i.e. not left aligned).
13995 .MAC ENDNOTE_NUMBERS_ALIGN_LEFT END
13996 .    rr #EN_NUMBERS_ALIGN_RIGHT
13997 .    nr #EN_NUMBERS_ALIGN_LEFT 1
13998 .END
14001 \# ENDNOTE PARAGRAPH INDENT
14002 \# ------------------------
14003 \# *Argument:
14004 \#   <first line indent of paras subsequent to 1st in endnotes>
14005 \# *Function:
14006 \#   Creates register #EN_PP_INDENT for use in .PP.
14007 \# *Notes:
14008 \#   Requires a unit of measure.
14010 \#   Default is 1.5m for TYPESET; same indent as PARA_INDENT for TYPEWRITE.
14012 .MAC ENDNOTE_PARA_INDENT END
14013 .    nr #EN_PP_INDENT (\\$1)
14014 .END
14017 \# TURN OFF COLUMN MODE FOR ENDNOTES
14018 \# ---------------------------------
14019 \# *Argument:
14020 \#   <none> | <anything>
14021 \# *Function:
14022 \#   Creates or removes register #EN_NO_COLS
14023 \# *Notes:
14024 \#   Allows user to tell mom not to set endnotes in columnar
14025 \#   documents in columns.  Default is to set endnotes in columns.
14027 .MAC ENDNOTES_NO_COLUMNS END
14028 .    ie '\\$1'' \{ .nr #EN_NO_COLS 1 \}
14029 .    el \{ .rr #EN_NO_COLS \}
14030 .END
14033 \# NO FIRST PAGE NUMBER ON ENDNOTES FIRST PAGE
14034 \# -------------------------------------------
14035 \# *Argument:
14036 \#   <none> | <anything>
14037 \# *Function:
14038 \#   Creates or removes register #EN_NO_FIRST_PN
14039 \# *Notes:
14040 \#   For use if FOOTERS are on.  Tells ENDNOTES not to put a page
14041 \#   number on the first endnotes page.  Some users may want this.
14042 \#   Default is to print a page number at the top of the first
14043 \#   endnotes page when footers are on.
14045 .MAC ENDNOTES_NO_FIRST_PAGENUM END
14046 .    ie '\\$1'' \{ .nr #EN_NO_FIRST_PN 1 \}
14047 .    el \{ .rr #EN_NO_FIRST_PN \}
14048 .END
14051 \# PAGE HEADERS ON ENDNOTES PAGES
14052 \# ------------------------------
14053 \# *Argument:
14054 \#   <none> | ALL
14055 \# *Function:
14056 \#   Creates or removes register #EN_ALLOWS_HEADERS or
14057 \#   #EN_ALLOWS_HEADERS_ALL
14058 \# *Notes:
14059 \#   Whether ENDNOTES puts a page header at the top of endnotes
14060 \#   pages if page headers are used throughout the document.
14061 \#   Default is to insert the page headers, but not on the first
14062 \#   page.  If the optional argument ALL is given, ENDNOTES puts a
14063 \#   page header on the first page as well.
14065 .MAC ENDNOTES_ALLOWS_HEADERS END
14066 .    ie '\\$1'' \{ .nr #EN_ALLOWS_HEADERS 1 \}
14067 .    el \{\
14068 .       ie '\\$1'ALL' \{\
14069 .          nr #EN_ALLOWS_HEADERS 1
14070 .          nr #EN_ALLOWS_HEADERS_ALL 1
14071 .       \}
14072 .       el \{\
14073 .          nr #EN_ALLOWS_HEADERS 0
14074 .          nr #EN_ALLOWS_HEADERS_ALL 0
14075 .       \}
14076 .    \}
14077 .END
14080 \# ENDNOTES PAGES PAGE NUMBERING STYLE
14081 \# -----------------------------------
14082 \# *Argument:
14083 \#   DIGIT | ROMAN | roman | ALPHA | alpha
14084 \# *Function:
14085 \#   Creates or modifies $EN_PN_STYLE.
14086 \# *Notes:
14087 \#   Allows user to define what style should be used for endnotes
14088 \#   pages page numbering.  Arguments are the same as for
14089 \#   PAGENUM_STYLE.
14091 \#   Default is DIGIT.
14093 .MAC ENDNOTES_PAGENUM_STYLE END
14094 .    ds $EN_PN_STYLE \\$1
14095 .END
14098 \# FIRST PAGE NUMBER FOR ENDNOTES
14099 \# ------------------------------
14100 \# *Argument:
14101 \#   <page number that appears on page 1 of endnotes pages>
14102 \# *Function:
14103 \#   Creates or modifies string $EN_FIRST_PN
14104 \# *Notes:
14105 \#   To be used with caution, only if all endnotes
14106 \#   are to be output at once, i.e. not at the end of the separate
14107 \#   docs of a collated doc
14109 .MAC ENDNOTES_FIRST_PAGENUMBER END
14110 .    nr #EN_FIRST_PN \\$1
14111 .END
14113 \# SINGLESPACE ENDNOTES
14114 \# --------------------
14115 \# *Argument:
14116 \#   <none> | <anything>
14117 \# *Function:
14118 \#   Sets lead of endnotes pages in TYPEWRITE to 12 points,
14119 \#   adjusted.
14120 \# *Notes:
14121 \#   Default is to double-space endnotes pages.
14123 .MAC SINGLESPACE_ENDNOTES END
14124 .    if \\n[#PRINT_STYLE]=1 \{\
14125 .       ie \\n[#SINGLE_SPACE] \{\
14126 .          nr #EN_SINGLESPACE 1
14127 .          rr #IGNORE
14128 .          if \\n[#OK_PROCESS_LEAD] \{\
14129 .             ENDNOTE_LEAD 12 ADJUST
14130 .             nr #IGNORE 1
14131 .          \}
14132 .       \}
14133 .       el \{\
14134 .          ie '\\$1'' \{\
14135 .             nr #EN_SINGLESPACE 1
14136 .             rr #IGNORE
14137 .             if \\n[#OK_PROCESS_LEAD] \{\
14138 .                ENDNOTE_LEAD 12 ADJUST
14139 .                nr #IGNORE 1
14140 .             \}
14141 .          \}
14142 .          el \{\
14143 .             rr #EN_SINGLESPACE
14144 .             rr #IGNORE
14145 .             if \\n[#OK_PROCESS_LEAD] \{\
14146 .                ENDNOTE_LEAD 24 ADJUST
14147 .                nr #IGNORE 1
14148 .             \}
14149 .          \}
14150 .       \}
14151 .    \}
14152 .END
14155 \# ENDNOTE PARAGRAPH SPACE
14156 \# -----------------------
14157 \# *Argument:
14158 \#   toggle
14159 \# *Function:
14160 \#   Creates toggle register #EN_PP_SPACE for use in .PP.
14161 \# *Notes:
14162 \#   Like PARA_SPACE.  Default is not to space endnote paras.
14164 .MAC ENDNOTE_PARA_SPACE END
14165 .    ie '\\$1'' \{ .nr #EN_PP_SPACE 1 \}
14166 .    el \{ .rr #EN_PP_SPACE \}
14167 .END
14170 \# ENDNOTE
14171 \# -------
14172 \# *Argument:
14173 \#   toggle
14174 \# *Function:
14175 \#   Places superscript endnote number in text, then collects and
14176 \#   processes endnote in diversion END_NOTES.
14177 \# *Notes:
14178 \#   \c must be appended to the word immediately preceding .ENDNOTE
14179 \#   when ENDNOTE_MARKER_STYLE is NUMBER.
14181 .MAC ENDNOTE END
14182 .    ie '\\$1'' \{\
14183 .       nr #ENDNOTE 1
14184 .       if \\n[#EN_MARKER_STYLE]=1 \{\
14185 .          if \\n[#CONDENSE] \{ \*[CONDX]\c \}
14186 .          if \\n[#EXTEND]   \{ \*[EXTX]\c  \}
14187 .          if \\n[#PRINT_STYLE]=1 \{\
14188 .             if \\n[#UNDERLINE_ON] \{\
14189 .                nr #UNDERLINE_WAS_ON 1
14190 .                UNDERLINE OFF
14191 .             \}
14192 .             if \\n[#SLANT_ON] \{\
14193 .                 nr #SLANT_WAS_ON 1
14194 \*[SLANTX]\c
14195 .             \}
14196 .             PRINT "\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#EN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c"
14197 .          \}
14198 .          if \\n[#PRINT_STYLE]=2 \{\
14199 .             PRINT \*[SUP]\\n+[#EN_NUMBER]\*[SUPX]\c
14200 .          \}
14201 .       \}
14202 .       if \\n[#EN_MARKER_STYLE]=2 \{\
14203 .           ie r#EN_NUMBER \{ \\n+[#EN_NUMBER] \}
14204 .           el \{ .nr #EN_NUMBER 1 1 \}
14205 .          if !\\n[#LINENUMBERS] \{\
14206 .             tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
14207 .             tm1 "       ENDNOTE_MARKER_STYLE is LINE.
14208 .             ab Aborting on ENDNOTE at line \\n(.c.
14209 .          \}
14210 .          if \\n[#EN_MARK]=0 \{ .nr #EN_MARK \\n(ln \}
14211 .          nr #EN_MARK_2 \\n(ln
14212 .          if '\\n(.z'P_QUOTE' \{\
14213 .             nr #EN_MARK -1
14214 .             nr #EN_MARK_2 -1
14215 .          \}
14216 .       \}
14217 .       nr #PP_STYLE_PREV \\n[#PP_STYLE]
14218 .       nr #PP_STYLE 1
14219 .       if \\n[#INDENT_FIRST_PARAS] \{ .nr #INDENT_FIRSTS 1 \}
14220 .       INDENT_FIRST_PARAS
14221 .       ev EN
14222 .       da END_NOTES
14223 .       LL \\n[#DOC_L_LENGTH]u
14224 .       ta \\n(.lu
14225 .       if \\n[#COLUMNS] \{\
14226 .          ie \\n[#EN_NO_COLS] \{ .LL \\n[#DOC_L_LENGTH]u \}
14227 .          el \{ .LL \\n[#COL_L_LENGTH]u \}
14228 .          ta \\n(.lu
14229 .       \}
14230 .       vs \\n[#EN_LEAD]u
14231 .       if \\n[#EN_NUMBER]=1 \{\
14232 \!.        ne 3
14233 .          if \\n[#PRINT_STYLE]=1 \{\
14234 .             TYPEWRITER
14235 .          \}
14236 .          if \\n[#PRINT_STYLE]=2 \{\
14237 .             FAMILY  \\*[$EN_TITLE_FAM]
14238 .             FT      \\*[$EN_TITLE_FT]
14239 .             PT_SIZE \\n[#EN_PS]u\\*[$EN_TITLE_SIZE_CHANGE]
14240 .          \}
14241 .          sp
14242 .          if !'\\*[$EN_TITLE]'' \{\
14243 .             if '\\*[$EN_TITLE_QUAD]'L'      \{ .LEFT   \}
14244 .             if '\\*[$EN_TITLE_QUAD]'LEFT'   \{ .LEFT   \}
14245 .             if '\\*[$EN_TITLE_QUAD]'C'      \{ .CENTER \}
14246 .             if '\\*[$EN_TITLE_QUAD]'CENTER' \{ .CENTER \}
14247 .             if '\\*[$EN_TITLE_QUAD]'CENTRE' \{ .CENTER \}
14248 .             if '\\*[$EN_TITLE_QUAD]'R'      \{ .RIGHT  \}
14249 .             if '\\*[$EN_TITLE_QUAD]'RIGHT'  \{ .RIGHT  \}
14250 .             ie \\n[#EN_TITLE_UNDERLINE] \{\
14251 .                nr #FROM_EN_TITLE 1
14252 .                UNDERSCORE "\\*[$EN_TITLE]"
14253 .                rr #FROM_EN_TITLE
14254 .             \}
14255 .             el \{\
14256 .                PRINT "\\*[$EN_TITLE]"
14257 .             \}
14258 .          \}
14259 .       \}
14260 .       if \\n[#PRINT_STYLE]=1 \{\
14261 .          TYPEWRITER
14262 .          if \\n[#EN_NUMBER]=1 \{\
14263 .             if \\n[#SINGLE_SPACE]=1 \{ .sp \}
14264 .          \}
14265 .       \}
14266 .       if \\n[#PRINT_STYLE]=2 \{\
14267 .          if \\n[#EN_NUMBER]=1 \{\
14268 .             if !'\\*[$EN_TITLE]'' \{ .sp \}
14269 .          \}
14270 .          if \\n[#EN_MARKER_STYLE]=1 \{\
14271 .             FAMILY  \\*[$EN_NUMBER_FAM]
14272 .             FT      \\*[$EN_NUMBER_FT]
14273 .             PT_SIZE \\n[#EN_PS]u\\*[$EN_NUMBER_SIZE_CHANGE]
14274 .          \}
14275 .          if \\n[#EN_MARKER_STYLE]=2 \{\
14276 .             FAMILY  \\*[$EN_LN_FAM]
14277 .             FT      \\*[$EN_LN_FT]
14278 .             PT_SIZE \\n[#EN_PS]u\\*[$EN_LN_SIZE_CHANGE]
14279 .          \}
14280 .       \}
14281 .       if \\n[#EN_MARKER_STYLE]=2 \{\
14282 .          ENDNOTE_NUMBERS_ALIGN_LEFT
14283 .          ie \\n[#EN_LN_BRACKETS]=1 \{\
14284 .             ds $EN_LINENUMBER \v'-.085m'\\*[$EN_OPEN_BRACKET]\v'.085m'
14285 .             ie \\n[#EN_MARK_2]=\\n[#EN_MARK] \{\
14286 .                as $EN_LINENUMBER \\n[#EN_MARK]\v'-.085m'\\*[$EN_CLOSE_BRACKET]\v'.085m' \"
14287 .             \}
14288 .             el \{\
14289 .                as $EN_LINENUMBER \\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\v'-.085m'\\*[$EN_CLOSE_BRACKET]\v'.085m' \"
14290 .             \}
14291 .          \}
14292 .          el \{\
14293 .             ie \\n[#EN_MARK_2]=\\n[#EN_MARK] \{\
14294 .                ds $EN_LINENUMBER \\n[#EN_MARK]\\*[$EN_LN_SEP]
14295 .             \}
14296 .             el \{\
14297 .                ds $EN_LINENUMBER \\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\\*[$EN_LN_SEP]
14298 .             \}
14299 .          \}
14300 .          nr #EN_MARK 0
14301 .       \}
14302 \!.     TRAP OFF
14303 .       nr #RESET_L_LENGTH \\n(.l
14304 .       ie \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
14305 .          nr #EN_NUMBER_L_LENGTH \w'\0'*\\n[#EN_NUMBER_PLACEHOLDERS]+\w'.'
14306 .          RIGHT
14307 .       \}
14308 .       el \{\
14309 .          nr #EN_NUMBER_L_LENGTH \w'\En[#EN_NUMBER].\0'
14310 .          LEFT
14311 .       \}
14312 .       if \\n[#EN_MARKER_STYLE]=2 \{\
14313 .          if !\\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
14314 .             nr #EN_NUMBER_L_LENGTH \w'\\*[$EN_LINENUMBER]'+\\*[$EN_LN_GAP]
14315 .             LEFT
14316 .          \}
14317 .       \}
14318 .       ll \\n[#EN_NUMBER_L_LENGTH]u
14319 .       if \\n[#EN_MARKER_STYLE]=1 \{\
14320 \En[#EN_NUMBER].
14321 .       \}
14322 .       if \\n[#EN_MARKER_STYLE]=2 \{\
14323 \\*[$EN_LINENUMBER]
14324 .          rm $EN_LINENUMBER
14325 .       \}
14326 .       EOL
14327 .       ll \\n[#RESET_L_LENGTH]u
14328 .       nr #EN_FIGURE_SPACE \w'\0.'
14329 .       ie \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
14330 .          in \\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_FIGURE_SPACE]u
14331 .       \}
14332 .       el \{\
14333 .          ti \\n[#EN_NUMBER_L_LENGTH]u
14334 .       \}
14335 .       nr #EN_TEXT_INDENT \\n(.i
14336 .       QUAD \\*[$EN_QUAD]
14337 \!.     TRAP
14338 .       if \\n[#PRINT_STYLE]=1 \{\
14339 .          TYPEWRITER
14340 .       \}
14341 .       if \\n[#PRINT_STYLE]=2 \{\
14342 .          FAMILY  \\*[$EN_FAM]
14343 .          FT      \\*[$EN_FT]
14344 .          PT_SIZE \\n[#EN_PS]u
14345 .       \}
14346 .       if \\n[#REF]=1 \{\
14347 .          ie !\\n[#EN_MARKER_STYLE]=2 \{\
14348 .             if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
14349 .                in \\*[$REF_EN_INDENT]
14350 .                ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u)
14351 .             \}
14352 .             if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
14353 \#.                in \\*[$REF_EN_INDENT]
14354 \#.                ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u-\\n[#EN_FIGURE_SPACE]u)
14355 \#.                in \\*[$REF_EN_INDENT]+\\n[#EN_NUMBER_L_LENGTH]u
14356 \#.                ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_FIGURE_SPACE]u)
14357 .                in +\\*[$REF_EN_INDENT]
14358 .                ti -\\*[$REF_EN_INDENT]
14359 .             \}
14360 .          \}
14361 .          el \{\
14362 .             if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
14363 .                in \\*[$REF_EN_INDENT]
14364 .                ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u)
14365 .             \}
14366 .          \}
14367 .       \}
14368 .    \}
14369 .    el \{\
14370 .       sp
14371 .       in 0
14372 .       if \\n[#EN_MARKER_STYLE]=2 \{\
14373 \!.        in 0
14374 .       \}
14375 .       di
14376 .\" Restore sentence spacing
14377 .       if \\n[#PRINT_STYLE]=2 \{\
14378 .          if d$RESTORE_SS_VAR \{ .SS \\*[$RESTORE_SS_VAR] \}
14379 .          rm $RESTORE_SS_VAR
14380 .       \}
14381 .       ev
14382 .       nr #PP_STYLE \\n[#PP_STYLE_PREV]
14383 .       if !\\n[#INDENT_FIRSTS] \{ .INDENT_FIRST_PARAS OFF \}
14384 .       rr #INDENT_FIRSTS
14385 .       rr #ENDNOTE
14386 .       if \\n[#PRINT_STYLE]=1 \{\
14387 .          if \\n[#UNDERLINE_WAS_ON] \{\
14388 .             rr #UNDERLINE_WAS_ON
14389 .             UNDERLINE
14390 .          \}
14391 .       \}
14392 .       if \\n[#SLANT_WAS_ON] \{\
14393 .          rr #SLANT_WAS_ON
14394 \*[SLANT]\c
14395 .       \}
14396 .    \}
14397 .    if \\n[#NUM_ARGS]=2 \{\
14398 .       if '\\$2'BREAK' \{ .BR \}
14399 .       if '\\$2'BR' \{ .BR \}
14400 .    \}
14401 .END
14404 \# ENDNOTES
14405 \# --------
14406 \# *Arguments:
14407 \#   none
14408 \# *Function:
14409 \#   Sets new document leading from #EN_LEAD, breaks to a new page,
14410 \#   sets up an endnotes page based on registers and strings associated
14411 \#   with endnotes, then outputs diversion END_NOTES.
14413 .MAC ENDNOTES END
14414 .    nr #ENDNOTES 1
14415 .    nr #EN_FIRST_PAGE 1
14416 .    nr #HEADER_STATE \\n[#HEADERS_ON]
14417 .    ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
14418 .    if \\n[#LINENUMBERS]=1 \{\
14419 .       NUMBER_LINES OFF
14420 .       nr #LINENUMBERS 2
14421 .    \}
14422 .    if \\n[#HEADERS_ON]=1 \{\
14423 .       if !\\n[#EN_ALLOWS_HEADERS_ALL] \{ .HEADERS OFF \}
14424 .    \}
14425 .    if \\n[#HEADER_STATE]=1 \{\
14426 .       ie \\n[#EN_HDRFTR_CENTER]=1 \{ . \}
14427 .       el \{ .rm $HDRFTR_CENTER  \}
14428 .    \}
14429 .    ie !\\n[#SUSPEND_PAGINATION] \{\
14430 .       if \\n[#PAGINATE]=1 \{\
14431 .          if \\n[#PAGE_NUM_V_POS]=1 \{\
14432 .             PAGENUM_STYLE \\*[$EN_PN_STYLE]
14433 .             if \\n[#EN_FIRST_PN] \{ .PAGENUMBER \\n[#EN_FIRST_PN]-1 \}
14434 .             if r#EN_NO_FIRST_PN \{ .nr #PAGINATE 0 \}
14435 .          \}
14436 .       \}
14437 .    \}
14438 .    el \{\
14439 .       ie \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 1 \}
14440 .       el \{ .nr #PAGINATE 0 \}
14441 .    \}
14442 .    if \\n[#FOOTERS_ON]=1 \{\
14443 .       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
14444 .    \}
14445 .    NEWPAGE
14446 .    if \\n[#FOOTERS_ON]=1 \{\
14447 .       ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
14448 .       rm $HDRFTR_CENTER_OLD
14449 .       rm $HDRFTR_CENTER_NEW
14450 .    \}
14451 .    ie !\\n[#SUSPEND_PAGINATION] \{\
14452 .       if \\n[#PAGE_NUM_V_POS]=1 \{\
14453 .          if r#EN_NO_FIRST_PN \{\
14454 .             if \\n[#PAGINATION_STATE]=1 \{\
14455 .                nr #PAGINATE 1
14456 .             \}
14457 .          \}
14458 .       \}
14459 .    \}
14460 .    el \{\
14461 .       if \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 0 \}
14462 .    \}
14463 .    rr #PAGINATION_STATE
14464 .    PAGENUM_STYLE \\*[$EN_PN_STYLE]
14465 .    if \\n[#EN_FIRST_PN] \{ .PAGENUMBER \\n[#EN_FIRST_PN] \}
14466 .    if \\n[#HEADER_STATE]=1 \{\
14467 .       if \\n[#EN_ALLOWS_HEADERS] \{ .HEADERS \}
14468 .    \}
14469 .\" Collect endnotes title string for TOC
14470 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
14471 .    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
14472 .    ds $TOC_TITLE_ITEM \\*[$EN_STRING]\\|
14473 .    ev TOC_EV
14474 .    da TOC_ENTRIES
14475 .    if \\n[#PRINT_STYLE]=1 \{\
14476 .       TYPEWRITER
14477 .    \}
14478 .    if \\n[#PRINT_STYLE]=2 \{\
14479 \!.     FAMILY  \\*[$TOC_TITLE_FAM]
14480 \!.     FT      \\*[$TOC_TITLE_FT]
14481 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
14482 .    \}
14483 \!.  TRAP OFF
14484 \!.  PAD_MARKER ^
14485 .    ie \\n[#PRINT_STYLE]=1 \{\
14486 \!.     PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]"
14487 .    \}
14488 .    el \{\
14489 \!.     PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]"
14490 .    \}
14491 \!.  PAD_MARKER #
14492 \!.  EOL
14493 \!.  ST 100 L
14494 \!.  ST 101 R
14495 .    if \\n[#PRINT_STYLE]=2 \{\
14496 \!.     FAMILY  \\*[$TOC_PN_FAM]
14497 \!.     FT      \\*[$TOC_PN_FT]
14498 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
14499 .    \}
14500 \!.  TAB 100
14501 \!.  PRINT \\*[LEADER]
14502 \!.  TN
14503 \!.  TRAP
14504 \!.  PRINT \\n[#TOC_ENTRY_PN]
14505 \!.  TQ
14506 .    di
14507 .    ev
14508 .\" End collection of endnotes title string for TOC
14509 .\" Process endnotes
14510 .    if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#EN_LEAD]u \}
14511 .    if \\n[#PRINT_STYLE]=2 \{\
14512 .       if \\n[#EN_NO_COLS] \{\
14513 .          if \\n[#COLUMNS] \{ .nr #COLUMNS_WERE_ON 1 \}
14514 .          nr #COLUMNS 0
14515 .       \}
14516 .       nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
14517 .       ie \\n[#ADJ_EN_LEAD] \{\
14518 .          nr #DOC_LEAD \\n[#EN_LEAD]
14519 .       \}
14520 .       el \{ .DOC_LEAD \\n[#EN_LEAD]u \}
14521 .    \}
14522 .    PRINT \&
14523 .    ie r#EN_STRING_ADVANCE \{ .sp |\\n[#EN_STRING_ADVANCE]u \}
14524 .    el \{ .sp |\\n[#T_MARGIN]u \}
14525 .    mk ec
14526 .    if \\n[#SLANT_ON] \{\
14527 \*[SLANTX]\c
14528 .    \}
14529 .    ev ENDNOTES
14530 .    if !'\\*[$EN_STRING]'' \{\
14531 .       if \\n[#PRINT_STYLE]=1 \{\
14532 .          TYPEWRITER
14533 .          vs \\n[#EN_LEAD]u
14534 .       \}
14535 .       if \\n[#PRINT_STYLE]=2 \{\
14536 .          LL \\n[#DOC_L_LENGTH]u
14537 .          ta \\n(.lu
14538 .          if \\n[#COLUMNS] \{\
14539 .             ie \\n[#EN_NO_COLS] \{ .LL \\n[#DOC_L_LENGTH]u \}
14540 .             el \{ .LL \\n[#COL_L_LENGTH]u \}
14541 .             ta \\n(.lu
14542 .          \}
14543 .          FAMILY  \\*[$EN_STRING_FAM]
14544 .          FT      \\*[$EN_STRING_FT]
14545 .          PT_SIZE \\n[#EN_PS]u\\*[$EN_STRING_SIZE_CHANGE]
14546 .          vs      \\n[#EN_LEAD]u
14547 .       \}
14548 .       if '\\*[$EN_STRING_QUAD]'L'      \{ .LEFT   \}
14549 .       if '\\*[$EN_STRING_QUAD]'LEFT'   \{ .LEFT   \}
14550 .       if '\\*[$EN_STRING_QUAD]'C'      \{ .CENTER \}
14551 .       if '\\*[$EN_STRING_QUAD]'CENTER' \{ .CENTER \}
14552 .       if '\\*[$EN_STRING_QUAD]'CENTRE' \{ .CENTER \}
14553 .       if '\\*[$EN_STRING_QUAD]'R'      \{ .RIGHT  \}
14554 .       if '\\*[$EN_STRING_QUAD]'RIGHT'  \{ .RIGHT  \}
14555 .       EOL
14556 .       if \\n[#EN_STRING_CAPS] \{ .CAPS \}
14557 .       ie \\n[#EN_STRING_UNDERLINE] \{\
14558 .          nr #FROM_EN_STRING 1
14559 .          ie \\n[#EN_STRING_UNDERLINE]=2 \{\
14560 .             UNDERSCORE2 \\*[$EN_UNDERLINE_GAP] \\*[$EN_RULE_GAP] "\\*[$EN_STRING]"
14561 .          \}
14562 .          el \{\
14563 .             UNDERSCORE "\\*[$EN_STRING]"
14564 .          \}
14565 .          rr #FROM_EN_STRING
14566 .       \}
14567 .       el \{\
14568 .          PRINT "\\*[$EN_STRING]
14569 .       \}
14570 .    \}
14571 .    CAPS OFF
14572 .    if \\n[#PRINT_STYLE]=1 \{\
14573 .       ie \\n[#SINGLE_SPACE]=1 \{\
14574 .          ALD \\n[#EN_LEAD]u*2u
14575 .       \}
14576 .       el \{\
14577 .          ie \\n[#EN_SINGLESPACE]=1 \{\
14578 .              ALD \\n[#EN_LEAD]u*2
14579 .          \}
14580 .          el \{\
14582 .          \}
14583 .       \}
14584 .    \}
14585 .    if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#EN_LEAD]u \}
14586 .    QUAD \\*[$EN_QUAD]
14587 .    nf
14588 .    END_NOTES
14589 .    br
14590 .    ev
14591 .    rm END_NOTES
14592 .    if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#DOC_LEAD]u \}
14593 .    if \\n[#PRINT_STYLE]=2 \{\
14594 .       ie \\n[#ADJ_EN_LEAD] \{\
14595 .          nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
14596 .       \}
14597 .       el \{ .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u \}
14598 .       rr #RESTORE_DOC_LEAD
14599 .    \}
14600 .    if \\n[#COLUMNS_WERE_ON] \{ .nr #COLUMNS 1 \}
14601 .    if \\n[#HEADER_STATE]=1 \{ .HEADERS \}
14602 .    if \\n[#LINENUMBERS]=2 \{\
14603 .       NUMBER_LINES RESUME
14604 .       nr #LINENUMBERS 1
14605 .    \}
14606 .    rr #ENDNOTES
14607 .END
14609 \# ====================================================================
14611 \# +++BIBLIOGRAPHY+++
14613 \# Mom treats bibliographies and endnotes very similarly.  The chief
14614 \# difference is that endnotes are collected and formatted inside a
14615 \# diversion, while bibliographies are built "by hand."  ENDNOTES sets
14616 \# up the endnotes page and outputs the formatted diversion.
14617 \# BIBLIOGRAPHY sets up the bibliography page, then awaits refer
14618 \# commands.
14619 \# 
14620 \# All of the bibliography control macros have their exact
14621 \# counterparts in the endnotes control macros.  It was tempting to do
14622 \# fancy stuff with aliases to avoid the repetition, but for reasons
14623 \# of my own sanity, and for the benefit of anyone wanting to play
14624 \# around with the bibliography control macros, I decided to keep them
14625 \# separate.
14626 \# 
14627 \# Because the bibliography control macros all have endnotes
14628 \# equivalents, refer to the appropriate, similar endnote macro for
14629 \# Arguments, Function and Notes.
14630 \# Bibliography control macros
14632 .MAC BIBLIOGRAPHY_PT_SIZE END
14633 .    nr #BIB_PS (p;\\$1)
14634 .END
14636 .MAC BIBLIOGRAPHY_LEAD END
14637 .    if !\\n[#OK_PROCESS_LEAD] \{\
14638 .       ds $BIB_LEAD \\$1
14639 .       if !'\\$2'' \{\
14640 .           ds $ADJUST_BIB_LEAD \\$2
14641 .       \}
14642 .       return
14643 .    \}
14644 .    rr #ADJ_BIB_LEAD
14645 .    nr #BIB_LEAD (p;\\$1)
14646 .    if '\\$2'ADJUST' \{\
14647 .       nr #ORIG_DOC_LEAD \\n[#DOC_LEAD]
14648 .       nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
14649 .       nr #ADJ_DOC_LEAD 1
14650 .       nr #ADJ_BIB_LEAD 1
14651 .       nr #NO_TRAP_RESET 1
14652 .       DOC_LEAD \\n[#BIB_LEAD]u ADJUST
14653 .       nr #BIB_LEAD \\n[#DOC_LEAD]
14654 .       DOC_LEAD \\n[#ORIG_DOC_LEAD]u
14655 .       rr #NO_TRAP_RESET
14656 .       nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
14657 .       rr #ORIG_DOC_LEAD
14658 .    \}
14659 .END
14661 .MAC BIBLIOGRAPHY_HDRFTR_CENTER END
14662 .    ie '\\$1'' \{ .nr #BIB_HDRFTR_CENTER 1 \}
14663 .    el         \{ .rr #BIB_HDRFTR_CENTER   \}
14664 .END
14666 .MAC BIBLIOGRAPHY_STRING END
14667 .    ds $BIB_STRING \\$1
14668 .END
14670 .MAC BIBLIOGRAPHY_STRING_CAPS END
14671 .   ie '\\$1'' \{ .nr #BIB_STRING_CAPS 1 \}
14672 .   el \{ .rr #BIB_STRING_CAPS \}
14673 .END
14675 .MAC BIBLIOGRAPHY_NO_COLUMNS END
14676 .    ie '\\$1'' \{ .nr #BIB_NO_COLS 1 \}
14677 .    el \{ .rr #BIB_NO_COLS \}
14678 .END
14680 .MAC BIBLIOGRAPHY_NO_FIRST_PAGENUM END
14681 .    ie '\\$1'' \{ .nr #BIB_NO_FIRST_PN 1 \}
14682 .    el \{ .rr #BIB_NO_FIRST_PN \}
14683 .END
14685 .MAC BIBLIOGRAPHY_ALLOWS_HEADERS END
14686 .    ie '\\$1'' \{ .nr #BIB_ALLOWS_HEADERS 1 \}
14687 .    el \{\
14688 .       ie '\\$1'ALL' \{\
14689 .          nr #BIB_ALLOWS_HEADERS 1
14690 .          nr #BIB_ALLOWS_HEADERS_ALL 1
14691 .       \}
14692 .       el \{\
14693 .          rr #BIB_ALLOWS_HEADERS
14694 .          rr #BIB_ALLOWS_HEADERS_ALL
14695 .       \}
14696 .    \}
14697 .END
14699 .MAC BIBLIOGRAPHY_PAGENUM_STYLE END
14700 .    ds $BIB_PN_STYLE \\$1
14701 .END
14703 .MAC BIBLIOGRAPHY_FIRST_PAGENUMBER END
14704 .    nr #BIB_FIRST_PN \\$1
14705 .END
14707 .MAC SINGLESPACE_BIBLIOGRAPHY END
14708 .    if \\n[#PRINT_STYLE]=1 \{\
14709 .       ie \\n[#SINGLE_SPACE] \{\
14710 .          nr #BIB_SINGLESPACE 1
14711 .          rr #IGNORE
14712 .          if \\n[#OK_PROCESS_LEAD] \{\
14713 .             BIBLIOGRAPHY_LEAD 12 ADJUST
14714 .             nr #IGNORE 1
14715 .          \}
14716 .       \}
14717 .       el \{\
14718 .          ie '\\$1'' \{\
14719 .             nr #BIB_SINGLESPACE 1
14720 .             rr #IGNORE
14721 .             if \\n[#OK_PROCESS_LEAD] \{\
14722 .                BIBLIOGRAPHY_LEAD 12 ADJUST
14723 .                nr #IGNORE 1
14724 .             \}
14725 .          \}
14726 .          el \{\
14727 .             rr #BIB_SINGLESPACE
14728 .             rr #IGNORE
14729 .             if \\n[#OK_PROCESS_LEAD] \{\
14730 .                BIBLIOGRAPHY_LEAD 24 ADJUST
14731 .                nr #IGNORE 1
14732 .             \}
14733 .          \}
14734 .       \}
14735 .    \}
14736 .END
14739 \# Style for outputting collected bibliographic references
14740 \# -------------------------------------------------------
14741 \# *Argument:
14742 \#   LIST | PLAIN [ <list separator> ] [ <list prefix> ]
14743 \# *Function:
14744 \#   Sets #BIB_LIST to 1 for numbered list style, 0 for plain output
14745 \# *Notes:
14746 \#   Technically, user is supposed to enter PLAIN if s/he wants an
14747 \#   unumbered bibliography, but the el clause says "any arg but
14748 \#   LIST means unumbered."  Effectively, any arg but LIST produces
14749 \#   a "plain" bibliographic list.
14751 \#   The 2nd and 3rd args have the same options as the 2nd arg to LIST.
14753 .MAC BIBLIOGRAPHY_TYPE END
14754 .    ie '\\$1'LIST' \{\
14755 .       nr #BIB_LIST 1
14756 .       ie '\\$2'' \{\
14757 .          if '\\*[$BIB_LIST_SEPARATOR]'' .ds $BIB_LIST_SEPARATOR .
14758 .       \}
14759 .       el .ds $BIB_LIST_SEPARATOR \\$2
14760 .       ie '\\$3'' .ds $BIB_LIST_PREFIX
14761 .       el .ds $BIB_LIST_PREFIX \\$3
14762 .    \}
14763 .    el \{ .nr #BIB_LIST 0 \}
14764 .END
14766 \# Spacing between items in bibliographies
14767 \# ---------------------------------------
14768 \# *Argument:
14769 \#   <amount of space>
14770 \# *Function:
14771 \#   Gets value for #BIB_SPACE in units.
14772 \# *Notes:
14773 \#   Requires a unit of measure.
14775 .MAC BIBLIOGRAPHY_SPACING END
14776 .    ds $BIB_SPACE \\$1
14777 .    if \\n[#BIB_LEAD]=0 \{\
14778 .       nr #DEFER_BIB_SPACING 1
14779 .       return
14780 .    \}
14781 .    ds $EVAL_BIB_SPACE \\*[$BIB_SPACE]
14782 .    substring $EVAL_BIB_SPACE -1
14783 .    ie '\\*[$EVAL_BIB_SPACE]'v' \{\
14784 .       substring $BIB_SPACE 0 0
14785 .       nr #BIB_SPACE \\n[#BIB_LEAD]*\\*[$BIB_SPACE]
14786 .    \}
14787 .    el \{\
14788 .       nr #BIB_SPACE (\\$1)
14789 .    \}
14790 .END
14792 \# Set up bibliography page
14793 \# ------------------------
14794 \# *Function:
14795 \#   Sets up a new page, with title, ready to accept the output
14796 \#   of refer's $LIST$ or .R1 bibliography .R2
14797 \# *Notes:
14798 \#   Bibliography pages are set up almost identically to endnotes pages.
14800 .MAC BIBLIOGRAPHY END
14801 .    nr #BIBLIOGRAPHY 1
14802 .    nr #BIB_FIRST_PAGE 1
14803 .    nr #HEADER_STATE \\n[#HEADERS_ON]
14804 .    ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
14805 .    if \\n[#LINENUMBERS]=1 \{\
14806 .       NUMBER_LINES OFF
14807 .       nr #LINENUMBERS 2
14808 .    \}
14809 .    if \\n[#HEADERS_ON]=1 \{\
14810 .       if !\\n[#BIB_ALLOWS_HEADERS_ALL] \{ .HEADERS OFF \}
14811 .    \}
14812 .    if \\n[#HEADER_STATE]=1 \{\
14813 .       ie \\n[#BIB_HDRFTR_CENTER]=1 \{ . \}
14814 .       el \{ .rm $HDRFTR_CENTER  \}
14815 .    \}
14816 .    ie !\\n[#SUSPEND_PAGINATION] \{\
14817 .       if \\n[#PAGINATE]=1 \{\
14818 .          if \\n[#PAGE_NUM_V_POS]=1 \{\
14819 .             PAGENUM_STYLE \\*[$BIB_PN_STYLE]
14820 .             if \\n[#BIB_FIRST_PN] \{ .PAGENUMBER \\n[#BIB_FIRST_PN]-1 \}
14821 .             if r#BIB_NO_FIRST_PN \{ .nr #PAGINATE 0 \}
14822 .          \}
14823 .       \}
14824 .    \}
14825 .    el \{\
14826 .       ie \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 1 \}
14827 .       el \{ .nr #PAGINATE 0 \}
14828 .    \}
14829 .    if \\n[#FOOTERS_ON]=1 \{\
14830 .       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
14831 .    \}
14832 .    NEWPAGE
14833 .    if \\n[#FOOTERS_ON]=1 \{\
14834 .       ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
14835 .       rm $HDRFTR_CENTER_OLD
14836 .       rm $HDRFTR_CENTER_NEW
14837 .    \}
14838 .    ie !\\n[#SUSPEND_PAGINATION] \{\
14839 .       if \\n[#PAGE_NUM_V_POS]=1 \{\
14840 .          if r#BIB_NO_FIRST_PN \{\
14841 .             if \\n[#PAGINATION_STATE]=1 \{\
14842 .                nr #PAGINATE 1
14843 .             \}
14844 .          \}
14845 .       \}
14846 .    \}
14847 .    el \{\
14848 .       if \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 0 \}
14849 .    \}
14850 .    rr #PAGINATION_STATE
14851 .    PAGENUM_STYLE \\*[$BIB_PN_STYLE]
14852 .    if \\n[#BIB_FIRST_PN] \{ .PAGENUMBER \\n[#BIB_FIRST_PN] \}
14853 .    if \\n[#HEADER_STATE]=1 \{\
14854 .       if \\n[#BIB_ALLOWS_HEADERS] \{ .HEADERS \}
14855 .    \}
14856 .\" Collect bibliography title string for TOC
14857 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
14858 .    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
14859 .    ds $TOC_TITLE_ITEM \\*[$BIB_STRING]\\|
14860 .    ev TOC_EV
14861 .    da TOC_ENTRIES
14862 .    if \\n[#PRINT_STYLE]=1 \{\
14863 .       TYPEWRITER
14864 .    \}
14865 .    if \\n[#PRINT_STYLE]=2 \{\
14866 \!.     FAMILY  \\*[$TOC_TITLE_FAM]
14867 \!.     FT      \\*[$TOC_TITLE_FT]
14868 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
14869 .    \}
14870 \!.  TRAP OFF
14871 .    ie \\n[#PRINT_STYLE]=1 \{\
14872 \!.     PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]"
14873 .    \}
14874 .    el \{\
14875 \!.     PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]"
14876 .    \}
14877 \!.  EOL
14878 \!.  ST 100 L
14879 \!.  ST 101 R
14880 .    if \\n[#PRINT_STYLE]=2 \{\
14881 \!.     FAMILY  \\*[$TOC_PN_FAM]
14882 \!.     FT      \\*[$TOC_PN_FT]
14883 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
14884 .    \}
14885 \!.  TAB 100
14886 \!.  PRINT \\*[LEADER]
14887 \!.  TN
14888 \!.  TRAP
14889 \!.  PRINT \\n[#TOC_ENTRY_PN]
14890 \!.  TQ
14891 .    di
14892 .    ev
14893 .\" End collection of bibliography title string for TOC
14894 .\" Process bibliography
14895 .    if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#BIB_LEAD]u \}
14896 .    if \\n[#PRINT_STYLE]=2 \{\
14897 .       if \\n[#BIB_NO_COLS] \{\
14898 .          if \\n[#COLUMNS] \{ .nr #COLUMNS_WERE_ON 1 \}
14899 .          nr #COLUMNS 0
14900 .       \}
14901 .       nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
14902 .       ie \\n[#ADJ_BIB_LEAD] \{\
14903 .          nr #DOC_LEAD \\n[#BIB_LEAD]
14904 .       \}
14905 .       el \{ .DOC_LEAD \\n[#BIB_LEAD]u \}
14906 .    \}
14907 .    PRINT \&
14908 .    ie r#BIB_TITLE_SPACE \{ .sp |\\n[#BIB_TITLE_SPACE]u \}
14909 .    el \{ .sp |\\n[#T_MARGIN]u \}
14910 .    mk ec
14911 .    if \\n[#SLANT_ON] \{\
14912 \*[SLANTX]\c
14913 .    \}
14914 .    if !'\\*[$BIB_STRING]'' \{\
14915 .       if \\n[#PRINT_STYLE]=1 \{\
14916 .          TYPEWRITER
14917 .          vs \\n[#BIB_LEAD]u
14918 .       \}
14919 .       if \\n[#PRINT_STYLE]=2 \{\
14920 .          LL \\n[#DOC_L_LENGTH]u
14921 .          ta \\n(.lu
14922 .          if \\n[#COLUMNS] \{\
14923 .             ie \\n[#BIB_NO_COLS] \{ .LL \\n[#DOC_L_LENGTH]u \}
14924 .             el \{ .LL \\n[#COL_L_LENGTH]u \}
14925 .             ta \\n(.lu
14926 .          \}
14927 .          FAMILY  \\*[$BIB_STRING_FAM]
14928 .          FT      \\*[$BIB_STRING_FT]
14929 .          PT_SIZE \\n[#BIB_PS]u\\*[$BIB_STRING_SIZE_CHANGE]
14930 .          vs      \\n[#BIB_LEAD]u
14931 .       \}
14932 .       if '\\*[$BIB_STRING_QUAD]'L'      \{ .LEFT   \}
14933 .       if '\\*[$BIB_STRING_QUAD]'LEFT'   \{ .LEFT   \}
14934 .       if '\\*[$BIB_STRING_QUAD]'C'      \{ .CENTER \}
14935 .       if '\\*[$BIB_STRING_QUAD]'CENTER' \{ .CENTER \}
14936 .       if '\\*[$BIB_STRING_QUAD]'CENTRE' \{ .CENTER \}
14937 .       if '\\*[$BIB_STRING_QUAD]'R'      \{ .RIGHT  \}
14938 .       if '\\*[$BIB_STRING_QUAD]'RIGHT'  \{ .RIGHT  \}
14939 .       EOL
14940 .       if \\n[#BIB_STRING_CAPS] \{ .CAPS \}
14941 .       ie \\n[#BIB_STRING_UNDERLINE] \{\
14942 .          nr #FROM_BIB_STRING 1
14943 .          ie \\n[#BIB_STRING_UNDERLINE]=2 \{\
14944 .             UNDERSCORE2 "\\*[$BIB_STRING]"
14945 .          \}
14946 .          el \{\
14947 .             UNDERSCORE "\\*[$BIB_STRING]"
14948 .          \}
14949 .          rr #FROM_BIB_STRING
14950 .       \}
14951 .       el \{\
14952 .          PRINT "\\*[$BIB_STRING]"
14953 .       \}
14954 .    \}
14955 .    CAPS OFF
14956 .    FAMILY \\*[$BIB_FAMILY]
14957 .    FT \\*[$BIB_FT]
14958 .    PT_SIZE -\\*[$BIB_STRING_SIZE_CHANGE]
14959 .    if \\n[#PRINT_STYLE]=1 \{\
14960 .       ie \\n[#SINGLE_SPACE]=1 \{\
14961 .          ALD \\n[#BIB_LEAD]*3u
14962 .       \}
14963 .       el \{\
14964 .          ie \\n[#BIB_SINGLESPACE]=1 \{\
14965 .             ALD \\n[#BIB_LEAD]u*3u
14966 .          \}
14967 .          el \{\
14968 .             ALD \\n[#BIB_LEAD]u
14969 .          \}
14970 .       \}
14971 .    \}
14972 .    if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#BIB_LEAD]u*2u \}
14973 .    QUAD \\*[$BIB_QUAD]
14974 .    if \\n[#PRINT_STYLE]=1 \{\
14975 .       ie \\n[#SINGLE_SPACE]=1 \{\
14976 .          vs \\n[#BIB_LEAD]u
14977 .       \}
14978 .       el \{\
14979 .          ie \\n[#BIB_SINGLESPACE]=1 \{\
14980 .             vs \\n[#BIB_LEAD]u
14981 .          \}
14982 .          el \{\
14983 .             vs \\n[#BIB_LEAD]u
14984 .          \}
14985 .       \}
14986 .    \}
14987 .    if \\n[#PRINT_STYLE]=2 \{\
14988 .       ie \\n[#ADJ_BIB_LEAD] \{\
14989 .          nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
14990 .       \}
14991 .       el \{ .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u \}
14992 .       rr #RESTORE_DOC_LEAD
14993 .    \}
14994 .    if \\n[#COLUMNS_WERE_ON] \{ .nr #COLUMNS 1 \}
14995 .    if \\n[#HEADER_STATE]=1 \{ .HEADERS \}
14996 .    rr #BIBLIOGRAPHY
14997 .    if \\n[#LINENUMBERS]=2 \{\
14998 .       NUMBER_LINES RESUME
14999 .       nr #LINENUMBERS 1
15000 .    \}
15001 .END
15003 \# ====================================================================
15005 \# +++TABLE OF CONTENTS+++
15007 \# Strings to allocate space for leaders and entry page numbers
15009 .ds $TOC_PN \\*[ST100]\\F[\\*[$TOC_PN_FAM]]\\f[\\*[$TOC_PN_FT]]\\s[\\n[#TOC_PS]u]^\\*[ST100X]\\*[ST101]\\s[\\*[$TOC_PN_SIZE_CHANGE]]\\|\\h'\\w'0'u*\\n[#TOC_PN_PADDING]u'\*[ST101X]
15010 .ds $TOC_PN_TYPEWRITE \\*[ST100]^\\*[ST100X]\\*[ST101]\\|\\h'\\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST101X]
15012 \# TOC ENTRIES PAGE NUMBERS PADDING
15013 \# --------------------------------
15014 \# *Argument:
15015 \#   <number of placeholders for toc entries page numbers>
15016 \# *Function:
15017 \#   Creates or modifies register #TOC_PN_PADDING.
15018 \# *Notes:
15019 \#   "Placeholders" is the maximum number of digits in a page
15020 \#   number numeral.
15022 \#   Default is 3.
15024 .MAC TOC_PADDING END
15025 .    nr #TOC_PN_PADDING \\$1
15026 .END
15029 \# PAGINATE TOC
15030 \# ------------
15031 \# *Argument:
15032 \#   <none> | <anything>
15033 \# *Function:
15034 \#   Creates or removes register #PAGINATE_TOC.
15035 \# *Notes:
15036 \#   Default is to paginate toc.
15038 .MAC PAGINATE_TOC END
15039 .    ie '\\$1'' \{ .nr #PAGINATE_TOC 1 \}
15040 .    el \{ .nr #PAGINATE_TOC 0 \}
15041 .END
15044 \# TOC POINT SIZE
15045 \# --------------
15046 \# *Argument:
15047 \#   <base point size for toc pages>
15048 \# *Function:
15049 \#   Creates or modifies register #TOC_PS.
15050 \# *Notes:
15051 \#   This size control macro differs from other size control macros
15052 \#   in that it sets an absolute point size, not a relative one.
15053 \#   See notes for ENDNOTE_PT_SIZE for explanation.  No unit of
15054 \#   measure required.
15056 \#   No unit of measure required (points assumed).  Default is 12.5
15057 \#   for TYPESET.
15059 .MAC TOC_PT_SIZE END
15060 .    nr #TOC_PS (p;\\$1)
15061 .END
15064 \# TOC LEADING
15065 \# -----------
15066 \# *Argument:
15067 \#   <leading for toc pages> [ADJUST]
15068 \# *Function:
15069 \#   Creates or modifies register #TOC_LEAD. If optional ADJUST
15070 \#   given, adjusts lead to fill page.  If #OK_PROCESS_LEAD doesn't
15071 \#   exist, stores arguments for when it's okay to run the macro.
15072 \# *Notes:
15073 \#   No unit of measure required (points assumed).
15075 \#   Default is same as DOC_LEAD.
15077 .MAC TOC_LEAD END
15078 .    if !\\n[#OK_PROCESS_LEAD] \{\
15079 .       ds $TOC_LEAD \\$1
15080 .       if !'\\$2'' \{\
15081 .           ds $ADJUST_TOC_LEAD \\$2
15082 .       \}
15083 .       return
15084 .    \}
15085 .    rr #ADJ_TOC_LEAD
15086 .    nr #TOC_LEAD (p;\\$1)
15087 .    if '\\$2'ADJUST' \{\
15088 .       nr #ORIG_DOC_LEAD \\n[#DOC_LEAD]
15089 .       nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
15090 .       nr #ADJ_DOC_LEAD 1
15091 .       nr #ADJ_TOC_LEAD 1
15092 .       nr #NO_TRAP_RESET 1
15093 .       DOC_LEAD \\n[#TOC_LEAD]u ADJUST
15094 .       nr #TOC_LEAD \\n[#DOC_LEAD]
15095 .       DOC_LEAD \\n[#ORIG_DOC_LEAD]u
15096 .       rr #NO_TRAP_RESET
15097 .       nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
15098 .       rr #ORIG_DOC_LEAD
15099 .    \}
15100 .END
15103 \# TOC PAGES PAGE-NUMBERING STYLE
15104 \# ------------------------------
15105 \# *Argument:
15106 \#   DIGIT | ROMAN | roman | ALPHA | alpha
15107 \# *Function:
15108 \#   Creates or modifies string $TOC_PN_STYLE
15109 \# *Notes:
15110 \#   Page numbering style for page numbers that appear in the
15111 \#   headers/footers of toc pages.  See notes for PAGENUM_STYLE.
15113 \#   Default is roman.
15115 .MAC TOC_PAGENUM_STYLE END
15116 .    ds $TOC_PN_STYLE \\$1
15117 .END
15120 \# TOC RECTO_VERSO SWITCH
15121 \# ----------------------
15122 \# *Argument:
15123 \#   <none> | <anything>
15124 \# *Function:
15125 \#   Creates or removes register #TOC_RV_SWITCH
15126 \# *Notes:
15127 \#   Allows switching of L/R margins if a doc is recto/verso and
15128 \#   the first toc page happens to fall the wrong way
15130 .MAC TOC_RV_SWITCH END
15131 .    ie '\\$1'' \{ .nr #TOC_RV_SWITCH 1 \}
15132 .    el \{ .rr #TOC_RV_SWITCH \}
15133 .END
15135 \# - for TOC "doc header" (i.e. "Contents")
15137 \# TOC HEADER STRING
15138 \# -----------------
15139 \# *Argument:
15140 \#   <string for "doc header" of first toc page>
15141 \# *Function:
15142 \#   Creates or modifies string $TOC_HEADER_STRING
15143 \# *Notes:
15144 \#   Default is "Contents".
15146 .MAC TOC_HEADER_STRING END
15147 .    ds $TOC_HEADER_STRING \\$1
15148 .END
15150 \# - for TOC entries page number numerals
15152 \# Control macros for toc doc titles, heads, subheads and paraheads
15153 \# ----------------------------------------------------------------
15155 \# All these control macros behave the same way, setting the family,
15156 \# font, point size and indent from the left margin of the different
15157 \# kinds of entries that can appear in the toc.  The way they
15158 \# operate is identical to all other _FAMILY, _FONT and _SIZE
15159 \# control macros.  _INDENT takes an absolute value.
15160 \# TOC_APPENDS_AUTHORS is unique in this section.
15162 \# - for title entries
15164 .MAC TOC_TITLE_INDENT END
15165 .    nr #TOC_TITLE_INDENT (\\$1)
15166 .END
15169 .MAC TOC_TITLE_ENTRY END
15170 .    nr #USER_SET_TITLE_ITEM 1
15171 .    ds $USER_SET_TITLE_ITEM \\$1
15172 .END
15175 \# APPEND AUTHOR(S) TO TOC DOC TITLE ENTRIES
15176 \# -----------------------------------------
15177 \# *Argument:
15178 \#   <none> | <name(s) of author(s) as they should appear in toc doc title entries>
15179 \# *Function:
15180 \#   Creates register #TOC_AUTHORS (to tell TOC to append authors
15181 \#   to toc doc title entries).  Optionally creates string
15182 \#   $TOC_AUTHORS.
15183 \# *Notes:
15184 \#   Normally, TOC does not append the author(s) to a toc doc title
15185 \#   entry.  This special macro instructs TOC to do so.
15187 \#   If user has multiple authors for each doc when collating,
15188 \#   TOC_APPENDS_AUTHOR "<string>" must be inserted somewhere between
15189 \#   COLLATE and START in each doc.  Otherwise, mom prints only the
15190 \#   first author given to AUTHOR.
15192 .MAC TOC_APPENDS_AUTHOR END
15193 .    nr #TOC_AUTHORS 1
15194 .    if !'\\$1'' \{\
15195 .       ds $TOC_AUTHORS \\$1
15196 .    \}
15197 .END
15199 \# - for head entries
15201 .MAC TOC_HEAD_INDENT END
15202 .    nr #TOC_HEAD_INDENT (\\$1)
15203 .END
15205 \# - for subhead entries
15207 .MAC TOC_SUBHEAD_INDENT END
15208 .    nr #TOC_SH_INDENT (\\$1)
15209 .END
15211 \# - for parahead entries
15213 .MAC TOC_PARAHEAD_INDENT END
15214 .    nr #TOC_PH_INDENT (\\$1)
15215 .END
15218 .MAC TOC END
15219 .    if \\n[#LINENUMBERS]=1 \{\
15220 .       NUMBER_LINES OFF
15221 .       nr #LINENUMBERS 2
15222 .    \}
15223 .    if !r#PAGINATE_TOC \{ .PAGINATE_TOC \}
15224 .    nr #TOC_FIRST_PAGE 1
15225 .    if \\n[#FINIS] \{\
15226 .       if \\n[#FOOTERS_WERE_ON] \{\
15227 .          FOOTERS \" Have to turn FOOTERS on for next bit to work, so we can't skip this step
15228 .       \}
15229 .    \}
15230 .    if \\n[#FOOTERS_ON]=1 \{\
15231 .       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
15232 .       ie \\n[#PAGINATE_TOC]=1 \{ .PAGINATE \}
15233 .       el \{ .PAGINATION OFF \}
15234 .    \}
15235 .    if \\n[#FOOTERS_WERE_ON] \{ .FOOTERS OFF \} \" But have to turn FOOTERS off again so they don't print when FINIS was called
15236 .    COLLATE
15237 .    if \\n[#FINIS] \{\
15238 .       if \\n[#FOOTERS_WERE_ON] \{ .FOOTERS \} \" Finally, turn footers on if they were on
15239 .       rr #FOOTERS_WERE_ON
15240 .       if \\n[#PAGINATION_WAS_ON] \{\
15241 .          nr #PAGINATE 1
15242 .          rr #PAGINATION_WAS_ON
15243 .       \}
15244 .       rr #FINIS
15245 .    \}
15246 .    ie \\n[#PAGINATE_TOC]=1 \{ .PAGINATE \}
15247 .    el \{ .PAGINATION OFF \}
15248 .    if \\n[#FOOTERS_ON]=1 \{\
15249 .       ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
15250 .       rm $HDRFTR_CENTER_OLD
15251 .       rm $HDRFTR_CENTER_NEW
15252 .    \}
15253 .    rr #COLLATED_DOC
15254 .    DOCHEADER OFF
15255 .    PAGENUMBER 1
15256 .    if \\n[#PRINT_STYLE]=1 \{\
15257 .       rr #IGNORE
15258 .       DOC_LEAD 24 ADJUST
15259 .       nr #IGNORE 1
15260 .    \}
15261 .    if \\n[#LINENUMBERS]=2 \{ .nr #LINENUMBERS 3 \}
15262 .    START
15263 .    PP
15264 .    nr #COLUMNS 0
15265 .    if \\n[#PRINT_STYLE]=2 \{\
15266 .       ie r#ADJ_TOC_LEAD \{\
15267 .          nr #NO_TRAP_RESET 1
15268 .          DOC_LEAD \\n[#TOC_LEAD]u ADJUST
15269 .          rr #NO_TRAP_RESET
15270 .       \}
15271 .       el \{ .DOC_LEAD \\n[#TOC_LEAD]u \}
15272 .    \}
15273 .    sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
15274 .    if \\n[#SLANT_ON] \{\
15275 \*[SLANTX]\c
15276 .    \}
15277 .    DOC_LINE_LENGTH \\n[#DOC_L_LENGTH]u
15278 .    QUAD \\*[$TOC_HEADER_QUAD]
15279 .    PAGENUM_STYLE \\*[$TOC_PN_STYLE]
15280 .    if \\n[#PRINT_STYLE]=1 \{\
15281 .       TYPEWRITER
15282 .    \}
15283 .    if \\n[#PRINT_STYLE]=2 \{\
15284 .       FAMILY  \\*[$TOC_HEADER_FAM]
15285 .       FT      \\*[$TOC_HEADER_FT]
15286 .       PT_SIZE \\n[#TOC_PS]u\\*[$TOC_HEADER_SIZE_CHANGE]
15287 .    \}
15288 .    ie \\n[#PRINT_STYLE]=1 \{\
15289 .       CAPS
15290 .       UNDERLINE
15291 .       PRINT "\\*[$TOC_HEADER_STRING]"
15292 .       UNDERLINE OFF
15293 .       CAPS      OFF
15294 .    \}
15295 .    el \{\
15296 .       PRINT "\\*[$TOC_HEADER_STRING]"
15297 .    \}
15298 .    LEFT
15299 .    SP
15300 .\" In collated docs, this bit inserts the first doc's title
15301 .\" underneath the TOC header, before the TOC_ENTRIES diversion
15302 .\" gets output.
15303 .    nf
15304 .    if d$FIRST_DOC_TITLE \{\
15305 .    nr #RESTORE_TOC_PN_PADDING \\n[#TOC_PN_PADDING]
15306 .    TOC_PADDING \\n[#FIRST_DOC_TOC_PN_PADDING]
15307 .       if \\n[#PRINT_STYLE]=2 \{\
15308 .          FAMILY  \\*[$TOC_TITLE_FAM]
15309 .          FT      \\*[$TOC_TITLE_FT]
15310 .          PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
15311 .       \}
15312 .       PAD_MARKER ^
15313 .       ie \\n[#PRINT_STYLE]=1 \{\
15314 .          PAD "\\*[$FIRST_DOC_TITLE]\\*[$TOC_PN_TYPEWRITE]"
15315 .       \}
15316 .       el \{\
15317 .          PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$FIRST_DOC_TITLE]\\*[$TOC_PN]"
15318 .       \}
15319 .       PAD_MARKER #
15320 .       EOL
15321 .       ST 100 L
15322 .       ST 101 R
15323 .       if \\n[#PRINT_STYLE]=2 \{\
15324 .          FAMILY  \\*[$TOC_PN_FAM]
15325 .          FT      \\*[$TOC_PN_FT]
15326 .          PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
15327 .       \}
15328 .       TAB 100
15329 .       PRINT \\*[LEADER]
15330 .       TN
15331 .       PRINT \\n[#FIRST_DOC_TITLE_PN]
15332 .       TQ
15333 .    \}
15334 .    TOC_PADDING \\n[#RESTORE_TOC_PN_PADDING]
15335 .    nf
15336 .    TOC_ENTRIES
15337 .    br
15338 .    rr #TOC
15339 .    if \\n[#LINENUMBERS]=3 \{\
15340 .       NUMBER_LINES RESUME
15341 .       nr #LINENUMBERS 1
15342 .       nn 1
15343 .    \}
15344 .END
15346 \# ====================================================================
15348 \# +++COLUMNS+++
15350 \# COLUMNS
15351 \# -------
15352 \# *Arguments:
15353 \#   <number of columns>  <width of gutters>
15354 \# *Function:
15355 \#   Creates registers associated with setting docs in columns.
15356 \#   Calculates column line lengths and offsets
15357 \# *Notes:
15358 \#   COLUMNS, if used, s/b the last macro invoked before START.
15360 .MAC COLUMNS END
15361 .    if \\n[#IGNORE_COLUMNS]=1 \{ .return \}
15362 .    nr #COLUMNS 1
15363 .    nr #NUM_COLS \\$1
15364 .    nr #GUTTER (\\$2)
15365 .    nr #COL_L_LENGTH \\n[#L_LENGTH]-(\\n[#GUTTER]*(\\n[#NUM_COLS]-1))/\\n[#NUM_COLS]
15366 .    nr #COL_TOTAL 0 \\n[#COL_L_LENGTH]+\\n[#GUTTER]
15367 .    nr #COL_NUM 0 1
15368 .    while !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
15369 .       nr #COL_\\n+[#COL_NUM]_L_MARGIN \\n[#L_MARGIN]+\\n[#COL_TOTAL]
15370 .       nr #COL_TOTAL \\n+[#COL_TOTAL]
15372 .    if \\n[#NUM_COLS]=1 \{\
15373 .       if !\\n[#COLLATE]=1 \{ .MN_INIT \}
15374 .    \}
15375 .    rr #COL_TOTAL
15376 .    rr #COL_NUM
15377 .END
15380 \# NEXT COLUMN
15381 \# -----------
15382 \# *Arguments:
15383 \#   <none>
15384 \# *Function:
15385 \#   Breaks current column and moves to next column.
15386 \#   If current column is the last on the page, breaks
15387 \#   to a new page.
15389 .MAC COL_NEXT END
15390 .    if \\n[#COLUMNS] \{\
15391 .       nr #COL_NEXT 1
15392 .       ie '\\$0'COL_NEXT' \{ .br  \}
15393 .       el \{\
15394 .          brp
15395 .          RLD 1v
15396 .       \}
15397 .       ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
15398 .          bp
15399 .       \}
15400 .       el \{ .FOOTER \}
15401 .    \}
15402 .END
15404 \# ====================================================================
15406 \# +++LISTS+++
15408 \# LIST
15409 \# ----
15410 \# *Arguments:
15411 \#   [ BULLET | DASH | DIGIT | alpha | ALPHA | roman | ROMAN | USER ] [ <separator> | NONE ] [ <prefix> ] [ <anything> ]
15412 \# *Function:
15413 \#   Stores indent information in effect prior to invocation and
15414 \#   initializes a list with the supplied enumerator (and separator).
15415 \# *Notes:
15416 \#   Default enumerator is a bullet.
15418 \#   Enumerator *must* be supplied for every list that's to the
15419 \#   right of another list, every time, unless the default bullet is
15420 \#   desired.
15422 \#   <anything> moves back one list level intuitively, or exits lists
15423 \#   completely if the level in which it's invoked is the first.
15425 .MAC LIST END
15426 .    ds $1ST_LETTER \\$1
15427 .    substring $1ST_LETTER 0 0
15428 .    if '\\*[$1ST_LETTER]'r' .ds $1ST_LETTER R
15429 .    ie '\\*[$1ST_LETTER]'R' \{\
15430 .       ds $LAST_CHAR \\$1
15431 .       substring $LAST_CHAR -1
15432 .       if !\B'\\*[$LAST_CHAR]' \{\
15433 .          if !'\\$1'ROMAN' \{\
15434 .             LIST OFF
15435 .             return
15436 .          \}
15437 .          if !'\\$1'roman' \{\
15438 .             LIST OFF
15439 .             return
15440 .          \}
15441 .          tm1 "[mom]: You must append a number to the \\$1 argument to LIST at line \\n(.c.
15442 .          tm1 "       The number should be the total number of items in this list.
15443 .          tm1 "       See the documentation.
15444 .          ab Aborting LIST
15445 .       \}
15446 .       ds $ROMAN_WIDTH \\$1
15447 .          substring $ROMAN_WIDTH 1
15448 .       while !\B'\\*[$ROMAN_WIDTH]' \{\
15449 .          substring $ROMAN_WIDTH 1
15451 .       length #ROMAN_LENGTH \\*[$ROMAN_WIDTH]
15452 .       ds $LIST_ARG_1 \\$1
15453 .       substring $LIST_ARG_1 0 -(\\n[#ROMAN_LENGTH]+1)
15454 .    \}
15455 .    el \{\
15456 .       ds $LIST_ARG_1 \\$1
15457 .    \}
15458 .    if !r#DEPTH \{\
15459 .       nr #STORED_HL_INDENT \\n[#HL_INDENT]
15460 .       nr #STORED_T_INDENT  \\n[#T_INDENT]
15461 .       nr #CURRENT_L_LENGTH \\n(.l
15462 .       nr #DEPTH 0 1
15463 .       if \\n[#INDENT_ACTIVE]=1 \{\
15464 .          if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
15465 .             nr #STORED_L_INDENT \\n[#L_INDENT]
15466 .             nr #RESTORE_PREV_INDENT 1
15467 .          \}
15468 .          if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
15469 .             nr #STORED_BL_INDENT \\n[#BL_INDENT]
15470 .             nr #STORED_BR_INDENT \\n[#BR_INDENT]
15471 .             IBX
15472 .             nr #ORIG_L_LENGTH \\n(.l
15473 .             IB
15474 .             nr #RESTORE_PREV_INDENT 2
15475 .          \}
15476 .          if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
15477 .             nr #STORED_R_INDENT \\n[#R_INDENT]
15478 .             IRX
15479 .             nr #ORIG_L_LENGTH \\n(.l
15480 .             IR
15481 .             nr #RESTORE_PREV_INDENT 3
15482 .             if \\n[#INDENT_LEFT_ACTIVE]=1 \{ .nr #RESTORE_PREV_INDENT 4 \}
15483 .          \}
15484 .       \}
15485 .    \}
15486 .    if \\n[#NUM_ARGS]=0 \{\
15487 .       nr #ARGS_TO_LIST 1 \" So default behaves as if LIST BULLET
15488 .       ds $ENUMERATOR\\n+[#DEPTH] \(bu
15489 .       ds $ENUMERATOR_TYPE\\n[#DEPTH] other
15490 .       ds $SEPARATOR
15491 .    \}
15492 .    if \\n[#NUM_ARGS]>0 \{\
15493 .       rr #ARGS_TO_LIST \" Clear this before processing arg 1.
15494 .       if '\\*[$LIST_ARG_1]'DASH'   \{\
15495 .          nr #ARGS_TO_LIST 1
15496 .          ds $ENUMERATOR\\n+[#DEPTH] \(en
15497 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
15498 .          ds $SEPARATOR\\n[#DEPTH]
15499 .       \}
15500 .       if '\\*[$LIST_ARG_1]'BULLET' \{\
15501 .          nr #ARGS_TO_LIST 1
15502 .          ds $ENUMERATOR\\n+[#DEPTH] \(bu
15503 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
15504 .          ds $SEPARATOR\\n[#DEPTH]
15505 .       \}
15506 .       if '\\*[$LIST_ARG_1]'DIGIT'  \{\
15507 .          nr #ARGS_TO_LIST 1
15508 .          nr #ENUMERATOR\\n+[#DEPTH] 0 1
15509 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
15510 .          ds $SEPARATOR\\n[#DEPTH] .
15511 .          ds $PREFIX\\n[#DEPTH]
15512 .          if \\n[#NUM_ARGS]>=2 \{\
15513 .             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
15514 .             el             .ds $SEPARATOR\\n[#DEPTH] \\$2
15515 .             if \\n[#NUM_ARGS]=3 \{\
15516 .                ds $PREFIX\\n[#DEPTH] \\$3
15517 .             \}
15518 .          \}
15519 .       \}
15520 .       if '\\*[$LIST_ARG_1]'alpha'  \{\
15521 .          nr #ARGS_TO_LIST 1
15522 .          nr #ENUMERATOR\\n+[#DEPTH] 0 1
15523 .          af #ENUMERATOR\\n[#DEPTH] a
15524 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
15525 .          ds $SEPARATOR\\n[#DEPTH] )
15526 .          ds $PREFIX\\n[#DEPTH]
15527 .          if \\n[#NUM_ARGS]>=2 \{\
15528 .             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
15529 .             el             .ds $SEPARATOR\\n[#DEPTH] \\$2
15530 .             if \\n[#NUM_ARGS]=3 \{\
15531 .                ds $PREFIX\\n[#DEPTH] \\$3
15532 .             \}
15533 .          \}
15534 .       \}
15535 .       if '\\*[$LIST_ARG_1]'ALPHA'  \{\
15536 .          nr #ARGS_TO_LIST 1
15537 .          nr #ENUMERATOR\\n+[#DEPTH] 0 1
15538 .          af #ENUMERATOR\\n[#DEPTH] A
15539 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
15540 .          ds $SEPARATOR\\n[#DEPTH] )
15541 .          ds $PREFIX\\n[#DEPTH]
15542 .          if \\n[#NUM_ARGS]>=2 \{\
15543 .             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
15544 .             el             .ds $SEPARATOR\\n[#DEPTH] \\$2
15545 .             if \\n[#NUM_ARGS]=3 \{\
15546 .                ds $PREFIX\\n[#DEPTH] \\$3
15547 .             \}
15548 .          \}
15549 .       \}
15550 .       if '\\*[$1ST_LETTER]'R'  \{\
15551 .          nr #ARGS_TO_LIST 1
15552 .          nr #ENUMERATOR\\n+[#DEPTH] 0 1
15553 .          if '\\*[$LIST_ARG_1]'roman' \{\
15554 .             af #ENUMERATOR\\n[#DEPTH] i
15555 .          \}
15556 .          if '\\*[$LIST_ARG_1]'ROMAN' \{\
15557 .             af #ENUMERATOR\\n[#DEPTH] I
15558 .          \}
15559 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] roman
15560 .          ds $SEPARATOR\\n[#DEPTH] )
15561 .          ds $PREFIX\\n[#DEPTH]
15562 .          if \\n[#NUM_ARGS]>=2 \{\
15563 .             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
15564 .             el             .ds $SEPARATOR\\n[#DEPTH] \\$2
15565 .             if \\n[#NUM_ARGS]=3 \{\
15566 .                ds $PREFIX\\n[#DEPTH] \\$3
15567 .             \}
15568 .          \}
15569 .       \}
15570 .       if '\\*[$LIST_ARG_1]'USER'   \{\
15571 .          nr #ARGS_TO_LIST 1
15572 .          ds $ENUMERATOR\\n+[#DEPTH] \\$2
15573 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
15574 .          ds $SEPARATOR\\n[#DEPTH]
15575 .          ds $PREFIX\\n[#DEPTH]
15576 .       \}
15577 .       if \\n[#NUM_ARGS]=1 \{\
15578 .          if !r#ARGS_TO_LIST \{\
15579 .             ie \\n[#DEPTH]=1 \{\
15580 .                ie \\n[#NEXT_DEPTH_BACK]=0 \{\
15581 .                   SET_LIST_INDENT
15582 .                   if \\n[#QUIT]=1 \{\
15583 .                      QUIT_LISTS
15584 .                      return
15585 .                   \}
15586 .                   return
15587 .                \}
15588 .                el \{\
15589 .                   QUIT_LISTS
15590 .                   return
15591 .                \}
15592 .             \}
15593 .             el \{\
15594 .                SET_LIST_INDENT
15595 .                return
15596 .             \}
15597 .          \}
15598 .       \}
15599 .    \}
15600 .    nr #TOTAL_LISTS \\n[#DEPTH]
15601 .    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
15602 .       nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]m\\*[$SEPARATOR\\n[#DEPTH]]\ '
15603 .       if '\\*[$LIST_ARG_1]'ALPHA'\{\
15604 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]M\\*[$SEPARATOR\\n[#DEPTH]]\ '
15605 .       \}
15606 .    \}
15607 .    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\
15608 .       GET_ROMAN_INDENT
15609 .    \}
15610 .    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \{\
15611 .       nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$ENUMERATOR\\n[#DEPTH]]\0'
15612 .    \}
15613 .    ll \\n[#CURRENT_L_LENGTH]u
15614 .    ie \\n[#DEPTH]=1 \{\
15615 .       ie \\n[#INDENT_ACTIVE]=1 \{\
15616 .          if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
15617 .             nr #L_INDENT \\n[#L_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
15618 .             nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
15619 .             nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
15620 .          \}
15621 .          if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
15622 .             nr #L_INDENT \\n[#BL_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
15623 .             nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
15624 .             nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
15625 .          \}
15626 .          if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
15627 .             ie \\n[#INDENT_LEFT_ACTIVE]=1 \{\
15628 .             \" Don't do anything; we already have a left indent
15629 .             \}
15630 .             el \{\
15631 .                nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
15632 .                nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
15633 .             \}
15634 .          \}
15635 .       \}
15636 .       el \{\
15637 .          nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
15638 .          nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
15639 .       \}
15640 .    \}
15641 .    el \{\
15642 .       nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
15643 .       nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
15644 .    \}
15645 .END
15648 \# ITEM
15649 \# ----
15650 \# *Arguments:
15651 \#   none
15652 \# *Function:
15653 \#   Prints enumerator for a given list depth and prepares mom to
15654 \#   receive the text of an item.
15656 .MAC ITEM END
15657 .    if !r#DEPTH \{ .return \}
15658 .    if \\n[#LINENUMBERS]=1 \{\
15659 .       NUMBER_LINES OFF
15660 .       nr #LINENUMBERS 2
15661 .    \}
15662 .    if \\n[#KERN]=1 \{\
15663 .       nr #KERN_WAS_ON 1
15664 .       KERN OFF
15665 .    \}
15666 .    IL
15667 .    ll \\n[#CURRENT_L_LENGTH]u \" Set ll again because IL turns IB off.
15668 .    TRAP OFF
15669 .    HI \\n[#HL_INDENT\\n[#DEPTH]]u
15670 .    if '\\*[$SEPARATOR\\n[#DEPTH]]')' \{ .nr #SEP_TYPE 1 \}
15671 .    if '\\*[$SEPARATOR\\n[#DEPTH]]']' \{ .nr #SEP_TYPE 1 \}
15672 .    if '\\*[$SEPARATOR\\n[#DEPTH]]'}' \{ .nr #SEP_TYPE 1 \}
15673 .    ie \\n[#IN_BIB_LIST]=1 \{\
15674 .       ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\
15675 .          ie \\n[#SEP_TYPE]=1 \{\
15676 .             PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15677 .          \}
15678 .          el \{\
15679 .             PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15680 .          \}
15681 .       \}
15682 .       el \{\
15683 .          ie \\n[#SEP_TYPE]=1 \{\
15684 .             PRINT \h'-\w'\0'u'\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15685 .          \}
15686 .          el \{\
15687 .             PRINT \h'-\w'\0'u'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15688 .          \}
15689 .       \}
15690 .    \}
15691 .    el \{\
15692 .       ie '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
15693 .\" DIGIT
15694 .          ie '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\
15695 .             ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\
15696 .                ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\
15697 .                   ie \\n[#SEP_TYPE]=1 \{\
15698 .                      PRINT \0\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15699 .                   \}
15700 .                   el \{\
15701 .                      PRINT \0\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15702 .                   \}
15703 .                \}
15704 .                el \{\
15705 .                   ie \\n[#SEP_TYPE]=1 \{\
15706 .                      PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15707 .                   \}
15708 .                   el \{\
15709 .                      PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15710 .                   \}
15711 .                \}
15712 .             \}
15713 .             el \{\
15714 .                ie \\n[#SEP_TYPE]=1 \{\
15715 .                   PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15716 .                \}
15717 .                el \{\
15718 .                   PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15719 .                \}
15720 .             \}
15721 .          \}
15722 .          el \{\
15723 .\" ALPHA
15724 .             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'A' \{\
15725 .                ie \\n[#SEP_TYPE]=1 \{\
15726 .                   PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15727 .                \}
15728 .                el \{\
15729 .                   PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15730 .                \}
15731 .             \}
15732 .\" alpha
15733 .             el \{\
15734 .                PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15735 .             \}
15736 .          \}
15737 .       \}
15738 .       if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\
15739 .          ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\
15740 .\" ROMAN I, padded
15741 .             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
15742 .                ie \\n[#SEP_TYPE]=1 \{\
15743 .                   PRINT "\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15744 .                \}
15745 .                el \{\
15746 .                   PRINT "\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15747 .                \}
15748 .             \}
15749 .\" roman i, padded
15750 .             el \{\
15751 .                PRINT "\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15752 .             \}
15753 .          \}
15754 .\" No pad
15755 .          el \{\
15756 .\" ROMAN I, no pad
15757 .             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
15758 .                ie \\n[#SEP_TYPE]=1 \{\
15759 .                   PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15760 .                \}
15761 .                el \{\
15762 .                   PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15763 .                \}
15764 .             \}
15765 .\" roman i, no pad
15766 .             el \{\
15767 .                PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15768 .             \}
15769 .          \}
15770 .       \}
15771 .       if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \{\
15772 .          PRINT \\*[$ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15773 .       \}
15774 .    \}
15775 .    rr #SEP_TYPE
15776 .    EOL
15777 .    if \\n[#REF]=1 \{\
15778 .       IL +\\*[$REF_BIB_INDENT]
15779 .       ti \\n[#L_INDENT]u-\\*[$REF_BIB_INDENT]
15780 .    \}
15781 .    TRAP
15782 .    if \\n[#KERN_WAS_ON]=1 \{\
15783 .       KERN
15784 .       rr #KERN_WAS_ON
15785 .    \}
15786 .    if \\n[#LINENUMBERS]=2 \{\
15787 .       NUMBER_LINES RESUME
15788 .       nr #LINENUMBERS 1
15789 .    \}
15790 .END
15792 \# A utility macro that determines the space to reserve for
15793 \# roman numeral enumerated lists.  Limit is 20 roman numerals
15794 \# per list.  If this isn't enough, the user can add to the
15795 \# macro.
15797 .MAC GET_ROMAN_INDENT END
15798 .    if '\\*[$LIST_ARG_1]'roman' \{\
15799 .       if '\\*[$ROMAN_WIDTH]'1'  \{\
15800 .          ds $ROMAN_WIDTH\\n[#DEPTH] 1
15801 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]i\\*[$SEPARATOR\\n[#DEPTH]]\0'
15802 .       \}
15803 .       if '\\*[$ROMAN_WIDTH]'2'  \{\
15804 .          ds $ROMAN_WIDTH\\n[#DEPTH] 2
15805 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]ii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15806 .       \}
15807 .       if '\\*[$ROMAN_WIDTH]'3'  \{\
15808 .          ds $ROMAN_WIDTH\\n[#DEPTH] 3
15809 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15810 .       \}
15811 .       if '\\*[$ROMAN_WIDTH]'4'  \{\
15812 .          ds $ROMAN_WIDTH\\n[#DEPTH] 4
15813 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15814 .       \}
15815 .       if '\\*[$ROMAN_WIDTH]'5'  \{\
15816 .          ds $ROMAN_WIDTH\\n[#DEPTH] 5
15817 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15818 .       \}
15819 .       if '\\*[$ROMAN_WIDTH]'6'  \{\
15820 .          ds $ROMAN_WIDTH\\n[#DEPTH] 6
15821 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15822 .       \}
15823 .       if '\\*[$ROMAN_WIDTH]'7'  \{\
15824 .          ds $ROMAN_WIDTH\\n[#DEPTH] 7
15825 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]vii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15826 .       \}
15827 .       if '\\*[$ROMAN_WIDTH]'8'  \{\
15828 .          ds $ROMAN_WIDTH\\n[#DEPTH] 8
15829 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15830 .       \}
15831 .       if '\\*[$ROMAN_WIDTH]'9'  \{\
15832 .          ds $ROMAN_WIDTH\\n[#DEPTH] 9
15833 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15834 .       \}
15835 .       if '\\*[$ROMAN_WIDTH]'10'  \{\
15836 .          ds $ROMAN_WIDTH\\n[#DEPTH] 10
15837 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15838 .       \}
15839 .       if '\\*[$ROMAN_WIDTH]'11'  \{\
15840 .          ds $ROMAN_WIDTH\\n[#DEPTH] 11
15841 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15842 .       \}
15843 .       if '\\*[$ROMAN_WIDTH]'12'  \{\
15844 .          ds $ROMAN_WIDTH\\n[#DEPTH] 12
15845 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15846 .       \}
15847 .       if '\\*[$ROMAN_WIDTH]'13'  \{\
15848 .          ds $ROMAN_WIDTH\\n[#DEPTH] 13
15849 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15850 .       \}
15851 .       if '\\*[$ROMAN_WIDTH]'14'  \{\
15852 .          ds $ROMAN_WIDTH\\n[#DEPTH] 14
15853 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15854 .       \}
15855 .       if '\\*[$ROMAN_WIDTH]'15'  \{\
15856 .          ds $ROMAN_WIDTH\\n[#DEPTH] 15
15857 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15858 .       \}
15859 .       if '\\*[$ROMAN_WIDTH]'16'  \{\
15860 .          ds $ROMAN_WIDTH\\n[#DEPTH] 16
15861 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15862 .       \}
15863 .       if '\\*[$ROMAN_WIDTH]'17'  \{\
15864 .          ds $ROMAN_WIDTH\\n[#DEPTH] 17
15865 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xvii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15866 .       \}
15867 .       if '\\*[$ROMAN_WIDTH]'18'  \{\
15868 .          ds $ROMAN_WIDTH\\n[#DEPTH] 18
15869 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15870 .       \}
15871 .       if '\\*[$ROMAN_WIDTH]'19'  \{\
15872 .          ds $ROMAN_WIDTH\\n[#DEPTH] 19
15873 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15874 .       \}
15875 .       if '\\*[$ROMAN_WIDTH]'20'  \{\
15876 .          ds $ROMAN_WIDTH\\n[#DEPTH] 20
15877 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15878 .       \}
15879 .    \}
15880 .    if '\\*[$LIST_ARG_1]'ROMAN' \{\
15881 .       if '\\*[$ROMAN_WIDTH]'1'  \{\
15882 .          ds $ROMAN_WIDTH\\n[#DEPTH] 1
15883 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]I\\*[$SEPARATOR\\n[#DEPTH]]\0'
15884 .       \}
15885 .       if '\\*[$ROMAN_WIDTH]'2'  \{\
15886 .          ds $ROMAN_WIDTH\\n[#DEPTH] 2
15887 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]II\\*[$SEPARATOR\\n[#DEPTH]]\0'
15888 .       \}
15889 .       if '\\*[$ROMAN_WIDTH]'3'  \{\
15890 .          ds $ROMAN_WIDTH\\n[#DEPTH] 3
15891 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]III\\*[$SEPARATOR\\n[#DEPTH]]\0'
15892 .       \}
15893 .       if '\\*[$ROMAN_WIDTH]'4'  \{\
15894 .          ds $ROMAN_WIDTH\\n[#DEPTH] 4
15895 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15896 .       \}
15897 .       if '\\*[$ROMAN_WIDTH]'5'  \{\
15898 .          ds $ROMAN_WIDTH\\n[#DEPTH] 5
15899 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15900 .       \}
15901 .       if '\\*[$ROMAN_WIDTH]'6'  \{\
15902 .          ds $ROMAN_WIDTH\\n[#DEPTH] 6
15903 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15904 .       \}
15905 .       if '\\*[$ROMAN_WIDTH]'7'  \{\
15906 .          ds $ROMAN_WIDTH\\n[#DEPTH] 7
15907 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15908 .       \}
15909 .       if '\\*[$ROMAN_WIDTH]'8'  \{\
15910 .          ds $ROMAN_WIDTH\\n[#DEPTH] 8
15911 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15912 .       \}
15913 .       if '\\*[$ROMAN_WIDTH]'9'  \{\
15914 .          ds $ROMAN_WIDTH\\n[#DEPTH] 9
15915 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15916 .       \}
15917 .       if '\\*[$ROMAN_WIDTH]'10'  \{\
15918 .          ds $ROMAN_WIDTH\\n[#DEPTH] 10
15919 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15920 .       \}
15921 .       if '\\*[$ROMAN_WIDTH]'11'  \{\
15922 .          ds $ROMAN_WIDTH\\n[#DEPTH] 11
15923 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15924 .       \}
15925 .       if '\\*[$ROMAN_WIDTH]'12'  \{\
15926 .          ds $ROMAN_WIDTH\\n[#DEPTH] 12
15927 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15928 .       \}
15929 .       if '\\*[$ROMAN_WIDTH]'13'  \{\
15930 .          ds $ROMAN_WIDTH\\n[#DEPTH] 13
15931 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15932 .       \}
15933 .       if '\\*[$ROMAN_WIDTH]'14'  \{\
15934 .          ds $ROMAN_WIDTH\\n[#DEPTH] 14
15935 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15936 .       \}
15937 .       if '\\*[$ROMAN_WIDTH]'15'  \{\
15938 .          ds $ROMAN_WIDTH\\n[#DEPTH] 15
15939 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15940 .       \}
15941 .       if '\\*[$ROMAN_WIDTH]'16'  \{\
15942 .          ds $ROMAN_WIDTH\\n[#DEPTH] 16
15943 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15944 .       \}
15945 .       if '\\*[$ROMAN_WIDTH]'17'  \{\
15946 .          ds $ROMAN_WIDTH\\n[#DEPTH] 17
15947 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15948 .       \}
15949 .       if '\\*[$ROMAN_WIDTH]'18'  \{\
15950 .          ds $ROMAN_WIDTH\\n[#DEPTH] 18
15951 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15952 .       \}
15953 .       if '\\*[$ROMAN_WIDTH]'19'  \{\
15954 .          ds $ROMAN_WIDTH\\n[#DEPTH] 19
15955 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15956 .       \}
15957 .       if '\\*[$ROMAN_WIDTH]'20'  \{\
15958 .          ds $ROMAN_WIDTH\\n[#DEPTH] 20
15959 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15960 .       \}
15961 .    \}
15962 .END
15964 \# SHIFT LIST
15965 \# ----------
15966 \# *Arguments:
15967 \#   <amount by which to indent a list to the right>
15968 \# *Function:
15969 \#   Adds the value of the arg to the current list's indent.
15970 \# *Notes:
15971 \#   Requires a unit of measure.
15973 .MAC SHIFT_LIST END
15974 .       nr #SHIFT_LIST\\n[#DEPTH] (\\$1)
15975 .       nr #L_INDENT +\\n[#SHIFT_LIST\\n[#DEPTH]]
15976 .END
15979 \# PAD LIST DIGITS
15980 \# ---------------
15981 \# *Arguments:
15982 \#   [ LEFT ]
15983 \# *Function:
15984 \#   Adds a figure space to a list's hanging and left indent.  If
15985 \#   LEFT is given, sets reg. #PAD_LIST_DIGITS to 1 for use in ITEM.
15987 .MAC PAD_LIST_DIGITS END
15988 .    if '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\
15989 .       nr #LIST_INDENT\\n[#DEPTH] +\\w'\\0'
15990 .       nr #L_INDENT \\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#LIST_INDENT\\n-[#DEPTH]]
15991 .       nr #HL_INDENT\\n+[#DEPTH] +\\w'\\n[#ENUMERATOR\\n[#DEPTH]]'
15992 .       if '\\$1'LEFT' \{ .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 \}
15993 .    \}
15994 .    if '\\g[#ENUMERATOR\\n[#DEPTH]]'i' \{\
15995 .       if '\\$1'LEFT' \{ .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 \}
15996 .    \}
15997 .    if '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
15998 .       if '\\$1'LEFT' \{ .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 \}
15999 .    \}
16000 .END
16003 \# RESET LIST
16004 \# ----------
16005 \# *Arguments:
16006 \#   none
16007 \# *Function:
16008 \#   Resets register enumerators to 1 or a.
16010 .MAC RESET_LIST END
16011 .    ie '\\$1'' \{ .nr #ENUMERATOR\\n[#DEPTH] 0 1 \}
16012 .    el \{ .nr #ENUMERATOR\\n[#DEPTH] \\$1-1 1 \}
16013 .END
16016 \# QUIT LISTS
16017 \# ----------
16018 \# *Arguments:
16019 \#   none
16020 \# *Function:
16021 \#   Exits lists cleanly and restores any indents that were in
16022 \#   effect prior to LIST.
16024 .MAC QUIT_LISTS END
16025 .   IQ CLEAR
16026 .   nr #HL_INDENT \\n[#STORED_HL_INDENT]
16027 .   nr #T_INDENT  \\n[#STORED_T_INDENT]
16028 .   rr #STORED_HL_INDENT
16029 .   if \\n[#RESTORE_PREV_INDENT]=1 \{\
16030 .      nr #L_INDENT  \\n[#STORED_L_INDENT]
16031 .      IL
16032 .      rr #STORED_L_INDENT
16033 .   \}
16034 .   if \\n[#RESTORE_PREV_INDENT]=2 \{\
16035 .      nr #BL_INDENT \\n[#STORED_BL_INDENT]
16036 .      nr #BR_INDENT \\n[#STORED_BR_INDENT]
16037 .      ll \\n[#ORIG_L_LENGTH]u
16038 .      IB
16039 .      rr #STORED_BL_INDENT
16040 .      rr #STORED_BR_INDENT
16041 .   \}
16042 .   if \\n[#RESTORE_PREV_INDENT]=3 \{\
16043 .      nr #R_INDENT \\n[#STORED_R_INDENT]
16044 .      ll \\n[#ORIG_L_LENGTH]u
16045 .      IR
16046 .      rr #STORED_R_INDENT
16047 .   \}
16048 .   if \\n[#RESTORE_PREV_INDENT]=4 \{\
16049 .      nr #R_INDENT \\n[#STORED_R_INDENT]
16050 .      nr #L_INDENT \\n[#STORED_L_INDENT]
16051 .      ll \\n[#ORIG_L_LENGTH]u
16052 .      IR
16053 .      IL
16054 .      rr #STORED_R_INDENT
16055 .      rr #STORED_L_INDENT
16056 .   \}
16057 .\" Clean up after exiting last depth of list
16058 .   nr #REMOVE 0 1
16059 .   while \\n+[#REMOVE]<=\\n[#TOTAL_LISTS] \{\
16060 .      rr #LIST_INDENT\\n[#REMOVE]
16061 .      rr #ENUMERATOR\\n[#REMOVE]
16062 .      rm $ENUMERATOR\\n[#REMOVE]
16063 .      rm $SEPARATOR\\n[#REMOVE]
16064 .      rm $ENUMERATOR_TYPE\\n[#REMOVE]
16065 .      rr #PAD_LIST_DIGITS\\n[#REMOVE]
16067 .   rr #REMOVE
16068 .   rr #TOTAL_LISTS
16069 .   rr #QUIT
16070 .   rr #DEPTH
16071 .   rr #NEXT_DEPTH_BACK
16072 .   rr #RESTORE_PREV_INDENT
16073 .   rr #ORIG_L_LENGTH
16074 .   rr #CURRENT_L_LENGTH
16075 .END
16078 \# SET LIST INDENT
16079 \# ---------------
16080 \# *Arguments:
16081 \#   none
16082 \# *Function:
16083 \#   Restores indent of prev. list in nested lists.  Also sets the
16084 \#   #QUIT register if an invocation of LIST OFF applies to the first
16085 \#   level of list.
16087 .MAC SET_LIST_INDENT END
16088 .    nr #NEXT_DEPTH_BACK \\n[#DEPTH]-1
16089 .    if \\n[#NEXT_DEPTH_BACK]=0 \{\
16090 .       nr #QUIT 1
16091 .       return
16092 .    \}
16093 .    nr #L_INDENT -\\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#SHIFT_LIST\\n[#DEPTH]]
16094 .    nr #HL_INDENT \\n[#HL_INDENT\\n-[#DEPTH]]
16095 .END
16097 \# ====================================================================
16099 \# +++DOCUMENT PROCESSING MISC AND SUPPORT MACROS+++
16101 \# COLLATE
16102 \# -------
16103 \# *Arguments:
16104 \#   <none>
16105 \# *Function:
16106 \#   Turns headers off (if on) and saves header state, sets register
16107 \#   #COLLATE to 1 (toggle), and breaks to a new page.
16108 \# *Notes:
16109 \#   COLLATE exists primarily to allow putting multiple chapters in
16110 \#   a single file, although it can be used for any document type.  After
16111 \#   COLLATE, any of the macros that normally precede START may be
16112 \#   used, and should behave as expected.
16114 \#   N.B.--the START macro *must* be used after COLLATE (and any other
16115 \#   macros that alter mom's behaviour).
16117 .MAC COLLATE END
16118 .    if ( (\\n[.t]-1) <= \\n[.v] ) \{ .nr #NO_BREAK 1 \}
16119 .    ds $SAVED_PP_FT \\*[$PP_FT]
16120 .    nr #COLLATE 1
16121 .    nr #PRE_COLLATE 1
16122 .    nr #HEADER_STATE \\n[#HEADERS_ON]
16123 .    HEADERS OFF
16124 .    if \\n[#DOC_HEADER]=2 \{ .nr #DOC_HEADER 1 \}
16125 .    if \\n[#PAGE_NUM_V_POS]=1 \{\
16126 .       nr #PAGINATION_STATE \\n[#PAGINATE]
16127 .       PAGINATION OFF
16128 .    \}
16129 .    IQ CLEAR
16130 .    TQ
16131 .\" Collect first doc's title for TOC
16132 .    if \\n[#COLLATED_DOC]=0 \{\
16133 .       ie \\n[#USER_SET_TITLE_ITEM] \{\
16134 .          ds $FIRST_DOC_TITLE \\*[$USER_SET_TITLE_ITEM]\\|
16135 .          rr #USER_SET_TITLE_ITEM
16136 .          rm $USER_SET_TITLE_ITEM
16137 .       \}
16138 .       el \{\
16139 .          ie \\n[#DOC_TYPE]=2 \{\
16140 .             ie '\\*[$CHAPTER_TITLE]'' \{\
16141 .                ds $FIRST_DOC_TITLE \\*[$CHAPTER_STRING] \\*[$CHAPTER]\\|
16142 .             \}
16143 .             el \{\
16144 .                ie '\\*[$CHAPTER]'' \{\
16145 .                   ds $FIRST_DOC_TITLE \\*[$CHAPTER_TITLE]\\|
16146 .                \}
16147 .                el \{\
16148 .                   ds $FIRST_DOC_TITLE \\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]\\|
16149 .                \}
16150 .             \}
16151 .          \}
16152 .          el \{\
16153 .             ds $FIRST_DOC_TITLE \\*[$TITLE]\\|
16154 .          \}
16155 .       \}
16156 .       if \\n[#TOC_AUTHORS]=1 \{\
16157 .          ie '\\*[$TOC_AUTHORS]'' \{\
16158 .             as $FIRST_DOC_TITLE /\\|\\*[$AUTHOR_1]\\|
16159 .          \}
16160 .          el \{\
16161 .             as $FIRST_DOC_TITLE /\\|\\*[$TOC_AUTHORS]\\|
16162 .             rm $TOC_AUTHORS
16163 .          \}
16164 .       \}
16165 .       nr #COLLATED_DOC 1
16166 .    \}
16167 .\" End title collection for TOC
16168 .    LL \\n[#DOC_L_LENGTH]u
16169 .    QUAD $DOC_QUAD
16170 .    nr #SAVED_DOC_LEAD \\n[#DOC_LEAD]
16171 .    LS \\n[#DOC_LEAD]u
16172 \*[SLANTX]
16173 \*[CONDX]
16174 \*[EXTX]
16175 '    NEWPAGE
16176 .    if \\n[#DEFER_PAGINATION] \{ .PAGINATE \}
16177 .    if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
16178 .       PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
16179 .       rm $RESTORE_PAGENUM_STYLE
16180 .    \}
16181 .    if \\n[#CH_NUM] \{ .nr #CH_NUM +1 \}
16182 .    rm $EN_TITLE
16183 .    COVERTITLE
16184 .    DOCCOVERTITLE
16185 .    MISC
16186 .    TITLE
16187 .    SUBTITLE
16188 .    CHAPTER
16189 .    CHAPTER_TITLE
16190 .    rr #PAGENUM_STYLE_SET
16191 .    rr #DOC_COVER
16192 .    rr #COVER
16193 .END
16196 \# NUMBER_LINES
16197 \# ------------
16198 \# *Arguments:
16199 \#   <starting line number> [ <increment> [ <gutter> ] ]
16200 \#   or
16201 \#   <anything> | RESUME
16202 \# *Function:
16203 \#   Begin, suspend/turn off, or resume numbering of output lines.
16205 .MAC NUMBER_LINES END
16206 .    br
16207 .    if '\\n(.z'EPI_TEXT' \{ .return \}
16208 .    if '\\$1'' \{\
16209 .       tm1 "[mom]: NUMBER_LINES at line \\n(.c has no argument.
16210 .       tm1 "       Most likely, you have forgotten to give it a starting line number.
16211 .       ab Aborting on NUMBER_LINES.
16212 .    \}
16213 .    if !\\n[#LINENUMBERS]=2 \{ .nr #LINENUMBERS 1 \}
16214 .\" Test whether the first arg is a digit.
16215 .    if \B'\\$1' \{\
16216 .       nr #LN \\$1
16217 .       ds $LN_NUM \\$1
16218 .       if !'\\n(.z'' \{ .nr #RESTORE_LN_NUM 1 \}
16219 .       ie '\\$2'' \{\
16220 .          if '\\*[$LN_INC]'' .ds $LN_INC 1
16221 .       \}
16222 .       el .ds $LN_INC \\$2
16223 .       ie '\\$3'' \{\
16224 .          if '\\*[$LN_GUTTER]'' .ds $LN_GUTTER 2
16225 .       \}
16226 .       el .ds $LN_GUTTER \\$3
16227 .    \}
16228 .    ie !\\n[#LN] \{\
16229 .\" In other words, the first arg was not a digit.
16230 .       rr #LN
16231 .       ie '\\$1'RESUME' \{\
16232 .          LN_PARAMS
16233 .          nm +0
16234 .          fam
16235 .          ft
16236 .          ps
16237 .          gcolor
16238 .       \}
16239 .       el \{\
16240 .          LN_PARAMS
16241 .          nm
16242 .          fam
16243 .          ft
16244 .          ps
16245 .          gcolor
16246 .          if !\\n[#LINENUMBERS]=2 \{ .rr #LINENUMBERS \}
16247 .       \}
16248 .    \}
16249 .    el \{\
16250 .       LN_PARAMS
16251 .       nm \\*[$LN_NUM] \\*[$LN_INC] \\*[$LN_GUTTER] -3-\\*[$LN_GUTTER]
16252 .       fam
16253 .       ft
16254 .       ps
16255 .       gcolor
16256 .       if !'\\n(.z'' \{ .nr #DIVER_LN_OFF 1 \}
16257 .    \}
16258 .    rr #LN
16259 .END
16262 \# LINENUMBER STYLE PARAMETERS
16263 \# ---------------------------
16264 \# *Arguments:
16265 \#   none
16266 \# *Function:
16267 \#   Checks if any line numbering parameters have been set, and
16268 \#   passes the args, if any, to the appropriate request.  If a linenumber
16269 \#   parameter is missing, passes the current value of the register
16270 \#   associated with the request to the request.  (Ensures that the
16271 \#   same requests, called in NUMBER_LINES to reset the registers
16272 \#   to their former values, stay at those values.)
16274 .MAC LN_PARAMS END
16275 .    ie d$LN_FAM          \{ .fam \\*[$LN_FAM] \}
16276 .    el                   \{ .fam \\n[.fam]    \}
16277 .    ie d$LN_FT           \{ .ft \\*[$LN_FT]   \}
16278 .    el                   \{ .ft \\n[.sty]     \}
16279 .    ie d$LN_SIZE_CHANGE  \{ .ps \\*[$LN_SIZE_CHANGE] \}
16280 .    el                   \{ .ps \\n[.s] \}
16281 .    ie d$LN_COLOR        \{ .gcolor \\*[$LN_COLOR] \}
16282 .    el                   \{ .gcolor \\n[.m] \}
16283 .END
16286 \# NUMBER QUOTE AND BLOCKQUOTE LINES AS PART OF RUNNING TEXT
16287 \# ---------------------------------------------------------
16288 \# *Argument:
16289 \#   <gutter> | <anything>
16290 \# *Function:
16291 \#   Sets #(B)QUOTE_LN to 1 if no argument, or a single numeric
16292 \#   argument, is given; otherwise, turns (BLOCK)QUOTE linenumbering
16293 \#   off.
16294 \# *Notes:
16295 \#   #(B)QUOTE is checked for in QUOTE and BLOCKQUOTE.
16296 \#   The single numeric argument allows establishing a different gutter from
16297 \#   the one used for line numbers in running text.
16299 .MAC NUMBER_QUOTE_LINES END
16300 .    ie \\n[#NUM_ARGS]=0 \{ .nr #QUOTE_LN 1 \}
16301 .    el \{\
16302 .       ie \B'\\$1' \{\
16303 .          nr #QUOTE_LN 1
16304 .          ds $Q_LN_GUTTER \\$1
16305 .       \}
16306 .       el \{\
16307 .          ie '\\$1'SILENT' \{ .nr #SILENT_QUOTE_LN 1 \}
16308 .          el \{\
16309 .             rr #QUOTE_LN
16310 .             rr #SILENT_QUOTE_LN
16311 .          \}
16312 .       \}
16313 .    \}
16314 .END
16317 .MAC NUMBER_BLOCKQUOTE_LINES END
16318 .    ie \\n[#NUM_ARGS]=0 \{ .nr #BQUOTE_LN 1 \}
16319 .    el \{\
16320 .       ie \B'\\$1' \{\
16321 .          nr #BQUOTE_LN 1
16322 .          ds $BQ_LN_GUTTER \\$1
16323 .       \}
16324 .       el \{\
16325 .          ie '\\$1'SILENT' \{ .nr #SILENT_BQUOTE_LN 1 \}
16326 .          el \{\
16327 .             rr #BQUOTE_LN
16328 .             rr #SILENT_BQUOTE_LN
16329 .          \}
16330 .       \}
16331 .    \}
16332 .END
16334 \# OUTPUT BLANK PAGES
16335 \# ------------------
16336 \# *Argument:
16337 \#   <number of blank pages to output> [ NULL ]
16338 \# *Function:
16339 \#   Outputs blank pages.
16340 \# *Notes:
16341 \#   If recto/verso, each page is recto/verso, even if there's
16342 \#   nothing on it.
16344 \#   The argument to BLANKPAGE is non-optional.
16346 .MAC BLANKPAGE END
16347 .    nr #HOW_MANY \\$1
16348 .    nr #PAGES 0 1
16349 .    while \\n+[#PAGES]<=\\n[#HOW_MANY] \{\
16350 .       if \\n[#HEADERS_ON]=1 \{\
16351 .          nr #HEADERS_WERE_ON 1
16352 .          HEADERS OFF
16353 .       \}
16354 .       if \\n[#PAGE_NUM_V_POS]=1 \{\
16355 .          if \\n[#PAGINATE]=1 \{ .nr #PAGINATE_WAS_ON 1 \}
16356 .          PAGINATION OFF
16357 .       \}
16358 .       NEWPAGE
16359 .       PRINT \&
16360 .       if \\n[#FOOTERS_ON]=1 \{\
16361 .          nr #FOOTERS_WERE_ON 1
16362 .          FOOTERS OFF
16363 .       \}
16364 .       if \\n[#PAGE_NUM_V_POS]=2 \{\
16365 .          if \\n[#PAGINATE]=1 \{ .nr #PAGINATE_WAS_ON 1 \}
16366 .          PAGINATION OFF
16367 .       \}
16368 .       if \\n[#HEADERS_WERE_ON] \{ .HEADERS \}
16369 .       if \\n[#PAGE_NUM_V_POS]=1 \{\
16370 .          if \\n[#PAGINATE_WAS_ON] \{ .PAGINATE \}
16371 .       \}
16373 .    NEWPAGE
16374 .    if \\n[#FOOTERS_WERE_ON] \{ .FOOTERS \}
16375 .    if \\n[#PAGE_NUM_V_POS]=2 \{\
16376 .       if \\n[#PAGINATE_WAS_ON] \{ .PAGINATE \}
16377 .    \}
16378 .    if \\n[#PAGINATE]=1 \{\
16379 .       if '\\$2'NULL' \{ .nr #PAGE_NUM_ADJ -\\n[#HOW_MANY] \}
16380 .    \}
16381 .    rr #HOW_MANY
16382 .    rr #HEADERS_WERE_ON
16383 .    rr #FOOTERS_WERE_ON
16384 .    rr #PAGINATE_WAS_ON
16385 .END
16388 \# SET TRAPS FOR HEADERS/FOOTERS/FOOTNOTES
16389 \# ---------------------------------------
16390 \# *Arguments:
16391 \#   <none>
16392 \# *Function:
16393 \#   Sets header/footer/footnotes/etc... traps.
16395 \#   Calculates the number of lines that actually fit on a
16396 \#   page based on #B_MARGIN and resets page bottom trap to coincide
16397 \#   with the depth of that number of lines, or, if #ADJ_DOC_LEAD=1,
16398 \#   adjusts #DOC_LEAD so that the last line of text on a page falls
16399 \#   exactly on #B_MARGIN.
16401 .MAC TRAPS END
16402 .\" Remove all header/footer traps
16403 .    if !\\n[#NO_TRAP_RESET] \{\
16404 .       ch DO_T_MARGIN
16405 .       ch DO_B_MARGIN
16406 .       ch HEADER
16407 .       ch FOOTER
16408 .       ch FN_OVERFLOW_TRAP
16409 .\" Plant header trap
16410 .       wh 0 HEADER
16411 .    \}
16412 .\" Adjust lead so last line of text falls on B_MARGIN,...
16413 .    ie \\n[#ADJ_DOC_LEAD]=1 \{\
16414 .       nr #LINES_PER_PAGE 0 1
16415 .       nr #DOC_LEAD_ADJ 0 1
16416 .       nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#ORIGINAL_B_MARGIN]-1v
16417 .\" Get the number of unadjusted lines that fit on the page; always a
16418 .\" bit short of the bottom margin
16419 .       while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
16422 .       nr #LINES_PER_PAGE -1
16423 .\" Add machine units, 1 at a time, increasing the leading until the
16424 .\" new leading fills the page properly
16425 .       while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]+\\n+[#DOC_LEAD_ADJ]*\\n[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
16428 .       DOC_LEAD \\n[#DOC_LEAD]u+\\n[#DOC_LEAD_ADJ]u
16429 .\" The "visual" bottom margin is what \n(nl would report on the
16430 .\" last line before the FOOTER trap is sprung
16431 .       nr #VISUAL_B_MARGIN \\n[#T_MARGIN]+(\\n[#LINES_PER_PAGE]*\\n[#DOC_LEAD])
16432 .\" Get the difference between #B_MARGIN and #VISUAL_B_MARGIN
16433 .       nr #FOOTER_DIFF (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[#VISUAL_B_MARGIN]
16434 .\" Set #B_MARGIN to 1 machine unit lower on the page than #VISUAL_B_MARGIN
16435 .       nr #B_MARGIN \\n[#B_MARGIN]+(\\n[#FOOTER_DIFF]-1)
16436 .\" Set the FN_OVERFLOW_TRAP position
16437 .       nr #FN_OVERFLOW_TRAP_POS \\n[#B_MARGIN]u-\\n[#FN_LEAD]
16438 .       if \\n[#PRINT_STYLE]=1 .nr #FN_OVERFLOW_TRAP_POS \\n[#ORIGINAL_B_MARGIN]u
16439 .    \}
16440 .\" ...or calculate new B_MARGIN based on # of lines (at #DOC_LEAD) that fit
16441 .\" on the page.
16442 .    el \{\
16443 .       nr #LINES_PER_PAGE 0 1
16444 .       nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]-1v
16445 .       while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
16448 .       nr #VISUAL_B_MARGIN \\n[#T_MARGIN]+(\\n[#LINES_PER_PAGE]*\\n[#DOC_LEAD]-1v)
16449 .       nr #FOOTER_DIFF (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[#VISUAL_B_MARGIN]
16450 .       nr #B_MARGIN \\n[#B_MARGIN]+(\\n[#FOOTER_DIFF]-1)
16451 .       nr #FN_OVERFLOW_TRAP_POS \\n[#B_MARGIN]u-\\n[#FN_LEAD]
16452 .    \}
16453 .\" Set footer and footnote overflow traps
16454 .    if !\\n[#NO_TRAP_RESET] \{\
16455 .       nr #FN_COUNT 0 1
16456 .       nr #SPACE_REMAINING 0
16457 .       nr #FN_DEPTH 0
16458 .       nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
16459 .       wh \\n(.pu FOOTER
16460 .       wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP
16461 .       ch FOOTER -\\n[#B_MARGIN]u
16462 .    \}
16463 .END
16466 \# CHECK INDENT
16467 \# ------------
16468 \# *Arguments:
16469 \#   <none>
16470 \# *Function:
16471 \#   Adds left, right, or both indent values to document elements
16472 \#   like heads and subheads that are processed in environments.
16474 .MAC CHECK_INDENT END
16475 .    if \\n[#INDENT_LEFT_ACTIVE] \{\
16476 .       in \\n[#L_INDENT]u
16477 .       if \\n[#QUOTE] \{\
16478 .          in -\\n[#L_INDENT]u \"Because you added an indent in 2nd line of macro
16479 .          ll -\\n[#L_INDENT]u
16480 .          ta \\n(.lu
16481 .       \}
16482 .       if \\n[#EPIGRAPH] \{\
16483 .          in -\\n[#L_INDENT]u
16484 .          ll -\\n[#L_INDENT]u
16485 .          ta \\n(.lu
16486 .       \}
16487 .    \}
16488 .    if \\n[#INDENT_RIGHT_ACTIVE] \{\
16489 .       ll -\\n[#R_INDENT]u
16490 .       ta \\n(.lu
16491 .    \}
16492 .    if \\n[#INDENT_BOTH_ACTIVE] \{\
16493 .       in \\n[#BL_INDENT]u
16494 .       ll -\\n[#BR_INDENT]u
16495 .       ta \\n(.lu
16496 .       if \\n[#QUOTE] \{\
16497 .          in -\\n[#BL_INDENT]u
16498 .          ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
16499 .             ll -\\n[#BR_INDENT]u
16500 .             ta \\n(.lu
16501 .          \}
16502 .          el \{\
16503 .             ll -(\\n[#BR_INDENT]u/2u)
16504 .             ta \\n(.lu
16505 .          \}
16506 .       \}
16507 .       if \\n[#EPIGRAPH] \{\
16508 .          in -\\n[#BL_INDENT]u
16509 .          ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
16510 .             ll -\\n[#BR_INDENT]u
16511 .             ta \\n(.lu
16512 .          \}
16513 .          el \{\
16514 .             ll -(\\n[#BR_INDENT]u/2u)
16515 .             ta \\n(.lu
16516 .          \}
16517 .       \}
16518 .    \}
16519 .END
16522 \# REMOVE INDENT
16523 \# -------------
16524 \# *Arguments:
16525 \#   <none>
16526 \# *Function:
16527 \#   Removes left, right, or both indent values from document elements
16528 \#   like heads and subheads that are processed in environments.
16530 .MAC REMOVE_INDENT END
16531 .    in 0
16532 .    ll \\n[#L_LENGTH]u
16533 .    ta \\n(.lu
16534 .END
16537 \# This .em (for all DOC_TYPEs except 4 [LETTER]) ensures that
16538 \# deferred footnotes that happen on the 2nd to last page get
16539 \# output.
16541 .MAC TERMINATE END
16542 .    ie \\n[#FN_DEPTH] \{\
16543 .       ie \\n[#FN_DEFER] \{\
16544 .          br
16545 .          nr #TERMINATE 1
16546 .          FOOTNOTE
16547 .          nf
16548 .          FOOTNOTE OFF
16549 .       \}
16550 .       el \{\
16551 .          br
16552 .          ch FN_OVERFLOW_TRAP
16553 .          DO_B_MARGIN
16554 .       \}
16555 .    \}
16556 .    el \{\
16557 .       br
16558 .       ch FN_OVERFLOW_TRAP
16559 .       DO_B_MARGIN
16560 .    \}
16561 .END
16563 \# END MACRO FOR LETTERS
16564 \# ---------------------
16565 \# *Arguments:
16566 \#   none
16567 \# *Function:
16568 \#   The .em macro executed at the end of letters.  Turns footers
16569 \#   and pagination off, terminates and outputs diversion CLOSING
16570 \#   (indented with the author's name underneath).
16572 .MAC ALL_DONE END
16573 .    br
16574 .    FOOTERS OFF
16575 .    PAGINATION OFF
16576 .    if \\n[#DOC_TYPE]=4 \{\
16577 .       br
16578 .       if !'\\n(.z'' \{ .di \}
16579 .       IQ CLEAR
16580 .       TQ
16581 .       TAB_SET 1 \\n[#DOC_L_LENGTH]u/2u \\n[#DOC_L_LENGTH]u/2u LEFT
16582 .       ALD \\n[#DOC_LEAD]u*2u
16583 .       TAB 1
16584 .       if \\n[#CLOSING] \{\
16585 .          nf
16586 .          CLOSING
16587 .       \}
16588 .       ALD \\n[#DOC_LEAD]u*3u
16589 .       PRINT \\*[$AUTHOR_1]
16590 .    \}
16591 .    DO_FOOTER
16592 .END
16594 \# Set up a default papersize of US letter
16596 .PAPER LETTER
16598 \# ====================================================================
16600 \# +++DOCUMENT PROCESSING ALIASES+++
16602 \# Aliases to make life easier for users: synonyms, short forms
16603 \# and alternate spellings.
16605 .ALIAS   BREAK_BLOCKQUOTE    BREAK_QUOTE
16606 .ALIAS   BREAK_CITATION      BREAK_QUOTE
16607 .ALIAS   BREAK_CITE          BREAK_QUOTE
16608 .ALIAS   BLOCKQUOTE_INDENT   QUOTE_INDENT
16609 .ALIAS   CITATION            BLOCKQUOTE
16610 .ALIAS   CITATION_FAMILY     BLOCKQUOTE_FAMILY
16611 .ALIAS   CITATION_FONT       BLOCKQUOTE_FONT
16612 .ALIAS   CITATION_SIZE       BLOCKQUOTE_SIZE
16613 .ALIAS   CITATION_COLOR      BLOCKQUOTE_COLOR
16614 .ALIAS   CITATION_QUAD       BLOCKQUOTE_QUAD
16615 .ALIAS   CITE                BLOCKQUOTE
16616 .ALIAS   CITE_FAMILY         BLOCKQUOTE_FAMILY
16617 .ALIAS   CITE_FONT           BLOCKQUOTE_FONT
16618 .ALIAS   CITE_SIZE           BLOCKQUOTE_SIZE
16619 .ALIAS   CITE_COLOR          BLOCKQUOTE_COLOR
16620 .ALIAS   CITE_QUAD           BLOCKQUOTE_QUAD
16621 .ALIAS   DOC_R_MARGIN        DOC_RIGHT_MARGIN
16622 .ALIAS   DOC_L_MARGIN        DOC_LEFT_MARGIN
16623 .ALIAS   DOC_L_LENGTH        DOC_LINE_LENGTH
16624 .ALIAS   DOC_RMARGIN         DOC_RIGHT_MARGIN
16625 .ALIAS   DOC_LMARGIN         DOC_LEFT_MARGIN
16626 .ALIAS   DOC_LLENGTH         DOC_LINE_LENGTH
16627 .ALIAS   DOC_FAM             DOC_FAMILY
16628 .ALIAS   DOC_LS              DOC_LEAD
16629 .ALIAS   DOC_PS              DOC_PT_SIZE
16630 .ALIAS   FILL                QUAD
16631 .ALIAS   PAGENUM             PAGENUMBER
16632 .ALIAS   PAGINATION          PAGINATE
16633 .ALIAS   PP_FT               PP_FONT
16634 .ALIAS   REF_INDENT          INDENT_REFS
16635 .ALIAS   TOC_PS              TOC_PT_SIZE
16637 \# HEADER and FOOTER macros
16638 \# ------------------------
16639 \# Because the type-style of headers and footers are managed
16640 \# identically, and the type-style macros (_<type parameter>) all
16641 \# require the correct name of the calling macro, it's necessary
16642 \# to create HEADER_ and FOOTER_ macros here.  They're basically
16643 \# "aliases" of HDRFTR_, but required because you can't alias an
16644 \# alias.
16646 .MAC FOOTER_CENTER_COLOR END
16647 .    HDRFTR_CENTER_COLOR \\$1
16648 .END
16650 .MAC FOOTER_CENTER_COLOUR END
16651 .    HDRFTR_CENTER_COLOR \\$1
16652 .END
16654 .MAC FOOTER_CENTER_FAM END
16655 .    HDRFTR_CENTER_FAMILY \\$1
16656 .END
16658 .MAC FOOTER_CENTER_FAMILY END
16659 .    HDRFTR_CENTER_FAMILY \\$1
16660 .END
16662 .MAC FOOTER_CENTER_FONT END
16663 .    HDRFTR_CENTER_FONT \\$1
16664 .END
16666 .MAC FOOTER_CENTER_FT END
16667 .    HDRFTR_CENTER_FONT \\$1
16668 .END
16670 .MAC FOOTER_CENTER_PS END
16671 .    HDRFTR_CENTER_SIZE \\$1
16672 .END
16674 .MAC FOOTER_CENTER_SIZE END
16675 .    HDRFTR_CENTER_SIZE \\$1
16676 .END
16678 .MAC FOOTER_CENTRE_CAPS END
16679 .    HDRFTR_CENTER_CAPS \\$1
16680 .END
16682 .MAC FOOTER_CENTRE_COLOR END
16683 .    HDRFTR_CENTRE_COLOR \\$1
16684 .END
16686 .MAC FOOTER_CENTRE_COLOUR END
16687 .    HDRFTR_CENTRE_COLOR \\$1
16688 .END
16690 .MAC FOOTER_CENTRE_FAM END
16691 .    HDRFTR_CENTER_FAMILY \\$1
16692 .END
16694 .MAC FOOTER_CENTRE_FAMILY END
16695 .    HDRFTR_CENTER_FAMILY \\$1
16696 .END
16698 .MAC FOOTER_CENTRE_FONT END
16699 .    HDRFTR_CENTER_FONT \\$1
16700 .END
16702 .MAC FOOTER_CENTRE_FT END
16703 .    HDRFTR_CENTER_FONT \\$1
16704 .END
16706 .MAC FOOTER_CENTRE_PS END
16707 .    HDRFTR_CENTER_SIZE \\$1
16708 .END
16710 .MAC FOOTER_CENTRE_SIZE END
16711 .    HDRFTR_CENTER_SIZE \\$1
16712 .END
16714 .MAC FOOTER_COLOR END
16715 .    HDRFTR_COLOR \\$1
16716 .END
16718 .MAC FOOTER_COLOUR END
16719 .    HDRFTR_COLOR \\$1
16720 .END
16722 .MAC FOOTER_FAM END
16723 .    HDRFTR_FAMILY \\$1
16724 .END
16726 .MAC FOOTER_FAMILY END
16727 .    HDRFTR_FAMILY \\$1
16728 .END
16730 .MAC FOOTER_LEFT_COLOR END
16731 .    HDRFTR_LEFT_COLOR \\$1
16732 .END
16734 .MAC FOOTER_LEFT_COLOUR END
16735 .    HDRFTR_LEFT_COLOR \\$1
16736 .END
16738 .MAC FOOTER_LEFT_FAM END
16739 .    HDRFTR_LEFT_FAMILY \\$1
16740 .END
16742 .MAC FOOTER_LEFT_FAMILY END
16743 .    HDRFTR_LEFT_FAMILY \\$1
16744 .END
16746 .MAC FOOTER_LEFT_FONT END
16747 .    HDRFTR_LEFT_FONT \\$1
16748 .END
16750 .MAC FOOTER_LEFT_FT END
16751 .    HDRFTR_LEFT_FONT \\$1
16752 .END
16754 .MAC FOOTER_LEFT_PS END
16755 .    HDRFTR_LEFT_SIZE \\$1
16756 .END
16758 .MAC FOOTER_LEFT_SIZE END
16759 .    HDRFTR_LEFT_SIZE \\$1
16760 .END
16762 .MAC FOOTER_RIGHT_COLOR END
16763 .    HDRFTR_RIGHT_COLOR \\$1
16764 .END
16766 .MAC FOOTER_RIGHT_COLOUR END
16767 .    HDRFTR_RIGHT_COLOR \\$1
16768 .END
16770 .MAC FOOTER_RIGHT_FAM END
16771 .    HDRFTR_RIGHT_FAMILY \\$1
16772 .END
16774 .MAC FOOTER_RIGHT_FAMILY END
16775 .    HDRFTR_RIGHT_FAMILY \\$1
16776 .END
16778 .MAC FOOTER_RIGHT_FONT END
16779 .    HDRFTR_RIGHT_FONT \\$1
16780 .END
16782 .MAC FOOTER_RIGHT_FT END
16783 .    HDRFTR_RIGHT_FONT \\$1
16784 .END
16786 .MAC FOOTER_RIGHT_PS END
16787 .    HDRFTR_RIGHT_SIZE \\$1
16788 .END
16790 .MAC FOOTER_RIGHT_SIZE END
16791 .    HDRFTR_RIGHT_SIZE \\$1
16792 .END
16794 .MAC FOOTER_RULE_COLOR END
16795 .    HDRFTR_RULE_COLOR \\$1
16796 .END
16798 .MAC FOOTER_SIZE END
16799 .    HDRFTR_SIZE \\$1
16800 .END
16802 .MAC HEADER_CENTER_COLOR END
16803 .    HDRFTR_CENTER_COLOR \\$1
16804 .END
16806 .MAC HEADER_CENTER_COLOUR END
16807 .    HDRFTR_CENTER_COLOR \\$1
16808 .END
16810 .MAC HEADER_CENTER_FAM END
16811 .    HDRFTR_CENTER_FAMILY \\$1
16812 .END
16814 .MAC HEADER_CENTER_FAMILY END
16815 .    HDRFTR_CENTER_FAMILY \\$1
16816 .END
16818 .MAC HEADER_CENTER_FONT END
16819 .    HDRFTR_CENTER_FONT \\$1
16820 .END
16822 .MAC HEADER_CENTER_FT END
16823 .    HDRFTR_CENTER_FONT \\$1
16824 .END
16826 .MAC HEADER_CENTER_PS END
16827 .    HDRFTR_CENTER_SIZE \\$1
16828 .END
16830 .MAC HEADER_CENTER_SIZE END
16831 .    HDRFTR_CENTER_SIZE \\$1
16832 .END
16834 .MAC HEADER_CENTRE_COLOR END
16835 .    HDRFTR_CENTRE_COLOR \\$1
16836 .END
16838 .MAC HEADER_CENTRE_COLOUR END
16839 .    HDRFTR_CENTRE_COLOR \\$1
16840 .END
16842 .MAC HEADER_CENTRE_FAM END
16843 .    HDRFTR_CENTER_FAMILY \\$1
16844 .END
16846 .MAC HEADER_CENTRE_FAMILY END
16847 .    HDRFTR_CENTER_FAMILY \\$1
16848 .END
16850 .MAC HEADER_CENTRE_FONT END
16851 .    HDRFTR_CENTER_FONT \\$1
16852 .END
16854 .MAC HEADER_CENTRE_FT END
16855 .    HDRFTR_CENTER_FONT \\$1
16856 .END
16858 .MAC HEADER_CENTRE_PS END
16859 .    HDRFTR_CENTER_SIZE \\$1
16860 .END
16862 .MAC HEADER_CENTRE_SIZE END
16863 .    HDRFTR_CENTER_SIZE \\$1
16864 .END
16866 .MAC HEADER_COLOR END
16867 .    HDRFTR_COLOR \\$1
16868 .END
16870 .MAC HEADER_COLOUR END
16871 .    HDRFTR_COLOR \\$1
16872 .END
16874 .MAC HEADER_FAM END
16875 .    HDRFTR_FAMILY \\$1
16876 .END
16878 .MAC HEADER_FAMILY END
16879 .    HDRFTR_FAMILY \\$1
16880 .END
16882 .MAC HEADER_LEFT_COLOR END
16883 .    HDRFTR_LEFT_COLOR \\$1
16884 .END
16886 .MAC HEADER_LEFT_COLOUR END
16887 .    HDRFTR_LEFT_COLOR \\$1
16888 .END
16890 .MAC HEADER_LEFT_FAM END
16891 .    HDRFTR_LEFT_FAMILY \\$1
16892 .END
16894 .MAC HEADER_LEFT_FAMILY END
16895 .    HDRFTR_LEFT_FAMILY \\$1
16896 .END
16898 .MAC HEADER_LEFT_FONT END
16899 .    HDRFTR_LEFT_FONT \\$1
16900 .END
16902 .MAC HEADER_LEFT_FT END
16903 .    HDRFTR_LEFT_FONT \\$1
16904 .END
16906 .MAC HEADER_LEFT_PS END
16907 .    HDRFTR_LEFT_SIZE \\$1
16908 .END
16910 .MAC HEADER_LEFT_SIZE END
16911 .    HDRFTR_LEFT_SIZE \\$1
16912 .END
16914 .MAC HEADER_RIGHT_COLOR END
16915 .    HDRFTR_RIGHT_COLOR \\$1
16916 .END
16918 .MAC HEADER_RIGHT_COLOUR END
16919 .    HDRFTR_RIGHT_COLOR \\$1
16920 .END
16922 .MAC HEADER_RIGHT_FAM END
16923 .    HDRFTR_RIGHT_FAMILY \\$1
16924 .END
16926 .MAC HEADER_RIGHT_FAMILY END
16927 .    HDRFTR_RIGHT_FAMILY \\$1
16928 .END
16930 .MAC HEADER_RIGHT_FONT END
16931 .    HDRFTR_RIGHT_FONT \\$1
16932 .END
16934 .MAC HEADER_RIGHT_FT END
16935 .    HDRFTR_RIGHT_FONT \\$1
16936 .END
16938 .MAC HEADER_RIGHT_PS END
16939 .    HDRFTR_RIGHT_SIZE \\$1
16940 .END
16942 .MAC HEADER_RIGHT_SIZE END
16943 .    HDRFTR_RIGHT_SIZE \\$1
16944 .END
16946 .MAC HEADER_RULE_COLOR END
16947 .    HDRFTR_RULE_COLOR \\$1
16948 .END
16950 .MAC HEADER_SIZE END
16951 .    HDRFTR_SIZE \\$1
16952 .END
16954 \# HEADER and FOOTER aliases for HDRFTR macros.
16956 .ALIAS   BIBLIOGRAPHY_FOOTER_CENTER    BIBLIOGRAPHY_HDRFTR_CENTER
16957 .ALIAS   BIBLIOGRAPHY_FOOTER_CENTRE    BIBLIOGRAPHY_HDRFTR_CENTRE
16958 .ALIAS   BIBLIOGRAPHY_HEADER_CENTER    BIBLIOGRAPHY_HDRFTR_CENTER
16959 .ALIAS   BIBLIOGRAPHY_HEADER_CENTRE    BIBLIOGRAPHY_HDRFTR_CENTRE
16960 .ALIAS   ENDNOTES_FOOTER_CENTER    ENDNOTES_HDRFTR_CENTER
16961 .ALIAS   ENDNOTES_FOOTER_CENTRE    ENDNOTES_HDRFTR_CENTRE
16962 .ALIAS   ENDNOTES_HEADER_CENTER    ENDNOTES_HDRFTR_CENTER
16963 .ALIAS   ENDNOTES_HEADER_CENTRE    ENDNOTES_HDRFTR_CENTRE
16964 .ALIAS   FOOTER_CENTER_CAPS        HDRFTR_CENTER_CAPS
16965 .ALIAS   FOOTER_CENTER             HDRFTR_CENTER
16966 .ALIAS   FOOTER_CENTER_PAD         HDRFTR_CENTER_PAD
16967 .ALIAS   FOOTER_CENTRE             HDRFTR_CENTER
16968 .ALIAS   FOOTER_CENTRE_PAD         HDRFTR_CENTER_PAD
16969 .ALIAS   FOOTER_LEFT_CAPS          HDRFTR_LEFT_CAPS
16970 .ALIAS   FOOTER_LEFT               HDRFTR_LEFT
16971 .ALIAS   FOOTER_PLAIN              HDRFTR_PLAIN
16972 .ALIAS   FOOTER_RECTO              HDRFTR_RECTO
16973 .ALIAS   FOOTER_RIGHT_CAPS         HDRFTR_RIGHT_CAPS
16974 .ALIAS   FOOTER_RIGHT              HDRFTR_RIGHT
16975 .ALIAS   FOOTER_RULE_GAP           HDRFTR_RULE_GAP
16976 .ALIAS   FOOTER_RULE               HDRFTR_RULE
16977 .ALIAS   FOOTER_VERSO              HDRFTR_VERSO
16978 .ALIAS   HEADER_CENTER_CAPS        HDRFTR_CENTER_CAPS
16979 .ALIAS   HEADER_CENTER             HDRFTR_CENTER
16980 .ALIAS   HEADER_CENTER_PAD         HDRFTR_CENTER_PAD
16981 .ALIAS   HEADER_CENTRE_CAPS        HDRFTR_CENTER_CAPS
16982 .ALIAS   HEADER_CENTRE             HDRFTR_CENTER
16983 .ALIAS   HEADER_CENTRE_PAD         HDRFTR_CENTER_PAD
16984 .ALIAS   HEADER_LEFT_CAPS          HDRFTR_LEFT_CAPS
16985 .ALIAS   HEADER_LEFT               HDRFTR_LEFT
16986 .ALIAS   HEADER_PLAIN              HDRFTR_PLAIN
16987 .ALIAS   HEADER_RECTO              HDRFTR_RECTO
16988 .ALIAS   HEADER_RIGHT_CAPS         HDRFTR_RIGHT_CAPS
16989 .ALIAS   HEADER_RIGHT              HDRFTR_RIGHT
16990 .ALIAS   HEADER_RULE_GAP           HDRFTR_RULE_GAP
16991 .ALIAS   HEADER_RULE               HDRFTR_RULE
16992 .ALIAS   HEADER_VERSO              HDRFTR_VERSO
16993 .ALIAS   SWITCH_FOOTERS            SWITCH_HDRFTR
16994 .ALIAS   SWITCH_HEADERS            SWITCH_HDRFTR
16996 \# Type-style aliases
16998 .ALIAS   AUTHOR_FAMILY                    _FAMILY
16999 .ALIAS   BIBLIOGRAPHY_FAMILY              _FAMILY
17000 .ALIAS   BIBLIOGRAPHY_STRING_FAMILY       _FAMILY
17001 .ALIAS   BLOCKQUOTE_FAMILY                _FAMILY
17002 .ALIAS   CHAPTER_TITLE_FAMILY             _FAMILY
17003 .ALIAS   COVER_AUTHOR_FAMILY              _FAMILY
17004 .ALIAS   COVER_CHAPTER_TITLE_FAMILY       _FAMILY
17005 .ALIAS   COVER_COPYRIGHT_FAMILY           _FAMILY
17006 .ALIAS   COVER_DOCTYPE_FAMILY             _FAMILY
17007 .ALIAS   COVER_FAMILY                     _FAMILY
17008 .ALIAS   COVER_SUBTITLE_FAMILY            _FAMILY
17009 .ALIAS   COVER_TITLE_FAMILY               _FAMILY
17010 .ALIAS   DOC_COVER_AUTHOR_FAMILY          _FAMILY
17011 .ALIAS   DOC_COVER_CHAPTER_TITLE_FAMILY   _FAMILY
17012 .ALIAS   DOC_COVER_COPYRIGHT_FAMILY       _FAMILY
17013 .ALIAS   DOC_COVER_DOCTYPE_FAMILY         _FAMILY
17014 .ALIAS   DOC_COVER_FAMILY                 _FAMILY
17015 .ALIAS   DOC_COVER_SUBTITLE_FAMILY        _FAMILY
17016 .ALIAS   DOC_COVER_TITLE_FAMILY           _FAMILY
17017 .ALIAS   DOCHEADER_FAMILY                 _FAMILY
17018 .ALIAS   DOCTYPE_FAMILY                   _FAMILY
17019 .ALIAS   ENDNOTE_FAMILY                   _FAMILY
17020 .ALIAS   ENDNOTE_NUMBER_FAMILY            _FAMILY
17021 .ALIAS   ENDNOTE_LINENUMBER_FAMILY        _FAMILY
17022 .ALIAS   ENDNOTE_STRING_FAMILY            _FAMILY
17023 .ALIAS   ENDNOTE_TITLE_FAMILY             _FAMILY
17024 .ALIAS   EPIGRAPH_FAMILY                  _FAMILY
17025 .ALIAS   FOOTNOTE_FAMILY                  _FAMILY
17026 .ALIAS   HDRFTR_CENTER_FAMILY             _FAMILY
17027 .ALIAS   HDRFTR_FAMILY                    _FAMILY
17028 .ALIAS   HDRFTR_LEFT_FAMILY               _FAMILY
17029 .ALIAS   HDRFTR_RIGHT_FAMILY              _FAMILY
17030 .ALIAS   HEAD_FAMILY                      _FAMILY
17031 .ALIAS   LINENUMBER_FAMILY                _FAMILY
17032 .ALIAS   PAGENUM_FAMILY                   _FAMILY
17033 .ALIAS   PARAHEAD_FAMILY                  _FAMILY
17034 .ALIAS   QUOTE_FAMILY                     _FAMILY
17035 .ALIAS   SUBHEAD_FAMILY                   _FAMILY
17036 .ALIAS   SUBTITLE_FAMILY                  _FAMILY
17037 .ALIAS   TITLE_FAMILY                     _FAMILY
17038 .ALIAS   TOC_FAM                          _FAMILY
17039 .ALIAS   TOC_FAMILY                       _FAMILY
17040 .ALIAS   TOC_HEADER_FAMILY                _FAMILY
17041 .ALIAS   TOC_HEAD_FAMILY                  _FAMILY
17042 .ALIAS   TOC_PARAHEAD_FAMILY              _FAMILY
17043 .ALIAS   TOC_PN_FAMILY                    _FAMILY
17044 .ALIAS   TOC_SUBHEAD_FAMILY               _FAMILY
17045 .ALIAS   TOC_TITLE_FAMILY                 _FAMILY
17047 .ALIAS   AUTHOR_FONT                    _FONT
17048 .ALIAS   BIBLIOGRAPHY_STRING_FONT       _FONT
17049 .ALIAS   BIBLIOGRAPHY_FONT              _FONT
17050 .ALIAS   BLOCKQUOTE_FONT                _FONT
17051 .ALIAS   CHAPTER_TITLE_FONT             _FONT
17052 .ALIAS   COVER_AUTHOR_FONT              _FONT
17053 .ALIAS   COVER_CHAPTER_TITLE_FONT       _FONT
17054 .ALIAS   COVER_COPYRIGHT_FONT           _FONT
17055 .ALIAS   COVER_DOCTYPE_FONT             _FONT
17056 .ALIAS   COVER_SUBTITLE_FONT            _FONT
17057 .ALIAS   COVER_TITLE_FONT               _FONT
17058 .ALIAS   DOC_COVER_AUTHOR_FONT          _FONT
17059 .ALIAS   DOC_COVER_CHAPTER_TITLE_FONT   _FONT
17060 .ALIAS   DOC_COVER_COPYRIGHT_FONT       _FONT
17061 .ALIAS   DOC_COVER_DOCTYPE_FONT         _FONT
17062 .ALIAS   DOC_COVER_SUBTITLE_FONT        _FONT
17063 .ALIAS   DOC_COVER_TITLE_FONT           _FONT
17064 .ALIAS   DOCTYPE_FONT                   _FONT
17065 .ALIAS   ENDNOTE_FONT                   _FONT
17066 .ALIAS   ENDNOTE_NUMBER_FONT            _FONT
17067 .ALIAS   ENDNOTE_LINENUMBER_FONT        _FONT
17068 .ALIAS   ENDNOTE_STRING_FONT            _FONT
17069 .ALIAS   ENDNOTE_TITLE_FONT             _FONT
17070 .ALIAS   EPIGRAPH_FONT                  _FONT
17071 .ALIAS   FOOTNOTE_FONT                  _FONT
17072 .ALIAS   HDRFTR_CENTER_FONT             _FONT
17073 .ALIAS   HDRFTR_LEFT_FONT               _FONT
17074 .ALIAS   HDRFTR_RIGHT_FONT              _FONT
17075 .ALIAS   HEAD_FONT                      _FONT
17076 .ALIAS   LINENUMBER_FONT                _FONT
17077 .ALIAS   PAGENUM_FONT                   _FONT
17078 .ALIAS   PARAHEAD_FONT                  _FONT
17079 .ALIAS   QUOTE_FONT                     _FONT
17080 .ALIAS   SUBHEAD_FONT                   _FONT
17081 .ALIAS   SUBTITLE_FONT                  _FONT
17082 .ALIAS   TITLE_FONT                     _FONT
17083 .ALIAS   TOC_HEADER_FONT                _FONT
17084 .ALIAS   TOC_HEAD_FONT                  _FONT
17085 .ALIAS   TOC_PARAHEAD_FONT              _FONT
17086 .ALIAS   TOC_PN_FONT                    _FONT
17087 .ALIAS   TOC_SUBHEAD_FONT               _FONT
17088 .ALIAS   TOC_TITLE_FONT                 _FONT
17090 .ALIAS   AUTHOR_SIZE                    _SIZE
17091 .ALIAS   BIBLIOGRAPHY_STRING_SIZE       _SIZE
17092 .ALIAS   BLOCKQUOTE_SIZE                _SIZE
17093 .ALIAS   CHAPTER_TITLE_SIZE             _SIZE
17094 .ALIAS   COVER_AUTHOR_SIZE              _SIZE
17095 .ALIAS   COVER_CHAPTER_TITLE_SIZE       _SIZE
17096 .ALIAS   COVER_COPYRIGHT_SIZE           _SIZE
17097 .ALIAS   COVER_DOCTYPE_SIZE             _SIZE
17098 .ALIAS   COVER_SUBTITLE_SIZE            _SIZE
17099 .ALIAS   COVER_TITLE_SIZE               _SIZE
17100 .ALIAS   DOC_COVER_AUTHOR_SIZE          _SIZE
17101 .ALIAS   DOC_COVER_CHAPTER_TITLE_SIZE   _SIZE
17102 .ALIAS   DOC_COVER_COPYRIGHT_SIZE       _SIZE
17103 .ALIAS   DOC_COVER_DOCTYPE_SIZE         _SIZE
17104 .ALIAS   DOC_COVER_SUBTITLE_SIZE        _SIZE
17105 .ALIAS   DOC_COVER_TITLE_SIZE           _SIZE
17106 .ALIAS   DOCTYPE_SIZE                   _SIZE
17107 .ALIAS   ENDNOTE_NUMBER_SIZE            _SIZE
17108 .ALIAS   ENDNOTE_LINENUMBER_SIZE        _SIZE
17109 .ALIAS   ENDNOTE_STRING_SIZE            _SIZE
17110 .ALIAS   ENDNOTE_TITLE_SIZE             _SIZE
17111 .ALIAS   EPIGRAPH_SIZE                  _SIZE
17112 .ALIAS   FOOTNOTE_SIZE                  _SIZE
17113 .ALIAS   HDRFTR_CENTER_SIZE             _SIZE
17114 .ALIAS   HDRFTR_LEFT_SIZE               _SIZE
17115 .ALIAS   HDRFTR_RIGHT_SIZE              _SIZE
17116 .ALIAS   HDRFTR_SIZE                    _SIZE
17117 .ALIAS   HEAD_SIZE                      _SIZE
17118 .ALIAS   LINENUMBER_SIZE                _SIZE
17119 .ALIAS   PAGENUM_SIZE                   _SIZE
17120 .ALIAS   PARAHEAD_SIZE                  _SIZE
17121 .ALIAS   QUOTE_SIZE                     _SIZE
17122 .ALIAS   SUBHEAD_SIZE                   _SIZE
17123 .ALIAS   SUBTITLE_SIZE                  _SIZE
17124 .ALIAS   TITLE_SIZE                     _SIZE
17125 .ALIAS   TOC_HEADER_SIZE                _SIZE
17126 .ALIAS   TOC_HEAD_SIZE                  _SIZE
17127 .ALIAS   TOC_PARAHEAD_SIZE              _SIZE
17128 .ALIAS   TOC_PN_SIZE                    _SIZE
17129 .ALIAS   TOC_SUBHEAD_SIZE               _SIZE
17130 .ALIAS   TOC_TITLE_SIZE                 _SIZE
17132 .ALIAS   ATTRIBUTE_COLOR                 _COLOR
17133 .ALIAS   AUTHOR_COLOR                    _COLOR
17134 .ALIAS   BLOCKQUOTE_COLOR                _COLOR
17135 .ALIAS   CHAPTER_TITLE_COLOR             _COLOR
17136 .ALIAS   COVER_ATTRIBUTE_COLOR           _COLOR
17137 .ALIAS   COVER_AUTHOR_COLOR              _COLOR
17138 .ALIAS   COVER_CHAPTER_TITLE_COLOR       _COLOR
17139 .ALIAS   COVER_COLOR                     _COLOR
17140 .ALIAS   COVER_COPYRIGHT_COLOR           _COLOR
17141 .ALIAS   COVER_DOCTYPE_COLOR             _COLOR
17142 .ALIAS   COVER_MISC_COLOR                _COLOR
17143 .ALIAS   COVER_SUBTITLE_COLOR            _COLOR
17144 .ALIAS   COVER_TITLE_COLOR               _COLOR
17145 .ALIAS   DOC_COVER_ATTRIBUTE_COLOR       _COLOR
17146 .ALIAS   DOC_COVER_AUTHOR_COLOR          _COLOR
17147 .ALIAS   DOC_COVER_CHAPTER_TITLE_COLOR   _COLOR
17148 .ALIAS   DOC_COVER_COLOR                 _COLOR
17149 .ALIAS   DOC_COVER_COPYRIGHT_COLOR       _COLOR
17150 .ALIAS   DOC_COVER_DOCTYPE_COLOR         _COLOR
17151 .ALIAS   DOC_COVER_MISC_COLOR            _COLOR
17152 .ALIAS   DOC_COVER_SUBTITLE_COLOR        _COLOR
17153 .ALIAS   DOC_COVER_TITLE_COLOR           _COLOR
17154 .ALIAS   DOCHEADER_COLOR                 _COLOR
17155 .ALIAS   DOCTYPE_COLOR                   _COLOR
17156 .ALIAS   EPIGRAPH_COLOR                  _COLOR
17157 .ALIAS   FINIS_COLOR                     _COLOR
17158 .ALIAS   FOOTNOTE_COLOR                  _COLOR
17159 .ALIAS   HDRFTR_CENTER_COLOR             _COLOR
17160 .ALIAS   HDRFTR_COLOR                    _COLOR
17161 .ALIAS   HDRFTR_LEFT_COLOR               _COLOR
17162 .ALIAS   HDRFTR_RIGHT_COLOR              _COLOR
17163 .ALIAS   HDRFTR_RULE_COLOR               _COLOR
17164 .ALIAS   HEAD_COLOR                      _COLOR
17165 .ALIAS   LINEBREAK_COLOR                 _COLOR
17166 .ALIAS   LINENUMBER_COLOR                _COLOR
17167 .ALIAS   PAGENUM_COLOR                   _COLOR
17168 .ALIAS   PARAHEAD_COLOR                  _COLOR
17169 .ALIAS   QUOTE_COLOR                     _COLOR
17170 .ALIAS   SUBHEAD_COLOR                   _COLOR
17171 .ALIAS   SUBTITLE_COLOR                  _COLOR
17172 .ALIAS   TITLE_COLOR                     _COLOR
17174 .ALIAS   BIBLIOGRAPHY_QUAD          _QUAD
17175 .ALIAS   BIBLIOGRAPHY_STRING_QUAD   _QUAD
17176 .ALIAS   BLOCKQUOTE_QUAD            _QUAD
17177 .ALIAS   COVER_COPYRIGHT_QUAD       _QUAD
17178 .ALIAS   COVER_MISC_QUAD            _QUAD
17179 .ALIAS   DOC_COVER_COPYRIGHT_QUAD   _QUAD
17180 .ALIAS   DOC_COVER_MISC_QUAD        _QUAD
17181 .ALIAS   DOC_QUAD                   _QUAD
17182 .ALIAS   ENDNOTE_QUAD               _QUAD
17183 .ALIAS   ENDNOTE_STRING_QUAD        _QUAD
17184 .ALIAS   ENDNOTE_TITLE_QUAD         _QUAD
17185 .ALIAS   EPIGRAPH_QUAD              _QUAD
17186 .ALIAS   FOOTNOTE_QUAD              _QUAD
17187 .ALIAS   HEAD_QUAD                  _QUAD
17188 .ALIAS   SUBHEAD_QUAD               _QUAD
17189 .ALIAS   TOC_HEADER_QUAD            _QUAD
17191 \# Support aliases
17193 .ALIAS   COL_BREAK             COL_NEXT
17194 .ALIAS   DOC_COVER_ADVANCE     COVER_ADVANCE
17195 .ALIAS   DOC_COVER             COVER
17196 .ALIAS   DOC_COVERS            COVERS
17197 .ALIAS   DOC_COVER_LEAD        COVER_LEAD
17198 .ALIAS   DOC_COVERTITLE        COVERTITLE
17199 .ALIAS   DO_DOC_COVER          DO_COVER
17200 .ALIAS   PRINT_FOOTNOTE_RULE   FOOTNOTE_RULE
17202 \# Miscellaneous aliases
17203 .ALIAS  SECTION       LINEBREAK
17204 .ALIAS  SECTION_CHAR  LINEBREAK_CHAR
17206 \# Miscellaneous macros to take care of backward compatibility
17207 \# -----------------------------------------------------------
17209 \# As of 1.1.9, EL and TN got changed to make TRAP...TRAP OFF
17210 \# unnecessary for users.  However, I used both macros extensively
17211 \# throughout this file (in conjunction with TRAP...TRAP OFF).
17212 \# EOL is the "old" EL, for the personal use of om.tmac
17214 .MAC EOL END
17215 .    TRAP OFF
17216 .    br
17217 .    sp -1v
17218 .    TRAP
17219 .END
17221 \# REFER SUPPORT
17222 \# -------------
17224 \# Footnote references
17225 \# -------------------
17226 \# *Function:
17227 \#   Instruct REF to put references in footnotes.
17229 .MAC FOOTNOTE_REFS END
17230 .    if r#EN_REF \{ .rr #EN_REF \}
17231 .    nr #FN_REF 1
17232 .END
17234 \# Endnote references
17235 \# ------------------
17236 \# *Function:
17237 \#   Instruct REF to collect references for endnotes output.
17239 .MAC ENDNOTE_REFS END
17240 .    if r#FN_REF \{ .rr #FN_REF \}
17241 .    nr #EN_REF 1
17242 .END
17244 \# Prepare mom for a reference
17245 \# ---------------------------
17246 \# *Argument:
17247 \#   <none> | INDENT  L|LEFT|R|RIGHT|B|BOTH  <indent value>
17248 \# *Function:
17249 \#   Calls FOOTNOTE or ENDNOTE, depending on whether #REF_FN or
17250 \#   #REF_EN is set to 1.
17251 \# *Notes:
17252 \#   For convenience, REF is a toggle.
17254 \#   REF optionally takes the same arguments as FOOTNOTE, allowing
17255 \#   users to indent references that go in footnotes when footnote
17256 \#   indenting is required.  FOOTNOTE_REFS must be on for this.
17258 .MAC REF END
17259 .    ie \\n[#FN_REF]+\\n[#EN_REF]=0 \{\
17260 .       if !\\n[#REF_WARNING]=1 \{\
17261 .          tm1 "[mom]: Before REF at line \\n(.c, neither FOOTNOTE_REFS nor ENDNOTE_REFS
17262 .          tm1 "       has been selected.  If "sort" and "accumulate" are in your refer
17263 .          tm1 "       commands, references will be collected for later output with $LIST$.
17264 .          tm1 "       Otherwise, they will disappear.
17265 .          nr #REF_WARNING 1
17266 .       \}
17267 .    \}
17268 .    el \{\
17269 .       ie \\n[#REF]=1 \{\
17270 .          if \\n[#FN_REF]=1 \{ .FOOTNOTE OFF \}
17271 .          if \\n[#EN_REF]=1 \{ .ENDNOTE OFF  \}
17272 .          rr #REF
17273 .       \}
17274 .       el \{\
17275 .          rr #REF_WARNING
17276 .          nr #REF 1
17277 .          if \\n[#FN_REF]=1 \{ .FOOTNOTE \\$1 \\$2 \\$3 \}
17278 .          if \\n[#EN_REF]=1 \{ .ENDNOTE  \}
17279 .       \}
17280 .    \}
17281 .END
17283 \# Embedded references in text (with brackets)
17284 \# -------------------------------------------
17286 .MAC REF_BRACKETS_START END
17287 .    ds $CURRENT_EV \\n[.ev]
17288 .    ev REFERENCE
17289 .    evc  \\*[$CURRENT_EV]
17290 .    di REFERENCE
17291 .END
17293 .MAC REF_BRACKETS_END END
17294 .    br
17295 .    di
17296 .    ev
17297 .    chop REFERENCE
17298 .    unformat REFERENCE
17299 .    if '\\$0'REF)' \{ .nop (\\*[REFERENCE]) \}
17300 .    if '\\$0'REF]' \{ .nop [\\*[REFERENCE]] \}
17301 .    if '\\$0'REF}' \{ .nop {\\*[REFERENCE]} \}
17302 .END
17304 \# These three pairs of aliases allow users to embed references in
17305 \# text and have them surrounded by (), [] or {}.
17307 .ALIAS REF( REF_BRACKETS_START
17308 .ALIAS REF) REF_BRACKETS_END
17310 .ALIAS REF[ REF_BRACKETS_START
17311 .ALIAS REF{ REF_BRACKETS_START
17313 .ALIAS REF} REF_BRACKETS_END
17314 .ALIAS REF] REF_BRACKETS_END
17316 \# Second-line indent for refs
17317 \# ---------------------------
17318 \# *Argument:
17319 \#   FOOTNOTE | ENDNOTE | BIBLIO <indent for 2nd and subsequent lines of discrete reference entries>
17320 \# *Function:
17321 \#   Sets strings $REF_FN_INDENT, $REF_EN_INDENT or $REF_BIB_INDENT.
17322 \# *Notes:
17323 \#   Indent value requires a unit of measure.
17325 .MAC INDENT_REFS END
17326 .    if '\\$1'FOOTNOTE' .ds $REF_FN_INDENT \\$2
17327 .    if '\\$1'ENDNOTE'  .ds $REF_EN_INDENT \\$2
17328 .    if '\\$1'BIBLIO'   .ds $REF_BIB_INDENT \\$2
17329 .END
17331 \# Hyphenation of references
17332 \# -------------------------
17333 \# *Argument:
17334 \#   <none> | <anything>
17335 \# *Function:
17336 \#   Sets register #REF_HY
17338 .MAC HYPHENATE_REFS END
17339 .    ie '\\$1'' \{ .nr #REF_HY 1 \}
17340 .    el \{\
17341 .       if r#REF_HY \{ .rr #REF_HY \}
17342 .    \}
17343 .END
17345 \# The remainder of the definitions in this section are modified
17346 \# versions of the definitions found in the refer module of s.tmac.
17348 \# This one is directly from s.tmac.
17350 .de @error
17351 .tm \\n(.F:\\n(.c: macro error: \\$*
17354 \# The following strings define the order of entries for different
17355 \# types of references.  Each letter in the string refers to a database
17356 \# field (A for author, T1/T2 for article and book titles, etc).
17357 \# Mom is set up for MLA-style bibliographies.  Other styles can be
17358 \# implemented here by re-ordering the fields.
17360 \# Book - type 2
17361 .ds ref*spec!2 Q A T1 d t l r E S e V a C I D P O
17362 \# Article within book - type 3
17363 .ds ref*spec!3 Q A T2 B d t l r E S e V a C I D P O
17364 \# Journal article - type 1
17365 .ds ref*spec!1 Q A T2 J S N D P O
17366 \# Tech report - type 4
17367 .ds ref*spec!4 Q A T1 R G C I D P O
17368 \# Internet site - type 0
17369 .ds ref*spec!0 Q A T2 s E c d o a u O
17371 \# Refer's "1st" macro.  Since it is possible to define database
17372 \# fields using any single letter, we remove all possible string
17373 \# definitions of the form [X and [x
17375 .de ]-
17376 .rm [A [B [C [D [E [F [G [H [I [J [K [L [M \
17377     [N [O [P [Q [R [S [T [U [V [W [X [Y [Z \
17378 .   [a [b [c [d [e [f [g [h [i [j [k [l [m \
17379     [n [o [p [q [r [s [t [u [v [w [x [y [z
17380 .rm ref*string
17381 .rr ref*type
17384 \# Refer's "2nd" macro; builds up a reference with ref*build, and
17385 \# prints it with ref*print.
17387 .de ][
17388 .nr ref*type \\$1
17389 .if \\n[ref*type]=3 \{\
17390 .   if !'\\*([R'' \{\
17391 .      nr ref*type 4
17392 .      ds ref*spec!4 Q A T2 B R C I D P O
17393 .   \}
17394 .   if !'\\*([G'' \{\
17395 .      nr ref*type 4
17396 .      ds ref*spec!4 Q A T2 B G C I D P O
17397 .   \}
17399 .if r [T \{\
17400 .   als [T1 [T
17401 .   als [T2 [T
17403 .ie d ref*spec!\\n[ref*type] .ref*build \\*[ref*spec!\\n[ref*type]]
17404 .el \{\
17405 .   @error unknown reference type `\\n[ref*type]'
17406 .   ref*build \\*[ref*spec!0]
17408 .if !\\n[.hy]=0 \{\
17409 .nr #RESTORE_HY \\n[.hy]
17410 .if !r#REF_HY .nh
17412 .ref*print
17413 .if !\\n[#RESTORE_HY]=0 .hy \\n[#RESTORE_HY]
17414 .rr #RESTORE_HY
17415 .rm ref*string
17416 .rm [F [T1 [T2
17419 \# Refer's "3rd" macros, which set up and terminate the output
17420 \# of collected references
17422 .de ]<
17423 .als ref*print ref*end-print
17424 .nr #REF 1
17425 .if \\n[#BIB_LIST]=1 \{\
17426 .   nr #IN_BIB_LIST 1
17427 .   LIST DIGIT \\*[$BIB_LIST_SEPARATOR] \\*[$BIB_LIST_PREFIX]
17431 .de ]>
17432 .LIST OFF
17433 .rr #REF
17434 .rr #IN_BIB_LIST
17435 .als ref*print ref*normal-print
17438 \# Output
17439 \# ------
17441 \# Output normal, non-collected refs
17443 .de ref*normal-print
17444 .nr #CURRENT_HY \\n[.hy]
17445 \\*[ref*string]
17448 \# Output collected refs
17450 .de ref*end-print
17451 .\" 10 is abritrary
17452 .nn 10
17453 .ie \\n[#BIB_LIST]=0 \{\
17454 .in +\\*[$REF_BIB_INDENT]
17455 .ti -\\*[$REF_BIB_INDENT]
17457 .el .ITEM
17458 \\*[ref*string]
17459 .sp \\n[#BIB_SPACE]u
17460 .ie \\n[#BIB_LIST]=0 .in
17461 .el .IL -\\*[$REF_BIB_INDENT]u
17462 .nn 0
17465 .als ref*print ref*normal-print
17467 \# Build up the ref*string
17469 \# Correct MLA "typewritten" style (printstyle TYPEWRITE) demands
17470 \# two spaces after each period.  The spaces are hardwired into the
17471 \# string definitions (ref*add-<x>), so we have to make sure that there
17472 \# aren't two spaces when the printstyle is TYPESET.  Since I find that
17473 \# references look a bit crowded with 0 sentence space, I've bumped it
17474 \# up to +4.  User's sentence spacing is reset in FOOTNOTES and ENDNOTES.
17476 .de ref*build
17477 .if \\n[#PRINT_STYLE]=2 \{\
17478 .   ds $RESTORE_SS_VAR \\*[$SS_VAR]
17479 .   SS +4
17481 \#.rm ref*string ref*post-punct
17482 .rm ref*string
17483 .nr ref*suppress-period 1
17484 .while \\n[.$] \{\
17485 .   if d [\\$1 \{\
17486 .      ie d ref*add-\\$1 .ref*add-\\$1
17487 .      el .ref*add-dflt \\$1
17488 .   \}
17489 .   shift
17491 .\" now add a final period
17492 .ie d ref*string \{\
17493 .   if !\\n[ref*suppress-period] .as ref*string .
17494 .   if d ref*post-punct \{\
17495 .      as ref*string "\\*[ref*post-punct]
17496 .      rm ref*post-punct
17497 .   \}
17499 .el .ds ref*string
17502 \# The following macros determine how entries are formatted WRT
17503 \# punctuation, type style, additional strings, etc.
17505 \# o First argument is the database field letter.
17506 \# o Second argument is the punctuation character to use to separate this
17507 \#   field from the previous field.
17508 \# o Third argument is a string with which to prefix this field.
17509 \# o Fourth argument is a string with which to postfix this field.
17510 \# o Fifth argument is a string to add after the punctuation character
17511 \#   supplied by the next field.
17513 \# %A Author(s)
17514 .de ref*add-A
17515 .ref*field A ,
17516 .if r [A .nr ref*suppress-period \\n([A
17518 \# %T Title (generic)
17519 .de ref*add-T1
17520 .ref*field T . " \E*[IT]" "" \E*[PREV]
17521 .if \\n([T .nr ref*suppress-period \\n([T
17523 \# %T Title of a chapter or article
17524 .de ref*add-T2
17525 .ref*field T . " \(lq" "" "\(rq"
17526 .if \\n([T .nr ref*suppress-period \\n([T
17528 \# %B Book title (when citing an article from a book)
17529 .de ref*add-B
17530 .ie \\n([T .ref*field B "" ".\E*[IT]" "" \E*[PREV]
17531 .el .ref*field B . " \E*[IT]" "" \E*[PREV]
17532 \# refer doesn't set reg [T to 1 for these book titles, so we do it here
17533 .ds eval*[B \\*([B
17534 .substring eval*[B -1
17535 .rr [T
17536 .if '\\*[eval*[B]'!' .nr [T 1
17537 .if '\\*[eval*[B]'?' .nr [T 1
17538 .rm eval*[B
17540 \# %R Report number for technical reports
17541 .de ref*add-R
17542 .ref*field R . " "
17544 \# %J Journal name
17545 .de ref*add-J
17546 .ie \\n([T .ref*field J "" " \E*[IT]" "" \E*[PREV]
17547 .el .ref*field J . " \E*[IT]" "" \E*[PREV]
17549 \# %E Editor(s)
17550 .de ref*add-E
17551 .ie !\\n[ref*type]=0 \{\
17552 .   ie \\n([E>0 \{\
17553 .      ie \\n([T .ref*field E "" " Eds. "
17554 .      el .ref*field E . " Eds. "
17555 .   \}
17556 .   el \{\
17557 .      ie \\n([T .ref*field E "" " Ed. "
17558 .      el .ref*field E . " Ed. "
17559 .   \}
17561 .el \{\
17562 .   ie \\n([T .ref*field E "" " "
17563 .   el .ref*field E . " "
17565 .rr [T
17567 \# %e Edition
17568 .de ref*add-e
17569 .ie \\n([T .ref*field e "" " " " edition"
17570 .el .ref*field e . " " " edition"
17571 .rr [T
17573 \# %V Volume (of a journal, or series of books)
17574 .de ref*add-V
17575 .if \\n[ref*type]=1 \{\
17576 .   ref*field V 
17578 .if \\n[ref*type]=2 \{\
17579 .   ie \\n([T .ref*field V "" " "
17580 .   el .ref*field V . " "
17582 .if \\n[ref*type]=3 \{\
17583 .   ie \\n([T .ref*field V "" " "
17584 .   el .ref*field V . " "
17586 .rr [T
17588 \# %N Journal number
17589 .de ref*add-N
17590 .ref*field N 
17592 \# %S Series (books or journals)
17593 .de ref*add-S
17594 .if \\n[ref*type]=1 \{\
17595 .   ref*field S
17597 .if \\n[ref*type]=2 \{\
17598 .   ie \\n([T .ref*field S "" " "
17599 .   el .ref*field S . " "
17601 .if \\n[ref*type]=3 \{\
17602 .   ie \\n([T .ref*field S "" " "
17603 .   el .ref*field S . " "
17605 .rr [T
17606 \# refer doesn't set reg [T to 1 for series titles, so we do it here
17607 .ds eval*[S \\*([S
17608 .substring eval*[S -1
17609 .if '\\*[eval*[S]'!' .nr [T 1
17610 .if '\\*[eval*[S]'?' .nr [T 1
17611 .rm eval*[S
17613 \# %C City
17614 .de ref*add-C
17615 .ie \\n([T .ref*field C "" " "
17616 .el .ref*field C . " "
17617 .rr [T
17619 \# %I Publisher (I stands for Issuer)
17620 .de ref*add-I
17621 .ie !'\\*([C'' .ref*field I :
17622 .el \{\
17623 .   ie \\n([T .ref*field I "" " "
17624 .   el .ref*field I . " "
17626 .rr [T
17628 \# %D Date of publication
17629 .de ref*add-D
17630 .if \\n[ref*type]=1 \{\
17631 .   ie !'\\*([V''.ref*field D "" "(" ")"
17632 .   el .ref*field D
17634 .if \\n[ref*type]=2 .ref*field D ,
17635 .if \\n[ref*type]=3 \{\
17636 .   ie '\\*([C'' \{\
17637 .      ie '\\*([I'' .ref*field D . " "
17638 .      el .ref*field D ,
17639 .   \}
17640 .   el .ref*field D ,
17642 .if \\n[ref*type]=4 .ref*field D ,
17644 \# %P Page number(s)
17645 .de ref*add-P
17646 .ie \\n[ref*type]=1 .ref*field P : 
17647 .el .ref*field P . " "
17649 \# %G Gov't. ordering number
17650 .de ref*add-G
17651 .ref*field G . " "
17653 \# %O Other (usually goes at end of ref)
17654 .de ref*add-O
17655 .ref*field O . " "
17656 .ie r [O .nr ref*suppress-period \\n([O
17657 .el .nr ref*suppress-period 1
17660 .de ref*add-dflt
17661 .ref*field \\$1 ,
17664 \# Book reprints
17665 \# -------------
17666 \# %d date of publication (the orignal date of publication)
17667 .de ref*add-d
17668 .ie \\n([T .ref*field d "" " "
17669 .el .ref*field d . " "
17670 .rr [T
17672 \# %a additions (such as a new intro to reprints)
17673 .de ref*add-a
17674 .ie \\n([T .ref*field a "" " "
17675 .el .ref*field a . " "
17676 .rr [T
17678 \# %t title, if different from original title (the T field, which s/b
17679 \# the original title)
17680 .de ref*add-t
17681 .ie \\n([T .ref*field t "" " Rpt. as \E*[IT]" "" \E*[PREV]
17682 .el .ref*field t . " Rpt. as \E*[IT]" "" \E*[PREV]
17683 .rr [T
17686 \# Translated works
17687 \# ----------------
17688 \# %l Trans(l)ator
17689 .de ref*add-l
17690 .ie \\n([T .ref*field l "" " Trans. "
17691 .el .ref*field l . " Trans. "
17692 .rr [T
17694 \# %r Translato(r) and edito(r)
17695 .de ref*add-r
17696 .ie \\n([T .ref*field r "" " Trans. and Ed. "
17697 .el .ref*field r . " Trans. and Ed. " 
17698 .rr [T
17701 \# Internet
17702 \# --------
17703 \# %s Site name
17704 .de ref*add-s
17705 .ie \\n([s .ref*field s "" ".\E*[IT]" "" \E*[PREV]
17706 .el .ref*field s . " \E*[IT]" "" \E*[PREV]
17707 .\" refer doesn't set reg [T to 1 for these book titles, so we do it here
17708 .ds eval*[s \\*([s
17709 .substring eval*[s -1
17710 .rr [T
17711 .if '\\*[eval*[s]'!' .nr [T 1
17712 .if '\\*[eval*[s]'?' .nr [T 1
17713 .rm eval*[s
17715 \# %c content of site, if unclear (i.e. advertisement, cartoon,
17716 \# interview, etc.)
17717 .de ref*add-c
17718 .ie \\n([T .ref*field c "" " "
17719 .el .ref*field c . " "
17720 .rr [T
17722 \# %o organization, group or sponsor of site
17723 .de ref*add-o
17724 .ie \\n([T .ref*field o "" " "
17725 .el .ref*field o . " "
17726 .rr [T
17728 \# %a access date, i.e. the date you read it
17729 .de ref*add-a
17730 .ie \\n([T .ref*field a "" " "
17731 .el .ref*field a . " "
17732 .rr [T
17734 \# %u URL
17735 .de ref*add-u
17736 .ref*field u "" " <" ">"
17737 .rr [T
17740 \# Build up reference string from ref*add-<x> macros.
17742 .de ref*field
17743 .if d ref*string \{\
17744 .   ie d ref*post-punct \{\
17745 .      as ref*string "\\$2\\*[ref*post-punct] \"
17746 .      rm ref*post-punct
17747 .   \}
17748 .   el .as ref*string "\\$2 \"
17750 .as ref*string "\\$3\\*([\\$1\\$4
17751 .if \\n[.$]>4 .ds ref*post-punct "\\$5
17752 .nr ref*suppress-period 0
17755 \# MARGIN NOTES
17756 \# ------------
17757 \# This is a wrapper for MNinit.
17759 \# I could use a 'while' loop to assign args to strings, but too many
17760 \# 'while' loops are slowing things down.
17762 .MAC MN_INIT END
17763 .    if !'\\$1'rerun' \{\
17764 .       ds $MN-arg1 \\$1
17765 .       ie '\\$2'' .ds $MN-arg2 @
17766 .       el .ds $MN-arg2 \\$2
17767 .       ie '\\$3'' .ds $MN-arg3 @
17768 .       el .ds $MN-arg3 \\$3
17769 .       ie '\\$4'' .ds $MN-arg4 @
17770 .       el .ds $MN-arg4 \\$4
17771 .       ie '\\$5'' .ds $MN-arg5 @
17772 .       el .ds $MN-arg5 \\$5
17773 .       ie '\\$6'' .ds $MN-arg6 @
17774 .       el .ds $MN-arg6 \\$6
17775 .       ie '\\$7'' .ds $MN-arg7 @
17776 .       el .ds $MN-arg7 \\$7
17777 .       ie '\\$8'' .ds $MN-arg8 @
17778 .       el .ds $MN-arg8 \\$8
17779 .       ie '\\$9'' .ds $MN-arg9 @
17780 .       el .ds $MN-arg9 \\$9
17781 .    \}
17782 .    ie \\n[#START_FOR_MNinit]=0 \{\
17783 .       nr #MNinit_DEFERRED 1
17784 .       nr #START_FOR_MNinit 1
17785 .       return
17786 .    \}
17787 .    el \{\
17788 .       MNinit \\*[$MN-arg1] \\*[$MN-arg2] \\*[$MN-arg3] \\*[$MN-arg4] \\*[$MN-arg5] \\*[$MN-arg6] \\*[$MN-arg7] \\*[$MN-arg8] \\*[$MN-arg9]
17789 .    \}
17790 .END
17792 .MAC MN_OVERFLOW_TRAP END
17793 .    if \\n[#OVERFLOW_LEFT]=1  \{\
17794 .       nr #no-repeat-MN-left 1
17795 .       di MN_OVERFLOW_LEFT
17796 .    \}
17797 .    if \\n[#OVERFLOW_RIGHT]=1 \{\
17798 .       nr #no-repeat-MN-right 1
17799 .       di MN_OVERFLOW_RIGHT
17800 .    \}
17801 .    rr #OVERFLOW_LEFT
17802 .    rr #OVERFLOW_RIGHT
17803 .END
17805 \# The remainder of the margin notes macros and routines are adapted
17806 \# from Werner Lemberg's MN.tmac.
17808 \# MNinit
17809 \# ------
17810 \# Usage:
17811 \# MNinit [ragged|symmetric] \
17812 \#        left-width right-width separation \
17813 \#        font fontsize vertical-spacing \
17814 \#        color hyphenation-flags
17816 \# Initialize margin notes.  Empty arguments (denoted with "") set
17817 \# default values.  If the first argument is the string `ragged',
17818 \# left and right margin notes are printed ragged-right.  If it is
17819 \# `symmetric', left margin notes are printed ragged-left and right
17820 \# margin notes ragged-right.  If omitted, margin notes are left
17821 \# and right adjusted.
17824 .de MNinit
17825 .  nr #MNinit 1
17826 .  ds MN-left-ad b\"
17827 .  ds MN-right-ad b\"
17828 .  if '\\$1'RAGGED' \{\
17829 .    ds MN-left-ad l\"
17830 .    ds MN-right-ad l\"
17831 .    shift
17832 .  \}
17833 .  if '\\$1'SYMMETRIC' \{\
17834 .    ds MN-left-ad r\"
17835 .    ds MN-right-ad l\"
17836 .    shift
17837 .  \}
17838 .  ie \B'\\$3' \
17839 .    nr MN-sep (n;\\$3)
17840 .  el \
17841 .    nr MN-sep 1m
17842 .  if ((\\n[.o] - \\n[MN-sep]) < 1n) \
17843 .    ab MN: Left margin too small (<1n) for requested margin notes separation.
17844 .  ie \B'\\$1' \{\
17845 .    nr MN-left-width (n;\\$1)
17846 .    nr MN-left-start (\\n[.o] - \\n[MN-sep] - \\n[MN-left-width])
17847 .  \}
17848 .  el \{\
17849 .    nr MN-left-width (\\n[.o] - \\n[MN-sep])
17850 .    nr MN-left-start 0
17851 .  \}
17852 .  if (\\n[MN-left-start] < 0) \
17853 .    ab MN: Left margin too small for requested margin notes settings.
17854 .  if (\\n[MN-left-width] < 1n) \
17855 .    ab MN: Left margin notes width too small (<1n).
17856 .  ie \B'\\$2' \{\
17857 .    nr MN-right-width (n;\\$2)
17858 .    nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
17859 .    if \\n[#COLUMNS]=1 \{\
17860 .      if !\\n[#NUM_COLS]=1 \{\
17861 .        nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
17862 .      \}
17863 .    \}
17864 .  \}
17865 .  el \{\
17866 .    nr MN-right-width \\n[MN-left-width]
17867 .    nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
17868 .    if \\n[#COLUMNS]=1 \{\
17869 .      if !\\n[#NUM_COLS]=1 \{\
17870 .        nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
17871 .      \}
17872 .    \}
17873 .  \}
17874 .  ie \A'\\$4' \{\
17875 .    ds MN-font \\$4\"
17876 .    if \\n[#PRINT_STYLE]=1 .ds MN-font CR
17877 .  \}
17878 .  el \{\
17879 .    ds MN-font \\*[$PP_FT]
17880 .    if \\n[#PRINT_STYLE]=1 .ds MN-font CR
17881 .  \}
17882 .  ie \B'\\$5' \{\
17883 .    ps \\$5
17884 .    nr MN-size \\n[.ps]
17885 .    ps
17886 .    if \\n[#PRINT_STYLE]=1 \{\
17887 .       ps 12
17888 .       nr MN-size \\n[.ps]
17889 .       ps
17890 .    \}
17891 .  \}
17892 .  el \{\
17893 .    nr MN-size \\n[#DOC_PT_SIZE]
17894 .  \}
17895 .  ie \B'\\$6' \{\
17896 '    vs \\$6
17897 .    nr MN-spacing \\n(.v
17898 '    vs
17899 .    if '\\$6'DOC' \{ .nr MN-spacing \\n[#DOC_LEAD] \}
17900 .    if \\n[#PRINT_STYLE]=1 \{\
17901 .       nr MN-spacing \\n[#DOC_LEAD]
17902 .    \}
17903 .  \}
17904 .  el \{\
17905 .    nr MN-spacing \\n[#DOC_LEAD]
17906 .  \}
17907 .  ie \A'\\$7' \
17908 .    if !\\n[#PRINT_STYLE]=1 .ds MN-color \\$7\"
17909 .  el \
17910 .    if !\\n[#PRINT_STYLE]=1 .ds MN-color
17911 .  ie \B'\\$8' \
17912 .    nr MN-hy \\$8
17913 .  el \
17914 .    nr MN-hy \\n[.hy]
17915 .  ev MNbottom-left-env
17916 .  if \A'\\*[MN-font]' \
17917 .    ft \\*[MN-font]
17918 .  if \\n[MN-size] \
17919 .    ps \\n[MN-size]u
17920 .  if \\n[MN-spacing] \
17921 .    vs \\n[MN-spacing]u
17922 .  ll \\n[MN-left-width]u
17923 .  ad \\*[MN-left-ad]
17924 .  hy \\n[MN-hy]
17925 '  in 0
17926 .  nop \m[\\*[MN-color]]\c
17927 .  ev
17928 .  ev MNbottom-right-env
17929 .  if \A'\\*[MN-font]' \
17930 .    ft \\*[MN-font]
17931 .  if \\n[MN-size] \
17932 .    ps \\n[MN-size]u
17933 .  if \\n[MN-spacing] \
17934 .    vs \\n[MN-spacing]u
17935 .  ll \\n[MN-right-width]u
17936 .  ad \\*[MN-right-ad]
17937 .  hy \\n[MN-hy]
17938 '  in 0
17939 .  nop \m[\\*[MN-color]]\c
17940 .  ev
17941 .  nr MN-active 0
17943 \# MN
17944 \# --
17945 \# Usage:
17947 \#   MN LEFT|RIGHT
17948 \#   margin note text
17949 \#   MN
17951 \# With a parameter, start a margin note, otherwise end a margin note.
17952 \# If the parameter is the string `left', define a left margin note,
17953 \# otherwise define a right margin note.
17955 .de MN
17956 .ds MN-dir \\$1
17957 .if !'\\$1'LEFT' \{\
17958 .  if !'\\$1'RIGHT' \{\
17959 .    MN_QUIT
17960 .    return
17961 .  \}
17963 .if \\n[#COLUMNS]=1 \{\
17964 .  if \\n[#NUM_COLS]>2 \{\
17965 .    tm [mom]: Macro MN: More than two columns.  Ignoring margin notes.
17966 .    return
17967 .  \}
17968 .  if !\\n[#NUM_COLS]=1 \{\
17969 .    ie \\n[#COL_NUM]=1 .ds MN-dir LEFT
17970 .    el .ds MN-dir RIGHT
17971 .  \}
17973 .  if !\\n[#MNinit]=1 \{\
17974 .    tm [mom]: Macro MN: You must set parameters with MN_INIT before using MN.
17975 .    ab Aborting
17976 .  \}
17977 .  ie !'\\$1'' \{\
17978 .    if \\n[MN-active] \{\
17979 .      tm [mom]: Macro MN: Can't handle nested margin notes.
17980 .      return
17981 .    \}
17982 .    nr MN-active 1
17983 .    ev MN-env
17984 .    ie '\\*[MN-dir]'LEFT' \{\
17985 .      nr MN-left +1
17986 .      ds MN-curr l-\\n[MN-left]\"
17987 .      evc MNbottom-left-env
17988 .    \}
17989 .    el \{\
17990 .      nr MN-right +1
17991 .      ds MN-curr r-\\n[MN-right]\"
17992 .      evc MNbottom-right-env
17993 .    \}
17994 .    mk MN-mk-\\*[MN-curr]
17995 .    di MN-div-\\*[MN-curr]
17996 .  \}
17997 .  el \{\
17998 .    MN_QUIT
17999 .  \}
18002 \# MN_QUIT
18003 \# -------
18004 \# Utility macro to handle .MN OFF | QUIT | X etc
18006 .de MN_QUIT
18007 .    if \\n[MN-active] \{\
18008 .      br
18009 .      di
18010 .      nr MN-div-\\*[MN-curr]-depth \\n(dn
18011 .      ev
18012 .    \}
18013 .    nr MN-active 0
18016 \# MNtop
18017 \# -----
18018 \# Resets these registers (called in HEADER)
18019 .de MNtop
18020 .  nr MN-left 0
18021 .  nr MN-right 0
18022 .  nr MN-active 0
18023 .  rr MN-shifted
18024 .  ch FOOTER -\\n[#B_MARGIN]u
18027 \# MNbottom-left
18028 \# -------------
18029 \# The "left" half of Werner's original MNbottom.
18031 .de MNbottom-left
18032 .  nr MN-curr 0
18033 .  nr MN-last-pos 0
18034 .  nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
18035 .  vpt 0
18036 .  mk MN-curr-pos
18037 .  if \\n[MN-active] \{\
18038 .    di
18039 .    tm [mom]: Macro MN: Margin note finished by new page.  Ignored.
18040 .  \}
18041 .  po \\n[MN-left-start]u
18042 .  ev MNbottom-left-env
18043 .  nr #P \\n%+\\n[#PAGE_NUM_ADJ]
18044 .  while (\\n[MN-curr] < \\n[MN-left]) \{\
18045 .    nr MN-curr +1
18046 .    ie (\\n[MN-last-pos] < \\n[MN-mk-l-\\n[MN-curr]]) \
18047 .      sp |\\n[MN-mk-l-\\n[MN-curr]]u+\\n[MN-lead-adj]u
18048 .    el \{\
18049 .      nr MN-shifted 1
18050 .      sp 1v
18051 .      SHIM
18052 .      if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u)
18053 .      tm [mom]: Macro MN: Warning: Left margin note #\\n[MN-curr] on page \\n[#P] shifted down.
18054 .    \}
18055 .\" If last margin note doesn't fit
18056 .    if ( (\\n(nl+\\n[MN-div-l-\\n[MN-curr]-depth]) > (\\n(.p+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\
18057 .      if \\n[MN-shifted]=1 \{\
18058 .        sp -(1v+\\n[#SHIM]u)
18059 .        rm MN-div-l-\\n[MN-curr]
18060 .        tm1 "[mom]: No room to start left margin note #\\n[MN-curr] on page \\n[#P].
18061 .        tm1 "       Ignoring margin note.
18062 .        rr MN-shifted
18063 .      \}
18064 .      nr #no-repeat-MN-left 1
18065 .      nr #OVERFLOW_LEFT 1
18066 .      ie \\n[#FN_COUNT]=0 \{\
18067 .        ch FOOTER \\n(.pu
18068 .        wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP
18069 .      \}
18070 .      el \{\
18071 .        wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
18072 .      \}
18073 .      vpt 1
18074 .    \}
18075 .    nf
18076 .    MN-div-l-\\n[MN-curr]
18077 .    fi
18078 .    br
18079 .    nr MN-last-pos \\n[nl]
18081 .  ev
18082 .  po
18083 .  if !\\n[#no-repeat-MN-left]=1 \{\
18084 .     if \\n[MN-right]=0 .vpt 1
18085 .  \}
18088 \# MNbottom-right
18089 \# --------------
18090 \# The "right" half of Werner's original MNbottom.
18092 .de MNbottom-right
18093 .  nr MN-curr 0
18094 .  nr MN-last-pos 0
18095 .  nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
18096 .  vpt 0
18097 .  po \\n[MN-right-start]u
18098 .  ev MNbottom-right-env
18099 .  nr #P \\n%+\\n[#PAGE_NUM_ADJ]
18100 .  while (\\n[MN-curr] < \\n[MN-right]) \{\
18101 .    nr MN-curr +1
18102 .    ie (\\n[MN-last-pos] < \\n[MN-mk-r-\\n[MN-curr]]) \
18103 .      sp |\\n[MN-mk-r-\\n[MN-curr]]u+\\n[MN-lead-adj]u
18104 .    el \{\
18105 .      nr MN-shifted 1
18106 .      sp 1v
18107 .      SHIM
18108 .      if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u)
18109 .      tm [mom]: Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
18110 .    \}
18111 .\" If last margin note doesn't fit
18112 .    if ( (\\n(nl+\\n[MN-div-r-\\n[MN-curr]-depth]) > (\\n(.p+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\
18113 .      if \\n[MN-shifted]=1 \{\
18114 .        sp -(1v+\\n[#SHIM]u)
18115 .        rm MN-div-r-\\n[MN-curr]
18116 .        tm1 "[mom]: No room to start right margin note #\\n[MN-curr] on page \\n[#P] on page \\n[#P].
18117 .        tm1 "       Ignoring margin note.
18118 .        rr MN-shifted
18119 .      \}
18120 .      nr #no-repeat-MN-right 1
18121 .      nr #OVERFLOW_RIGHT 1
18122 .      ie \\n[#FN_COUNT]=0 \{\
18123 .        ch FOOTER \\n(.pu
18124 .        wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP
18125 .      \}
18126 .      el \{\
18127 .        wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
18128 .      \}
18129 .      vpt 1
18130 .    \}
18131 .    nf
18132 .    MN-div-r-\\n[MN-curr]
18133 .    fi
18134 .    br
18135 .    nr MN-last-pos \\n[nl]
18137 .  ev
18138 .  po
18139 .  if !\\n[#no-repeat-MN-right]=1 .vpt 1
18142 \# vim: ft=groff: