Initial import of binutils 2.22 on the new vendor branch
[dragonfly.git] / contrib / groff / contrib / mom / om.tmac
1 .\" om.tmac
2 .ig
3 Mom -- a typesetting/document-processing macro set for groff.
4
5 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
6   Free Software Foundation, Inc.
7      Written by Peter Schaffter (pschaffter@magma.ca)
8
9 This file is part of groff.
10
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 3 of the License, or
14 (at your option) any later version.
15
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.
20
21 You should have received a copy of the GNU General Public License
22 along with this program. If not, see <http://www.gnu.org/licenses/>.
23
24 Version 1.5-c
25 -------------
26 Antoine de St-ExupĂ©ry asserted that elegance in engineering is
27 achieved not when there is nothing left to add, but when there is
28 nothing left to take away.
29
30 By those standards, mom is a Rube Goldberg contraption.  She was
31 created over the years while groff, and my understanding of it,
32 changed and evolved.  However, I'm a firm believer in "if it
33 ain't broke, don't fix it," so I'm leaving any major clean-up
34 of redundancies and whatnot for a rainy day.
35
36 Inasmuch as possible, macros that turn a feature on or off follow
37 a similar style.  Invoking the macro without an argument turns
38 the feature on.  Invoking it with any other argument turns it off.
39 Use of the argument OFF is recommended, but not required; users
40 may find other conventions preferable (e.g. NO, X, END, QUIT, etc.).
41
42 "<anything>" in the description of arguments that can be passed
43 to a macro means that any argument turns the feature off.
44 ..
45 .\" %beginstrip%
46 \#
47 \# ====================================================================
48 \#
49 \# Check which version of groff is being run
50 .if (\n[.x]\n[.y] < 118) \
51 .   ab [mom]: You need GNU troff version 1.18 or higher to run this version of mom.
52 \# Check that GNU troff is being run
53 .if !\n[.g]=1 \
54 .   ab [mom]: The mom macros require that you be running GNU troff.
55 .if \n(.C \
56 .   ab [mom]: The groff mom macros do not work in compatibility mode.
57 \# Add supplementary styles
58 .sty \n[.fp] L       \"  Light Roman
59 .sty \n[.fp] LI      \"  Light Italic
60 .sty \n[.fp] LCD     \"  Light Condensed Roman
61 .sty \n[.fp] LCDI    \"  Light Condensed Italic
62 .sty \n[.fp] LEX     \"  Light Extended Roman
63 .sty \n[.fp] LEXI    \"  Light Extended Italic
64 .sty \n[.fp] CD      \"  Medium/Book Condensed Roman
65 .sty \n[.fp] CDI     \"  Medium/Book Condensed Italic
66 .sty \n[.fp] EX      \"  Medium/Book Extended Roman
67 .sty \n[.fp] EXI     \"  Medium/Book Extended Italic
68 .sty \n[.fp] DB      \"  DemiBold Roman
69 .sty \n[.fp] DBI     \"  DemiBold Italic
70 .sty \n[.fp] BCD     \"  Bold Condensed Roman
71 .sty \n[.fp] BCDI    \"  Bold Condensed Italic
72 .sty \n[.fp] BEX     \"  Bold Extended Roman
73 .sty \n[.fp] BEXI    \"  Bold Extended Italic
74 .sty \n[.fp] HV      \"  Heavy Roman
75 .sty \n[.fp] HVI     \"  Heavy Italic
76 .sty \n[.fp] HVCD    \"  Heavy Condensed Roman
77 .sty \n[.fp] HVCDI   \"  Heavy Condensed Italic
78 .sty \n[.fp] HVEX    \"  Heavy Extended Roman
79 .sty \n[.fp] HVEXI   \"  Heavy Extended Italic
80 .sty \n[.fp] BL      \"  Black Roman
81 .sty \n[.fp] BLI     \"  Black Italic
82 .sty \n[.fp] BLCD    \"  Black Condensed Roman
83 .sty \n[.fp] BLCDI   \"  Black Condensed Italic
84 .sty \n[.fp] BLEX    \"  Black Extended Roman
85 .sty \n[.fp] BLEXI   \"  Black Extended Italic
86 .sty \n[.fp] UBL     \"  Ultra-Black Roman
87 .sty \n[.fp] UBLI    \"  Ultra-Black Italic
88 \#
89 \# Instruct grops to use square linecaps and joins.
90 \# This instruction is also executed in DO_B_MARGIN, NEWPAGE, and HEADER
91 \#
92 \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
93 \#
94 \# ====================================================================
95 \#
96 \# TYPESETTING MACROS, STRINGS, AND ALIASES
97 \# ========================================
98 \#
99 \# +++ALIASES+++
100 \#
101 \# Alias .als as ALIAS, and .aln (number registers) as ALIASN
102 \#
103 .als      ALIAS           als
104 .als      ALIASN          aln
105 \#
106 \#
107 \# ALIASES FOR GROFF REQUESTS
108 \# --------------------------
109 \#
110 .ALIAS    MAC             de
111 .ALIAS    BR              br
112 .ALIAS    SP              sp
113 .ALIAS    PAGELENGTH      pl
114 .ALIAS    SPREAD          brp
115 .ALIAS    ESC_CHAR        ec
116 .ALIAS    STRING          ds
117 .ALIAS    INCLUDE         so
118 \#
119 \# ALIASES FOR NUMBER REGISTERS
120 \# ----------------------------
121 \#
122 .ALIASN  #PT_SIZE        .ps    \"fractional point size in units
123 .ALIASN  #DIVER_DEPTH     dn    \"diversion depth
124 .ALIASN  #DIVER_WIDTH     dl    \"diversion width
125 .ALIASN  #TRAP_DISTANCE  .t     \"distance to next trap
126 .ALIASN  #LEAD           .v     \"line space (.vs, not .ls)
127 .ALIASN  #PAGE_LENGTH    .p     \"page length
128 .ALIASN  #NUM_ARGS       .$     \"number of arguments passed to a macro
129 .ALIASN  #INDENT         .i     \"value of current indent
130 \#
131 \# ====================================================================
132 \#
133 \# MISCELLANEOUS
134 \# =============
135 .nr #L_MARGIN \n(.o  \" Tabs, etc require #L_MARGIN
136 .cflags 4 /\(en      \" So slash and en-dashes get broken
137 .warn 8192
138 \#
139 \# About the warn level
140 \# --------------------
141 \# 
142 \# There's a lot of testing for the presence of number registers and
143 \# strings in this macro file.  Many of the registers and strings
144 \# pop into and out of existence on the fly.  For convenience, I
145 \# often use
146 \# 
147 \#     .if \\n[whatever]    and    .if !\\n[whatever]
148 \# 
149 \# to test "if the register exists and is (not) empty."  Groff,
150 \# encountering such tests when called with the -ww options, emits
151 \# 
152 \#     warning: number register whatever not defined.
153 \# 
154 \# Groff also warns about strings similarly tested for.
155 \# 
156 \# The warn level, above, is high in order to shut off those
157 \# warnings.  If you're futzing in this file and need more verbose
158 \# warnings, either comment out ".warn 8192" or set the warnlevel
159 \# to the one you need (but be ready for lots of what I've just
160 \# described).
161 \#
162 \# ====================================================================
163 \#
164 \# +++PAGE LAYOUT+++
165 \#
166 \# Macros that control the physical layout of the page: paper size
167 \# and margins.
168 \#
169 \# PAGE WIDTH
170 \# ----------
171 \# *Argument:
172 \#   <width of printer sheet>
173 \# *Function:
174 \#   Stores user supplied page width in register #PAGE_WIDTH.
175 \# *Notes:
176 \#   #PAGE_WIDTH is used to establish the default LL (and right margin).
177 \#   Requires unit of measure.
178 \#
179 .MAC PAGEWIDTH END
180 .    br
181 .    nr #PAGE_WIDTH \\$1
182 .    if !r#L_MARGIN \{ .L_MARGIN \\n(.o \}
183 .    if !r#R_MARGIN \{ .R_MARGIN 1i \}
184 .END
185 \#
186 \#
187 \# L_MARGIN
188 \# --------
189 \# *Argument:
190 \#   <offset from page left>
191 \# *Function:
192 \#   Stores user supplied page offset in register #L_MARGIN.
193 \#   Sets .po to user supplied offset.
194 \# *Notes:
195 \#   Requires unit of measure.
196 \#
197 .MAC L_MARGIN END
198 .    br
199 .    nr #L_MARGIN (\\$1)
200 .    po \\n[#L_MARGIN]u
201 .END
202 \#
203 \#
204 \# R_MARGIN
205 \# --------
206 \# *Argument:
207 \#   <width of right margin>
208 \# *Function:
209 \#   Stores user supplied right margin in register #R_MARGIN.
210 \# *Notes:
211 \#   This is a pseudo-margin.  Right margin is actually a function of
212 \#   line length.  The macro calculates line length from the page offset
213 \#   and the value plugged into #R_MARGIN.
214 \#
215 \#   N.B. -- PAGEWIDTH and L_MARGIN have to be defined before R_MARGIN.
216 \#
217 \#   Requires unit of measure.
218 \#
219 .MAC R_MARGIN END
220 .    br
221 .    nr #R_MARGIN (\\$1)
222 .    ll \\n[#PAGE_WIDTH]u-\\n[#L_MARGIN]u-\\n[#R_MARGIN]u
223 .    ta \\n(.lu
224 .    nr #L_LENGTH \\n(.l
225 .END
226 \#
227 \#
228 \# T_MARGIN
229 \# --------
230 \# *Argument:
231 \#   <distance to advance from top of page>
232 \# *Function:
233 \#   Stores the user supplied top margin in register #T_MARGIN.
234 \#   Advances user supplied depth from the top of the page.
235 \# *Notes:
236 \#   Requires unit of measure.
237 \#
238 .MAC T_MARGIN END
239 .    nr #T_MARGIN (\\$1)
240 .    nr #TOP 1
241 .    if !\\n[#DOCS] \{\
242 .       sp |\\n[#T_MARGIN]u-1v
243 .    \}
244 .    wh 0i DO_T_MARGIN
245 .END
246 \#
247 \#
248 \# B_MARGIN
249 \# --------
250 \# *Argument:
251 \#   <space to leave at the bottom of the page>
252 \# *Function:
253 \#   Stores the user supplied bottom margin in register #B_MARGIN.
254 \# *Notes:
255 \#   Requires unit of measure.
256 \#
257 .MAC B_MARGIN END
258 .    br
259 .    nr #B_MARGIN (\\$1)
260 .    nr #ORIGINAL_B_MARGIN \\n[#B_MARGIN]
261 .    nr #B_MARGIN_SET 1
262 .    wh -\\n[#B_MARGIN]u DO_B_MARGIN
263 .END
264 \#
265 \#
266 \# PAGE
267 \# ----
268 \# *Arguments:
269 \#   <pagewidth>  [pagelength [leftmargin [rightmargin [topmargin [bottommargin]]]]]
270 \# *Function:
271 \#   Page set-up.  Collects arguments and passes them to the appropriate
272 \#   macros.
273 \# *Notes:
274 \#   All arguments after pagewidth are optional, but must appear
275 \#   in the order given above.  (User can fill in as much or as
276 \#   little as desired.)
277 \#
278 \#   All arguments require a unit of measure.
279 \#
280 .MAC PAGE END
281 .    br
282 .    PAGEWIDTH   \\$1
283 .    PAGELENGTH  \\$2
284 .    ie '\\$3''  \{ .L_MARGIN \\n(.o  \}
285 .    el          \{ .L_MARGIN \\$3    \}
286 .    ie '\\$4''  \{ .R_MARGIN 1i      \}
287 .    el          \{ .R_MARGIN \\$4    \}
288 .    if !'\\$5'' \{ .T_MARGIN \\$5    \}
289 .    if !'\\$6'' \{ .B_MARGIN \\$6    \}
290 .END
291 \#
292 \# =====================================================================
293 \#
294 \# +++PAGE CONTROL+++
295 \#
296 \# Generic macros for breaking pages.
297 \#
298 \# DO_T_MARGIN
299 \# -----------
300 \# *Argument:
301 \#   <none>
302 \# *Function:
303 \#   Plants the top margin at the top of each page.
304 \# *Notes:
305 \#   The trap is set in .T_MARGIN or .PAGE
306 \#
307 .MAC DO_T_MARGIN END
308 .    ev T_MARGIN
309 .    nr #TOP 1
310 .    sp |\\n[#T_MARGIN]u-1v
311 .    ev
312 .    sp -\\n[#T_MARGIN_LEAD_ADJ]u
313 .END
314 \#
315 \#
316 \# DO_B_MARGIN
317 \# -----------
318 \# *Argument:
319 \#   <none>
320 \# *Function:
321 \#   Plants the bottom margin at the bottom of each page.
322 \# *Notes:
323 \#   The trap is set in .B_MARGIN or .PAGE.
324 \#
325 .MAC DO_B_MARGIN END
326 .    nr #T_MARGIN_LEAD_ADJ \\n[#LEAD]-12000
327 .    ev B_MARGIN
328 .    bp
329 .    nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
330 .    ev
331 .END
332 \#
333 \#
334 \# NEWPAGE
335 \# -------
336 \# *Argument:
337 \#   <none>
338 \# *Function:
339 \#   Breaks to a new page.
340 \# *Notes:
341 \#   If a B_MARGIN has been set, processes that, otherwise, just
342 \#   breaks to a new page.
343 \#
344 .MAC NEWPAGE END
345 .    ie \\n[#NO_BREAK] \{\
346 '       br
347 .       rr #NO_BREAK
348 .    \}
349 .    el \{\
350 .       br
351 .    \}
352 .    nr #NEWPAGE 1
353 .    ie \\n[#B_MARGIN_SET]=1 \{\
354 .       ie !\\n[#DOCS]=1 \{\
355 .          ev NP
356 .          bp
357 .          nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
358 .          ev
359 .       \}
360 .       el \{\
361 .          if \\n[#COLUMNS]=1 \{ .nr #COL_NUM \\n[#NUM_COLS] \}
362 .          ie !\\n[#FN_DEPTH] \{\
363 .             ch FN_OVERFLOW_TRAP
364 .             DO_B_MARGIN
365 .             wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP
366 .          \}
367 .          el \{\
368 .             DO_B_MARGIN
369 .          \}
370 .       \}
371 .    \}
372 .    el \{\
373 .       DO_B_MARGIN
374 .    \}
375 .END
376 \#
377 \# =====================================================================
378 \#
379 \# +++GENERAL STYLE MACROS+++
380 \#
381 \# Macros that are likely to appear together to define general
382 \# type style: line length, family, font, point size, and line
383 \# spacing.
384 \#
385 \# LINE LENGTH
386 \# -----------
387 \# *Argument:
388 \#   <line length>
389 \# *Function:
390 \#   Stores user supplied line length in register #L_LENGTH.
391 \#   Sets .ll to #L_LENGTHu
392 \# *Notes:
393 \#   Requires unit of measure.
394 \#
395 .MAC LL END
396 .    nr #USER_SET_L_LENGTH 1
397 .    ll \\$1
398 .    nr #L_LENGTH \\n(.l
399 .    ta \\n(.lu
400 .END
401 \#
402 \#
403 \# +++FAMILY AND FONT+++
404 \#
405 \# FALLBACK FONT
406 \# -------------
407 \# *Argument:
408 \#   <fallback font> [ ABORT | WARN ] | ABORT | WARN
409 \# *Function:
410 \#   Sets register #ABORT_FT_ERRORS to 1, or defines a fallback font
411 \#   called "dummy" at font position 0.
412 \# *Notes:
413 \#   Calls to non-existent families cause mom to continue processing
414 \#   files using the fallback font until a valid family is entered.
415 \#
416 \#   Calls to non-existent fonts generate warnings.  If ABORT is passed
417 \#   to FALLBACK_FONT, mom stops processing files after the warning.
418 \#   Otherwise, she continues to process files using the fallback font
419 \#   after the warning is issued.  The default fallback font is CR; the
420 \#   default for font warnings is to abort.
421 \#
422 .MAC FALLBACK_FONT END
423 .    if \\n[#NUM_ARGS]=1 \{\
424 .       if '\\$1'ABORT' \{ .nr #ABORT_FT_ERRORS 1 \}
425 .       if '\\$1'WARN' \{\
426 .          if r#ABORT_FT_ERRORS \{ .nr #ABORT_FT_ERRORS 0 \}
427 .       \}
428 .       if !'\\$1'ABORT' \{\
429 .          if !'\\$1'WARN' \{\
430 .             fp 0 dummy \\$1
431 .          \}
432 .       \}
433 .    \}
434 .    if \\n[#NUM_ARGS]=2 \{\
435 .       fp 0 dummy \\$1
436 .       if '\\$2'ABORT' \{ .nr #ABORT_FT_ERRORS 1 \}
437 .       if '\\$2'WARN'  \{ .nr #ABORT_FT_ERRORS 0 \}
438 .    \}
439 .END
440 \#
441 .FALLBACK_FONT CR ABORT
442 \#
443 \# FAMILY
444 \# ------
445 \# *Argument:
446 \#   <font family>
447 \# *Function:
448 \#   Stores user supplied font family in string $FAMILY.  Sets .fam
449 \#   to $FAMILY.
450 \#
451 .MAC FAMILY END
452 .    ds $FAMILY \\$1
453 .    if \\n[#PRINT_STYLE]=1 \{\
454 .       fam C
455 .       return
456 .    \}
457 .    if \\n[#IGNORE] \{\
458 .       fam C
459 .       return
460 .    \}
461 .    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
462 .       ds $SAVED_STYLE \\n[.sty]
463 .    \}
464 .    ft 0
465 .    fam \\*[$FAMILY]
466 .    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
467 .       ft \\*[$SAVED_STYLE]
468 .       if !F\\n[.fn] \{\
469 .          ft 0
470 .       \}
471 .    \}
472 .    ie \\n[#PRE_COLLATE]=1 \{ . \}
473 .    el \{\
474 .       if \\n[#COLLATE]=1 \{\
475 .          if !r#START \{ .DOC_FAM \\*[$FAMILY] \}
476 .       \}
477 .    \}
478 .END
479 \#
480 \#
481 \# FONT
482 \# ----
483 \# *Argument:
484 \#   R | I | B | BI | <other style extension>
485 \# *Function:
486 \#  Stores user supplied font in $FONT and sets .ft to $FONT.
487 \#
488 .MAC FT END
489 .    ds $FONT \\$1
490 .    if \\n[#PRINT_STYLE]=1 \{\
491 .       ie '\\$1'I' \{\
492 .          if \\n[#UNDERLINE_ITALIC]=1 \{\
493 .             UNDERLINE
494 .             return
495 .          \}
496 .          if \\n[#ITALIC_MEANS_ITALIC]=1 \{\
497 .             ds $FONT \\$1
498 .             ft \\*[$FONT]
499 .             return
500 .          \}
501 .       \}
502 .       el \{ .UNDERLINE OFF \}
503 .       return
504 .    \}
505 .    ft 0
506 .    ft \\*[$FONT]
507 .    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
508 .       if '\\n[.sty]'' \{\
509 .          if !F\\n[.fn] \{\
510 .             if !S\\*[$FONT] \{\
511 .                tm1 "[mom]: Font style "\\*[$FONT]" at line \\n(.c has not been registered.
512 .                ie \\n[#ABORT_FT_ERRORS]=0 \{\
513 .                   tm1 "       Continuing to process using fallback font.
514 .                \}
515 .                el .ab Aborting.
516 .             \}
517 .             if \\n[.f]=0 \{\
518 .                tm1 "[mom]: Either font style "\\*[$FONT]" at line \\n(.c does not exist in family "\\n[.fam]",
519 .                tm1 "       or family "\\n[.fam]" has not been installed in font/devps.
520 .                ie \\n[#ABORT_FT_ERRORS]=0 \{\
521 .                   tm1 "       Continuing to process using fallback font.
522 .                \}
523 .                el .ab Aborting.
524 .             \}
525 .          \}
526 .       \}
527 .    \}
528 .END
529 \#
530 \#
531 \# POINT SIZE
532 \# ----------
533 \# *Arguments:
534 \#   <point size of type>
535 \# *Function:
536 \#   Sets point size to user supplied value in scaled points.
537 \#   If #AUTO_LEAD is on, sets .vs to #AUTOLEAD_VALUE+#PT_SIZE.
538 \# *Notes:
539 \#   Must NOT use a unit of measure.
540 \#
541 .MAC PT_SIZE END
542 .    if \\n[#PRINT_STYLE]=1 \{ .return \}
543 .    if \\n[#IGNORE]        \{ .return \}
544 .    nr #PT_SIZE_SET 1
545 .    ps \\$1
546 .    if \\n[#AUTO_LEAD] \{\
547 .       ie \\n[#AUTOLEAD_FACTOR] \{ .vs \\n[#PT_SIZE]u*\\n[#AUTOLEAD_VALUE]u/1000u \}
548 .       el \{ .vs \\n[#PT_SIZE]u+\\n[#AUTOLEAD_VALUE]u \}
549 .    \}
550 .    nr #PT_SIZE_IN_UNITS \\n[.ps]
551 .END
552 \#
553 \#
554 \# SIZE (inline)
555 \# -------------
556 \# *Arguments:
557 \#   <point size of type>
558 \# *Function:
559 \#   Sets point size to user supplied value in scaled points.
560 \#   Intended to be called inline with \*[SIZE <n><unit>]
561 \# *Notes:
562 \#   Can be used with a unit of measure or not.
563 \#
564 .MAC SIZE END
565 \c
566 .ps \\$1
567 .END
568 \#
569 \#
570 \# LEADING
571 \# -------
572 \# *Argument:
573 \#   <leading between lines of text>
574 \# *Function:
575 \#   Turns off #AUTOLEAD if it's on.
576 \#   Sets .vs to user supplied value.
577 \# *Notes:
578 \#   Does not require unit of measure.  LS automatically turns off AUTOLEAD.
579 \#
580 .MAC LS END
581 .    br
582 .    nr #OLD_LEAD \\n(.v
583 .    if \\n[#PRINT_STYLE]=1 \{ .return \}
584 .    if \\n[#IGNORE]        \{ .return \}
585 .    if \\n[#AUTO_LEAD] \{\
586 .       rr #AUTO_LEAD
587 .       rr #AUTOLEAD_FACTOR
588 .    \}
589 .    vs \\$1
590 .    if \\n[#TOP] \{\
591 .       nr #TOP_BASELINE_ADJ \\n(.v-\\n[#OLD_LEAD]
592 .       sp -\\n[#TOP_BASELINE_ADJ]u
593 .       rr #TOP
594 .       rr #TOP_BASELINE_ADJ
595 .    \}
596 .END
597 \#
598 .MAC RESET_LEAD END
599 '    vs
600 .    ch RESET_LEAD
601 .END
602 \#
603 \#
604 \# AUTOLEAD
605 \# --------
606 \# *Argument:
607 \#   <leading value to add to #PT_SIZE> [FACTOR]
608 \# *Function:
609 \#   Stores user supplied auto-lead value in register #AUTOLEAD_VALUE.
610 \#   Adds #AUT0LEAD_VALUE to #PT_SIZE when invoked to set leading.
611 \#   All subsequent PT_SIZE requests reset the leading in the same way until
612 \#   AUTOLEAD is turned off.
613 \# *Notes:
614 \#   With the optional FACTOR argument, the current point size is
615 \#   multiplied by #AUTOLEAD_VALUE instead of the two being added
616 \#   together.
617 \#
618 .MAC AUTOLEAD END
619 .    if \\n[#PRINT_STYLE]=1 \{ .return \}
620 .    if \\n[#IGNORE]        \{ .return \}
621 .    nr #AUTO_LEAD 1
622 .    nr #OLD_LEAD \\n(.v
623 .    nr #AUTOLEAD_VALUE (p;\\$1)
624 .    ie \\n[#NUM_ARGS]=2 \{\
625 .       if '\\$2'FACTOR' \{\
626 .          nr #AUTOLEAD_FACTOR 1
627 .          vs \\n[#PT_SIZE]u*\\n[#AUTOLEAD_VALUE]u/1000u
628 .       \}
629 .    \}
630 .    el \{\
631 .       vs \\n[#PT_SIZE]u+\\n[#AUTOLEAD_VALUE]u
632 .    \}
633 .    if \\n[#TOP] \{\
634 .       nr #TOP_BASELINE_ADJ \\n(.v-\\n[#OLD_LEAD]
635 .       sp -\\n[#TOP_BASELINE_ADJ]u
636 .       rr #TOP
637 .       rr #TOP_BASELINE_ADJ
638 .    \}
639 .END
640 \#
641 \#
642 \# STRINGS FOR INLINE CONTROL OF GENERAL TYPE STYLE
643 \# ------------------------------------------------
644 .ds ROM  \EfR
645 .ds IT   \EfI
646 .ds BD   \EfB
647 .ds BDI  \Ef(BI
648 .ds PREV \Ef[]
649 .ds S    \Es
650 \#
651 \# =====================================================================
652 \#
653 \# +++KERNING+++
654 \#
655 \# AUTOMATIC PAIRWISE KERNING
656 \# --------------------------
657 \# *Arguments:
658 \#   <none> | <anything>
659 \# *Function:
660 \#   Turns automatic pairwise kerning on or off.
661 \#
662 .MAC KERN END
663 .    ie '\\$1'' \{\
664 .       kern
665 .       nr #KERN 1
666 .    \}
667 .    el \{\
668 .       kern 0
669 .       nr #KERN 0
670 .    \}
671 .END
672 \#
673 \#
674 \# INLINE KERNING AND HORIZONTAL MOVEMENT
675 \# --------------------------------------
676 \# Kerning
677 \# 
678 \# Inline kerning provides a simple method for users to adjust the
679 \# amount of space between any two letters.  It's predicated on a
680 \# unit of measure "U", which is 1/36 of the current point size as
681 \# returned by \n[.ps].  E.g., if the current point size is 18,
682 \# \n[.ps] returns 18000u, therefore U=500u.  Since U remains
683 \# proportional relative to the current point size, the amount
684 \# of kerning between two letters as expressed in Us remains
685 \# visually similar regardless of changes in point size.
686 \# 
687 \# N.B.--the amount of inline kerning supplied by \*[BU<n>] or
688 \# \*[FU<n>] is added to or subtracted from any kerning that already
689 \# takes place between two characters when automatic kerning is
690 \# turned on.
691 \# 
692 \# In groff v. 1.17.2, it was not possible to pass arguments to macros that
693 \# were called with inline escapes, nor thence to evaluate conditional
694 \# expressions.  Consequently, each pseudo-escape \[BU<n>] had to be defined
695 \# separately with ".char".
696 \# 
697 \# As of v. 1.18, one can pass arguments to inline strings/macros,
698 \# hence it is now possible to do \*[BU n] where n, inline, is the desired
699 \# number of kern units.  The original .char definitions have been left in
700 \# for backward compatibility with documents created prior to mom-1.1.3c.
701 \#
702 .nr #KERN_UNIT 36
703 .ds BU   \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
704 .ds FU   \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
705 \#
706 \# Initialize strings for pre-1.1.3c-style BU and FU
707 \#
708 .nr #LOOP 0 1
709 .while \n+[#LOOP]<37 \{\
710 .   ds BU\n[#LOOP]  \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
711 .\}
712 \#
713 .nr #LOOP 0 1
714 .while \n+[#LOOP]<37 \{\
715 .   ds FU\n[#LOOP]  \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
716 .\}
717 .rr #LOOP
718 \#
719 \# Horizontal movements
720 \# --------------------
721 \# BP1...12.75 and FP1...12.75 move backwards or forwards inline by the
722 \# specified number of points.
723 \#
724 \# Left in for backward compatibility with mom-1.1.3c, the
725 \# preferred methods for inline horizontal movements are now
726 \# \*[BCK <n><unit>] and \*[FWD <n><unit>].
727 \#
728 .ds BCK  \h'-\\$1'
729 .ds FWD  \h'\\$1'
730 \#
731 .ds BP.25    \h'-.25'
732 .ds BP.5     \h'-.5'
733 .ds BP.75    \h'-.75'
734 .ds BP1      \h'-1p'
735 .ds BP1.25   \h'-1.25p'
736 .ds BP1.5    \h'-1.5p'
737 .ds BP1.75   \h'-1.75p'
738 .ds BP2      \h'-2p'
739 .ds BP2.25   \h'-2.25p'
740 .ds BP2.5    \h'-2.5p'
741 .ds BP2.75   \h'-2.75p'
742 .ds BP3      \h'-3p'
743 .ds BP3.25   \h'-3.25p'
744 .ds BP3.5    \h'-3.5p'
745 .ds BP3.75   \h'-3.75p'
746 .ds BP4      \h'-4p'
747 .ds BP4.25   \h'-4.25p'
748 .ds BP4.5    \h'-4.5p'
749 .ds BP4.75   \h'-4.75p'
750 .ds BP5      \h'-5p'
751 .ds BP5.25   \h'-5.25p'
752 .ds BP5.5    \h'-5.5p'
753 .ds BP5.75   \h'-5.75p'
754 .ds BP6      \h'-6p'
755 .ds BP6.25   \h'-6.25p'
756 .ds BP6.5    \h'-6.5p'
757 .ds BP6.75   \h'-6.75p'
758 .ds BP7      \h'-7p'
759 .ds BP7.25   \h'-7.25p'
760 .ds BP7.5    \h'-7.5p'
761 .ds BP7.75   \h'-7.75p'
762 .ds BP8      \h'-8p'
763 .ds BP8.25   \h'-8.25p'
764 .ds BP8.5    \h'-8.5p'
765 .ds BP8.75   \h'-8.75p'
766 .ds BP9      \h'-9p'
767 .ds BP9.25   \h'-9.25p'
768 .ds BP9.5    \h'-9.5p'
769 .ds BP9.75   \h'-9.75p'
770 .ds BP10     \h'-10p'
771 .ds BP10.25  \h'-10.25p'
772 .ds BP10.5   \h'-10.5p'
773 .ds BP10.75  \h'-10.75p'
774 .ds BP11     \h'-11p'
775 .ds BP11.25  \h'-11.25p'
776 .ds BP11.5   \h'-11.5p'
777 .ds BP11.75  \h'-11.75p'
778 .ds BP12     \h'-12p'
779 .ds BP12.25  \h'-12.25p'
780 .ds BP12.5   \h'-12.5p'
781 .ds BP12.75  \h'-12.75p'
782 \#
783 .ds FP.25    \h'.25'
784 .ds FP.5     \h'.5'
785 .ds FP.75    \h'.75'
786 .ds FP1      \h'1p'
787 .ds FP1.25   \h'1.25p'
788 .ds FP1.5    \h'1.5p'
789 .ds FP1.75   \h'1.75p'
790 .ds FP2      \h'2p'
791 .ds FP2.25   \h'2.25p'
792 .ds FP2.5    \h'2.5p'
793 .ds FP2.75   \h'2.75p'
794 .ds FP3      \h'3p'
795 .ds FP3.25   \h'3.25p'
796 .ds FP3.5    \h'3.5p'
797 .ds FP3.75   \h'3.75p'
798 .ds FP4      \h'4p'
799 .ds FP4.25   \h'4.25p'
800 .ds FP4.5    \h'4.5p'
801 .ds FP4.75   \h'4.75p'
802 .ds FP5      \h'5p'
803 .ds FP5.25   \h'5.25p'
804 .ds FP5.5    \h'5.5p'
805 .ds FP5.75   \h'5.75p'
806 .ds FP6      \h'6p'
807 .ds FP6.25   \h'6.25p'
808 .ds FP6.5    \h'6.5p'
809 .ds FP6.75   \h'6.75p'
810 .ds FP7      \h'7p'
811 .ds FP7.25   \h'7.25p'
812 .ds FP7.5    \h'7.5p'
813 .ds FP7.75   \h'7.75p'
814 .ds FP8      \h'8p'
815 .ds FP8.25   \h'8.25p'
816 .ds FP8.5    \h'8.5p'
817 .ds FP8.75   \h'8.75p'
818 .ds FP9      \h'9p'
819 .ds FP9.25   \h'9.25p'
820 .ds FP9.5    \h'9.5p'
821 .ds FP9.75   \h'9.75p'
822 .ds FP10     \h'10p'
823 .ds FP10.25  \h'10.25p'
824 .ds FP10.5   \h'10.5p'
825 .ds FP10.75  \h'10.75p'
826 .ds FP11     \h'11p'
827 .ds FP11.25  \h'11.25p'
828 .ds FP11.5   \h'11.5p'
829 .ds FP11.75  \h'11.75p'
830 .ds FP12     \h'12p'
831 .ds FP12.25  \h'12.25p'
832 .ds FP12.5   \h'12.5p'
833 .ds FP12.75  \h'12.75p'
834 \#
835 \#
836 \# WHOLE LINE KERNING (RW and EW)
837 \# -----------------------------
838 \# The line kerning macros are special instances of track kerning,
839 \# used where a complete line needs to be tightened (or relaxed) in
840 \# order to accomodate or remove one or two more characters
841 \# than the default justification permits.
842 \#
843 \# *Argument:
844 \#   <amount of overall "kerning" (letter spacing) to apply to the line>
845 \# *Function:
846 \#   Invokes .tkf (track kerning) for the current font with
847 \#   1 as both the upper and lower point size limits, so that
848 \#   the value entered by the user applies regardless of point
849 \#   size.  RW ("Reduce Whitespace") reduces the amount of space
850 \#   between all characters by an equal amount.  EW ("Extra
851 \#   Whitespace") increases the amount of space.
852 \# *Notes:
853 \#   Decimal values are acceptable.
854 \#
855 \# The groff documentation is a tad confusing about what unit of
856 \# measure is used in track kerning, only that the width of each
857 \# character is increased or decreased by the amount(s) passed as
858 \# arguments to .tkf, and something about linear function of point
859 \# size.  In fact, with the way I've put this macro together, it
860 \# doesn't matter.  All the user needs to know is that a value of
861 \# one will produce an unacceptably tight or loose line at most text
862 \# point sizes; therefore, effective use of RW and EW is in the
863 \# fractional range below 1 (e.g. .25, .5).  Given that RW and EW
864 \# are for massaging type, a certain amount of experimentation and
865 \# previewing is expected and necessary.
866 \# 
867 \# \n(.f holds the current font number, which is acceptable to .tkf.
868 \# 
869 \# RW and EW must be reset to 0 to cancel their effect on subsequent
870 \# output lines.
871 \#
872 .MAC RW END
873 .    if \\n[#BR_AT_LINE_KERN] \{\
874 .       ie \\n[#JUSTIFY]=1 \{ .brp \}
875 .       el \{ .br \}
876 .    \}
877 .    tkf \\n(.f 1 -\\$1 1 -\\$1
878 .END
879 \#
880 \#
881 .MAC EW END
882 .    if \\n[#BR_AT_LINE_KERN] \{\
883 .       ie \\n[#JUSTIFY]=1 \{ .brp \}
884 .       el \{ .br \}
885 .    \}
886 .    tkf \\n(.f 1 \\$1 1 \\$1
887 .END
888 \#
889 \#
890 \# BREAK AT LINE KERN
891 \# ------------------
892 \# *Arguments:
893 \#   toggle
894 \# *Function:
895 \#   Enables/disables .br's before .RW and .EW
896 \# *Notes:
897 \#   Mostly, users will want .br's before any kind of line kerning, but
898 \#   there may be cases where they don't.  BR_BEFORE_LINE_KERN is off by
899 \#   default and must be invoked explicitly.
900 \#
901 .MAC BR_AT_LINE_KERN END
902 .    ie '\\$1'' \{ .nr #BR_AT_LINE_KERN  1 \}
903 .    el         \{ .rr #BR_AT_LINE_KERN \}
904 .END
905 \#
906 \# =====================================================================
907 \#
908 \# +++HYPHENATION+++
909 \#
910 \# AUTO HYPHENATION
911 \# ----------------
912 \# *Arguments:
913 \#   <none> | <anything> | DEFAULT
914 \#                 or
915 \#   LINES <n> | MARGIN <n> | SPACE <n>
916 \# *Function:
917 \#   Turns auto hyphenation on or off, resets the hyphenation style
918 \#   to default, or permits the setting of various hyphenation
919 \#   parameters.
920 \# *Notes:
921 \#   HY, by itself, defaults to .hy 14, i.e. no hyphens after the
922 \#   first two or before the last two characters of a word, and no
923 \#   hyphenation of the last line prior to a trap (e.g., at the
924 \#   bottom of a page).
925 \#
926 \#   HY DEFAULT resets the hyphenation style to .hy 14 (see
927 \#   above) if that behaviour is desired after changes have been
928 \#   made to LINES, MARGIN, or SPACE.
929 \#
930 \#   HY LINES <n> sets the number of allowable consecutive hyphenated lines.
931 \#
932 \#   HY MARGIN <n> sets the amount of space (ipPcm) allowed at the end
933 \#   of a line in QUAD mode before hyphenation is tripped (e.g. if there's
934 \#   only 6 points left, groff won't try to hyphenate the next word).
935 \#
936 \#   HY SPACE sets the amount of extra interword space (ipPcm) that can
937 \#   be added in JUSTIFY mode to prevent a line from being hyphenated.
938 \#
939 .MAC HY END
940 .    ie '\\$1'' \{\
941 .       hy 14
942 .       nr #HYPHENATE 1
943 .    \}
944 .    el \{\
945 .       if !'\\$1'LINES'  \{\
946 .          nh
947 .          nr #HYPHENATE 0
948 .       \}
949 .       if !'\\$1'MARGIN' \{\
950 .          nh
951 .          nr #HYPHENATE 0
952 .       \}
953 .       if !'\\$1'SPACE'  \{\
954 .          nh
955 .          nr #HYPHENATE 0
956 .       \}
957 .       if !'\\$1'DEFAULT'  \{\
958 .          nh
959 .          nr #HYPHENATE 0
960 .       \}
961 .       if '\\$1'LINES'   \{ .hlm \\$2 \}
962 .       if '\\$1'MARGIN'  \{ .hym \\$2 \}
963 .       if '\\$1'SPACE'   \{ .hys \\$2 \}
964 .       if '\\$1'DEFAULT' \{\
965 .          hlm -1
966 .          hym 0
967 .          hys 0
968 .       \}
969 .    \}
970 .END
971 \#
972 \#
973 \# HYPHENATION PARAMETERS
974 \# ----------------------
975 \# *Arguments:
976 \#   <# of lines> | <size of margin> | <amount of interword space>
977 \# *Function:
978 \#   Allows user to specify .HY LINES, MARGIN, and SPACE with a single command.
979 \#
980 .MAC HY_SET END
981 .    nr #HY_SET 1
982 .    hlm \\$1
983 .    hym \\$2
984 .    hys \\$3
985 .END
986 \#
987 \# =====================================================================
988 \#
989 \# +++VERTICAL SPACING+++
990 \#
991 \# ADVANCE LEAD
992 \# ------------
993 \# *Argument:
994 \#   <user supplied lead to advance below current baseline>
995 \# *Function:
996 \#   Creates or modifies register #ALD.  Adds user supplied lead
997 \#   below current baseline.
998 \# *Notes:
999 \#   Requires a unit of measure.
1000 \#
1001 .MAC ALD END
1002 .    if \\n(nl=0 \{ .nr #TOP 1 \}
1003 .    if '\\$0'ALD' \{\
1004 .       nr #ALD (\\$1)
1005 .       sp \\n[#ALD]u
1006 .    \}
1007 .    if '\\$0'ADD_SPACE' \{\
1008 .       nr #ALD (\\$1)
1009 .       rs
1010 .       sp \\n[#ALD]u
1011 .    \}
1012 .    if '\\$0'SPACE' \{\
1013 .       sp \\$1
1014 .    \}
1015 .    if '\\$0'SP' \{\
1016 .       sp \\$1
1017 .    \}
1018 .END
1019 \#
1020 \#
1021 \# REVERSE LEAD
1022 \# ------------
1023 \# *Argument:
1024 \#   <user supplied lead to reverse above current baseline>
1025 \# *Function:
1026 \#   Creates or modifies register #RLD.  Reverses user supplied
1027 \#   lead above current baseline.
1028 \# *Notes:
1029 \#   Requires a unit of measure.
1030 \#
1031 .MAC RLD END
1032 .    nr #RLD (\\$1)
1033 .    sp -\\n[#RLD]u
1034 .END
1035 \#
1036 \# ALD/RLD STRINGS
1037 \# ---------------
1038 \# The strings \*[ALD.25]...\*[ALD12.75] and their corresponding
1039 \# \*[RLD] forms have been left in for backward compatibility with
1040 \# documents created using mom-1.1.3c or earlier.  The prefered methods
1041 \# of advancing and reversing on the page inline are \*[UP <n><unit>]
1042 \# and \*[DOWN <n><unit>].
1043 \#
1044 .ds DOWN      \v'\\$1'
1045 .ds UP        \v'-\\$1'
1046 \#
1047 .ds ALD.25    \v'.25p'
1048 .ds ALD.5     \v'.5p'
1049 .ds ALD.75    \v'.75p'
1050 .ds ALD1      \v'1p'
1051 .ds ALD1.25   \v'1.25p'
1052 .ds ALD1.5    \v'1.5p'
1053 .ds ALD1.75   \v'1.75p'
1054 .ds ALD2      \v'2p'
1055 .ds ALD2.25   \v'2.25p'
1056 .ds ALD2.5    \v'2.5p'
1057 .ds ALD2.75   \v'2.75p'
1058 .ds ALD3      \v'3p'
1059 .ds ALD3.25   \v'3.25p'
1060 .ds ALD3.5    \v'3.5p'
1061 .ds ALD3.75   \v'3.75p'
1062 .ds ALD4      \v'4p'
1063 .ds ALD4.25   \v'4.25p'
1064 .ds ALD4.5    \v'4.5p'
1065 .ds ALD4.75   \v'4.75p'
1066 .ds ALD5      \v'5p'
1067 .ds ALD5.25   \v'5.25p'
1068 .ds ALD5.5    \v'5.5p'
1069 .ds ALD5.75   \v'5.75p'
1070 .ds ALD6      \v'6p'
1071 .ds ALD6.25   \v'6.25p'
1072 .ds ALD6.5    \v'6.5p'
1073 .ds ALD6.75   \v'6.75p'
1074 .ds ALD7      \v'7p'
1075 .ds ALD7.25   \v'7.25p'
1076 .ds ALD7.5    \v'7.5p'
1077 .ds ALD7.75   \v'7.75p'
1078 .ds ALD8      \v'8p'
1079 .ds ALD8.25   \v'8.25p'
1080 .ds ALD8.5    \v'8.5p'
1081 .ds ALD8.75   \v'8.75p'
1082 .ds ALD9      \v'9p'
1083 .ds ALD9.25   \v'9.25p'
1084 .ds ALD9.5    \v'9.5p'
1085 .ds ALD9.75   \v'9.75p'
1086 .ds ALD10     \v'10p'
1087 .ds ALD10.25  \v'10.25p'
1088 .ds ALD10.5   \v'10.5p'
1089 .ds ALD10.75  \v'10.75p'
1090 .ds ALD11     \v'11p'
1091 .ds ALD11.25  \v'11.25p'
1092 .ds ALD11.5   \v'11.5p'
1093 .ds ALD11.75  \v'11.75p'
1094 .ds ALD12     \v'12p'
1095 .ds ALD12.25  \v'12.5p'
1096 .ds ALD12.5   \v'12.5p'
1097 .ds ALD12.75  \v'12.75p'
1098 \#
1099 .ds RLD.25    \v'-.25p'
1100 .ds RLD.5     \v'-.5p'
1101 .ds RLD.75    \v'-.75p'
1102 .ds RLD1      \v'-1p'
1103 .ds RLD1.25   \v'-1.25p'
1104 .ds RLD1.5    \v'-1.5p'
1105 .ds RLD1.75   \v'-1.75p'
1106 .ds RLD2      \v'-2p'
1107 .ds RLD2.25   \v'-2.25p'
1108 .ds RLD2.5    \v'-2.5p'
1109 .ds RLD2.75   \v'-2.75p'
1110 .ds RLD3      \v'-3p'
1111 .ds RLD3.25   \v'-3.25p'
1112 .ds RLD3.5    \v'-3.5p'
1113 .ds RLD3.75   \v'-3.75p'
1114 .ds RLD4      \v'-4p'
1115 .ds RLD4.25   \v'-4.25p'
1116 .ds RLD4.5    \v'-4.5p'
1117 .ds RLD4.75   \v'-4.75p'
1118 .ds RLD5      \v'-5p'
1119 .ds RLD5.25   \v'-5.25p'
1120 .ds RLD5.5    \v'-5.5p'
1121 .ds RLD5.75   \v'-5.75p'
1122 .ds RLD6      \v'-6p'
1123 .ds RLD6.25   \v'-6.25p'
1124 .ds RLD6.5    \v'-6.5p'
1125 .ds RLD6.75   \v'-6.75p'
1126 .ds RLD7      \v'-7p'
1127 .ds RLD7.25   \v'-7.25p'
1128 .ds RLD7.5    \v'-7.5p'
1129 .ds RLD7.75   \v'-7.75p'
1130 .ds RLD8      \v'-8p'
1131 .ds RLD8.25   \v'-8.25p'
1132 .ds RLD8.5    \v'-8.5p'
1133 .ds RLD8.75   \v'-8.75p'
1134 .ds RLD9      \v'-9p'
1135 .ds RLD9.25   \v'-9.25p'
1136 .ds RLD9.5    \v'-9.5p'
1137 .ds RLD9.75   \v'-9.75p'
1138 .ds RLD10     \v'-10p'
1139 .ds RLD10.25  \v'-10.25p'
1140 .ds RLD10.5   \v'-10.5p'
1141 .ds RLD10.75  \v'-10.75p'
1142 .ds RLD11     \v'-11p'
1143 .ds RLD11.25  \v'-11.25p'
1144 .ds RLD11.5   \v'-11.5p'
1145 .ds RLD11.75  \v'-11.75p'
1146 .ds RLD12     \v'-12p'
1147 .ds RLD12.25  \v'-12.5p'
1148 .ds RLD12.5   \v'-12.5p'
1149 .ds RLD12.75  \v'-12.75p'
1150 \#
1151 \# =====================================================================
1152 \#
1153 \# +++REFINEMENTS+++
1154 \#
1155 \# AUTOMATIC LIGATURES
1156 \# -------------------
1157 \# *Arguments:
1158 \#   <none> | <anything>
1159 \# *Function:
1160 \#   Turns automatic ligature generation on or off.
1161 \# *Notes:
1162 \#   Ligatures may be supplied manually with \(fi, \(fl, etc.
1163 \#
1164 .MAC LIGATURES END
1165 .    ie '\\$1'' \{\
1166 .       lg
1167 .       nr #LIGATURES 1
1168 .    \}
1169 .    el \{\
1170 .       lg 0
1171 .       nr #LIGATURES 0
1172 .    \}
1173 .END
1174 \#
1175 \#
1176 \# SMARTQUOTES
1177 \# -----------
1178 \# *Arguments:
1179 \#   [ ,, ] | [ << ] | [ >> ] | <anything>
1180 \#   or
1181 \#   [ DA | DE | ES | FR | IT | NL | NO | PT | SV ] | <anything>
1182 \# *Function:
1183 \#   Turns smartquotes on (optionally with a quoting style from the
1184 \#   argument list, or off).
1185 \# *Notes:
1186 \#   The " character is read outside the macro when mom is
1187 \#   processed.  The strings for open/close ($QUOTE<n>) are then
1188 \#   defined in the macro.
1189 \#
1190 \#   (Note to myself: code for " is \N'34'.)
1191 \#
1192 .char " \\*[$QUOTE\\n[#OPEN_CLOSE]]\R'#OPEN_CLOSE (1-\\n[#OPEN_CLOSE])'
1193 \#
1194 .MAC SMARTQUOTES END
1195 .    rr #ARGS_TO_SQ
1196 .    if \\n[#RESTORE_SQ]=1 \{\
1197 .       rr #RESTORE_SQ
1198 .       ie '\\*[$RESTORE_SQ]'' \{\
1199 .          ds $QUOTE0 \[dq]
1200 .          ds $QUOTE1 \[dq]
1201 .       \}
1202 .       el \{\
1203 .          SMARTQUOTES \\*[$RESTORE_SQ]
1204 .          return
1205 .       \}
1206 .    \}
1207 .    ie '\\$1'' \{\
1208 .       nr #OPEN_CLOSE 0
1209 .       ds $QUOTE0 \\[lq]
1210 .       ds $QUOTE1 \\[rq]
1211 .       ds $RESTORE_SQ \\$1
1212 .    \}
1213 .    el \{\
1214 .       if '\\$1',,' \{\
1215 .          nr #ARGS_TO_SQ 1
1216 .          ds $QUOTE0 \\[Bq]
1217 .          ds $QUOTE1 \\[lq]
1218 .          ds $RESTORE_SQ \\$1
1219 .       \}
1220 .       if '\\$1'<<' \{\
1221 .          nr #ARGS_TO_SQ 1
1222 .          ds $QUOTE0 \\[Fo]
1223 .          ds $QUOTE1 \\[Fc]
1224 .          ds $RESTORE_SQ \\$1
1225 .       \}
1226 .       if '\\$1'>>' \{\
1227 .          nr #ARGS_TO_SQ 1
1228 .          ds $QUOTE0 \\[Fc]
1229 .          ds $QUOTE1 \\[Fo]
1230 .          ds $RESTORE_SQ \\$1
1231 .       \}
1232 .       if '\\$1'DA' \{\
1233 .          nr #ARGS_TO_SQ 1
1234 .          ds $QUOTE0 \\[Fc]
1235 .          ds $QUOTE1 \\[Fo]
1236 .          ds $RESTORE_SQ \\$1
1237 .       \}
1238 .       if '\\$1'DE' \{\
1239 .          nr #ARGS_TO_SQ 1
1240 .          ds $QUOTE0 \\[Bq]
1241 .          ds $QUOTE1 \\[lq]
1242 .          ds $RESTORE_SQ \\$1
1243 .       \}
1244 .       if '\\$1'ES' \{\
1245 .          nr #ARGS_TO_SQ 1
1246 .          ds $QUOTE0 \\[lq]
1247 .          ds $QUOTE1 \\[rq]
1248 .          ds $RESTORE_SQ \\$1
1249 .       \}
1250 .       if '\\$1'FR' \{\
1251 .          nr #ARGS_TO_SQ 1
1252 .          ds $QUOTE0 \\[Fo]\\|
1253 .          ds $QUOTE1 \\|\\[Fc]
1254 .          ds $RESTORE_SQ \\$1
1255 .       \}
1256 .       if '\\$1'IT' \{\
1257 .          nr #ARGS_TO_SQ 1
1258 .          ds $QUOTE0 \\[Fo]\\|
1259 .          ds $QUOTE1 \\|\\[Fc]
1260 .          ds $RESTORE_SQ \\$1
1261 .       \}
1262 .       if '\\$1'NL' \{\
1263 .          nr #ARGS_TO_SQ 1
1264 .          ds $QUOTE0 \\[rq]
1265 .          ds $QUOTE1 \\[rq]
1266 .          ds $RESTORE_SQ \\$1
1267 .       \}
1268 .       if '\\$1'NO' \{\
1269 .          nr #ARGS_TO_SQ 1
1270 .          ds $QUOTE0 \\[Fo]
1271 .          ds $QUOTE1 \\[Fc]
1272 .          ds $RESTORE_SQ \\$1
1273 .       \}
1274 .       if '\\$1'PT' \{\
1275 .          nr #ARGS_TO_SQ 1
1276 .          ds $QUOTE0 \\[Fo]
1277 .          ds $QUOTE1 \\[Fc]
1278 .          ds $RESTORE_SQ \\$1
1279 .       \}
1280 .       if '\\$1'SV' \{\
1281 .          nr #ARGS_TO_SQ 1
1282 .          ds $QUOTE0 \\[Fc]
1283 .          ds $QUOTE1 \\[Fc]
1284 .          ds $RESTORE_SQ \\$1
1285 .       \}
1286 .       if !r#ARGS_TO_SQ \{\
1287 .          ds $QUOTE0 \\[dq]
1288 .          ds $QUOTE1 \\[dq]
1289 .          nr #RESTORE_SQ 1
1290 .       \}
1291 .    \}
1292 .END
1293 \#
1294 .ds $QUOTE0 \[dq]
1295 .ds $QUOTE1 \[dq]
1296 \#
1297 \# Strings for foot and inch marks
1298 \#
1299 .ds FOOT \(fm
1300 .ds INCH \(fm\(fm
1301 \#
1302 \# =====================================================================
1303 \#
1304 \# +++LINE BREAKS+++
1305 \#
1306 \# NO-SPACE BREAK
1307 \# --------------
1308 \# *Argument:
1309 \#   <none>
1310 \# *Function:
1311 \#   Breaks a line without advancing.
1312 \# *Notes:
1313 \#   EL is the mnemonic used on older, dedicated typesetting machines
1314 \#   to indicate "process the line, without advancing the galley
1315 \#   medium."  It stands for End Line.
1316 \#
1317 \#   The \c inline must be appended to the end of input lines when in
1318 \#   nofill mode; in fill modes, the \c inline must not be used.
1319 \#
1320 .MAC EL END
1321 .    TRAP OFF
1322 .    if \\n[#PSEUDO_FILL]=1 \&
1323 .    br
1324 .    sp -1v
1325 .    TRAP
1326 .END
1327 \#
1328 \# An inline escape to accomplish the same thing.  Actually
1329 \# preferable, since it works with filled and non-filled copy and
1330 \# doesn't require the user to remember to use (or not use) the \c.
1331 \#
1332 .ds B \h'|0'\R'#NO_ADVANCE 1'\c
1333 \#
1334 \# =====================================================================
1335 \#
1336 \# +++FILLING/QUADDING/JUSTIFYING+++
1337 \#
1338 \# JUSTIFY
1339 \# -------
1340 \# *Argument:
1341 \#   <none>
1342 \# *Function:
1343 \#   Turns fill on and sets .ad to b.
1344 \# *Notes:
1345 \#   Justifies text left and right.
1346 \#
1347 .MAC JUSTIFY END
1348 .    if \\n[#TAB_ACTIVE]=0 \{\
1349 .       nr #QUAD 1
1350 .       ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
1351 .    \}
1352 '    ce 0
1353 .    QUAD J
1354 .    if \\n[#PRINT_STYLE]=1 \{ .QUAD L \}
1355 .    nr #PSEUDO_FILL 0
1356 .END
1357 \#
1358 \#
1359 \# QUAD
1360 \# ----
1361 \# *Arguments:
1362 \#   L | LEFT | R | RIGHT | C | CENTER/CENTRE
1363 \# *Function:
1364 \#   Turns fill on and sets .ad to l, r, or c.
1365 \# *Notes:
1366 \#   Terminology is a problem here.  Some people call quad left
1367 \#   left justified, flush left, or flush left/rag right (and the
1368 \#   reverse for quad right).  Quad center is sometimes called rag
1369 \#   both.  For our purposes, all "quad" modes mean that groff fill
1370 \#   mode is enabled.
1371 \#
1372 .MAC QUAD END
1373 .    ds $QUAD_VALUE \\$1
1374 .    if \\n[#TAB_ACTIVE]=0 \{\
1375 .       nr #QUAD 1
1376 .       ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
1377 .    \}
1378 '    ce 0
1379 '    fi
1380 .    if '\\*[$QUAD_VALUE]'L'       \{\
1381 .       nr #JUSTIFY 0
1382 .       ad l
1383 .    \}
1384 .    if '\\*[$QUAD_VALUE]'LEFT'    \{\
1385 .       nr #JUSTIFY 0
1386 .       ad l
1387 .    \}
1388 .    if '\\*[$QUAD_VALUE]'R'       \{\
1389 .       nr #JUSTIFY 0
1390 .       ad r
1391 .    \}
1392 .    if '\\*[$QUAD_VALUE]'RIGHT'   \{\
1393 .       nr #JUSTIFY 0
1394 .       ad r
1395 .    \}
1396 .    if '\\*[$QUAD_VALUE]'C'       \{\
1397 .       nr #JUSTIFY 0
1398 .       ad c
1399 .    \}
1400 .    if '\\*[$QUAD_VALUE]'CENTER'  \{\
1401 .       nr #JUSTIFY 0
1402 .       ad c
1403 .    \}
1404 .    if '\\*[$QUAD_VALUE]'CENTRE'  \{\
1405 .       nr #JUSTIFY 0
1406 .       ad c
1407 .    \}
1408 .    if '\\*[$QUAD_VALUE]'J'       \{\
1409 .       nr #JUSTIFY 1
1410 .       ad b
1411 .    \}
1412 .    if '\\*[$QUAD_VALUE]'JUSTIFY' \{\
1413 .       nr #JUSTIFY 1
1414 .       ad b
1415 .    \}
1416 .    nr #PSEUDO_FILL 0
1417 .END
1418 \#
1419 \#
1420 \# LEFT, RIGHT, AND CENTER
1421 \# -----------------------
1422 \# The purpose of these macros is to allow the user to enter lines of
1423 \# text that will be quadded LRC *without* the user having to enter .BR
1424 \# or .br between lines.  For the sake of consistency, all three appear
1425 \# to behave similarly (from the point of view of the user), although
1426 \# the underlying primitives don't.  For this reason, LEFT, RIGHT, and
1427 \# CENTER must be followed by .QUAD [L R C J] or .JUSTIFY to restore
1428 \# text to groff fill mode.
1429 \#
1430 \# LEFT
1431 \# ----
1432 \# *Argument:
1433 \#   <none>
1434 \# *Function:
1435 \#   Turns fill mode off.  Allows user to quad lines left without
1436 \#   requiring the .BR or .br macro.
1437 \# *Notes:
1438 \#   LEFT simply turns fill off.  Lines that exceed the current LL will
1439 \#   not be broken, just continued (indefinitely) until a return is
1440 \#   encountered.  Note that this behaviour differs from the RIGHT and
1441 \#   CENTER macros.
1442 \#
1443 .MAC LEFT END
1444 .    if \\n[#TAB_ACTIVE]=0 \{\
1445 .       rr #QUAD
1446 .       ds $RESTORE_QUAD_VALUE LEFT
1447 .    \}
1448 .    ce 0
1449 .    nf
1450 .    nr #PSEUDO_FILL 1
1451 .\" Fix for a little conflict with DOCTYPE LETTER
1452 .    if '\\n(.z'LETTERHEAD1' \{ .rr #DATE_FIRST \}
1453 .END
1454 \#
1455 \#
1456 \# RIGHT
1457 \# -----
1458 \# *Argument:
1459 \#   <none>
1460 \# *Function:
1461 \#   Turns fill on.  Allows user to quad lines right without
1462 \#   requiring the .BR or .br macro.
1463 \# *Notes:
1464 \#   Lines that exceed the current LL will be broken, with the excess
1465 \#   text quadded right.
1466 \#
1467 .MAC RIGHT END
1468 .    if \\n[#TAB_ACTIVE]=0 \{\
1469 .       rr #QUAD
1470 .       ds $RESTORE_QUAD_VALUE RIGHT
1471 .    \}
1472 .    nf
1473 .    rj 100000
1474 .    nr #PSEUDO_FILL 1
1475 .END
1476 \#
1477 \#
1478 \# CENTER
1479 \# ------
1480 \# *Argument:
1481 \#   <none>
1482 \# *Function:
1483 \#   Turns fill on.  Allows user to center lines without
1484 \#   requiring the .BR or .br macro.
1485 \# *Notes:
1486 \#   Lines that exceed the current LL will be broken, with the excess
1487 \#   text centered.
1488 \#
1489 .MAC CENTER END
1490 .    if \\n[#TAB_ACTIVE]=0 \{\
1491 .       rr #QUAD
1492 .       ds $RESTORE_QUAD_VALUE CENTER
1493 .    \}
1494 .    nf
1495 .    ce 100000
1496 .    nr #PSEUDO_FILL 1
1497 .END
1498 \#
1499 \# =====================================================================
1500 \#
1501 \# +++TABS+++
1502 \#
1503 \# There are two different kinds of tabs available: typesetting tabs
1504 \# and string tabs.
1505 \# 
1506 \# Typesetting tabs are set with TAB_SET, which requires a tab number,
1507 \# an indent (offset) from the left margin and a length (optionally
1508 \# with a quad direction and an instruction to fill lines).  After tabs
1509 \# are set with TAB_SET, they are called with .TAB n, where "n"
1510 \# corresponds to the number passed to TAB_SET as a valid tab number.
1511 \# 
1512 \# String tabs allow the user to mark off tab positions inline.  Tab
1513 \# indents and lengths are calculated from the beginning and end
1514 \# positions of the marks.  Up to 19 string tabs may be created,
1515 \# numbered 1-19.  Once created, they are called with .TAB n,
1516 \# just like typesetting tabs.
1517 \# 
1518 \# Setting up string tabs is a two-step procedure.  First, the user
1519 \# enters an input line in which s/he wants to mark off string tabs.
1520 \# The beginning of a tab is marked with \*[STn], where "n" is
1521 \# the desired number of the tab.  The end of the the tab is marked
1522 \# with \*[STnX].  All ST's must have a matching STX.  String tabs
1523 \# may be nested.
1524 \# 
1525 \# Next, the user invokes .ST n for every string tab defined, and
1526 \# optionally passes quad information to it.  That done, string tabs
1527 \# can be called just like typesetting tabs.
1528 \# 
1529 \# String tabs don't preview properly with gxditview.  Use gv instead.
1530 \#
1531 \# Strings for string tab inlines
1532 \# ------------------------------
1533 \# Initialize string tab markers numbered 1 to 19.
1534 \#
1535 .nr #LOOP 0 1
1536 .while \n+[#LOOP]<20 \{\
1537 .   ds ST\n[#LOOP] \Ek[#ST\n[#LOOP]_OFFSET]
1538 .\}
1539 \#
1540 .nr #LOOP 0 1
1541 .while \n+[#LOOP]<20 \{\
1542 .   ds ST\n[#LOOP]X \Ek[#ST\n[#LOOP]_MARK]
1543 .\}
1544 .rr #LOOP
1545 \#
1546 \#
1547 \# These are reserved ST numbers for internal use
1548 .ds ST100  \Ek[#ST100_OFFSET]
1549 .ds ST100X \Ek[#ST100_MARK]
1550 .ds ST101  \Ek[#ST101_OFFSET]
1551 .ds ST101X \Ek[#ST101_MARK]
1552 \#
1553 \#
1554 \# QUAD AND SET STRING TABS
1555 \# ------------------------
1556 \# *Arguments:
1557 \#   <stringtab number>  L | R | C | J  [QUAD]
1558 \# *Function:
1559 \#   Creates strings $ST<#>_QUAD_DIR and $ST<#>_FILL, then sets up a
1560 \#   tab based on the collected information.
1561 \# *Notes:
1562 \#   Like TAB_SET, ST invoked without a quad direction will default to LEFT.
1563 \#   If lines should be filled and quadded, use the optional argument QUAD.
1564 \#   N.B. -- indents *must* be turned off before setting string tabs
1565 \#   inside .PAD
1566 \#
1567 .MAC ST END
1568 .    ds $ST\\$1_QUAD_DIR \\$2
1569 .    if \\n[#NUM_ARGS]=3 \{\
1570 .       ds $ST\\$1_FILL QUAD
1571 .    \}
1572 .    nr #ST\\$1_LENGTH \\n[#ST\\$1_MARK]-\\n[#ST\\$1_OFFSET]
1573 .    ie \\n[#IN_TAB] \{\
1574 .       TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u+\\n[#ST_OFFSET]u \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
1575 .    \}
1576 .    el \{\
1577 .       TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
1578 .    \}
1579 .END
1580 \#
1581 \#
1582 \# TAB SET
1583 \# -------
1584 \# *Arguments:
1585 \#   <n>  ident(ipPcm)  length(ipPcm)  [L | R | C | J [QUAD]]
1586 \# *Function:
1587 \#   Creates macros TABn and TAB n, where "n" is any arbitrary number.
1588 \#   TABn is a typesetting tab (i.e. a tab defined as an indent
1589 \#   from the page left offset plus a line length.)
1590 \# *Notes:
1591 \#   n      = arbitrary digit to identify the tab
1592 \#   indent = indent from left margin; unit of measure required
1593 \#   length = length of tab (unit of measure required; can be
1594 \#            \w'<string>'u--if more than one word in string, surround
1595 \#            with double quotes "\w'<three word string>'"
1596 \#   LRCJ   = quad for tab (left, right, center, justified)
1597 \#            If option QUAD afterwards is not given, quad is line for line
1598 \#            (no fill mode), meaning that there's no need for .BR or .br
1599 \#            between lines.
1600 \#   QUAD   = fill tab (so it behaves as if .QUAD LRC or .JUSTIFY
1601 \#            had been given).
1602 \#
1603 \#   N.B. -- indents *must* be turned off before setting tabs
1604 \#
1605 \# Examples:
1606 \# --------
1607 \# 
1608 \# .TAB_SET 1 2P+6p 12P C
1609 \# 
1610 \# means "create a tab numbered 1 that starts 2 picas and 6 points from
1611 \# the left margin, is 12 picas long, and centre each input line."
1612 \# 
1613 \# .TAB_SET 1 2P+6P 12P C QUAD
1614 \# 
1615 \# means exactly the same thing, except that input lines are joined and
1616 \# the area delimted by the tab filled with centered text.
1617 \# 
1618 \# TAB n can be called at any time after being set.
1619 \# 
1620 \# Tabs are NOT columnar in behaviour.  If the text inside a
1621 \# tab runs to several lines, when you call the next tab a break
1622 \# occurs, meaning that the new tab starts one line below the last
1623 \# line in the previous tab.  For columnar behaviour, you must
1624 \# use the multi-column macros in addition to tabs.
1625 \# 
1626 \# If you want tabs to line up bottom-line to bottom-line (most likely
1627 \# single line tabs), use .TN (provided the tabs are numbered sequentially).
1628 \# Otherwise, you must use .EL then .TAB <n> if you want them to align.
1629 \# 
1630 \# If you want to reset tabs, you must use .TQ before .TAB_SET.
1631 \# 
1632 \# Note that indents are turned off automatically whenever a new
1633 \# tab is called with TAB <n>.
1634 \# 
1635 \# Tabs themselves are user-invoked using the TAB macro with a numeric
1636 \# argument, e.g. TAB 1.
1637 \# 
1638 \# Generally, in order not to get confused, it's a good idea
1639 \# to make sure all indents are off before setting tabs.
1640 \#
1641 .MAC TAB_SET END
1642 .    br
1643 .    nr #TAB_NUMBER \\$1
1644 .    ds $CURRENT_TAB \\n[#TAB_NUMBER]
1645 .    nr #TAB_OFFSET (\\$2)
1646 .    nr #TAB_LENGTH (\\$3)
1647 .    MAC TAB\\n[#TAB_NUMBER] DONE \"Define TAB macro
1648 .        if !\\\\n[#TB+]=1 \{ .br \}
1649 .        if \\\\n[#TB+]=1 \{\
1650 .           EL
1651 .           vpt 0
1652 .           rr #TB+
1653 .        \}
1654 .        in 0
1655 .        nr #TAB_ACTIVE 1
1656 .        nr #CURRENT_TAB \\n[#TAB_NUMBER]
1657 .        ds $CURRENT_TAB \\*[$CURRENT_TAB]
1658 .        nr #TAB_OFFSET\\*[$CURRENT_TAB] \\n[#TAB_OFFSET]
1659 .        nr #ST_OFFSET \\n[#TAB_OFFSET]
1660 .        po \\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u
1661 .        ll \\n[#TAB_LENGTH]u
1662 .        ta \En(.lu
1663 .        ie '\\$5'QUAD' \{\
1664 .           if '\\$4'L' \{ .QUAD L  \}
1665 .           if '\\$4'R' \{ .QUAD R  \}
1666 .           if '\\$4'C' \{ .QUAD C  \}
1667 .           if '\\$4'J' \{ .JUSTIFY \}
1668 .        \}
1669 .        el \{\
1670 .           if '\\$4''  \{ .LEFT    \}
1671 .           if '\\$4'L' \{ .LEFT    \}
1672 .           if '\\$4'R' \{ .RIGHT   \}
1673 .           if '\\$4'C' \{ .CENTER  \}
1674 .           if '\\$4'J' \{ .JUSTIFY \}
1675 .        \}
1676 .        if \\\\n[#TN]=1 \{\
1677 .           TRAP
1678 .           rr #TN
1679 .        \}
1680 .DONE
1681 .    rr #TAB_ACTIVE
1682 .END
1683 \#
1684 \#
1685 \# TAB
1686 \# ---
1687 \# *Arguments:
1688 \#   <tab number to tab into>
1689 \# *Function:
1690 \#   Moves to tab number passed as an argument.
1691 \#
1692 .MAC TAB END
1693 .    ds $TAB_NUMBER \\$1
1694 .    TAB\\*[$TAB_NUMBER]
1695 .    nr #IN_TAB 1
1696 .END
1697 \#
1698 \#
1699 \# TAB NEXT
1700 \# --------
1701 \# *Argument:
1702 \#   <none>
1703 \# *Function:
1704 \#   Automagically moves to TAB<n+1> on the same line as the last
1705 \#   line of the previous tab.
1706 \# *Notes:
1707 \#   The \c inline must be appended to the end of input lines when in
1708 \#   nofill mode; in fill modes, the \c inline must not be used.
1709 \#
1710 .MAC TN END
1711 .    nr #TN 1
1712 .    TRAP OFF
1713 .    sp -1v
1714 .    nr #NEXT_TAB \\n[#CURRENT_TAB]+1
1715 .    TAB\\n[#NEXT_TAB]
1716 .    TRAP
1717 .END
1718 \#
1719 \# An inline escape to accomplish the same thing.  Actually
1720 \# preferable, since it works with filled and non-filled copy and
1721 \# doesn't require the user to remember to use (or not use) the \c.
1722 \#
1723 .ds TB+ "\c\\R'#TB+ 1'\\R'#TN 1'\\R'#NEXT_TAB \\n[#CURRENT_TAB]+1'\\*[TAB\\n[#NEXT_TAB]]\c
1724 \#
1725 \# TAB QUIT
1726 \# --------
1727 \# *Argument:
1728 \#   <none>
1729 \# *Function:
1730 \#   Sets #TAB_ACTIVE to "0" (off).
1731 \#   Resets left margin to value in effect prior to tabs.
1732 \#   Resets line length to value in effect prior to tabs.
1733 \#   Checks #QUAD to see if we were in flush or quad mode
1734 \#   prior to tabs (0=off, 1=on).
1735 \#   Resets QUAD [ L|R|C ], LEFT, RIGHT, CENTER, or JUSTIFY
1736 \#   in effect prior to tabs.
1737 \# *Notes:
1738 \#   TQ *must* come before setting any new tabs if you want the
1739 \#   tabs' indents measured from page left.  Otherwise, the tabs'
1740 \#   indents are measured from the left margin of the tab you're
1741 \#   currently in.
1742 \#
1743 .MAC TQ END
1744 .    br
1745 .    rr #TAB_ACTIVE
1746 .    rr #IN_TAB
1747 .    po \\n[#L_MARGIN]u
1748 .    ll \\n[#L_LENGTH]u
1749 .    ta \\n(.lu
1750 .    ie \\n[#QUAD] \{\
1751 .       ie '\\*[$RESTORE_QUAD_VALUE]'J' \{ .JUSTIFY \}
1752 .       el                              \{ .QUAD \\*[$RESTORE_QUAD_VALUE] \}
1753 .    \}
1754 .    el \{\
1755 .       if '\\*[$RESTORE_QUAD_VALUE]'LEFT'   \{ .LEFT \}
1756 .       if '\\*[$RESTORE_QUAD_VALUE]'RIGHT'  \{ .RIGHT \}
1757 .       if '\\*[$RESTORE_QUAD_VALUE]'CENTER' \{ .CENTER \}
1758 .    \}
1759 .END
1760 \#
1761 \# ====================================================================
1762 \#
1763 \# COLOR HANDLING
1764 \# ==============
1765 \#
1766 \# COLOR
1767 \# -----
1768 \# *Arguments:
1769 \#   <pre-defined NEWCOLOR or XCOLOR>
1770 \# *Function:
1771 \#   Allows the inline escape for setting color to be called
1772 \#   as a macro.
1773 \#
1774 .MAC COLOR END
1775 .ie \\n(.u=1 \{\
1776 \c
1777 \\*[\\$1]\c
1778 .\}
1779 .el \{ \\*[\\$1] \}
1780 .END
1781 \#
1782 \#
1783 \# NEWCOLOR
1784 \# --------
1785 \# *Arguments:
1786 \#   <color name> [<color scheme>] <color definition>
1787 \# *Function:
1788 \#   Based on .defcolor, allows users to name and define colors using
1789 \#   one of the four color schemes rgb, cmy, cmyk and grey.  The new
1790 \#   color is then defined as a string so that it can be called inline
1791 \#   with \*[COLORNAME] or with .COLOR.
1792 \# *Notes:
1793 \#   With only two args, the default color scheme is rgb.
1794 \#
1795 \#   It is highly recommended that users define new colors as
1796 \#   all-cap strings, to differentiate them from x colors, which must
1797 \#   be in lower case.
1798 \#
1799 .MAC NEWCOLOR END
1800 .    if \\n[#NUM_ARGS]=2 \{\
1801 .       defcolor \\$1 rgb \\$2
1802 .    \}
1803 .    if \\n[#NUM_ARGS]=3 \{\
1804 .       if '\\$2'RGB'  .ds $COLOR_SCHEME rgb
1805 .       if '\\$2'CYM'  .ds $COLOR_SCHEME cym
1806 .       if '\\$2'CMYK' .ds $COLOR_SCHEME cmyk
1807 .       if '\\$2'GRAY' .ds $COLOR_SCHEME gray
1808 .       if '\\$2'GREY' .ds $COLOR_SCHEME gray
1809 .       defcolor \\$1  \\*[$COLOR_SCHEME] \\$3
1810 .    \}
1811 .    ds \\$1 \\m[\\$1]
1812 .END
1813 \#
1814 \#
1815 \# XCOLOR
1816 \# ------
1817 \# *Arguments:
1818 \#   <x color name> [<alias>]
1819 \# *Function:
1820 \#   Defines a string of x color name (i.e. a predefined x
1821 \#   color).  If <alias> is given, creates a string of <alias name>
1822 \#   that references the x color name of the first argument.
1823 \# *Notes:
1824 \#   The color name must be a valid color name from rgb.txt, and
1825 \#   must be given entirely in lower case, all one word.
1826 \#
1827 .MAC XCOLOR END
1828 .    ds \\$1 \m[\\$1]
1829 .    if \\n[#NUM_ARGS]=2 \{\
1830 .       ds \\$2 \m[\\$1]
1831 .       ds $\\$2_FILL \\$1
1832 .    \}
1833 .END
1834 \#
1835 \# Pre-define xcolors black and white
1836 \#
1837 .ds black \m[black]
1838 .ds BLACK \m[black]
1839 .ds white \m[white]
1840 .ds WHITE \m[WHITE]
1841 \#
1842 \# =====================================================================
1843 \#
1844 \# +++MISCELLANEOUS USEFUL MACROS AND STRINGS+++
1845 \#
1846 \# UNDERLINE
1847 \# ---------
1848 \# *Arguments:
1849 \#   <none> | <anything>
1850 \# *Function:
1851 \#   When on, underlines all letters, words, and digits in a passage,
1852 \#   ignoring punctuation and spaces.
1853 \# *Notes:
1854 \#   Only for use when the font family is COURIER, to simulate
1855 \#   typewriter-style underlining of italic  passages.
1856 \#
1857 .MAC UNDERLINE END
1858 .    ie '\\$1'' \{\
1859 .       nr #UNDERLINE_ON 1
1860 .       char A _\bA
1861 .       char B _\bB
1862 .       char C _\bC
1863 .       char D _\bD
1864 .       char E _\bE
1865 .       char F _\bF
1866 .       char G _\bG
1867 .       char H _\bH
1868 .       char I _\bI
1869 .       char J _\bJ
1870 .       char K _\bK
1871 .       char L _\bL
1872 .       char M _\bM
1873 .       char N _\bN
1874 .       char O _\bO
1875 .       char P _\bP
1876 .       char Q _\bQ
1877 .       char R _\bR
1878 .       char S _\bS
1879 .       char T _\bT
1880 .       char U _\bU
1881 .       char V _\bV
1882 .       char W _\bW
1883 .       char X _\bX
1884 .       char Y _\bY
1885 .       char Z _\bZ
1886 .       char \[`A] _\b\[`A]
1887 .       char \[^A] _\b\[^A]
1888 .       char \['A] _\b\['A]
1889 .       char \[:A] _\b\[:A]
1890 .       char \[oA] _\b\[oA]
1891 .       char \[~A] _\b\[~A]
1892 .       char \[AE] _\b\[AE]
1893 .       char \[`E] _\b\[`E]
1894 .       char \[^E] _\b\[^E]
1895 .       char \['E] _\b\['E]
1896 .       char \[:E] _\b\[:E]
1897 .       char \[`I] _\b\[`I]
1898 .       char \[^I] _\b\[^I]
1899 .       char \['I] _\b\['I]
1900 .       char \[:I] _\b\[:I]
1901 .       char \[`O] _\b\[`O]
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 \[`U] _\b\[`U]
1908 .       char \[^U] _\b\[^U]
1909 .       char \['U] _\b\['U]
1910 .       char \[:U] _\b\[:U]
1911 .       char \[,C] _\b\[,C]
1912 .       char \[-D] _\b\[-D]
1913 .       char \[~N] _\b\[~N]
1914 .       char \[TP] _\b\[TP]
1915 .       char \['Y] _\b\['Y]
1916 .       char \[:Y] _\b\[:Y]
1917 .       char a _\ba
1918 .       char b _\bb
1919 .       char c _\bc
1920 .       char d _\bd
1921 .       char e _\be
1922 .       char f _\bf
1923 .       char g _\bg
1924 .       char h _\bh
1925 .       char i _\bi
1926 .       char j _\bj
1927 .       char k _\bk
1928 .       char l _\bl
1929 .       char m _\bm
1930 .       char n _\bn
1931 .       char o _\bo
1932 .       char p _\bp
1933 .       char q _\bq
1934 .       char r _\br
1935 .       char s _\bs
1936 .       char t _\bt
1937 .       char u _\bu
1938 .       char v _\bv
1939 .       char w _\bw
1940 .       char x _\bx
1941 .       char y _\by
1942 .       char z _\bz
1943 .       char \[`a] _\b\[`a]
1944 .       char \[^a] _\b\[^a]
1945 .       char \['a] _\b\['a]
1946 .       char \[:a] _\b\[:a]
1947 .       char \[oa] _\b\[oa]
1948 .       char \[~a] _\b\[~a]
1949 .       char \[ae] _\b\[ae]
1950 .       char \[`e] _\b\[`e]
1951 .       char \[^e] _\b\[^e]
1952 .       char \['e] _\b\['e]
1953 .       char \[:e] _\b\[:e]
1954 .       char \[`i] _\b\[`i]
1955 .       char \[^i] _\b\[^i]
1956 .       char \['i] _\b\['i]
1957 .       char \[:i] _\b\[:i]
1958 .       char \[`o] _\b\[`o]
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 \[`u] _\b\[`u]
1965 .       char \[^u] _\b\[^u]
1966 .       char \['u] _\b\['u]
1967 .       char \[:u] _\b\[:u]
1968 .       char \[,c] _\b\[,c]
1969 .       char \[Sd] _\b\[Sd]
1970 .       char \[~n] _\b\[~n]
1971 .       char \[Tp] _\b\[Tp]
1972 .       char \['y] _\b\['y]
1973 .       char \[:y] _\b\[:y]
1974 .       char \[ss] _\b\[ss]
1975 .       char ' _\b'
1976 .       char 1 _\b1
1977 .       char 2 _\b2
1978 .       char 3 _\b3
1979 .       char 4 _\b4
1980 .       char 5 _\b5
1981 .       char 6 _\b6
1982 .       char 7 _\b7
1983 .       char 8 _\b8
1984 .       char 9 _\b9
1985 .       char 0 _\b0
1986 .    \}
1987 .    el \{\
1988 .       nr #UNDERLINE_ON 0
1989 .       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 \
1990         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] \[^A] \['A] \[:A] \[oA] \[~A] \[AE] \[`E] \[^E] \['E] \[:E] \
1992         \[`I] \[^I] \['I] \[:I] \[`O] \[^O] \['O] \[:O] \[~O] \[/O] \[`U] \
1993         \[^U] \['U] \[:U] \[,C] \[-D] \[~N] \[TP] \['Y] \[:Y] \
1994         \[`a] \[^a] \['a] \[:a] \[oa] \[~a] \[ae] \[`e] \[^e] \['e] \[:e] \[`i] \
1995         \[^i] \['i] \[:i] \[`o] \[^o] \['o] \[:o] \[~o] \[/o] \[`u] \[^u] \['u] \
1996         \[:u] \[,c] \[Sd] \[~n] \[Tp] \['y] \[:y] \[ss] \
1997         ' 1 2 3 4 5 6 7 8 9 0
1998 .    \}
1999 .END
2000 \#
2001 \#
2002 \# UL/ULX
2003 \# ------
2004 \# *Arguments:
2005 \#   <none>
2006 \# *Function:
2007 \#   Underscores all letters, words, and digits in a passage,
2008 \#   ignoring punctuation and spaces.
2009 \# *Notes:
2010 \#   Intended to be called with inline escapes \*[UL] (underline
2011 \#   on) and \*[ULX] (underline off).  Only works when the font family
2012 \#   is fixed width, to simulate typewriter-style underlining of italic
2013 \#   passages.
2014 \#
2015 .MAC UL END
2016 \c\R'#UNDERLINE_ON 1'
2017 .       char A _\bA
2018 .       char B _\bB
2019 .       char C _\bC
2020 .       char D _\bD
2021 .       char E _\bE
2022 .       char F _\bF
2023 .       char G _\bG
2024 .       char H _\bH
2025 .       char I _\bI
2026 .       char J _\bJ
2027 .       char K _\bK
2028 .       char L _\bL
2029 .       char M _\bM
2030 .       char N _\bN
2031 .       char O _\bO
2032 .       char P _\bP
2033 .       char Q _\bQ
2034 .       char R _\bR
2035 .       char S _\bS
2036 .       char T _\bT
2037 .       char U _\bU
2038 .       char V _\bV
2039 .       char W _\bW
2040 .       char X _\bX
2041 .       char Y _\bY
2042 .       char Z _\bZ
2043 .       char \[`A] _\b\[`A]
2044 .       char \[^A] _\b\[^A]
2045 .       char \['A] _\b\['A]
2046 .       char \[:A] _\b\[:A]
2047 .       char \[oA] _\b\[oA]
2048 .       char \[~A] _\b\[~A]
2049 .       char \[AE] _\b\[AE]
2050 .       char \[`E] _\b\[`E]
2051 .       char \[^E] _\b\[^E]
2052 .       char \['E] _\b\['E]
2053 .       char \[:E] _\b\[:E]
2054 .       char \[`I] _\b\[`I]
2055 .       char \[^I] _\b\[^I]
2056 .       char \['I] _\b\['I]
2057 .       char \[:I] _\b\[:I]
2058 .       char \[`O] _\b\[`O]
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 \[`U] _\b\[`U]
2065 .       char \[^U] _\b\[^U]
2066 .       char \['U] _\b\['U]
2067 .       char \[:U] _\b\[:U]
2068 .       char \[,C] _\b\[,C]
2069 .       char \[-D] _\b\[-D]
2070 .       char \[~N] _\b\[~N]
2071 .       char \[TP] _\b\[TP]
2072 .       char \['Y] _\b\['Y]
2073 .       char \[:Y] _\b\[:Y]
2074 .       char a _\ba
2075 .       char b _\bb
2076 .       char c _\bc
2077 .       char d _\bd
2078 .       char e _\be
2079 .       char f _\bf
2080 .       char g _\bg
2081 .       char h _\bh
2082 .       char i _\bi
2083 .       char j _\bj
2084 .       char k _\bk
2085 .       char l _\bl
2086 .       char m _\bm
2087 .       char n _\bn
2088 .       char o _\bo
2089 .       char p _\bp
2090 .       char q _\bq
2091 .       char r _\br
2092 .       char s _\bs
2093 .       char t _\bt
2094 .       char u _\bu
2095 .       char v _\bv
2096 .       char w _\bw
2097 .       char x _\bx
2098 .       char y _\by
2099 .       char z _\bz
2100 .       char \[`a] _\b\[`a]
2101 .       char \[^a] _\b\[^a]
2102 .       char \['a] _\b\['a]
2103 .       char \[:a] _\b\[:a]
2104 .       char \[oa] _\b\[oa]
2105 .       char \[~a] _\b\[~a]
2106 .       char \[ae] _\b\[ae]
2107 .       char \[`e] _\b\[`e]
2108 .       char \[^e] _\b\[^e]
2109 .       char \['e] _\b\['e]
2110 .       char \[:e] _\b\[:e]
2111 .       char \[`i] _\b\[`i]
2112 .       char \[^i] _\b\[^i]
2113 .       char \['i] _\b\['i]
2114 .       char \[:i] _\b\[:i]
2115 .       char \[`o] _\b\[`o]
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 \[`u] _\b\[`u]
2122 .       char \[^u] _\b\[^u]
2123 .       char \['u] _\b\['u]
2124 .       char \[:u] _\b\[:u]
2125 .       char \[,c] _\b\[,c]
2126 .       char \[Sd] _\b\[Sd]
2127 .       char \[~n] _\b\[~n]
2128 .       char \[Tp] _\b\[Tp]
2129 .       char \['y] _\b\['y]
2130 .       char \[:y] _\b\[:y]
2131 .       char \[ss] _\b\[ss]
2132 .       char ' _\b'
2133 .       char 1 _\b1
2134 .       char 2 _\b2
2135 .       char 3 _\b3
2136 .       char 4 _\b4
2137 .       char 5 _\b5
2138 .       char 6 _\b6
2139 .       char 7 _\b7
2140 .       char 8 _\b8
2141 .       char 9 _\b9
2142 .       char 0 _\b0
2143 .END
2144 \#
2145 \#
2146 .MAC ULX END
2147 \c\R'#UNDERLINE_ON 0'
2148 .    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 \
2149      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] \[^A] \['A] \[:A] \[oA] \[~A] \[AE] \[`E] \[^E] \['E] \[:E] \
2151      \[`I] \[^I] \['I] \[:I] \[`O] \[^O] \['O] \[:O] \[~O] \[/O] \[`U] \
2152      \[^U] \['U] \[:U] \[,C] \[-D] \[~N] \[TP] \['Y] \[:Y] \
2153      \[`a] \[^a] \['a] \[:a] \[oa] \[~a] \[ae] \[`e] \[^e] \['e] \[:e] \[`i] \
2154      \[^i] \['i] \[:i] \[`o] \[^o] \['o] \[:o] \[~o] \[/o] \[`u] \[^u] \['u] \
2155      \[:u] \[,c] \[Sd] \[~n] \[Tp] \['y] \[:y] \[ss] \
2156      ' 1 2 3 4 5 6 7 8 9 0
2157 .END
2158 \#
2159 \#
2160 \# UNDERSCORE
2161 \# ----------
2162 \# *Arguments:
2163 \#   [<points below baseline>] "text"
2164 \# *Function:
2165 \#   Places an underscore 2 points under the string if no lead given,
2166 \#   otherwise places underscore under string by user specified amount.
2167 \# *Notes:
2168 \#   When using this macro, the string to be underscored must begin
2169 \#   with double-quotes ("), regardless of whether it's the sole
2170 \#   argument or the second.
2171 \#   E.g.:
2172 \#      .UNDERSCORE "Text to be underscored
2173 \#         or
2174 \#      .UNDERSCORE 2p "Text to be underscored
2175 \#
2176 \#   All text is underscored (including punctuation and spaces).
2177 \#   This is the primary difference between UNDERLINE and
2178 \#   UNDERSCORE, aside from the fact the UNDERLINE only works with
2179 \#   fixed width fonts.
2180 \#
2181 \#   UNDERSCORE does not work across line breaks.  Each line of
2182 \#   text must be entered separately with UNDERSCORE.  If the
2183 \#   UNDERSCORE begins in the middle of a line and crosses over a
2184 \#   break, the portion before the break must be entered in its own
2185 \#   UNDERSCORE, as must the portion that comes after the break.
2186 \#
2187 .MAC UNDERSCORE END
2188 .    nr #SAVED_UNDERSCORE_WEIGHT     \\n[#UNDERSCORE_WEIGHT]
2189 .    nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ]
2190 .    ds $SAVED_UNDERSCORE_GAP        \\*[$UNDERSCORE_GAP]
2191 .    if \\n[#FROM_BIB_STRING]=1 \{\
2192 .       nr #UNDERSCORE_WEIGHT     \\n[#BIB_STRING_UNDERLINE_WEIGHT]
2193 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#BIB_STRING_UNDERLINE_WEIGHT_ADJ]
2194 .       ds $UNDERSCORE_GAP        \\*[$BIB_STRING_UNDERLINE_GAP]
2195 .    \}
2196 .    if \\n[#FROM_COVER]=1 \{\
2197 .       nr #UNDERSCORE_WEIGHT     \\n[#COVER_UNDERLINE_WEIGHT]
2198 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#COVER_UNDERLINE_WEIGHT_ADJ]
2199 .       ds $UNDERSCORE_GAP        \\*[$COVER_UNDERLINE_GAP]
2200 .    \}
2201 .    if \\n[#FROM_DOC_COVER]=1 \{\
2202 .       nr #UNDERSCORE_WEIGHT     \\n[#DOCCOVER_UNDERLINE_WEIGHT]
2203 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#DOCCOVER_UNDERLINE_WEIGHT_ADJ]
2204 .       ds $UNDERSCORE_GAP        \\*[$DOCCOVER_UNDERLINE_GAP]
2205 .    \}
2206 .    if \\n[#FROM_DOCTYPE]=1 \{\
2207 .       nr #UNDERSCORE_WEIGHT     \\n[#DOCTYPE_UNDERLINE_WEIGHT]
2208 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#DOCTYPE_UNDERLINE_WEIGHT_ADJ]
2209 .       ds $UNDERSCORE_GAP        \\*[$DOCTYPE_UNDERLINE_GAP]
2210 .    \}
2211 .    if \\n[#FROM_HEAD]=1 \{\
2212 .       nr #UNDERSCORE_WEIGHT     \\n[#HEAD_UNDERLINE_WEIGHT]
2213 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#HEAD_UNDERLINE_WEIGHT_ADJ]
2214 .       ds $UNDERSCORE_GAP        \\*[$HEAD_UNDERLINE_GAP]
2215 .    \}
2216 .    if \\n[#FROM_EN_STRING]=1 \{\
2217 .       nr #UNDERSCORE_WEIGHT     \\n[#EN_STRING_UNDERLINE_WEIGHT]
2218 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#EN_STRING_UNDERLINE_WEIGHT_ADJ]
2219 .       ds $UNDERSCORE_GAP        \\*[$EN_STRING_UNDERLINE_GAP]
2220 .    \}
2221 .    if \\n[#FROM_EN_TITLE]=1 \{\
2222 .       nr #UNDERSCORE_WEIGHT     \\n[#EN_TITLE_UNDERLINE_WEIGHT]
2223 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#EN_TITLE_UNDERLINE_WEIGHT_ADJ]
2224 .       ds $UNDERSCORE_GAP        \\*[$EN_TITLE_UNDERLINE_GAP]
2225 .    \}
2226 .    ie \\n[#NUM_ARGS]=1 \{\
2227 .       nr #TEXT_WIDTH \w'\\$1'
2228 \\$1\
2229 \D't \\n[#UNDERSCORE_WEIGHT]'\
2230 \h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
2231 \v'+(\\*[$UNDERSCORE_GAP])+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
2232 \D'l \\n[#TEXT_WIDTH]u 0'\
2233 \D't \\n[#RULE_WEIGHT]'\
2234 \h'-\\n[#RULE_WEIGHT]u'\
2235 \v'-(\\*[$UNDERSCORE_GAP])-\\n[#UNDERSCORE_WEIGHT_ADJ]u'
2236 .    \}
2237 .    el \{\
2238 .       nr #TEXT_WIDTH \w'\\$2'
2239 \\$2\
2240 \h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
2241 \v'+(\\$1)+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
2242 \D't \\n[#UNDERSCORE_WEIGHT]'\
2243 \D'l \\n[#TEXT_WIDTH]u 0'\
2244 \D't \\n[#RULE_WEIGHT]'\
2245 \h'-\\n[#RULE_WEIGHT]u'\
2246 \v'-(\\$1)-\\n[#UNDERSCORE_WEIGHT_ADJ]u'
2247 .    \}
2248 .    nr #UNDERSCORE_WEIGHT     \\n[#SAVED_UNDERSCORE_WEIGHT]
2249 .    nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ]
2250 .    ds $UNDERSCORE_GAP        \\*[$SAVED_UNDERSCORE_GAP]
2251 .    rr #SAVED_UNDERSCORE_WEIGHT
2252 .    rr #SAVED_UNDERSCORE_WEIGHT_ADJ
2253 .    rm $SAVED_UNDERSCORE_GAP
2254 .END
2255 \#
2256 \#
2257 \# DOUBLE UNDERSCORE
2258 \# -----------------
2259 \# *Arguments:
2260 \#   [points below baseline] [points distance between rules] "text"
2261 \# *Function:
2262 \#   Same as UNDERSCORE, except it produces a double underscore.  The default
2263 \#   distance between the rules is 2 points.
2264 \# *Notes:
2265 \#   The same double-quote requirement as UNDERSCORE.
2266 \#
2267 \#
2268 .MAC UNDERSCORE2 END
2269 .    nr #SAVED_UNDERSCORE_WEIGHT     \\n[#UNDERSCORE_WEIGHT]
2270 .    nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ]
2271 .    ds $SAVED_UNDERSCORE_GAP        \\*[$UNDERSCORE_GAP]
2272 .    ds $SAVED_RULE_GAP              \\*[$RULE_GAP]
2273 .    if \\n[#NUM_ARGS]=2 \{\
2274 .       ds $UNDERSCORE_GAP \\$1
2275 .    \}
2276 .    if \\n[#NUM_ARGS]=3 \{\
2277 .       ds $UNDERSCORE_GAP \\$1
2278 .       ds $RULE_GAP \\$2
2279 .    \}
2280 .    if \\n[#FROM_BIB_STRING] \{\
2281 .       nr #UNDERSCORE_WEIGHT     \\n[#BIB_STRING_UNDERLINE_WEIGHT]
2282 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#BIB_STRING_UNDERLINE_WEIGHT_ADJ]
2283 .       ds $UNDERSCORE_GAP        \\*[$BIB_STRING_UNDERLINE_GAP]
2284 .       ds $RULE_GAP              \\*[$BIB_STRING_RULE_GAP]
2285 .    \}
2286 .    if \\n[#FROM_EN_STRING] \{\
2287 .       nr #UNDERSCORE_WEIGHT     \\n[#EN_STRING_UNDERLINE_WEIGHT]
2288 .       nr #UNDERSCORE_WEIGHT_ADJ \\n[#EN_STRING_UNDERLINE_WEIGHT_ADJ]
2289 .       ds $UNDERSCORE_GAP        \\*[$EN_STRING_UNDERLINE_GAP]
2290 .       ds $RULE_GAP              \\*[$EN_STRING_RULE_GAP]
2291 .    \}
2292 .    if \\n[#NUM_ARGS]=1 \{\
2293 .       nr #TEXT_WIDTH \w'\\$1'
2294 \\$1\
2295 \D't \\n[#UNDERSCORE_WEIGHT]'\
2296 \v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
2297 \h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
2298 \D'l \\n[#TEXT_WIDTH]u 0'\
2299 \v'+\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
2300 \h'-\\n[#TEXT_WIDTH]u'\
2301 \D'l \\n[#TEXT_WIDTH]u 0'\
2302 \D't \\n[#RULE_WEIGHT]'\
2303 \h'-\\n[#RULE_WEIGHT]u'\
2304 \v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'
2305 .    \}
2306 .    if \\n[#NUM_ARGS]=2 \{\
2307 .       nr #TEXT_WIDTH \w'\\$2'
2308 \\$2\
2309 \D't \\n[#UNDERSCORE_WEIGHT]'\
2310 \v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
2311 \h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
2312 \D'l \\n[#TEXT_WIDTH]u 0'\
2313 \v'+(\\*[$RULE_GAP])+\\n[#UNDERSCORE_WEIGHT]u'\
2314 \h'-\\n[#TEXT_WIDTH]u'\
2315 \D'l \\n[#TEXT_WIDTH]u 0'\
2316 \D't \\n[#RULE_WEIGHT]'\
2317 \h'-\\n[#RULE_WEIGHT]u'\
2318 \v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])+(\\n[#UNDERSCORE_WEIGHT]u*2u)'
2319 .    \}
2320 .    if \\n[#NUM_ARGS]=3 \{\
2321 .       nr #TEXT_WIDTH \w'\\$3'
2322 \\$3\
2323 \D't \\n[#UNDERSCORE_WEIGHT]'\
2324 \v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
2325 \h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
2326 \D'l \\n[#TEXT_WIDTH]u 0'\
2327 \v'+\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
2328 \h'-\\n[#TEXT_WIDTH]u'\
2329 \D'l \\n[#TEXT_WIDTH]u 0'\
2330 \D't \\n[#RULE_WEIGHT]'\
2331 \h'-\\n[#RULE_WEIGHT]u'\
2332 \v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'
2333 .    \}
2334 .    nr #UNDERSCORE_WEIGHT     \\n[#SAVED_UNDERSCORE_WEIGHT]
2335 .    nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ]
2336 .    ds $UNDERSCORE_GAP        \\*[$SAVED_UNDERSCORE_GAP]
2337 .    rr #SAVED_UNDERSCORE_WEIGHT
2338 .    rr #SAVED_UNDERSCORE_WEIGHT_ADJ
2339 .    rm $SAVED_UNDERSCORE_GAP
2340 .    rm $SAVED_RULE_GAP
2341 .END
2342 \#
2343 \# Default underscoring rule gaps
2344 \#
2345 .ds $BIB_STRING_UNDERLINE_GAP 2p
2346 .ds $BIB_STRING_RULE_GAP      2p
2347 .ds $COVER_UNDERLINE_GAP      2p
2348 .ds $DOCCOVER_UNDERLINE_GAP   2p
2349 .ds $DOCTYPE_UNDERLINE_GAP    2p
2350 .ds $EN_STRING_UNDERLINE_GAP  2p
2351 .ds $EN_STRING_RULE_GAP       2p
2352 .ds $EN_TITLE_UNDERLINE_GAP   2p
2353 .ds $HEAD_UNDERLINE_GAP       2p
2354 .ds $RULE_GAP                 2p
2355 .ds $UNDERSCORE_GAP           2p
2356 \#
2357 \#
2358 \# SUPERSCRIPT INLINES
2359 \# -------------------
2360 \# *Function:
2361 \#   Prints everything after invocation as superscript.
2362 \# *Notes:
2363 \#   \*[SUP] and \*[SUPX] turn superscript on and off respectively.
2364 \#   If running type is pseudo-condensed/expanded, invoke the superscript
2365 \#   strings as \*[CONDSUP] or \*[EXTSUP] and turn off with \*[CONDSUPX]
2366 \#   and \*[EXTSUPX] respectively.
2367 \#
2368 .ds SUP \
2369 \R'#PT_SIZE_IN_UNITS \En[.ps]'\
2370 \R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
2371 \s[\En[#PT_SIZE_IN_UNITS]u]\v'-.26m'\s[\En[#SUP_PT_SIZE]u]
2372 \#
2373 .ds SUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.26m'
2374 \#
2375 .ds CONDSUP \
2376 \R'#PT_SIZE_IN_UNITS \En[.ps]'\
2377 \R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
2378 \s[\En[#PT_SIZE_IN_UNITS]u]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]\E*[COND_FOR_SUP]
2379 \#
2380 .ds CONDSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'\E*[COND]
2381 \#
2382 .ds EXTSUP \
2383 \R'#PT_SIZE_IN_UNITS \En[.ps]'\
2384 \R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
2385 \s[\En[#PT_SIZE_IN_UNITS]u]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]\E*[EXT_FOR_SUP]
2386 \#
2387 .ds EXTSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'\E*[EXT]
2388 \#
2389 \#
2390 \# SLANT
2391 \# -----
2392 \#
2393 \# SETSLANT
2394 \# --------
2395 \# *Arguments:
2396 \#   <number of degrees> | RESET
2397 \# *Function:
2398 \#   Modifies register #DEGREES for use with \*[SLANT], or resets
2399 \#   it to the default.  Defines string \*[SLANTX]
2400 \# *Notes:
2401 \#   \*[SLANT] permits pseudo-italicizing of a font in cases where
2402 \#   no italic font exists in a particular family.
2403 \#
2404 \#   Default # of degrees is 15.
2405 \#
2406 \#   Do not use unit of measure with arg to SETSLANT.
2407 \#
2408 \#   It may be necessary to adjust the spacing on either side of
2409 \#   [SLANT] and [SLANTX].
2410 \#
2411 \#   In docs, SLANT carries over from para to para.
2412 \#
2413 .nr #DEGREES 15
2414 .ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
2415 .ds SLANTX \ER'#SLANT_ON 0'\ES'0'
2416 \#
2417 .MAC SETSLANT END
2418 .    ie '\\$1'RESET' \{\
2419 .       nr #DEGREES 15
2420 .       if \\n[#PRINT_STYLE]=1 \{\
2421 .          if \\n[#UNDERLINE_SLANT] \{ .return \}
2422 .       \}
2423 .       ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
2424 .    \}
2425 .    el \{\
2426 .       nr #DEGREES \\$1
2427 .       if \\n[#PRINT_STYLE]=1 \{\
2428 .          if \\n[#UNDERLINE_SLANT] \{ .return \}
2429 .       \}
2430 .       ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
2431 .    \}
2432 .    ds SLANTX \ER'#SLANT_ON 0'\ES'0'
2433 .END
2434 \#
2435 \#
2436 \# BOLDER
2437 \# ------
2438 \#
2439 \# SETBOLDER
2440 \# ---------
2441 \# *Arguments:
2442 \#   <amount of emboldening> | RESET
2443 \# *Function:
2444 \#   Modifies register #BOLDER_UNITS for use with \*[BOLDER], or resets
2445 \#   it to the default 700 units.
2446 \# *Notes:
2447 \#   \*[BOLDER] allows pseudo-emboldening of a font where no bold
2448 \#   font exists in a particular family.
2449 \#
2450 \#   Default for SETBOLDER is 700 units.  Do not use unit of measure
2451 \#   with arg to SETBOLDER.
2452 \#
2453 .nr #BOLDER_UNITS 700
2454 \#
2455 .MAC SETBOLDER END
2456 .    if \\n[#IGNORE]=1 \{ .return \}
2457 .    ie '\\$1'RESET' \{ .nr #BOLDER_UNITS 700 \}
2458 .    el \{ .nr #BOLDER_UNITS \\$1 \}
2459 .END
2460 \#
2461 \#
2462 .MAC BOLDER END
2463 \c
2464 .bd \\n(.f \\n[#BOLDER_UNITS]
2465 .END
2466 \#
2467 \#
2468 .MAC BOLDERX END
2469 \c
2470 .bd \\n(.f
2471 .END
2472 \#
2473 \# +++CONDENSE/EXTEND+++
2474 \#
2475 \# CONDENSE/EXTEND
2476 \# ---------------
2477 \# *Arguments:
2478 \#   <percentage to condense/expand type size>
2479 \# *Function:
2480 \#   Stores current point size in z's in #PT_SIZE_IN_UNITS, figures out
2481 \#   new point size (for character width) from arg, and defines string
2482 \#   COND or EXT, which set the type size to the new character width,
2483 \#   and sets the height of type to the value stored in CURRENT_PT_SIZE
2484 \# *Notes:
2485 \#   CONDENSE_OR_EXTEND is invoked from the aliases
2486 \#   CONDENSE and EXTEND.  CONDENSE implies <100, EXTEND
2487 \#   implies >100.  Do not use a percent sign in the argument.
2488 \#
2489 \#   There is no default setting for CONDENSE or EXTEND.
2490 \#   80 is a good approximation of condensed type, 120 is okay
2491 \#   for extended.
2492 \#
2493 \#   The value set by CONDENSE or EXTEND applies to all
2494 \#   subsequent \*[COND] or \*[EXT] escapes until a new value is set.
2495 \#
2496 \#  \*[COND] or \*[EXT] must be turned off before all changes of point
2497 \#  size and reinvoked afterwards (if so desired).  This refers to
2498 \#  changes of point size via control lines AND with via inlines.
2499 \#
2500 .MAC CONDENSE_OR_EXTEND END
2501 .    if '\\$0'CONDENSE' \{\
2502 .       ds $COND_PERCENT \\$1
2503 .       if \\n[#PRINT_STYLE]=1 \{\
2504 .          rm $COND_PERCENT
2505 .          ds $COND_PERCENT 100
2506 .       \}
2507 .       ds COND \
2508 \R'#PT_SIZE_IN_UNITS \En[.ps]'\
2509 \R'#CONDENSE 1'\
2510 \R'#COND_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$COND_PERCENT]u)/100'\
2511 \Es[\En[#COND_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
2512 .       ds COND_FOR_SUP \
2513 \R'#COND_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$COND_PERCENT]u)/100'\
2514 \Es[\En[#COND_WIDTH]u]\H'\En[#SUP_PT_SIZE]u'
2515 .    \}
2516 .    if '\\$0'EXTEND' \{\
2517 .       ds $EXT_PERCENT \\$1
2518 .       if \\n[#PRINT_STYLE]=1 \{\
2519 .          rm $EXT_PERCENT
2520 .          ds $EXT_PERCENT 100
2521 .       \}
2522 .       ds EXT \
2523 \R'#PT_SIZE_IN_UNITS \En[.ps]'\
2524 \R'#EXTEND 1'\
2525 \R'#EXT_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$EXT_PERCENT]u)/100'\
2526 \Es[\En[#EXT_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
2527 .       ds EXT_FOR_SUP \
2528 \R'#EXT_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$EXT_PERCENT]u)/100'\
2529 \Es[\En[#EXT_WIDTH]u]\H'\En[#EXT_PT_SIZE]u'
2530 .    \}
2531 .END
2532 \#
2533 .ds CONDX \ER'#CONDENSE 0'\Es0\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
2534 .ds EXTX  \ER'#EXTEND   0'\Es0\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
2535 \#
2536 \#
2537 \# +++PAD LINES+++ (insert space)
2538 \#
2539 \# PAD MARKER
2540 \# ----------
2541 \# *Arguments:
2542 \#   <character to use for marking pad points>
2543 \# *Function:
2544 \#   Defines string $PAD_MARKER, used in PAD
2545 \# *Notes:
2546 \#   $PAD_MARKER is normally # (the pound sign).
2547 \#
2548 .MAC PAD_MARKER END
2549 .    ds $PAD_MARKER \\$1
2550 .END
2551 \#
2552 \#
2553 \# PAD
2554 \# ---
2555 \# *Argments:
2556 \#   "<string of text with padding markers inserted>"
2557 \# *Function:
2558 \#   Defines and redefines padding character (default=pound sign
2559 \#   unless padding character has been set with PAD_MARKER)
2560 \#   several times so that when the string is output at the end
2561 \#   of the macro, every # has been converted to an equal-sized
2562 \#   amount of padding (blank space) on a line. # is equivalent to
2563 \#   CompuGraphic's old <IS>.
2564 \# *Notes:
2565 \#   String tabs may be marked off during PAD.
2566 \#
2567 .MAC PAD END
2568 .    if \\n(.u=1 \{ .nr #FILL_MODE 1 \}
2569 .    nf
2570 .    if !d$PAD_MARKER .ds $PAD_MARKER #
2571 .    char \\*[$PAD_MARKER] \R'#PAD_COUNT \En[#PAD_COUNT]+1'
2572 .    ds $FAMILY_FOR_PAD \\n[.fam]
2573 .    fp \\n[.fp] \\n[.sty]
2574 .    ds $FONT_FOR_PAD   \\*[$FONT]
2575 .    nr #SIZE_FOR_PAD   \\n[.ps]
2576 .    ds $PAD_STRING \\$1
2577 .    as $PAD_STRING \Ekp
2578 .    di PAD_STRING
2579 .    fam \\*[$FAMILY_FOR_PAD]
2580 \\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
2581 .    br
2582 .    di
2583 .    char \\*[$PAD_MARKER] \R'#SPACE_TO_END \En(.l-\Enp'\R'#PAD_SPACE \En[#SPACE_TO_END]/\En[#PAD_COUNT]'
2584 .    di PAD_STRING
2585 .    fam \\*[$FAMILY_FOR_PAD]
2586 \\f]\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
2587 .    br
2588 .    di
2589 .    char \\*[$PAD_MARKER] \h'\En[#PAD_SPACE]u'
2590 .    ie \\n[#SILENT] \{\
2591 .       SILENT
2592 .       fam \\*[$FAMILY_FOR_PAD]
2593 \\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
2594 .       br
2595 .       SILENT OFF
2596 .    \}
2597 .    el \{\
2598 .       fam \\*[$FAMILY_FOR_PAD]
2599 \\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
2600 .       br
2601 .    \}
2602 .    if \\n[#FILL_MODE]=1 \{\
2603 .       fi
2604 .       rr #FILL_MODE
2605 .    \}
2606 .    rr #PAD_COUNT
2607 .    rr #SPACE_TO_END
2608 .    rr #PAD_SPACE
2609 .    rm $PAD_STRING
2610 .    rm PAD_STRING
2611 .    rchar #
2612 .    if '\\$2'NOBREAK' \{\
2613 .       TRAP OFF
2614 .       EOL
2615 .       TRAP
2616 .    \}
2617 .END
2618 \#
2619 \#
2620 \# +++LEADERS+++
2621 \#
2622 \# The leader mechanism is primitive, but it works.  Basically, every
2623 \# macro in this set that includes a line length also sets a single
2624 \# groff tab stop at the right hand end of the line.  That way,
2625 \# whenever Ctrl-A is invoked (always at the end of an input line),
2626 \# leader of the correct length gets deposited.  Ctrl-A is accessed by
2627 \# the string LEADER (i.e. inline, as \*[LEADER]).  Leaders within tabs
2628 \# get their length from the tab line length.
2629 \#
2630 \# SET LEADER CHARACTER
2631 \# --------------------
2632 \# *Arguments:
2633 \#   <character to use whenever \*[LEADER] is invoked>
2634 \# *Function:
2635 \#   Set leader character.
2636 \#
2637 .MAC LEADER_CHARACTER END
2638 .    lc \\$1
2639 .END
2640 \#
2641 .ds LEADER \ 1
2642 \#
2643 \# +++DROP CAPS+++
2644 \#
2645 \# DROP CAP FAMILY
2646 \# ---------------
2647 \# *Argument:
2648 \#   <family of drop cap>
2649 \# *Function:
2650 \#   Creates or modifies string $DC_FAM.
2651 \#
2652 .MAC DROPCAP_FAMILY END
2653 .    ds $DC_FAM \\$1
2654 .END
2655 \#
2656 \#
2657 \# DROP CAP FONT
2658 \# -------------
2659 \# *Argument:
2660 \#   <font of drop cap>
2661 \# *Function:
2662 \#   Creates or modifies string $DC_FT.
2663 \#
2664 .MAC DROPCAP_FONT END
2665 .    ds $DC_FT \\$1
2666 .END
2667 \#
2668 \#
2669 \# DROPCAP COLOR
2670 \# -------------
2671 \# *Arguments:
2672 \#   <pre-defined XCOLOR or NEWCOLOR>
2673 \# *Function:
2674 \#   Defines string $DC_COLOR to argument.
2675 \# *Notes:
2676 \#   User must define an XCOLOR or NEWCOLOR before using
2677 \#   DC_COLOR.
2678 \#
2679 .MAC DROPCAP_COLOR END
2680 .    if \\n[#PRINT_STYLE]=1 \{ .return \}
2681 .    nr #DC_COLOR 1
2682 .    ds $DC_COLOR \\$1
2683 .END
2684 \#
2685 \#
2686 \# DROP CAP GUTTER
2687 \# ---------------
2688 \# *Argument:
2689 \#   <width of gutter between drop cap and indented text>
2690 \# *Function:
2691 \#   Creates or modifies register #DC_GUT.
2692 \# *Notes:
2693 \#   Requires unit of measure.  Default is 3p.
2694 \#
2695 .MAC DROPCAP_GUTTER END
2696 .    nr #DC_GUT (\\$1)
2697 .END
2698 \#
2699 \#
2700 \# DROP CAP ADJUST
2701 \# ---------------
2702 \# *Argument:
2703 \#   <+|- # of points to in/decrease point size of drop cap letter>
2704 \# *Function:
2705 \#   Creates or modifies string $DC_ADJUST.
2706 \# *Notes:
2707 \#   Despite its best efforts, DROPCAP doesn't always get the point
2708 \#   size of the drop cap critically perfect.  DROPCAP_ADJUST lets
2709 \#   the user add or subtract points (or fractions of points) to
2710 \#   get the size right.
2711 \#
2712 \#   Requires the + or - sign.
2713 \#
2714 .MAC DROPCAP_ADJUST END
2715 .    ds $DC_ADJUST \\$1
2716 .END
2717 \#
2718 \#
2719 \# DROP CAP
2720 \# --------
2721 \# *Arguments:
2722 \#   <dropcap letter> <# of lines> [COND <% to condense> | EXT <% to extend>]
2723 \# *Function:
2724 \#   Calculates point size of dropcap based on # of lines passed as
2725 \#   arg 2.  Sets indent for text based on dropcap width+gutter.
2726 \#   Advances and prints dropcap; reverses and prints indented text
2727 \#   to bottom of dropcap, then resets indent to left margin (plus
2728 \#   any indent that was in effect prior to invoking DROPCAP).
2729 \# *Notes:
2730 \#   Drop caps put a strain on on resource-challenged systems.
2731 \#
2732 \#   Drop caps when using the doc processing macro PP only work with
2733 \#   initial paragraphs (i.e. at doc start, or after heads), only when
2734 \#   DROPCAPS comes immediately after PP, and only when the PRINTSTYLE
2735 \#   is TYPESET.  If these conditions aren't met, DROPCAPS is silently
2736 \#   ignored.
2737 \#
2738 \#   The COND or EXT argument are processed separately from all
2739 \#   other COND or EXT inlines or macros, hence passing COND or
2740 \#   EXT has no effect on running type.
2741 \#
2742 .MAC DROPCAP END
2743 .    if \\n[#IGNORE]=1 \{\
2744 .       PRINT \\$1\c
2745 .       return
2746 .    \}
2747 .    br
2748 .    if n \{\
2749 .       PRINT \\$1\c
2750 .       return
2751 .    \}
2752 .    if \\n[#DOCS] \{\
2753 .       if \\n[#PRINT_STYLE]=1 \{\
2754 .       PRINT \\$1\c
2755 .       return
2756 .    \}
2757 .       if \\n[#PRINT_STYLE]=2 \{\
2758 .          if \\n[#PP_STYLE]=2 \{\
2759 .             PRINT \\$1\c
2760 .             return
2761 .          \}
2762 .          if \\n[#PP]>1 \{\
2763 .             PRINT \\$1\c
2764 .             return
2765 .          \}
2766 .          ti 0
2767 .       \}
2768 .    \}
2769 .    ds $DROPCAP         \\$1
2770 .    nr #DC_LINES        \\$2-1
2771 .    if \\n[#CONDENSE]=1 \{\
2772 .       ds $RESTORE_COND \\*[$COND_PERCENT]
2773 \\*[CONDX]
2774 .       nr #CONDENSE_WAS_ON 1
2775 .    \}
2776 .    if \\n[#EXTEND]=1 \{\
2777 .       ds $RESTORE_EXT \\*[$EXT_PERCENT]
2778 \\*[EXTX]
2779 .       nr #EXTEND_WAS_ON 1
2780 .    \}
2781 .    if '\\$3'COND'      \{ .CONDENSE \\$4 \}
2782 .    if '\\$3'EXT'       \{ .EXTEND \\$4 \}
2783 .    if !r#DC_GUT        \{ .nr #DC_GUT (3p) \}
2784 .    ds $RESTORE_FAM     \\n[.fam]
2785 .    ds $RESTORE_FT      \\*[$FONT]
2786 .    nr #RESTORE_PT_SIZE \\n[#PT_SIZE]
2787 .    nr #RESTORE_INDENT  \\n(.i
2788 .    SIZESPECS
2789 .    nr #DC_HEIGHT \\n[#DC_LINES]*\\n[#LEAD]+\\n[#CAP_HEIGHT]
2790 .    ie !d$DC_FAM \{ .FAM \\n[.fam] \}
2791 .    el \{ .FAM \\*[$DC_FAM] \}
2792 .    ie !d$DC_FT \{ .FT \\*[$FONT] \}
2793 .    el \{ .FT \\*[$DC_FT] \}
2794 .    while \\n[#GET_DC_HEIGHT]<\\n[#DC_HEIGHT] \{\
2795 .       ps \\n[#PT_SIZE]u+100u
2796 .       SIZESPECS
2797 .       nr #GET_DC_HEIGHT \\n[#CAP_HEIGHT]
2798 .\}
2799 .    if d$DC_ADJUST \{ .ps \\*[$DC_ADJUST]p \}
2800 .    mk x
2801 .    sp \\n[#DC_LINES]v
2802 .    if \\n[#DOCS]=1 \{ .SHIM \}
2803 .    ie \\n[#DC_COLOR]=1 \{\
2804 .       ie !'\\$3'' \{\
2805 .          ie '\\$3'COND' \{ .PRINT \m[\\*[$DC_COLOR]]\\*[COND]\\*[$DROPCAP]\\*[CONDX]\m[] \}
2806 .          el \{ .PRINT \m[\\*[$DC_COLOR]]\\*[EXT]\\*[$DROPCAP]\\*[EXTX]\m[] \}
2807 .       \}
2808 .       el \{ .PRINT \m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[] \}
2809 .    \}
2810 .    el \{\
2811 .       ie !'\\$3'' \{\
2812 .          ie '\\$3'COND' \{ .PRINT \\*[COND]\\*[$DROPCAP]\\*[CONDX] \}
2813 .          el \{ .PRINT \\*[EXT]\\*[$DROPCAP]\\*[EXTX] \}
2814 .       \}
2815 .       el \{ .PRINT \m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[] \}
2816 .    \}
2817 .    if '\\$3'COND' \{ \E*[COND] \}
2818 .    if '\\$3'EXT'  \{ \E*[EXT]  \}
2819 .    ie \\n(.i \{ .in +\w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u \}
2820 .    el        \{ .in \w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u \}
2821 .    if '\\$3'COND' \{ \E*[CONDX]\c \}
2822 .    if '\\$3'EXT'  \{ \E*[EXTX]\c \}
2823 .    rt \\nxu
2824 .    FAM \\*[$RESTORE_FAM]
2825 .    FT  \\*[$RESTORE_FT]
2826 .    ps \\n[#RESTORE_PT_SIZE]u
2827 .    if \\n[#CONDENSE_WAS_ON] \{\
2828 .       CONDENSE \\*[$RESTORE_COND]
2829 \\*[COND]\c
2830 .    \}
2831 .    if \\n[#EXTEND_WAS_ON] \{\
2832 .       EXTEND \\*[$RESTORE_EXT]
2833 \\*[EXT]\c
2834 .    \}
2835 .    ie \\n(.u \{ .wh \\n(.du+\\n[#DC_HEIGHT]u-1v DROPCAP_OFF \}
2836 .    el \{ .wh \\n(.du+\\n[#DC_HEIGHT]u DROPCAP_OFF \}
2837 .    rr #CONDENSE_WAS_ON
2838 .    rr #EXTEND_WAS_ON
2839 .    rm $DROPCAP
2840 .    rr #DC_LINES
2841 .    rm $RESTORE_COND
2842 .    rm $RESTORE_EXT
2843 .    rm $RESTORE_FAM
2844 .    rm $RESTORE_FT
2845 .    rr #RESTORE_PT_SIZE
2846 .    rr #RESTORE_INDENT
2847 .    rr #DC_HEIGHT
2848 .    rr #GET_DC_HEIGHT
2849 .    rr x
2850 .END
2851 \#
2852 .MAC DROPCAP_OFF END
2853 '    in \\n[#RESTORE_INDENT]u
2854 .END
2855 \#
2856 \# =====================================================================
2857 \#
2858 \# +++GRAPHICAL OBJECTS+++
2859 \#
2860 \# HORIZONTAL RULE - DRH
2861 \# ---------------------
2862 \# *Arguments:
2863 \#   <none> | <rule weight> <indent> <length> [ <color> ]
2864 \# *Function:
2865 \#   With no arg, draws a full measure rule.  With args, draws
2866 \#   described horizontal rule.
2867 \# *Notes:
2868 \#   Rules are drawn left-to-right, from the baseline down, and
2869 \#   return to their point of origin.  Color must be set in the
2870 \#   macro; otherwise the color will be black, regardless of current
2871 \#   .gcolor.  If no arg given, the rule weight is the one set by
2872 \#   RULE_WEIGHT.
2873 \#
2874 .MAC DRH END
2875 .    if \\n[.vpt]=1 \{\
2876 .       vpt 0
2877 .       nr #RESTORE_TRAP 1
2878 .    \}
2879 .    ie !\\n[#NO_ADVANCE]=1 \{ .br \}
2880 .    el \{\
2881 .       sp -1v
2882 .       rr #NO_ADVANCE
2883 .    \}
2884 .    ie \\n(.u=1 \{\
2885 .       nr #FILLED 1
2886 .       nr #FILL_MODE \\n(.j
2887 .    \}
2888 .    el \{\
2889 .       nr #NOFILL 1
2890 .       if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \}
2891 .       if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \}
2892 .       ce 0
2893 .       rj 0
2894 .    \}
2895 .    nf
2896 .    ds $RL_WEIGHT \\$1
2897 .    ds $RL_INDENT \\$2
2898 .    ds $RL_LENGTH \\$3
2899 .    ie !'\\$4'' \{\
2900 .       ds $RL_COLOR  \\$4
2901 .    \}
2902 .    el \{\
2903 .       ds $RL_COLOR default
2904 .    \}
2905 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
2906 .    nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ]
2907 .    di NULL
2908 .       if \\n[#NUM_ARGS]>=1 \{ .RULE_WEIGHT \\*[$RL_WEIGHT] \}
2909 .    di
2910 .    gcolor \\*[$RL_COLOR]
2911 .    ie \\n[#NUM_ARGS]=0 \{\
2912 .       ie \\n[#INDENT_ACTIVE] \{\
2913 .          nr #RESTORE_L_LENGTH \\n(.l
2914 .          if \\n[#INDENT_BOTH_ACTIVE] \{ .ll \\n(.lu-\\n[#BL_INDENT]u \}
2915 .          if \\n[#INDENT_LEFT_ACTIVE] \{ .ll \\n(.lu-\\n[#L_INDENT]u \}
2916 \D't \\n[#RULE_WEIGHT]'\
2917 \h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
2918 \v'\\n[#RULE_WEIGHT_ADJ]u'\
2919 \D'l \En(.lu 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\
2920 \v'-\\n[#RULE_WEIGHT_ADJ]u'\
2921 \D't \\n[#SAVED_RULE_WEIGHT]'
2922 .          ll \\n[#RESTORE_L_LENGTH]u
2923 .          rr #RESTORE_L_LENGTH
2924 .       \}
2925 .       el \{\
2926 \D't \\n[#RULE_WEIGHT]'\
2927 \h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
2928 \v'\\n[#RULE_WEIGHT_ADJ]u'\
2929 \D'l \En(.lu 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\
2930 \v'-\\n[#RULE_WEIGHT_ADJ]u'\
2931 \D't \\n[#SAVED_RULE_WEIGHT]'
2932 .       \}
2933 .    \}
2934 .    el \{\
2935 \D't \\n[#RULE_WEIGHT]'\
2936 \h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\
2937 \v'\\n[#RULE_WEIGHT_ADJ]u'\
2938 \D'l \\*[$RL_LENGTH] 0'\
2939 \v'-\\n[#RULE_WEIGHT_ADJ]u'\
2940 \D't \\n[#SAVED_RULE_WEIGHT]'
2941 .    \}
2942 .    if \\n[#FILLED]=1 \{\
2943 .       if \\n[#FILL_MODE]=0 \{ .QUAD LEFT   \}
2944 .       if \\n[#FILL_MODE]=1 \{ .JUSTIFY     \}
2945 .       if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \}
2946 .       if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT  \}
2947 .       rr #FILLED
2948 .    \}
2949 .    sp -1v
2950 .    if \\n[#NOFILL]=1 \{\
2951 .       if \\n[#NOFILL_MODE]=3 \{ .CENTER \}
2952 .       if \\n[#NOFILL_MODE]=5 \{ .RIGHT  \}
2953 .    \}
2954 .    gcolor
2955 .    nr #RULE_WEIGHT     \\n[#SAVED_WEIGHT]
2956 .    nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ]
2957 .    rr #SAVED_WEIGHT
2958 .    rr #SAVED_WEIGHT_ADJ
2959 .    if \\n[#RESTORE_TRAP]=1 \{\
2960 .       vpt 1
2961 .       rr #RESTORE_TRAP
2962 .    \}
2963 .END
2964 \#
2965 \#
2966 \# RULE
2967 \# ----
2968 \# *Argument:
2969 \#   <none>
2970 \# *Function:
2971 \#   Draws a rule the length of the current measure.
2972 \# *Notes:
2973 \#   A convenience macro.  DRV does the same thing.  Kept in for
2974 \#   backward compatibility.
2975 \#
2976 .MAC RULE END
2977 .    if \\n(.u=1 \{\
2978 .       nr #FILLED 1
2979 .       ds $CURRENT_QUAD \\*[$QUAD_VALUE]
2980 .       nf
2981 .    \}
2982 .    ie \\n[#INDENT_ACTIVE] \{\
2983 .       if \\n[#INDENT_BOTH_ACTIVE] \{ .ll \\n(.lu-\\n[#BL_INDENT]u \}
2984 .       if \\n[#INDENT_LEFT_ACTIVE] \{ .ll \\n(.lu-\\n[#L_INDENT]u \}
2985 .       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
2986 .       ll
2987 .       rr #RESTORE_L_LENGTH
2988 .    \}
2989 .    el \{\
2990 .       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
2991 .    \}
2992 .    if r#FILLED \{\
2993 .       fi
2994 .       rr #FILLED
2995 .       QUAD \\*[$CURRENT_QUAD]
2996 .       rm $CURRENT_QUAD
2997 .    \}
2998 .    EOL
2999 .END
3000 \#
3001 \#
3002 \# VERTICAL RULE - DRV
3003 \# -------------------
3004 \# *Arguments:
3005 \#   <rule weight> <indent> <depth> [ <color> ]
3006 \# *Function:
3007 \#   Draws described vertical rule.
3008 \# *Notes:
3009 \#   Rules are drawn left-to-right, from the baseline down, and
3010 \#   return to their point of origin.  Color must be set in the
3011 \#   macro; otherwise the color will be black, regardless of current
3012 \#   .gcolor.
3013 \#
3014 .MAC DRV END
3015 .    if \\n[.vpt]=1 \{\
3016 .       vpt 0
3017 .       nr #RESTORE_TRAP 1
3018 .    \}
3019 .    ie !\\n[#NO_ADVANCE]=1 \{ .br \}
3020 .    el \{\
3021 .       sp -1v
3022 .       rr #NO_ADVANCE
3023 .    \}
3024 .    ie \\n(.u=1 \{\
3025 .       nr #FILLED 1
3026 .       nr #FILL_MODE \\n(.j
3027 .    \}
3028 .    el \{\
3029 .       nr #NOFILL 1
3030 .       if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \}
3031 .       if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \}
3032 .       ce 0
3033 .       rj 0
3034 .    \}
3035 .    nf
3036 .    ds $RL_WEIGHT \\$1
3037 .    ds $RL_INDENT \\$2
3038 .    ds $RL_DEPTH  \\$3
3039 .    ie !'\\$4'' \{\
3040 .       ds $RL_COLOR  \\$4
3041 .    \}
3042 .    el \{\
3043 .       ds $RL_COLOR default
3044 .    \}
3045 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
3046 .    nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ]
3047 .    di NULL
3048 .       RULE_WEIGHT \\*[$RL_WEIGHT]
3049 .    di
3050 .    gcolor \\*[$RL_COLOR]
3051 \D't \\n[#RULE_WEIGHT]'\
3052 \h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT_ADJ]u'\
3053 \D'l 0 \\*[$RL_DEPTH]'\
3054 \D't \\n[#SAVED_RULE_WEIGHT]'
3055 .    if \\n[#FILLED]=1 \{\
3056 .       if \\n[#FILL_MODE]=0 \{ .QUAD LEFT   \}
3057 .       if \\n[#FILL_MODE]=1 \{ .JUSTIFY     \}
3058 .       if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \}
3059 .       if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT  \}
3060 .       rr #FILLED
3061 .    \}
3062 .    sp -1v
3063 .    if \\n[#NOFILL]=1 \{\
3064 .       if \\n[#NOFILL_MODE]=3 \{ .CENTER \}
3065 .       if \\n[#NOFILL_MODE]=5 \{ .RIGHT  \}
3066 .    \}
3067 .    gcolor
3068 .    nr #RULE_WEIGHT     \\n[#SAVED_WEIGHT]
3069 .    nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ]
3070 .    if \\n[#RESTORE_TRAP]=1 \{\
3071 .       vpt 1
3072 .       rr #RESTORE_TRAP
3073 .    \}
3074 .END
3075 \#
3076 \# BOXES - DBX
3077 \# -----------
3078 \# *Arguments:
3079 \#   <rule weight | SOLID> <indent> <length> <depth> [ <color> ]
3080 \# *Function:
3081 \#   Draws described box.
3082 \# *Notes:
3083 \#   Boxes are drawn left-to-right, from the baseline down, and
3084 \#   return to their point of origin.  Box rules are drawn from the
3085 \#   perimeter inwards.  Color must be set in the macro; otherwise
3086 \#   the color will be black, regardless of current .gcolor.  If no
3087 \#   arg given, the rule weight is the one set by RULE_WEIGHT.
3088 \#
3089 .MAC DBX END
3090 .    if \\n[.vpt]=1 \{\
3091 .       vpt 0
3092 .       nr #RESTORE_TRAP 1
3093 .    \}
3094 .    ie !\\n[#NO_ADVANCE]=1 \{ .br \}
3095 .    el \{\
3096 .       sp -1v
3097 .       rr #NO_ADVANCE
3098 .    \}
3099 .    ie \\n(.u=1 \{\
3100 .       nr #FILLED 1
3101 .       nr #FILL_MODE \\n(.j
3102 .    \}
3103 .    el \{\
3104 .       nr #NOFILL 1
3105 .       if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \}
3106 .       if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \}
3107 .       ce 0
3108 .       rj 0
3109 .    \}
3110 .    nf
3111 .    ie '\\$1'SOLID' \{\
3112 .       nr #BX_SOLID 1
3113 .    \}
3114 .    el \{\
3115 .       ds $BX_WEIGHT \\$1
3116 .    \}
3117 .    ds $BX_INDENT \\$2
3118 .    ds $BX_WIDTH \\$3
3119 .    ds $BX_DEPTH  \\$4
3120 .    ie !'\\$5'' \{\
3121 .       ie d$\\$5_FILL \{\
3122 .          ds $BX_COLOR \\*[$\\$5_FILL]
3123 .       \}
3124 .       el \{\
3125 .          ds $BX_COLOR \\$5
3126 .       \}
3127 .    \}
3128 .    el \{\
3129 .       ds $BX_COLOR default
3130 .    \}
3131 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
3132 .    nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3133 .    if !'\\$1'SOLID' \{\
3134 .       di NULL
3135 .          RULE_WEIGHT \\*[$BX_WEIGHT]
3136 .       di
3137 .    \}
3138 .    ds $BX_INDENT \\*[$BX_INDENT]-\\n[#WEIGHT_ADJ]u
3139 .    ie \\n[#BX_SOLID]=1 \{\
3140 .       fcolor \\*[$BX_COLOR]
3141 \h'\\*[$BX_INDENT]'\
3142 \D'P \\*[$BX_WIDTH] 0 0 \\*[$BX_DEPTH] -\\*[$BX_WIDTH] 0 0 -\\*[$BX_DEPTH]'
3143 .       fcolor
3144 .       rr #BX_SOLID
3145 .    \}
3146 .    el \{\
3147 .       gcolor \\*[$BX_COLOR]
3148 \D't \\n[#RULE_WEIGHT]'\
3149 \h'\\*[$BX_INDENT]'\
3150 \v'\\n[#WEIGHT_ADJ]u'\
3151 \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'\
3152 \v'-\\n[#WEIGHT_ADJ]u'\
3153 \D't \\n[#SAVED_RULE_WEIGHT]'
3154 .       gcolor
3155 .    \}
3156 .    sp -1v
3157 .    if \\n[#FILLED]=1 \{\
3158 .       if \\n[#FILL_MODE]=0 \{ .QUAD LEFT   \}
3159 .       if \\n[#FILL_MODE]=1 \{ .JUSTIFY     \}
3160 .       if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \}
3161 .       if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT  \}
3162 .       rr #FILLED
3163 .    \}
3164 .    if \\n[#NOFILL]=1 \{\
3165 .       if \\n[#NOFILL_MODE]=3 \{ .CENTER \}
3166 .       if \\n[#NOFILL_MODE]=5 \{ .RIGHT  \}
3167 .    \}
3168 .    nr #RULE_WEIGHT \\n[#SAVED_WEIGHT]
3169 .    nr #WEIGHT_ADJ  \\n[#SAVED_WEIGHT_ADJ]
3170 .    rr #SAVED_WEIGHT
3171 .    rr #SAVED_WEIGHT_ADJ
3172 .    if \\n[#RESTORE_TRAP]=1 \{\
3173 .       vpt 1
3174 .       rr #RESTORE_TRAP
3175 .    \}
3176 .END
3177 \#
3178 \#
3179 \# ELLIPSES - DCL
3180 \# --------------
3181 \# *Arguments:
3182 \#   <rule weight | SOLID> <indent> <width> <depth> [ <color> ]
3183 \# *Function:
3184 \#   Draws described ellipses.
3185 \# *Notes:
3186 \#   Ellipses (circles) are drawn left-to-right, from the baseline
3187 \#   down, and return to their point of origin.  Ellipse rules are
3188 \#   drawn from the perimeter inwards.  Color must be set in the
3189 \#   macro; otherwise the color will be black, regardless of current
3190 \#   .gcolor.  If no arg given, the rule weight is the one set by
3191 \#   RULE_WEIGHT.
3192 \#
3193 .MAC DCL END
3194 .    if \\n[.vpt]=1 \{\
3195 .       vpt 0
3196 .       nr #RESTORE_TRAP 1
3197 .    \}
3198 .    ie !\\n[#NO_ADVANCE]=1 \{ .br \}
3199 .    el \{\
3200 .       sp -1v
3201 .       rr #NO_ADVANCE
3202 .    \}
3203 .    ie \\n(.u=1 \{\
3204 .       nr #FILLED 1
3205 .       nr #FILL_MODE \\n(.j
3206 .    \}
3207 .    el \{\
3208 .       nr #NOFILL 1
3209 .       if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \}
3210 .       if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \}
3211 .       ce 0
3212 .       rj 0
3213 .    \}
3214 .    nf
3215 .    ie '\\$1'SOLID' \{\
3216 .       nr #CL_SOLID 1
3217 .    \}
3218 .    el \{\
3219 .       ds $CL_WEIGHT \\$1
3220 .    \}
3221 .    ds $CL_INDENT \\$2
3222 .    ds $CL_WIDTH  \\$3
3223 .    ds $CL_DEPTH  \\$4
3224 .    ie !'\\$5'' \{\
3225 .       ie d$\\$5_FILL \{\
3226 .          ds $CL_COLOR \\*[$\\$5_FILL]
3227 .       \}
3228 .       el \{\
3229 .          ds $CL_COLOR \\$5
3230 .       \}
3231 .    \}
3232 .    el \{\
3233 .       ds $CL_COLOR default
3234 .    \}
3235 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
3236 .    nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3237 .    if !'\\$1'SOLID' \{\
3238 .       di NULL
3239 .          RULE_WEIGHT \\*[$CL_WEIGHT]
3240 .       di
3241 .    \}
3242 .    ds $CL_INDENT \\*[$CL_INDENT]-\\n[#WEIGHT_ADJ]u
3243 .    ie \\n[#CL_SOLID]=1 \{\
3244 .       fcolor \\*[$CL_COLOR]
3245 \h'\\*[$CL_INDENT]'\
3246 \v'\\*[$CL_DEPTH]/2u'\
3247 \D'E \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\
3248 \v'-\\*[$CL_DEPTH]/2u'
3249 .       fcolor
3250 .       rr #CL_SOLID
3251 .    \}
3252 .    el \{\
3253 .       gcolor \\*[$CL_COLOR]
3254 \D't \\n[#RULE_WEIGHT]'\
3255 \h'\\*[$CL_INDENT]'\
3256 \v'\\*[$CL_DEPTH]/2u'\
3257 \D'e \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\
3258 \v'-(\\*[$CL_DEPTH]/2u)'\
3259 \D't \\n[#SAVED_RULE_WEIGHT]'
3260 .       gcolor
3261 .    \}
3262 .    sp -1v
3263 .    if \\n[#FILLED]=1 \{\
3264 .       if \\n[#FILL_MODE]=0 \{ .QUAD LEFT   \}
3265 .       if \\n[#FILL_MODE]=1 \{ .JUSTIFY     \}
3266 .       if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \}
3267 .       if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT  \}
3268 .       rr #FILLED
3269 .    \}
3270 .    if \\n[#NOFILL]=1 \{\
3271 .       if \\n[#NOFILL_MODE]=3 \{ .CENTER \}
3272 .       if \\n[#NOFILL_MODE]=5 \{ .RIGHT  \}
3273 .    \}
3274 .    nr #RULE_WEIGHT \\n[#SAVED_WEIGHT]
3275 .    nr #WEIGHT_ADJ  \\n[#SAVED_WEIGHT_ADJ]
3276 .    rr #SAVED_WEIGHT
3277 .    rr #SAVED_WEIGHT_ADJ
3278 .    if \\n[#RESTORE_TRAP]=1 \{\
3279 .       vpt 1
3280 .       rr #RESTORE_TRAP
3281 .    \}
3282 .END
3283 \#
3284 \#
3285 \# RULE WEIGHT
3286 \# -----------
3287 \# *Argument:
3288 \#   <weight of rules in points>
3289 \# *Function:
3290 \#   Sets \D't <n>' to the correct number of machine units for the
3291 \#   argument given in points.
3292 \# *Notes:
3293 \#   Decimal fractions are allowed.  Rule weight must be > 100.
3294 \#
3295 .MAC RULE_WEIGHT END
3296 .    di NULL \" Diverted so there's no problem with breaks, spacing, etc.
3297 .       ds $ARG \\$1
3298 .       substring $ARG -1
3299 .       if !\B'\\*[$ARG]' \{\
3300 .             tm1 "[mom]: The argument to \\$0 must not have a unit of measure appended.
3301 .             ab Aborting at \\$0, line \\n[.c].
3302 .       \}
3303 .       length #STR_LENGTH \\$1
3304 .       ds $ARG \\$1
3305 .       substring $ARG 0 0
3306 .       ie '\\*[$ARG]'.' \{\
3307 .          ds $ARG \\$1
3308 .          substring $ARG 1 \\n[#STR_LENGTH]-1
3309 .          nr #WEIGHT \\*[$ARG]*100
3310 .          if (\\n[#WEIGHT]>=1000) \{\
3311 .              while (\\n[#WEIGHT]>=1000) \{\
3312 .                  nr #WEIGHT \\n[#WEIGHT]/10
3313 .   \}
3314         \}
3315 .       \}
3316 .       el \{\
3317 .          ds $ARG \\$1
3318 .          substring $ARG 1 1
3319 .          ie '\\*[$ARG]'.' \{\
3320 .             ds $LHS \\$1
3321 .             substring $LHS 0 0
3322 .             ds $RHS \\$1
3323 .             substring $RHS 2
3324 .             nr #WEIGHT \\*[$LHS]\\*[$RHS]*100
3325 .             if (\\n[#WEIGHT]>=10000) \{\
3326 .                while (\\n[#WEIGHT]>=10000) \{\
3327 .                   nr #WEIGHT \\n[#WEIGHT]/10
3328 .   \}
3329 .             \}
3330 .          \}
3331 .          el \{\
3332 .             ie \\n[#STR_LENGTH]<=2 \{\
3333 .                nr #WEIGHT \\$1*1000
3334 .             \}
3335 .             el \{\
3336 .                ds $ARG \\$1
3337 .                substring $ARG 2 2
3338 .                ie !'\\*[$ARG]'.' \{\
3339 .                   tm1 "[mom]: Invalid argument given to macro \\$0 at line \\n[.c].
3340 .                   tm1 "       Rule weight must be > 100 points.
3341 .                   tm1 "       Falling back to default weight .5 points.
3342 .                   nr #WEIGHT 500
3343 .                \}
3344 .                el \{\
3345 .                   ds $LHS \\$1
3346 .                   substring $LHS 0 1
3347 .                   ds $RHS \\$1
3348 .                   substring $RHS 3
3349 .                   nr #WEIGHT \\*[$LHS]\\*[$RHS]*1000
3350 .                   if (\\n[#WEIGHT]>=100000) \{\
3351 .                      while (\\n[#WEIGHT]>=100000) \{\
3352 .                         nr #WEIGHT \\n[#WEIGHT]/10
3353 .   \}
3354 .                   \}
3355 .                \}
3356 .             \}
3357 .          \}
3358 .       \}
3359 .       nr #WEIGHT_ADJ \\n[#WEIGHT]/2
3360 .       if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT' \{\
3361 .          nr #BIB_STRING_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3362 .          nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3363 .       \}
3364 .       if '\\$0'COVER_UNDERLINE_WEIGHT' \{\
3365 .          nr #COVER_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3366 .          nr #COVER_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3367 .       \}
3368 .       if '\\$0'DOCCOVER_UNDERLINE_WEIGHT' \{\
3369 .          nr #DOCCOVER_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3370 .          nr #DOCCOVER_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3371 .       \}
3372 .       if '\\$0'DOCTYPE_UNDERLINE_WEIGHT' \{\
3373 .          nr #DOCTYPE_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3374 .          nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3375 .       \}
3376 .       if '\\$0'ENDNOTE_STRING_UNDERLINE_WEIGHT' \{\
3377 .          nr #EN_STRING_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3378 .          nr #EN_STRING_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3379 .       \}
3380 .       if '\\$0'ENDNOTE_TITLE_UNDERLINE_WEIGHT' \{\
3381 .          nr #EN_TITLE_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3382 .          nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3383 .       \}
3384 .       if '\\$0'FOOTER_RULE_WEIGHT' \{\
3385 .          nr #FOOTER_RULE_WEIGHT     \\n[#WEIGHT]
3386 .          nr #FOOTER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3387 .       \}
3388 .       if '\\$0'FOOTNOTE_RULE_WEIGHT' \{\
3389 .          nr #FN_RULE_WEIGHT     \\n[#WEIGHT]
3390 .          nr #FN_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3391 .       \}
3392 .       if '\\$0'HEAD_UNDERLINE_WEIGHT' \{\
3393 .          nr #HEAD_UNDERLINE_WEIGHT     \\n[#WEIGHT]
3394 .          nr #HEAD_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3395 .       \}
3396 .       if '\\$0'HEADER_RULE_WEIGHT' \{\
3397 .          nr #HEADER_RULE_WEIGHT     \\n[#WEIGHT]
3398 .          nr #HEADER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3399 .       \}
3400 .       if '\\$0'RULE_WEIGHT' \{\
3401 .          nr #RULE_WEIGHT     \\n[#WEIGHT]
3402 .          nr #RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3403 .       \}
3404 .       if '\\$0'UNDERSCORE_WEIGHT' \{\
3405 .          nr #UNDERSCORE_WEIGHT     \\n[#WEIGHT]
3406 .          nr #UNDERSCORE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
3407 .       \}
3408 .    di
3409 .END
3410 \#
3411 \# Aliases
3412 \# ~~~~~~~
3413 .ALIAS BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT RULE_WEIGHT
3414 .ALIAS COVER_UNDERLINE_WEIGHT               RULE_WEIGHT
3415 .ALIAS DOCCOVER_UNDERLINE_WEIGHT            RULE_WEIGHT
3416 .ALIAS DOCTYPE_UNDERLINE_WEIGHT             RULE_WEIGHT
3417 .ALIAS ENDNOTE_STRING_UNDERLINE_WEIGHT      RULE_WEIGHT
3418 .ALIAS ENDNOTE_TITLE_UNDERLINE_WEIGHT       RULE_WEIGHT
3419 .ALIAS FOOTER_RULE_WEIGHT                   RULE_WEIGHT
3420 .ALIAS FOOTNOTE_RULE_WEIGHT                 RULE_WEIGHT
3421 .ALIAS HEAD_UNDERLINE_WEIGHT                RULE_WEIGHT
3422 .ALIAS HEADER_RULE_WEIGHT                   RULE_WEIGHT
3423 .ALIAS UNDERSCORE_WEIGHT                    RULE_WEIGHT
3424 \#
3425 \# Default rule weights
3426 \# ~~~~~~~~~~~~~~~~~~~~
3427 .nr #BIB_STRING_UNDERLINE_WEIGHT 500
3428 .nr #COVER_UNDERLINE_WEIGHT      500
3429 .nr #DOCCOVER_UNDERLINE_WEIGHT   500
3430 .nr #DOCTYPE_UNDERLINE_WEIGHT    500
3431 .nr #EN_STRING_UNDERLINE_WEIGHT  500
3432 .nr #EN_TITLE_UNDERLINE_WEIGHT   500
3433 .nr #FN_RULE_WEIGHT              500
3434 .nr #FOOTER_RULE_WEIGHT          500
3435 .nr #HEAD_UNDERLINE_WEIGHT       500
3436 .nr #HEADER_RULE_WEIGHT          500
3437 .nr #RULE_WEIGHT                 500
3438 .nr #UNDERSCORE_WEIGHT           500
3439 \#
3440 .nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \\n[#BIB_STRING_UNDERLINE_WEIGHT]/2
3441 .nr #COVER_UNDERLINE_WEIGHT_ADJ      \\n[#DOCTYPE_UNDERLINE_WEIGHT]/2
3442 .nr #DOCCOVER_UNDERLINE_WEIGHT_ADJ   \\n[#DOCTYPE_RULE_WEIGHT]/2
3443 .nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ    \\n[#DOCTYPE_RULE_WEIGHT]/2
3444 .nr #EN_STRING_UNDERLINE_WEIGHT_ADJ  \\n[#EN_STRING_UNDERLINE_WEIGHT]/2
3445 .nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ   \\n[#EN_STRING_UNDERLINE_WEIGHT]/2
3446 .nr #FOOTER_RULE_WEIGHT_ADJ          \\n[#FOOTER_RULE_WEIGHT]/2
3447 .nr #FN_RULE_WEIGHT_ADJ              \\n[#FN_RULE_WEIGHT]/2
3448 .nr #HEAD_UNDERLINE_WEIGHT_ADJ       \\n[#HEAD_UNDERLINE_WEIGHT]/2
3449 .nr #HEADER_RULE_WEIGHT_ADJ          \\n[#HEADER_RULE_WEIGHT]/2
3450 .nr #RULE_WEIGHT_ADJ                 \\n[#RULE_WEIGHT]/2
3451 .nr #UNDERSCORE_WEIGHT_ADJ           \\n[#UNDERSCORE_WEIGHT]/2
3452 \#
3453 \# Set default rule weight
3454 \#
3455 .di NULL
3456 \D't 500'
3457 .di
3458 \#
3459 \# =====================================================================
3460 \#
3461 \# +++WORD AND SENTENCE SPACING+++
3462 \#
3463 \# WORD SPACE CONTROL
3464 \# ------------------
3465 \# *Argument:
3466 \#   <+|->wordspace | DEFAULT
3467 \# *Function:
3468 \#   Increases or decreases interword space by user supplied amount.
3469 \#   If DEFAULT, value is set to 12 (groff default).
3470 \# *Notes:
3471 \#   $WS_CONSTANT is the groff default word space.
3472 \#   $WS_VAR is the user supplied amount by which to in/decrease word space.
3473 \#   $WS is a concatenation of WS_CONSTANT and WS_VAR.
3474 \#
3475 \#   Because the user supplied value requires a literal + or - sign,
3476 \#   the macro argument is stored in a string.
3477 \#
3478 \#   \n[.sss] holds the current sentence space value.
3479 \#
3480 .MAC WS END
3481 .    ds $WS_CONSTANT 12
3482 .    ds $WS_VAR \\$1
3483 .    ie '\\$1'DEFAULT' .ds $WS_VAR +0
3484 .    el                .ds $WS (\\*[$WS_CONSTANT]\\*[$WS_VAR])
3485 .    ie \\n[.sss]=12   \{ .ss \\*[$WS] 12 \}
3486 .    el \{\
3487 .       ss \\*[$WS] (\\*[$WS]\\*[$SS_VAR])
3488 .       SS \\*[$SS_VAR]
3489 .    \}
3490 .END
3491 \#
3492 \#
3493 \# SENTENCE SPACE CONTROL
3494 \# ----------------------
3495 \# *Argument:
3496 \#   <+-sentencespace> | 0 | DEFAULT
3497 \# *Function:
3498 \#   Increases or decreases sentence space by user supplied amount.
3499 \#   If 0, sentence spaces are ignored.  If DEFAULT, value is
3500 \#   set to 12 (groff default).
3501 \# *Notes:
3502 \#   Because the user supplied value requires a literal + or - sign,
3503 \#   the macro argument is stored in a string.
3504 \#
3505 \#   Sentence space applies only to input where sentences are separated
3506 \#   by two spaces (and/or, in fill mode [FLUSH L|R|C or JUSTIFY], an EOL).
3507 \#   Changing .SS when sentences are separated by only one space has
3508 \#   no effect on the space between sentences.
3509 \#
3510 \#   \n[.ss] holds the current wordspace value.
3511 \#   \n[.sss] holds the current sentence space value.
3512 \#
3513 .MAC SS END
3514 .    ie '\\$1'0' \{ .ss \\n[.ss] (\\n[.ss]-\\n[.ss]) \}
3515 .    el \{\
3516 .       ie '\\$1'DEFAULT' \{ .ss \\n[.ss] \}
3517 .       el \{\
3518 .          ds $SS_VAR \\$1
3519 .          ss \\n[.ss] (0\\*[$SS_VAR])
3520 .       \}
3521 .    \}
3522 .END
3523 \#
3524 \#
3525 \# =====================================================================
3526 \#
3527 \# +++INDENTS+++
3528 \#
3529 \# There are five styles of indents: left, right, both, temporary,
3530 \# and hanging.  Each is set/invoked with a different macro.
3531 \# Indent macros begin with the letter "I", hence .IL means "indent left,"
3532 \# .IR means "indent right," and so on.
3533 \# 
3534 \# The first time any of the indent macros is used, it requires an
3535 \# argument--the size of the indent (with a unit of measure).  The
3536 \# size may also be entered using the \w escape--very useful
3537 \# for numbered lists using HI.  The unit of measure is required.
3538 \# Subsequent invocations don't require the argument; the indent
3539 \# measure remains the same until it's changed by invoking the macro
3540 \# with an argument again.
3541 \# 
3542 \# If no indents are in effect, the arguments passed to indent macros are
3543 \# measured from the left and right margins of the page.  If a left indent
3544 \# or a right indent is already in effect, the arguments passed to
3545 \# the indent macros are calculated from the current values; in other words,
3546 \# the arguments are additive.  If you quit an indent and later return
3547 \# to it, its value will be the value last in effect, unless you pass
3548 \# it an argument.  If you do pass an argument, it is added to the last
3549 \# value in effect, unless you cleared the indent with one of
3550 \# .I<LRB>X/Q macros.
3551 \# 
3552 \# Example
3553 \# -------
3554 \# 
3555 \# .IL 2P
3556 \# ...some text...
3557 \# .IL 2P
3558 \# ...some text...
3559 \# .IQ
3560 \# ...some text...
3561 \# .IL
3562 \# ...some text...
3563 \# 
3564 \# The first .IL 2P indents text 2P from the left margin.  The second
3565 \# .IL 2P indents text by an additional 2P, i.e. 4P from the left margin.
3566 \# .IQ turns the indent off.  The last .IL (which has no argument)
3567 \# takes its value from the total of all arguments passed to .IL (in
3568 \# this case, 2P and 2P), therefore it indents 2P+2P from the left
3569 \# margin, i.e. 4P.  If you wanted the last .IL to indent just 2P,
3570 \# you'd either have to reset the .IL prior to .IQ (.IL -2P), or pass
3571 \# the last .IL the argument 2P.
3572 \# 
3573 \# To reverse the sense of an indent added to an indent, you may use
3574 \# negative values.
3575 \# 
3576 \# Indents can be turned off individually with ILX, IRX, and IBX.
3577 \# LEFT and RIGHT indents may be combined and manipulated
3578 \# separately, (e.g. you can have an IL of 2P and an IR of 4P
3579 \# operative at the same time, and then change, say, the IL to
3580 \# 4P--thereby left indenting 6P--while the IR remains at 4P.
3581 \# 
3582 \# IB automatically turns off IL and IR.  They have to be reinvoked
3583 \# again when needed. IL and IR automatically turn IB off; it, too,
3584 \# has to be reinvoked with needed.
3585 \# 
3586 \# All indents can be turned off at once with IQ.  The ILX, IRX, IBX,
3587 \# and IQ macros simply turn the indents off; the values stored in
3588 \# the respective indent macros (IL, IR, IB) remain in effect.  If
3589 \# the user wishes to clear the values, the I<LRB>X macros should be
3590 \# invoked with the single argument CLEAR.  IQ CLEAR clears out
3591 \# the values stored for all indent styles.
3592 \# 
3593 \# Indents *must* be turned off before settting string tabs
3594 \# inside PAD.  Generally, in order not to get confused, it's a
3595 \# good idea to turn all indents off before setting any tabs.
3596 \# 
3597 \# TI and HI are special cases.  There's no need to turn them off,
3598 \# since they affect only one line--the first after their
3599 \# invocation.  Like the other indent styles, the first time
3600 \# they're invoked, they require a value in iPpcm; each subsequent
3601 \# invocation without an argument will use the same value.  To
3602 \# change the value, simply pass a new value.  Values for TI and HI
3603 \# are *not* additive.
3604 \# 
3605 \# HI presupposes that you already have a left or both indent on.
3606 \# HI will never hang a line outside the left margin of a document
3607 \# or column.  In other words, you must have IL or IB on before you
3608 \# can use HI.
3609 \#
3610 \# INDENT LEFT
3611 \# -----------
3612 \#
3613 .MAC IL END
3614 .    if \\n[#INDENT_STYLE_BOTH] \{ .IBX \}
3615 .    nr #INDENT_STYLE_LEFT  1
3616 .    nr #INDENT_ACTIVE      1
3617 .    nr #INDENT_LEFT_ACTIVE 1
3618 .    ie '\\$1'' \{\
3619 .       br
3620 .       in \\n[#L_INDENT]u
3621 .       ta \\n(.lu-\\n[#L_INDENT]u
3622 .    \}
3623 .    el \{\
3624 .       br
3625 .       nr #L_INDENT +(\\$1)
3626 .       in \\n[#L_INDENT]u
3627 .       ta \\n(.lu-\\n[#L_INDENT]u
3628 .    \}
3629 .END
3630 \#
3631 \#
3632 \# +++INDENT RIGHT+++
3633 \#
3634 .MAC IR END
3635 .    if \\n[#INDENT_STYLE_BOTH] \{ .IBX \}
3636 .    nr #INDENT_STYLE_RIGHT   1
3637 .    nr #INDENT_ACTIVE        1
3638 .    nr #INDENT_RIGHT_ACTIVE 1
3639 .    ie '\\$1'' \{\
3640 .       br
3641 .       ie \\n[#TAB_ACTIVE] \{\
3642 .          ll \\n(.lu-\\n[#R_INDENT]u
3643 .          ta \\n(.lu-\\n[#L_INDENT]u
3644 .       \}
3645 .       el \{\
3646 .          ll \\n[#L_LENGTH]u-\\n[#R_INDENT]u
3647 .          ta \\n(.lu-\\n[#L_INDENT]u
3648 .       \}
3649 .    \}
3650 .    el \{\
3651 .       br
3652 .       nr #R_INDENT +(\\$1)
3653 .       ie \\n[#TAB_ACTIVE] \{\
3654 .          ll \\n(.lu-\\n[#R_INDENT]u
3655 .          ta \\n(.lu-\\n[#L_INDENT]u
3656 .       \}
3657 .       el \{\
3658 .          ll \\n[#L_LENGTH]u-\\n[#R_INDENT]u
3659 .          ta \\n(.lu-\\n[#L_INDENT]u
3660 .       \}
3661 .    \}
3662 .END
3663 \#
3664 \#
3665 \# +++INDENT BOTH+++
3666 \#
3667 .MAC IB END
3668 .    if \\n[#INDENT_STYLE_LEFT]  \{ .ILX \}
3669 .    if \\n[#INDENT_STYLE_RIGHT] \{ .IRX \}
3670 .    nr #INDENT_STYLE_BOTH  1
3671 .    nr #INDENT_ACTIVE      1
3672 .    nr #INDENT_BOTH_ACTIVE 1
3673 .    ie '\\$1'' \{\
3674 .       br
3675 .       in \\n[#BL_INDENT]u
3676 .       ie \\n[#TAB_ACTIVE] \{\
3677 .          ll \\n(.lu-\\n[#BR_INDENT]u
3678 .          ta \\n(.lu-\\n[#BR_INDENT]u
3679 .       \}
3680 .       el \{\
3681 .          ll \\n[#L_LENGTH]u-\\n[#BR_INDENT]u
3682 .          ta \\n(.lu-\\n[#BR_INDENT]u
3683 .       \}
3684 .    \}
3685 .    el \{\
3686 .       br
3687 .       nr #BL_INDENT (\\n[#INDENT]+\\$1)
3688 .       ie \\n[#NUM_ARGS]=2 \{ .nr #BR_INDENT +(\\$2) \}
3689 .       el                  \{ .nr #BR_INDENT \\n[#BL_INDENT] \}
3690 .       ie \\n[#TAB_ACTIVE] \{\
3691 .          in \\n[#BL_INDENT]u
3692 .          ll \\n(.lu-\\n[#BR_INDENT]u
3693 .          ta \\n(.lu-\\n[#BL_INDENT]u
3694 .       \}
3695 .       el \{\
3696 .          in \\n[#BL_INDENT]u
3697 .          ll \\n[#L_LENGTH]u-\\n[#BR_INDENT]u
3698 .          ta \\n(.lu-\\n[#BR_INDENT]u
3699 .       \}
3700 .    \}
3701 .END
3702 \#
3703 \#
3704 \# +++TEMPORARY INDENT+++
3705 \#
3706 .MAC TI END
3707 .    br
3708 .    ie '\\$1'' \{\
3709 .       ti \\n[#T_INDENT]u
3710 .       if \\n[#INDENT_LEFT_ACTIVE] \{\
3711 .          ti \\n[#T_INDENT]u+\\n[#L_INDENT]u
3712 .       \}
3713 .       if \\n[#INDENT_BOTH_ACTIVE] \{\
3714 .          ti \\n[#T_INDENT]u+\\n[#BL_INDENT]u
3715 .       \}
3716 .    \}
3717 .    el \{\
3718 .       nr #T_INDENT (\\$1)
3719 .       ti \\n[#T_INDENT]u
3720 .    \}
3721 .END
3722 \#
3723 \#
3724 \# +++HANGING INDENT+++
3725 \#
3726 .MAC HI END
3727 .    ie '\\$1'' \{ .ti -\\n[#HL_INDENT]u \}
3728 .    el \{\
3729 .       nr #HL_INDENT (\\$1)
3730 .       ti -\\n[#HL_INDENT]u
3731 .    \}
3732 .END
3733 \#
3734 \#
3735 \# +++INDENTS OFF+++
3736 \#
3737 .MAC ILX END
3738 .    br
3739 .    in 0
3740 .    rr #INDENT_LEFT_ACTIVE
3741 .    if '\\$1'CLEAR' \{\
3742 .       rr #L_INDENT
3743 .       rr #INDENT_STYLE_LEFT
3744 .    \}
3745 .END
3746 \#
3747 \#
3748 .MAC IRX END
3749 .    br
3750 .    rr #INDENT_RIGHT_ACTIVE
3751 .    ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3752 .    el \{\
3753 .       ie \\n[#COLUMNS] \{\
3754 .          ll \\n[#COL_L_LENGTH]u
3755 .          ta \\n(.lu
3756 .       \}
3757 .       el \{\
3758 .          ll \\n[#L_LENGTH]u
3759 .          ta \\n(.lu
3760 .       \}
3761 .    \}
3762 .    if '\\$1'CLEAR' \{\
3763 .       rr #R_INDENT
3764 .       rr #INDENT_STYLE_RIGHT
3765 .    \}
3766 .END
3767 \#
3768 \#
3769 .MAC IBX END
3770 .    br
3771 .    in 0
3772 .    rr #INDENT_BOTH_ACTIVE
3773 .    ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3774 .    el \{\
3775 .       ie \\n[#COLUMNS] \{\
3776 .          ll \\n[#COL_L_LENGTH]u
3777 .          ta \\n(.lu
3778 .       \}
3779 .       el \{\
3780 .          ll \\n[#L_LENGTH]u
3781 .          ta \\n(.lu
3782 .       \}
3783 .    \}
3784 .    if '\\$1'CLEAR' \{\
3785 .       rr #BL_INDENT
3786 .       rr #BR_INDENT
3787 .       rr #INDENT_STYLE_BOTH
3788 .    \}
3789 .END
3790 \#
3791 \#
3792 .MAC IX END
3793 .    if '\\$0'IX' \{\
3794 .       if !\\n[#IX_WARN] \{\
3795 .          tm1 "[mom]: Use of .IX is now deprecated.  Use .IQ instead.
3796 .          tm1 "      .IX will continue to behave as before, but to
3797 .          tm1 "       avoid this message, please update your document.
3798 .          nr #IX_WARN 1
3799 .       \}
3800 .    \}
3801 .    br
3802 .    in 0
3803 .    rr #INDENT_LEFT_ACTIVE
3804 .    rr #INDENT_RIGHT_ACTIVE
3805 .    rr #INDENT_BOTH_ACTIVE
3806 .    if \\n[#INDENT_STYLE_RIGHT] \{\
3807 .       ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3808 .       el \{\
3809 .          ie \\n[#COLUMNS] \{\
3810 .             ll \\n[#COL_L_LENGTH]u
3811 .             ta \\n(.lu
3812 .          \}
3813 .          el \{\
3814 .             ll \\n[#L_LENGTH]u
3815 .             ta \\n(.lu
3816 .          \}
3817 .       \}
3818 .    \}
3819 .    if \\n[#INDENT_STYLE_BOTH] \{\
3820 .       ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3821 .       el \{\
3822 .          ie \\n[#COLUMNS] \{\
3823 .             ll \\n[#COL_L_LENGTH]u
3824 .             ta \\n(.lu
3825 .          \}
3826 .          el \{\
3827 .             ll \\n[#L_LENGTH]u
3828 .             ta \\n(.lu
3829 .          \}
3830 .       \}
3831 .    \}
3832 .    if '\\$1'CLEAR' \{\
3833 .       if \\n[#INDENT_STYLE_RIGHT] \{\
3834 .          ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3835 .          el \{\
3836 .             ie \\n[#COLUMNS] \{\
3837 .                ll \\n[#COL_L_LENGTH]u
3838 .                ta \\n(.lu
3839 .             \}
3840 .             el \{\
3841 .                ll \\n[#L_LENGTH]u
3842 .                ta \\n(.lu
3843 .             \}
3844 .          \}
3845 .       \}
3846 .       if \\n[#INDENT_STYLE_BOTH] \{\
3847 .          ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
3848 .          el \{\
3849 .             ie \\n[#COLUMNS] \{\
3850 .                ll \\n[#COL_L_LENGTH]u
3851 .                ta \\n(.lu
3852 .             \}
3853 .             el \{\
3854 .                ll \\n[#L_LENGTH]u
3855 .                ta \\n(.lu
3856 .             \}
3857 .          \}
3858 .       \}
3859 .       rr #L_INDENT
3860 .       rr #R_INDENT
3861 .       rr #BL_INDENT
3862 .       rr #BR_INDENT
3863 .       rr #T_INDENT
3864 .       rr #H_INDENT
3865 .       rr #INDENT_STYLE_LEFT
3866 .       rr #INDENT_STYLE_RIGHT
3867 .       rr #INDENT_STYLE_BOTH
3868 .    \}
3869 .    rr #INDENT_ACTIVE
3870 .END
3871 \#
3872 \# =====================================================================
3873 \#
3874 \# +++MULTIPLE COLUMNS+++
3875 \#
3876 \# MULTIPLE COLUMNS ON
3877 \# -------------------
3878 \# *Arguments:
3879 \#   <none>
3880 \# *Function:
3881 \#   Marks the top of a column set
3882 \#
3883 .MAC MCO END
3884 .mk c
3885 .END
3886 \#
3887 \# MULTIPLE COLUMN RETURN
3888 \# ----------------------
3889 \# *Arguments:
3890 \#   <none>
3891 \# *Function:
3892 \#   Returns to the top of a column set
3893 \#
3894 .MAC MCR END
3895 .    TRAP OFF
3896 .    sp |\\ncu
3897 .    TRAP
3898 .END
3899 \#
3900 \# MULTIPLE COLUMNS OFF
3901 \# --------------------
3902 \# *Arguments:
3903 \#   <none> | <lead to advance beneath bottom of deepest column>
3904 \# *Function:
3905 \#   Advances to the end of a column set
3906 \# *Notes:
3907 \#   With no argument, advances to the next baseline (at the current
3908 \#   leading value) beneath the longest column.  With an argument
3909 \#   (which requires a unit of measure), advances arg distance
3910 \#   beneath the baseline of the deepest column.  If the argument
3911 \#   is zero, advances to the baseline of the deepest column.
3912 \#
3913 .MAC MCX END
3914 .    TRAP OFF
3915 .    ie '\\$1'' \{\
3916 .       TQ
3917 .       sp |\\n(.hu
3918 .    \}
3919 .    el \{\
3920 .       nr #MCX_ALD (\\$1)
3921 .       TQ
3922 .       ie \\n[#MCX_ALD]=0 \{ .sp |\\n(.hu-1v \}
3923 .       el \{ .sp |\\n(.hu+\\n[#MCX_ALD]u \}
3924 .       rr #MCX_ALD
3925 .    \}
3926 .    TRAP
3927 .END
3928 \#
3929 \# =====================================================================
3930 \#
3931 \# +++TYPESETTING SUPPORT MACROS+++
3932 \#
3933 \# TRAP
3934 \# ----
3935 \# *Arguments:
3936 \#   toggle
3937 \# *Function:
3938 \#   Enables/disables traps.
3939 \# *Notes:
3940 \#   EL and TN don't function as advertised on the last line before
3941 \#   a trap (when they break the preceding line, they spring the
3942 \#   trap, and groff won't back up to the line preceding the trap).
3943 \#   TRAP is a kludge to get EL and TN work properly on last lines.
3944 \#   The user simply enloses the offending lines in TRAP OFF/TRAP.
3945 \#
3946 .MAC TRAP END
3947 .    ie '\\$1'' \{ .vpt 1 \}
3948 .    el \{ .vpt 0 \}
3949 .END
3950 \#
3951 \#
3952 \# SILENT
3953 \# ------
3954 \# *Arguments:
3955 \#   <none> | <anything>
3956 \# *Function:
3957 \#   Diverts text so that it doesn't print, or turns the function off.
3958 \# *Notes:
3959 \#   Useful for setting up autotabs where you don't want the line with
3960 \#   the tab marks to print.
3961 \#
3962 \#   Also aliased as COMMENT, in case user wants to input a batch of
3963 \#   text that doesn't print.
3964 \#
3965 .MAC SILENT END
3966 .    nr #SILENT 1
3967 .    if \\n[#QUAD] \{ .br \}
3968 .    ie '\\$1'' \{ .di NO_FLASH \}
3969 .    el \{\
3970 .       br
3971 .       di
3972 .       rm NO_FLASH
3973 .       rr #SILENT
3974 .    \}
3975 .END
3976 \#
3977 \#
3978 \# PRINT
3979 \# -----
3980 \# *Function:
3981 \#   Prints anything.  A macro that helps keep my code nicely indented.
3982 \#
3983 .MAC PRINT END
3984 .    nop \\$*
3985 .END
3986 \#
3987 \#
3988 \# CAPS
3989 \# ----
3990 \# *Arguments:
3991 \#   <none> | <anything>
3992 \# *Function:
3993 \#   Converts text to caps, or, if OFF, reverts to normal caps/lc.
3994 \# *Notes:
3995 \#   For inline control of capitalization style, use \*[UC] and
3996 \#   \*[LC].
3997 \#
3998 .MAC CAPS END
3999 .    ie '\\$1'' \{\
4000 .       tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
4001 .       tr Ă \[`A]
4002 .       tr Ă˘\[^A]
4003 .       tr Ăˇ\['A]
4004 .       tr Ă¤\[:A]
4005 .       tr ĂĄ\[oA]
4006 .       tr ĂŁ\[~A]
4007 .       tr Ă¦\[AE]
4008 .       tr Ă¨\[`E]
4009 .       tr ĂŞ\[^E]
4010 .       tr Ă©\['E]
4011 .       tr Ă«\[:E]
4012 .       tr Ă¬\[`I]
4013 .       tr Ă®\[^I]
4014 .       tr Ă­\['I]
4015 .       tr ĂŻ\[:I]
4016 .       tr Ă˛\[`O]
4017 .       tr Ă´\[^O]
4018 .       tr Ăł\['O]
4019 .       tr Ă¶\[:O]
4020 .       tr Ăµ\[~O]
4021 .       tr Ă¸\[/O]
4022 .       tr Ăą\[`U]
4023 .       tr Ă»\[^U]
4024 .       tr Ăş\['U]
4025 .       tr ĂĽ\[:U]
4026 .       tr Ă§\[,C]
4027 .       tr Ă°\[-D]
4028 .       tr Ă±\[~N]
4029 .       tr Ăľ\[TP]
4030 .       tr Ă˝\['Y]
4031 .       tr Ăż\[:Y]
4032 .       nr #CAPS_ON 1
4033 .    \}
4034 .    el \{\
4035 .       tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
4036 .       tr Ă \[`a]
4037 .       tr Ă˘\[^a]
4038 .       tr Ăˇ\['a]
4039 .       tr Ă¤\[:a]
4040 .       tr ĂĄ\[oa]
4041 .       tr ĂŁ\[~a]
4042 .       tr Ă¦\[ae]
4043 .       tr Ă¨\[`e]
4044 .       tr ĂŞ\[^e]
4045 .       tr Ă©\['e]
4046 .       tr Ă«\[:e]
4047 .       tr Ă¬\[`i]
4048 .       tr Ă®\[^i]
4049 .       tr Ă­\['i]
4050 .       tr ĂŻ\[:i]
4051 .       tr Ă˛\[`o]
4052 .       tr Ă´\[^o]
4053 .       tr Ăł\['o]
4054 .       tr Ă¶\[:o]
4055 .       tr Ăµ\[~o]
4056 .       tr Ă¸\[/o]
4057 .       tr Ăą\[`u]
4058 .       tr Ă»\[^u]
4059 .       tr Ăş\['u]
4060 .       tr ĂĽ\[:u]
4061 .       tr Ă§\[,c]
4062 .       tr Ă°\[Sd]
4063 .       tr Ă±\[~n]
4064 .       tr Ăľ\[Tp]
4065 .       tr Ă˝\['y]
4066 .       tr Ăż\[:y]
4067 .       rr #CAPS_ON
4068 .    \}
4069 .END
4070 \#
4071 .MAC UC END
4072 \c
4073 .    tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
4074 .    tr Ă \[`A]
4075 .    tr Ă˘\[^A]
4076 .    tr Ăˇ\['A]
4077 .    tr Ă¤\[:A]
4078 .    tr ĂĄ\[oA]
4079 .    tr ĂŁ\[~A]
4080 .    tr Ă¦\[AE]
4081 .    tr Ă¨\[`E]
4082 .    tr ĂŞ\[^E]
4083 .    tr Ă©\['E]
4084 .    tr Ă«\[:E]
4085 .    tr Ă¬\[`I]
4086 .    tr Ă®\[^I]
4087 .    tr Ă­\['I]
4088 .    tr ĂŻ\[:I]
4089 .    tr Ă˛\[`O]
4090 .    tr Ă´\[^O]
4091 .    tr Ăł\['O]
4092 .    tr Ă¶\[:O]
4093 .    tr Ăµ\[~O]
4094 .    tr Ă¸\[/O]
4095 .    tr Ăą\[`U]
4096 .    tr Ă»\[^U]
4097 .    tr Ăş\['U]
4098 .    tr ĂĽ\[:U]
4099 .    tr Ă§\[,C]
4100 .    tr Ă°\[-D]
4101 .    tr Ă±\[~N]
4102 .    tr Ăľ\[TP]
4103 .    tr Ă˝\['Y]
4104 .    tr Ăż\[:Y]
4105 .    nr #CAPS_ON 1
4106 .END
4107 \#
4108 .MAC LC END
4109 \c
4110 .    tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
4111 .    tr Ă \[`a]
4112 .    tr Ă˘\[^a]
4113 .    tr Ăˇ\['a]
4114 .    tr Ă¤\[:a]
4115 .    tr ĂĄ\[oa]
4116 .    tr ĂŁ\[~a]
4117 .    tr Ă¦\[ae]
4118 .    tr Ă¨\[`e]
4119 .    tr ĂŞ\[^e]
4120 .    tr Ă©\['e]
4121 .    tr Ă«\[:e]
4122 .    tr Ă¬\[`i]
4123 .    tr Ă®\[^i]
4124 .    tr Ă­\['i]
4125 .    tr ĂŻ\[:i]
4126 .    tr Ă˛\[`o]
4127 .    tr Ă´\[^o]
4128 .    tr Ăł\['o]
4129 .    tr Ă¶\[:o]
4130 .    tr Ăµ\[~o]
4131 .    tr Ă¸\[/o]
4132 .    tr Ăą\[`u]
4133 .    tr Ă»\[^u]
4134 .    tr Ăş\['u]
4135 .    tr ĂĽ\[:u]
4136 .    tr Ă§\[,c]
4137 .    tr Ă°\[Sd]
4138 .    tr Ă±\[~n]
4139 .    tr Ăľ\[Tp]
4140 .    tr Ă˝\['y]
4141 .    tr Ăż\[:y]
4142 .    rr #CAPS_ON
4143 .END
4144 \#
4145 \# SIZESPECS
4146 \# ---------
4147 \# Argument:
4148 \#   <none>
4149 \# Function:
4150 \#   Gets cap-height, x-height, and descender depth of the
4151 \#   current font at the current point size.
4152 \# *Notes:
4153 \#   The routine is diverted so it remains invisible to output.
4154 \#
4155 .MAC SIZESPECS END
4156 .    di TYPESIZE
4157 E\\R'#CAP_HEIGHT \\n[.cht]'
4158 e\\R'#X_HEIGHT \\n[.cht]'
4159 y\\R'#DESCENDER \\n[.cdp]'
4160 .    br
4161 .    di
4162 .END
4163 \#
4164 \# =====================================================================
4165 \#
4166 \# +++TYPESETTING ALIASES+++
4167 \#
4168 .ALIAS    ADD_SPACE       ALD
4169 .ALIAS    CENTRE          CENTER
4170 .ALIAS    COLOUR          COLOR
4171 .ALIAS    COMMENT         SILENT
4172 .ALIAS    CONDENSE        CONDENSE_OR_EXTEND
4173 .ALIAS    EXTEND          CONDENSE_OR_EXTEND
4174 .ALIAS    FAM             FAMILY
4175 .ALIAS    FONT            FT
4176 .ALIAS    HYPHENATE       HY
4177 .ALIAS    HYPHENATION     HY
4178 .ALIAS    HYSET           HY_SET
4179 .ALIAS    IBQ             IBX
4180 .ALIAS    ILQ             ILX
4181 .ALIAS    IQ              IX
4182 .ALIAS    IRQ             IRX
4183 .ALIAS    LIG             LIGATURES
4184 .ALIAS    NEWCOLOUR       NEWCOLOR
4185 .ALIAS    PADMARKER       PAD_MARKER
4186 .ALIAS    SP              ALD
4187 .ALIAS    SPACE           ALD
4188 .ALIAS    TABSET          TAB_SET
4189 .ALIAS    TB              TAB
4190 .ALIAS    UNDERSCORE_2    UNDERSCORE2
4191 .ALIAS    XCOLOUR         XCOLOR
4192 \#
4193 \#
4194 \# ====================================================================
4195 \#
4196 \# DOCUMENT PROCESSING MACROS, STRINGS AND ALIASES
4197 \# ===============================================
4198 \#
4199 \# +++PAGE DIMENSIONS+++
4200 \#
4201 \# PAPER SIZE
4202 \# ----------
4203 \# *Arguments:
4204 \#   LETTER | LEGAL | STATEMENT | TABLOID | LEDGER | FOLIO | QUARTO | 10x14 | EXECUTIVE | A3 | A4 | A5 | B4 | B5
4205 \# *Function:
4206 \#   Sets up dimensions for different paper sizes.
4207 \#
4208 .MAC PAPER END
4209 .    ds $PAPER \\$1
4210 .    if '\\*[$PAPER]'LETTER' \{\
4211 .       PAGEWIDTH  8.5i
4212 .       PAGELENGTH 11i
4213 .    \}
4214 .    if '\\*[$PAPER]'LEGAL' \{\
4215 .       PAGEWIDTH  8.5i
4216 .       PAGELENGTH 14i
4217 .    \}
4218 .    if '\\*[$PAPER]'STATEMENT' \{\
4219 .       PAGEWIDTH  5.5i
4220 .       PAGELENGTH 8.5i
4221 .    \}
4222 .    if '\\*[$PAPER]'TABLOID' \{\
4223 .       PAGEWIDTH  11i
4224 .       PAGELENGTH 17i
4225 .    \}
4226 .    if '\\*[$PAPER]'LEDGER' \{\
4227 .       PAGEWIDTH  17i
4228 .       PAGELENGTH 11i
4229 .    \}
4230 .    if '\\*[$PAPER]'FOLIO' \{\
4231 .       PAGEWIDTH  8.5i
4232 .       PAGELENGTH 13i
4233 .    \}
4234 .    if '\\*[$PAPER]'QUARTO' \{\
4235 .       PAGEWIDTH  610p
4236 .       PAGELENGTH 780p
4237 .    \}
4238 .    if '\\*[$PAPER]'10x14' \{\
4239 .       PAGEWIDTH  10i
4240 .       PAGELENGTH 14i
4241 .    \}
4242 .    if '\\*[$PAPER]'EXECUTIVE' \{\
4243 .       PAGEWIDTH  7.25i
4244 .       PAGELENGTH 10.5i
4245 .    \}
4246 .    if '\\*[$PAPER]'A3' \{\
4247 .       PAGEWIDTH  842p
4248 .       PAGELENGTH 1190p
4249 .    \}
4250 .    if '\\*[$PAPER]'A4' \{\
4251 .       PAGEWIDTH  595p
4252 .       PAGELENGTH 842p
4253 .    \}
4254 .    if '\\*[$PAPER]'A5' \{\
4255 .       PAGEWIDTH  421p
4256 .       PAGELENGTH 595p
4257 .    \}
4258 .    if '\\*[$PAPER]'B4' \{\
4259 .       PAGEWIDTH  709p
4260 .       PAGELENGTH 1002p
4261 .    \}
4262 .    if '\\*[$PAPER]'B5' \{\
4263 .       PAGEWIDTH  501p
4264 .       PAGELENGTH 709p
4265 .    \}
4266 .    if !r#L_MARGIN \{ .L_MARGIN \\n(.o \}
4267 .    if !r#R_MARGIN \{ .R_MARGIN 1i \}
4268 .END
4269 \#
4270 \#
4271 \# ====================================================================
4272 \#
4273 \# +++PRINTSTYLE -- TYPEWRITE OR TYPESET+++
4274 \#
4275 \# PRINTSTYLE
4276 \# ----------
4277 \# *Arguments:
4278 \#   TYPESET | TYPEWRITE [SINGLESPACE]
4279 \# *Function:
4280 \#   Sets type specs for typewriter-style or typeset output.
4281 \# *Notes:
4282 \#   Number registers: TYPEWRITE=1, TYPESET=2.
4283 \#
4284 .MAC PRINTSTYLE END
4285 .    if !\\n[#COLLATE]=1 \{\
4286 .       if !d$PAPER \{ .PAPER LETTER \}
4287 .       if '\\$1'TYPEWRITE' \{\
4288 .          nr #PRINT_STYLE 1
4289 .          if !\\n[#DOC_TYPE]=4 \{ .L_MARGIN 6P \}
4290 .          if !\\n[#DOC_TYPE]=4 \{ .R_MARGIN 6P \}
4291 .          TYPEWRITER
4292 .          color 0
4293 .          ie '\\$2'SINGLESPACE' \{\
4294 .             nr #SINGLE_SPACE 1
4295 .             vs 12
4296 .             nr #ORIGINAL_DOC_LEAD \\n(.v
4297 .          \}
4298 .          el \{\
4299 .             vs 24
4300 .             nr #ORIGINAL_DOC_LEAD \\n(.v
4301 .          \}
4302 .          QUAD    L
4303 .          HY      OFF
4304 .          SMARTQUOTES OFF
4305 .          if !\\n[#PP_INDENT] \{\
4306 .             in 3P                 \"Set indent
4307 .             nr #PP_INDENT \\n(.i  \"Read into #PP_INDENT
4308 .             in 0                  \"Remove indent
4309 .          \}
4310 .          HDRFTR_RIGHT_CAPS
4311 .          nr #BOLDER_UNITS 0
4312 .          nr #CONDENSE 0
4313 .          nr #EXTEND 0
4314 .          if !\\n[#ITALIC_MEANS_ITALIC]  \{ .rm IT \}
4315 .          rm BD
4316 .          rm BDI
4317 .          if !\\n[#ITALIC_MEANS_ITALIC] \{ .rm PREV          \}
4318 .          if !\\n[#SLANT_MEANS_SLANT]   \{ .UNDERLINE_SLANT  \}
4319 .          if !\\n[#ITALIC_MEANS_ITALIC] \{ .UNDERLINE_ITALIC \}
4320 .          if !\\n[#UNDERLINE_QUOTES]    \{ .UNDERLINE_QUOTES \}
4321 .          nr #IGNORE_COLUMNS 1
4322 .          nr #RULE_WEIGHT 500
4323 .          nr #HEAD_UNDERLINE_WEIGHT 500
4324 .          char \(em --
4325 .          tr `'
4326 .       \}
4327 .       if '\\$1'TYPESET' \{\
4328 .          nr #PRINT_STYLE 2
4329 .          if !\\n[#DOC_TYPE]=4 \{ .L_MARGIN 6P \}
4330 .          if !\\n[#DOC_TYPE]=4 \{ .R_MARGIN 6P \}
4331 .          FAMILY  T
4332 .          FT      R
4333 .          if !\\n[#DOC_TYPE]=4 \{ .PT_SIZE 12.5 \}
4334 .          if !\\n[#DOC_TYPE]=4 \{ .LS 16 \}
4335 .          JUSTIFY
4336 .          HY
4337 .          HY_SET 2 36p 1p
4338 .          KERN
4339 .          LIG
4340 .          SS 0
4341 .          SMARTQUOTES
4342 .          if !\\n[#PP_INDENT] \{\
4343 .             in 2m                 \"Set indent
4344 .             nr #PP_INDENT \\n(.i  \"Read into #PP_INDENT
4345 .             in 0                  \"Remove indent
4346 .          \}
4347 .          HDRFTR_RIGHT_CAPS
4348 .          rr #IGNORE_COLUMNS
4349 .       \}
4350 .    \}
4351 .END
4352 \#
4353 \#
4354 \# Macros to control behaviour of PRINTSTYLE TYPEWRITE
4355 \#
4356 \# First, a little utility macro.
4357 \#
4358 .MAC TYPEWRITER END
4359 .    fam C
4360 .    ft  R
4361 .    ps  12
4362 .END
4363 \#
4364 \#
4365 \# ITALIC MEANS ITALIC
4366 \# -------------------
4367 \# *Argument:
4368 \#   <none>
4369 \# *Function:
4370 \#   Instructs TYPEWRITE to treat italics as italics, whether
4371 \#   invoked via control lines or inline.
4372 \# *Notes:
4373 \#   ITALIC_MEANS_ITALIC and UNDERLINE_ITALIC are mututally exclusive,
4374 \#   hence invoking the one automatically turns off the other.
4375 \#
4376 .MAC ITALIC_MEANS_ITALIC END
4377 .    if \\n[#PRINT_STYLE]=1 \{\
4378 .       nr #ITALIC_MEANS_ITALIC 1
4379 .       rr #UNDERLINE_ITALIC
4380 .       rm ROM
4381 .       rm IT
4382 .       rm PREV
4383 .       ds ROM  \EfR
4384 .       ds IT   \EfI
4385 .       ds PREV \EfR
4386 .    \}
4387 .END
4388 \#
4389 \#
4390 \# UNDERLINE ITALIC
4391 \# ----------------
4392 \# *Argument:
4393 \#   <none>
4394 \# *Function:
4395 \#   Instructs TYPEWRITE to underline italics, whether invoked
4396 \#   via control lines or inline.
4397 \# *Notes:
4398 \#   UNDERLINE_ITALIC and ITALIC_MEANS_ITALIC are mututally exclusive,
4399 \#   hence invoking the one automatically turns off the other.
4400 \#
4401 \#   UNDERLINE_ITALIC is the default for TYPEWRITE.
4402 \#
4403 .MAC UNDERLINE_ITALIC END
4404 .    if \\n[#PRINT_STYLE]=1 \{\
4405 .       nr #UNDERLINE_ITALIC 1
4406 .       rr #ITALIC_MEANS_ITALIC
4407 .       rm ROM
4408 .       rm IT
4409 .       rm PREV
4410 .       ds ROM  \E*[ULX]
4411 .       ds IT   \E*[UL]
4412 .       ds PREV \E*[ULX]
4413 .    \}
4414 .END
4415 \#
4416 \#
4417 \# UNDERLINE SLANT
4418 \# ---------------
4419 \# *Arguments:
4420 \#   <none> | <anything>
4421 \# *Function:
4422 \#   Instructs TYPEWRITE to underline occurences of \*[SLANT], or
4423 \#   turns feature off.
4424 \# *Notes:
4425 \#   Users may want \*[SLANT] to mean slant in TYPEWRITE, although
4426 \#   most of the time, \*[SLANT] most likely means the user wanted
4427 \#   italic but didn't have it, ergo the need to tell TYPEWRITE to
4428 \#   treat \*[SLANT] as italic (i.e. underlined).
4429 \#
4430 \#   UNDERLINE_SLANT and SLANT_MEANS_SLANT are mututally exclusive,
4431 \#   hence invoking the one automatically turns off the other.
4432 \#
4433 \#   UNDERLINE_SLANT is the default for TYPEWRITE.
4434 \#
4435 .MAC UNDERLINE_SLANT END
4436 .    if \\n[#PRINT_STYLE]=1 \{\
4437 .       rr #SLANT_MEANS_SLANT
4438 .       nr #UNDERLINE_SLANT 1
4439 .       rm SLANT
4440 .       rm SLANTX
4441 .       ds SLANT  \ER'#SLANT_ON 1'\E*[UL]
4442 .       ds SLANTX \ER'#SLANT_ON 0'\E*[ULX]
4443 .    \}
4444 .END
4445 \#
4446 \#
4447 .MAC SLANT_MEANS_SLANT END
4448 .    if \\n[#PRINT_STYLE]=1 \{\
4449 .       rr #UNDERLINE_SLANT
4450 .       nr #SLANT_MEANS_SLANT 1
4451 .       rm SLANT
4452 .       rm SLANTX
4453 .       ds SLANT  \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
4454 .       ds SLANTX \ER'#SLANT_ON 0'\ES'0'
4455 .    \}
4456 .END
4457 \#
4458 \#
4459 .MAC IGNORE_COLUMNS END
4460 .    if \\n[#PRINT_STYLE]=1 \{ .nr #NO_COLUMNS 1 \}
4461 .END
4462 \#
4463 \#
4464 \# ====================================================================
4465 \#
4466 \# +++COPY STYLE -- DRAFT OR FINAL+++
4467 \#
4468 \# COPY STYLE
4469 \# ----------
4470 \# *Arguments:
4471 \#   DRAFT | FINAL
4472 \# *Function:
4473 \#   Sets registers that are used to determine what to put
4474 \#   in the default header, and how to number pages.
4475 \# *Notes:
4476 \#   DOCTYPE must come before COPYSTYLE.
4477 \#
4478 .MAC COPYSTYLE END
4479 .    ds $COPY_STYLE \\$1
4480 .    if '\\*[$COPY_STYLE]'DRAFT' \{\
4481 .       nr #COPY_STYLE 1
4482 .       if !d$DRAFT \{ .DRAFT 1 \}
4483 .    \}
4484 .    if '\\*[$COPY_STYLE]'FINAL' \{ .nr #COPY_STYLE 2         \}
4485 .    if !d$CHAPTER_STRING        \{ .CHAPTER_STRING "Chapter" \}
4486 .    if !d$DRAFT_STRING          \{ .DRAFT_STRING "Draft"     \}
4487 .    if !d$REVISION_STRING       \{ .REVISION_STRING "Rev."   \}
4488 .\" Default
4489 .    if \\n[#DOC_TYPE]=1 \{\
4490 .       ie \\n[#COPY_STYLE]=1 \{\
4491 .          ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4492 .          el \{ .PAGENUM_STYLE roman \}
4493 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4494 .             ie \\n[#DRAFT_WITH_PAGENUM] \{\
4495 .                ds $HDRFTR_CENTER
4496 .             \}
4497 .             el \{\
4498 .                ie '\\*[$REVISION]'' \{\
4499 .                   ds $HDRFTR_CENTER \
4500                     \\*[$DRAFT_STRING]\\*[$DRAFT]
4501 .                \}
4502 .                el \{\
4503 .                   ds $HDRFTR_CENTER \
4504                     \\*[$DRAFT_STRING]\\*[$DRAFT], \
4505                     \\*[$REVISION_STRING] \\*[$REVISION]
4506 .                \}
4507 .             \}
4508 .          \}
4509 .       \}
4510 .       el \{\
4511 .          ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4512 .          el \{ .PAGENUM_STYLE DIGIT \}
4513 .          if r#DRAFT_WITH_PAGENUM \{ .rr #DRAFT_WITH_PAGENUM \}
4514 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4515 .             ds $HDRFTR_CENTER
4516 .             rr #USER_DEF_HDRFTR_CENTER
4517 .          \}
4518 .       \}
4519 .    \}
4520 .\" Chapter
4521 .    if \\n[#DOC_TYPE]=2 \{\
4522 .\" Copystyle DRAFT
4523 .       ie \\n[#COPY_STYLE]=1 \{\
4524 .          ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4525 .          el \{ .PAGENUM_STYLE roman \}
4526 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4527 .             ie \\n[#DRAFT_WITH_PAGENUM] \{\
4528 .                ie '\\*[$CHAPTER]'' \{\
4529 .                   ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4530 .                      ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4531 .                   \}
4532 .                   el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING]
4533 .                \}
4534 .                el \{\
4535 .                   ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4536 .                      ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4537 .                   \}
4538 .                   el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER]
4539 .                \}
4540 .             \}
4541 .             el \{\
4542 .                ie '\\*[$REVISION]'' \{\
4543 .                   ie '\\*[$CHAPTER]'' \{\
4544 .                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4545 .                         ie '\\*[$DRAFT]'' \{\
4546 .                            ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4547 .                         \}
4548 .                         el \{\
4549 .                            ds $HDRFTR_CENTER \
4550                              \\*[$CHAPTER_TITLE], \
4551                              \\*[$DRAFT_STRING]\\*[$DRAFT]
4552 .                         \}
4553 .                      \}
4554 .                      el \{\
4555 .                         ie '\\*[$DRAFT]'' \{\
4556 .                            ds $HDRFTR_CENTER \
4557                              \\*[$CHAPTER_STRING]
4558 .                         \}
4559 .                         el \{\
4560 .                            ds $HDRFTR_CENTER \
4561                              \\*[$CHAPTER_STRING], \
4562                              \\*[$DRAFT_STRING]\\*[$DRAFT]
4563 .                         \}
4564 .                      \}
4565 .                   \}
4566 .                   el \{\
4567 .                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4568 .                         ie '\\*[$DRAFT]'' \{\
4569 .                            ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4570 .                         \}
4571 .                         el \{\
4572 .                            ds $HDRFTR_CENTER \
4573                              \\*[$CHAPTER_TITLE_1], \
4574                              \\*[$DRAFT_STRING]\\*[$DRAFT]
4575 .                         \}
4576 .                      \}
4577 .                      el \{\
4578 .                         ie '\\*[$DRAFT]'' \{\
4579 .                            ds $HDRFTR_CENTER \
4580                              \\*[$CHAPTER_STRING] \\*[$CHAPTER]
4581 .                         \}
4582 .                         el \{\
4583 .                            ds $HDRFTR_CENTER \
4584                              \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
4585                              \\*[$DRAFT_STRING]\\*[$DRAFT]
4586 .                         \}
4587 .                      \}
4588 .                   \}
4589 .                \}
4590 .                el \{\
4591 .                   ie '\\*[$CHAPTER]'' \{\
4592 .                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4593 .                         ie '\\*[$DRAFT]'' \{\
4594 .                            ds $HDRFTR_CENTER \
4595                              \\*[$CHAPTER_TITLE], \
4596                              \\*[$REVISION_STRING] \\*[$REVISION]
4597 .                         \}
4598 .                         el \{\
4599 .                            ds $HDRFTR_CENTER \
4600                              \\*[$CHAPTER_TITLE], \
4601                              \\*[$DRAFT_STRING]\\*[$DRAFT], \
4602                              \\*[$REVISION_STRING] \\*[$REVISION]
4603 .                         \}
4604 .                      \}
4605 .                      el \{\
4606 .                         ie '\\*[$DRAFT]'' \{\
4607 .                            ds $HDRFTR_CENTER \
4608                              \\*[$CHAPTER_STRING], \
4609                              \\*[$REVISION_STRING] \\*[$REVISION]
4610 .                         \}
4611 .                         el \{\
4612 .                            ds $HDRFTR_CENTER \
4613                              \\*[$CHAPTER_STRING], \
4614                              \\*[$DRAFT_STRING]\\*[$DRAFT], \
4615                              \\*[$REVISION_STRING] \\*[$REVISION]
4616 .                         \}
4617 .                      \}
4618 .                   \}
4619 .                   el \{\
4620 .                      ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4621 .                         ie '\\*[$DRAFT]'' \{\
4622 .                            ds $HDRFTR_CENTER \
4623                              \\*[$CHAPTER_TITLE], \
4624                              \\*[$REVISION_STRING] \\*[$REVISION]
4625 .                         \}
4626 .                         el \{\
4627 .                            ds $HDRFTR_CENTER \
4628                              \\*[$CHAPTER_TITLE], \
4629                              \\*[$DRAFT_STRING]\\*[$DRAFT], \
4630                              \\*[$REVISION_STRING] \\*[$REVISION]
4631 .                         \}
4632 .                      \}
4633 .                      el \{\
4634 .                         ie '\\*[$DRAFT]'' \{\
4635 .                            ds $HDRFTR_CENTER \
4636                              \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
4637                              \\*[$REVISION_STRING] \\*[$REVISION]
4638 .                         \}
4639 .                         el \{\
4640 .                            ds $HDRFTR_CENTER \
4641                              \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
4642                              \\*[$DRAFT_STRING]\\*[$DRAFT], \
4643                              \\*[$REVISION_STRING] \\*[$REVISION]
4644 .                         \}
4645 .                      \}
4646 .                   \}
4647 .                \}
4648 .             \}
4649 .          \}
4650 .       \}
4651 .\" Copystyle FINAL
4652 .       el \{\
4653 .          if r#DRAFT_WITH_PAGENUM \{ .rr #DRAFT_WITH_PAGENUM \}
4654 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4655 .             ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4656 .             el \{ .PAGENUM_STYLE DIGIT \}
4657 .             ie '\\*[$CHAPTER]'' \{\
4658 .                ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4659 .                   ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4660 .                \}
4661 .                el \{\
4662 .                   ds $HDRFTR_CENTER \\*[$CHAPTER_STRING]
4663 .                \}
4664 .             \}
4665 .             el \{\
4666 .                ie !'\\*[$CHAPTER_TITLE_1]'' \{\
4667 .                   ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE]
4668 .                \}
4669 .                el \{\
4670 .                   ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER]
4671 .                \}
4672 .             \}
4673 .          \}
4674 .       \}
4675 .    \}
4676 .\" Named
4677 .    if \\n[#DOC_TYPE]=3 \{\
4678 .       ie \\n[#COPY_STYLE]=1 \{\
4679 .          ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4680 .          el \{ .PAGENUM_STYLE roman \}
4681 .          ie \\n[#DRAFT_WITH_PAGENUM] \{\
4682 .             ds $HDRFTR_CENTER \\*[$DOC_TYPE]
4683 .          \}
4684 .          el \{\
4685 .             if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4686 .                ie '\\*[$REVISION]'' \{\
4687 .                   ie '\\*[$DRAFT]'' \{\
4688 .                      ds $HDRFTR_CENTER \\*[$DOC_TYPE]
4689 .                   \}
4690 .                   el \{\
4691 .                      ds $HDRFTR_CENTER \
4692                        \\*[$DOC_TYPE], \
4693                        \\*[$DRAFT_STRING]\\*[$DRAFT]
4694 .                   \}
4695 .                \}
4696 .                el \{\
4697 .                   ie '\\*[$DRAFT]'' \{\
4698 .                      ds $HDRFTR_CENTER \
4699                        \\*[$DOC_TYPE], \
4700                        \\*[$REVISION_STRING] \\*[$REVISION]
4701 .                   \}
4702 .                   el \{\
4703 .                      ds $HDRFTR_CENTER \
4704                        \\*[$DOC_TYPE], \
4705                        \\*[$DRAFT_STRING]\\*[$DRAFT], \
4706                        \\*[$REVISION_STRING] \\*[$REVISION]
4707 .                   \}
4708 .                \}
4709 .             \}
4710 .          \}
4711 .       \}
4712 .       el \{\
4713 .          if r#DRAFT_WITH_PAGENUM \{ .rr #DRAFT_WITH_PAGENUM \}
4714 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
4715 .             ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
4716 .             el \{ .PAGENUM_STYLE DIGIT \}
4717 .             ds $HDRFTR_CENTER \\*[$DOC_TYPE]
4718 .          \}
4719 .       \}
4720 .    \}
4721 .END
4722 \#
4723 \# ====================================================================
4724 \#
4725 \# +++COLLECT DOC INFO -- STRINGS AND REGISTERS FOR REFERENCE MACROS+++
4726 \#
4727 \# *Arguments:
4728 \#   various string/register arguments
4729 \# *Function:
4730 \#   Collect information about documents.
4731 \#
4732 \#
4733 .MAC DOCTITLE END
4734 .    rr #DOCTITLE_NUM
4735 .    nr #DOCTITLE_NUM 0 1
4736 .    while \\n[#NUM_ARGS]>\\n[#DOCTITLE_NUM] \{\
4737 .       ds $DOC_TITLE_\\n+[#DOCTITLE_NUM] \\$\\n[#DOCTITLE_NUM]
4738 .\}
4739 .    ds $DOC_TITLE \\$*
4740 .END
4741 \#
4742 .MAC TITLE END \"Document title
4743 .    ie \\n[#NUM_ARGS]=0 \{\
4744 .       if \\n[#TITLE_NUM] \{\
4745 .          nr #ITEM 0 1
4746 .          while \\n[#TITLE_NUM]>\\n[#ITEM] \{\
4747 .             rm $TITLE_\\n+[#ITEM]
4748 .\}
4749 .          rr #TITLE_NUM
4750 .       \}
4751 .    \}
4752 .    el \{\
4753 .       nr #TITLE_NUM 0 1
4754 .       while \\n[#NUM_ARGS]>\\n[#TITLE_NUM] \{\
4755 .          ds $TITLE_\\n+[#TITLE_NUM] \\$\\n[#TITLE_NUM]
4756 .\}
4757 .       ds $TITLE \\$*
4758 .    \}
4759 .END
4760 \#
4761 \#
4762 .MAC SUBTITLE END \"Document sub-title
4763 .    ie \\n[#NUM_ARGS]=0 \{\
4764 .       if \\n[#SUBTITLE_NUM] \{\
4765 .          nr #ITEM 0 1
4766 .          while \\n[#SUBTITLE_NUM]>\\n[#ITEM] \{\
4767 .             rm $SUBTITLE_\\n+[#ITEM]
4768 .\}
4769 .          rr #SUBTITLE_NUM
4770 .          rm $SUBTITLE
4771 .       \}
4772 .    \}
4773 .    el \{\
4774 .    if '\\$1'DOC_COVER' \{\
4775 .       shift
4776 .       nr #SUBTITLE_DOCCOVER_NUM 0 1
4777 .       while \\n[#NUM_ARGS]>\\n[#SUBTITLE_DOCCOVER_NUM] \{\
4778 .           ds $SUBTITLE_DOCCOVER_\\n+[#SUBTITLE_DOCCOVER_NUM] \\$\\n[#SUBTITLE_DOCCOVER_NUM]
4779 .\}
4780 .       return
4781 .    \}
4782 .    if '\\$1'COVER' \{\
4783 .       shift
4784 .       nr #SUBTITLE_COVER_NUM 0 1
4785 .       while \\n[#NUM_ARGS]>\\n[#SUBTITLE_COVER_NUM] \{\
4786 .           ds $SUBTITLE_COVER_\\n+[#SUBTITLE_COVER_NUM] \\$\\n[#SUBTITLE_COVER_NUM]
4787 .\}
4788 .       return
4789 .    \}
4790 .       nr #SUBTITLE_NUM 0 1
4791 .       while \\n[#NUM_ARGS]>\\n[#SUBTITLE_NUM] \{\
4792 .          ds $SUBTITLE_\\n+[#SUBTITLE_NUM] \\$\\n[#SUBTITLE_NUM]
4793 .\}
4794 .       ds $SUBTITLE \\$*
4795 .    \}
4796 .END
4797 \#
4798 \#
4799 .MAC CHAPTER END \"If document is a chapter, the chapter number
4800 .    nr #CHAPTER_CALLED 1
4801 .    ds $CHAPTER \\$1
4802 .    if r#CH_NUM \{\
4803 .       if \B'\\*[$CHAPTER]' \{\
4804 .          nr #CH_NUM \\*[$CHAPTER]
4805 .       \}
4806 .    \}
4807 .END
4808 \#
4809 \#
4810 .MAC CHAPTER_TITLE END \" This defines what comes after Chapter #
4811 .    ie \\n[#NUM_ARGS]=0 \{\
4812 .       if \\n[#CHAPTER_TITLE_NUM] \{\
4813 .          nr #ITEM 0 1
4814 .          while \\n[#CHAPTER_TITLE_NUM]>\\n[#ITEM] \{\
4815 .             rm $CHAPTER_TITLE_\\n+[#ITEM]
4816 .\}
4817 .          rr #CHAPTER_TITLE_NUM
4818 .          rm $CHAPTER_TITLE
4819 .       \}
4820 .    \}
4821 .    el \{\
4822 .       rr #CHAPTER_TITLE_NUM
4823 .       nr #CHAPTER_TITLE_NUM 0 1
4824 .       while \\n[#NUM_ARGS]>\\n[#CHAPTER_TITLE_NUM] \{\
4825 .          ds $CHAPTER_TITLE_\\n+[#CHAPTER_TITLE_NUM] \\$\\n[#CHAPTER_TITLE_NUM]
4826 .\}
4827 .       ds $CHAPTER_TITLE \\$*
4828 .    \}
4829 .END
4830 \#
4831 \#
4832 .MAC DRAFT END \"Draft number
4833 .    ie '\\$1'' .ds $DRAFT 
4834 .    el         .ds $DRAFT " \\$1
4835 .END
4836 \#
4837 \#
4838 .MAC REVISION END \"Revision number
4839 .    ds $REVISION \\$1
4840 .END
4841 \#
4842 \#
4843 .MAC DRAFT_WITH_PAGENUMBER END \"Attach draft/revision strings to page number
4844 .    nr #DRAFT_WITH_PAGENUM 1
4845 .END
4846 \#
4847 \#
4848 .MAC AUTHOR END \"Author.  Enclose all args fully in double quotes.
4849 .    if '\\$1'DOC_COVER' \{\
4850 .       shift
4851 .       nr #AUTHOR_DOCCOVER_NUM 0 1
4852 .       while \\n[#NUM_ARGS]>\\n[#AUTHOR_DOCCOVER_NUM] \{\
4853 .           ds $AUTHOR_DOCCOVER_\\n+[#AUTHOR_DOCCOVER_NUM] \\$\\n[#AUTHOR_DOCCOVER_NUM]
4854 .\}
4855 .       return
4856 .    \}
4857 .    if '\\$1'COVER' \{\
4858 .       shift
4859 .       nr #AUTHOR_COVER_NUM 0 1
4860 .           while \\n[#NUM_ARGS]>\\n[#AUTHOR_COVER_NUM] \{\
4861 .       ds $AUTHOR_COVER_\\n+[#AUTHOR_COVER_NUM] \\$\\n[#AUTHOR_COVER_NUM]
4862 .\}
4863 .       return
4864 .    \}
4865 .    nr #AUTHOR_NUM 0 1
4866 .    rm $AUTHORS
4867 .    while \\n[#NUM_ARGS]>\\n[#AUTHOR_NUM] \{\
4868 .       ds $AUTHOR_\\n+[#AUTHOR_NUM] \\$\\n[#AUTHOR_NUM]
4869 .       as $AUTHORS \\*[$AUTHOR_\\n[#AUTHOR_NUM]], \"
4870 .\}
4871 .    substring $AUTHORS 0 -3
4872 .    ds $AUTHOR \\*[$AUTHOR_1]
4873 .END
4874 \#
4875 .ALIAS EDITOR AUTHOR
4876 \#
4877 .MAC COPYRIGHT END \"For use on cover pages only
4878 .   ie \\n[#NUM_ARGS]=1 \{\
4879 .       ds $COPYRIGHT \[co]\\$1
4880 .       rm $COPYRIGHT_DOCCOVER
4881 .       rm $COPYRIGHT_COVER
4882 .    \}
4883 .    el \{\
4884 .       if '\\$1'DOC_COVER' \{\
4885 .          ds $COPYRIGHT_DOCCOVER \[co]\\$2
4886 .       \}
4887 .       if '\\$1'COVER' \{\
4888 .          ds $COPYRIGHT_COVER \[co]\\$2
4889 .       \}
4890 .    \}
4891 .END
4892 \#
4893 \#
4894 .MAC MISC END \"For use on cover pages only; enclose all args in double quotes
4895 .    ie \\n[#NUM_ARGS]=0 \{\
4896 .       if \\n[#MISC_NUM] \{\
4897 .          nr #ITEM 0 1
4898 .          while \\n[#MISC_NUM]>\\n[#ITEM] \{\
4899 .             rm $MISC_\\n+[#ITEM]
4900 .\}
4901 .          rr #MISC_NUM
4902 .          rr #NUM_MISCS
4903 .       \}
4904 .       if \\n[#MISC_DOCCOVER_NUM] \{\
4905 .          nr #ITEM 0 1
4906 .          while \\n[#MISC_DOCCOVER_NUM]>\\n[#ITEM] \{\
4907 .             rm $MISC_DOCCOVER_\\n+[#ITEM]
4908 .\}
4909 .          rr #MISC_DOCCOVER_NUM
4910 .          rr #NUM_MISCS
4911 .       \}
4912 .       if \\n[#MISC_COVER_NUM] \{\
4913 .          nr #ITEM 0 1
4914 .          while \\n[#MISC_COVER_NUM]>\\n[#ITEM] \{\
4915 .             rm $MISC_COVER_\\n+[#ITEM]
4916 .\}
4917 .          rr #MISC_COVER_NUM
4918 .          rr #NUM_MISCS
4919 .       \}
4920 .    \}
4921 .    el \{\
4922 .       if !'\\$1'DOC_COVER' \{\
4923 .         if !'\\$1'COVER' \{ .nr #NEITHER 1 \}
4924 .       \}
4925 .       if !'\\$1'COVER' \{\
4926 .          if !'\\$1'DOC_COVER'\{ .nr #NEITHER 1 \}
4927 .       \}
4928 .       if '\\$1'DOC_COVER' \{\
4929 .          shift
4930 .          nr #MISC_DOCCOVER_NUM 0 1
4931 .          while \\n[#NUM_ARGS]>\\n[#MISC_DOCCOVER_NUM] \{\
4932 .          ds $MISC_DOCCOVER_\\n+[#MISC_DOCCOVER_NUM] \\$\\n[#MISC_DOCCOVER_NUM]
4933 .\}
4934 .          nr #NUM_MISCS_DOCCOVER \\n[#NUM_ARGS]
4935 .       \}
4936 .       if '\\$1'COVER' \{\
4937 .          shift
4938 .          nr #MISC_COVER_NUM 0 1
4939 .          while \\n[#NUM_ARGS]>\\n[#MISC_COVER_NUM] \{\
4940 .          ds $MISC_COVER_\\n+[#MISC_COVER_NUM] \\$\\n[#MISC_COVER_NUM]
4941 .\}
4942 .          nr #NUM_MISCS_COVER \\n[#NUM_ARGS]
4943 .       \}
4944 .       if \\n[#NEITHER]=1 \{\
4945 .          nr #MISC_NUM 0 1
4946 .          while \\n[#NUM_ARGS]>\\n[#MISC_NUM] \{\
4947 .             ds $MISC_\\n+[#MISC_NUM] \\$\\n[#MISC_NUM]
4948 .\}
4949 .          nr #NUM_MISCS \\n[#NUM_ARGS]
4950 .          rr #NEITHER
4951 .       \}
4952 .   \}
4953 .END
4954 \#
4955 \#
4956 .MAC PAGENUMBER END \"Page # that appears on page one.
4957 .    nr #n%_AT_PAGENUM_SET \\n%
4958 .    nr #PAGE_NUM_ADJ \\$1-\\n[#n%_AT_PAGENUM_SET]
4959 .    rr #n%_AT_PAGENUM_SET
4960 .    nr #PAGE_NUM_SET 1
4961 .END
4962 \#
4963 \# ====================================================================
4964 \#
4965 \# +++TYPE OF DOCUMENT+++
4966 \#
4967 \# DOCUMENT TYPE
4968 \# -------------
4969 \# *Argument:
4970 \#   DEFAULT | CHAPTER | NAMED "<whatever> | LETTER
4971 \# *Function:
4972 \#   Creates strings and sets registers for document types.
4973 \# *Notes:
4974 \#   Number registers: DEFAULT=1, CHAPTER=2, NAMED=3, LETTER=4
4975 \#
4976 .MAC DOCTYPE END
4977 .    if '\\$1'DEFAULT' \{\
4978 .       nr #DOC_TYPE 1
4979 .    \}
4980 .    if '\\$1'CHAPTER' \{\
4981 .       nr #DOC_TYPE 2
4982 .    \}
4983 .    if '\\$1'NAMED' \{\
4984 .       ds $DOC_TYPE \\$2
4985 .       nr #DOC_TYPE 3
4986 .    \}
4987 .    if '\\$1'LETTER' \{\
4988 .       nr #DOC_TYPE 4
4989 .       L_MARGIN 1.125i
4990 .       R_MARGIN 1.125i
4991 .       PT_SIZE 12
4992 .       LS 13.5
4993 .       DOCHEADER OFF
4994 .       PARA_INDENT 3m
4995 .       INDENT_FIRST_PARAS
4996 .       PARA_SPACE
4997 .       ds $SUITE \En[#SUITE]
4998 .       HEADER_MARGIN 3P+6p
4999 .       HEADER_GAP 3P
5000 .       FOOTERS
5001 .       FOOTER_RULE OFF
5002 .       FOOTER_LEFT ""
5003 .       FOOTER_CENTER ""
5004 .       FOOTER_RIGHT_SIZE +0
5005 .       FOOTER_RIGHT "\&.../\E*[$SUITE]
5006 .       FOOTER_ON_FIRST_PAGE
5007 .       em ALL_DONE
5008 .    \}
5009 .END
5010 \#
5011 \# +++LETTER MACROS+++
5012 \#
5013 \# First, create a register to hold incrementing numbers to be
5014 \# appended to LETTERHEAD.
5015 \#
5016 .nr #FIELD 0 1
5017 \#
5018 \# DATE
5019 \# ----
5020 \# *Arguments:
5021 \#   <none>
5022 \# *Function:
5023 \#   Stores date (entered on the line after .DATE) in diversion
5024 \#   LETTERHEAD<n>
5025 \#
5026 .MAC DATE END
5027 .    if !'\\n(.z'' \{ .di \}
5028 .    di LETTERHEAD\\n+[#FIELD]
5029 .    ie \\n[#FIELD]=1 \{\
5030 .       nr #DATE_FIRST 1
5031 .       RIGHT
5032 .    \}
5033 .    el \{\
5034 .       LEFT
5035 .    \}
5036 .END
5037 \#
5038 \#
5039 \# TO
5040 \# --
5041 \# *Arguments:
5042 \#   <none>
5043 \# *Function:
5044 \#   Stores addressee address (entered on the line after .TO) in
5045 \#   diversion LETTERHEAD<n>
5046 \#
5047 .MAC TO END
5048 .    if !'\\n(.z'' \{ .di \}
5049 .    di LETTERHEAD\\n+[#FIELD]
5050 .    LEFT
5051 .END
5052 \#
5053 \#
5054 \# FROM
5055 \# ----
5056 \# *Arguments:
5057 \#   <none>
5058 \# *Function:
5059 \#   Stores addresser address (entered on the line after .FROM) in
5060 \#   diversion LETTERHEAD<n>
5061 \#
5062 .MAC FROM END
5063 .    if !'\\n(.z'' \{ .di \}
5064 .    di LETTERHEAD\\n+[#FIELD]
5065 .    LEFT
5066 .END
5067 \#
5068 \#
5069 \# GREETING
5070 \# --------
5071 \# *Arguments:
5072 \#   <none>
5073 \# *Function:
5074 \#   Stores greeting (entered on the line after .GREETING) in
5075 \#   diversion LETTERHEAD<n>
5076 \#
5077 .MAC GREETING END
5078 .    if !'\\n(.z'' \{ .di \}
5079 .    di LETTERHEAD\\n+[#FIELD]
5080 .    LEFT
5081 .END
5082 \#
5083 \#
5084 \# CLOSING
5085 \# -------
5086 \# *Arguments:
5087 \#   <closing string>
5088 \# *Function:
5089 \#   Stores greeting in diversion CLOSING.
5090 \#
5091 .MAC CLOSING END
5092 .    br
5093 .    nr #CLOSING 1
5094 .    di CLOSING
5095 .    LEFT
5096 .END
5097 \#
5098 \#
5099 \# NO SUITE
5100 \# --------
5101 \# *Arguments:
5102 \#   <none>
5103 \# *Function:
5104 \#   Redefines $FOOTER_RIGHT to blank so that a suite number doesn't
5105 \#   appear at the bottom of letter pages.
5106 \#
5107 .MAC NO_SUITE END
5108 .    FOOTER_RIGHT ""
5109 .END
5110 \#
5111 \# ====================================================================
5112 \#
5113 \# +++DEFAULTS+++
5114 \#
5115 \# TYPE-STYLE CONTROL MACROS
5116 \# -------------------------
5117 \# The control macros for family, font, size, quad and color are here
5118 \# grouped together.  Each (e.g. _FAMILY or _FONT) tests for a calling
5119 \# alias before performing the action(s) appropriate to the calling
5120 \# macro.  Defaults for all these guys are set in DEFAULTS, and listed
5121 \# in the "Control Macros" section of the documentation pertinent to
5122 \# the macro whose style is to be changed.
5123 \#
5124 .MAC _FAMILY END
5125 .    if '\\$0'AUTHOR_FAMILY'                  
5126 .    if '\\$0'BIBLIOGRAPHY_FAMILY'            .ds $BIB_FAM \\$1
5127 .    if '\\$0'BIBLIOGRAPHY_STRING_FAMILY'     .ds $BIB_STRING_FAM \\$1
5128 .    if '\\$0'BLOCKQUOTE_FAMILY'              .ds $BQUOTE_FAM \\$1
5129 .    if '\\$0'CITATION_FAMILY'                .ds $BQUOTE_FAM \\$1
5130 .    if '\\$0'CITE_FAMILY'                    .ds $BQUOTE_FAM \\$1
5131 .    if '\\$0'CHAPTER_TITLE_FAMILY'           .ds $CHAPTER_TITLE_FAM \\$1
5132 .    if '\\$0'COVER_AUTHOR_FAMILY'            .ds $COVER_AUTHOR_FAM \\$1
5133 .    if '\\$0'COVER_CHAPTER_TITLE_FAMILY'     .ds $COVER_CHAPTER_TITLE_FAM \\$1
5134 .    if '\\$0'COVER_COPYRIGHT_FAMILY'         .ds $COVER_COPYRIGHT_FAM \\$1
5135 .    if '\\$0'COVER_DOCTYPE_FAMILY'           .ds $COVER_DOCTYPE_FAM \\$1
5136 .    if '\\$0'COVER_FAMILY'                   .ds $COVER_FAM \\$1
5137 .    if '\\$0'COVER_SUBTITLE_FAMILY'          .ds $COVER_SUBTITLE_FAM \\$1
5138 .    if '\\$0'COVER_TITLE_FAMILY'             .ds $COVER_TITLE_FAM \\$1
5139 .    if '\\$0'DOC_COVER_AUTHOR_FAMILY'        .ds $DOC_COVER_AUTHOR_FAM \\$1
5140 .    if '\\$0'DOC_COVER_CHAPTER_TITLE_FAMILY' .ds $DOC_COVER_CHAPTER_TITLE_FAM \\$1
5141 .    if '\\$0'DOC_COVER_COPYRIGHT_FAMILY'     .ds $DOC_COVER_COPYRIGHT_FAM \\$1
5142 .    if '\\$0'DOC_COVER_DOCTYPE_FAMILY'       .ds $DOC_COVER_DOCTYPE_FAM \\$1
5143 .    if '\\$0'DOC_COVER_FAMILY'               .ds $DOC_COVER_FAM \\$1
5144 .    if '\\$0'DOC_COVER_SUBTITLE_FAMILY'      .ds $DOC_COVER_SUBTITLE_FAM \\$1
5145 .    if '\\$0'DOC_COVER_TITLE_FAMILY'         .ds $DOC_COVER_TITLE_FAM \\$1
5146 .    if '\\$0'DOCHEADER_FAMILY'               .ds $DOCHEADER_FAM \\$1
5147 .    if '\\$0'DOCTYPE_FAMILY'                 .ds $DOCTYPE_FAM \\$1
5148 .    if '\\$0'ENDNOTE_FAMILY'                 .ds $EN_FAM \\$1
5149 .    if '\\$0'ENDNOTE_NUMBER_FAMILY'          .ds $EN_NUMBER_FAM \\$1
5150 .    if '\\$0'ENDNOTE_LINENUMBER_FAMILY'      .ds $EN_LN_FAM \\$1
5151 .    if '\\$0'ENDNOTE_STRING_FAMILY'          .ds $EN_STRING_FAM \\$1
5152 .    if '\\$0'ENDNOTE_TITLE_FAMILY'           .ds $EN_TITLE_FAM \\$1
5153 .    if '\\$0'EPIGRAPH_FAMILY'                .ds $EPI_FAM \\$1
5154 .    if '\\$0'FOOTNOTE_FAMILY'                .ds $FN_FAM \\$1
5155 .    if '\\$0'HDRFTR_CENTER_FAMILY'           .ds $HDRFTR_CENTER_FAM \\$1
5156 .    if '\\$0'HDRFTR_FAMILY' \{\
5157 .       ds $HDRFTR_FAM        \\$1
5158 .       ds $HDRFTR_LEFT_FAM   \\$1
5159 .       ds $HDRFTR_CENTER_FAM \\$1
5160 .       ds $HDRFTR_RIGHT_FAM  \\$1
5161 .    \}
5162 .    if '\\$0'HDRFTR_LEFT_FAMILY'             .ds $HDRFTR_LEFT_FAM \\$1
5163 .    if '\\$0'HDRFTR_RIGHT_FAMILY'            .ds $HDRFTR_RIGHT_FAM \\$1
5164 .    if '\\$0'HEAD_FAMILY'                    .ds $HEAD_FAM \\$1
5165 .    if '\\$0'LINENUMBER_FAMILY'              .ds $LN_FAM \\$1
5166 .    if '\\$0'PAGENUM_FAMILY'                 .ds $PAGE_NUM_FAM \\$1
5167 .    if '\\$0'PARAHEAD_FAMILY'                .ds $PH_FAM \\$1
5168 .    if '\\$0'QUOTE_FAMILY'                   .ds $QUOTE_FAM \\$1
5169 .    if '\\$0'SUBHEAD_FAMILY'                 .ds $SH_FAM \\$1
5170 .    if '\\$0'SUBTITLE_FAMILY'                .ds $SUBTITLE_FAM \\$1
5171 .    if '\\$0'TITLE_FAMILY'                   .ds $TITLE_FAM \\$1
5172 .    if '\\$0'TOC_FAMILY'                     .ds $TOC_FAM \\$1
5173 .    if '\\$0'TOC_FAM'                        .ds $TOC_FAM \\$1
5174 .    if '\\$0'TOC_HEADER_FAMILY'              .ds $TOC_HEADER_FAM \\$1
5175 .    if '\\$0'TOC_HEAD_FAMILY'                .ds $TOC_HEAD_FAM \\$1
5176 .    if '\\$0'TOC_PARAHEAD_FAMILY'            .ds $TOC_PH_FAM \\$1
5177 .    if '\\$0'TOC_PN_FAMILY'                  .ds $TOC_PN_FAM \\$1
5178 .    if '\\$0'TOC_SUBHEAD_FAMILY'             .ds $TOC_SH_FAM \\$1
5179 .    if '\\$0'TOC_TITLE_FAMILY'               .ds $TOC_TITLE_FAM \\$1
5180 .END
5181 \#
5182 \#
5183 .MAC _FONT END
5184 .    if '\\$0'AUTHOR_FONT'                  .ds $AUTHOR_FT \\$1
5185 .    if '\\$0'BIBLIOGRAPHY_FONT'            .ds $BIB_FT \\$1
5186 .    if '\\$0'BIBLIOGRAPHY_STRING_FONT'     .ds $BIB_STRING_FT \\$1
5187 .    if '\\$0'BLOCKQUOTE_FONT'              .ds $BQUOTE_FT \\$1
5188 .    if '\\$0'CITATION_FONT'                .ds $BQUOTE_FT \\$1
5189 .    if '\\$0'CITE_FONT'                    .ds $BQUOTE_FT \\$1
5190 .    if '\\$0'CHAPTER_TITLE_FONT'           .ds $CHAPTER_TITLE_FT \\$1
5191 .    if '\\$0'COVER_AUTHOR_FONT'            .ds $COVER_AUTHOR_FT \\$1
5192 .    if '\\$0'COVER_CHAPTER_TITLE_FONT'     .ds $COVER_CHAPTER_TITLE_FT \\$1
5193 .    if '\\$0'COVER_COPYRIGHT_FONT'         .ds $COVER_COPYRIGHT_FT \\$1
5194 .    if '\\$0'COVER_DOCTYPE_FONT'           .ds $COVER_DOCTYPE_FT \\$1
5195 .    if '\\$0'COVER_SUBTITLE_FONT'          .ds $COVER_SUBTITLE_FT \\$1
5196 .    if '\\$0'COVER_TITLE_FONT'             .ds $COVER_TITLE_FT \\$1
5197 .    if '\\$0'DOC_COVER_AUTHOR_FONT'        .ds $DOC_COVER_AUTHOR_FT \\$1
5198 .    if '\\$0'DOC_COVER_CHAPTER_TITLE_FONT' .ds $DOC_COVER_CHAPTER_TITLE_FT \\$1
5199 .    if '\\$0'DOC_COVER_COPYRIGHT_FONT'     .ds $DOC_COVER_COPYRIGHT_FT \\$1
5200 .    if '\\$0'DOC_COVER_DOCTYPE_FONT'       .ds $DOC_COVER_DOCTYPE_FT \\$1
5201 .    if '\\$0'DOC_COVER_SUBTITLE_FONT'      .ds $DOC_COVER_SUBTITLE_FT \\$1
5202 .    if '\\$0'DOC_COVER_TITLE_FONT'         .ds $DOC_COVER_TITLE_FT \\$1
5203 .    if '\\$0'DOCTYPE_FONT'                 .ds $DOCTYPE_FT \\$1
5204 .    if '\\$0'ENDNOTE_FONT'                 .ds $EN_FT \\$1
5205 .    if '\\$0'ENDNOTE_NUMBER_FONT'          .ds $EN_NUMBER_FT \\$1
5206 .    if '\\$0'ENDNOTE_LINENUMBER_FONT'      .ds $EN_LN_FT \\$1
5207 .    if '\\$0'ENDNOTE_STRING_FONT'          .ds $EN_STRING_FT \\$1
5208 .    if '\\$0'ENDNOTE_TITLE_FONT'           .ds $EN_TITLE_FT \\$1
5209 .    if '\\$0'EPIGRAPH_FONT'                .ds $EPI_FT \\$1
5210 .    if '\\$0'FOOTNOTE_FONT'                .ds $FN_FT \\$1
5211 .    if '\\$0'HDRFTR_CENTER_FONT'           .ds $HDRFTR_CENTER_FT \\$1
5212 .    if '\\$0'HDRFTR_LEFT_FONT'             .ds $HDRFTR_LEFT_FT \\$1
5213 .    if '\\$0'HDRFTR_RIGHT_FONT'            .ds $HDRFTR_RIGHT_FT \\$1
5214 .    if '\\$0'HEAD_FONT'                    .ds $HEAD_FT \\$1
5215 .    if '\\$0'LINENUMBER_FONT'              .ds $LN_FT \\$1
5216 .    if '\\$0'PAGENUM_FONT'                 .ds $PAGE_NUM_FT \\$1
5217 .    if '\\$0'PARAHEAD_FONT'                .ds $PH_FT \\$1
5218 .    if '\\$0'QUOTE_FONT'                   .ds $QUOTE_FT \\$1
5219 .    if '\\$0'SUBHEAD_FONT'                 .ds $SH_FT \\$1
5220 .    if '\\$0'SUBTITLE_FONT'                .ds $SUBTITLE_FT \\$1
5221 .    if '\\$0'TITLE_FONT'                   .ds $TITLE_FT \\$1
5222 .    if '\\$0'TOC_HEADER_FONT'              .ds $TOC_HEADER_FT \\$1
5223 .    if '\\$0'TOC_HEAD_FONT'                .ds $TOC_HEAD_FT \\$1
5224 .    if '\\$0'TOC_PARAHEAD_FONT'            .ds $TOC_PH_FT \\$1
5225 .    if '\\$0'TOC_PN_FONT'                  .ds $TOC_PN_FT \\$1
5226 .    if '\\$0'TOC_SUBHEAD_FONT'             .ds $TOC_SH_FT \\$1
5227 .    if '\\$0'TOC_TITLE_FONT'               .ds $TOC_TITLE_FT \\$1
5228 .END
5229 \#
5230 \#
5231 .MAC _SIZE END
5232 .    if '\\$0'AUTHOR_SIZE'                  .ds $AUTHOR_SIZE_CHANGE \\$1
5233 .    if '\\$0'BIBLIOGRAPHY_STRING_SIZE'     .ds $BIB_STRING_SIZE_CHANGE \\$1
5234 .    if '\\$0'BLOCKQUOTE_SIZE'              .ds $BQUOTE_SIZE_CHANGE \\$1
5235 .    if '\\$0'CITATION_SIZE'                .ds $BQUOTE_SIZE_CHANGE \\$1
5236 .    if '\\$0'CITE_SIZE'                    .ds $BQUOTE_SIZE_CHANGE \\$1
5237 .    if '\\$0'CHAPTER_TITLE_SIZE'           .ds $CHAPTER_TITLE_SIZE_CHANGE \\$1
5238 .    if '\\$0'COVER_AUTHOR_SIZE'            .ds $COVER_AUTHOR_SIZE_CHANGE \\$1
5239 .    if '\\$0'COVER_CHAPTER_TITLE_SIZE'     .ds $COVER_CHAPTER_TITLE_SIZE_CHANGE \\$1
5240 .    if '\\$0'COVER_COPYRIGHT_SIZE'         .ds $COVER_COPYRIGHT_SIZE_CHANGE \\$1
5241 .    if '\\$0'COVER_DOCTYPE_SIZE'           .ds $COVER_DOCTYPE_SIZE_CHANGE \\$1
5242 .    if '\\$0'COVER_SUBTITLE_SIZE'          .ds $COVER_SUBTITLE_SIZE_CHANGE \\$1
5243 .    if '\\$0'COVER_TITLE_SIZE'             .ds $COVER_TITLE_SIZE_CHANGE \\$1
5244 .    if '\\$0'DOC_COVER_AUTHOR_SIZE'        .ds $DOC_COVER_AUTHOR_SIZE_CHANGE \\$1
5245 .    if '\\$0'DOC_COVER_CHAPTER_TITLE_SIZE' .ds $DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE \\$1
5246 .    if '\\$0'DOC_COVER_COPYRIGHT_SIZE'     .ds $DOC_COVER_COPYRIGHT_SIZE_CHANGE \\$1
5247 .    if '\\$0'DOC_COVER_DOCTYPE_SIZE'       .ds $DOC_COVER_DOCTYPE_SIZE_CHANGE \\$1
5248 .    if '\\$0'DOC_COVER_SUBTITLE_SIZE'      .ds $DOC_COVER_SUBTITLE_SIZE_CHANGE \\$1
5249 .    if '\\$0'DOC_COVER_TITLE_SIZE'         .ds $DOC_COVER_TITLE_SIZE_CHANGE \\$1
5250 .    if '\\$0'DOCTYPE_SIZE'                 .ds $DOCTYPE_SIZE_CHANGE \\$1
5251 .    if '\\$0'ENDNOTE_NUMBER_SIZE'          .ds $EN_NUMBER_SIZE_CHANGE \\$1
5252 .    if '\\$0'ENDNOTE_LINENUMBER_SIZE'      .ds $EN_LN_SIZE_CHANGE \\$1
5253 .    if '\\$0'ENDNOTE_STRING_SIZE'          .ds $EN_STRING_SIZE_CHANGE \\$1
5254 .    if '\\$0'ENDNOTE_TITLE_SIZE'           .ds $EN_TITLE_SIZE_CHANGE \\$1
5255 .    if '\\$0'EPIGRAPH_SIZE'                .ds $EPI_SIZE_CHANGE \\$1
5256 .    if '\\$0'FOOTNOTE_SIZE'                .ds $FN_SIZE_CHANGE \\$1
5257 .    if '\\$0'HDRFTR_CENTER_SIZE'           .ds $HDRFTR_CENTER_SIZE_CHANGE \\$1
5258 .    if '\\$0'HDRFTR_LEFT_SIZE'             .ds $HDRFTR_LEFT_SIZE_CHANGE \\$1
5259 .    if '\\$0'HDRFTR_RIGHT_SIZE'            .ds $HDRFTR_RIGHT_SIZE_CHANGE \\$1
5260 .    if '\\$0'HDRFTR_SIZE'                  .ds $HDRFTR_SIZE_CHANGE \\$1
5261 .    if '\\$0'HEAD_SIZE'                    .ds $HEAD_SIZE_CHANGE \\$1
5262 .    if '\\$0'LINENUMBER_SIZE'              .ds $LN_SIZE_CHANGE \\$1
5263 .    if '\\$0'PAGENUM_SIZE'                 .ds $PAGE_NUM_SIZE_CHANGE \\$1
5264 .    if '\\$0'PARAHEAD_SIZE'                .ds $PH_SIZE_CHANGE \\$1
5265 .    if '\\$0'QUOTE_SIZE'                   .ds $QUOTE_SIZE_CHANGE \\$1
5266 .    if '\\$0'SUBHEAD_SIZE'                 .ds $SH_SIZE_CHANGE \\$1
5267 .    if '\\$0'SUBTITLE_SIZE'                .ds $SUBTITLE_SIZE_CHANGE \\$1
5268 .    if '\\$0'TITLE_SIZE'                   .ds $TITLE_SIZE_CHANGE \\$1
5269 .    if '\\$0'TOC_HEADER_SIZE'              .ds $TOC_HEADER_SIZE_CHANGE \\$1
5270 .    if '\\$0'TOC_HEAD_SIZE'                .ds $TOC_HEAD_SIZE_CHANGE \\$1
5271 .    if '\\$0'TOC_PARAHEAD_SIZE'            .ds $TOC_PH_SIZE_CHANGE \\$1
5272 .    if '\\$0'TOC_PN_SIZE'                  .ds $TOC_PN_SIZE_CHANGE \\$1
5273 .    if '\\$0'TOC_SUBHEAD_SIZE'             .ds $TOC_SH_SIZE_CHANGE \\$1
5274 .    if '\\$0'TOC_TITLE_SIZE'               .ds $TOC_TITLE_SIZE_CHANGE \\$1
5275 .END
5276 \#
5277 \#
5278 .MAC _COLOR END
5279 .    if \\n[#PRINT_STYLE]=1 \{ .return \}
5280 .    if '\\$0'ATTRIBUTE_COLOR' \{\
5281 .       nr #ATTRIBUTE_COLOR 1
5282 .       ds $ATTRIBUTE_COLOR \\$1
5283 .    \}
5284 .    if '\\$0'AUTHOR_COLOR' \{\
5285 .       nr #AUTHOR_COLOR 1
5286 .       ds $AUTHOR_COLOR \\$1
5287 .    \}
5288 .    if '\\$0'BLOCKQUOTE_COLOR' \{\
5289 .       nr #BQUOTE_COLOR 1
5290 .       ds $BQUOTE_COLOR \\$1
5291 .    \}
5292 .    if '\\$0'CITATION_COLOR' \{\
5293 .       nr #BQUOTE_COLOR 1
5294 .       ds $BQUOTE_COLOR \\$1
5295 .    \}
5296 .    if '\\$0'CITE_COLOR' \{\
5297 .       nr #BQUOTE_COLOR 1
5298 .       ds $BQUOTE_COLOR \\$1
5299 .    \}
5300 .    if '\\$0'CHAPTER_TITLE_COLOR' \{\
5301 .       nr #CHAPTER_TITLE_COLOR 1
5302 .       ds $CHAPTER_TITLE_COLOR \\$1
5303 .    \}
5304 .    if '\\$0'COVER_ATTRIBUTE_COLOR' \{\
5305 .       nr #COVER_ATTRIBUTE_COLOR 1
5306 .       ds $COVER_ATTRIBUTE_COLOR \\$1
5307 .    \}
5308 .    if '\\$0'COVER_AUTHOR_COLOR' \{\
5309 .       nr #COVER_AUTHOR_COLOR 1
5310 .       ds $COVER_AUTHOR_COLOR \\$1
5311 .    \}
5312 .    if '\\$0'COVER_CHAPTER_TITLE_COLOR' \{\
5313 .       nr #COVER_CHAPTER_TITLE_COLOR 1
5314 .       ds $COVER_CHAPTER_TITLE_COLOR \\$1
5315 .    \}
5316 .    if '\\$0'COVER_COLOR' \{\
5317 .       nr #COVER_COLOR 1
5318 .       ds $COVER_COLOR \\$1
5319 .    \}
5320 .    if '\\$0'COVER_COPYRIGHT_COLOR' \{\
5321 .       nr #COVER_COPYRIGHT_COLOR 1
5322 .       ds $COVER_COPYRIGHT_COLOR \\$1
5323 .    \}
5324 .    if '\\$0'COVER_MISC_COLOR' \{\
5325 .       nr #COVER_MISC_COLOR 1
5326 .       ds $COVER_MISC_COLOR \\$1
5327 .    \}
5328 .    if '\\$0'COVER_TITLE_COLOR' \{\
5329 .       nr #COVER_TITLE_COLOR 1
5330 .       ds $COVER_TITLE_COLOR \\$1
5331 .    \}
5332 .    if '\\$0'COVER_SUBTITLE_COLOR' \{\
5333 .       nr #COVER_SUBTITLE_COLOR 1
5334 .       ds $COVER_SUBTITLE_COLOR \\$1
5335 .    \}
5336 .    if '\\$0'COVER_DOCTYPE_COLOR' \{\
5337 .       nr #COVER_DOCTYPE_COLOR 1
5338 .       ds $COVER_DOCTYPE_COLOR \\$1
5339 .    \}
5340 .    if '\\$0'DOC_COVER_ATTRIBUTE_COLOR' \{\
5341 .       nr #DOC_COVER_ATTRIBUTE_COLOR 1
5342 .       ds $DOC_COVER_ATTRIBUTE_COLOR \\$1
5343 .    \}
5344 .    if '\\$0'DOC_COVER_AUTHOR_COLOR' \{\
5345 .       nr #DOC_COVER_AUTHOR_COLOR 1
5346 .       ds $DOC_COVER_AUTHOR_COLOR \\$1
5347 .    \}
5348 .    if '\\$0'DOC_COVER_CHAPTER_TITLE_COLOR' \{\
5349 .       nr #DOC_COVER_CHAPTER_TITLE_COLOR 1
5350 .       ds $DOC_COVER_CHAPTER_TITLE_COLOR \\$1
5351 .    \}
5352 .    if '\\$0'DOC_COVER_COLOR' \{\
5353 .       nr #DOC_COVER_COLOR 1
5354 .       ds $DOC_COVER_COLOR \\$1
5355 .    \}
5356 .    if '\\$0'DOC_COVER_COPYRIGHT_COLOR' \{\
5357 .       nr #DOC_COVER_COPYRIGHT_COLOR 1
5358 .       ds $DOC_COVER_COPYRIGHT_COLOR \\$1
5359 .    \}
5360 .    if '\\$0'DOC_COVER_MISC_COLOR' \{\
5361 .       nr #DOC_COVER_MISC_COLOR 1
5362 .       ds $DOC_COVER_MISC_COLOR \\$1
5363 .    \}
5364 .    if '\\$0'DOC_COVER_TITLE_COLOR' \{\
5365 .       nr #DOC_COVER_TITLE_COLOR 1
5366 .       ds $DOC_COVER_TITLE_COLOR \\$1
5367 .    \}
5368 .    if '\\$0'DOC_COVER_SUBTITLE_COLOR' \{\
5369 .       nr #DOC_COVER_SUBTITLE_COLOR 1
5370 .       ds $DOC_COVER_SUBTITLE_COLOR \\$1
5371 .    \}
5372 .    if '\\$0'DOC_COVER_DOCTYPE_COLOR' \{\
5373 .       nr #DOC_COVER_DOCTYPE_COLOR 1
5374 .       ds $DOC_COVER_DOCTYPE_COLOR \\$1
5375 .    \}
5376 .    if '\\$0'DOCHEADER_COLOR' \{\
5377 .       nr #DOCHEADER_COLOR 1
5378 .       ds $DOCHEADER_COLOR \\$1
5379 .    \}
5380 .    if '\\$0'DOCTYPE_COLOR' \{\
5381 .       nr #DOCTYPE_COLOR 1
5382 .       ds $DOCTYPE_COLOR \\$1
5383 .    \}
5384 .    if '\\$0'EPIGRAPH_COLOR' \{\
5385 .       nr #EPI_COLOR 1
5386 .       ds $EPI_COLOR \\$1
5387 .    \}
5388 .    if '\\$0'FINIS_COLOR' \{\
5389 .       nr #FINIS_COLOR 1
5390 .       ds $FINIS_COLOR \\$1
5391 .    \}
5392 .    if '\\$0'FOOTNOTE_COLOR' \{\
5393 .       nr #FOOTNOTE_COLOR 1
5394 .       ds $FOOTNOTE_COLOR \\$1
5395 .    \}
5396 .    if '\\$0'HDRFTR_CENTER_COLOR' \{\
5397 .       nr #HDRFTR_CENTER_COLOR 1
5398 .       ds $HDRFTR_CENTER_COLOR \\$1
5399 .    \}
5400 .    if '\\$0'HDRFTR_COLOR' \{\
5401 .       nr #HDRFTR_COLOR 1
5402 .       ds $HDRFTR_COLOR \\$1
5403 .    \}
5404 .    if '\\$0'HDRFTR_LEFT_COLOR' \{\
5405 .       nr #HDRFTR_LEFT_COLOR 1
5406 .       ds $HDRFTR_LEFT_COLOR \\$1
5407 .    \}
5408 .    if '\\$0'HDRFTR_RIGHT_COLOR' \{\
5409 .       nr #HDRFTR_RIGHT_COLOR 1
5410 .       ds $HDRFTR_RIGHT_COLOR \\$1
5411 .    \}
5412 .    if '\\$0'HDRFTR_RULE_COLOR' \{\
5413 .       nr #HDRFTR_RULE_COLOR 1
5414 .       ds $HDRFTR_RULE_COLOR \\$1
5415 .    \}
5416 .    if '\\$0'HEAD_COLOR' \{\
5417 .       nr #HEAD_COLOR 1
5418 .       ds $HEAD_COLOR \\$1
5419 .    \}
5420 .    if '\\$0'LINEBREAK_COLOR' \{\
5421 .       nr #LINEBREAK_COLOR 1
5422 .       ds $LINEBREAK_COLOR \\$1
5423 .    \}
5424 .    if '\\$0'LINENUMBER_COLOR' \{\
5425 .       nr #LINENUMBER_COLOR 1
5426 .       ds $LN_COLOR \\$1
5427 .    \}
5428 .    if '\\$0'PAGENUM_COLOR' \{\
5429 .       nr #PAGE_NUM_COLOR 1
5430 .       ds $PAGENUM_COLOR \\$1
5431 .    \}
5432 .    if '\\$0'PARAHEAD_COLOR' \{\
5433 .       nr #PH_COLOR 1
5434 .       ds $PH_COLOR \\$1
5435 .    \}
5436 .    if '\\$0'QUOTE_COLOR' \{\
5437 .       nr #QUOTE_COLOR 1
5438 .       ds $QUOTE_COLOR \\$1
5439 .    \}
5440 .    if '\\$0'SUBHEAD_COLOR' \{\
5441 .       nr #SH_COLOR 1
5442 .       ds $SH_COLOR \\$1
5443 .    \}
5444 .    if '\\$0'SUBTITLE_COLOR' \{\
5445 .       nr #SUBTITLE_COLOR 1
5446 .       ds $SUBTITLE_COLOR \\$1
5447 .    \}
5448 .    if '\\$0'TITLE_COLOR' \{\
5449 .       nr #TITLE_COLOR 1
5450 .       ds $TITLE_COLOR \\$1
5451 .    \}
5452 .END
5453 \#
5454 \#
5455 .MAC _QUAD END
5456 .    if '\\$0'BIBLIOGRAPHY_QUAD' \{\
5457 .       ds $BIB_QUAD \\$1
5458 .       if '\\*[$BIB_QUAD]'R' .ab Fatal error: \\$0 must be set to either L or J
5459 .       if '\\*[$BIB_QUAD]'C' .ab Fatal error: \\$0 must be set to either L or J
5460 .    \}
5461 .    if '\\$0'BIBLIOGRAPHY_STRING_QUAD' .ds $BIB_STRING_QUAD \\$1
5462 .    if '\\$0'BLOCKQUOTE_QUAD'          .ds $BQUOTE_QUAD \\$1
5463 .    if '\\$0'CITATION_QUAD'            .ds $BQUOTE_QUAD \\$1
5464 .    if '\\$0'CITE_QUAD'                .ds $BQUOTE_QUAD \\$1
5465 .    if '\\$0'COVER_COPYRIGHT_QUAD'     .ds $COVER_COPYRIGHT_QUAD \\$1
5466 .    if '\\$0'COVER_MISC_QUAD'          .ds $COVER_MISC_QUAD \\$1
5467 .    if '\\$0'DOC_COVER_COPYRIGHT_QUAD' .ds $DOC_COVER_COPYRIGHT_QUAD \\$1
5468 .    if '\\$0'DOC_COVER_MISC_QUAD'      .ds $DOC_COVER_MISC_QUAD \\$1
5469 .    if '\\$0'DOC_QUAD' \{\
5470 .        ds $DOC_QUAD \\$1
5471 .        QUAD \\*[$DOC_QUAD]
5472 .    \}
5473 .    if '\\$0'ENDNOTE_QUAD' \{\
5474 .       ds $EN_QUAD \\$1
5475 .       if '\\*[$EN_QUAD]'R' .ab Fatal error: \\$0 must be set to either L or J
5476 .       if '\\*[$EN_QUAD]'C' .ab Fatal error: \\$0 must be set to either L or J
5477 .    \}
5478 .    if '\\$0'ENDNOTE_STRING_QUAD'      .ds $EN_STRING_QUAD \\$1
5479 .    if '\\$0'ENDNOTE_TITLE_QUAD'       .ds $EN_TITLE_QUAD \\$1
5480 .    if '\\$0'EPIGRAPH_QUAD'            .ds $EPI_QUAD \\$1
5481 .    if '\\$0'FOOTNOTE_QUAD'            .ds $FN_QUAD \\$1
5482 .    if '\\$0'HEAD_QUAD'                .ds $HEAD_QUAD \\$1
5483 .    if '\\$0'SUBHEAD_QUAD'             .ds $SH_QUAD \\$1
5484 .    if '\\$0'TOC_HEADER_QUAD'          .ds $TOC_HEADER_QUAD \\$1
5485 .END
5486 \#
5487 \#
5488 \# DEFAULTS
5489 \# --------
5490 \# *Arguments:
5491 \#   <none>
5492 \# *Function:
5493 \#   Sets up defaults if no values are entered prior to START.
5494 \# *Notes:
5495 \#   The defaults for $CHAPTER_STRING, $DRAFT_STRING, and
5496 \#   $REVISION_STRING are in the COPYSTYLE macro.
5497 \#
5498 .MAC DEFAULTS END
5499 .    if !d$PAPER \{ .PAPER LETTER \}
5500 .    if !\\n[#DOC_TYPE]   \{ .DOCTYPE DEFAULT \}
5501 .    ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
5502 .    el \{\
5503 .       if !\\n[#COPY_STYLE]=1 \{ .PAGENUM_STYLE DIGIT \}
5504 .    \}
5505 .    if !\\n[#COPY_STYLE] \{ .COPYSTYLE FINAL \}
5506 .    if \\n[#DRAFT_WITH_PAGENUM] \{ .COPYSTYLE \\*[$COPY_STYLE] \}
5507 .    if \\n[#DOC_TYPE]=4 \{\
5508 .       if !\\n[#USER_SET_L_LENGTH] \{\
5509 .          R_MARGIN \\n[#R_MARGIN]u
5510 .          rr #USER_SET_L_LENGTH
5511 .       \}
5512 .       if \\n[#PRINT_STYLE]=1 \{ .PRINTSTYLE TYPEWRITE SINGLESPACE \}
5513 .    \}
5514 .    if \\n[#COPY_STYLE]=1 \{\
5515 .       COPYSTYLE DRAFT
5516 .       PAGENUMBER 1
5517 .    \}
5518 .    if !r#DOC_HEADER \{ .DOCHEADER  \}
5519 .    if !r#HEADERS_ON \{ .HEADERS    \}
5520 .    if !r#PAGINATE   \{ .PAGINATE   \}
5521 .    if \\n[#FOOTERS_ON] \{\
5522 .       HEADERS OFF
5523 .       if \\n[#PAGE_NUM_POS_SET]=0 \{ .PAGENUM_POS TOP CENTER \}
5524 .    \}
5525 .    if !r#HEADER_MARGIN \{ .HEADER_MARGIN 4P+6p \}
5526 .    if !r#HEADER_GAP    \{ .HEADER_GAP    3P    \}
5527 .    if \\n[#FOOTERS_ON] \{\
5528 .       if \\n[#PAGINATE]=0 \{\
5529 .          if !r#T_MARGIN \{ .T_MARGIN 6P \}
5530 .       \}
5531 .    \}
5532 .    if \\n[#HEADERS_ON]=0    \{\
5533 .       if \\n[#FOOTERS_ON]=0 \{\
5534 .          if !r#T_MARGIN \{ .T_MARGIN 6P \}
5535 .       \}
5536 .    \}
5537 .    if !r#T_MARGIN          \{ .T_MARGIN \\n[#HEADER_MARGIN]+\\n[#HEADER_GAP] \}
5538 .    if !r#DOCHEADER_ADVANCE \{ .nr #DOCHEADER_ADVANCE \\n[#T_MARGIN] \}
5539 .    if !r#FOOTER_MARGIN     \{ .FOOTER_MARGIN 3P \}
5540 .    if !r#FOOTER_GAP        \{ .FOOTER_GAP    3P \}
5541 .    if !r#B_MARGIN          \{ .B_MARGIN \\n[#FOOTER_MARGIN]u+\\n[#FOOTER_GAP]u \}
5542 .    if (\\n[#FOOTER_MARGIN]+\\n(.v)>\\n[#B_MARGIN] \{\
5543 .       tm1 "[mom]: Your chosen bottom margin for running text is too close to the footer margin.
5544 .       tm1 "       No footers or bottom-of-page page numbers will be printed.
5545 .       tm1 "       Please reset B_MARGIN or FOOTER_MARGIN to allow enough space.
5546 .       tm1 "       If no footers or bottom-of-page page numbers are required,
5547 .       tm1 "       type in .FOOTER_MARGIN 0 before .START
5548 .    \}
5549 .    if !r#HEADER_RULE_GAP   \{ .HEADER_RULE_GAP 4p \}
5550 .    if !r#FOOTER_RULE_GAP   \{ .FOOTER_RULE_GAP 4p \}
5551 .    if !r#HDRFTR_RULE       \{ .HDRFTR_RULE        \}
5552 .    if !r#PAGE_NUM_SET      \{ .PAGENUMBER 1       \}
5553 .\" Read in number registers and strings for type parameters
5554 .    nr #DOC_L_MARGIN \\n[#L_MARGIN]
5555 .    nr #DOC_L_LENGTH \\n[#L_LENGTH]
5556 .    nr #DOC_R_MARGIN \\n[#PAGE_WIDTH]-(\\n[#DOC_L_MARGIN]+\\n[#L_LENGTH])
5557 .    ds $DOC_FAM      \\*[$FAMILY]
5558 .    nr #DOC_PT_SIZE  \\n[#PT_SIZE]
5559 .    nr #DOC_LEAD     \\n[#LEAD]
5560 .\" #SAVED_DOC_LEAD is set in COLLATE
5561 .    if r#SAVED_DOC_LEAD \{\
5562 .       if !\\n[#DOC_LEAD]=\\n[#SAVED_DOC_LEAD] \{ .nr #RERUN_TRAPS 1 \}
5563 .    \}
5564 .    ie \\n[#ADJ_DOC_LEAD]=1 \{ . \}
5565 .    el \{\
5566 .       if !\\n[#DOC_LEAD_ADJUST_OFF] \{\
5567 .          DOC_LEAD_ADJUST
5568 .       \}
5569 .    \}
5570 .    ds $DOC_QUAD      \\*[$QUAD_VALUE]
5571 .    if '\\*[$FONT]''  \{ .FT R \}
5572 .    if '\\*[$PP_FT]'' \{\
5573 .       ds $PP_FT \\*[$FONT]
5574 .    \}
5575 .    if !'\\*[$PP_FT]'' \{\
5576 .       ds $PP_FT \\*[$FONT]
5577 .    \}
5578 .\" Counters
5579 .    nr #PP 0
5580 .    nr #FN_NUMBER 0 1
5581 .    nr #EN_NUMBER 0 1
5582 .    nr #FN_COUNT_FOR_COLS 0 1
5583 .    nr #DONE_ONCE 0 1
5584 .    RESET_HEAD_NUMBER
5585 .    RESET_SUBHEAD_NUMBER
5586 .    RESET_PARAHEAD_NUMBER
5587 .\" General style defaults for both PRINTSTYLEs
5588 .    nr #PP_STYLE 1
5589 .    PARA_INDENT \\n[#PP_INDENT]u
5590 .    if !d$HDRFTR_FAM           \{ .HDRFTR_FAMILY  \\*[$DOC_FAM] \}
5591 .    if !d$HDRFTR_SIZE_CHANGE   \{ .HDRFTR_SIZE    +0            \}
5592 .    if !d$PAGE_NUM_FAM         \{ .PAGENUM_FAMILY \\*[$DOC_FAM] \}
5593 .    if !d$PAGE_NUM_FT          \{ .PAGENUM_FONT   R             \}
5594 .    if !d$PAGE_NUM_SIZE_CHANGE \{ .PAGENUM_SIZE   +0            \}
5595 .    if !r#PAGE_NUM_POS_SET     \{ .PAGENUM_POS BOTTOM CENTER    \}
5596 .    ie \\n[#PAGE_NUM_HYPHENS_SET] \{\
5597 .       if \\n[#PAGE_NUM_HYPHENS]=0  \{ .PAGENUM_HYPHENS OFF \}
5598 .       if \\n[#PAGE_NUM_HYPHENS]=1  \{ .PAGENUM_HYPHENS     \}
5599 .    \}
5600 .    el \{ .PAGENUM_HYPHENS \}
5601 .    if !d$HEAD_QUAD         \{ .HEAD_QUAD CENTER  \}
5602 .    if !r#HEAD_CAPS         \{ .HEAD_CAPS         \}
5603 .    if !r#HEAD_UNDERLINE    \{ .HEAD_UNDERLINE    \}
5604 .    if !d$SH_QUAD           \{ .SUBHEAD_QUAD LEFT \}
5605 .    if !r#HDRFTR_RIGHT_CAPS \{ .HDRFTR_RIGHT_CAPS \}
5606 .    if \\n[#HDRFTR_RIGHT_CAPS]=0 \{\
5607 .       if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE +0 \}
5608 .    \}
5609 .    if !d$FN_FAM               \{ .FOOTNOTE_FAMILY \\*[$DOC_FAM]      \}
5610 .    if !d$FN_FT                \{ .FOOTNOTE_FONT R                    \}
5611 .    if !d$FN_QUAD              \{ .FOOTNOTE_QUAD \\*[$DOC_QUAD]       \}
5612 .    if !r#FN_RULE              \{ .FOOTNOTE_RULE                      \}
5613 .    if !r#FN_MARKERS           \{ .FOOTNOTE_MARKERS                   \}
5614 .    if \\n[#FN_MARKERS]=1 \{\
5615 .       if !\\n[#FN_MARKER_STYLE] \{ .FOOTNOTE_MARKER_STYLE STAR       \}
5616 .    \}
5617 .    if !\\n[#EN_MARKER_STYLE]  \{ .ENDNOTE_MARKER_STYLE NUMBER        \}
5618 .    if !d$EN_PN_STYLE          \{ .ENDNOTES_PAGENUM_STYLE digit       \}
5619 .    if !d$EN_FAM               \{ .ENDNOTE_FAMILY \\*[$DOC_FAM]       \}
5620 .    if !d$EN_FT                \{ .ENDNOTE_FONT R                     \}
5621 .    if !d$EN_QUAD              \{ .ENDNOTE_QUAD \\*[$DOC_QUAD]        \}
5622 .    if !d$EN_STRING            \{ .ENDNOTE_STRING "Endnotes"          \}
5623 .    if !d$EN_STRING_FAM        \{ .ENDNOTE_STRING_FAMILY \\*[$EN_FAM] \}
5624 .    if !d$EN_STRING_QUAD       \{ .ENDNOTE_STRING_QUAD CENTER         \}
5625 .    if !r#EN_STRING_UNDERLINE  \{ .nr #EN_STRING_UNDERLINE 2          \}
5626 .    if !r#EN_STRING_CAPS       \{ .ENDNOTE_STRING_CAPS                \}
5627 .    if !d$EN_TITLE \{\
5628 .       ie \\n[#DOC_TYPE]=2 \{\
5629 .          ie !'\\*[$CHAPTER_TITLE_1]'' \{\
5630 .             ie '\\*[$CHAPTER]'' \{ .ENDNOTE_TITLE "\\*[$CHAPTER_TITLE]" \}
5631 .             el \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]" \}
5632 .          \}
5633 .             el \{\
5634 .                ie '\\*[$CHAPTER]'' \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING]" \}
5635 .                el \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"    \}
5636 .             \}
5637 .          \}
5638 .       el \{ .ENDNOTE_TITLE "\\*[$TITLE]" \}
5639 .    \}
5640 .    if !d$EN_TITLE_FAM          \{ .ENDNOTE_TITLE_FAMILY \\*[$EN_FAM]      \}
5641 .    if !d$EN_TITLE_QUAD         \{ .ENDNOTE_TITLE_QUAD LEFT                \}
5642 .    if !r#EN_TITLE_UNDERLINE    \{ .nr #EN_TITLE_UNDERLINE 1               \}
5643 .    if !d$EN_NUMBER_FAM         \{ .ENDNOTE_NUMBER_FAMILY \\*[$EN_FAM]     \}
5644 .    if !d$EN_LN_FAM             \{ .ENDNOTE_LINENUMBER_FAMILY \\*[$EN_FAM] \}
5645 .    if !r#EN_NUMBERS_ALIGN_LEFT \{\
5646 .       if !r#EN_NUMBERS_ALIGN_RIGHT \{ .ENDNOTE_NUMBERS_ALIGN_RIGHT 2  \}
5647 .    \}
5648 .    if !d$EN_LN_GAP             \{ .ENDNOTE_LINENUMBER_GAP 1.5n        \}
5649 .    if !r#EN_ALLOWS_HEADERS     \{ .ENDNOTES_ALLOWS_HEADERS            \}
5650 .    if !d$BIB_PN_STYLE          \{ .BIBLIOGRAPHY_PAGENUM_STYLE digit         \}
5651 .    if !d$BIB_FAM               \{ .BIBLIOGRAPHY_FAMILY \\*[$DOC_FAM]        \}
5652 .    if !d$BIB_FT                \{ .BIBLIOGRAPHY_FONT R                      \}
5653 .    if !d$BIB_QUAD              \{ .BIBLIOGRAPHY_QUAD \\*[$DOC_QUAD]         \}
5654 .    if !d$BIB_STRING            \{ .BIBLIOGRAPHY_STRING "Bibliography"       \}
5655 .    if !d$BIB_STRING_FAM        \{ .BIBLIOGRAPHY_STRING_FAMILY \\*[$BIB_FAM] \}
5656 .    if !d$BIB_STRING_QUAD       \{ .BIBLIOGRAPHY_STRING_QUAD CENTER          \}
5657 .    if !r#BIB_STRING_UNDERLINE  \{ .nr #BIB_STRING_UNDERLINE 2               \}
5658 .    if !r#BIB_STRING_CAPS       \{ .BIBLIOGRAPHY_STRING_CAPS                 \}
5659 .    if !d$TOC_HEADER_STRING     \{ .TOC_HEADER_STRING "Contents"  \}
5660 .    if !d$TOC_HEADER_QUAD       \{ .TOC_HEADER_QUAD LEFT          \}
5661 .    if !d$TOC_PN_STYLE          \{ .TOC_PAGENUM_STYLE roman       \}
5662 .    if !r#TOC_PN_PADDING        \{ .TOC_PADDING   3               \}
5663 .    if !r#TOC_TITLE_INDENT      \{ .TOC_TITLE_INDENT    0         \}
5664 .\" String defaults for both PRINTSTYLEs
5665 .    ie \\n[#DOC_TYPE]=1 \{\
5666 .       ie '\\*[$DOC_TITLE]'' \{\
5667 .          if \\n[#USER_DEF_HDRFTR_LEFT]=0  .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
5668 .          if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
5669 .       \}
5670 .       el \{\
5671 .          if \\n[#COPY_STYLE]=1 \{ .DRAFT_WITH_PAGENUMBER \}
5672 .          if \\n[#USER_DEF_HDRFTR_LEFT]=0   .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
5673 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 .ds $HDRFTR_CENTER \\*[$TITLE]
5674 .          if \\n[#USER_DEF_HDRFTR_RIGHT]=0  .ds $HDRFTR_RIGHT \\*[$DOC_TITLE]
5675 .       \}
5676 .    \}
5677 .    el \{\
5678 .       if \\n[#USER_DEF_HDRFTR_LEFT]=0  .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
5679 .       if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
5680 .    \}
5681 .    if !d$ATTRIBUTE_STRING .ds $ATTRIBUTE_STRING by
5682 .    if !d$FINIS_STRING      \{ .FINIS_STRING "End"       \}
5683 .    if !r#FINIS_STRING_CAPS \{ .nr #FINIS_STRING_CAPS 1  \}
5684 .\" Covers
5685 .    if !r#DOC_COVERS_OFF           \{ .nr #DOC_COVERS 1           \}
5686 .    if !r#COVERS_OFF               \{ .nr #COVERS 1               \}
5687 .    if !d$COVER_COPYRIGHT_QUAD     \{ .COVER_COPYRIGHT_QUAD R     \}
5688 .    if !d$COVER_MISC_QUAD          \{ .COVER_MISC_QUAD L          \}
5689 .    if !d$DOC_COVER_COPYRIGHT_QUAD \{ .DOC_COVER_COPYRIGHT_QUAD R \}
5690 .    if !d$DOC_COVER_MISC_QUAD      \{ .DOC_COVER_MISC_QUAD L      \}
5691 .    if !r#DOCCOVER_UNDERLINE       \{ .DOC_COVER_UNDERLINE        \}
5692 .    if !r#COVER_UNDERLINE          \{ .COVER_UNDERLINE            \}
5693 .\" Defaults for printstyle TYPEWRITE
5694 .    if \\n[#PRINT_STYLE]=1 \{\
5695 .       if \\n[#UNDERLINE_QUOTES]=1 \{ .UNDERLINE_QUOTES         \}
5696 .       if \\n[#UNDERLINE_QUOTES]=0 \{ .UNDERLINE_QUOTES OFF     \}
5697 .\" +Quotes and blockquotes
5698 .       if !r#Q_OFFSET_VALUE \{\
5699 .          if '\\*[$Q_OFFSET_VALUE]'' \{ .QUOTE_INDENT 2 \}
5700 .       \}
5701 .\" +Epigraphs
5702 .       if !r#EPI_OFFSET_VALUE \{\
5703 .          if '\\*[$EPI_OFFSET_VALUE]'' \{ .EPIGRAPH_INDENT 2 \}
5704 .       \}
5705 .\" +Linebreaks
5706 .       if !d$LINEBREAK_CHAR        \{ .LINEBREAK_CHAR    * 3 2p \}
5707 .\" +Footnotes
5708 .       if !d$FN_SIZE_CHANGE        \{ .FOOTNOTE_SIZE     +0     \}
5709 .       if !r#FN_RULE_LENGTH        \{ .FOOTNOTE_RULE_LENGTH 2i  \}
5710 .\" +Paragraph heads
5711 .       if !r#PH_INDENT    \{ .PARAHEAD_INDENT \\n[#PP_INDENT]u/2u \}
5712 .\" +Endnotes
5713 .       if !r#EN_PP_INDENT \{ .ENDNOTE_PARA_INDENT \\n[#PP_INDENT] \}
5714 .\" +Footnotes
5715 .       if !r#FN_RULE_ADJ           \{ .FOOTNOTE_RULE_ADJ  6p    \}
5716 .\" +Slant stuff
5717 .       if !r#SLANT_MEANS_SLANT \{\
5718 .          ie \\n[#UNDERLINE_SLANT]=1 \{ .UNDERLINE_SLANT \}
5719 .          el \{ .UNDERLINE_SLANT OFF \}
5720 .       \}
5721 .    \}
5722 .\" Defaults for printstyle TYPESET
5723 .    if \\n[#PRINT_STYLE]=2 \{\
5724 .       if !d$DOCHEADER_LEAD_ADJ \{ .DOCHEADER_LEAD +0 \}
5725 .\" +Cover
5726 .       if !d$COVER_LEAD_ADJ \{ .COVER_LEAD +0 \}
5727 .       if !d$COVER_FAM \{ .COVER_FAMILY \\*[$DOC_FAM] \}
5728 .\" (title)
5729 .       if !d$COVER_TITLE_FAM \{\
5730 .          ie !d$COVER_FAM \{ .COVER_TITLE_FAMILY \\*[$DOC_FAM] \}
5731 .          el            \{ .COVER_TITLE_FAMILY \\*[$COVER_FAM] \}
5732 .       \}
5733 .       if !d$COVER_TITLE_FT          \{ .COVER_TITLE_FONT B    \}
5734 .       if !d$COVER_TITLE_SIZE_CHANGE \{ .COVER_TITLE_SIZE +3.5 \}
5735 .\" (chapter title)
5736 .       if !d$COVER_CHAPTER_TITLE_FAM \{\
5737 .          ie !d$COVER_FAM \{ .COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM] \}
5738 .          el            \{ .COVER_CHAPTER_TITLE_FAMILY \\*[$COVER_FAM] \}
5739 .       \}
5740 .       if !d$COVER_CHAPTER_TITLE_FT          \{ .COVER_CHAPTER_TITLE_FONT BI \}
5741 .       if !d$COVER_CHAPTER_TITLE_SIZE_CHANGE \{ .COVER_CHAPTER_TITLE_SIZE +4 \}
5742 .\" (subtitle)
5743 .       if !d$COVER_SUBTITLE_FAM \{\
5744 .          ie !d$COVER_FAM \{ .COVER_SUBTITLE_FAMILY \\*[$DOC_FAM] \}
5745 .          el            \{ .COVER_SUBTITLE_FAMILY \\*[$COVER_FAM] \}
5746 .       \}
5747 .       if !d$COVER_SUBTITLE_FT          \{ .COVER_SUBTITLE_FONT R  \}
5748 .       if !d$COVER_SUBTITLE_SIZE_CHANGE \{ .COVER_SUBTITLE_SIZE +0 \}
5749 .\" (attribution and author[s])
5750 .       if !d$COVER_AUTHOR_FAM \{\
5751 .          ie !d$COVER_FAM \{ .COVER_AUTHOR_FAMILY \\*[$DOC_FAM] \}
5752 .          el      \{ .COVER_AUTHOR_FAMILY \\*[$COVER_FAM] \}
5753 .       \}
5754 .       if !d$COVER_AUTHOR_FT          \{ .COVER_AUTHOR_FONT I  \}
5755 .       if !d$COVER_AUTHOR_SIZE_CHANGE \{ .COVER_AUTHOR_SIZE +0 \}
5756 .\" (doctype if "named")
5757 .       if !d$COVER_DOCTYPE_FAM \{\
5758 .          ie !d$COVER_FAM \{ .COVER_DOCTYPE_FAMILY \\*[$DOC_FAM] \}
5759 .          el            \{ .COVER_DOCTYPE_FAMILY \\*[$COVER_FAM] \}
5760 .       \}
5761 .       if !d$COVER_DOCTYPE_FT          \{ .COVER_DOCTYPE_FONT BI \}
5762 .       if !d$COVER_DOCTYPE_SIZE_CHANGE \{ .COVER_DOCTYPE_SIZE +3 \}
5763 .\" (copyright)
5764 .       if !d$COVER_COPYRIGHT_FAM \{\
5765 .          ie !d$COVER_FAM \{ .COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM] \}
5766 .          el            \{ .COVER_COPYRIGHT_FAMILY \\*[$COVER_FAM] \}
5767 .       \}
5768 .       if !d$COVER_COPYRIGHT_FT          \{ .COVER_COPYRIGHT_FONT R  \}
5769 .       if !d$COVER_COPYRIGHT_SIZE_CHANGE \{ .COVER_COPYRIGHT_SIZE -2 \}
5770 .\" +Doc cover
5771 .       if !d$DOC_COVER_LEAD_ADJ \{ .DOC_COVER_LEAD +0 \}
5772 .       if !d$DOC_COVER_FAM \{ .DOC_COVER_FAMILY \\*[$DOC_FAM] \}
5773 .\" (title)
5774 .       if !d$DOC_COVER_TITLE_FAM \{\
5775 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_TITLE_FAMILY \\*[$DOC_FAM] \}
5776 .          el            \{ .DOC_COVER_TITLE_FAMILY \\*[$DOC_COVER_FAM] \}
5777 .       \}
5778 .       if !d$DOC_COVER_TITLE_FT          \{ .DOC_COVER_TITLE_FONT B    \}
5779 .       if !d$DOC_COVER_TITLE_SIZE_CHANGE \{ .DOC_COVER_TITLE_SIZE +3.5 \}
5780 .\" (chapter title)
5781 .       if !d$DOC_COVER_CHAPTER_TITLE_FAM \{\
5782 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM] \}
5783 .          el            \{ .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_COVER_FAM] \}
5784 .       \}
5785 .       if !d$DOC_COVER_CHAPTER_TITLE_FT          \{ .DOC_COVER_CHAPTER_TITLE_FONT BI \}
5786 .       if !d$DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE \{ .DOC_COVER_CHAPTER_TITLE_SIZE +4 \}
5787 .\" (subtitle)
5788 .       if !d$DOC_COVER_SUBTITLE_FAM \{\
5789 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_FAM] \}
5790 .          el            \{ .DOC_COVER_SUBTITLE_FAMILY \\*[$DOC_COVER_FAM] \}
5791 .       \}
5792 .       if !d$DOC_COVER_SUBTITLE_FT          \{ .DOC_COVER_SUBTITLE_FONT R  \}
5793 .       if !d$DOC_COVER_SUBTITLE_SIZE_CHANGE \{ .DOC_COVER_SUBTITLE_SIZE +0 \}
5794 .\" (attribution and author[s])
5795 .       if !d$DOC_COVER_AUTHOR_FAM \{\
5796 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_FAM] \}
5797 .          el            \{ .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_COVER_FAM] \}
5798 .       \}
5799 .       if !d$DOC_COVER_AUTHOR_FT          \{ .DOC_COVER_AUTHOR_FONT I  \}
5800 .       if !d$DOC_COVER_AUTHOR_SIZE_CHANGE \{ .DOC_COVER_AUTHOR_SIZE +0 \}
5801 .\" (doctype if "named")
5802 .       if !d$DOC_COVER_DOCTYPE_FAM \{\
5803 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_FAM] \}
5804 .          el            \{ .DOC_COVER_DOCTYPE_FAMILY \\*[$DOC_COVER_FAM] \}
5805 .       \}
5806 .       if !d$DOC_COVER_DOCTYPE_FT          \{ .DOC_COVER_DOCTYPE_FONT BI \}
5807 .       if !d$DOC_COVER_DOCTYPE_SIZE_CHANGE \{ .DOC_COVER_DOCTYPE_SIZE +3 \}
5808 .\" (copyright)
5809 .       if !d$DOC_COVER_COPYRIGHT_FAM \{\
5810 .          ie !d$DOC_COVER_FAM \{ .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_FAM] \}
5811 .          el            \{ .DOC_COVER_COPYRIGHT_FAMILY \\*[$DOC_COVER_FAM] \}
5812 .       \}
5813 .       if !d$DOC_COVER_COPYRIGHT_FT          \{ .DOC_COVER_COPYRIGHT_FONT R  \}
5814 .       if !d$DOC_COVER_COPYRIGHT_SIZE_CHANGE \{ .DOC_COVER_COPYRIGHT_SIZE -2 \}
5815 .\" +Docheader
5816 .       if !d$DOCHEADER_FAM \{ .DOCHEADER_FAMILY \\*[$DOC_FAM] \}
5817 .       if !d$TITLE_FAM \{\
5818 .          ie !d$DOCHEADER_FAM \{ .TITLE_FAMILY \\*[$DOC_FAM]       \}
5819 .          el                  \{ .TITLE_FAMILY \\*[$DOCHEADER_FAM] \}
5820 .       \}
5821 .       if !d$TITLE_FT \{ .TITLE_FONT B \}
5822 .       if !d$TITLE_SIZE_CHANGE \{\
5823 .          ie \\n[#DOC_TYPE]=2 \{ .TITLE_SIZE +4 \}
5824 .          el \{ .TITLE_SIZE +3.5 \}
5825 .       \}
5826 .       if !d$CHAPTER_TITLE_FAM \{\
5827 .          ie !d$DOCHEADER_FAM \{ .CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]       \}
5828 .          el                  \{ .CHAPTER_TITLE_FAMILY \\*[$DOCHEADER_FAM] \}
5829 .       \}
5830 .       if !d$CHAPTER_TITLE_FT          \{ .CHAPTER_TITLE_FONT   BI \}
5831 .       if !d$CHAPTER_TITLE_SIZE_CHANGE \{ .CHAPTER_TITLE_SIZE  +4  \}
5832 .       if !d$SUBTITLE_FAM \{\
5833 .          ie !d$DOCHEADER_FAM \{ .SUBTITLE_FAMILY \\*[$DOC_FAM]       \}
5834 .          el                  \{ .SUBTITLE_FAMILY \\*[$DOCHEADER_FAM] \}
5835 .       \}
5836 .       if !d$SUBTITLE_FT          \{ .SUBTITLE_FONT      R  \}
5837 .       if !d$SUBTITLE_SIZE_CHANGE \{ .SUBTITLE_SIZE     +0  \}
5838 .       if !d$AUTHOR_FAM \{\
5839 .          ie !d$DOCHEADER_FAM \{ .AUTHOR_FAMILY \\*[$DOC_FAM]       \}
5840 .          el                  \{ .AUTHOR_FAMILY \\*[$DOCHEADER_FAM] \}
5841 .       \}
5842 .       if !d$AUTHOR_FT          \{ .AUTHOR_FONT  I \}
5843 .       if !d$AUTHOR_SIZE_CHANGE \{ .AUTHOR_SIZE +0 \}
5844 .       if !d$DOCTYPE_FAM \{\
5845 .          ie !d$DOCHEADER_FAM \{ .DOCTYPE_FAMILY \\*[$DOC_FAM]       \}
5846 .          el                  \{ .DOCTYPE_FAMILY \\*[$DOCHEADER_FAM] \}
5847 .       \}
5848 .       if !d$DOCTYPE_FT           \{ .DOCTYPE_FONT      BI \}
5849 .       if !d$DOCTYPE_SIZE_CHANGE  \{ .DOCTYPE_SIZE      +3 \}
5850 .       if !r#DOCTYPE_UNDERLINE    \{ .DOCTYPE_UNDERLINE    \}
5851 .\" +Headers and footers
5852 .       if !d$HDRFTR_LEFT_FAM      \{ .HDRFTR_LEFT_FAMILY \\*[$DOC_FAM] \}
5853 .       if !d$HDRFTR_LEFT_FT       \{ .HDRFTR_LEFT_FONT R               \}
5854 .       if \\n[#HDRFTR_LEFT_CAPS]  \{\
5855 .          if !d$HDRFTR_LEFT_SIZE_CHANGE \{ .HDRFTR_LEFT_SIZE  -2 \}
5856 .       \}
5857 .       if !d$HDRFTR_LEFT_SIZE_CHANGE \{ .HDRFTR_LEFT_SIZE     -.5           \}
5858 .       if !d$HDRFTR_CENTER_FAM       \{ .HDRFTR_CENTER_FAMILY \\*[$DOC_FAM] \}
5859 .       if !d$HDRFTR_CENTER_FT        \{ .HDRFTR_CENTER_FONT   I             \}
5860 .       if \\n[#HDRFTR_CENTER_CAPS] \{\
5861 .          if !d$HDRFTR_CENTER_SIZE_CHANGE \{ .HDRFTR_CENTER_SIZE -2 \}
5862 .       \}
5863 .       if !d$HDRFTR_CENTER_SIZE_CHANGE \{ .HDRFTR_CENTER_SIZE -.5            \}
5864 .       if !d$HDRFTR_RIGHT_FAM          \{ .HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM] \}
5865 .       if !d$HDRFTR_RIGHT_FT           \{ .HDRFTR_RIGHT_FONT   R             \}
5866 .       if \\n[#HDRFTR_RIGHT_CAPS] \{\
5867 .          if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE -2 \}
5868 .       \}
5869 .       if !d$HDRFTR_RIGHT_SIZE_CHANGE  \{ .HDRFTR_RIGHT_SIZE  -.5              \}
5870 .\" +Heads
5871 .       if !d$HEAD_FAM                  \{ .HEAD_FAMILY        \\*[$DOC_FAM]    \}
5872 .       if !d$HEAD_FT                   \{ .HEAD_FONT          B                \}
5873 .       if !d$HEAD_SIZE_CHANGE          \{ .HEAD_SIZE          +1               \}
5874 .       if !r#HEAD_SPACE                \{ .HEAD_SPACE                          \}
5875 .\" +Subheads
5876 .       if !d$SH_FAM                    \{ .SUBHEAD_FAMILY     \\*[$DOC_FAM]    \}
5877 .       if !d$SH_FT                     \{ .SUBHEAD_FONT       B                \}
5878 .       if !d$SH_SIZE_CHANGE            \{ .SUBHEAD_SIZE       +.5              \}
5879 .\" +Paragraph heads
5880 .       if !d$PH_FAM                    \{ .PARAHEAD_FAMILY    \\*[$DOC_FAM]    \}
5881 .       if !d$PH_FT                     \{ .PARAHEAD_FONT      BI               \}
5882 .       if !d$PH_SIZE_CHANGE            \{ .PARAHEAD_SIZE      -.25             \}
5883 .       if !r#PH_INDENT                 \{ .PARAHEAD_INDENT \\n[#PP_INDENT]u/2u \}
5884 .\" +Quotes
5885 .       if !d$QUOTE_FAM                 \{ .QUOTE_FAMILY       \\*[$DOC_FAM]    \}
5886 .       if !d$QUOTE_FT                  \{ .QUOTE_FONT         I                \}
5887 .       if !d$QUOTE_SIZE_CHANGE         \{ .QUOTE_SIZE         +0               \}
5888 .       if !r#Q_OFFSET_VALUE \{\
5889 .          if '\\*[$Q_OFFSET_VALUE]''   \{ .QUOTE_INDENT 3 \}
5890 .       \}
5891 .\" +Blockquotes
5892 .\"  Note: the leading for quotes and blockquotes is set after .DEFAULTS in START
5893 .       if !d$BQUOTE_FAM                \{ .BLOCKQUOTE_FAMILY  \\*[$DOC_FAM]    \}
5894 .       if !d$BQUOTE_FT                 \{ .BLOCKQUOTE_FONT    R                \}
5895 .       if !d$BQUOTE_SIZE_CHANGE        \{ .BLOCKQUOTE_SIZE    -1               \}
5896 .       if !d$BQUOTE_QUAD               \{ .BLOCKQUOTE_QUAD    LEFT             \}
5897 .\" +Epigraphs
5898 .       if !d$EPI_FAM                   \{ .EPIGRAPH_FAMILY    \\*[$DOC_FAM]    \}
5899 .       if !d$EPI_FT                    \{ .EPIGRAPH_FONT      R                \}
5900 .       if !d$EPI_SIZE_CHANGE           \{ .EPIGRAPH_SIZE      -1.5             \}
5901 .       if !r#EPI_AUTOLEAD              \{ .EPIGRAPH_AUTOLEAD  2                \}
5902 .       if !d$EPI_QUAD                  \{ .EPIGRAPH_QUAD      \\*[$DOC_QUAD]   \}
5903 .       if !r#EPI_OFFSET_VALUE \{\
5904 .          if '\\*[$EPI_OFFSET_VALUE]'' \{ .EPIGRAPH_INDENT 3 \}
5905 .       \}
5906 .\" +Linebreaks
5907 .       if !d$LINEBREAK_CHAR            \{ .LINEBREAK_CHAR * 3 3p               \}
5908 .       if !d$LINEBREAK_COLOR           \{ .LINEBREAK_COLOR black               \}
5909 .\" +Footnotes
5910 .       if !r#FN_RULE_LENGTH            \{ .FOOTNOTE_RULE_LENGTH 4P             \}
5911 .       if !r#FN_RULE_ADJ               \{ .FOOTNOTE_RULE_ADJ  3p               \}
5912 .       if !d$FN_SIZE_CHANGE            \{ .FOOTNOTE_SIZE      -2               \}
5913 .       if !r#FN_AUTOLEAD               \{ .FOOTNOTE_AUTOLEAD  2                \}
5914 .\" +Endnotes
5915 .       if !r#EN_PS                     \{ .ENDNOTE_PT_SIZE (\\n[#DOC_PT_SIZE]u)\}
5916 .       if !d$EN_STRING_FT              \{ .ENDNOTE_STRING_FONT B               \}
5917 .       if !d$EN_STRING_SIZE_CHANGE     \{ .ENDNOTE_STRING_SIZE +1              \}
5918 .       if !d$EN_TITLE_FT               \{ .ENDNOTE_TITLE_FONT  B               \}
5919 .       if !d$EN_TITLE_SIZE_CHANGE      \{ .ENDNOTE_TITLE_SIZE  +0              \}
5920 .       if !d$EN_NUMBER_FT              \{ .ENDNOTE_NUMBER_FONT B               \}
5921 .       if !d$EN_LN_FT                  \{ .ENDNOTE_LINENUMBER_FONT R           \}
5922 .       if !d$EN_NUMBER_SIZE_CHANGE     \{ .ENDNOTE_NUMBER_SIZE +0              \}
5923 .       if !r#EN_PP_INDENT              \{ .ENDNOTE_PARA_INDENT 1.5m            \}
5924 .\" +Bibliography
5925 .       if !r#BIB_LIST                  \{ .BIBLIOGRAPHY_TYPE LIST .                  \}
5926 .       if !r#BIB_PS                    \{ .BIBLIOGRAPHY_PT_SIZE (\\n[#DOC_PT_SIZE]u) \}
5927 .       if !d$BIB_STRING_FT             \{ .BIBLIOGRAPHY_STRING_FONT B                \}
5928 .       if !d$BIB_STRING_SIZE_CHANGE    \{ .BIBLIOGRAPHY_STRING_SIZE +1               \}
5929 .\" +Table of contents
5930 .       if !d$TOC_FAM                   \{ .TOC_FAMILY  \\*[$DOC_FAM]           \}
5931 .       if !r#TOC_PS                    \{ .TOC_PT_SIZE (\\n[#DOC_PT_SIZE]u)    \}
5932 .       if !r#TOC_LEAD                  \{ .TOC_LEAD    \\n[#DOC_LEAD]u ADJUST  \}
5933 .       if !d$TOC_HEADER_FAM            \{ .TOC_HEADER_FAMILY \\*[$TOC_FAM]     \}
5934 .       if !d$TOC_HEADER_SIZE_CHANGE    \{ .TOC_HEADER_SIZE +4                  \}
5935 .       if !d$TOC_HEADER_FT             \{ .TOC_HEADER_FONT  B                  \}
5936 .       if !d$TOC_TITLE_FAM             \{ .TOC_TITLE_FAMILY \\*[$TOC_FAM]      \}
5937 .       if !d$TOC_PN_FAM                \{ .TOC_PN_FAMILY    \\*[$TOC_FAM]      \}
5938 .       if !d$TOC_HEAD_FAM              \{ .TOC_HEAD_FAMILY  \\*[$TOC_FAM]      \}
5939 .       if !d$TOC_SH_FAM                \{ .TOC_SUBHEAD_FAMILY  \\*[$TOC_FAM]   \}
5940 .       if !d$TOC_PH_FAM                \{ .TOC_PARAHEAD_FAMILY \\*[$TOC_FAM]   \}
5941 .       if !d$TOC_TITLE_FT              \{ .TOC_TITLE_FONT    BI                \}
5942 .       if !d$TOC_PN_FT                 \{ .TOC_PN_FONT       R                 \}
5943 .       if !d$TOC_HEAD_FT               \{ .TOC_HEAD_FONT     B                 \}
5944 .       if !d$TOC_SH_FT                 \{ .TOC_SUBHEAD_FONT  R                 \}
5945 .       if !d$TOC_PH_FT                 \{ .TOC_PARAHEAD_FONT I                 \}
5946 .       if !d$TOC_TITLE_SIZE_CHANGE     \{ .TOC_TITLE_SIZE    +.5               \}
5947 .       if !d$TOC_PN_SIZE_CHANGE        \{ .TOC_PN_SIZE       +0                \}
5948 .       if !d$TOC_HEAD_SIZE_CHANGE      \{ .TOC_HEAD_SIZE     +.5               \}
5949 .       if !d$TOC_SH_SIZE_CHANGE        \{ .TOC_SUBHEAD_SIZE  +0                \}
5950 .       if !d$TOC_PH_SIZE_CHANGE        \{ .TOC_PARAHEAD_SIZE +0                \}
5951 .       ps \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
5952 .       if !r#TOC_HEAD_INDENT           \{ .TOC_HEAD_INDENT \w'\0\0.'           \}
5953 .       ps
5954 .       ps \\n[#TOC_PS]u\\*[$TOC_HEAD_SIZE_CHANGE]
5955 .       if !r#TOC_SH_INDENT             \{ .TOC_SUBHEAD_INDENT \\n[#TOC_HEAD_INDENT]+\w'\0\0.'       \}
5956 .       ps
5957 .       ps \\n[#TOC_PS]u\\*[$TOC_SH_SIZE_CHANGE]
5958 .       if !r#TOC_PH_INDENT             \{ .TOC_PARAHEAD_INDENT \\n[#TOC_SH_INDENT]+\w'\0\0.'       \}
5959 .       ps
5960 .    \}
5961 .\" +Refer support
5962 .    if !r#EN_REF \{ .nr #FN_REF 1 \}
5963 .    if '\\*[$REF_FN_INDENT]'' \{\
5964 .       if \\n[#PRINT_STYLE]=1 \{ .INDENT_REFS FOOTNOTE 2m   \}
5965 .       if \\n[#PRINT_STYLE]=2 \{ .INDENT_REFS FOOTNOTE 1.5m \}
5966 .    \}
5967 .    if '\\*[$REF_EN_INDENT]'' \{\
5968 .       if \\n[#PRINT_STYLE]=1 \{ .INDENT_REFS ENDNOTE 2m   \}
5969 .       if \\n[#PRINT_STYLE]=2 \{ .INDENT_REFS ENDNOTE 1.5m \}
5970 .    \}
5971 .    if '\\*[$REF_BIB_INDENT]'' \{\
5972 .       if \\n[#PRINT_STYLE]=1 \{ .INDENT_REFS BIBLIO 2m    \}
5973 .       if \\n[#PRINT_STYLE]=2 \{ .INDENT_REFS BIBLIO 1.5m  :\}
5974 .    \}
5975 .\" Adjust doc leading for PRINTSTYLE TYPESET
5976 .    if \\n[#PRINT_STYLE]=2 \{\
5977 .       ie \\n[#ADJ_DOC_LEAD]=1 \{ .DOC_LEAD_ADJUST \}
5978 .       el \{ . \}
5979 .    \}
5980 .\" This diversion is to get a value for #FN_AUTOLEAD
5981 .    di NULL
5982 .       ev NULL
5983 .       if \\n[#PRINT_STYLE]=1 \{\
5984 .          ps 12
5985 .          ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#ORIGINAL_DOC_LEAD]u \}
5986 .          el \{ .vs \\n[#ORIGINAL_DOC_LEAD]u/2u \}
5987 .       \}
5988 .       if \\n[#PRINT_STYLE]=2 \{\
5989 .          PT_SIZE  \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
5990 .          AUTOLEAD \\n[#FN_AUTOLEAD]
5991 .       \}
5992 .       nr #FN_LEAD \\n[#LEAD]
5993 .       if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#DOC_LEAD]u \}
5994 .       ev
5995 .    di
5996 .    ie !\\n[#COLLATE] \{\
5997 .\" DOC_LEAD adjusted (or not) here
5998 .       TRAPS
5999 .\" Endnote, bibliography and toc leading
6000 .       nr #OK_PROCESS_LEAD 1
6001 .       nr #RESTORE_DOC_LEAD \\n(.v
6002 .       nr #RESTORE_B_MARGIN \\n[#B_MARGIN]
6003 .       if \\n[#PRINT_STYLE]=1 \{\
6004 .          ie \\n[#SINGLE_SPACE] \{\
6005 .             ENDNOTE_LEAD 12 ADJUST
6006 .             BIBLIOGRAPHY_LEAD 12 ADJUST
6007 .          \}
6008 .          el \{\
6009 .             ie \\n[#EN_SINGLESPACE] \{ .ENDNOTE_LEAD 12 ADJUST \}
6010 .             el \{ .ENDNOTE_LEAD 24 ADJUST \}
6011 .             ie \\n[#BIB_SINGLESPACE] \{ .BIBLIOGRAPHY_LEAD 12 ADJUST \}
6012 .             el \{ .BIBLIOGRAPHY_LEAD 24 ADJUST \}
6013 .          \}
6014 .       \}
6015 .       if \\n[#PRINT_STYLE]=2 \{\
6016 .          ie !d$EN_LEAD \{ .ENDNOTE_LEAD 14 ADJUST \}
6017 .          el \{ .ENDNOTE_LEAD \\*[$EN_LEAD] \\*[$ADJUST_EN_LEAD] \}
6018 .          ie !d$BIB_LEAD \{ .BIBLIOGRAPHY_LEAD 14 ADJUST \}
6019 .          el \{ .BIBLIOGRAPHY_LEAD \\*[$BIB_LEAD] \\*[$ADJUST_BIB_LEAD] \}
6020 .          ie !d$TOC_LEAD \{ .TOC_LEAD \\n[#RESTORE_DOC_LEAD]u \}
6021 .          el \{ .TOC_LEAD \\*[$TOC_LEAD] \\*[$ADJUST_TOC_LEAD] \}
6022 .          rm $ADJUST_EN_LEAD
6023 .          rm $ADJUST_BIB_LEAD
6024 .          rm $ADJUST_TOC_LEAD
6025 .       \}
6026 .       ie !d$BIB_SPACE \{ .BIBLIOGRAPHY_SPACING 1v \}
6027 .       el \{\
6028 .          if \\n[#DEFER_BIB_SPACING]=1 \{\
6029 .             BIBLIOGRAPHY_SPACING \\*[$BIB_SPACE]
6030 .             rr #DEFER_BIB_SPACING
6031 .          \}
6032 .       \}
6033 .       DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
6034 .       nr #B_MARGIN \\n[#RESTORE_B_MARGIN]
6035 .    \}
6036 .    el \{\
6037 .       if \\n[#COLLATE] \{\
6038 .          if !\\n[#PRINT_STYLE]=1 \{\
6039 .             if \\n[#RERUN_TRAPS] \{ .TRAPS \}
6040 .          \}
6041 .       \}
6042 .    \}
6043 .    if \\n[#PRINT_STYLE]=1 \{ .nr #IGNORE 1 \}
6044 .END
6045 \#
6046 \# ====================================================================
6047 \#
6048 \# +++START THE DOCUMENT+++
6049 \#
6050 \# THE START MACRO
6051 \# ---------------
6052 \# *Arguments:
6053 \#   <none>
6054 \# *Function:
6055 \#   Reads in default document style parameters and any parameter
6056 \#   the user has changed before issuing START.
6057 \#   Using the information gathered in the opening macros,
6058 \#   prints appropriate title (or chapter #), subtitle, author
6059 \#   and document type (if appropriate).
6060 \# *Notes:
6061 \#   The .PRINT \& (zero-width character) is required to get the
6062 \#   subsequent .sp request to work as advertised.
6063 \#
6064 \#   The overall document line length, family, and point-size
6065 \#   are stored in #DOC_L_LENGTH, $DOC_FAM, and #DOC_PT_SIZE for
6066 \#   use in the HEADER and FOOTER macros.
6067 \#
6068 \#  First, define some strings for point sizes
6069 \#
6070 \# Doc cover
6071 .ds $DOC_COVER_AUTHOR_PT_SIZE        \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_AUTHOR_SIZE_CHANGE]
6072 .ds $DOC_COVER_CHAPTER_TITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE]
6073 .ds $DOC_COVER_COPYRIGHT_PT_SIZE     \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_COPYRIGHT_SIZE_CHANGE]
6074 .ds $DOC_COVER_DOCTYPE_PT_SIZE       \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_DOCTYPE_SIZE_CHANGE]
6075 .ds $DOC_COVER_SUBTITLE_PT_SIZE      \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_SUBTITLE_SIZE_CHANGE]
6076 .ds $DOC_COVER_TITLE_PT_SIZE         \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_TITLE_SIZE_CHANGE]
6077 \# Cover
6078 .ds $COVER_AUTHOR_PT_SIZE        \\n[#DOC_PT_SIZE]u\\*[$COVER_AUTHOR_SIZE_CHANGE]
6079 .ds $COVER_CHAPTER_TITLE_PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$COVER_CHAPTER_TITLE_SIZE_CHANGE]
6080 .ds $COVER_COPYRIGHT_PT_SIZE     \\n[#DOC_PT_SIZE]u\\*[$COVER_COPYRIGHT_SIZE_CHANGE]
6081 .ds $COVER_DOCTYPE_PT_SIZE       \\n[#DOC_PT_SIZE]u\\*[$COVER_DOCTYPE_SIZE_CHANGE]
6082 .ds $COVER_SUBTITLE_PT_SIZE      \\n[#DOC_PT_SIZE]u\\*[$COVER_SUBTITLE_SIZE_CHANGE]
6083 .ds $COVER_TITLE_PT_SIZE         \\n[#DOC_PT_SIZE]u\\*[$COVER_TITLE_SIZE_CHANGE]
6084 \# Docheader
6085 .ds $AUTHOR_PT_SIZE         \\n[#DOC_PT_SIZE]u\\*[$AUTHOR_SIZE_CHANGE]
6086 .ds $CHAPTER_TITLE_PT_SIZE  \\n[#DOC_PT_SIZE]u\\*[$CHAPTER_TITLE_SIZE_CHANGE]
6087 .ds $COPYRIGHT_PT_SIZE      \\n[#DOC_PT_SIZE]u\\*[$COPYRIGHT_SIZE_CHANGE]
6088 .ds $DOCTYPE_PT_SIZE        \\n[#DOC_PT_SIZE]u\\*[$DOCTYPE_SIZE_CHANGE]
6089 .ds $SUBTITLE_PT_SIZE       \\n[#DOC_PT_SIZE]u\\*[$SUBTITLE_SIZE_CHANGE]
6090 .ds $TITLE_PT_SIZE          \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE]
6091 \#
6092 \# Next, some utility macros for various routines to prevent repetition
6093 \#
6094 .    if '\\$1'DOC_COVER' \{\
6095 .       shift
6096 .       nr #AUTHOR_DOCCOVER_NUM 0 1
6097 .       while \\n[#NUM_ARGS]>\\n[#AUTHOR_DOCCOVER_NUM] \{\
6098 .       ds $AUTHOR_DOCCOVER_\\n+[#AUTHOR_DOCCOVER_NUM] \\$\\n[#AUTHOR_DOCCOVER_NUM]
6099 .\}
6100 .       return
6101 .    \}
6102 .    if '\\$1'COVER' \{\
6103 .       shift
6104 .       nr #AUTHOR_COVER_NUM 0 1
6105 .       while \\n[#NUM_ARGS]>\\n[#AUTHOR_COVER_NUM] \{\
6106 .       ds $AUTHOR_COVER_\\n+[#AUTHOR_COVER_NUM] \\$\\n[#AUTHOR_COVER_NUM]
6107 .\}
6108 .       return
6109 .    \}
6110 \#
6111 .MAC PRINT_AUTHORS END
6112 .    ie r#DOING_COVER \{\
6113 .       if \\n[#DOC_COVER]=1 \{\
6114 .          ie !'\\*[$AUTHOR_DOCCOVER_1]'' \{\
6115 .             nr #AUTHORS \\n[#AUTHOR_DOCCOVER_NUM]
6116 .             nr #NEXT_AUTHOR 0 1
6117 .             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
6118 .                ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \{\
6119 .                   PRINT \m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_DOCCOVER_\\n+[#NEXT_AUTHOR]]\m[]
6120 .                \}
6121 .                el \{ .PRINT \\*[$AUTHOR_DOCCOVER_\\n+[#NEXT_AUTHOR]] \}
6122 .\}
6123 .          \}
6124 .          el \{\
6125 .             nr #AUTHORS \\n[#AUTHOR_NUM]
6126 .             nr #NEXT_AUTHOR 0 1
6127 .             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
6128 .                ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \{\
6129 .                   PRINT \m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
6130 .                \}
6131 .                el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \}
6132 .\}
6133 .          \}
6134 .          return
6135 .       \}
6136 .       if \\n[#COVER]=1 \{\
6137 .          ie !'\\*[$AUTHOR_COVER_1]'' \{\
6138 .             nr #AUTHORS \\n[#AUTHOR_COVER_NUM]
6139 .             nr #NEXT_AUTHOR 0 1
6140 .             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
6141 .                ie \\n[#COVER_AUTHOR_COLOR]=1 \{\
6142 .                   PRINT \m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_COVER_\\n+[#NEXT_AUTHOR]]\m[]
6143 .                \}
6144 .                el \{ .PRINT \\*[$AUTHOR_COVER_\\n+[#NEXT_AUTHOR]] \}
6145 .\}
6146 .          \}
6147 .          el \{\
6148 .             nr #AUTHORS \\n[#AUTHOR_NUM]
6149 .             nr #NEXT_AUTHOR 0 1
6150 .             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
6151 .                ie \\n[#COVER_AUTHOR_COLOR]=1 \{\
6152 .                   PRINT \m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
6153 .                \}
6154 .                el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \}
6155 .\}
6156 .          \}
6157 .          return
6158 .       \}
6159 .    \}
6160 .    el \{\
6161 .       nr #AUTHORS \\n[#AUTHOR_NUM]
6162 .       nr #NEXT_AUTHOR 0 1
6163 .       while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
6164 .          ie \\n[#AUTHOR_COLOR]=1 \{\
6165 .             PRINT \m[\\*[$AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
6166 .          \}
6167 .          el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \}
6168 .\}
6169 .    \}
6170 .END
6171 \#
6172 .MAC DEFAULT_DOCHEADER END
6173 .    if !'\\*[$TITLE_1]'' \{\
6174 .       CENTER
6175 .       FAMILY  \\*[$TITLE_FAM]
6176 .       FT      \\*[$TITLE_FT]
6177 .       PT_SIZE \\*[$TITLE_PT_SIZE]
6178 .       LS      \\n[#DOCHEADER_LEAD]u
6179 .       nr #ARG_NUM 0 1
6180 .       while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6181 .          ie \\n[#TITLE_COLOR]=1 \{\
6182 .             PRINT "\m[\\*[$TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
6183 .          \}
6184 .          el \{\
6185 .             PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
6186 .          \}
6187 .\}
6188 .    \}
6189 .    if !'\\*[$SUBTITLE_1]'' \{\
6190 .       FAMILY  \\*[$SUBTITLE_FAM]
6191 .       FT      \\*[$SUBTITLE_FT]
6192 .       PT_SIZE \\*[$SUBTITLE_PT_SIZE]
6193 .       nr #ARG_NUM 0 1
6194 .       while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
6195 .          ie \\n[#SUBTITLE_COLOR]=1 \{\
6196 .             PRINT "\m[\\*[$SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n[#ARG_NUM]]\m[]
6197 .          \}
6198 .          el \{\
6199 .             PRINT "\\*[$SUBTITLE_\\n[#ARG_NUM]]
6200 .          \}
6201 .\}
6202 .    \}
6203 .    if !'\\*[$AUTHOR_1]'' \{\
6204 .       FAMILY  \\*[$AUTHOR_FAM]
6205 .       FT      \\*[$AUTHOR_FT]
6206 .       PT_SIZE \\*[$AUTHOR_PT_SIZE]
6207 .       ie \\n[#ATTRIBUTE_COLOR]=1 \{\
6208 .          PRINT \&\m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
6209 .       \}
6210 .       el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \}
6211 .       PRINT_AUTHORS
6212 .    \}
6213 .    FAMILY \\*[$DOC_FAM]
6214 .    FT R
6215 .END
6216 \#
6217 \#
6218 .MAC CHAPTER_DOCHEADER END
6219 .    CENTER
6220 .    FAMILY  \\*[$TITLE_FAM]
6221 .    FT      \\*[$TITLE_FT]
6222 .    PT_SIZE \\*[$TITLE_PT_SIZE]
6223 .    LS      \\n[#DOCHEADER_LEAD]u
6224 .\" Chapter title only
6225 .    ie '\\*[$CHAPTER]'' \{\
6226 .       ie !'\\*[$CHAPTER_TITLE_1]'' \{\
6227 .          if \\n[#PRINT_STYLE]=2 \{\
6228 .             FAMILY  \\*[$CHAPTER_TITLE_FAM]
6229 .             FT      \\*[$CHAPTER_TITLE_FT]
6230 .             PT_SIZE \\*[$CHAPTER_TITLE_PT_SIZE]
6231 .             LS      \\n[#DOCHEADER_LEAD]u
6232 .          \}
6233 .          nr #ARG_NUM 0 1
6234 .          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6235 .             ie \\n[#TITLE_COLOR]=1 \{\
6236 .                PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
6237 .             \}
6238 .             el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
6239 .\}
6240 .       \}
6241 .       el \{\
6242 .          ie \\n[#TITLE_COLOR]=1 \{\
6243 .             PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING]\m[]
6244 .          \}
6245 .          el \{ .PRINT \\*[$CHAPTER_STRING] \}
6246 .       \}
6247 .    \}
6248 .\" Chapter string, possibly with a chapter title
6249 .    el \{\
6250 .       ie \\n[#TITLE_COLOR]=1 \{\
6251 .          PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
6252 .       \}
6253 .       el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
6254 .       if !'\\*[$CHAPTER_TITLE_1]'' \{\
6255 .          if \\n[#PRINT_STYLE]=2 \{\
6256 .             FAMILY  \\*[$CHAPTER_TITLE_FAM]
6257 .             FT      \\*[$CHAPTER_TITLE_FT]
6258 .             PT_SIZE \\*[$CHAPTER_TITLE_PT_SIZE]
6259 .             LS      \\n[#DOCHEADER_LEAD]u
6260 .             ALD \\n[.v]u/4u \"Put a little space before the chapter title
6261 .          \}
6262 .          nr #ARG_NUM 0 1
6263 .          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6264 .             ie \\n[#CHAPTER_TITLE_COLOR]=1 \{\
6265 .                PRINT \m[\\*[$CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
6266 .             \}
6267 .          el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
6268 .\}
6269 .          RLD \\n[#DOC_LEAD]u \" Just looks better this way
6270 .       \}
6271 .    \}
6272 .    FAMILY \\*[$DOC_FAM]
6273 .    FT R
6274 .END
6275 \#
6276 \#
6277 .MAC NAMED_DOCHEADER END
6278 .    CENTER
6279 .    FAMILY  \\*[$TITLE_FAM]
6280 .    FT      \\*[$TITLE_FT]
6281 .    PT_SIZE \\*[$TITLE_PT_SIZE]
6282 .    LS      \\n[#DOCHEADER_LEAD]u
6283 .    if !'\\*[$TITLE_1]'' \{\
6284 .       nr #ARG_NUM 0 1
6285 .       while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6286 .          ie \\n[#TITLE_COLOR]=1 \{\
6287 .             PRINT "\m[\\*[$TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
6288 .          \}
6289 .          el \{\
6290 .             PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
6291 .          \}
6292 .\}
6293 .    \}
6294 .    if !'\\*[$SUBTITLE]'' \{\
6295 .       FAMILY  \\*[$SUBTITLE_FAM]
6296 .       FT      \\*[$SUBTITLE_FT]
6297 .       PT_SIZE \\*[$SUBTITLE_PT_SIZE]
6298 .       nr #ARG_NUM 0 1
6299 .       while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
6300 .          ie \\n[#SUBTITLE_COLOR]=1 \{\
6301 .             PRINT "\m[\\*[$SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n[#ARG_NUM]]\m[]
6302 .          \}
6303 .          el \{\
6304 .             PRINT "\\*[$SUBTITLE_\\n[#ARG_NUM]]
6305 .          \}
6306 .\}
6307 .    \}
6308 .    if !'\\*[$AUTHOR_1]'' \{\
6309 .       FAMILY  \\*[$AUTHOR_FAM]
6310 .       FT      \\*[$AUTHOR_FT]
6311 .       PT_SIZE \\*[$AUTHOR_PT_SIZE]
6312 .       ie \\n[#ATTRIBUTE_COLOR]=1 \{\
6313 .          PRINT \&\m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
6314 .       \}
6315 .       el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \}
6316 .       PRINT_AUTHORS
6317 .    \}
6318 .    FAMILY  \\*[$DOCTYPE_FAM]
6319 .    FT      \\*[$DOCTYPE_FT]
6320 .    PT_SIZE \\*[$DOCTYPE_PT_SIZE]
6321 .    LS      \\n[#DOCHEADER_LEAD]u
6322 .    ALD     \\n[#DOCHEADER_LEAD]u
6323 .    nr #FROM_DOCTYPE 1
6324 .    if \\n[#DOCTYPE_COLOR]=1 \{\
6325 .       COLOR \\*[$DOCTYPE_COLOR]
6326 .    \}
6327 .    ie \\n[#DOCTYPE_UNDERLINE]=1 \{\
6328 .       UNDERSCORE \\*[$DOCTYPE_UNDERLINE_GAP] "\\*[$DOC_TYPE]"
6329 .     \}
6330 .    el \{\
6331 .       PRINT "\\*[$DOC_TYPE]"
6332 .    \}
6333 .    COLOR black
6334 .    FAMILY \\*[$DOC_FAM]
6335 .    FT R
6336 .    rr #FROM_DOCTYPE
6337 .END
6338 \#
6339 \#
6340 \# COVER PAGE
6341 \# ----------
6342 \# *Arguments:
6343 \#   TITLE | DOCTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE | COVERTITLE ...
6344 \#   ... [ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC BLANKPAGE ]
6345 \# *Function:
6346 \#   Toggles the number register for each cover page element
6347 \#   passed as an argument.
6348 \# *Notes:
6349 \#   TITLE, DOCTITLE, CHAPTER, CHAPTER_TITLE or CHAPTER+TITLE must
6350 \#   be supplied.  After that, users may enter as many or as few of
6351 \#   the arguments as they like; however, the arguments must appear
6352 \#   in the order given above.  BLANKPAGE, as the final argument,
6353 \#   inserts a blank page after the cover.
6354 \#
6355 \#   If called as DOC_COVER, performs the same operations, but
6356 \#   applies everything to a doc cover.
6357 \#
6358 .MAC COVER END
6359 .    ie '\\$0'DOC_COVER' \{\
6360 .       if '\\$\\n[#NUM_ARGS]'BLANKPAGE' \{ .nr #DOCCOVER_BLANKPAGE 1 \}
6361 .       nr #DOC_COVER 1
6362 .       if '\\$1'TITLE'         \{ .nr #DOC_COVER_TITLE     1 \}
6363 .       if '\\$1'DOCTITLE'      \{ .nr #DOC_COVER_TITLE     2 \}
6364 .       if '\\$1'CHAPTER'       \{ .nr #DOC_COVER_TITLE     3 \}
6365 .       if '\\$1'CHAPTER_TITLE' \{ .nr #DOC_COVER_TITLE     4 \}
6366 .       if '\\$1'CHAPTER+TITLE' \{ .nr #DOC_COVER_TITLE     5 \}
6367 .       if '\\$1'COVERTITLE'    \{ .nr #DOC_COVER_TITLE     6 \}
6368 .       if '\\$2'SUBTITLE'      \{ .nr #DOC_COVER_SUBTITLE  1 \}
6369 .       if '\\$2'AUTHOR'        \{ .nr #DOC_COVER_AUTHOR    1 \}
6370 .       if '\\$2'DOCTYPE'       \{ .nr #DOC_COVER_DOCTYPE   1 \}
6371 .       if '\\$2'COPYRIGHT'     \{ .nr #DOC_COVER_COPYRIGHT 1 \}
6372 .       if '\\$2'MISC'          \{ .nr #DOC_COVER_MISC      1 \}
6373 .       if '\\$3'AUTHOR'        \{ .nr #DOC_COVER_AUTHOR    1 \}
6374 .       if '\\$3'DOCTYPE'       \{ .nr #DOC_COVER_DOCTYPE   1 \}
6375 .       if '\\$3'COPYRIGHT'     \{ .nr #DOC_COVER_COPYRIGHT 1 \}
6376 .       if '\\$3'MISC'          \{ .nr #DOC_COVER_MISC      1 \}
6377 .       if '\\$4'DOCTYPE'       \{ .nr #DOC_COVER_DOCTYPE   1 \}
6378 .       if '\\$4'COPYRIGHT'     \{ .nr #DOC_COVER_COPYRIGHT 1 \}
6379 .       if '\\$4'MISC'          \{ .nr #DOC_COVER_MISC      1 \}
6380 .       if '\\$5'COPYRIGHT'     \{ .nr #DOC_COVER_COPYRIGHT 1 \}
6381 .       if '\\$5'MISC'          \{ .nr #DOC_COVER_MISC      1 \}
6382 .       if '\\$6'MISC'          \{ .nr #DOC_COVER_MISC      1 \}
6383 .    \}
6384 .    el \{\
6385 .       if '\\$\\n[#NUM_ARGS]'BLANKPAGE' \{ .nr #COVER_BLANKPAGE 1 \}
6386 .       nr #COVER 1
6387 .       if '\\$1'TITLE'         \{ .nr #COVER_TITLE     1 \}
6388 .       if '\\$1'DOCTITLE'      \{ .nr #COVER_TITLE     2 \}
6389 .       if '\\$1'CHAPTER'       \{ .nr #COVER_TITLE     3 \}
6390 .       if '\\$1'CHAPTER_TITLE' \{ .nr #COVER_TITLE     4 \}
6391 .       if '\\$1'CHAPTER+TITLE' \{ .nr #COVER_TITLE     5 \}
6392 .       if '\\$1'COVERTITLE'    \{ .nr #COVER_TITLE     6 \}
6393 .       if '\\$2'SUBTITLE'      \{ .nr #COVER_SUBTITLE  1 \}
6394 .       if '\\$2'AUTHOR'        \{ .nr #COVER_AUTHOR    1 \}
6395 .       if '\\$2'DOCTYPE'       \{ .nr #COVER_DOCTYPE   1 \}
6396 .       if '\\$2'COPYRIGHT'     \{ .nr #COVER_COPYRIGHT 1 \}
6397 .       if '\\$2'MISC'          \{ .nr #COVER_MISC      1 \}
6398 .       if '\\$3'AUTHOR'        \{ .nr #COVER_AUTHOR    1 \}
6399 .       if '\\$3'DOCTYPE'       \{ .nr #COVER_DOCTYPE   1 \}
6400 .       if '\\$3'COPYRIGHT'     \{ .nr #COVER_COPYRIGHT 1 \}
6401 .       if '\\$3'MISC'          \{ .nr #COVER_MISC      1 \}
6402 .       if '\\$4'DOCTYPE'       \{ .nr #COVER_DOCTYPE   1 \}
6403 .       if '\\$4'COPYRIGHT'     \{ .nr #COVER_COPYRIGHT 1 \}
6404 .       if '\\$4'MISC'          \{ .nr #COVER_MISC      1 \}
6405 .       if '\\$5'COPYRIGHT'     \{ .nr #COVER_COPYRIGHT 1 \}
6406 .       if '\\$5'MISC'          \{ .nr #COVER_MISC      1 \}
6407 .       if '\\$6'MISC'          \{ .nr #COVER_MISC      1 \}
6408 .    \}
6409 .END
6410 \#
6411 \#
6412 .MAC COVERTITLE END
6413 .    ie '\\$0'DOC_COVERTITLE' \{\ 
6414 .       ie \\n[#NUM_ARGS]=0 \{\
6415 .          if \\n[#DOC_COVER_TITLE_NUM] \{\
6416 .             nr #ITEM 0 1
6417 .             while \\n[#DOC_COVER_TITLE_NUM]>\\n[#ITEM] \{\
6418 .                rm $DOC_COVER_TITLE_\\n+[#ITEM]
6419 .\}
6420 .             rr #DOC_COVER_TITLE_NUM
6421 .             rm $DOC_COVER_TITLE
6422 .          \}
6423 .       \}
6424 .       el \{\
6425 .          nr #DOC_COVER_TITLE_NUM 0 1
6426 .          while \\n[#NUM_ARGS]>\\n[#DOC_COVER_TITLE_NUM] \{\
6427 .             ds $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
6428 .\}
6429 .          ds $DOC_COVER_TITLE \\$*
6430 .       \}
6431 .    \}
6432 .    el \{\
6433 .       ie \\n[#NUM_ARGS]=0 \{\
6434 .          if \\n[#COVER_TITLE_NUM] \{\
6435 .             nr #ITEM 0 1
6436 .             while \\n[#COVER_TITLE_NUM]>\\n[#ITEM] \{\
6437 .                rm $COVER_TITLE_\\n+[#ITEM]
6438 .\}
6439 .             rr #COVER_TITLE_NUM
6440 .             rm $COVER_TITLE
6441 .          \}
6442 .       \}
6443 .       el \{\
6444 .          nr #COVER_TITLE_NUM 0 1
6445 .          while \\n[#NUM_ARGS]>\\n[#COVER_TITLE_NUM] \{\
6446 .             ds $COVER_TITLE_\\n+[#COVER_TITLE_NUM] \\$\\n[#COVER_TITLE_NUM]
6447 .\}
6448 .          ds $COVER_TITLE \\$*
6449 .       \}
6450 .    \}
6451 .END
6452 \#
6453 \#
6454 \# COVER PAGE LEADING
6455 \# ------------------
6456 \# *Arguments:
6457 \#   <+|- amount by which to in/decrease leading of cover/doc cover>
6458 \# *Function:
6459 \#   Stores user supplied lead in/decrease in string $COVER_LEAD_ADJ
6460 \#   or $DOC_COVER_LEAD_ADJ, depending on whether the macro was called
6461 \#   with an alias (DOC_COVER_LEAD).
6462 \# *Notes:
6463 \#   A unit of measure must be supplied.  Decimal fractions OK.
6464 \#   Default is +0, i.e. same as DOC_LEAD.
6465 \#
6466 .MAC COVER_LEAD END
6467 .    ie '\\$0'DOC_COVER_LEAD' \{\
6468 .       ds $DOC_COVER_LEAD_ADJ \\$1
6469 .    \}
6470 .    el \{\
6471 .       ds $COVER_LEAD_ADJ \\$1
6472 .    \}
6473 .END
6474 \#
6475 \#
6476 \# COVER PAGE START POSITION
6477 \# -------------------------
6478 \# *Arguments:
6479 \#   <distance from page top at which to start cover/doc cover>
6480 \# *Function:
6481 \#   Stores user supplied lead in/decrease in #COVER_START_POS
6482 \#   or #DOC_COVER_START_POS, depending on whether the macro was
6483 \#   called by an alias (DOC_COVER_ADVANCE).
6484 \# *Notes:
6485 \#   A unit of measure must be supplied.  Decimal fractions OK.
6486 \#   If user doesn't invoke this macro, the default starting
6487 \#   position for both covers and doc covers is 1/3 of the way
6488 \#   down the page (setup in DO_COVER).
6489 \#
6490 .MAC COVER_ADVANCE END
6491 .    ie '\\$0'DOC_COVER_ADVANCE' \{\
6492 .       nr #DOC_COVER_START_POS (\\$1)
6493 .    \}
6494 .    el \{\
6495 .       nr #COVER_START_POS (\\$1)
6496 .    \}
6497 .END
6498 \#
6499 \#
6500 \# UNDERLINE CONTROL
6501 \# -----------------
6502 \# *Arguments:
6503 \#   [ DOUBLE ] [ <underline weight> [<underline gap>] ] | <none> | <anything>
6504 \# *Function:
6505 \#   Toggles underlining of the element indicated by the calling alias
6506 \#   on or off.  Uses #<element>_UNDERLINE_WEIGHT to set the weight,
6507 \#   and defines string $<element>_UNDERLINE_GAP.
6508 \# *Notes:
6509 \#   Calling aliases COVER_ and DOCCOVER_ only apply if DOCTYPE is
6510 \#   NAMED and the DOCTYPE arg is passed to COVER or DOC_COVER.
6511 \#
6512 .MAC _UNDERLINE END
6513 .    ie '\\$1'' \{\
6514 .       if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE'  \{ .nr #BIB_STRING_UNDERLINE 1 \}
6515 .       if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{ .nr #BIB_STRING_UNDERLINE 1 \}
6516 .       if '\\$0'COVER_UNDERLINE'                \{ .nr #COVER_UNDERLINE      1 \}
6517 .       if '\\$0'DOC_COVER_UNDERLINE'            \{ .nr #DOCCOVER_UNDERLINE   1 \}
6518 .       if '\\$0'DOCTYPE_UNDERLINE'              \{ .nr #DOCTYPE_UNDERLINE    1 \}
6519 .       if '\\$0'HEAD_UNDERLINE'                 \{ .nr #HEAD_UNDERLINE       1 \}
6520 .       if '\\$0'ENDNOTE_STRING_UNDERLINE'       \{ .nr #EN_STRING_UNDERLINE  1 \}
6521 .       if '\\$0'ENDNOTE_STRING_UNDERSCORE'      \{ .nr #EN_STRING_UNDERLINE  1 \}
6522 .       if '\\$0'ENDNOTE_TITLE_UNDERLINE'        \{ .nr #EN_TITLE_UNDERLINE   1 \}
6523 .       if '\\$0'ENDNOTE_TITLE_UNDERSCORE'       \{ .nr #EN_TITLE_UNDERLINE   1 \}
6524 .    \}
6525 .    el \{\
6526 .       ie \\n[#NUM_ARGS]=1 \{\
6527 .          ds $ARG \\$1
6528 .          substring $ARG -1
6529 .          ie \B'\\*[$ARG]' \{\
6530 .             if !\\n[#PRINT_STYLE]=1 \{\
6531 .                if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE'  \{ .BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1 \}
6532 .                if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{ .BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1 \}
6533 .                if '\\$0'COVER_UNDERLINE'                \{ .COVER_UNDERLINE_WEIGHT               \\$1 \}
6534 .                if '\\$0'DOC_COVER_UNDERLINE'            \{ .DOCCOVER_UNDERLINE_WEIGHT            \\$1 \}
6535 .                if '\\$0'DOCTYPE_UNDERLINE'              \{ .DOCTYPE_UNDERLINE_WEIGHT             \\$1 \}
6536 .                if '\\$0'HEAD_UNDERLINE'                 \{ .HEAD_UNDERLINE_WEIGHT                \\$1 \}
6537 .                if '\\$0'ENDNOTE_STRING_UNDERLINE'       \{ .ENDNOTE_STRING_UNDERLINE_WEIGHT      \\$1 \}
6538 .                if '\\$0'ENDNOTE_STRING_UNDERSCORE'      \{ .ENDNOTE_STRING_UNDERLINE_WEIGHT      \\$1 \}
6539 .                if '\\$0'ENDNOTE_TITLE_UNDERLINE'        \{ .ENDNOTE_TITLE_UNDERLINE_WEIGHT       \\$1 \}
6540 .                if '\\$0'ENDNOTE_TITLE_UNDERSCORE'       \{ .ENDNOTE_TITLE_UNDERLINE_WEIGHT       \\$1 \}
6541 .             \}
6542 .          \}
6543 .          el \{\
6544 .             if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{\
6545 .                ie '\\$1'DOUBLE' \{ .nr #BIB_STRING_UNDERLINE 2 \}
6546 .                el \{ .nr #BIB_STRING_UNDERLINE 0 \}
6547 .             \}
6548 .             if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{\
6549 .                ie '\\$1'DOUBLE' \{ .nr #BIB_STRING_UNDERLINE 2 \}
6550 .                el \{ .nr #BIB_STRING_UNDERLINE 0 \}
6551 .             \}
6552 .             if '\\$0'COVER_UNDERLINE'          \{ .nr #COVER_UNDERLINE     0 \}
6553 .             if '\\$0'DOC_COVER_UNDERLINE'      \{ .nr #DOCCOVER_UNDERLINE  0 \}
6554 .             if '\\$0'DOCTYPE_UNDERLINE'        \{ .nr #DOCTYPE_UNDERLINE   0 \}
6555 .             if '\\$0'HEAD_UNDERLINE'           \{ .nr #HEAD_UNDERLINE      0 \}
6556 .             if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\
6557 .                ie '\\$1'DOUBLE' \{ .nr #EN_STRING_UNDERLINE 2 \}
6558 .                el \{ .nr #EN_STRING_UNDERLINE 0 \}
6559 .             \}
6560 .             if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\
6561 .                ie '\\$1'DOUBLE' \{ .nr #EN_STRING_UNDERLINE 2 \}
6562 .                el \{ .nr #EN_STRING_UNDERLINE 0 \}
6563 .             \}
6564 .          \}
6565 .       \}
6566 .       el \{\
6567 .          if !\\n[#PRINT_STYLE]=1 \{\
6568 .             if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{\
6569 .                nr #BIB_STRING_UNDERLINE 1
6570 .                if '\\$1'DOUBLE' \{\
6571 .                   nr #BIB_STRING_UNDERLINE 2
6572 .                   shift
6573 .                \}
6574 .                BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
6575 .                if !'\\$2'' \{\
6576 .                   ds $BIB_STRING_UNDERLINE_GAP \\$2
6577 .                \}
6578 .                if !'\\$3'' \{\
6579 .                   ds $BIB_STRING_RULE_GAP \\$3
6580 .                \}
6581 .             \}
6582 .             if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{\ 
6583 .                nr #BIB_STRING_UNDERLINE 1
6584 .                if '\\$1'DOUBLE' \{\
6585 .                   nr #BIB_STRING_UNDERLINE 2
6586 .                   shift
6587 .                \}
6588 .                BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
6589 .                if !'\\$2'' \{\
6590 .                   ds $BIB_STRING_UNDERLINE_GAP \\$2
6591 .                \}
6592 .                if !'\\$3'' \{\
6593 .                   ds $BIB_STRING_RULE_GAP \\$3
6594 .                \}
6595 .             \}
6596 .             if '\\$0'COVER_UNDERLINE' \{\
6597 .                nr #COVER_UNDERLINE 1
6598 .                COVER_UNDERLINE_WEIGHT  \\$1
6599 .                ds $COVER_UNDERLINE_GAP \\$2
6600 .             \}
6601 .             if '\\$0'DOC_COVER_UNDERLINE' \{\
6602 .                nr #DOCCOVER_UNDERLINE 1
6603 .                DOCCOVER_UNDERLINE_WEIGHT  \\$1
6604 .                ds $DOCCOVER_UNDERLINE_GAP \\$2
6605 .             \}
6606 .             if '\\$0'DOCTYPE_UNDERLINE' \{\
6607 .                nr #DOCTYPE_UNDERLINE 1
6608 .                DOCTYPE_UNDERLINE_WEIGHT  \\$1
6609 .                ds $DOCTYPE_UNDERLINE_GAP \\$2
6610 .             \}
6611 .             if '\\$0'HEAD_UNDERLINE' \{\
6612 .                nr #HEAD_UNDERLINE 1
6613 .                HEAD_UNDERLINE_WEIGHT  \\$1
6614 .                ds $HEAD_UNDERLINE_GAP \\$2
6615 .             \}
6616 \# ENDNOTE_STRING_UNDERLINE and ENDNOTE_STRING_UNDERSCORE are identical;
6617 \# the _UNDERSCORE version is left in for backward compatibility.
6618 .             if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\
6619 .                nr #EN_STRING_UNDERLINE 1
6620 .                if '\\$1'DOUBLE' \{\
6621 .                   nr #EN_STRING_UNDERLINE 2
6622 .                   shift
6623 .                \}
6624 .                ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
6625 .                if !'\\$2'' \{\
6626 .                   ds $EN_STRING_UNDERLINE_GAP \\$2
6627 .                \}
6628 .                if !'\\$3'' \{\
6629 .                   ds $EN_STRING_RULE_GAP \\$3
6630 .                \}
6631 .             \}
6632 .             if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\ 
6633 .                nr #EN_STRING_UNDERLINE 1
6634 .                if '\\$1'DOUBLE' \{\
6635 .                   nr #EN_STRING_UNDERLINE 2
6636 .                   shift
6637 .                \}
6638 .                ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
6639 .                if !'\\$2'' \{\
6640 .                   ds $EN_STRING_UNDERLINE_GAP \\$2
6641 .                \}
6642 .                if !'\\$3'' \{\
6643 .                   ds $EN_STRING_RULE_GAP \\$3
6644 .                \}
6645 .             \}
6646 \# ENDNOTE_TITLE_UNDERLINE and ENDNOTE_TITLE_UNDERSCORE are identical;
6647 \# the _UNDERSCORE version is left in for backward compatibility.
6648 .             if '\\$0'ENDNOTE_TITLE_UNDERLINE' \{\
6649 .                nr #ENDNOTE_TITLE_UNDERLINE 1
6650 .                ENDNOTE_TITLE_UNDERLINE_WEIGHT  \\$1
6651 .                ds $EN_TITLE_UNDERLINE_GAP \\$2
6652 .             \}
6653 .             if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \{\
6654 .                nr #ENDNOTE_TITLE_UNDERLINE 1
6655 .                ENDNOTE_TITLE_UNDERLINE_WEIGHT  \\$1
6656 .                ds $EN_TITLE_UNDERLINE_GAP \\$2
6657 .             \}
6658 .          \}
6659 .       \}
6660 .    \}
6661 .END
6662 \#
6663 .ALIAS BIBLIOGRAPHY_STRING_UNDERSCORE _UNDERLINE
6664 .ALIAS BIBLIOGRAPHY_STRING_UNDERLINE  _UNDERLINE
6665 .ALIAS COVER_UNDERLINE                _UNDERLINE
6666 .ALIAS DOC_COVER_UNDERLINE            _UNDERLINE
6667 .ALIAS DOCTYPE_UNDERLINE              _UNDERLINE
6668 .ALIAS HEAD_UNDERLINE                 _UNDERLINE
6669 .ALIAS ENDNOTE_STRING_UNDERLINE       _UNDERLINE
6670 .ALIAS ENDNOTE_STRING_UNDERSCORE      _UNDERLINE
6671 .ALIAS ENDNOTE_TITLE_UNDERLINE        _UNDERLINE
6672 .ALIAS ENDNOTE_TITLE_UNDERSCORE       _UNDERLINE
6673 \#
6674 \#
6675 \# COVERS - WHETHER TO PRINT
6676 \# -------------------------
6677 \# *Arguments:
6678 \#   <none> | <anything>
6679 \# *Function:
6680 \#   Creates or removes registers #COVERS and #COVERS_OFF, checked for
6681 \#   in DEFAULTS (in START) prior to printing
6682 \#
6683 .MAC COVERS END
6684 .    ie '\\$0'DOC_COVERS' \{\
6685 .       ie '\\$1'' \{\
6686 .          rr #DOC_COVERS_OFF
6687 .          nr #DOC_COVERS 1
6688 .       \}
6689 .       el \{\
6690 .          rr #DOC_COVERS
6691 .          nr #DOC_COVERS_OFF 1
6692 .       \}
6693 .    \}
6694 .    el \{\
6695 .       ie '\\$1'' \{\
6696 .          rr #COVERS_OFF
6697 .          nr #COVERS 1
6698 .       \}
6699 .       el \{\
6700 .          rr #COVERS
6701 .          nr #COVERS_OFF 1
6702 .       \}
6703 .    \}
6704 .END
6705 \#
6706 \#
6707 \# COVER_COUNTS_PAGES
6708 \# ------------------
6709 \# *Arguments:
6710 \#   <none> | <anything>
6711 \# *Function:
6712 \#   Creates or removes registers #COVERS_COUNT or #DOCCOVERS_COUNT,
6713 \#   used in END_COVER to determine whether to increment the page
6714 \#   number silently when doc covers or covers are output.
6715 \#
6716 .MAC COVER_COUNTS_PAGES END
6717 .    if '\\$0'DOC_COVER_COUNTS_PAGES' \{\
6718 .       ie '\\$1'' \{ .nr #DOCCOVERS_COUNT 1 \}
6719 .       el \{ .rr #DOCCOVERS_COUNT \}
6720 .       return
6721 .    \}
6722 .    if '\\$0'COVER_COUNTS_PAGES' \{\
6723 .       ie '\\$1'' \{ .nr #COVERS_COUNT 1 \}
6724 .       el \{ .rr #COVERS_COUNT \}
6725 .       return
6726 .    \}
6727 .END
6728 \#
6729 \#
6730 .MAC DO_COVER END
6731 .    nr #DOING_COVER 1
6732 .    ev COVER
6733 .    evc 0
6734 .    TRAP OFF
6735 .    if \\n[#PAGINATE]=1 \{\
6736 .       nr #PAGINATION_WAS_ON 1
6737 .       rr #PAGINATE
6738 .    \}
6739 .    if \\n[#HEADERS_ON]=1 \{\
6740 .       nr #HEADERS_WERE_ON 1
6741 .       HEADERS OFF
6742 .    \}
6743 .    if \\n[#FOOTERS_ON]=1 \{\
6744 .       nr #FOOTERS_WERE_ON 1
6745 .       FOOTERS OFF
6746 .    \}
6747 .    if \\n[#COLUMNS]=1 \{\
6748 .       nr #COLUMNS_WERE_ON 1
6749 .       rr #COLUMNS
6750 .    \}
6751 .\" Doc cover
6752 .    ie '\\$0'DO_DOC_COVER' \{\
6753 .       if !r#DOC_COVER_START_POS \{\
6754 .          nr #DOC_COVER_START_POS \\n[#PAGE_LENGTH]/3
6755 .       \}
6756 .       if \\n[#PRINT_STYLE]=1 \{\
6757 .          ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u*2u \}
6758 .          el \{ .vs \\n[#DOC_LEAD]u \}
6759 .       \}
6760 .       if \\n[#PRINT_STYLE]=2 \{\
6761 .          LS \\n[#DOC_LEAD]u\\*[$DOC_COVER_LEAD_ADJ]
6762 .          nr #DOC_COVER_LEAD \\n[#LEAD]
6763 .       \}
6764 .       PRINT \&
6765 .       sp |\\n[#DOC_COVER_START_POS]u-1v
6766 .       if \\n[#DOC_COVER_COLOR]=1 \{\
6767 .          nf
6768 \m[\\*[$DOC_COVER_COLOR]]
6769 .          EOL
6770 .       \}
6771 .       CENTER
6772 .       FAMILY  \\*[$DOC_COVER_TITLE_FAM]
6773 .       FT      \\*[$DOC_COVER_TITLE_FT]
6774 .       PT_SIZE \\*[$DOC_COVER_TITLE_PT_SIZE]
6775 .       LS      \\n[#DOC_COVER_LEAD]u
6776 .       if \\n[#PRINT_STYLE]=1 \{ .TYPEWRITER \}
6777 .       if \\n[#DOC_COVER_TITLE]=1 \{\
6778 .          ie \\n[#PRINT_STYLE]=1 \{\
6779 .             CAPS
6780 .             nr #ARG_NUM 0 1
6781 .             while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6782 .                UNDERSCORE "\\*[$TITLE_\\n[#ARG_NUM]]"
6783 .\}
6784 .             CAPS OFF
6785 .          \}
6786 .          el \{\
6787 .          nr #ARG_NUM 0 1
6788 .          while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6789 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6790 .                PRINT "\m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
6791 .             \}
6792 .             el \{\
6793 .                PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
6794 .             \}
6795 .\}
6796 .          \}
6797 .       \}
6798 .       if \\n[#DOC_COVER_TITLE]=2 \{\
6799 .          ie \\n[#PRINT_STYLE]=1 \{\
6800 .             CAPS
6801 .             nr #ARG_NUM 0 1
6802 .             while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
6803 .                UNDERSCORE "\\*[$DOC_TITLE_\\n[#ARG_NUM]]"
6804 .\}
6805 .             CAPS OFF
6806 .          \}
6807 .          el \{\
6808 .          nr #ARG_NUM 0 1
6809 .          while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
6810 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6811 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_TITLE_\\n[#ARG_NUM]]\m[]
6812 .             \}
6813 .             el \{ .PRINT \\*[$DOC_TITLE_\\n[#ARG_NUM]] \}
6814 .\}
6815 .          \}
6816 .       \}
6817 .       if \\n[#DOC_COVER_TITLE]=3 \{\
6818 .          ie \\n[#PRINT_STYLE]=1 \{\
6819 .             CAPS
6820 .             PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
6821 .             CAPS OFF
6822 .          \}
6823 .          el \{\
6824 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6825 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
6826 .             \}
6827 .             el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
6828 .          \}
6829 .       \}
6830 .       if \\n[#DOC_COVER_TITLE]=4 \{\
6831 .          ie \\n[#PRINT_STYLE]=1 \{\
6832 .             CAPS
6833 .             nr #ARG_NUM 0 1
6834 .                ie \\n[#SINGLE_SPACE]=0 \{\
6835 .                   vs \\n[#DOC_LEAD]u/2u
6836 .                \}
6837 .                el \{\
6838 .                   vs \\n[#DOC_LEAD]u
6839 .                \}
6840 .                sp
6841 .             while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6842 .                UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
6843 .\}
6844 .             CAPS OFF
6845 .             if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \}
6846 .          \}
6847 .          el \{\
6848 .          nr #ARG_NUM 0 1
6849 .          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6850 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6851 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
6852 .             \}
6853 .             el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
6854 .\}
6855 .          \}
6856 .       \}
6857 .       if \\n[#DOC_COVER_TITLE]=5 \{\
6858 .          ie \\n[#PRINT_STYLE]=1 \{\
6859 .             CAPS
6860 .             PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
6861 .             CAPS OFF
6862 .          \}
6863 .          el \{\
6864 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6865 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
6866 .             \}
6867 .             el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
6868 .          \}
6869 .          if !'\\*[$CHAPTER_TITLE_1]'' \{\
6870 .             ie \\n[#PRINT_STYLE]=1 \{\
6871 .                ie \\n[#SINGLE_SPACE]=0 \{\
6872 .                   vs \\n[#DOC_LEAD]u/2u
6873 .                \}
6874 .                el \{\
6875 .                   vs \\n[#DOC_LEAD]u
6876 .                \}
6877 .                sp
6878 .                nr #ARG_NUM 0 1
6879 .                while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6880 .                   UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
6881 .\}
6882 .                if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \}
6883 .             \}
6884 .             el \{\
6885 .                FAMILY  \\*[$DOC_COVER_CHAPTER_TITLE_FAM]
6886 .                FT      \\*[$DOC_COVER_CHAPTER_TITLE_FT]
6887 .                PT_SIZE \\*[$DOC_COVER_CHAPTER_TITLE_PT_SIZE]
6888 .                nr #ARG_NUM 0 1
6889 .                ALD \\n[.v]u/4u \"Put a little space before the chapter title
6890 .                while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6891 .                   ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6892 .                      PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
6893 .                   \}
6894 .                   el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
6895 .\}
6896 .             \}
6897 .          \}
6898 .       \}
6899 .       if \\n[#DOC_COVER_TITLE]=6 \{\
6900 .          ie \\n[#PRINT_STYLE]=1 \{\
6901 .             CAPS
6902 .             nr #ARG_NUM 0 1
6903 .             while \\n[#DOC_COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6904 .                UNDERSCORE "\\*[$DOC_COVER_TITLE_\\n[#ARG_NUM]]"
6905 .\}
6906 .             CAPS OFF
6907 .          \}
6908 .          el \{\
6909 .             nr #ARG_NUM 0 1
6910 .             while \\n[#DOC_COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
6911 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
6912 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_COVER_TITLE_\\n[#ARG_NUM]]\m[]
6913 .             \}
6914 .             el \{ .PRINT \\*[$DOC_COVER_TITLE_\\n[#ARG_NUM]] \}
6915 .\}
6916 .          \}
6917 .       \}
6918 .       if !\\n[#DOC_TYPE]=2 \{\
6919 .          if \\n[#DOC_COVER_SUBTITLE]=1 \{\
6920 .             FAMILY  \\*[$DOC_COVER_SUBTITLE_FAM]
6921 .             FT      \\*[$DOC_COVER_SUBTITLE_FT]
6922 .             PT_SIZE \\*[$DOC_COVER_SUBTITLE_PT_SIZE]
6923 .             if \\n[#PRINT_STYLE]=1 \{\
6924 .                TYPEWRITER
6925 .                ie \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \}
6926 .                el \{ .vs \\n[#DOC_LEAD]u \}
6927 .                sp
6928 .             \}
6929 .       if \\n[#DOC_COVER]=1 \{\
6930 .          ie !'\\*[$SUBTITLE_DOCCOVER_1]'' \{\
6931 .             nr #SUBTITLES \\n[#SUBTITLE_DOCCOVER_NUM]
6932 .             nr #NEXT_SUBTITLE 0 1
6933 .             while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
6934 .                ie \\n[#DOC_COVER_SUBTITLE_COLOR]=1 \{\
6935 .                   PRINT \m[\\*[$DOC_COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_DOCCOVER_\\n+[#NEXT_SUBTITLE]]\m[]
6936 .                \}
6937 .                el \{ .PRINT \\*[$SUBTITLE_DOCCOVER_\\n+[#NEXT_SUBTITLE]] \}
6938 .\}
6939 .          \}
6940 .          el \{\
6941 .             nr #SUBTITLES \\n[#SUBTITLE_NUM]
6942 .             nr #NEXT_SUBTITLE 0 1
6943 .             while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
6944 .                ie \\n[#DOC_COVER_SUBTITLE_COLOR]=1 \{\
6945 .                   PRINT \m[\\*[$DOC_COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]]\m[]
6946 .                \}
6947 .                el \{ .PRINT \\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]] \}
6948 .\}
6949 .          \}
6950 .       \}
6951 .             if \\n[#PRINT_STYLE]=1 \{\
6952 .                if \\n[#SINGLE_SPACE]=0 \{ .vs \}
6953 .             \}
6954 .          \}
6955 .          if \\n[#PRINT_STYLE]=1 \{\
6956 .             if !r#DOC_COVER_SUBTITLE \{ .sp \}
6957 .          \}
6958 .       \}
6959 .       if \\n[#DOC_COVER_AUTHOR]=1 \{\
6960 .          FAMILY  \\*[$DOC_COVER_AUTHOR_FAM]
6961 .          FT      \\*[$DOC_COVER_AUTHOR_FT]
6962 .          PT_SIZE \\*[$DOC_COVER_AUTHOR_PT_SIZE]
6963 .          if \\n[#PRINT_STYLE]=1 \{\
6964 .             TYPEWRITER
6965 .             ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \}
6966 .             el \{ .vs \\n[#DOC_LEAD]u/2u \}
6967 .             sp
6968 .          \}
6969 .          ie d$ATTRIBUTE_STRING_DOCCOVER \{\
6970 .             ie \\n[#DOC_COVER_ATTRIBUTE_COLOR]=1 \{\
6971 .                PRINT \&\m[\\*[$DOC_COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING_DOCCOVER]\m[]
6972 .             \}
6973 .             el \{ .PRINT \&\\*[$ATTRIBUTE_STRING_DOCCOVER] \}
6974 .          \}
6975 .          el \{\
6976 .             if d$ATTRIBUTE_STRING \{\
6977 .                ie \\n[#DOC_COVER_ATTRIBUTE_COLOR]=1 \{\
6978 .                   PRINT \&\m[\\*[$DOC_COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
6979 .                \}
6980 .                el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \}
6981 .             \}
6982 .          \}
6983 .          PRINT_AUTHORS
6984 .       \}
6985 .       FAMILY  \\*[$DOC_COVER_DOCTYPE_FAM]
6986 .       FT      \\*[$DOC_COVER_DOCTYPE_FT]
6987 .       PT_SIZE \\*[$DOC_COVER_DOCTYPE_PT_SIZE]
6988 .       SP
6989 .       if \\n[#DOC_TYPE]=3 \{\
6990 .          if \\n[#DOC_COVER_DOCTYPE]=1 \{\
6991 .             ie \\n[#PRINT_STYLE]=1 \{\
6992 .                TYPEWRITER
6993 .                vs \\n[#DOC_LEAD]u
6994 .                UNDERSCORE2 "\\*[$DOC_TYPE]"
6995 .             \}
6996 .             el \{\
6997 .                nr #FROM_DOC_COVER 1
6998 .                ie \\n[#DOC_COVER_DOCTYPE_COLOR]=1 \{\
6999 .                   COLOR \\*[$DOC_COVER_DOCTYPE_COLOR]
7000 .                   ie \\n[#DOCCOVER_UNDERLINE]= 1 \{ .UNDERSCORE \\*[$DOCCOVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \}
7001 .                   el \{ .PRINT "\\*[$DOC_TYPE]" \}
7002 .                \}
7003 .                el \{\
7004 .                   ie \\n[#DOCCOVER_UNDERLINE]=1 \{ .UNDERSCORE \\*[$DOCCOVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \}
7005 .                   el \{ .PRINT "\\*[$DOC_TYPE]" \}
7006 .                \}
7007 .                rr #FROM_DOC_COVER
7008 .             \}
7009 .          \}
7010 .       \}
7011 .       sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
7012 .       ie \\n[#PRINT_STYLE]=1 \{\
7013 .          TYPEWRITER
7014 .          ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \}
7015 .          el \{ .vs \\n[#DOC_LEAD]u/2u \}
7016 .       \}
7017 .       el \{\
7018 .          FAMILY  \\*[$DOC_COVER_COPYRIGHT_FAM]
7019 .          FT      \\*[$DOC_COVER_COPYRIGHT_FT]
7020 .          AUTOLEAD 2
7021 .          PT_SIZE \\*[$DOC_COVER_COPYRIGHT_PT_SIZE]
7022 .       \}
7023 .       if \\n[#DOC_COVER_COPYRIGHT]=1 \{\
7024 .          if !'\\*[$COPYRIGHT_DOCCOVER]'' \{\
7025 .             ds $SAVED_COPYRIGHT \\*[$COPYRIGHT]
7026 .             ds $COPYRIGHT \\*[$COPYRIGHT_DOCCOVER]
7027 .          \}
7028 .          QUAD \\*[$DOC_COVER_COPYRIGHT_QUAD]
7029 .          ie \\n[#DOC_COVER_COPYRIGHT_COLOR]=1 \{\
7030 .             PRINT \m[\\*[$DOC_COVER_COPYRIGHT_COLOR]]\\*[$COPYRIGHT]\m[]
7031 .          \}
7032 .          el \{ .PRINT \\*[$COPYRIGHT] \}
7033 .          ds $COPYRIGHT \\*[$SAVED_COPYRIGHT]
7034 .       \}
7035 .       sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
7036 .       if \\n[#DOC_COVER_MISC]=1 \{\
7037 .          QUAD \\*[$DOC_COVER_MISC_QUAD]
7038 .          ie !'\\*[$MISC_DOCCOVER_1]'' \{\
7039 .             nr #MISCS \\n[#MISC_DOCCOVER_NUM]
7040 .             sp -\\n[#MISCS]+1
7041 .             nr #NEXT_MISC 0 1
7042 .             while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
7043 .                ie \\n[#DOC_COVER_MISC_COLOR]=1 \{\
7044 .                   PRINT \m[\\*[$DOC_COVER_MISC_COLOR]]\\*[$MISC_DOCCOVER_\\n+[#NEXT_MISC]]\m[]
7045 .                   rm $MISC_DOCCOVER_\\n[#NEXT_MISC]
7046 .                   rm $MISC_\\n[#NEXT_MISC]
7047 .                   br
7048 .                \}
7049 .                el \{\
7050 .                   PRINT \\*[$MISC_DOCCOVER_\\n+[#NEXT_MISC]]
7051 .                   rm $MISC_DOCCOVER_\\n[#NEXT_MISC]
7052 .                   rm $MISC_\\n[#NEXT_MISC]
7053 .                   br
7054 .                \}
7055 .\}
7056 .                rm $MISC_\\n+[#NEXT_MISC]
7057 .          \}
7058 .          el \{\
7059 .             nr #MISCS \\n[#MISC_NUM]
7060 .             sp -\\n[#MISCS]+1
7061 .             nr #NEXT_MISC 0 1
7062 .             while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
7063 .                ie \\n[#DOC_COVER_MISC_COLOR]=1 \{\
7064 .                   PRINT \m[\\*[$DOC_COVER_MISC_COLOR]]\\*[$MISC_\\n+[#NEXT_MISC]]\m[]
7065 .                   br
7066 .                \}
7067 .                el \{\
7068 .                   PRINT \\*[$MISC_\\n+[#NEXT_MISC]]
7069 .                   br
7070 .                \}
7071 .\}
7072 .          \}
7073 .       \}
7074 .       if \\n[#DOCCOVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ +1 \}
7075 .       nr #DOCCOVER_END 1
7076 .       END_COVER
7077 .    \}
7078 .\" Cover
7079 .    el \{\
7080 .       if !r#COVER_START_POS \{\
7081 .          nr #COVER_START_POS \\n[#PAGE_LENGTH]/3
7082 .       \}
7083 .       if \\n[#PRINT_STYLE]=1 \{\
7084 .          ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u*2u \}
7085 .          el \{ .vs \\n[#DOC_LEAD]u \}
7086 .       \}
7087 .       if \\n[#PRINT_STYLE]=2 \{\
7088 .          LS \\n[#DOC_LEAD]u\\*[$COVER_LEAD_ADJ]
7089 .          nr #COVER_LEAD \\n[#LEAD]
7090 .       \}
7091 .       PRINT \&
7092 .       sp |\\n[#COVER_START_POS]u-1v
7093 .       if \\n[#COVER_COLOR]=1 \{\
7094 .          nf
7095 \m[\\*[$COVER_COLOR]]
7096 .          EOL
7097 .       \}
7098 .       CENTER
7099 .       FAMILY  \\*[$COVER_TITLE_FAM]
7100 .       FT      \\*[$COVER_TITLE_FT]
7101 .       PT_SIZE \\*[$COVER_TITLE_PT_SIZE]
7102 .       LS      \\n[#COVER_LEAD]u
7103 .       if \\n[#PRINT_STYLE]=1 \{ .TYPEWRITER \}
7104 .       if \\n[#COVER_TITLE]=1 \{\
7105 .          ie \\n[#PRINT_STYLE]=1 \{\
7106 .             CAPS
7107 .             nr #ARG_NUM 0 1
7108 .             while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7109 .                UNDERSCORE "\\*[$TITLE_\\n[#ARG_NUM]]"
7110 .\}
7111 .             CAPS OFF
7112 .          \}
7113 .          el \{\
7114 .          nr #ARG_NUM 0 1
7115 .          while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7116 .             ie \\n[#COVER_TITLE_COLOR]=1 \{\
7117 .                PRINT "\m[\\*[$COVER_TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
7118 .             \}
7119 .             el \{\
7120 .                PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
7121 .             \}
7122 .\}
7123 .          \}
7124 .       \}
7125 .       if \\n[#COVER_TITLE]=2 \{\
7126 .          ie \\n[#PRINT_STYLE]=1 \{\
7127 .             CAPS
7128 .             nr #ARG_NUM 0 1
7129 .             while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
7130 .                UNDERSCORE "\\*[$DOC_TITLE_\\n[#ARG_NUM]]"
7131 .\}
7132 .             CAPS OFF
7133 .          \}
7134 .          el \{\
7135 .          nr #ARG_NUM 0 1
7136 .          while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
7137 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
7138 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_TITLE_\\n[#ARG_NUM]]\m[]
7139 .             \}
7140 .             el \{ .PRINT \\*[$DOC_TITLE_\\n[#ARG_NUM]] \}
7141 .\}
7142 .          \}
7143 .       \}
7144 .       if \\n[#COVER_TITLE]=3 \{\
7145 .          ie \\n[#PRINT_STYLE]=1 \{\
7146 .             CAPS
7147 .             PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
7148 .             CAPS OFF
7149 .          \}
7150 .          el \{\
7151 .             ie \\n[#COVER_TITLE_COLOR]=1 \{\
7152 .                PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
7153 .             \}
7154 .             el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
7155 .          \}
7156 .       \}
7157 .       if \\n[#COVER_TITLE]=4 \{\
7158 .          ie \\n[#PRINT_STYLE]=1 \{\
7159 .                ie \\n[#SINGLE_SPACE]=0 \{\
7160 .                   vs \\n[#DOC_LEAD]u/2u
7161 .                \}
7162 .                el \{\
7163 .                   vs \\n[#DOC_LEAD]u
7164 .                \}
7165 .                sp
7166 .             CAPS
7167 .             nr #ARG_NUM 0 1
7168 .             while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7169 .                UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
7170 .\}
7171 .             CAPS OFF
7172 .             if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \}
7173 .          \}
7174 .          el \{\
7175 .          nr #ARG_NUM 0 1
7176 .          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7177 .             ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
7178 .                PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
7179 .             \}
7180 .             el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
7181 .\}
7182 .          \}
7183 .       \}
7184 .       if \\n[#COVER_TITLE]=5 \{\
7185 .          ie \\n[#PRINT_STYLE]=1 \{\
7186 .             CAPS
7187 .             PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
7188 .             CAPS OFF
7189 .          \}
7190 .          el \{\
7191 .             ie \\n[#COVER_TITLE_COLOR]=1 \{\
7192 .                PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
7193 .             \}
7194 .             el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
7195 .          \}
7196 .          if !'\\*[$CHAPTER_TITLE_1]'' \{\
7197 .             ie \\n[#PRINT_STYLE]=1 \{\
7198 .                ie \\n[#SINGLE_SPACE]=0 \{\
7199 .                   vs \\n[#DOC_LEAD]u/2u
7200 .                \}
7201 .                el \{\
7202 .                   vs \\n[#DOC_LEAD]u
7203 .                \}
7204 .                sp
7205 .                nr #ARG_NUM 0 1
7206 .                while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7207 .                   UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
7208 .\}
7209 .                if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \}
7210 .             \}
7211 .             el \{\
7212 .                FAMILY  \\*[$COVER_CHAPTER_TITLE_FAM]
7213 .                FT      \\*[$COVER_CHAPTER_TITLE_FT]
7214 .                PT_SIZE \\*[$COVER_CHAPTER_TITLE_PT_SIZE]
7215 .                ALD \\n[.v]u/4u \"Put a little space before the chapter title
7216 .                nr #ARG_NUM 0 1
7217 .                while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7218 .                   ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\
7219 .                      PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
7220 .                   \}
7221 .                   el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \}
7222 .\}
7223 .             \}
7224 .          \}
7225 .       \}
7226 .       if \\n[#COVER_TITLE]=6 \{\
7227 .          ie \\n[#PRINT_STYLE]=1 \{\
7228 .             CAPS
7229 .             nr #ARG_NUM 0 1
7230 .             while \\n[#COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7231 .                UNDERSCORE "\\*[$COVER_TITLE_\\n[#ARG_NUM]]"
7232 .\}
7233 .             CAPS OFF
7234 .          \}
7235 .          el \{\
7236 .             nr #ARG_NUM 0 1
7237 .             while \\n[#COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7238 .             ie \\n[#COVER_TITLE_COLOR]=1 \{\
7239 .                PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$COVER_TITLE_\\n[#ARG_NUM]]\m[]
7240 .             \}
7241 .             el \{ .PRINT \\*[$COVER_TITLE_\\n[#ARG_NUM]] \}
7242 .\}
7243 .          \}
7244 .       \}
7245 .       if !\\n[#DOC_TYPE]=2 \{\
7246 .          if \\n[#COVER_SUBTITLE]=1 \{\
7247 .             FAMILY  \\*[$COVER_SUBTITLE_FAM]
7248 .             FT      \\*[$COVER_SUBTITLE_FT]
7249 .             PT_SIZE \\*[$COVER_SUBTITLE_PT_SIZE]
7250 .             if \\n[#PRINT_STYLE]=1 \{\
7251 .                TYPEWRITER
7252 .                if \\n[#PRINT_STYLE]=1 \{\
7253 .                   TYPEWRITER
7254 .                   ie \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \}
7255 .                   el \{ .vs \\n[#DOC_LEAD]u \}
7256 .                   sp
7257 .                \}
7258 .             \}
7259 .       if \\n[#COVER]=1 \{\
7260 .          ie !'\\*[$SUBTITLE_COVER_1]'' \{\
7261 .             nr #SUBTITLES \\n[#SUBTITLE_COVER_NUM]
7262 .             nr #NEXT_SUBTITLE 0 1
7263 .             while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
7264 .                ie \\n[#COVER_SUBTITLE_COLOR]=1 \{\
7265 .                   PRINT \m[\\*[$COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_COVER_\\n+[#NEXT_SUBTITLE]]\m[]
7266 .                \}
7267 .                el \{ .PRINT \\*[$SUBTITLE_COVER_\\n+[#NEXT_SUBTITLE]] \}
7268 .\}
7269 .          \}
7270 .          el \{\
7271 .             nr #SUBTITLES \\n[#SUBTITLE_NUM]
7272 .             nr #NEXT_SUBTITLE 0 1
7273 .             while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
7274 .                ie \\n[#COVER_SUBTITLE_COLOR]=1 \{\
7275 .                   PRINT \m[\\*[$COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]]\m[]
7276 .                \}
7277 .                el \{ .PRINT \\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]] \}
7278 .\}
7279 .          \}
7280 .       \}
7281 .             if \\n[#PRINT_STYLE]=1 \{\
7282 .                if \\n[#SINGLE_SPACE]=0 \{ .vs \}
7283 .             \}
7284 .          \}
7285 .          if \\n[#PRINT_STYLE]=1 \{\
7286 .             if !r#COVER_SUBTITLE \{ .sp \}
7287 .          \}
7288 .       \}
7289 .       if \\n[#COVER_AUTHOR]=1 \{\
7290 .          FAMILY  \\*[$COVER_AUTHOR_FAM]
7291 .          FT      \\*[$COVER_AUTHOR_FT]
7292 .          PT_SIZE \\*[$COVER_AUTHOR_PT_SIZE]
7293 .          if \\n[#PRINT_STYLE]=1 \{\
7294 .             TYPEWRITER
7295 .             ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \}
7296 .             el \{ .vs \\n[#DOC_LEAD]u/2u \}
7297 .             sp
7298 .          \}
7299 .          ie d$ATTRIBUTE_STRING_COVER \{\
7300 .             ie \\n[#COVER_ATTRIBUTE_COLOR]=1 \{\
7301 .                PRINT \&\m[\\*[$COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING_COVER]\m[]
7302 .             \}
7303 .             el \{ .PRINT \&\\*[$ATTRIBUTE_STRING_COVER] \}
7304 .          \}
7305 .          el \{\
7306 .             if d$ATTRIBUTE_STRING \{\
7307 .                ie \\n[#COVER_ATTRIBUTE_COLOR]=1 \{\
7308 .                   PRINT \&\m[\\*[$COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
7309 .                \}
7310 .                el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \}
7311 .             \}
7312 .          \}
7313 .          PRINT_AUTHORS
7314 .       \}
7315 .       FAMILY  \\*[$COVER_DOCTYPE_FAM]
7316 .       FT      \\*[$COVER_DOCTYPE_FT]
7317 .       PT_SIZE \\*[$COVER_DOCTYPE_PT_SIZE]
7318 .       SP
7319 .       if \\n[#DOC_TYPE]=3 \{\
7320 .          if \\n[#COVER_DOCTYPE]=1 \{\
7321 .             ie \\n[#PRINT_STYLE]=1 \{\
7322 .                TYPEWRITER
7323 .                vs \\n[#DOC_LEAD]u
7324 .                UNDERSCORE2 "\\*[$DOC_TYPE]"
7325 .             \}
7326 .             el \{\
7327 .                nr #FROM_COVER 1
7328 .                ie \\n[#COVER_DOCTYPE_COLOR]=1 \{\
7329 .                   COLOR \\*[$COVER_DOCTYPE_COLOR]
7330 .                   ie \\n[#COVER_UNDERLINE]= 1 \{ .UNDERSCORE \\*[$COVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \}
7331 .                   el \{ .PRINT "\\*[$DOC_TYPE] \}
7332 .                \}
7333 .                el \{\
7334 .                   ie \\n[#COVER_UNDERLINE]=1 \{ .UNDERSCORE \\*[$COVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \}
7335 .                   el \{ .PRINT "\\*[$DOC_TYPE]" \}
7336 .                \}
7337 .                rr #FROM_COVER
7338 .             \}
7339 .          \}
7340 .       \}
7341 .       sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
7342 .       ie \\n[#PRINT_STYLE]=1 \{\
7343 .          TYPEWRITER
7344 .          ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \}
7345 .          el \{ .vs \\n[#DOC_LEAD]u/2u \}
7346 .       \}
7347 .       el \{\
7348 .          FAMILY  \\*[$COVER_COPYRIGHT_FAM]
7349 .          FT      \\*[$COVER_COPYRIGHT_FT]
7350 .          AUTOLEAD 2
7351 .          PT_SIZE \\*[$COVER_COPYRIGHT_PT_SIZE]
7352 .       \}
7353 .       if \\n[#COVER_COPYRIGHT]=1 \{\
7354 .          if !'\\*[$COPYRIGHT_COVER]'' \{\
7355 .             ds $SAVED_COPYRIGHT \\*[$COPYRIGHT]
7356 .             ds $COPYRIGHT \\*[$COPYRIGHT_COVER]
7357 .          \}
7358 .          QUAD \\*[$COVER_COPYRIGHT_QUAD]
7359 .          ie \\n[#COVER_COPYRIGHT_COLOR]=1 \{\
7360 .             PRINT \m[\\*[$COVER_COPYRIGHT_COLOR]]\\*[$COPYRIGHT]\m[]
7361 .          \}
7362 .          el \{ .PRINT \\*[$COPYRIGHT] \}
7363 .          ds $COPYRIGHT \\*[$SAVED_COPYRIGHT]
7364 .       \}
7365 .       sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u
7366 .       if \\n[#COVER_MISC]=1 \{\
7367 .          QUAD \\*[$COVER_MISC_QUAD]
7368 .          ie !'\\*[$MISC_COVER_1]'' \{\
7369 .             nr #MISCS \\n[#MISC_COVER_NUM]
7370 .             sp -\\n[#MISCS]+1
7371 .             nr #NEXT_MISC 0 1
7372 .             while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
7373 .                ie \\n[#COVER_MISC_COLOR]=1 \{\
7374 .                   PRINT \m[\\*[$COVER_MISC_COLOR]]\\*[$MISC_COVER_\\n+[#NEXT_MISC]]\m[]
7375 .                   br
7376 .                \}
7377 .                el \{\
7378 .                   PRINT \\*[$MISC_COVER_\\n+[#NEXT_MISC]]
7379 .                   br
7380 .                \}
7381 .\}
7382 .          \}
7383 .          el \{\
7384 .             nr #MISCS \\n[#MISC_NUM]
7385 .             sp -\\n[#MISCS]+1
7386 .             nr #NEXT_MISC 0 1
7387 .             while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
7388 .                ie \\n[#COVER_MISC_COLOR]=1 \{\
7389 .                   PRINT \m[\\*[$COVER_MISC_COLOR]]\\*[$MISC_\\n+[#NEXT_MISC]]\m[]
7390 .                   br
7391 .                \}
7392 .                el \{\
7393 .                   PRINT \\*[$MISC_\\n+[#NEXT_MISC]]
7394 .                   br
7395 .                \}
7396 .\}
7397 .          \}
7398 .       \}
7399 .       if \\n[#COVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ +1 \}
7400 .       nr #COVER_END 1
7401 .       END_COVER
7402 .    \}
7403 .END
7404 \#
7405 \# Macro to terminate (doc)cover processing
7406 \#
7407 .MAC END_COVER END
7408 .    EOL
7409 .    TRAP
7410 .    NEWPAGE
7411 .    if \\n[#PAGINATION_WAS_ON]=1 \{ .nr % +1 \}
7412 .    if \\n[#DOCCOVER_END]=1 \{\
7413 .       ie \\n[#DOCCOVER_BLANKPAGE]=1 \{\
7414 .          NEWPAGE
7415 .          rr #DOCCOVER_BLANKPAGE
7416 .          if !\\n[#DOCCOVERS_COUNT]=1 \{ .nr % -2 \}
7417 .       \}
7418 .       el \{\
7419 .          if !\\n[#DOCCOVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ -1 \}
7420 .       \}
7421 .       rr #DOCCOVER_END
7422 .    \}
7423 .    if \\n[#COVER_END]=1 \{\
7424 .       ie \\n[#COVER_BLANKPAGE]=1 \{\
7425 .          NEWPAGE
7426 .          rr #COVER_BLANKPAGE
7427 .          if !\\n[#COVERS_COUNT]=1 \{ .nr % -2 \}
7428 .       \}
7429 .       el \{\
7430 .          if !\\n[#COVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ -1 \}
7431 .       \}
7432 .       rr #COVER_END
7433 .    \}
7434 .    ev
7435 .    if \\n[#PAGINATION_WAS_ON] \{\
7436 .       rr #PAGINATION_WAS_ON
7437 .       PAGINATE
7438 .       PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]-1
7439 .    \}
7440 .    if \\n[#HEADERS_WERE_ON] \{\
7441 .       rr #HEADERS_WERE_ON
7442 .       HEADERS
7443 .    \}
7444 .    if \\n[#FOOTERS_WERE_ON] \{\
7445 .       rr #FOOTERS_WERE_ON
7446 .       FOOTERS
7447 .    \}
7448 .    if \\n[#COLUMNS_WERE_ON]=1 \{\
7449 .       rr #COLUMNS_WERE_ON 1
7450 .       nr #COLUMNS 1
7451 .    \}
7452 .    rr #DOING_COVER
7453 .END
7454 \#
7455 \# Macro to begin document processing
7456 \#
7457 .MAC START END
7458 .    nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
7459 .    if !\\n[#PRINT_STYLE] \{\
7460 .       PRINTSTYLE TYPEWRITE
7461 .       PRINT \&
7462 .       po 6P
7463 .       ll 39P
7464 .       ta \\n(.lu
7465 .       sp |1i-1v
7466 .       CENTER
7467 .       PRINT "You neglected to enter a PRINTSTYLE"
7468 .       fl
7469 .       ab [mom]: PRINTSTYLE missing.  Aborting.
7470 .    \}
7471 .    nr #DOCS 1
7472 .    if \\n[#LINENUMBERS]=1 \{\
7473 .       NUMBER_LINES OFF
7474 .       nr #LINENUMBERS 2
7475 .    \}
7476 .    if \\n[#COLLATE] \{\
7477 .       COPYSTYLE \\*[$COPY_STYLE]
7478 .       nr #HEADERS_ON \\n[#HEADER_STATE]
7479 .       if \\n[#PAGE_NUM_V_POS]=1 \{ .nr #PAGINATE \\n[#PAGINATION_STATE] \}
7480 .       sp |\\n[#HEADER_MARGIN]u
7481 .       PRINT \&
7482 .       if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
7483 .          PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
7484 .          rm $RESTORE_PAGENUM_STYLE
7485 .       \}
7486 .    \}
7487 .    DEFAULTS
7488 .\" Quote and blockquote default leads are the same as #DOC_LEAD, so
7489 .\" they have to be set after DEFAULTS (where DOC_LEAD is finalized)
7490 .    if !r#Q_AUTOLEAD     \{ .nr #Q_LEAD \\n[#DOC_LEAD]    \}
7491 .    if !r#BQ_AUTOLEAD    \{ .nr #BQ_LEAD \\n[#DOC_LEAD]   \}
7492 .    if !r#EN_Q_AUTOLEAD  \{ .nr #EN_Q_LEAD \\n[#EN_LEAD]  \}
7493 .    if !r#EN_BQ_AUTOLEAD \{ .nr #EN_BQ_LEAD \\n[#EN_LEAD] \}
7494 .\" Covers and doc covers
7495 .    if \\n[#DOC_COVERS]=1 \{\
7496 .       if \\n[#DOC_COVER]=1 \{\
7497 .          DO_DOC_COVER
7498 .          rr #DOC_COVER
7499 .          rr #DOC_COVER_TITLE
7500 .          rr #DOC_COVER_SUBTITLE
7501 .          rr #DOC_COVER_AUTHOR
7502 .          rr #DOC_COVER_DOCTYPE
7503 .          rr #DOC_COVER_COPYRIGHT
7504 .          rr #DOC_COVER_MISC
7505 .       \}
7506 .    \}
7507 .    if \\n[#COVERS]=1 \{\
7508 .       if \\n[#COVER]=1 \{\
7509 .          DO_COVER
7510 .          rr #COVER
7511 .          rr #COVER_TITLE
7512 .          rr #COVER_SUBTITLE
7513 .          rr #COVER_AUTHOR
7514 .          rr #COVER_DOCTYPE
7515 .          rr #COVER_COPYRIGHT
7516 .          rr #COVER_MISC
7517 .       \}
7518 .    \}
7519 .\" Collate related stuff
7520 .    ie \\n[#COLLATED_DOC]=1 \{\
7521 .\" Collect TITLE for TOC.
7522 .       nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
7523 .       af #TOC_ENTRY_PN \\g[#PAGENUMBER]
7524 .       ie \\n[#USER_SET_TITLE_ITEM] \{\
7525 .          ds $TOC_TITLE_ITEM \\*[$USER_SET_TITLE_ITEM]\\|
7526 .          rr #USER_SET_TITLE_ITEM
7527 .          rm $USER_SET_TITLE_ITEM
7528 .       \}
7529 .       el \{\
7530 .          ie \\n[#DOC_TYPE]=2 \{\
7531 .             ie '\\*[$CHAPTER_TITLE]'' \{\
7532 .                ds $TOC_TITLE_ITEM \\*[$CHAPTER_STRING] \\*[$CHAPTER]\\|
7533 .             \}
7534 .             el \{\
7535 .                ie '\\*[$CHAPTER]'' \{\
7536 .                   ds $TOC_TITLE_ITEM \\*[$CHAPTER_TITLE]\\|
7537 .                \}
7538 .                el \{\
7539 .                   ds $TOC_TITLE_ITEM \\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]\\|
7540 .                \}
7541 .             \}
7542 .          \}
7543 .          el \{\
7544 .             ds $TOC_TITLE_ITEM \\*[$TITLE]\\|
7545 .          \}
7546 .       \}
7547 .       if \\n[#TOC_AUTHORS]=1 \{\
7548 .          ie '\\*[$TOC_AUTHORS]'' \{\
7549 .             as $TOC_TITLE_ITEM /\\|\\*[$AUTHOR_1]\\|
7550 .          \}
7551 .          el \{\
7552 .             as $TOC_TITLE_ITEM /\\|\\*[$TOC_AUTHORS]\\|
7553 .             rm $TOC_AUTHORS
7554 .          \}
7555 .       \}
7556 .\" Note the use of \!, which transparently embeds the macros used
7557 .\" in the TOC_ENTRIES diversion.  The elements they control must be
7558 .\" processed literally when the diversion is output.
7559 .       ev TOC_EV
7560 .       da TOC_ENTRIES
7561 .       if \\n[#PRINT_STYLE]=1 \{\
7562 \!.        fam C
7563 \!.        ft  R
7564 \!.        ps  12
7565 .       \}
7566 .       if \\n[#PRINT_STYLE]=2 \{\
7567 \!.        FAMILY  \\*[$TOC_TITLE_FAM]
7568 \!.        FT      \\*[$TOC_TITLE_FT]
7569 \!.        PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
7570 .       \}
7571 \!.     TRAP OFF
7572 \!.     PAD_MARKER ^
7573 .       ie \\n[#PRINT_STYLE]=1 \{\
7574 \!.        PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]"
7575 .       \}
7576 .       el \{\
7577 \!.        PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]"
7578 .       \}
7579 \!.     PAD_MARKER #
7580 \!.    EOL
7581 \!.    ST 100 L
7582 \!.    ST 101 R
7583 .      if \\n[#PRINT_STYLE]=2 \{\
7584 \!.       FAMILY  \\*[$TOC_PN_FAM]
7585 \!.       FT      \\*[$TOC_PN_FT]
7586 \!.       PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
7587 .      \}
7588 \!.    TAB 100
7589 \!.    PRINT \\*[LEADER]
7590 \!.    TN
7591 \!.    TRAP
7592 \!.    PRINT \\n[#TOC_ENTRY_PN]
7593 \!.    TQ
7594 .      di
7595 .      ev
7596 .    \}
7597 .    el \{\
7598 .       nr #FIRST_DOC_TITLE_PN \\n%+\\n[#PAGE_NUM_ADJ]
7599 .       af #FIRST_DOC_TITLE_PN \\g[#PAGENUMBER]
7600 .       nr #FIRST_DOC_TOC_PN_PADDING \\n[#TOC_PN_PADDING]
7601 .    \}
7602 .\" End TITLE collection
7603 .    if \\n[#PRINT_PAGENUM_ON_PAGE_1] \{\
7604 .       sp |\\n[#HEADER_MARGIN]u
7605 .       PRINT_PAGE_NUMBER
7606 .    \}
7607 .    rr #COLLATE
7608 .    rr #PAGINATION_STATE
7609 .\" End collate stuff
7610 .    ie \\n[#DOC_HEADER]=0 \{\
7611 .       PRINT \&
7612 .       if \\n[#DOC_TYPE]=4 \{\
7613 .          if !'\\n(.z'' \{ .di \}
7614 .       \}
7615 .       nr #STORED_PP_INDENT \\n[#PP_INDENT]
7616 .       PARA_INDENT 0
7617 .       PP
7618 .       PARA_INDENT \\n[#STORED_PP_INDENT]u
7619 .       rr #STORED_PP_INDENT
7620 .       ie r#ADVANCE_FROM_TOP \{\
7621 .          sp |\\n[#ADVANCE_FROM_TOP]u-1v
7622 .          if \\n[#ADJ_DOC_LEAD]=1 \{ .SHIM \}
7623 .       \}
7624 .       el \{ .sp |\\n[#T_MARGIN]u-1v \}
7625 .       if \\n[#COLUMNS] \{\
7626 .          mk dc
7627 .          nr #COL_NUM 0 1
7628 .          po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
7629 .          nr #L_MARGIN \\n(.o
7630 .          ll \\n[#COL_L_LENGTH]u
7631 .       \}
7632 .       nr #PP 0
7633 .    \}
7634 .    el \{\
7635 .       if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ] \}
7636 .       nr #DOCHEADER_LEAD \\n[#LEAD]
7637 .\" Default
7638 .       if \\n[#DOC_TYPE]=1 \{\
7639 .          PRINT \&
7640 .          sp |\\n[#DOCHEADER_ADVANCE]u-1v
7641 .          ev DOCHEADER
7642 .          if \\n[#DOCHEADER_COLOR]=1 \{\
7643 .             nf
7644 \m[\\*[$DOCHEADER_COLOR]]
7645 .             EOL
7646 .          \}
7647 .          L_MARGIN \\n[#DOC_L_MARGIN]u
7648 .          LL       \\n[#DOC_L_LENGTH]u
7649 .          ta \\n(.lu
7650 .          if \\n[#PRINT_STYLE]=1 \{\
7651 .             CENTER
7652 .             TYPEWRITER
7653 .             if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \}
7654 .             if !'\\*[$TITLE_1]'' \{\
7655 .                CAPS
7656 .                nr #ARG_NUM 0 1
7657 .                while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7658 .                   UNDERSCORE 4p "\\*[$TITLE_\\n[#ARG_NUM]]"
7659 .\}
7660 .                CAPS OFF
7661 .             \}
7662 .             if !'\\*[$SUBTITLE]'' \{\
7663 .                sp
7664 .                nr #ARG_NUM 0 1
7665 .                while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
7666 .                   UNDERSCORE 4p "\\*[$SUBTITLE_\\n[#ARG_NUM]]"
7667 .\}
7668 .             \}
7669 .             if !'\\*[$AUTHOR_1]'' \{\
7670 .                sp
7671 .                PRINT \&\\*[$ATTRIBUTE_STRING]
7672 .                nr #AUTHORS \\n[#AUTHOR_NUM]
7673 .                nr #NEXT_AUTHOR 0 1
7674 .                while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
7675 .                   PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
7676 .\}
7677 .             \}
7678 .          \}
7679 .          if \\n[#PRINT_STYLE]=2 \{\
7680 .             DEFAULT_DOCHEADER
7681 .          \}
7682 .          ev
7683 .       \}
7684 .\" Chapter
7685 .       if \\n[#DOC_TYPE]=2 \{\
7686 .          PRINT \&
7687 .          sp |\\n[#DOCHEADER_ADVANCE]u-1v
7688 .          ev DOCHEADER
7689 .          if \\n[#DOCHEADER_COLOR]=1 \{\
7690 .             nf
7691 \m[\\*[$DOCHEADER_COLOR]]
7692 .             EOL
7693 .          \}
7694 .          L_MARGIN \\n[#DOC_L_MARGIN]u
7695 .          LL       \\n[#DOC_L_LENGTH]u
7696 .          ta \\n(.lu
7697 .          if \\n[#PRINT_STYLE]=1 \{\
7698 .             CENTER
7699 .             TYPEWRITER
7700 .             vs \\n[#DOC_LEAD]u
7701 .             if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \}
7702 .             ie '\\*[$CHAPTER]'' \{\
7703 .                CAPS
7704 .                ie !'\\*[$CHAPTER_TITLE]'' \{\
7705 .                   nr #ARG_NUM 0 1
7706 .                   while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7707 .                      UNDERSCORE 4p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
7708 .\}
7709 .                \}
7710 .                el \{\
7711 .                   CAPS
7712 .                   UNDERSCORE 4p "\\*[$CHAPTER_STRING]"
7713 .                \}
7714 .                CAPS OFF
7715 .                RLD 1v
7716 .             \}
7717 .             el \{\
7718 .                CAPS
7719 .                PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
7720 .                CAPS OFF
7721 .                if !'\\*[$CHAPTER_TITLE]'' \{\
7722 .                   sp
7723 .                   nr #ARG_NUM 0 1
7724 .                   while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7725 .                      UNDERSCORE 4p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
7726 .\}
7727 .                \}
7728 .                RLD 1v
7729 .             \}
7730 .             if \\n[#SINGLE_SPACE] \{ .ALD 2v \}
7731 .          \}
7732 .          if \\n[#PRINT_STYLE]=2 \{\
7733 .             CHAPTER_DOCHEADER
7734 .             di DOCHEADER_DIVERSION \" This diversion is only
7735 .             br                     \" necessary to find the depth of the
7736 .             CHAPTER_DOCHEADER      \" docheader
7737 .             br
7738 .             di
7739 .             nr #DOCHEADER_DEPTH \\n(dn-\\n[#DOCHEADER_LEAD] \" Storing the depth (height) of the diversion
7740 .                                                             \" in #DOCHEADER_DEPTH
7741 .             rm DOCHEADER_DIVERSION                          \" Removing the diversion macro
7742 .          \}
7743 .          ev
7744 .       \}
7745 .\" Named
7746 .       if \\n[#DOC_TYPE]=3 \{\
7747 .          PRINT \&
7748 .          sp |\\n[#DOCHEADER_ADVANCE]u-1v
7749 .          ev DOCHEADER
7750 .          if \\n[#DOCHEADER_COLOR]=1 \{\
7751 .             nf
7752 \m[\\*[$DOCHEADER_COLOR]]
7753 .             EOL
7754 .          \}
7755 .          L_MARGIN \\n[#DOC_L_MARGIN]u
7756 .          LL       \\n[#DOC_L_LENGTH]u
7757 .          ta \\n(.lu
7758 .          if \\n[#PRINT_STYLE]=1 \{\
7759 .             CENTER
7760 .             TYPEWRITER
7761 .             if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \}
7762 .             CAPS
7763 .             if !'\\*[$TITLE]'' \{\
7764 .                nr #ARG_NUM 0 1
7765 .                while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
7766 .                   UNDERSCORE 4p "\\*[$TITLE_\\n[#ARG_NUM]]"
7767 .\}
7768 .             \}
7769 .             CAPS OFF
7770 .             if !'\\*[$SUBTITLE]'' \{\
7771 .                sp
7772 .                nr #ARG_NUM 0 1
7773 .                while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
7774 .                   UNDERSCORE 4p "\\*[$SUBTITLE_\\n[#ARG_NUM]]"
7775 .\}
7776 .             \}
7777 .             if !'\\*[$AUTHOR_1]'' \{\
7778 .                sp
7779 .                PRINT \&\\*[$ATTRIBUTE_STRING]
7780 .                nr #AUTHORS \\n[#AUTHOR_NUM]
7781 .                nr #NEXT_AUTHOR 0 1
7782 .                while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
7783 .                   PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
7784 .\}
7785 .             \}
7786 .             ie \\n[#SINGLE_SPACE]=0 \{ .sp 2 \}
7787 .             el \{ .sp \}
7788 .             UNDERSCORE2 4p "\\*[$DOC_TYPE]"
7789 .             if \\n[#SINGLE_SPACE]=1 \{ .sp \}
7790 .          \}
7791 .          if \\n[#PRINT_STYLE]=2 \{\
7792 .             NAMED_DOCHEADER
7793 .          \}
7794 .          ev
7795 .       \}
7796 .       if !\\n[#DOC_TYPE]=4 \{\
7797 .          if \\n[#PRINT_STYLE]=1 \{\
7798 .             sp
7799 .          \}
7800 .          if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#DOC_LEAD]u*2u \}
7801 .          if \\n[#COLUMNS] \{\
7802 .             nr #COL_NUM 0 1
7803 .             nr #L_LENGTH_FOR_EPI \\n[#L_LENGTH]
7804 .             po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
7805 .             nr #L_MARGIN \\n(.o
7806 .             LL \\n[#COL_L_LENGTH]u
7807 .             ta \\n(.lu
7808 .             mk dc
7809 .          \}
7810 .       \}
7811 .    \}
7812 .    LS \\n[#DOC_LEAD]u
7813 .    if \\n[#ADJ_DOC_LEAD]=1 \{\
7814 .       ie !r#ADVANCE_FROM_TOP \{\
7815 .          if \\n[#DOC_HEADER]=1 \{ .SHIM \}
7816 .       \}
7817 .       el \{ .rr #ADVANCE_FROM_TOP \}
7818 .    \}
7819 .    QUAD \\*[$DOC_QUAD]
7820 .    CLEANUP_DEFAULTS
7821 .    nr #START_FOR_FOOTERS 1
7822 .    if \\n[#COLLATED_DOC]=1 \{\
7823 .       if !\\n[MNinit_DEFERRED]=1 \{\
7824 .          MN_INIT rerun
7825 .       \}
7826 .    \}
7827 .    if \\n[#MNinit_DEFERRED]=1 \{\
7828 .       rr #MNinit_DEFERRED
7829 .       nr #START_FOR_MNinit 1
7830 .       MN_INIT \\*[$MN-arg1] \\*[$MN-arg2] \\*[$MN-arg3] \\*[$MN-arg4] \\*[$MN-arg5] \\*[$MN-arg6] \\*[$MN-arg7] \\*[$MN-arg8] \\*[$MN-arg9]
7831 .    \}
7832 .    nr #START_FOR_MNinit 2
7833 .    if !\\n[#DOC_TYPE]=4 \{ .em TERMINATE \}
7834 .    if \\n[#LINENUMBERS]=2 \{\
7835 .       NUMBER_LINES RESUME
7836 .       nr #LINENUMBERS 1
7837 .    \}
7838 .    if \\n[#RUN_ON]=1 \{\
7839 .       if \\n[#FN_MARKER_STYLE]=1 \{ .RUNON_WARNING \}
7840 .       if \\n[#FN_MARKER_STYLE]=2 \{ .RUNON_WARNING \}
7841 .    \}
7842 .END
7843 \#
7844 .MAC CLEANUP_DEFAULTS END
7845 .    nr #START 1
7846 .\" Family strings for docheader
7847 .    rm $AUTHOR_FAM
7848 .    rm $CHAPTER_TITLE_FAM
7849 .    rm $DOCTYPE_FAM
7850 .    rm $SUBTITLE_FAM
7851 .    rm $TITLE_FAM
7852 .\" Family strings for cover
7853 .    rm $COVER_AUTHOR_FAM
7854 .    rm $COVER_CHAPTER_TITLE_FAM
7855 .    rm $COVER_COPYRIGHT_FAM
7856 .    rm $COVER_DOCTYPE_FAM
7857 .    rm $COVER_LEAD_ADJ
7858 .    rm $COVER_SUBTITLE_FAM
7859 .    rm $COVER_TITLE_FAM
7860 .\" Family strings for doc cover
7861 .    rm $DOC_COVER_AUTHOR_FAM
7862 .    rm $DOC_COVER_CHAPTER_TITLE_FAM
7863 .    rm $DOC_COVER_COPYRIGHT_FAM
7864 .    rm $DOC_COVER_DOCTYPE_FAM
7865 .    rm $DOC_COVER_LEAD_ADJ
7866 .    rm $DOC_COVER_SUBTITLE_FAM
7867 .    rm $DOC_COVER_TITLE_FAM
7868 .\" Quad args to copyright and misc
7869 .    rm $COVER_COPYRIGHT_QUAD
7870 .    rm $COVER_MISC_QUAD
7871 .    rm $DOC_COVER_COPYRIGHT_QUAD
7872 .    rm $DOC_COVER_MISC_QUAD
7873 .\" Miscellaneous strings
7874 .    rm $TOC_TITLE_ITEM
7875 .    rm $DOCHEADER_LEAD_ADJ
7876 .\" Various registers
7877 .    rr #ADJ_DOC_LEAD
7878 .    rr #ADVANCE_FROM_TOP
7879 .    rr #COVER_LEAD
7880 .    rr #DEPTH_1
7881 .    rr #DEPTH_2
7882 .    rr #DOC_COVER_LEAD
7883 .    if \\n[#DOC_HEADER]=1 \{ .nr #DOC_HEADER 2 \}
7884 .    rr #DOCHEADER_ADVANCE
7885 .    rr #DOCHEADER_EXTRA_SPACE
7886 .    rr #DOCHEADER_LEAD
7887 .    rr #DOCHEADER_SPACE_ADJ
7888 .    rr #MISC_NUM
7889 .    rr #MISCS
7890 .    rr #NEXT_AUTHOR
7891 .    rr #NEXT_MISC
7892 .END
7893 \#
7894 \# ====================================================================
7895 \#
7896 \# +++MACROS TO CHANGE SOME DEFAULTS+++
7897 \#
7898 \# DOCUMENT HEADER
7899 \# ---------------
7900 \# *Argument:
7901 \#   <none> | <anything> [distance to advance from top of page]
7902 \# *Function:
7903 \#   Turns printing of document header on or off.  If a second argument
7904 \#   in units of measure is given, advances that distance from the
7905 \#   top of the page without printing the document header.
7906 \# *Notes:
7907 \#   Default is on.  If the 1st argument is <anything> (which turns
7908 \#   document headers off), the optional 2nd argument may be given
7909 \#   (with a unit of measure).
7910 \#
7911 .MAC DOCHEADER END
7912 .    ie '\\$1'' \{ .nr #DOC_HEADER 1 \}
7913 .    el \{\
7914 .       if !'\\$2'' \{ .nr #ADVANCE_FROM_TOP (\\$2) \}
7915 .       nr #DOC_HEADER 0
7916 .    \}
7917 .END
7918 \#
7919 \#
7920 \# DOCUMENT HEADER LEADING
7921 \# -----------------------
7922 \# *Arguments:
7923 \#   <+|- amount by which to in/decrease leading of doc header>
7924 \# *Function:
7925 \#   Stores user supplied lead in/decrease in string $DOCHEADER_LEAD_ADJ.
7926 \# *Notes:
7927 \#   A unit of measure must be supplied.  Decimal fractions OK.
7928 \#   Default is +0, i.e. same as DOC_LEAD.
7929 \#
7930 .MAC DOCHEADER_LEAD END
7931 .    ds $DOCHEADER_LEAD_ADJ \\$1
7932 .END
7933 \#
7934 \#
7935 \# DOCHEADER ADVANCE
7936 \# -----------------
7937 \# *Arguments:
7938 \#   <docheader start position>
7939 \# *Function:
7940 \#   Creates register #DOCHEADER_ADVANCE, used in START.
7941 \# *Notes:
7942 \#   Unit of measure required.
7943 \#   Default is same as T_MARGIN.
7944 \#
7945 .MAC DOCHEADER_ADVANCE END
7946 .    nr #DOCHEADER_ADVANCE (\\$1)
7947 .END
7948 \#
7949 \#
7950 \# DOCUMENT LEFT MARGIN
7951 \# --------------------
7952 \# *Argument:
7953 \#   <left margin of document>
7954 \# *Function:
7955 \#   Creates or modifies register #DOC_L_MARGIN.
7956 \# *Notes:
7957 \#   Affects EVERYTHING on the page.
7958 \#
7959 .MAC DOC_LEFT_MARGIN END
7960 .    br
7961 .    nr #DOC_L_MARGIN (\\$1)
7962 .    L_MARGIN \\n[#DOC_L_MARGIN]u
7963 .END
7964 \#
7965 \#
7966 \# DOCUMENT RIGHT MARGIN
7967 \# ---------------------
7968 \# *Argument:
7969 \#   <right margin of document>
7970 \# *Function:
7971 \#   Creates or modifies register #DOC_R_MARGIN.
7972 \# *Notes:
7973 \#   Affects EVERYTHING on the page.
7974 \#
7975 .MAC DOC_RIGHT_MARGIN END
7976 .    br
7977 .    nr #DOC_R_MARGIN (\\$1)
7978 .    R_MARGIN \\n[#DOC_R_MARGIN]
7979 .    nr #DOC_L_LENGTH \\n[#L_LENGTH]
7980 .END
7981 \#
7982 \#
7983 \# DOCUMENT LINE LENGTH
7984 \# --------------------
7985 \# *Argument:
7986 \#   <line length of document>
7987 \# *Function:
7988 \#   Creates or modifies string $DOC_L_LENGTH.
7989 \# *Notes:
7990 \#   Affects EVERYTHING on the page.
7991 \#
7992 .MAC DOC_LINE_LENGTH END
7993 .    br
7994 .    nr #DOC_L_LENGTH (\\$1)
7995 .    LL \\n[#DOC_L_LENGTH]u
7996 .    ta \\n(.lu
7997 .END
7998 \#
7999 \#
8000 \# DOCUMENT FAMILY
8001 \# ---------------
8002 \# *Argument:
8003 \#   <family of running text>
8004 \# *Function:
8005 \#   Creates or modifies string $DOC_FAM.
8006 \# *Notes:
8007 \#   Affects everything EXCEPT headers and footers.
8008 \#
8009 .MAC DOC_FAMILY END
8010 .    br
8011 .    ds $DOC_FAM       \\$1
8012 .    ds $FAMILY        \\*[$DOC_FAM]
8013 .    AUTHOR_FAMILY     \\*[$DOC_FAM]
8014 .    BLOCKQUOTE_FAMILY \\*[$DOC_FAM]
8015 .    DOCHEADER_FAMILY  \\*[$DOC_FAM]
8016 .    DOCTYPE_FAMILY    \\*[$DOC_FAM]
8017 .    EPIGRAPH_FAMILY   \\*[$DOC_FAM]
8018 .    FOOTNOTE_FAMILY   \\*[$DOC_FAM]
8019 .    HDRFTR_FAMILY     \\*[$DOC_FAM]
8020 .    HEAD_FAMILY       \\*[$DOC_FAM]
8021 .    LINENUMBER_FAMILY \\*[$DOC_FAM]
8022 .    PARAHEAD_FAMILY   \\*[$DOC_FAM]
8023 .    QUOTE_FAMILY      \\*[$DOC_FAM]
8024 .    SUBHEAD_FAMILY    \\*[$DOC_FAM]
8025 .    SUBTITLE_FAMILY   \\*[$DOC_FAM]
8026 .    TITLE_FAMILY      \\*[$DOC_FAM]
8027 .END
8028 \#
8029 \#
8030 \# DOCUMENT POINT SIZE
8031 \# -------------------
8032 \# *Argument:
8033 \#   <point size of running text>
8034 \# *Function:
8035 \#   Creates or modifies register #DOC_PT_SIZE.
8036 \# *Notes:
8037 \#   DOC_PT_SIZE is the basis for calculating all type sizes in
8038 \#   a document.
8039 \#
8040 .MAC DOC_PT_SIZE END
8041 .    if \\n[#IGNORE] \{ .return \}
8042 .    br
8043 .    PT_SIZE \\$1
8044 .    nr #DOC_PT_SIZE \\n[#PT_SIZE]
8045 .END
8046 \#
8047 \#
8048 \# DOCUMENT LEAD
8049 \# -------------
8050 \# *Argument:
8051 \#   <lead (".vs") of running text> [ADJUST]
8052 \# *Function:
8053 \#   Creates or modifies register #DOC_LEAD.  If the optional
8054 \#   ADJUST argument is given, adjusts leading so that the last
8055 \#   line of text falls exactly on #B_MARGIN.
8056 \# *Notes:
8057 \#   DOC_LEAD is the basis for calculating all leading changes in
8058 \#   a document.  Default for TYPESET is 16; 24 for TYPEWRITE.
8059 \#
8060 \#   Because the visible bottom or footer margin of a page depends
8061 \#   on the overall document lead supplied by the register #DOC_LEAD,
8062 \#   DOC_LEAD, in the body of a document, should always be associated
8063 \#   with the start of a new page (in other words, just before or
8064 \#   just after a manual NEWPAGE).
8065 \#
8066 .MAC DOC_LEAD END
8067 .    if \\n[#IGNORE] \{ .return \}
8068 .    br
8069 .    vs \\$1
8070 .    nr #DOC_LEAD \\n[#LEAD]
8071 .    if '\\$2'ADJUST' \{ .TRAPS \}
8072 .END
8073 \#
8074 \#
8075 \# ADJUST DOCUMENT LEAD
8076 \# --------------------
8077 \# *Arguments:
8078 \#   <none> | <anything>
8079 \# *Function:
8080 \#   Adjusts document lead so that the last line of text falls exactly
8081 \#   on #B_MARGIN.
8082 \#
8083 .MAC DOC_LEAD_ADJUST END
8084 .    ie '\\$1'' \{\
8085 .       nr #ADJ_DOC_LEAD 1
8086 .       rr #DOC_LEAD_ADJUST_OFF
8087 .    \}
8088 .    el \{\
8089 .       nr #ADJ_DOC_LEAD 0
8090 .       nr #DOC_LEAD_ADJUST_OFF 1
8091 .    \}
8092 .END
8093 \#
8094 \#
8095 \# SHIM
8096 \# ----
8097 \# *Argument:
8098 \#   None
8099 \# *Function:
8100 \#   Advances to the next "valid" baseline.
8101 \# *Notes:
8102 \#   If a user plays around with spacing in a doc (say, with ALD),
8103 \#   it isn't easy to get mom back on track so she can achieve
8104 \#   perfectly flush bottom margins.  Any time SHIM is used, it
8105 \#   ensures that the next output line falls on a valid baseline.
8106 \#
8107 \# First, a little convenience macro
8108 \#
8109 .MAC PROCESS_SHIM END
8110 .    while \\n+[#VALID_BASELINE]<\\n[#CURRENT_V_POS] \{\
8111 .
8112 .\}
8113 .    nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
8114 .END
8115 \#
8116 \# And a macro to disable SHIM (useful sometimes with QUOTE and
8117 \# BLOCKQUOTE)
8118 \#
8119 .MAC NO_SHIM END
8120 .    ie '\\$1'' \{ .nr #NO_SHIM 1 \}
8121 .    el         \{ .rr #NO_SHIM   \}
8122 .END
8123 \#
8124 .MAC SHIM END
8125 .    ie r#NO_SHIM \{ .return \}
8126 .    el \{\
8127 .       nr #VALID_BASELINE \\n[#T_MARGIN]-1v \\n[#DOC_LEAD]
8128 .       if !r#CURRENT_V_POS \{ .nr #CURRENT_V_POS \\n(.d \}
8129 .       ie r#ADVANCE_FROM_TOP \{\
8130 .          ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\
8131 .             while \\n-[#VALID_BASELINE]>\\n[#CURRENT_V_POS] \{\
8132 .
8133 .\}
8134 .             nr #VALID_BASELINE +\\n[#DOC_LEAD]
8135 .             nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
8136 .          \}
8137 .          el \{\
8138 .             PROCESS_SHIM
8139 .          \}
8140 .       \}
8141 .       el \{\
8142 .          PROCESS_SHIM
8143 .       \}
8144 .       ALD \\n[#SHIM]u
8145 .       rr #CURRENT_V_POS
8146 .    \}
8147 .END
8148 \#
8149 \#
8150 \#
8151 \# ====================================================================
8152 \#
8153 \# +++INTERNATIONALIZATION+++
8154 \#
8155 \# ATTRIBUTE STRING
8156 \# ----------------
8157 \# *Argument:
8158 \#   <what goes in the "by" slot before author in the document header>
8159 \# *Function:
8160 \#   Creates or modifies string $ATTRIBUTE_STRING.
8161 \# *Notes:
8162 \#   Default is "by".  A blank string ("") may be used if no
8163 \#   attribution is desired.
8164 \#
8165 .MAC ATTRIBUTE_STRING END
8166 .    if !'\\$1'DOC_COVER' \{\
8167 .       if !'\\$1'COVER' \{ .nr #NEITHER 1 \}
8168 .    \}
8169 .    if !'\\$1'COVER' \{\
8170 .       if !'\\$1'DOC_COVER' \{ .nr #NEITHER 1 \}
8171 .    \}
8172 .    if '\\$1'DOC_COVER' \{\
8173 .       ds $ATTRIBUTE_STRING_DOCCOVER \\$2
8174 .    \}
8175 .    if '\\$1'COVER' \{\
8176 .       ds $ATTRIBUTE_STRING_COVER \\$2
8177 .    \}
8178 .    if \\n[#NEITHER]=1 \{\
8179 .       ds $ATTRIBUTE_STRING \\$1
8180 .       rr #NEITHER
8181 .    \}
8182 .END
8183 \#
8184 \#
8185 \# CHAPTER STRING
8186 \# --------------
8187 \# *Argument:
8188 \#   <what to print any time the word "chapter" is required>
8189 \# *Function:
8190 \#   Creates or modifies string $CHAPTER_STRING.
8191 \# *Notes:
8192 \#   Default is "chapter".
8193 \#
8194 .MAC CHAPTER_STRING END
8195 .    ds $CHAPTER_STRING \\$1
8196 .END
8197 \#
8198 \#
8199 \# DRAFT STRING
8200 \# ------------
8201 \# *Argument:
8202 \#   <what to print any time the word "draft" is required>
8203 \# *Function:
8204 \#   Creates or modifies string $DRAFT_STRING.
8205 \# *Notes:
8206 \#   Default is "draft".
8207 \#
8208 .MAC DRAFT_STRING END
8209 .    ds $DRAFT_STRING \\$1
8210 .END
8211 \#
8212 \#
8213 \# REVISION STRING
8214 \# ---------------
8215 \# *Argument:
8216 \#   <what to print any time the word "revision" is required>
8217 \# *Function:
8218 \#   Creates or modifies string $REVISION_STRING.
8219 \# *Notes:
8220 \#   Default is "revision".
8221 \#
8222 .MAC REVISION_STRING END
8223 .    ds $REVISION_STRING \\$1
8224 .END
8225 \#
8226 \#
8227 \# FINIS STRING
8228 \# ------------
8229 \# *Argument:
8230 \#   <what to print with the finis macro>
8231 \# *Function:
8232 \#   Creates or modifies string $FINIS_STRING.
8233 \# *Notes:
8234 \#   Default is "END".
8235 \#
8236 .MAC FINIS_STRING END
8237 \#.    if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS \}
8238 .    ds $FINIS_STRING \\$1
8239 \#.    if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS OFF \}
8240 .END
8241 \#
8242 .MAC FINIS_STRING_CAPS END
8243 .    ie '\\$1'' \{ .nr #FINIS_STRING_CAPS 1 \}
8244 .    el \{ .nr #FINIS_STRING_CAPS 0 \}
8245 .END
8246 \#
8247 \# ====================================================================
8248 \#
8249 \# +++RECTO/VERSO+++
8250 \#
8251 \# RECTO_VERSO
8252 \# -----------
8253 \# *Arguments:
8254 \#   <none> | <anything>
8255 \# *Function:
8256 \#   Switches HDRFTR_LEFT and HDRFTR_RIGHT on alternate pages.  Also
8257 \#   switches page numbers left and right if either is chosen rather
8258 \#   than the default centered page numbers.  Switches left and right
8259 \#   margins if differing values have been entered.
8260 \# *Notes:
8261 \#   Default is OFF.
8262 \#
8263 .MAC RECTO_VERSO END
8264 .    ie '\\$1'' \{ .nr #RECTO_VERSO 1 \}
8265 .    el \{ .nr #RECTO_VERSO 0 \}
8266 .END
8267 \#
8268 \# ====================================================================
8269 \#
8270 \# +++EPIGRAPHS+++
8271 \#
8272 \# EPIGRAPH INDENT
8273 \# ---------------
8274 \# *Argument:
8275 \#   <value by which to multiply PP_INDENT for block epigraphs>
8276 \# *Function:
8277 \#   Creates or modifies register #EPI_OFFSET_VALUE.
8278 \# *Notes:
8279 \#   Default is 2 for TYPEWRITE, 3 for TYPESET.
8280 \#
8281 .MAC EPIGRAPH_INDENT END
8282 .    if r#EPI_OFFSET_VALUE        \{ .rr #EPI_OFFSET_VALUE \}
8283 .    if !'\\*[$EPI_OFFSET_VALUE]'' \{ .rm $EPI_OFFSET_VALUE \}
8284 .    ds $EVAL_EI_ARG \\$1
8285 .    substring $EVAL_EI_ARG -1
8286 .    ie \B'\\*[$EVAL_EI_ARG]' \{\
8287 .       nr #EPI_OFFSET_VALUE \\$1
8288 .    \}
8289 .    el \{\
8290 .       ds $EPI_OFFSET_VALUE \\$1
8291 .    \}
8292 .    rm $EVAL_EI_ARG
8293 .END
8294 \#
8295 \#
8296 \# EPIGRAPH AUTOLEAD
8297 \# -----------------
8298 \# *Argument:
8299 \#   <amount of lead to add to the epigraph ps for epigraph leading>
8300 \# *Function:
8301 \#   Creates or modifies register #EPI_AUTOLEAD.
8302 \# *Notes:
8303 \#   Default is 2 (for TYPESET; TYPEWRITE doesn't require this).
8304 \#
8305 .MAC EPIGRAPH_AUTOLEAD END
8306 .    nr #EPI_AUTOLEAD \\$1
8307 .END
8308 \#
8309 \#
8310 \# EPIGRAPH
8311 \# --------
8312 \# *Arguments:
8313 \#   BLOCK | <anything>
8314 \# *Function:
8315 \#   Places an epigraph before the document's text, after the
8316 \#   document header, or after a HEAD.
8317 \# *Notes:
8318 \#   #EPIGRAPH 1 = centered; 2 = block
8319 \#
8320 \#   By default, epigraphs are centered, allowing the user
8321 \#   to input them on a line per line basis.  To change this
8322 \#   behaviour, the user can supply the argument BLOCK, which
8323 \#   will produce indented, filled text similar to BLOCKQUOTE.
8324 \#
8325 \#   If a block epigraph contains more than one para, ALL paras of
8326 \#   the epigraph must be preceded by PP.  Otherwise, PP is optional.
8327 \#
8328 .MAC EPIGRAPH END
8329 .    nr #PP_STYLE 2
8330 .    nr #Q_PP     0
8331 .    if \\n[#LINENUMBERS]=1 \{\
8332 .       NUMBER_LINES OFF
8333 .       nr #LINENUMBERS 2
8334 .    \}
8335 .    if \\n[#START] \{\
8336 .       if \\n[#PRINT_STYLE]=1 \{\
8337 .          if \\n[#AUTHOR_LINES]=1 \{ .ALD \\n[#DOC_LEAD]u \}
8338 .       \}
8339 .    \}
8340 .    ie '\\$1'' \{\
8341 .       nr #EPIGRAPH 1
8342 .       ev EPIGRAPH
8343 .       nr #IN_DIVER 1
8344 .       ll \\n[#L_LENGTH]u
8345 .       ta \\n(.lu
8346 .       CHECK_INDENT
8347 .       if \\n[#COLUMNS] \{\
8348 .          ie \\n[#START] \{\
8349 .              ll \\n[#DOC_L_LENGTH]u
8350 .              ta \\n(.lu
8351 .          \}
8352 .          el \{\
8353 .             ll \\n[#COL_L_LENGTH]u
8354 .             ta \\n(.lu
8355 .          \}
8356 .       \}
8357 .       CENTER
8358 .       if \\n[#PRINT_STYLE]=1 \{\
8359 .          fam C
8360 .          ft  R
8361 .          if '\\*[$EPI_FT]'I' \{\
8362 .             FT I
8363 .          \}
8364 .          ps  12
8365 .          ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
8366 .          el \{ .vs  \\n[#DOC_LEAD]u/2u \}
8367 .          nr #EPI_LEAD      \\n[#LEAD]
8368 .          nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
8369 .       \}
8370 .       if \\n[#PRINT_STYLE]=2 \{\
8371 .          FAMILY   \\*[$EPI_FAM]
8372 .          FT       \\*[$EPI_FT]
8373 .          PT_SIZE  \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
8374 .          if \\n[#EPI_COLOR]=1 \{\
8375 .             nf
8376 \m[\\*[$EPI_COLOR]]
8377 .             EOL
8378 .          \}
8379 .          AUTOLEAD \\n[#EPI_AUTOLEAD]
8380 .          nr #EPI_LEAD      \\n[#LEAD]
8381 .          nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
8382 .       \}
8383 .       di EPI_TEXT
8384 .       nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
8385 .       HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
8386 .       hy 14
8387 .       nr #EPI_ACTIVE 1
8388 .    \}
8389 .    el \{\
8390 .       ie '\\$1'BLOCK' \{\
8391 .          nr #EPIGRAPH 2
8392 .          ev EPIGRAPH
8393 .          ie \\n[#START] \{\
8394 .             ie \\n[#COLUMNS] \{\
8395 .                ie r#EPI_OFFSET_VALUE \{\
8396 .                   ll \\n[#L_LENGTH_FOR_EPI]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
8397 .                \}
8398 .                el \{\
8399 .                   ll \\n[#L_LENGTH_FOR_EPI]u-(\\*[$EPI_OFFSET_VALUE]u*2u)
8400 .                \}
8401 .                ta \\n(.lu
8402 .             \}
8403 .             el \{\
8404 .                ie r#EPI_OFFSET_VALUE \{\
8405 .                   ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
8406 .                \}
8407 .                el \{\
8408 .                   ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
8409 .                \}
8410 .                ta \\n(.lu
8411 .             \}
8412 .          \}
8413 .          el \{\
8414 .             ie r#EPI_OFFSET_VALUE \{\
8415 .                ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
8416 .             \}
8417 .             el \{\
8418 .                ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
8419 .             \}
8420 .             ta \\n(.lu
8421 .             if \\n[#COLUMNS] \{\
8422 .                ie r#EPI_OFFSET_VALUE \{\
8423 .                   ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
8424 .                \}
8425 .                el \{\
8426 .                   ll \\n[#COL_L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u)
8427 .                \}
8428 .                ta \\n(.lu
8429 .             \}
8430 .             CHECK_INDENT
8431 .          \}
8432 .          if \\n[#PRINT_STYLE]=1 \{\
8433 .             fam C
8434 .             ft  R
8435 .             if '\\*[$EPI_FT]'I' \{\
8436 .                FT I
8437 .             \}
8438 .             ps  12
8439 .             ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
8440 .             el \{ .vs  \\n[#DOC_LEAD]u/2u \}
8441 .             QUAD LEFT
8442 .             HY OFF
8443 .             nr #EPI_LEAD \\n[#LEAD]
8444 .             nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
8445 .             di EPI_TEXT
8446 .             nr #EPI_ACTIVE 1
8447 .          \}
8448 .          if \\n[#PRINT_STYLE]=2 \{\
8449 .             FAMILY   \\*[$EPI_FAM]
8450 .             FT       \\*[$EPI_FT]
8451 .             PT_SIZE  \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
8452 .          if \\n[#EPI_COLOR]=1 \{\
8453 .             nf
8454 \m[\\*[$EPI_COLOR]]
8455 .             EOL
8456 .          \}
8457 .             AUTOLEAD \\n[#EPI_AUTOLEAD]
8458 .             QUAD     \\*[$EPI_QUAD]
8459 .             nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
8460 .             HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
8461 .             hy 14
8462 .             nr #EPI_LEAD \\n[#LEAD]
8463 .             nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
8464 .             di EPI_TEXT
8465 .             nr #EPI_ACTIVE 1
8466 .          \}
8467 .       \}
8468 .       el \{\
8469 .          DO_EPIGRAPH
8470 .       \}
8471 .    \}
8472 .END
8473 \#
8474 \#
8475 \# DO EPIGRAPH
8476 \# -----------
8477 \# *Arguments:
8478 \#   <none>
8479 \# *Function:
8480 \#   Ends diversion started in EPIGRAPH.  Makes spacing
8481 \#   adjustments to compensate for the difference between epigraph
8482 \#   leading and overall document leading, so that the bottom of
8483 \#   the pages remain flush.
8484 \# *Notes:
8485 \#   In addition to its usual place at the beginning of a
8486 \#   document, EPIGRAPH may also be used after HEAD.
8487 \#
8488 .MAC DO_EPIGRAPH END
8489 .    br
8490 .    di
8491 .    rr #IN_DIVER
8492 .    if \\n[#RESET_FN_COUNTERS]=2 \{\
8493 .       if !\\n[#FN_COUNT]=1 \{\
8494 .          if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
8495 .             DIVER_FN_2_POST
8496 .             rr #RESET_FN_COUNTERS
8497 .          \}
8498 .       \}
8499 .    \}
8500 .    nr #SAVED_FN_NUMBER \\n[#FN_NUMBER]
8501 .    nr #DONE_ONCE 0 1
8502 .    REMOVE_INDENT
8503 .    ev
8504 .    nr #EPI_DEPTH \\n[#DIVER_DEPTH]-\\n[#EPI_LEAD]
8505 .    nr #EPI_LINES \\n[#EPI_DEPTH]/\\n[#EPI_LEAD]
8506 .    ie \\n[#START] \{\
8507 .       RLD \\n[#SHIM]u
8508 .       nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
8509 .       while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8510 .             nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
8511 .\}
8512 .       if \\n[#PRINT_STYLE]=1 \{\
8513 .          if !\\n[#SINGLE_SPACE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
8514 .       \}
8515 .       if \\n[#PRINT_STYLE]=2 \{\
8516 .          ie !\\n[#DOC_TYPE]=2 \{ .RLD \\n[#DOC_LEAD]u \}
8517 .          el \{\
8518 .             ie '\\*[$CHAPTER_TITLE]'' \{ .RLD \\n[#DOC_LEAD]u \}
8519 .             el \{\
8520 .                if '\\*[$CHAPTER]'' \{ .RLD \\n[#DOC_LEAD]u \}
8521 .             \}
8522 .          \}
8523 .          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
8524 .             ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
8525 .          \}
8526 .          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8527 .             ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
8528 .          \}
8529 .       \}
8530 .    \}
8531 .    el \{\
8532 .       ie \\n[#EPI_DEPTH]<\\n[#TRAP_DISTANCE] \{\
8533 .          nr #EPI_FITS 1
8534 .          nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
8535 .          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8536 .                nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
8537 .\}
8538 .          ie \\n[#PRINT_STYLE]=1 \{\
8539 .             if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u/2u \}
8540 .          \}
8541 .          el \{\
8542 .             if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
8543 .                ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
8544 .             \}
8545 .             if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8546 .                ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
8547 .             \}
8548 .          \}
8549 .          if \\n[#DIVER_FN]=2 \{ .rr #DIVER_FN \}
8550 .       \}
8551 .       el \{\
8552 .          nr #EPI_LINES_TO_TRAP 0 1
8553 .          while \\n[#EPI_LEAD]*\\n+[#EPI_LINES_TO_TRAP]<\\n[#TRAP_DISTANCE] \{\
8554 .                nr #LOOP 1
8555 .\}
8556 .          nr #EPI_LINES_TO_TRAP -1
8557 .          nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_TRAP]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_TRAP]*\\n[#EPI_LEAD])
8558 .          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8559 .                nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
8560 .\}
8561 .          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u \}
8562 .          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u-\\n[#DOC_LEAD]u \}
8563 .      \}
8564 .    \}
8565 .    if \\n[#EPIGRAPH]=1 \{\
8566 .       po \\n[#L_MARGIN]u
8567 .       if \\n[#COLUMNS] \{\
8568 .          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
8569 .          nr #L_MARGIN \\n(.o
8570 .       \}
8571 .    \}
8572 .    if \\n[#EPIGRAPH]=2 \{\
8573 .       ie r#EPI_OFFSET_VALUE \{\
8574 .          nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
8575 .       \}
8576 .       el \{ .nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE] \}
8577 .       if \\n[#COLUMNS] \{\
8578 .          ie r#EPI_OFFSET_VALUE \{\
8579 .             nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
8580 .          \}
8581 .          el \{ .nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE] \}
8582 .       \}
8583 .       po \\n[#EPI_OFFSET]u
8584 .    \}
8585 .    nf
8586 .    EPI_TEXT
8587 .    br
8588 .    ie \\n[#START] \{\
8589 .       if \\n[#PRINT_STYLE]=1 \{\
8590 .          SHIM
8591 .       \}
8592 .       if \\n[#PRINT_STYLE]=2 \{\
8593 .          if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
8594 .             ALD \\n[#EPI_WHITESPACE]u/2u
8595 .          \}
8596 .          if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8597 .             ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
8598 .          \}
8599 .          SHIM
8600 .       \}
8601 .    \}
8602 .    el \{\
8603 .       rr #EPI_ACTIVE
8604 .       ie \\n[#EPI_FITS] \{\
8605 .          ie \\n[#FN_FOR_EPI] \{\
8606 .             nr #EPI_LINES_TO_END 1
8607 .             nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
8608 .             while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8609 .                   nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
8610 .\}
8611 .             ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
8612 .          \}
8613 .          el \{\
8614 .             ie \\n[#PRINT_STYLE]=1 \{\
8615 .                if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u \}
8616 .             \}
8617 .             el \{\
8618 .                if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
8619 .                   ALD \\n[#EPI_WHITESPACE]u/2u
8620 .                \}
8621 .                if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8622 .                   ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
8623 .                \}
8624 .             \}
8625 .          \}
8626 .       \}
8627 .       el \{\
8628 .          nr #EPI_LINES_TO_END \\n[#EPI_LINES]-\\n[#EPI_LINES_TO_TRAP]
8629 .          if \\n[#LOOP] \{ .nr #EPI_LINES_TO_END +1 \}
8630 .          rr #LOOP
8631 .          nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
8632 .          while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
8633 .                nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
8634 .\}
8635 .          ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
8636 .          if \\n[#PRINT_STYLE]=1 \{\
8637 .             if !\\n[#SINGLE_SPACE] \{\
8638 .                nr #EPI_LINES_EVEN \\n[#EPI_LINES_TO_END]%2
8639 .                ie \\n[#EPI_LINES_EVEN] \{ .ALD .5v \}
8640 .                el \{ .RLD .5v \}
8641 .                rr #EPI_LINES_EVEN
8642 .             \}
8643 .          \}
8644 .       \}
8645 .    \}
8646 .    nr #PP_STYLE 1
8647 .    rr #EPI_FITS
8648 .    ALD \\n[#DOC_LEAD]u
8649 .    QUAD \\*[$DOC_QUAD]
8650 .    po \\n[#L_MARGIN]u
8651 .    if \\n[#COLUMNS] \{\
8652 .       po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
8653 .       nr #L_MARGIN \\n(.o
8654 .    \}
8655 .    if \\n[#START] \{\
8656 .       if \\n[#COLUMNS] \{\
8657 .          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
8658 .          nr #L_MARGIN \\n(.o
8659 .          mk dc
8660 .       \}
8661 .    \}
8662 .    if \\n[#LINENUMBERS]=2 \{\
8663 .       NUMBER_LINES RESUME
8664 .       nr #LINENUMBERS 1
8665 .    \}
8666 .END
8667 \#
8668 \# ====================================================================
8669 \#
8670 \# +++FINIS MACRO+++
8671 \#
8672 \# FINIS
8673 \# -----
8674 \# *Arguments:
8675 \#   <none>
8676 \# *Function:
8677 \#   Deposits --END-- at the end of a document.
8678 \#
8679 .MAC FINIS END
8680 .    br
8681 .    ev FINIS
8682 .    evc 0
8683 .    if \\n[#TAB_ACTIVE] \{ .TQ \}
8684 .    if \\n[#INDENT_ACTIVE] \{ .IQ CLEAR \}
8685 .    nr #EM_ADJUST (1m/8)
8686 .    if \\n[#COLUMNS] \{\
8687 .       po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
8688 .       nr #L_MARGIN \\n(.o
8689 .    \}
8690 .    ALD \\n[#DOC_LEAD]u
8691 .    CENTER
8692 .    if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS \}
8693 .    if \\n[#PRINT_STYLE]=1 \{ .PRINT "--\\*[$FINIS_STRING]--\}
8694 .    if \\n[#PRINT_STYLE]=2 \{\
8695 .       ie \\n[#FINIS_COLOR] \{\
8696 .          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[]
8697 .       \}
8698 .       el \{ .PRINT \v'-\\n[#EM_ADJUST]u'\(em\v'+\\n[#EM_ADJUST]u'\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\(em\m[] \}
8699 .    \}
8700 .    if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS OFF \}
8701 .    ev
8702 .END
8703 \#
8704 \# ====================================================================
8705 \#
8706 \# +++HEADERS/FOOTERS+++
8707 \#
8708 \# Define a string so that the current page number can be incorporated
8709 \# into the strings for hdrftr left, right, and center.  NOTE: This is
8710 \# not the same thing as using the shortform # in hdrftr strings.
8711 \#
8712 .ds PAGE# \En[#PAGENUMBER]
8713 \#
8714 \#
8715 \# HDRFTR RULE GAP
8716 \# ---------------
8717 \# *Argument:
8718 \#   <amount of space between header/footer and header/footer rule>
8719 \# *Function:
8720 \#   Creates or modifies register #HDRFTR_RULE_GAP to hold amount
8721 \#   of space between header/footer and header/footer rule.
8722 \# *Notes:
8723 \#   Default is 4p.
8724 \#
8725 .MAC HDRFTR_RULE_GAP END
8726 .    nr #HDRFTR_RULE_GAP (\\$1)
8727 .    if '\\$0'HEADER_RULE_GAP' \{\
8728 .       nr #HEADER_RULE_GAP \\n[#HDRFTR_RULE_GAP]
8729 .       if r#FOOTER_RULE_GAP \{ .nr #FOOTER_RULE_GAP \\n[#FOOTER_RULE_GAP] \}
8730 .    \}
8731 .    if '\\$0'FOOTER_RULE_GAP' \{\
8732 .       nr #FOOTER_RULE_GAP \\n[#HDRFTR_RULE_GAP]
8733 .       if r#HEADER_RULE_GAP \{ .nr #HEADER_RULE_GAP \\n[#HEADER_RULE_GAP] \}
8734 .    \}
8735 .END
8736 \#
8737 \#
8738 \# HDRFTR LEFT
8739 \# -----------
8740 \# *Argument:
8741 \#   <what to put in the left position of page header/footers>
8742 \# *Function:
8743 \#   Creates or modifies string $HDRFTR_LEFT.
8744 \#   Creates register #USER_DEF_HDRFTR_LEFT, which, if 1,
8745 \#   overrides the $HDRFTR_LEFT string created by default
8746 \#   in DEFAULTS.
8747 \# *Notes:
8748 \#   Especially useful if doc has more than one author, and a list
8749 \#   of authors by last name is desired in header/footers.
8750 \#   Default is author.
8751 \#
8752 \#   If the argument is the # character, simply prints the current
8753 \#   page number.
8754 \#
8755 \#   If the user wants to *incorporate* the page number into the string,
8756 \#   \*[PAGE#] must be used.  For example, if the user wants to put
8757 \#   an elipsis before the page number in the string, s/he should use
8758 \#   ...\*[PAGE#], not ...#
8759 \#
8760 .MAC HDRFTR_LEFT END
8761 .    nr #USER_DEF_HDRFTR_LEFT 1
8762 .    ds $HDRFTR_LEFT \\$1
8763 .END
8764 \#
8765 \#
8766 \# HDRFTR LEFT CAPS
8767 \# ----------------
8768 \# *Argument:
8769 \#   <none> | <anything>
8770 \# *Function:
8771 \#   Turns capitalisation of $HDRFTR_LEFT (typically, the author of
8772 \#   the document) on or off.
8773 \# *Notes:
8774 \#   Default is on.
8775 \#
8776 .MAC HDRFTR_LEFT_CAPS END
8777 .    ie '\\$1'' \{\
8778 .        nr #HDRFTR_LEFT_CAPS 1
8779 .    \}
8780 .    el \{\
8781 .       nr #HDRFTR_LEFT_CAPS 0
8782 .       ds $HDRFTR_LEFT_SIZE_CHANGE +0
8783 .    \}
8784 .END
8785 \#
8786 \#
8787 \# HDRFTR CENTER
8788 \# -------------
8789 \# *Argument:
8790 \#   <what to put in the centre position of page header/footers>
8791 \# *Function:
8792 \#   Creates or modifies string $HDRFTR_CENTER.
8793 \#   Creates register #USER_DEF_HDRFTR_CENTER, which, if 1,
8794 \#   overrides the $HDRFTR_CENTER string created by default
8795 \#   in COPYSTYLE.
8796 \# *Notes:
8797 \#   Default is document type if DOCTYPE NAMED, Chapter # if DOCTYPE
8798 \#   CHAPTER, draft and revision number if COPYSTYLE DRAFT.
8799 \#
8800 \#   If the argument is the # character, simply prints the current
8801 \#   page number.
8802 \#
8803 \#   If the user wants to *incorporate* the page number into the string,
8804 \#   \*[PAGE#] must be used.  For example, if the user wants to put
8805 \#   an elipsis before the page number in the string, s/he should use
8806 \#   ...\*[PAGE#], not ...#
8807 \#
8808 .MAC HDRFTR_CENTER END
8809 .    nr #USER_DEF_HDRFTR_CENTER 1
8810 .    if '\\$0'FOOTER_CENTER' \{\
8811 .       ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
8812 .       ds $HDRFTR_CENTER_NEW \\$1
8813 .    \}
8814 .    if '\\$0'FOOTER_CENTRE' \{\
8815 .       ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
8816 .       ds $HDRFTR_CENTER_NEW \\$1
8817 .    \}
8818 .    ds $HDRFTR_CENTER \\$1
8819 .END
8820 \#
8821 \#
8822 \# HDRFTR CENTER CAPS
8823 \# ------------------
8824 \# *Argument:
8825 \#   <none> | <anything>
8826 \# *Function:
8827 \#   Turns capitalisation of $HDRFTR_CENTER (typically, doctype of
8828 \#   the document) on or off.
8829 \# *Notes:
8830 \#   Default is on.
8831 \#
8832 .MAC HDRFTR_CENTER_CAPS END
8833 .    ie '\\$1'' \{\
8834 .       nr #HDRFTR_CENTER_CAPS 1
8835 .    \}
8836 .    el \{\
8837 .       nr #HDRFTR_CENTER_CAPS 0
8838 .       ds $HDRFTR_CENTER_SIZE_CHANGE +0
8839 .    \}
8840 .END
8841 \#
8842 \#
8843 \# HDRFTR CENTER PADDING
8844 \# ---------------------
8845 \# *Argument:
8846 \#   LEFT | RIGHT <amount of padding to put left or right of hdrftr
8847 \#   center string>
8848 \# *Function:
8849 \#   Creates or modifies registers #HDRFTR_CTR_PAD_LEFT or
8850 \#   #HDRFTR_CTR_PAD_RIGHT.
8851 \# *Notes:
8852 \#   By default, the HDRFTR_CENTER string is centered on the doc
8853 \#   line length.  Long titles or long author names can screw up
8854 \#   visual centering, or create overprints.  This macro allows the
8855 \#   user to pad the center string by the specified amount of space
8856 \#   to fix these problems.  Use only one of LEFT or RIGHT.
8857 \#
8858 \#   A unit of measure is required.
8859 \#
8860 .MAC HDRFTR_CENTER_PAD END
8861 .    if '\\$1'LEFT' \{\
8862 .       nr #HDRFTR_CTR_PAD_LEFT (\\$2)
8863 .    \}
8864 .    if '\\$1'RIGHT' \{\
8865 .       nr #HDRFTR_CTR_PAD_RIGHT (\\$2)
8866 .    \}
8867 .END
8868 \#
8869 \#
8870 \# SWITCH HDRFTR CENTER PADDING SIDE - support macro
8871 \# --------------------------------
8872 \# *Argument:
8873 \#   <none>
8874 \# *Function:
8875 \#   Switches the padding side of hdrftr center padding.
8876 \# *Notes:
8877 \#   Required to keep spacing around hdrftr string constant
8878 \#   in recto/verso documents.
8879 \#
8880 .MAC SWITCH_HDRFTR_CENTER_PAD END
8881 .    nr #HDRFTR_CTR_PAD_TMP  \\n[#HDRFTR_CTR_PAD_LEFT]
8882 .    HDRFTR_CENTER_PAD LEFT  \\n[#HDRFTR_CTR_PAD_RIGHT]u
8883 .    HDRFTR_CENTER_PAD RIGHT \\n[#HDRFTR_CTR_PAD_TMP]u
8884 .END
8885 \#
8886 \#
8887 \# HDRFTR RIGHT
8888 \# ------------
8889 \# *Argument:
8890 \#   <what to put in the right position of page header/footers>
8891 \# *Function:
8892 \#   Creates or modifies string $HDRFTR_RIGHT.
8893 \#   Creates register #USER_DEF_HDRFTR_RIGHT, which, if 1,
8894 \#   overrides the $HDRFTR_RIGHT string created by default
8895 \#   in DEFAULTS.
8896 \# *Notes:
8897 \#   Default is document title.
8898 \#
8899 \#   If the argument is the # character, simply prints the current
8900 \#   page number.
8901 \#
8902 \#   If the user wants to *incorporate* the page number into the string,
8903 \#   \*[PAGE#] must be used.  For example, if the user wants to put
8904 \#   an elipsis before the page number in the string, s/he should use
8905 \#   ...\*[PAGE#], not ...#
8906 \#
8907 .MAC HDRFTR_RIGHT END
8908 .    nr #USER_DEF_HDRFTR_RIGHT 1
8909 .    ds $HDRFTR_RIGHT \\$1
8910 .END
8911 \#
8912 \#
8913 \# HDRFTR RIGHT CAPS
8914 \# -----------------
8915 \# *Argument:
8916 \#   <none> | <anything>
8917 \# *Function:
8918 \#   Turns capitalisation of $HDRFTR_RIGHT (typically, the title of
8919 \#   the document) on or off.
8920 \# *Notes:
8921 \#   Default is on.
8922 \#
8923 .MAC HDRFTR_RIGHT_CAPS END
8924 .    ie '\\$1'' \{\
8925 .       nr #HDRFTR_RIGHT_CAPS 1
8926 .    \}
8927 .    el \{\
8928 .       nr #HDRFTR_RIGHT_CAPS 0
8929 .       ds $HDRFTR_RIGHT_SIZE_CHANGE +0
8930 .    \}
8931 .END
8932 \#
8933 \#
8934 \# HDRFTR RULE
8935 \# -----------
8936 \# *Arguments:
8937 \#   <none> | <anything>
8938 \# *Function:
8939 \#   If invoked via the alias HDRFTR_RULE_INTERNAL in HDRFTR, prints a rule
8940 \#   under the header/over the footer.  Otherwise, turns HDRFTR_RULE
8941 \#   on or off.
8942 \#
8943 .MAC HDRFTR_RULE END   \"To print rule under header/over footer.
8944 .    if \\n[#HEADERS_ON] \{ .nr #HDRFTR_RULE_GAP \\n[#HEADER_RULE_GAP] \}
8945 .    if \\n[#FOOTERS_ON] \{ .nr #HDRFTR_RULE_GAP \\n[#FOOTER_RULE_GAP] \}
8946 .    if '\\$0'HDRFTR_RULE_INTERNAL' \{\
8947 .       ie \\n[#USERDEF_HDRFTR] \{\
8948 .          nr #CAP_HEIGHT_ADJUST \\n[#HDRFTR_HEIGHT]
8949 .          if \\n[#HEADERS_ON] \{\
8950 .             rt \\nyu
8951 .             ALD \\n[#HDRFTR_RULE_GAP]u
8952 .             nr #HDRFTR_RULE_WEIGHT     \\n[#HEADER_RULE_WEIGHT]
8953 .             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ]
8954 .          \}
8955 .          if \\n[#FOOTERS_ON] \{\
8956 .             rt \\nyu
8957 .             RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u
8958 .             nr #HDRFTR_RULE_WEIGHT     \\n[#FOOTER_RULE_WEIGHT]
8959 .             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ]
8960 .          \}
8961 .          ie \\n[#HDRFTR_RULE_COLOR]=1 \{\
8962 \m[\\*[$HDRFTR_RULE_COLOR]]\
8963 \D't \\n[#HDRFTR_RULE_WEIGHT]u'\
8964 \h'|0'\
8965 \v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
8966 \D'l \\n[#DOC_L_LENGTH]u 0'\
8967 \D't \\n[#RULE_WEIGHT]u'\
8968 \h'-\\n[#RULE_WEIGHT]u'\
8969 \m[]
8970 .          \}
8971 .          el \{\
8972 \D't \\n[#HDRFTR_RULE_WEIGHT]u'\
8973 \h'|0'\
8974 \v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
8975 \D'l \\n[#DOC_L_LENGTH]u 0'\
8976 \D't \\n[#RULE_WEIGHT]u'\
8977 \h'-\\n[#RULE_WEIGHT]u'
8978 .          \}
8979 .          br
8980 .       \}
8981 .       el \{\
8982 .          if \\n[#PRINT_STYLE]=1 \{\
8983 .             nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT]
8984 .          \}
8985 .          if \\n[#PRINT_STYLE]=2 \{\
8986 .             ie \\n[#LEFT_CAP_HEIGHT]>\\n[#CENTER_CAP_HEIGHT] \{\
8987 .                nr #CAP_HEIGHT_ADJUST \\n[#LEFT_CAP_HEIGHT]
8988 .             \}
8989 .             el \{ .nr #CAP_HEIGHT_ADJUST \\n[#CENTER_CAP_HEIGHT] \}
8990 .             ie \\n[#CAP_HEIGHT_ADJUST]>\\n[#RIGHT_CAP_HEIGHT] \{\
8991 .                nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT_ADJUST]
8992 .             \}
8993 .             el \{ .nr #CAP_HEIGHT_ADJUST \\n[#RIGHT_CAP_HEIGHT] \}
8994 .          \}
8995 .          if \\n[#HEADERS_ON] \{\
8996 .             rt \\nyu
8997 .             ALD \\n[#HDRFTR_RULE_GAP]u
8998 .             nr #HDRFTR_RULE_WEIGHT     \\n[#HEADER_RULE_WEIGHT]
8999 .             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ]
9000 .          \}
9001 .          if \\n[#FOOTERS_ON] \{\
9002 .             rt \\nyu
9003 .             RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u
9004 .             nr #HDRFTR_RULE_WEIGHT     \\n[#FOOTER_RULE_WEIGHT]
9005 .             nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ]
9006 .          \}
9007 .          ie \\n[#HDRFTR_RULE_COLOR]=1 \{\
9008 \m[\\*[$HDRFTR_RULE_COLOR]]\
9009 \D't \\n[#HDRFTR_RULE_WEIGHT]u'\
9010 \h'|0'\
9011 \v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
9012 \D'l \\n[#DOC_L_LENGTH]u 0'\
9013 \D't \\n[#RULE_WEIGHT]u'\
9014 \h'-\\n[#RULE_WEIGHT]u'\
9015 \m[]
9016 .          \}
9017 .          el \{\
9018 \D't \\n[#HDRFTR_RULE_WEIGHT]u'\
9019 \h'|0'\
9020 \v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\
9021 \D'l \\n[#DOC_L_LENGTH]u 0'\
9022 \D't \\n[#RULE_WEIGHT]u'\
9023 \h'-\\n[#RULE_WEIGHT]u'
9024 .          \}
9025 .          br
9026 .       \}
9027 .    \}
9028 .    if '\\$0'HEADER_RULE' \{\
9029 .       nr #HEADERS_ON  1
9030 .       ie '\\$1'' \{\
9031 .          nr #HEADER_RULE 1
9032 .          nr #HDRFTR_RULE 1
9033 .       \}
9034 .       el \{\
9035 .          nr #HEADER_RULE 0
9036 .          nr #HDRFTR_RULE 0
9037 .       \}
9038 .    \}
9039 .    if '\\$0'FOOTER_RULE' \{\
9040 .       nr #FOOTERS_ON  1
9041 .       ie '\\$1'' \{\
9042 .          nr #FOOTER_RULE 1
9043 .          nr #HDRFTR_RULE 1
9044 .       \}
9045 .       el \{\
9046 .          nr #FOOTER_RULE 0
9047 .          nr #HDRFTR_RULE 0
9048 .       \}
9049 .    \}
9050 .    if '\\$0'HDRFTR_RULE' \{\
9051 .       ie '\\$1'' \{ .nr #HDRFTR_RULE 1 \}
9052 .       el         \{ .nr #HDRFTR_RULE 0 \}
9053 .    \}
9054 .END
9055 \#
9056 \#
9057 .ALIAS HDRFTR_RULE_INTERNAL HDRFTR_RULE
9058 \#
9059 \#
9060 \# HDRFTR PLAIN
9061 \# ------------
9062 \# *Arguments:
9063 \#   <none>
9064 \# *Function:
9065 \#   Sets the family, font, and point size of all strings in
9066 \#   header/footers to the same family and point size as running
9067 \#   text.  Font for the header/footer becomes roman throughout.
9068 \#
9069 .MAC HDRFTR_PLAIN END
9070 .    HDRFTR_FAMILY        \\*[$DOC_FAM]
9071 .    HDRFTR_PT_SIZE       \\n[#DOC_PT_SIZE]
9072 .    HDRFTR_LEFT_FAMILY   \\*[$DOC_FAM]
9073 .    HDRFTR_LEFT_FONT     R
9074 .    HDRFTR_LEFT_SIZE     +0
9075 .    HDRFTR_LEFT_CAPS     OFF
9076 .    HDRFTR_CENTER_FAMILY \\*[$DOC_FAM]
9077 .    HDRFTR_CENTER_FONT   R
9078 .    HDRFTR_CENTER_SIZE   +0
9079 .    HDRFTR_CENTER_CAPS   OFF
9080 .    HDRFTR_RIGHT_FAMILY  \\*[$DOC_FAM]
9081 .    HDRFTR_RIGHT_FONT    R
9082 .    HDRFTR_RIGHT_SIZE    +0
9083 .    HDRFTR_RIGHT_CAPS    OFF
9084 .END
9085 \#
9086 \#
9087 \# SWITCH HDRFTR
9088 \# -------------
9089 \# *Arguments:
9090 \#   <none> | <anything>
9091 \# *Function:
9092 \#   Creates or modifies register #SWITCH_HDRFTR, used to switch
9093 \#   default location of HDRFTR_LEFT and HDRFTR_RIGHT.
9094 \# *Notes:
9095 \#   Default is OFF.
9096 \#
9097 \# Typically, the author string appears at the left of header/footers,
9098 \# and the title string appears at the right.  This switches the
9099 \# location of the two.  Useful in conjuction with RECTO_VERSO to tweak
9100 \# switches on alternate pages to come out as the user wishes.  The
9101 \# assumption of RECTO_VERSO is that the first page of the document
9102 \# (recto) is odd, and even though it has no header/footer, if it did
9103 \# have one, it would print as AUTHOR...CENTER...TITLE (or whatever
9104 \# strings the user has supplied for HDRFTR_LEFT/RIGHT), meaning that
9105 \# the next page, which does have a header/footer, will come out as
9106 \# TITLE...CENTER...AUTHOR (or whatever strings the user has supplied
9107 \# for HDRFTR_LEFT/RIGHT).  SWITCH_HDRFTRS allows the user to get the
9108 \# desired string in the desired place on the desired recto/verso page.
9109 \# 
9110 .MAC SWITCH_HDRFTR END
9111 .    ie '\\$1'' \{ .nr #SWITCH_HDRFTR 1 \}
9112 .    el \{ .nr #SWITCH_HDRFTR 0 \}
9113 .END
9114 \#
9115 \#
9116 \# USER DEFINED HDRFTR RECTO
9117 \# -------------------------
9118 \# *Arguments:
9119 \#   L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_recto_string>
9120 \# *Function:
9121 \#   Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_RECTO_QUAD,
9122 \#   stores string in $USERDEF_HDRFTR_RECTO.
9123 \# *Notes:
9124 \#   For use when users don't want 3-part headers/footers, but rather
9125 \#   want to design their own headers/footers and need different
9126 \#   headers/footers on recto and verso pages.  Using just
9127 \#   HEADER_RECTO, even when recto/verso is not on, allows users to
9128 \#   design their own headers/footers for doc pages.
9129 \#
9130 .MAC HDRFTR_RECTO END
9131 .    nr #USERDEF_HDRFTR 1
9132 .    if '\\$1'L'      \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 1 \}
9133 .    if '\\$1'LEFT'   \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 1 \}
9134 .    if '\\$1'C'      \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
9135 .    if '\\$1'CENTER' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
9136 .    if '\\$1'CENTRE' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
9137 .    if '\\$1'R'      \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 3 \}
9138 .    if '\\$1'RIGHT'  \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 3 \}
9139 .    shift
9140 .    if '\\$1'CAPS' \{ .nr #HDRFTR_RECTO_CAPS 1 \}
9141 .    ds $USERDEF_HDRFTR_RECTO \\$2
9142 .END
9143 \#
9144 \#
9145 \# USER DEFINED HDRFTR VERSO
9146 \# -------------------------
9147 \# *Arguments:
9148 \#   L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_verso_string>
9149 \# *Function:
9150 \#   Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_VERSO_QUAD,
9151 \#   stores string in $USERDEF_HDRFTR_VERSO.
9152 \# *Notes:
9153 \#   For use when users don't want 3-part headers/footers, but rather
9154 \#   want to design their own headers/footers and need different
9155 \#   headers/footers on recto and verso pages.
9156 \#
9157 .MAC HDRFTR_VERSO END
9158 .    nr #USERDEF_HDRFTR 1
9159 .    if '\\$1'L'      \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 1 \}
9160 .    if '\\$1'LEFT'   \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 1 \}
9161 .    if '\\$1'C'      \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
9162 .    if '\\$1'CENTER' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
9163 .    if '\\$1'CENTRE' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
9164 .    if '\\$1'R'      \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 3 \}
9165 .    if '\\$1'RIGHT'  \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 3 \}
9166 .    shift
9167 .    if '\\$1'CAPS' \{ .nr #HDRFTR_VERSO_CAPS 1 \}
9168 .    ds $USERDEF_HDRFTR_VERSO \\$2
9169 .END
9170 \#
9171 \# PRINT FOOTER ON FIRST PAGE
9172 \# --------------------------
9173 \# *Arguments:
9174 \#   <none> | <anything>
9175 \# *Function:
9176 \#   Toggles register #PRINT_FOOTER_ON_PAGE_1
9177 \# *Notes:
9178 \#   Lets user choose whether to print footer on first
9179 \#   page of doc.
9180 \#
9181 .MAC FOOTER_ON_FIRST_PAGE END
9182 .    ie '\\$1'' \{ .nr #PRINT_FOOTER_ON_PAGE_1 1 \}
9183 .    el \{ .rr #PRINT_FOOTER_ON_PAGE_1 \}
9184 .END
9185 \#
9186 \#
9187 \# PRINT PAGE NUMBER ON FIRST PAGE
9188 \# -------------------------------
9189 \# *Arguments:
9190 \#   <none> | <anything>
9191 \# *Function:
9192 \#   Toggles register #PRINT_PAGENUM_ON_PAGE_1
9193 \# *Notes:
9194 \#   Lets user choose whether to print page number on first
9195 \#   page of doc and after collate when footers are on or page numbering
9196 \#   has been user set at top of page.
9197 \#
9198 .MAC PAGENUM_ON_FIRST_PAGE END
9199 .    ie '\\$1'' \{ .nr #PRINT_PAGENUM_ON_PAGE_1 1 \}
9200 .    el \{ .rr #PRINT_PAGENUM_ON_PAGE_1 \}
9201 .END
9202 \#
9203 \#
9204 \# PRINT HEADER/FOOTER
9205 \# -------------------
9206 \# *Arguments:
9207 \#   <none>
9208 \# *Function:
9209 \#   Based on defaults or values entered by user, prints a
9210 \#   three-part title at either the top or the bottom of the page.
9211 \# *Notes:
9212 \#   Called from within either HEADER or FOOTER.
9213 \#
9214 .MAC PRINT_HDRFTR END
9215 .    if \\n[#DOC_TYPE]=4 \{\
9216 .       nr #SUITE \En[.pn]
9217 .    \}
9218 .    if \\n[#FOOTERS_ON] \{\
9219 .       if \\n[#START_FOR_FOOTERS] \{\
9220 .          rr #START_FOR_FOOTERS
9221 .          if !\\n[#PRINT_FOOTER_ON_PAGE_1] \{\
9222 .             ie !\\n[#HDRFTR_BOTH] \{ .return \}
9223 .             el \{\
9224 .                rr #FOOTERS_ON
9225 .                nr #HEADERS_ON 1
9226 .                ie \\n[#HEADER_RULE]=1 \{ .HEADER_RULE \}
9227 .                el \{ .HEADER_RULE OFF \}
9228 .                HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
9229 .                return
9230 .             \}
9231 .          \}
9232 .       \}
9233 .    \}
9234 .    if \\n[#USERDEF_HDRFTR] \{\
9235 .       PRINT_USERDEF_HDRFTR
9236 .       return
9237 .    \}
9238 .    if \\n[#SWITCH_HDRFTR] \{\
9239 .       ds $HDRFTR_TMP_SWITCH             \\*[$HDRFTR_LEFT]
9240 .       ds $HDRFTR_LEFT                   \\*[$HDRFTR_RIGHT]
9241 .       ds $HDRFTR_RIGHT                  \\*[$HDRFTR_TMP_SWITCH]
9242 .       ds $HDRFTR_TMP_SIZE_CHANGE_SWITCH \\*[$HDRFTR_LEFT_SIZE_CHANGE]
9243 .       ds $HDRFTR_LEFT_SIZE_CHANGE       \\*[$HDRFTR_RIGHT_SIZE_CHANGE]
9244 .       ds $HDRFTR_RIGHT_SIZE_CHANGE      \\*[$HDRFTR_TMP_SIZE_CHANGE_SWITCH]
9245 .       nr #HDRFTR_TMP_CAPS_SWITCH        \\n[#HDRFTR_LEFT_CAPS]
9246 .       nr #HDRFTR_LEFT_CAPS              \\n[#HDRFTR_RIGHT_CAPS]
9247 .       nr #HDRFTR_RIGHT_CAPS             \\n[#HDRFTR_TMP_CAPS_SWITCH]
9248 .       ds $HDRFTR_TMP_COLOR_SWITCH       \\*[$HDRFTR_LEFT_COLOR]
9249 .       ds $HDRFTR_LEFT_COLOR             \\*[$HDRFTR_RIGHT_COLOR]
9250 .       ds $HDRFTR_RIGHT_COLOR            \\*[$HDRFTR_TMP_COLOR_SWITCH]
9251 .       rr #HDRFTR_TMP_CAPS_SWITCH
9252 .       rm $HDRFTR_TMP_SWITCH
9253 .       rm $HDRFTR_TMP_SIZE_CHANGE_SWITCH
9254 .       rm $HDRFTR_TMP_COLOR_SWITCH
9255 .       nr #SWITCH_HDRFTR 0
9256 .    \}
9257 .    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
9258 .    if \\n[#ENDNOTES] \{ .PAGENUM_STYLE \\*[$EN_PN_STYLE] \}
9259 .    if \\n[#PRINT_STYLE]=1 \{\
9260 .       if \\n[#FOOTERS_ON] \{\
9261 .          di NULL
9262 .          SIZESPECS
9263 .          nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
9264 .          di
9265 .       \}
9266 .       if o                        \{ .RIGHT \}
9267 .       if e                        \{ .LEFT  \}
9268 .       if \\n[#RECTO_VERSO]=0      \{ .LEFT  \}
9269 .       if \\n[#HDRFTR_LEFT_CAPS]   \{ .CAPS  \}
9270 .       ie '\\*[$HDRFTR_LEFT]'#' \{\
9271 .           PRINT \\n[#PAGENUMBER]
9272 .       \}
9273 .       el \{\
9274 .          ie !'\\*[$HDRFTR_LEFT]'' \{ . PRINT \\*[$HDRFTR_LEFT] \}
9275 .          el \{ .PRINT \& \}
9276 .       \}
9277 .       if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS OFF \}
9278 .       CENTER
9279 .       if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS \}
9280 .       rt \\nyu
9281 .       ie '\\*[$HDRFTR_CENTER]'#' \{\
9282 .           PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
9283 .       \}
9284 .       el \{\
9285 .          ie !'\\*[$HDRFTR_CENTER]'' \{ .PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u' \}
9286 .          el \{ .PRINT \& \}
9287 .       \}
9288 .       if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS OFF \}
9289 .       if o                        \{ .LEFT  \}
9290 .       if e                        \{ .RIGHT \}
9291 .       if \\n[#RECTO_VERSO]=0      \{ .RIGHT \}
9292 .       if \\n[#HDRFTR_RIGHT_CAPS]  \{ .CAPS  \}
9293 .       rt \\nyu
9294 .       ie '\\*[$HDRFTR_RIGHT]'#' \{\
9295 .           PRINT \\n[#PAGENUMBER]
9296 .       \}
9297 .       el \{\
9298 .          ie !'\\*[$HDRFTR_RIGHT]'' \{ .PRINT \\*[$HDRFTR_RIGHT] \}
9299 .          el \{ .PRINT \& \}
9300 .       \}
9301 .       if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS OFF \}
9302 .    \}
9303 .    if \\n[#PRINT_STYLE]=2 \{\
9304 .       if \\n[#HDRFTR_COLOR]=1 \{\
9305 .          nf
9306 \m[\\*[$HDRFTR_COLOR]]
9307 .       \}
9308 .       fam     \\*[$HDRFTR_LEFT_FAM]
9309 .       ft      \\*[$HDRFTR_LEFT_FT]
9310 .       ps      \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_LEFT_SIZE_CHANGE]
9311 .       vs      12
9312 .       if \\n[#FOOTERS_ON] \{\
9313 .          di NULL
9314 .          SIZESPECS
9315 .          nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
9316 .          di
9317 .       \}
9318 .       if o                      \{ .LEFT  \}
9319 .       if e                      \{ .RIGHT \}
9320 .       if \\n[#RECTO_VERSO]=0    \{ .LEFT  \}
9321 .       if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS  \}
9322 .       ie '\\*[$HDRFTR_LEFT]'#' \{\
9323 .          ie \\n[#HDRFTR_LEFT_COLOR]=1 \{\
9324 .             PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\n[#PAGENUMBER]\m[]
9325 .          \}
9326 .          el \{\
9327 .             PRINT \\n[#PAGENUMBER]
9328 .          \}
9329 .       \}
9330 .       el \{\
9331 .          ie !'\\*[$HDRFTR_LEFT]'' \{\
9332 .             ie \\n[#HDRFTR_LEFT_COLOR]=1 \{\
9333 .                 PRINT \m[\\*[$HDRFTR_LEFT_COLOR]]\\*[$HDRFTR_LEFT]\m[]
9334 .             \}
9335 .             el \{\
9336 .                 PRINT \\*[$HDRFTR_LEFT]
9337 .             \}
9338 .          \}
9339 .          el \{ .PRINT \& \}
9340 .       \}
9341 .       if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS OFF \}
9342 .       fam     \\*[$HDRFTR_CENTER_FAM]
9343 .       ft      \\*[$HDRFTR_CENTER_FT]
9344 .       ps      \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_CENTER_SIZE_CHANGE]
9345 .       vs      12
9346 .       if \\n[#FOOTERS_ON] \{\
9347 .          di NULL
9348 .          SIZESPECS
9349 .          nr #CENTER_CAP_HEIGHT \\n[#CAP_HEIGHT]
9350 .          di
9351 .       \}
9352 .       CENTER
9353 .       if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS \}
9354 .       rt \\nyu
9355 .       ie '\\*[$HDRFTR_CENTER]'#' \{\
9356 .           ie \\n[#HDRFTR_CENTER_COLOR]=1 \{\
9357 .              PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\\n[#PAGENUMBER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[]
9358 .           \}
9359 .           el \{\
9360 .              PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\n[#PAGENUMBER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
9361 .           \}
9362 .       \}
9363 .       el \{\
9364 .          ie !'\\*[$HDRFTR_CENTER]'' \{\
9365 .             ie \\n[#HDRFTR_CENTER_COLOR]=1 \{\
9366 .                PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\m[\\*[$HDRFTR_CENTER_COLOR]]\\*[$HDRFTR_CENTER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'\m[]
9367 .             \}
9368 .             el \{\
9369 .                PRINT \\h'\\n[#HDRFTR_CTR_PAD_LEFT]u'\\*[$HDRFTR_CENTER]\\h'\\n[#HDRFTR_CTR_PAD_RIGHT]u'
9370 .             \}
9371 .          \}
9372 .          el \{ .PRINT \& \}
9373 .       \}
9374 .       if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS OFF \}
9375 .       fam     \\*[$HDRFTR_RIGHT_FAM]
9376 .       ft      \\*[$HDRFTR_RIGHT_FT]
9377 .       ps      \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_RIGHT_SIZE_CHANGE]
9378 .       vs      12
9379 .       if \\n[#FOOTERS_ON] \{\
9380 .          di NULL
9381 .          SIZESPECS
9382 .          nr #RIGHT_CAP_HEIGHT \\n[#CAP_HEIGHT]
9383 .          di
9384 .       \}
9385 .       if o                       \{ .RIGHT \}
9386 .       if e                       \{ .LEFT  \}
9387 .       if \\n[#RECTO_VERSO]=0     \{ .RIGHT \}
9388 .       if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS  \}
9389 .       rt \\nyu
9390 .       ie '\\*[$HDRFTR_RIGHT]'#' \{\
9391 .          ie \\n[#HDRFTR_RIGHT_COLOR]=1 \{\
9392 .             PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\n[#PAGENUMBER]\m[]
9393 .          \}
9394 .          el \{\
9395 .             PRINT \\n[#PAGENUMBER]
9396 .          \}
9397 .       \}
9398 .       el \{\
9399 .          ie !'\\*[$HDRFTR_RIGHT]'' \{\
9400 .             ie \\n[#HDRFTR_RIGHT_COLOR]=1 \{\
9401 .                PRINT \m[\\*[$HDRFTR_RIGHT_COLOR]]\\*[$HDRFTR_RIGHT]\m[]
9402 .             \}
9403 .             el \{\
9404 .                PRINT \\*[$HDRFTR_RIGHT]
9405 .             \}
9406 .          \}
9407 .          el \{ .PRINT \& \}
9408 .       \}
9409 .       if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS OFF \}
9410 .    \}
9411 .    if \\n[#HDRFTR_RULE] \{\
9412 .       HDRFTR_RULE_INTERNAL
9413 .    \}
9414 .    br
9415 .END
9416 \#
9417 \#
9418 \# PRINT USER DEFINED HEADER/FOOTER
9419 \# --------------------------------
9420 \# *Arguments:
9421 \#   <none>
9422 \# *Function:
9423 \#   Based on defaults or values entered by user, prints a single part
9424 \#   (i.e. not 3-part) title at either the top or the bottom of the page.
9425 \# *Notes:
9426 \#   Called from within PRINT_HDRFTR.
9427 \#
9428 .MAC PRINT_USERDEF_HDRFTR END
9429 .    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
9430 .    fc ^ #
9431 .    if \\n[#PRINT_STYLE]=2 \{\
9432 .       fam  \\*[$HDRFTR_FAM]
9433 .       ft      R
9434 .       ps \\n[#HDRFTR_PT_SIZE]u
9435 .       if \\n[#HDRFTR_COLOR]=1 \{\
9436 .          nf
9437 .          COLOR \\*[$HDRFTR_COLOR]
9438 .       \}
9439 .    \}
9440 .    ie \\n[#RECTO_VERSO] \{\
9441 .       if o \{\
9442 .          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT   \}
9443 .          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
9444 .          if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT  \}
9445 .          if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS \}
9446 .          PRINT \\*[$USERDEF_HDRFTR_RECTO]
9447 .          if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS OFF \}
9448 .          EOL
9449 .          if \\n[#FOOTERS_ON] \{\
9450 .             di NULL
9451 .             SIZESPECS
9452 .             nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
9453 .             di
9454 .          \}
9455 .       \}
9456 .       if e \{\
9457 .          ie !'\\*[$USERDEF_HDRFTR_VERSO]'' \{\
9458 .             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=1 \{ .LEFT   \}
9459 .             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=2 \{ .CENTER \}
9460 .             if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=3 \{ .RIGHT  \}
9461 .             if \\n[#HDRFTR_VERSO_CAPS]=1 \{ .CAPS \}
9462 .             PRINT \\*[$USERDEF_HDRFTR_VERSO]
9463 .             if \\n[#HDRFTR_VERSO_CAPS]=1 \{ .CAPS OFF \}
9464 .             EOL
9465 .             if \\n[#FOOTERS_ON] \{\
9466 .                di NULL
9467 .                SIZESPECS
9468 .                nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
9469 .                di
9470 .             \}
9471 .          \}
9472 .          el \{\
9473 .             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT   \}
9474 .             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
9475 .             if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT  \}
9476 .             if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS \}
9477 .             PRINT \\*[$USERDEF_HDRFTR_RECTO]
9478 .             if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS OFF \}
9479 .             EOL
9480 .             if \\n[#FOOTERS_ON] \{\
9481 .                di NULL
9482 .                SIZESPECS
9483 .                nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
9484 .                di
9485 .             \}
9486 .          \}
9487 .       \}
9488 .    \}
9489 .    el \{\
9490 .       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT   \}
9491 .       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
9492 .       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT  \}
9493 .       if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS \}
9494 .       PRINT \\*[$USERDEF_HDRFTR_RECTO]
9495 .       if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS OFF \}
9496 .       EOL
9497 .       if \\n[#FOOTERS_ON] \{\
9498 .          di NULL
9499 .          SIZESPECS
9500 .          nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
9501 .          di
9502 .       \}
9503 .    \}
9504 .    fc
9505 .    if \\n[#PRINT_STYLE]=2 \{\
9506 .       ie \\n[#HDRFTR_COLOR]=1 \m[\\*[$HDRFTR_COLOR]]
9507 .       el \m[black]
9508 .    \}
9509 .    if \\n[#HDRFTR_RULE] \{\
9510 .       HDRFTR_RULE_INTERNAL
9511 .    \}
9512 .END
9513 \#
9514 \#
9515 \# +++HEADERS+++
9516 \#
9517 \# HEADERS (off or on)
9518 \# -------------------
9519 \# *Arguments:
9520 \#   <none> | <anything>
9521 \# *Function:
9522 \#   Turns headers at the top of the page off or on.
9523 \# *Notes:
9524 \#   Default is on.
9525 \#
9526 .MAC HEADERS END
9527 .    ie '\\$1'' \{ .nr #HEADERS_ON 1 \}
9528 .    el \{ .nr #HEADERS_ON 0 \}
9529 .END
9530 \#
9531 \#
9532 \# HEADER MARGIN
9533 \# -------------
9534 \# *Argument:
9535 \#   <amount of space between top of page and header>
9536 \# *Function:
9537 \#   Creates or modifies register #HEADER_MARGIN to hold amount
9538 \#   of space between top of page and header.
9539 \# *Notes:
9540 \#   Requires unit of measure.  Default is 4P+6p, measured top-of-page
9541 \#   to baseline.
9542 \#
9543 .MAC HEADER_MARGIN END
9544 .    nr #HEADER_MARGIN (\\$1)
9545 .END
9546 \#
9547 \#
9548 \# HEADER GAP
9549 \# ----------
9550 \# *Argument:
9551 \#   <amount of space between header and running text>
9552 \# *Function:
9553 \#   Creates or modifies register #HEADER_GAP to hold amount
9554 \#   of space between header and running text.
9555 \# *Notes:
9556 \#   Default is 1P+6p.
9557 \#
9558 .MAC HEADER_GAP END
9559 .    nr #HEADER_GAP (\\$1)
9560 .END
9561 \#
9562 \#
9563 \# HEADER
9564 \# ------
9565 \# *Arguments:
9566 \#   <none>
9567 \# *Function:
9568 \#   Prints header appropriate to DOC_TYPE, PRINTSTYLE, and COPYSTYLE.
9569 \# *Notes:
9570 \#   In order to convert the title string to caps in the header (in the
9571 \#   event that the user enters .TITLE in caps/lc), I've used
9572 \#   quad left, quad centre, and quad right to arrange the three bits
9573 \#   of the header, rather than .tl.  This allows the use of the CAPS macro.
9574 \#   The downside is that I have to add \\v'-(\\n[#LEAD]u*<n>) in order
9575 \#   for -Tlatin1 output to align the header/footer strings on the baseline.
9576 \#   The console output still isn't brilliant, but at least it's
9577 \#   comprehensible.
9578 \#
9579 .MAC HEADER END
9580 .    MNtop
9581 .    rr #FROM_FOOTER
9582 .    nr #FROM_HEADER 1
9583 .    nr #LAST_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]
9584 .    if \\n[#FN_DEPTH] \{ .PROCESS_FN_LEFTOVER \}
9585 .    rr #RULED
9586 .    if \\n[#RESET_FN_NUMBER] \{ .nr #FN_NUMBER 0 1 \}
9587 .    po \\n[#DOC_L_MARGIN]u
9588 .    if \\n[#RECTO_VERSO] \{\
9589 .       if !\\n[#TOC_RV_SWITCH] \{\
9590 .          nr #DOC_LR_MARGIN_TMP \\n[#DOC_L_MARGIN]
9591 .          DOC_LEFT_MARGIN  \\n[#DOC_R_MARGIN]u
9592 .          DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u
9593 .          SWITCH_HDRFTR_CENTER_PAD
9594 .       \}
9595 .       rr #TOC_RV_SWITCH
9596 .    \}
9597 .    ev HEADER
9598 .    if \\n[#PAGE_NUM_V_POS]=1 \{ .vs 0 \}
9599 .    sp |\\n[#HEADER_MARGIN]u-1v
9600 .    mk y
9601 .    ll \\n[#DOC_L_LENGTH]u
9602 .    ta \\n(.lu
9603 .    if \\n[#PRINT_STYLE]=1 \{\
9604 .       fam C
9605 .       ft  R
9606 .       ps  12\\*[$HDRFTR_SIZE_CHANGE]
9607 .    \}
9608 .    if \\n[#PRINT_STYLE]=2 \{\
9609 .      fam \\*[$HDRFTR_FAM]
9610 .      ft  R
9611 .      ps  \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
9612 .      vs  12
9613 .    \}
9614 .    nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
9615 .    if \\n[#CAPS_ON] \{\
9616 .       nr #CAPS_WAS_ON 1
9617 .       CAPS OFF
9618 .    \}
9619 .    if \\n[#UNDERLINE_ON] \{\
9620 .       nr #UNDERLINE_WAS_ON 1
9621 .       UNDERLINE OFF
9622 .    \}
9623 .    if \\n[#PRINT_STYLE]=1 \{\
9624 .       if \\n[#ENDNOTES]=1 \{\
9625 .\" Single-spaced endotes have a different lead
9626 .          if \\n[#EN_SINGLESPACE] \{\
9627 .             nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
9628 .             nr #DOC_LEAD \\n[#EN_LEAD]u
9629 .          \}
9630 .       \}
9631 .    \}
9632 .    nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
9633 .    RLD 1v
9634 .    ie \\n[#HEADERS_ON] \{\
9635 .       PRINT_HDRFTR
9636 .       sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
9637 .    \}
9638 .    el \{\
9639 .       ie \\n[#PAGE_NUM_V_POS]=1 \{\
9640 .          ie \\n[#PAGINATE] \{\
9641 .             PRINT_PAGE_NUMBER
9642 .             sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
9643 .          \}
9644 .          el \{ .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u \}
9645 .       \}
9646 .       el \{ .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u \}
9647 .    \}
9648 .    if \\n[#PRINT_STYLE]=1 \{\
9649 .       if \\n[#ENDNOTES]=1 \{\
9650 .          if \\n[#EN_SINGLESPACE] \{\
9651 .             nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
9652 .             rr #RESTORE_DOC_LEAD
9653 .          \}
9654 .       \}
9655 .    \}
9656 .    nr #PAGE_TOP \\n(nl
9657 .    ev
9658 .    po \\n[#L_MARGIN]u
9659 .    if \\n[#RECTO_VERSO] \{\
9660 .       nr #L_MARGIN +\\n[#L_MARGIN_DIFF]
9661 .    \}
9662 .    if \\n[#CAPS_WAS_ON] \{\
9663 .       CAPS
9664 .       rr #CAPS_WAS_ON
9665 .    \}
9666 .    if \\n[#UNDERLINE_WAS_ON] \{\
9667 .       UNDERLINE
9668 .       rr #UNDERLINE_WAS_ON
9669 .    \}
9670 .    if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9671 .    if \\n[#QUOTE] \{\
9672 .       ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9673 .       el \{\
9674 .          ie r#Q_OFFSET_VALUE \{\
9675 .             nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
9676 .          \}
9677 .          el \{\
9678 .             nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
9679 .          \}
9680 .          po \\n[#Q_OFFSET]u
9681 .       \}
9682 .       if \\n[#PRINTSTYLE]=2 \{ .ALD \\n[#Q_LEAD_DIFF]u \}
9683 .    \}
9684 .    if \\n[#EPIGRAPH] \{\
9685 .       ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9686 .       el \{\
9687 .          ie r#EPI_OFFSET_VALUE \{\
9688 .             nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
9689 .          \}
9690 .          el \{\
9691 .             nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
9692 .          \}
9693 .          po \\n[#EPI_OFFSET]u
9694 .       \}
9695 .    \}
9696 .    ie \\n[#EPIGRAPH] \{\
9697 .       ie !\\n[#EPI_ACTIVE] \{\
9698 .          ns
9699 .          rr #EPI_ACTIVE
9700 .       \}
9701 .       el \{\
9702 .          ie \\n[#EPI_FITS] \{ .ns \}
9703 .          el \{ .ALD \\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u \}
9704 .       \}
9705 .    \}
9706 .    el \{ .ns \}
9707 .    ns
9708 .    if \\n[#COLUMNS] \{\
9709 .       nr #FN_COUNT_FOR_COLS 0 1
9710 .       nr #L_MARGIN \\n[#DOC_L_MARGIN]
9711 .       if \\n[#RECTO_VERSO] \{ .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u \}
9712 .       nr #COL_NUM 0 1
9713 .       mk dc
9714 .       po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
9715 .       nr #L_MARGIN \\n(.o
9716 .       if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9717 .       ll \\n[#COL_L_LENGTH]u
9718 .       ta \\n(.lu
9719 .       if \\n[#QUOTE] \{\
9720 .          ie r#Q_OFFSET_VALUE \{\
9721 .             po +(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
9722 .          \}
9723 .          el \{\
9724 .             po +\\*[$Q_OFFSET_VALUE]
9725 .          \}
9726 .       \}
9727 .       if \\n[#EPIGRAPH] \{\
9728 .          if \\n[#EPI_ACTIVE] \{\
9729 .             ie \\n[#EPI_FITS] \{ . \}
9730 .             el \{ .nr dc -\\n[#EPI_LEAD_DIFF] \}
9731 .          \}
9732 .          ie r#EPI_OFFSET_VALUE \{\
9733 .             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+(\\n[#PP_INDENT]u*\\n[#EPI_OFFSET_VALUE]u)
9734 .          \}
9735 .          el \{\
9736 .             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+\\*[$EPI_OFFSET_VALUE]
9737 .          \}
9738 .       \}
9739 .    \}
9740 .    if \\n[#RESET_FN_COUNTERS]=1 \{\
9741 .       rr #RESET_FN_COUNTERS
9742 .       PROCESS_FN_IN_DIVER
9743 .       nr #FN_COUNT \\n[#SAVED_FN_COUNT] 1
9744 .       if \\n[#COLUMNS]=1 \{ .nr #FN_COUNT_FOR_COLS \\n[#SAVED_FN_COUNT_FOR_COLS] 1 \}
9745 .       ie \\n[#RESET_FN_NUMBER]=1 \{ .nr #FN_NUMBER \\n[#SAVED_FN_NUMBER] 1 \}
9746 .       el \{ .nr #FN_NUMBER \\n[#FN_NUMBER] 1 \}
9747 .       rm FN_IN_DIVER
9748 .       if dRUNON_FN_IN_DIVER \{ .rm RUNON_FN_IN_DIVER \}
9749 .    \}
9750 .    if \\n[#PRINT_STYLE]=1 \{\
9751 .       if \\n[#SLANT_ON] \{\
9752 .          if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
9753 .       \}
9754 .       if \\n[#UNDERLINE_ON]=1 \{\
9755 .          if \\n[#UNDERLINE_ITALIC] \{ .UNDERLINE \}
9756 .       \}
9757 .    \}
9758 .    rr #FROM_HEADER
9759 .    rr #DEFER_SPACE_ADDED
9760 .    if !\\n[#FN_DEPTH] \{\
9761 .       if r#DIVERTED \{ .rr #DIVERTED \}
9762 .    \}
9763 .    if \\n[#MN_OVERFLOW_LEFT]=1 \{\
9764 .       MN LEFT
9765 .       nf
9766 .       MN_OVERFLOW_LEFT
9767 .       MN
9768 .    \}
9769 .    if \\n[#MN_OVERFLOW_RIGHT]=1 \{\
9770 .       MN RIGHT
9771 .       nf
9772 .       MN_OVERFLOW_RIGHT
9773 .       MN
9774 .    \}
9775 .    rm MN_OVERFLOW_LEFT
9776 .    rr #MN_OVERFLOW_LEFT
9777 .    rr #no-repeat-MN-left
9778 .    rm MN_OVERFLOW_RIGHT
9779 .    rr #MN_OVERFLOW_RIGHT
9780 .    rr #no-repeat-MN-right
9781 .    if \\n[#PRE_COLLATE]=1 \{ .rr #PRE_COLLATE \}
9782 .END
9783 \#
9784 \# ====================================================================
9785 \#
9786 \# +++FOOTERS+++
9787 \#
9788 \# FOOTERS (off or on)
9789 \# -------------------
9790 \# *Arguments:
9791 \#   <none> | <anything>
9792 \# *Function:
9793 \#   Turns footers at the bottom of the page off or on.
9794 \# *Notes:
9795 \#   Default is off.  If on, page numbers automatically go at
9796 \#   the top, centered, unless pagination has been turned off,
9797 \#   or the pagenumber position has been changed to left or right.
9798 \#
9799 .MAC FOOTERS END
9800 .    ie '\\$1''   \{\
9801 .       rr #HEADERS_ON
9802 .       nr #FOOTERS_ON 1
9803 .       PAGENUM_POS TOP CENTER
9804 .    \}
9805 .    el \{ .nr #FOOTERS_ON 0 \}
9806 .END
9807 \#
9808 \#
9809 \# FOOTER MARGIN
9810 \# -------------
9811 \# *Argument:
9812 \#   <footer margin>
9813 \# *Function:
9814 \#   Creates or modifies register #FOOTER_MARGIN which holds the
9815 \#   amount of space to leave between the page number and the bottom
9816 \#   of the page.
9817 \# *Notes:
9818 \#   Unit of measure required.  Default is 3P.
9819 \#
9820 .MAC FOOTER_MARGIN END
9821 .    ie \\n%>0 \{ .nr #FOOTER_MARGIN (\\$1) \}
9822 .    el \{ . \}
9823 .END
9824 \#
9825 \#
9826 \# FOOTER GAP
9827 \# ----------
9828 \# *Argument:
9829 \#   <distance from end of running text to page # or footer>
9830 \# *Function:
9831 \#   Creates or modifies register #FOOTER_GAP which holds the
9832 \#   amount of space to leave between running text and the page number.
9833 \# *Notes:
9834 \#   Requires unit of measure.  Default is 3P.  Measured baseline to
9835 \#   baseline.
9836 \#
9837 .MAC FOOTER_GAP END
9838 .    ie \\n%>0 \{ .nr #FOOTER_GAP (\\$1) \}
9839 .    el \{ . \}
9840 .END
9841 \#
9842 \#
9843 \# FOOTER
9844 \# ------
9845 \# *Arguments:
9846 \#   <none>
9847 \# *Function:
9848 \#   Places footer at bottom of page if #FOOTERS=1, otherwise
9849 \#   places page number at bottom of page (if #PAGINATE=1).
9850 \#   Page numbers are in arabic or roman according to COPYSTYLE.
9851 \#   DRAFT starts the document at page 1 regardless of PAGENUMBER.
9852 \#   FINAL respects PAGENUMBER.
9853 \#
9854 .MAC FOOTER END
9855 .    ev PAGE_TRANSITION
9856 .    if \\n[MN-left]>0 \{\
9857 .       if !\\n[#no-repeat-MN-left]=1 \{\
9858 .          MNbottom-left
9859 .          nr #no-repeat-MN-left 1
9860 .       \}
9861 .       if '\\n(.z'MN_OVERFLOW_LEFT' \{\
9862 .          di
9863 .          nr #MN_OVERFLOW_LEFT 1
9864 .          rr #OVERFLOW_LEFT
9865 .       \}
9866 .    \}
9867 .    if \\n[MN-right]>0 \{\
9868 .       if (\\n[MN-right] > 0) \{\
9869 .          if !\\n[#no-repeat-MN-right]=1 \{\
9870 .             MNbottom-right
9871 .          \}
9872 .       \}
9873 .       if '\\n(.z'MN_OVERFLOW_RIGHT' \{\
9874 .          di
9875 .          nr #MN_OVERFLOW_RIGHT 1
9876 .          rr #OVERFLOW_RIGHT
9877 .       \}
9878 .    \}
9879 .    ch MN_OVERFLOW_TRAP
9880 .    nr #SAVED_LEAD \\n(.v
9881 .    nr #L_MARGIN_DIFF \\n[#L_MARGIN]-\\n[#DOC_L_MARGIN]
9882 .    if !\\n[#FN_DEFER] \{\
9883 .       nr #DIVER_DEPTH 0
9884 .       if \\n[#FN_DEPTH] \{\
9885 .          if \\n[#DIVERTED]=3 \{ .nr #FN_DEPTH +\\n[#VFP_DIFF] \}
9886 .          vpt 0
9887 .          sp |\\n[#PAGE_LENGTH]u-(\\n[#B_MARGIN]u+\\n[#FN_DEPTH]u-\\n[#DOC_LEAD]u)
9888 .          vpt 1
9889 .          po \\n[#DOC_L_MARGIN]u
9890 .          if \\n[#COLUMNS] \{\
9891 .             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
9892 .             nr #L_MARGIN \\n(.o
9893 .             nr #FROM_FOOTER 1
9894 .          \}
9895 .          nf
9896 .          FOOTNOTES
9897 .          rm FOOTNOTES
9898 .          if dRUNON_FOOTNOTES \{ .rm RUNON_FOOTNOTES \}
9899 .          if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#SAVED_LEAD]u \}
9900 .          if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#SAVED_LEAD]u \}
9901 .          if '\\n(.z'FN_OVERFLOW' \{\
9902 .              di
9903 .              nr #FN_OVERFLOW_DEPTH \\n[#DIVER_DEPTH]
9904 .          \}
9905 .          nr #FN_COUNT_AT_FOOTER \\n[#FN_COUNT]
9906 .          nr #FN_COUNT 0
9907 .          if \\n[#COL_NEXT] \{\
9908 .             ie !\\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #COL_NUM \\n-[#COL_NUM] \}
9909 .             el \{ .nr #COL_NUM \\n[#NUM_COLS] 1 \}
9910 .          \}
9911 .       \}
9912 .       rr #DIVERTED
9913 .    \}
9914 .    ie \\n[#COLUMNS]=1 \{\
9915 .       ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .DO_FOOTER \}
9916 .       el \{\
9917 .          ie \\n[#ENDNOTES] \{ .sp |\\n(ecu-\\n[#EN_LEAD]u \}
9918 .          el \{ .sp |\\n(dcu \}
9919 .          po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
9920 .          nr #L_MARGIN \\n(.o
9921 .          if \\n[#FN_DEPTH] \{ .PROCESS_FN_LEFTOVER \}
9922 .          LS \\n[#SAVED_LEAD]u
9923 .          if \\n[#PREV_FN_DEFERRED] \{\
9924 .             nr #PREV_FN_DEFERRED 2
9925 .          \}
9926 .          rr #RULED
9927 .          if !\\n[#EPIGRAPH] \{ .rr #COL_NEXT \}
9928 .          if !\\n[#QUOTE]    \{ .rr #COL_NEXT \}
9929 .          if \\n[#RESET_FN_COUNTERS]=1 \{\
9930 .             rr #RESET_FN_COUNTERS
9931 .             PROCESS_FN_IN_DIVER
9932 .             LS \\n[#SAVED_LEAD]u
9933 .             nr #FN_COUNT \\n[#FN_COUNT] 1
9934 .             nr #FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS] 1
9935 .             rm FN_IN_DIVER
9936 .             if dRUNON_FN_IN_DIVER \{ .rm RUNON_FN_IN_DIVER \}
9937 .          \}
9938 .          rr #DEFER_SPACE_ADDED
9939 .          if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9940 .          if \\n[#QUOTE] \{\
9941 .             ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9942 .             el \{\
9943 .                ie r#Q_OFFSET_VALUE \{\
9944 .                   nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
9945 .                \}
9946 .                el \{\
9947 .                   nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
9948 .                \}
9949 .                if \\n[#COLUMNS] \{\
9950 .                   ie r#Q_OFFSET_VALUE \{\
9951 .                      nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
9952 .                   \}
9953 .                   el \{\
9954 .                      nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE]
9955 .                   \}
9956 .                \}
9957 .                po \\n[#Q_OFFSET]u
9958 .             \}
9959 .          \}
9960 .          if \\n[#EPIGRAPH] \{\
9961 .             ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
9962 .             el \{\
9963 .                ie r#EPI_OFFSET_VALUE \{\
9964 .                   nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
9965 .                \}
9966 .                el \{\
9967 .                   nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
9968 .                \}
9969 .                if \\n[#COLUMNS] \{\
9970 .                   ie r#EPI_OFFSET_VALUE \{\
9971 .                      nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
9972 .                   \}
9973 .                   el \{\
9974 .                      nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
9975 .                   \}
9976 .                \}
9977 .                po \\n[#EPI_OFFSET]u
9978 .             \}
9979 .          \}
9980 .          ie \\n[#EPIGRAPH] \{\
9981 .             ie !\\n[#EPI_ACTIVE] \{\
9982 .                ns
9983 .                rr #EPI_ACTIVE
9984 .             \}
9985 .             el \{\
9986 .                sp |\\n(dcu+(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
9987 .                rr #EPI_ACTIVE
9988 .             \}
9989 .          \}
9990 .          el \{ .ns \}
9991 .          ev
9992 .       \}
9993 .       ns
9994 .       rr #DIVERTED
9995 .    \}
9996 .    el \{ .DO_FOOTER \}
9997 .END
9998 \#
9999 \#
10000 \# PROCESS FOOTER
10001 \# --------------
10002 \# *Arguments:
10003 \#   <none>
10004 \# *Function:
10005 \#   Prints footer (page number, or 3-part footer).
10006 \#   Resets CAPS and UNDERLINE if they were on.
10007 \#
10008 .MAC DO_FOOTER END
10009 .\" Have to change position of FN_OVERFLOW_TRAP or it screws up the
10010 .\" placement of page numbers (or footers).  It's reset to its original
10011 .\" position at the end of the macro.
10012 .    if r#SAVED_FOOTER_POS \{ .ch FOOTER \\n[#SAVED_FOOTER_POS]u \}
10013 .    rr #SAVED_FOOTER_POS
10014 .    ie (\\n[#FOOTER_MARGIN]+\\n(.v)>\\n[#B_MARGIN] \{\
10015 .       nr #SKIP_FOOTER 1
10016 .    \}
10017 .    el \{\
10018 .       vpt 0
10019 .       sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u-1v
10020 .       mk y
10021 .       vpt 1
10022 .    \}
10023 .    ev FOOTER
10024 .    po \\n[#DOC_L_MARGIN]u
10025 .    ll \\n[#DOC_L_LENGTH]u
10026 .    ta \\n(.lu
10027 .    if \\n[#PRINT_STYLE]=1 \{\
10028 .       TYPEWRITER
10029 .    \}
10030 .    if \\n[#PRINT_STYLE]=2 \{\
10031 .       fam  \\*[$HDRFTR_FAM]
10032 .       ft      R
10033 .       ps \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
10034 .    \}
10035 .    vs \\n[#SAVED_LEAD]u
10036 .    nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
10037 .    if \\n[#CAPS_ON] \{\
10038 .       nr #CAPS_WAS_ON 1
10039 .       CAPS OFF
10040 .    \}
10041 .    if \\n[#UNDERLINE_ON] \{\
10042 .       nr #UNDERLINE_WAS_ON 1
10043 .       UNDERLINE OFF
10044 .    \}
10045 .    ie \\n[#FOOTERS_ON] \{\
10046 .       if !\\n[#SKIP_FOOTER]=1 \{ .PRINT_HDRFTR \}
10047 .    \}
10048 .    el \{\
10049 .       if \\n[#PAGINATE] \{\
10050 .          if \\n[#PAGE_NUM_V_POS]=2 \{\
10051 .             if !\\n[#SKIP_FOOTER]=1 \{ .PRINT_PAGE_NUMBER \}
10052 .          \}
10053 .       \}
10054 .    \}
10055 .    rr #SKIP_FOOTER
10056 .    if \\n[#CAPS_WAS_ON] \{\
10057 .       CAPS
10058 .       rr #CAPS_WAS_ON
10059 .    \}
10060 .    if \\n[#UNDERLINE_WAS_ON] \{\
10061 .       UNDERLINE
10062 .       rr #UNDERLINE_WAS_ON
10063 .    \}
10064 .    ev
10065 .    rr #SAVED_LEAD
10066 .    bp
10067 .\" This ev pops the PAGE_TRANSITION environment still active at the
10068 .\" end of HEADER
10069 .    ev
10070 .END
10071 \#
10072 \# ====================================================================
10073 \#
10074 \# +++HEADERS AND FOOTERS+++
10075 \#
10076 \# HEADERS_AND_FOOTERS
10077 \# -------------------
10078 \# *Arguments:
10079 \#   HEADER_RECTO_QUAD \
10080 \#   HEADER_RECTO_STRING \
10081 \#   FOOTER_RECTO_QUAD \
10082 \#   FOOTER_RECTO_STRING \
10083 \#   HEADER_VERSO_QUAD \
10084 \#   HEADER_VERSO_STRING \
10085 \#   FOOTER_VERSO_QUAD \
10086 \#   FOOTER_VERSO_STRING
10087 \#   | <anything>
10088 \# *Function:
10089 \#   Allows having both headers and footers.  Sets register
10090 \#   #HDRFTR_BOTH to 1; collects HEADER/FOOTER_RECTO/VERSO
10091 \#   information; appends FOOTER_RECTO and FOOTER_VERSO to
10092 \#   START and turns off pagination; appends to macros
10093 \#   PRINT_USERDEF_HDRFTR and HEADER the necessary number
10094 \#   register manipulations and redefinitions of the
10095 \#   HEADER/FOOTER_RECTO/VERSO strings so that both
10096 \#   headers and footers get printed, with the appropriate
10097 \#   strings for each
10098 \# *Notes:
10099 \#   Works in conjunction with HDRFTR_RECTO and HDRFTR_VERSO (qqv.),
10100 \#   ergo all style changes must be done inline in the strings
10101 \#   passed as arguments.
10102 \#
10103 .MAC HEADERS_AND_FOOTERS END
10104 .    ie \\n[#NUM_ARGS]>1 \{\
10105 .    nr #HDRFTR_BOTH 1
10106 .    nr #FOOTERS_ON  1
10107 .    if !r#HEADER_RULE .nr #HEADER_RULE 1
10108 .    if !r#FOOTER_RULE .nr #FOOTER_RULE 1
10109 .    ds $HDR_RECTO_QUAD   \\$1
10110 .    ds $HDR_RECTO_STRING \\$2
10111 .    ds $FTR_RECTO_QUAD   \\$3
10112 .    ds $FTR_RECTO_STRING \\$4
10113 .    ds $HDR_VERSO_QUAD   \\$5
10114 .    ds $HDR_VERSO_STRING \\$6
10115 .    ds $FTR_VERSO_QUAD   \\$7
10116 .    ds $FTR_VERSO_STRING \\$8
10117 .am START DONE
10118 .   if \\\\n[#HDRFTR_BOTH]=1 \{\
10119 .      FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
10120 .      FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
10121 .      if \\\\n[#HEADER_RULE]=1 \{ .HEADER_RULE \}
10122 .      ie \\\\n[#FOOTER_RULE]=1 \{ .FOOTER_RULE \}
10123 .      el \{ .FOOTER_RULE OFF \}
10124 .      if r#PAGINATE .rr #PAGINATE
10125 .      if r#PAGE_NUM_V_POS .rr #PAGE_NUM_V_POS
10126 .\}
10127 .DONE
10128 .am PRINT_USERDEF_HDRFTR DONE
10129 .   if \\\\n[#HDRFTR_BOTH]=1 \{\
10130 .      if \\n[#FOOTERS_ON]=1 \{\
10131 .         if !\\\\n[#COLLATE]=1 \{\
10132 .         HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
10133 .         HEADER_VERSO \\*[$HDR_VERSO_QUAD] "\\*[$HDR_VERSO_STRING]"
10134 .         rr #FOOTERS_ON
10135 .         nr #HEADERS_ON 1
10136 .         ie \\\\n[#HEADER_RULE]=1 \{ .HEADER_RULE \}
10137 .         el \{ .HEADER_RULE OFF \}
10138 .      \}
10139 .      \}
10140 .      if \\n[#HEADERS_ON]=1 \{\
10141 .         FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
10142 .         FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
10143 .      \}
10144 .   \}
10145 .DONE
10146 .am HEADER DONE
10147 .   if \\\\n[#HDRFTR_BOTH]=1 \{\
10148 .      if r#START_FOR_FOOTERS .rr #START_FOR_FOOTERS
10149 .      rr #HEADERS_ON
10150 .      nr #FOOTERS_ON 1
10151 .      FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
10152 .      FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
10153 .      ie \\\\n[#FOOTER_RULE]=1 \{ .FOOTER_RULE \}
10154 .      el \{ .FOOTER_RULE OFF \}
10155 .   \}
10156 .DONE
10157 .    \}
10158 .    el \{\
10159 .       rr #HDRFTR_BOTH
10160 .       rr #USERDEF_HDRFTR
10161 .       rm $USERDEF_HDRFTR_RECTO
10162 .       rm $USERDEF_HDRFTR_VERSO
10163 .       FOOTERS OFF
10164 .       HEADERS
10165 .       if \\n[#COLLATE]=1 \{\
10166 .          nr #HEADER_STATE 1
10167 .          nr #PAGINATION_STATE 1
10168 .       \}
10169 .       PAGINATE
10170 .       PAGENUM_POS BOTTOM CENTER
10171 .       nr #HF_OFF 1
10172 .    \}
10173 .END
10174 \#
10175 \# ====================================================================
10176 \#
10177 \# +++HEADS+++
10178 \#
10179 \# ---Head numbers---
10180 \#
10181 \# NUMBER HEADS
10182 \# ------------
10183 \# *Arguments:
10184 \#   <none> | <anything>
10185 \# *Function:
10186 \#   Toggles register #NUMBER_HEAD; sets incrementing register #HEAD_NUM.
10187 \# *Notes:
10188 \#   Default is OFF.
10189 \#
10190 .MAC NUMBER_HEADS END
10191 .    ie '\\$1'' \{\
10192 .       nr #NUMBER_HEAD 1
10193 .       if !\\n[#HEAD_NUM] \{ .nr #HEAD_NUM 0 1 \}
10194 .    \}
10195 .    el \{ .rr #NUMBER_HEAD \}
10196 .END
10197 \#
10198 \#
10199 \# RESET HEAD NUMBER
10200 \# -----------------
10201 \# *Arguments:
10202 \#   <none> | <desired head number>
10203 \# *Function:
10204 \#   Resets incrementing register #HEAD_NUM to 1 or, if there's
10205 \#   an argument, to user supplied number.
10206 \# *Notes:
10207 \#   Also resets subhead and parahead numbers.  If this is not
10208 \#   desired, subhead and parahead numbers may be reset individually.
10209 \#
10210 .MAC RESET_HEAD_NUMBER END
10211 .    ie '\\$1'' \{\
10212 .       nr #HEAD_NUM 0 1
10213 .       nr #SH_NUM   0 1
10214 .       nr #PH_NUM   0 1
10215 .    \}
10216 .    el \{\
10217 .       nr #HEAD_NUM \\$1-1 1
10218 .       nr #SH_NUM   0 1
10219 .       nr #PH_NUM   0 1
10220 .    \}
10221 .END
10222 \#
10223 \#
10224 \# NUMBER SUBHEADS
10225 \# ---------------
10226 \# *Arguments:
10227 \#   <none> | <anything>
10228 \# *Function:
10229 \#   Toggles register #NUMBER_SH; sets incrementing register #SH_NUM.
10230 \# *Notes:
10231 \#   Default is OFF.
10232 \#
10233 .MAC NUMBER_SUBHEADS END
10234 .    ie '\\$1'' \{\
10235 .       nr #NUMBER_SH 1
10236 .       if !\\n[#SH_NUM] \{ .nr #SH_NUM 0 1 \}
10237 .    \}
10238 .    el \{ .rr #NUMBER_SH \}
10239 .END
10240 \#
10241 \#
10242 \# RESET SUBHEAD NUMBER
10243 \# --------------------
10244 \# *Arguments:
10245 \#   <none> | <desired subhead number>
10246 \# *Function:
10247 \#   Resets incrementing register #SH_NUM to 1 or, if there's
10248 \#   an argument, to user supplied number.
10249 \# *Notes:
10250 \#   When the subhead number is reset, it resets the parahead number as
10251 \#   well.  If this behaviour is not what's wanted, RESET_SUBHEAD_NUMBER
10252 \#   allows the user to set the parahead number to whatever s/he desires.
10253 \#
10254 .MAC RESET_SUBHEAD_NUMBER END
10255 .    ie '\\$1'' \{ .nr #SH_NUM 0 1 \}
10256 .    el \{\
10257 .       nr #SH_NUM \\$1-1 1
10258 .       nr #PH_NUM 0 1
10259 .       \}
10260 .END
10261 \#
10262 \#
10263 \# NUMBER PARAHEADS
10264 \# ----------------
10265 \# *Arguments:
10266 \#   <none> | <anything>
10267 \# *Function:
10268 \#   Toggles register #NUMBER_PH; sets incrementing register #PH_NUM.
10269 \# *Notes:
10270 \#   Default is OFF.
10271 \#
10272 .MAC NUMBER_PARAHEADS END
10273 .    ie '\\$1'' \{\
10274 .       nr #NUMBER_PH 1
10275 .       if !\\n[#PH_NUM] \{ .nr #PH_NUM 0 1 \}
10276 .    \}
10277 .    el \{ .rr #NUMBER_PH \}
10278 .END
10279 \#
10280 \#
10281 \# RESET PARAHEAD NUMBER
10282 \# ---------------------
10283 \# *Arguments:
10284 \#   <none> | <desired parahead number>
10285 \# *Function:
10286 \#   Resets incrementing register #PH_NUM to 1 or, if there's
10287 \#   an argument, to user supplied number.
10288 \# *Notes:
10289 \#   Resetting the parahead number resets the parahead number
10290 \#   only.
10291 \#
10292 .MAC RESET_PARAHEAD_NUMBER END
10293 .    ie '\\$1'' \{ .nr #PH_NUM 0 1 \}
10294 .    el \{ .nr #SH_NUM \\$1-1 1 \}
10295 .END
10296 \#
10297 \#
10298 \# PREFIX CHAPTER NUMBERS TO NUMBERED HEADS, SUBHEADS AND PARAHEADS
10299 \# ----------------------------------------------------------------
10300 \# *Arguments:
10301 \#   <none> | <chapter number> | <anything>
10302 \# *Function:
10303 \#   Toggles register #PREFIX_CH_NUM. Sets register #CH_NUM from
10304 \#   string $CHAPTER if $CHAPTER is a digit; if <chapter number> arg
10305 \#   given, sets #CH_NUM to arg.
10306 \# *Notes:
10307 \#   Default is OFF.
10308 \#
10309 .MAC PREFIX_CHAPTER_NUMBER END
10310 .    ie '\\$1'' \{\
10311 .       ie r#CH_NUM \{\
10312 .          nr #PREFIX_CH_NUM 1
10313 .          if \\n[#CHAPTER_CALLED] \{\
10314 .             ie \B'\\*[$CHAPTER]' \{\
10315 .                nr #CH_NUM \\*[$CHAPTER]
10316 .             \}
10317 .             el \{\
10318 .                PREFIX_CH_NUM_WARNING
10319 .             \}
10320 .             rr #CHAPTER_CALLED
10321 .          \}
10322 .       \}
10323 .       el \{\
10324 .          ie \B'\\*[$CHAPTER]' \{\
10325 .             nr #PREFIX_CH_NUM 1
10326 .             nr #CH_NUM \\*[$CHAPTER]
10327 .          \}
10328 .          el \{\
10329 .             PREFIX_CH_NUM_WARNING
10330 .          \}
10331 .       \}
10332 .    \}
10333 .    el \{\
10334 .       ie \B'\\$1' \{\
10335 .          nr #CH_NUM \\$1
10336 .          nr #PREFIX_CH_NUM 1
10337 .       \}
10338 .       el \{\
10339 .          rr #PREFIX_CH_NUM
10340 .       \}
10341 .    \}
10342 .END
10343 \#
10344 .MAC PREFIX_CH_NUM_WARNING END
10345 .    tm1 "[mom]: PREFIX_CHAPTER_NUMBER cannot determine a chapter number.
10346 .    tm1 "       Please enter the current chapter number as a digit after
10347 .    tm1 "       PREFIX_CHAPTER_NUMBER.
10348 .    ab Aborting on PREFIX_CHAPTER_NUMBER at line \\n(.c.
10349 .END
10350 \#
10351 \#
10352 \# ---Main heads---
10353 \#
10354 \# HEAD CAPS
10355 \# ---------
10356 \# *Arguments:
10357 \#   <none> | <anything>
10358 \# *Function:
10359 \#   Creates or modifies register #HEAD_CAPS.
10360 \# *Notes:
10361 \#   Default is on.
10362 \#
10363 .MAC HEAD_CAPS END
10364 .    ie '\\$1'' \{ .nr #HEAD_CAPS 1 \}
10365 .    el \{ .nr #HEAD_CAPS 0 \}
10366 .END
10367 \#
10368 \#
10369 \# HEAD SPACE
10370 \# ----------
10371 \# *Arguments:
10372 \#   <none> | <anything>
10373 \# *Function:
10374 \#   Creates register #HEAD_SPACE, which toggles whether the space
10375 \#   before heads is 1 extra line space ("off") or 2 ("on").  Used only
10376 \#   in PRINTSTYLE TYPESET.
10377 \# *Notes:
10378 \#   Default is on.
10379 \#
10380 .MAC HEAD_SPACE END
10381 .    ie '\\$1'' \{ .nr #HEAD_SPACE 1 \}
10382 .    el \{ .nr #HEAD_SPACE 0 \}
10383 .END
10384 \#
10385 \#
10386 \# MAIN HEAD
10387 \# ---------
10388 \# *Arguments:
10389 \#   "text of main head" ["text of main head"] ...
10390 \# *Function:
10391 \#   In TYPEWRITE, prints main heads centered, all caps, underlined.
10392 \#   In TYPESET, prints bold main heads 1 point larger than running
10393 \#   text, all caps, underlined.
10394 \# *Notes:
10395 \#   The HEAD macro requires that double-quotes (") surround
10396 \#   each line of text.
10397 \#
10398 .MAC HEAD END
10399 .    br
10400 .    if \\n[#PRINT_STYLE]=1 \{ .ne \\n[#NUM_ARGS]+2 \}
10401 .    if \\n[#PRINT_STYLE]=2 \{\
10402 .       ie \\n[#HEAD_SPACE] \{ .ne \\n[#NUM_ARGS]+3 \}
10403 .       el \{ .ne \\n[#NUM_ARGS]+2 \}
10404 .    \}
10405 .\" Collect head for TOC.
10406 .    nr #ARG_NUM 0 1
10407 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
10408 .    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
10409 .    while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10410 .       ie \\n[#ARG_NUM]=\\n[#NUM_ARGS] \{\
10411 .          as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\\|
10412 .       \}
10413 .       el \{\
10414 .\" Note that in the .as lines, below, \ at the end has a literal
10415 .\" space after it.
10416 .          ie \\n[#NUMBER_HEAD] \{\
10417 .             ie \\n[#ARG_NUM]=0 \{\
10418 .                as $TOC_HEAD_ITEM \\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\ \"
10419 .                nr #HEAD_NUM \\n-[#HEAD_NUM]
10420 .             \}
10421 .             el \{\
10422 .                as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\ \"
10423 .             \}
10424 .          \}
10425 .          el \{\
10426 .             as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\ \"
10427 .          \}
10428 .       \}
10429 .\}
10430 .\" Note the use of \!, which transparently embeds the macros used
10431 .\" in the TOC_ENTRIES diversion.  The elements they control must be
10432 .\" processed literally when the diversion is output.
10433 .    ev TOC_EV
10434 .    da TOC_ENTRIES
10435 .    if \\n[#PRINT_STYLE]=1 \{\
10436 \!.     fam C
10437 \!.     ft  R
10438 \!.     ps  12
10439 .    \}
10440 .    if \\n[#PRINT_STYLE]=2 \{\
10441 \!.     FAMILY  \\*[$TOC_HEAD_FAM]
10442 \!.     FT      \\*[$TOC_HEAD_FT]
10443 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_HEAD_SIZE_CHANGE]
10444 .    \}
10445 \!.  TRAP OFF
10446 \!.  PAD_MARKER ^
10447 .    ie \\n[#PRINT_STYLE]=1 \{\
10448 \!.     PAD "\\h'2m'\\*[$TOC_HEAD_ITEM]\\*[$TOC_PN_TYPEWRITE]"
10449 .    \}
10450 .    el \{\
10451 \!.     PAD "\\h'\\n[#TOC_HEAD_INDENT]u'\\*[$TOC_HEAD_ITEM]\\*[$TOC_PN]"
10452 .    \}
10453 \!.  PAD_MARKER #
10454 \!.  EOL
10455 \!.  ST 100 L
10456 \!.  ST 101 R
10457 .    if \\n[#PRINT_STYLE]=2 \{\
10458 \!.     FAMILY  \\*[$TOC_PN_FAM]
10459 \!.     FT      \\*[$TOC_PN_FT]
10460 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
10461 .    \}
10462 \!.  TAB 100
10463 \!.  PRINT \\*[LEADER]
10464 \!.  TN
10465 \!.  TRAP
10466 \!.  PRINT \\n[#TOC_ENTRY_PN]
10467 \!.  TQ
10468 .    di
10469 .    ev
10470 .\" End collection of head for TOC
10471 .\" Process head
10472 .    nr #HEAD 1
10473 .    ev HEAD
10474 .    ll \\n[#L_LENGTH]u
10475 .    ta \\n(.lu
10476 .    if \\n[#COLUMNS] \{\
10477 .       ll \\n[#COL_L_LENGTH]u
10478 .       ta \\n(.lu
10479 .    \}
10480 .    CHECK_INDENT
10481 .    QUAD \\*[$HEAD_QUAD]
10482 .    if \\n[#PRINT_STYLE]=1 \{\
10483 .       TYPEWRITER
10484 .       vs  \\n[#DOC_LEAD]u
10485 .       UNDERLINE OFF
10486 .    \}
10487 .    if \\n[#PRINT_STYLE]=2 \{\
10488 .       FAMILY  \\*[$HEAD_FAM]
10489 .       FT      \\*[$HEAD_FT]
10490 .       PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$HEAD_SIZE_CHANGE]
10491 .       LS      \\n[#DOC_LEAD]u
10492 .    \}
10493 .    if r#QUOTE             \{ .rr #QUOTE \}
10494 .    if r#EPIGRAPH          \{ .rr #EPIGRAPH \}
10495 .    ie \\n[#START] \{\
10496 .       if \\n[#DOC_HEADER]=0 \{ .RLD 1v \}
10497 .    \}
10498 .    el \{\
10499 .       if \\n[#PRINT_STYLE]=1 \{\
10500 .          if !\\n[#LINEBREAK] \{\
10501 .             ALD \\n[#DOC_LEAD]u
10502 .             if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
10503 .          \}
10504 .       \}
10505 .       if \\n[#PRINT_STYLE]=2 \{\
10506 .          ie \\n[#PP_SPACE] \{\
10507 .             ie \\n[#END_QUOTE] \{ . \}
10508 .             el \{\
10509 .                if !\\n[#LINEBREAK] \{\
10510 .                   if \\n[#HEAD_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
10511 .                \}
10512 .             \}
10513 .          \}
10514 .          el \{\
10515 .             ie \\n[#HEAD_SPACE] \{ .ALD \\n[#DOC_LEAD]u*2u \}
10516 .             el \{ .ALD \\n[#DOC_LEAD]u \}
10517 .          \}
10518 .          if \\n[#END_QUOTE] \{\
10519 .             if !\\n[#Q_FITS] \{\
10520 .                RLD \\n[#DOC_LEAD]u
10521 .                if \\n[#PP_ACTIVE] \{ .ALD \\n[#DOC_LEAD]u \}
10522 .             \}
10523 .             if \\n[#Q_AT_TOP] \{\
10524 .                RLD \\n[#DOC_LEAD]u
10525 .                if \\n[#Q_AT_TOP] \{ .ALD \\n[#DOC_LEAD]u \}
10526 .             \}
10527 .          \}
10528 .          if \\n[#LINEBREAK] \{\
10529 .             if \\n[#HEAD_SPACE] \{ .RLD \\n[#DOC_LEAD]u \}
10530 .          \}
10531 .       \}
10532 .    \}
10533 .\" Print head
10534 .    nr #ARG_NUM 0 1
10535 .    nr #FROM_HEAD 1
10536 .    if \\n[#HEAD_CAPS] \{ .CAPS \}
10537 .    if \\n[#PRINT_STYLE]=2 \{\
10538 .       if \\n[#HEAD_COLOR]=1 \{\
10539 .          TRAP OFF
10540 .          COLOR \\*[$HEAD_COLOR]
10541 .          EOL
10542 .          TRAP
10543 .       \}
10544 .    \}
10545 .    if \\n[#PRINT_STYLE]=1 \{\
10546 .       ie \\n[#HEAD_CAPS]=1 \{\
10547 .          ds $HEAD_UNDERLINE_GAP 2p
10548 .       \}
10549 .       el \{\
10550 .          ds $HEAD_UNDERLINE_GAP 4p
10551 .       \}
10552 .    \}
10553 .    while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10554 .       ie \\n[#NUMBER_HEAD] \{\
10555 .          ie \\n[#ARG_NUM]=0 \{\
10556 .             ie \\n[#PREFIX_CH_NUM]=1 \{\
10557 .                ds $CH_NUM \\n[#CH_NUM].
10558 .             \}
10559 .             el \{\
10560 .                rm $CH_NUM
10561 .             \}
10562 .             br
10563 .             ie \\n[#HEAD_UNDERLINE]=0 \{\
10564 .                PRINT "\\*[$CH_NUM]\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]"
10565 .             \}
10566 .             el \{\
10567 .                UNDERSCORE \\*[$HEAD_UNDERLINE_GAP] "\\*[$CH_NUM]\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]"
10568 .             \}
10569 .             br
10570 .          \}
10571 .          el \{\
10572 .             br
10573 .             ie \\n[#HEAD_UNDERLINE]=0 \{\
10574 .                PRINT "\\$[\\n+[#ARG_NUM]]"
10575 .             \}
10576 .             el \{\
10577 .                UNDERSCORE \\*[$HEAD_UNDERLINE_GAP] "\\$[\\n+[#ARG_NUM]]"
10578 .             \}
10579 .             br
10580 .          \}
10581 .       \}
10582 .       el \{\
10583 .          br
10584 .          ie \\n[#HEAD_UNDERLINE]=0 \{\
10585 .             PRINT "\\$[\\n+[#ARG_NUM]]"
10586 .          \}
10587 .          el \{\
10588 .             UNDERSCORE \\*[$HEAD_UNDERLINE_GAP] "\\$[\\n+[#ARG_NUM]]"
10589 .          \}
10590 .          br
10591 .       \}
10592 .\}
10593 .    REMOVE_INDENT
10594 .    CAPS OFF
10595 .    ev
10596 .    ALD \\n[#DOC_LEAD]u
10597 .    if \\n[#NUMBER_HEAD] \{ .RESET_SUBHEAD_NUMBER  \}
10598 .    if \\n[#NUMBER_SH]   \{ .RESET_PARAHEAD_NUMBER \}
10599 .    if r#START      \{ .rr #START     \}
10600 .    if r#EPIGRAPH   \{ .rr #EPIGRAPH  \}
10601 .    if r#QUOTE      \{ .rr #QUOTE     \}
10602 .    if r#Q_FITS     \{ .rr #Q_FITS    \}
10603 .    if r#END_QUOTE  \{ .rr #END_QUOTE \}
10604 .    if r#LINEBREAK  \{ .rr #LINEBREAK \}
10605 .    if r#Q_AT_TOP   \{ .rr #Q_AT_TOP  \}
10606 .    if r#PP_ACTIVE  \{ .rr #PP_ACTIVE \}
10607 .    rr #ARG_NUM
10608 .    rr #FROM_HEAD
10609 .    rm $TOC_HEAD_ITEM
10610 .    nr #PP 0
10611 .END
10612 \#
10613 \#
10614 \# ---Subheads---
10615 \#
10616 \# SUBHEAD
10617 \# -------
10618 \# *Arguments:
10619 \#   "text of subhead" ["text of subhead"] ...
10620 \# *Function:
10621 \#   In TYPEWRITE, prints subheads underlined.
10622 \#   In TYPESET, prints subheads bold, .5 points larger than running
10623 \#   text.
10624 \#   In both styles, a line space precedes the subhead, and a small
10625 \#   amount of lead comes after.
10626 \# *Notes:
10627 \#   As with the HEAD macro, double-quotes (") must surround
10628 \#   each line of text.
10629 \#
10630 .MAC SUBHEAD END
10631 .    br
10632 .    ne \\n[#NUM_ARGS]+2
10633 .\" Collect subhead for TOC.
10634 .    nr #ARG_NUM 0 1
10635 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
10636 .    while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10637 .       ie \\n[#ARG_NUM]=\\n[#NUM_ARGS] \{\
10638 .          as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\\|
10639 .       \}
10640 .       el \{\
10641 .\" Note that in the .as lines, below, \ at the end has a literal
10642 .\" space after it.
10643 .          ie \\n[#NUMBER_SH] \{\
10644 .             ie \\n[#ARG_NUM]=0 \{\
10645 .                as $TOC_SH_ITEM \\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]\ \"
10646 .                nr #SH_NUM \\n-[#SH_NUM]
10647 .             \}
10648 .             el \{\
10649 .                as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\ \"
10650 .             \}
10651 .          \}
10652 .          el \{\
10653 .             as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\ \"
10654 .          \}
10655 .       \}
10656 .\}
10657 .\" Note the use of \!, which transparently embeds the macros used
10658 .\" in the TOC_ENTRIES diversion.  The elements they control must be
10659 .\" processed literally when the diversion is output.
10660 .    ev TOC_EV
10661 .    da TOC_ENTRIES
10662 .    if \\n[#PRINT_STYLE]=1 \{\
10663 \!.     fam C
10664 \!.     ft  R
10665 \!.     ps  12
10666 .    \}
10667 .    if \\n[#PRINT_STYLE]=2 \{\
10668 \!.     FAMILY  \\*[$TOC_SH_FAM]
10669 \!.     FT      \\*[$TOC_SH_FT]
10670 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_SH_SIZE_CHANGE]
10671 .    \}
10672 \!.  TRAP OFF
10673 \!.  PAD_MARKER ^
10674 .    ie \\n[#PRINT_STYLE]=1 \{\
10675 \!.     PAD "\\h'4m'\\*[$TOC_SH_ITEM]\\*[$TOC_PN_TYPEWRITE]"
10676 .    \}
10677 .    el \{\
10678 \!.     PAD "\\h'\\n[#TOC_SH_INDENT]u'\\*[$TOC_SH_ITEM]\\*[$TOC_PN]"
10679 .    \}
10680 \!.  PAD_MARKER #
10681 \!.  EOL
10682 \!.  ST 100 L
10683 \!.  ST 101 R
10684 .    if \\n[#PRINT_STYLE]=2 \{\
10685 \!.     FAMILY  \\*[$TOC_PN_FAM]
10686 \!.     FT      \\*[$TOC_PN_FT]
10687 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
10688 .    \}
10689 \!.  TAB 100
10690 \!.  PRINT \\*[LEADER]
10691 \!.  TN
10692 \!.  TRAP
10693 \!.  PRINT \\n[#TOC_ENTRY_PN]
10694 \!.  TQ
10695 .    di
10696 .    ev
10697 .\" End collection of head for TOC
10698 .\" Process subhead
10699 .    nr #ARG_NUM 0 1
10700 .    if r#QUOTE    \{ .rr #QUOTE    \}
10701 .    if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
10702 .    ev SUBHEAD
10703 .    ll \\n[#L_LENGTH]u
10704 .    ta \\n(.lu
10705 .    if \\n[#COLUMNS] \{\
10706 .       ll \\n[#COL_L_LENGTH]u
10707 .       ta \\n(.lu
10708 .    \}
10709 .    CHECK_INDENT
10710 .    if \\n[#PRINT_STYLE]=1 \{\
10711 .       TYPEWRITER
10712 .       vs  \\n[#DOC_LEAD]u
10713 .       QUAD   \\*[$SH_QUAD]
10714 .       UNDERLINE OFF
10715 .    \}
10716 .    if \\n[#PRINT_STYLE]=2 \{\
10717 .       FAMILY  \\*[$SH_FAM]
10718 .       FT      \\*[$SH_FT]
10719 .       PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$SH_SIZE_CHANGE]
10720 .       LS      \\n[#DOC_LEAD]u
10721 .       QUAD    \\*[$SH_QUAD]
10722 .    \}
10723 .    if \\n[#PRINT_STYLE]=1 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/5 \}
10724 .    if \\n[#PRINT_STYLE]=2 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/8 \}
10725 .    ie \\n[#START] \{ .RLD 1v \}
10726 .    el \{\
10727 .       ie \\n[#HEAD]=1 \{ . \}
10728 .       el \{\
10729 .          if \\n[#PRINT_STYLE]=1 \{\
10730 .             if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
10731 .          \}
10732 .          if \\n[#PRINT_STYLE]=2 \{\
10733 .             ie \\n[#PP_SPACE]=1 \{\
10734 .                ie !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
10735 .                el \{ .RLD \\n[#DOC_LEAD]u \}
10736 .             \}
10737 .             el \{\
10738 .                if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
10739 .             \}
10740 .          \}
10741 .       \}
10742 .    \}
10743 .\" Print subhead
10744 .    if \\n[#PRINT_STYLE]=1 \{\
10745 .       while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10746 .          ie \\n[#NUMBER_SH] \{\
10747 .             ie \\n[#ARG_NUM]=0 \{\
10748 .                ie \\n[#PREFIX_CH_NUM]=1 \{\
10749 .                   ds $CH_NUM \\n[#CH_NUM].
10750 .                \}
10751 .                el \{\
10752 .                   rm $CH_NUM
10753 .                \}
10754 .                ie \\n[#NUMBER_HEAD] \{\
10755 .                   br
10756 .                   UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]"
10757 .                   br
10758 .                \}
10759 .                el \{\
10760 .                   br
10761 .                   UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]"
10762 .                   br
10763 .                \}
10764 .             \}
10765 .             el \{\
10766 .                br
10767 .                UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]"
10768 .                br
10769 .             \}
10770 .          \}
10771 .          el \{\
10772 .             br
10773 .             UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]"
10774 .             br
10775 .          \}
10776 .\}
10777 .    \}
10778 .    if \\n[#PRINT_STYLE]=1 \{\
10779 .       if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
10780 .    \}
10781 .    if \\n[#PRINT_STYLE]=2 \{\
10782 .       if \\n[#SH_COLOR]=1 \{ .COLOR \\*[$SH_COLOR] \}
10783 .       ie \\n[#PP_SPACE]=0 \{\
10784 .          while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10785 .             ie \\n[#NUMBER_SH] \{\
10786 .                ie \\n[#ARG_NUM]=0 \{\
10787 .                   ie \\n[#PREFIX_CH_NUM]=1 \{\
10788 .                      ds $CH_NUM \\n[#CH_NUM].
10789 .                   \}
10790 .                   el \{\
10791 .                      rm $CH_NUM
10792 .                   \}
10793 .                   ie \\n[#NUMBER_HEAD] \{\
10794 .                      br
10795 .                      PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]
10796 .                      br
10797 .                   \}
10798 .                   el \{\
10799 .                      br
10800 .                      PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]
10801 .                      br
10802 .                   \}
10803 .                \}
10804 .                el \{\
10805 .                   br
10806 .                   PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
10807 .                   br
10808 .                \}
10809 .             \}
10810 .             el \{\
10811 .                br
10812 .                PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
10813 .                br
10814 .             \}
10815 .\}
10816 .       \}
10817 .       el \{\
10818 .          ALD \\n[#DOC_LEAD]u
10819 .          if \\n[#HEAD]=1      \{ .RLD \\n[#DOC_LEAD]u \}
10820 .          if \\n[#END_QUOTE]   \{ .RLD \\n[#DOC_LEAD]u \}
10821 .          if \\n[#EPIGRAPH]    \{ .RLD \\n[#DOC_LEAD]u \}
10822 .          while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
10823 .             ie \\n[#NUMBER_SH] \{\
10824 .                ie \\n[#ARG_NUM]=0 \{\
10825 .                   ie \\n[#PREFIX_CH_NUM]=1 \{\
10826 .                      ds $CH_NUM \\n[#CH_NUM].
10827 .                   \}
10828 .                   el \{\
10829 .                      rm $CH_NUM
10830 .                   \}
10831 .                   ie \\n[#NUMBER_HEAD] \{\
10832 .                      br
10833 .                      PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]]
10834 .                      br
10835 .                   \}
10836 .                   el \{\
10837 .                      br
10838 .                      PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]
10839 .                      br
10840 .                   \}
10841 .                \}
10842 .                el \{\
10843 .                   br
10844 .                   PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
10845 .                   br
10846 .                \}
10847 .             \}
10848 .             el \{\
10849 .                br
10850 .                PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
10851 .                br
10852 .             \}
10853 .\}
10854 .          ALD \\n[#DOC_LEAD]u
10855 .       \}
10856 .    \}
10857 .    REMOVE_INDENT
10858 .    ev
10859 .    if \\n[#NUMBER_SH] \{ .RESET_PARAHEAD_NUMBER \}
10860 .    if r#START     \{ .rr #START     \}
10861 .    if r#EPIGRAPH  \{ .rr #EPIGRAPH  \}
10862 .    if r#Q_FITS    \{ .rr #Q_FITS    \}
10863 .    if r#END_QUOTE \{ .rr #END_QUOTE \}
10864 .    if r#LINEBREAK \{ .rr #LINEBREAK \}
10865 .    rm $TOC_SH_ITEM
10866 .    nr #PP 0
10867 .    nr #HEAD 2
10868 .END
10869 \#
10870 \# ---Paragraph heads---
10871 \#
10872 \# PARAHEAD INDENT
10873 \# ---------------
10874 \# *Argument:
10875 \#   <size of indent>
10876 \# *Function:
10877 \#   Creates or modifies register #PH_INDENT.
10878 \# *Notes:
10879 \#   Default is 1/2 #PP_INDENT for TYPESET and TYPEWRITE.
10880 \#
10881 .MAC PARAHEAD_INDENT END
10882 .    nr #PH_INDENT (\\$1)
10883 .END
10884 \#
10885 \#
10886 \# PARAHEAD
10887 \# --------
10888 \# *Arguments:
10889 \#   "<para head>"
10890 \# *Function:
10891 \#   Deposits a paragraph head at the start and into the body of a
10892 \#   paragraph.
10893 \# *Notes:
10894 \#   PARAHEAD *must* come after PP.
10895 \#
10896 .MAC PARAHEAD END
10897 .\" Collect parahead for TOC.
10898 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
10899 .    ie \\n[#NUMBER_PH] \{\
10900 .       ds $TOC_PH_ITEM \\n+[#PH_NUM].\0\\$1\\|
10901 .       nr #PH_NUM \\n-[#PH_NUM]
10902 .    \}
10903 .    el \{\
10904 .       ds $TOC_PH_ITEM \\$1\\|
10905 .    \}
10906 .    ev TOC_EV
10907 .    da TOC_ENTRIES
10908 .    if \\n[#PRINT_STYLE]=1 \{\
10909 \!.       fam C
10910 \!.       ft  R
10911 \!.       ps  12
10912 .    \}
10913 .    if \\n[#PRINT_STYLE]=2 \{\
10914 \!.     FAMILY  \\*[$TOC_PH_FAM]
10915 \!.     FT      \\*[$TOC_PH_FT]
10916 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PH_SIZE_CHANGE]
10917 .    \}
10918 \!.  TRAP OFF
10919 \!.  PAD_MARKER ^
10920 .    ie \\n[#PRINT_STYLE]=1 \{\
10921 \!.     PAD "\\h'6m'\\*[$TOC_PH_ITEM]\\*[$TOC_PN_TYPEWRITE]"
10922 .    \}
10923 .    el \{\
10924 \!.     PAD "\\h'\\n[#TOC_PH_INDENT]u'\\*[$TOC_PH_ITEM]\\*[$TOC_PN]"
10925 .    \}
10926 \!.  PAD_MARKER #
10927 \!.  EOL
10928 \!.  ST 100 L
10929 \!.  ST 101 R
10930 .    if \\n[#PRINT_STYLE]=2 \{\
10931 \!.     FAMILY  \\*[$TOC_PN_FAM]
10932 \!.     FT      \\*[$TOC_PN_FT]
10933 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
10934 .    \}
10935 \!.  TAB 100
10936 \!.  PRINT \\*[LEADER]
10937 \!.  TN
10938 \!.  TRAP
10939 \!.  PRINT \\n[#TOC_ENTRY_PN]
10940 \!.  TQ
10941 .    di
10942 .    ev
10943 .\" End collection of parahead for TOC
10944 .\" Process parahead
10945 .    if \\n[#SLANT_ON] \{\
10946 .       nr #SLANT_WAS_ON 1
10947 \E*[SLANTX]
10948 .    \}
10949 .    ie \\n[#PP]=1 \{\
10950 .       if \\n[#INDENT_FIRST_PARAS] \{\
10951 .          ti \\n[#PH_INDENT]u
10952 .       \}
10953 .    \}
10954 .    el \{ .ti \\n[#PH_INDENT]u \}
10955 .    ie \\n[#PREFIX_CH_NUM]=1 \{\
10956 .       ds $CH_NUM \\n[#CH_NUM].
10957 .    \}
10958 .    el \{\
10959 .       rm $CH_NUM
10960 .    \}
10961 .    if \\n[#PRINT_STYLE]=1 \{\
10962 .       TYPEWRITER
10963 .       UNDERLINE OFF
10964 .       ie \\n[#NUMBER_PH] \{\
10965 .          if \\n[#NUMBER_HEAD] \{\
10966 .             ie \\n[#NUMBER_SH] \{\
10967 .                UNDERSCORE "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1"
10968 \0
10969 .             \}
10970 .             el \{\
10971 .                UNDERSCORE "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#PH_NUM].\\ \\$1"
10972 \0
10973 .             \}
10974 .          \}
10975 .          ie \\n[#NUMBER_SH] \{\
10976 .             if !\\n[#NUMBERED] \{\
10977 .                UNDERSCORE "\\*[$CH_NUM]\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1"
10978 \0
10979 .             \}
10980 .          \}
10981 .          el \{\
10982 .             if !\\n[#NUMBERED] \{\
10983 .                UNDERSCORE "\\*[$CH_NUM]\\n+[#PH_NUM].\\ \\$1"
10984 \0
10985 .             \}
10986 .          \}
10987 .       \}
10988 .       el \{\
10989 .          UNDERSCORE "\\$1"
10990 \0
10991 .       \}
10992 .       if \\n[#SLANT_WAS_ON] \{\
10993 .          if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
10994 .          if \\n[#SLANT_MEANS_SLANT] \{\
10995 \E*[SLANT]\c
10996 .          \}
10997 .          rr #SLANT_WAS_ON
10998 .       \}
10999 .    \}
11000 .    if \\n[#PRINT_STYLE]=2 \{\
11001 .       FAM     \\*[$PH_FAM]
11002 .       FT      \\*[$PH_FT]
11003 .       PT_SIZE \\*[$PH_SIZE_CHANGE]
11004 .       if \\n[#PH_COLOR]=1 \{ .COLOR \\*[$PH_COLOR] \}
11005 .          ie \\n[#NUMBER_PH] \{\
11006 .             ie \\n[#PREFIX_CH_NUM]=1 \{\
11007 .                ds $CH_NUM \\n[#CH_NUM].
11008 .             \}
11009 .             el \{\
11010 .                rm $CH_NUM
11011 .             \}
11012 .             if \\n[#NUMBER_HEAD] \{\
11013 .                ie \\n[#NUMBER_SH] \{\
11014 .                   PRINT "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
11015 .                \}
11016 .                el \{\
11017 .                   PRINT "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
11018 .                \}
11019 .             \}
11020 .             ie \\n[#NUMBER_SH] \{\
11021 .                if !\\n[#NUMBERED] \{\
11022 .                   PRINT "\\*[$CH_NUM]\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
11023 .                \}
11024 .             \}
11025 .             el \{\
11026 .                if !\\n[#NUMBERED] \{\
11027 .                   PRINT "\\*[$CH_NUM]\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
11028 .                \}
11029 .             \}
11030 .          \}
11031 .          el \{\
11032 .             PRINT "\\$1\h'.6m'\c"
11033 .          \}
11034 .       \}
11035 .    FAMILY  \\*[$DOC_FAM]
11036 .    FT      \\*[$PP_FT]
11037 .    PT_SIZE \\n[#DOC_PT_SIZE]u
11038 .    if \\n[#PH_COLOR]=1 \m[]\c
11039 .    if \\n[#SLANT_WAS_ON] \{\
11040 .       rr #SLANT_WAS_ON
11041 \E*[SLANT]\c
11042 .    \}
11043 .    rr #NUMBERED
11044 .    rm $TOC_PH_ITEM
11045 .END
11046 \#
11047 \#
11048 \# ====================================================================
11049 \#
11050 \# +++LINE BREAKS+++
11051 \#
11052 \# LINEBREAK CHARACTER
11053 \# -------------------
11054 \# *Arguments:
11055 \#   [character] [iterations] [vertical adjustment]
11056 \# *Function:
11057 \#   Allows user to specify a line break character and the number
11058 \#   of times to repeat it horiontally.
11059 \# *Notes:
11060 \#   Without an argument, LINEBREAK_CHAR will deposit a blank line.
11061 \#
11062 \#   Vertical adjustment requires a unit of measure (most likely
11063 \#   "p"), and has to be preceded by +|-
11064 \#
11065 .MAC LINEBREAK_CHAR END
11066 .    nr #REPEAT 1
11067 .    ds $LINEBREAK_CHAR \\$1
11068 .    ds $LINEBREAK_CHAR_V_ADJ \\$3
11069 .    if '\\*[$LINEBREAK_CHAR_V_ADJ]'' \{\
11070 .       ds $LINEBREAK_CHAR_V_ADJ +0
11071 .    \}
11072 .    while \\$2>\\n[#REPEAT] \{\
11073 .       as $LINEBREAK_CHAR "\\ \\$1
11074 .       nr #REPEAT \\n[#REPEAT]+1
11075 .\}
11076 .   rr #REPEAT
11077 .END
11078 \#
11079 \#
11080 \# LINE BREAK
11081 \# ----------
11082 \# *Arguments:
11083 \#   <none>
11084 \# *Function:
11085 \#   Deposits line break character.
11086 \# *Notes:
11087 \#   If $LINEBREAK_CHAR is blank, simply advances 2 line spaces.
11088 \#
11089 .MAC LINEBREAK END
11090 .    if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
11091 .    po \\n[#DOC_L_MARGIN]u
11092 .    ie  '\\*[$LINEBREAK_CHAR]'' \{ .ALD \\n[#DOC_LEAD]u*2 \}
11093 .    el \{\
11094 .       if \\n[#PRINT_STYLE]=1 \{\
11095 .          ie \\n[#END_QUOTE] \{ . \}
11096 .          el \{ .ALD \\n[#DOC_LEAD]u \}
11097 .       \}
11098 .       if \\n[#PRINT_STYLE]=2 \{\
11099 .          ie \\n[#END_QUOTE] \{ . \}
11100 .          el \{ .ALD \\n[#DOC_LEAD]u \}
11101 .       \}
11102 .       ev LINEBREAK
11103 .       evc 0
11104 .       CENTER
11105 .       PRINT \m[\\*[$LINEBREAK_COLOR]]\\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\\*[$LINEBREAK_CHAR]\\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\m[]
11106 .       if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
11107 .       if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#DOC_LEAD]u \}
11108 .       ev
11109 .       QUAD \\*[$DOC_QUAD]
11110 .    \}
11111 .    nr #LINEBREAK 1
11112 .    if r#QUOTE     \{ .rr #QUOTE     \}
11113 .    if r#END_QUOTE \{ .rr #END_QUOTE \}
11114 .    nr #PP 0
11115 .END
11116 \#
11117 \# ====================================================================
11118 \#
11119 \# +++PARAGRAPHS+++
11120 \#
11121 \# PARAGRAPH FONT
11122 \# --------------
11123 \# *Argument:
11124 \#   <font of running text>
11125 \# *Function:
11126 \#   Creates or modifies string $PP_FT.
11127 \# *Notes:
11128 \#   Affects all paragraphs.
11129 \#
11130 .MAC PP_FONT END
11131 .    if \n[#PRINT_STYLE]=1 \{\
11132 .       ie \n[#ITALIC_MEANS_ITALIC] \{ .nop \}
11133 .       el \{ .return \}
11134 .    \}
11135 .    br
11136 .    if \\n[#COLLATE]=1 \{\
11137 .       if !'\\*[$SAVED_PP_FT]'' \{ .rm $SAVED_PP_FT \}
11138 .    \}
11139 .    ds $PP_FT \\$1
11140 .    FT \\*[$PP_FT]
11141 .END
11142 \#
11143 \#
11144 \# PARAGRAPH INDENT
11145 \# ----------------
11146 \# *Argument:
11147 \#   <amount to indent paragraphs in running text (ipPcm)>
11148 \# *Function:
11149 \#   Allows user to change the default para indent.  The change will
11150 \#   affect the indent of QUOTEs and BLOCKQUOTEs as well.
11151 \# *Notes:
11152 \#   Default for printstyle TYPEWRITE is 1/2-inch.  Default for
11153 \#   printstyle TYPESET is 2 ems.  The defaults are set in
11154 \#   PRINTSTYLE, not DEFAULTS.
11155 \#
11156 .MAC PARA_INDENT END
11157 .    nr #PP_INDENT (\\$1)
11158 .END
11159 \#
11160 \#
11161 \# INDENT FIRST PARAGRAPHS
11162 \# -----------------------
11163 \# *Arguments:
11164 \#   <none> | <anything>
11165 \# *Function:
11166 \#   By default, the first para of a document, as well as the first
11167 \#   paras of blockquotes and block-style epigraphs are not indented.
11168 \#   When invoked, this macro will indent all paras.
11169 \# *Notes:
11170 \#   Default is OFF.
11171 \#
11172 .MAC INDENT_FIRST_PARAS END
11173 .    ie '\\$1'' \{ .nr #INDENT_FIRST_PARAS 1 \}
11174 .    el \{ .rr #INDENT_FIRST_PARAS   \}
11175 .END
11176 \#
11177 \#
11178 \# INTER-PARAGRAPH SPACING
11179 \# -----------------------
11180 \# *Arguments:
11181 \#   <none> | <anything>
11182 \# *Function:
11183 \#   Adds a line space between paragraphs in body text.  Block quotes
11184 \#   are unaffected.
11185 \# *Notes:
11186 \#   Default is OFF.  PARA_SPACE ON is not recommended for use
11187 \#   with PRINTSTYLE TYPEWRITE.
11188 \#
11189 .MAC PARA_SPACE END
11190 .    ie '\\$1'' \{ .nr #PP_SPACE 1 \}
11191 .    el \{ .rr #PP_SPACE   \}
11192 .END
11193 \#
11194 \#
11195 \# PARAGRAPH
11196 \# ---------
11197 \# *Arguments:
11198 \#   <none>
11199 \# *Function:
11200 \#   Figures out what to do with paragraphs under differing conditions.
11201 \# *Notes:
11202 \#   For the time being, there's no automatic widow/orphan control.
11203 \#   Controlling them isn't just a matter of establishing an arbitrary
11204 \#   number of lines needed for a para, since groff doesn't then
11205 \#   handle single line paragraphs gracefully.  Usually, the whole
11206 \#   page needs to be tweaked.
11207 \#
11208 \#   Note the use of transparent line break (\!.br) to get
11209 \#   PP to work within blockquotes and epigraphs.
11210 \#
11211 \#   PP_STYLE 1 = regular paras; 2 = blockquotes, epigraphs
11212 \#
11213 .MAC PP END
11214 .    br
11215 .    if \\n[#DOC_TYPE]=4 \{\
11216 .       if !'\\n(.z'' \{ .di \}
11217 .       nr #TOTAL_FIELDS \\n[#FIELD]
11218 .       nr #FIELD        0 1
11219 .       nr #NUM_FIELDS   0 1
11220 .       if \\n[#TOTAL_FIELDS]>0 \{\
11221 .          while \\n+[#NUM_FIELDS]<=\\n[#TOTAL_FIELDS] \{\
11222 .             nf
11223 .             LETTERHEAD\\n+[#FIELD]
11224 .             QUAD \\*[$DOC_QUAD]
11225 .             ALD \\n[#DOC_LEAD]u
11226 .             if \\n[#DATE_FIRST]=1 \{ .ALD \\n[#DOC_LEAD]u \}
11227 .             rr #DATE_FIRST
11228 .             rm LETTERHEAD\\n[#FIELD]
11229 .\}
11230 .          rr #FIELD
11231 .          rr #NUM_FIELDS
11232 .          rr #TOTAL_FIELDS
11233 .       \}
11234 .    \}
11235 .    rr #PP_ACTIVE
11236 .    if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
11237 .    if \\n[#PP_STYLE]=1 \{\
11238 .       if \\n[#ENDNOTE] \{\
11239 .          nr #RESET_PARA_SPACE \\n[#PP_SPACE]
11240 .          ie \\n[#EN_PP_SPACE] \{ .PARA_SPACE \}
11241 .          el \{ .PARA_SPACE OFF \}
11242 .       \}
11243 .       br
11244 .       if !\\n[#ENDNOTE] \{ .po \\n[#L_MARGIN]u \}
11245 .       if \\n[#COLUMNS] \{\
11246 .          if !\\n[#ENDNOTE] \{\
11247 .             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
11248 .             nr #L_MARGIN \\n(.o
11249 .          \}
11250 .       \}
11251 .       if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
11252 .       ie \\n[#PRINT_STYLE]=1 \{\
11253 .          TYPEWRITER
11254 .          ie \\n[#ENDNOTE] \{ .vs \\n[#EN_LEAD]u \}
11255 .          el \{ .vs \\n[#DOC_LEAD]u \}
11256 .          QUAD \\*[$DOC_QUAD]
11257 .          UNDERLINE OFF
11258 .          if \\n[#SLANT_ON] \{\
11259 .             if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
11260 .          \}
11261 .          if '\\*[$PP_FT]'I' \{\
11262 .             if \\n[#ITALIC_MEANS_ITALIC] \{ .FT I \}
11263 .          \}
11264 .       \}
11265 .       el \{\
11266 .          ie \\n[#ENDNOTE] \{\
11267 .             FAMILY  \\*[$EN_FAM]
11268 .             FT      \\*[$EN_FT]
11269 .             PT_SIZE \\n[#EN_PS]u
11270 .             vs      \\n[#EN_LEAD]u
11271 .             QUAD    \\*[$EN_QUAD]
11272 .          \}
11273 .          el \{\
11274 .             FAMILY  \\*[$DOC_FAM]
11275 .             if !'\\*[$SAVED_PP_FT]'' \{\
11276 .                ds $PP_FT \\*[$SAVED_PP_FT]
11277 .                rm $SAVED_PP_FT
11278 .             \}
11279 .             FT \\*[$PP_FT]
11280 .             PT_SIZE \\n[#DOC_PT_SIZE]u
11281 .             LS      \\n[#DOC_LEAD]u
11282 .             QUAD    \\*[$DOC_QUAD]
11283 .          \}
11284 .       \}
11285 .       ie \\n[#PP]=0 \{\
11286 .          if \\n[#INDENT_FIRST_PARAS] \{\
11287 .             ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
11288 .             el \{ .ti \\n[#PP_INDENT]u \}
11289 .             if '\\n(.z'END_NOTES' \{\
11290 .                ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
11291 .             \}
11292 .          \}
11293 .          if r#END_QUOTE \{\
11294 .             if \\n[#END_QUOTE] \{\
11295 .                if !\\n[#LINEBREAK] \{\
11296 .                   ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
11297 .                   el \{ .ti \\n[#PP_INDENT]u \}
11298 .                   if '\\n(.z'END_NOTES' \{\
11299 .                      ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
11300 .                   \}
11301 .                \}
11302 .             \}
11303 .          \}
11304 .       \}
11305 .       el \{\
11306 .          br
11307 .          if \\n[#PP_SPACE] \{\
11308 .             if \\n[#PRINT_STYLE]=2 \{\
11309 .                ie \\n[#END_QUOTE] \{\
11310 .                   ALD \\n[#DOC_LEAD]u
11311 .                   rr #END_QUOTE
11312 .                   nr #NO_SPACE 1
11313 .                   nr #BASELINE_MARK \\n(nl
11314 .                \}
11315 .                el \{\
11316 .                   if \\n[#NO_SPACE]=1 \{\
11317 .                      rr #NO_SPACE
11318 .                   \}
11319 .                   if !\\n(nl=\\n[#BASELINE_MARK] \{\
11320 .                      ALD \\n[#DOC_LEAD]u
11321 .                      rr #BASELINE_MARK
11322 .                   \}
11323 .                \}
11324 .             \}
11325 .          \}
11326 .          ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
11327 .          el \{ .ti \\n[#PP_INDENT]u \}
11328 .          if '\\n(.z'END_NOTES' \{\
11329 .             ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
11330 .          \}
11331 .       \}
11332 .       if r#START     \{ .rr #START     \}
11333 .       if r#QUOTE     \{ .rr #QUOTE     \}
11334 .       if r#END_QUOTE \{ .rr #END_QUOTE \}
11335 .       if r#HEAD      \{ .rr #HEAD      \}
11336 .       if r#EPIGRAPH  \{ .rr #EPIGRAPH  \}
11337 .       if r#Q_FITS    \{ .rr #Q_FITS    \}
11338 .       if r#LINEBREAK \{ .rr #LINEBREAK \}
11339 .       if \\n[#ENDNOTE] \{\
11340 .          ie \\n[#RESET_PARA_SPACE] \{ .PARA_SPACE \}
11341 .          el \{ .PARA_SPACE OFF \}
11342 .       \}
11343 .       if \\n[#CONDENSE] \{\
11344 \E*[COND]\c
11345 .       \}
11346 .       if \\n[#EXTEND]=1 \{\
11347 \E*[EXT]\c
11348 .       \}
11349 .       nr #PP +1
11350 .    \}
11351 .    if \\n[#PP_STYLE]=2 \{\
11352 \!.     br
11353 .       if \\n[#BROKEN_QUOTE] \{\
11354 .          ie \\n(nl=\\n[#PAGE_TOP] \{ .nr #Q_PP 1 \}
11355 .          el \{ .nr #Q_PP 0 \}
11356 .          rr #BROKEN_QUOTE
11357 .       \}
11358 .       ie \\n[#Q_PP]=0 \{\
11359 .          if \\n[#INDENT_FIRST_PARAS] \{\
11360 .             ti \\n[#PP_INDENT]u/2u
11361 .          \}
11362 .          if \\n[#ENDNOTE] \{\
11363 .             ie \\n[#INDENT_FIRSTS] \{ .ti \\n[#PP_INDENT]u/2u \}
11364 .             el \{ .ti 0 \}
11365 .          \}
11366 .       \}
11367 .       el \{\
11368 .          ti \\n[#PP_INDENT]u/2u
11369 .          if \\n[#PP_SPACE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
11370 .       \}
11371 .       if \\n[#CONDENSE] \{\
11372 \E*[COND]\c
11373 .       \}
11374 .       if \\n[#EXTEND]=1 \{\
11375 \E*[EXT]\c
11376 .       \}
11377 .    nr #Q_PP +1
11378 .    \}
11379 \# This takes care of multi-paragraph dialogue, where each para
11380 \# is introduced by an open quote whereas the previous para has
11381 \# no close quote.
11382 .    if \\n[#OPEN_CLOSE]=1 \{\
11383 .       nr #OPEN_CLOSE 0
11384 .    \}
11385 .    nr #PP_ACTIVE 1
11386 .END
11387 \#
11388 \# ====================================================================
11389 \#
11390 \# +++QUOTES+++
11391 \#
11392 \# ---Line for line quotes, i.e. poetry or code snippets---
11393 \#
11394 \# UNDERLINE QUOTES
11395 \# ----------------
11396 \# *Arguments:
11397 \#   <none> | <anything>
11398 \# *Function:
11399 \#   Creates or modifies register #UNDERLINE_QUOTES (toggle).
11400 \#   If on, line for line quotes are underlined when printstyle
11401 \#   is TYPEWRITE.
11402 \# *Notes:
11403 \#   Default is ON for printstyle TYPEWRITE.
11404 \#
11405 .MAC UNDERLINE_QUOTES END
11406 .    ie '\\$1'' \{ .nr #UNDERLINE_QUOTES 1 \}
11407 .    el \{ .rr #UNDERLINE_QUOTES \}
11408 .END
11409 \#
11410 \#
11411 \# QUOTE INDENT
11412 \# ------------
11413 \# *Argument:
11414 \#   <integer> | <integer with unit of measure appended>
11415 \# *Function:
11416 \#   Creates or modifies register #Q_OFFSET_VALUE.
11417 \# *Notes:
11418 \#   If just an integer given, value by which to multiply PARA_INDENT
11419 \#   to get quote indent.  If integer with a unit of measure appended,
11420 \#   absolute value of quote indent.
11421 \#
11422 \#  Default is 3 for typeset; 2 for typewrite.
11423 \#
11424 .MAC QUOTE_INDENT END
11425 .    if r#Q_OFFSET_VALUE         \{ .rr #Q_OFFSET_VALUE \}
11426 .    if !'\\*[$Q_OFFSET_VALUE]'' \{ .rm $Q_OFFSET_VALUE \}
11427 .    ds $EVAL_QI_ARG \\$1
11428 .    substring $EVAL_QI_ARG -1
11429 .    ie \B'\\*[$EVAL_QI_ARG]' \{\
11430 .       nr #Q_OFFSET_VALUE \\$1
11431 .    \}
11432 .    el \{\
11433 .       ds $Q_OFFSET_VALUE \\$1
11434 .    \}
11435 .    rm $EVAL_QI_ARG
11436 .END
11437 \#
11438 \#
11439 \# QUOTE_AUTOLEAD
11440 \# --------------
11441 \# *Arguments:
11442 \#   <autolead value>
11443 \# *Function:
11444 \#   Sets autolead for quotes and/or blockquotes.
11445 \#
11446 .MAC QUOTE_AUTOLEAD END
11447 .    if '\\$0'QUOTE_AUTOLEAD'      \{ .nr #Q_AUTOLEAD \\$1 \}
11448 .    if '\\$0'BLOCKQUOTE_AUTOLEAD' \{ .nr #BQ_AUTOLEAD \\$1 \}
11449 .    if '\\$0'ENDNOTE_QUOTE_AUTOLEAD'      \{ .nr #EN_Q_AUTOLEAD \\$1 \}
11450 .    if '\\$0'ENDNOTE_BLOCKQUOTE_AUTOLEAD' \{ .nr #EN_BQ_AUTOLEAD \\$1 \}
11451 .END
11452 \#
11453 .ALIAS BLOCKQUOTE_AUTOLEAD         QUOTE_AUTOLEAD
11454 .ALIAS ENDNOTE_QUOTE_AUTOLEAD      QUOTE_AUTOLEAD
11455 .ALIAS ENDNOTE_BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD
11456 \#
11457 \# ALWAYS FULLSPACE QUOTES
11458 \# -----------------------
11459 \# *Arguments:
11460 \#   <none> | <anything>
11461 \# *Function:
11462 \#   Toggles register #FULLSPACE_QUOTES.
11463 \# *Notes:
11464 \#   If user doesn't like the default 1/2 line space above and below
11465 \#   quotes, s/he can turn it off here.  Has no effect in TYPEWRITE.
11466 \#
11467 .MAC ALWAYS_FULLSPACE_QUOTES END
11468 .    if '\\$1'' \{ .nr #FULLSPACE_QUOTES 1 \}
11469 .    el \{ .rr #FULLSPACE_QUOTES \}
11470 .END
11471 \#
11472 \#
11473 \# QUOTE
11474 \# -----
11475 \# *Arguments:
11476 \#   <none> | <anything>
11477 \# *Function:
11478 \#   Indents quoted text on a line for line basis, or turns QUOTE off.
11479 \# *Notes:
11480 \#   Owing to the need to bottom align TYPESET pages, quoted text gets
11481 \#   diverted so its depth can be measured (in DO_QUOTE) for determining
11482 \#   how much space to put before and after.
11483 \#
11484 \# QUOTE
11485 \# -----
11486 \# *Arguments:
11487 \#   <none> | <anything>
11488 \# *Function:
11489 \#   Indents quoted text on a line for line basis, or turns QUOTE off.
11490 \# *Notes:
11491 \#   Owing to the need to bottom align TYPESET pages, quoted text gets
11492 \#   diverted so its depth can be measured (in DO_QUOTE) for determining
11493 \#   how much space to put before and after.
11494 \#
11495 .MAC QUOTE END
11496 .    br
11497 .    if \\n[#LINENUMBERS]=1 \{\
11498 .       nr #LINENUMBERS 2
11499 .       nr #NEXT_LN \\n(ln
11500 .       nm
11501 .    \}
11502 .    ie '\\$1'' \{\
11503 .       ev QUOTE
11504 .       if \\n[#LINENUMBERS]=2 \{\
11505 .          if \\n[#SILENT_QUOTE_LN]=1 \{ .nm \\n[#NEXT_LN] 1000 -4 \}
11506 .       \}
11507 .       nr #IN_DIVER 1
11508 .       nr #QUOTE 1
11509 .       di P_QUOTE
11510 .       ie r#Q_OFFSET_VALUE \{\
11511 .          ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
11512 .       \}
11513 .       el \{ .ll \\n[#L_LENGTH]u-\\*[$Q_OFFSET_VALUE] \}
11514 .       if \\n[#LINENUMBERS]=2 \{\
11515 .          if \\n[#QUOTE_LN]=1 \{\
11516 .             nm \\n(ln "" \\*[$Q_LN_GUTTER] -3-\\*[$Q_LN_GUTTER]
11517 .          \}
11518 .       \}
11519 .       ta \\n(.lu
11520 .       if \\n[#COLUMNS] \{\
11521 .          ie r#Q_OFFSET_VALUE \{\
11522 .             ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
11523 .          \}
11524 .          el \{\
11525 .             ll \\n[#COL_L_LENGTH]u-\\*[$Q_OFFSET_VALUE]
11526 .          \}
11527 .          ta \\n(.lu
11528 .       \}
11529 .       if \\n[#PRINT_STYLE]=1 \{\
11530 .          TYPEWRITER
11531 .          vs \\n[#DOC_LEAD]u
11532 .          LEFT
11533 .       \}
11534 .       if \\n[#PRINT_STYLE]=2 \{\
11535 .          FAMILY  \\*[$QUOTE_FAM]
11536 .          FT      \\*[$QUOTE_FT]
11537 .          PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$QUOTE_SIZE_CHANGE]
11538 .          ie !r#Q_AUTOLEAD  \{ .LS \\n[#Q_LEAD]u \}
11539 .          el \{\
11540 .             AUTOLEAD \\n[#Q_AUTOLEAD]
11541 .             nr #Q_LEAD \\n(.v
11542 .          \}
11543 .          if \\n[#ENDNOTE] \{\
11544 .             PT_SIZE \\n[#EN_PS]u\\*[$QUOTE_SIZE_CHANGE]
11545 .             ie !r#EN_Q_AUTOLEAD  \{ .LS \\n[#EN_Q_LEAD]u \}
11546 .             el \{\
11547 .                AUTOLEAD \\n[#EN_Q_AUTOLEAD]
11548 .                nr #EN_Q_LEAD \\n(.v
11549 .             \}
11550 .          \}
11551 .          nr #Q_LEAD_REAL \\n(.v
11552 .          LEFT
11553 .          if \\n[#QUOTE_COLOR]=1 \{\
11554 .             nf
11555 \m[\\*[$QUOTE_COLOR]]
11556 .             EOL
11557 .          \}
11558 .       \}
11559 .       if \\n[#LINENUMBERS]=2 \{\
11560 .          ie \\n[#QUOTE_LN]=1 \{\
11561 .             if '\\*[$Q_LN_GUTTER]'' .ds $Q_LN_GUTTER \\*[$LN_GUTTER]
11562 .             nm \\n(ln "" \\*[$Q_LN_GUTTER] -3-\\*[$Q_LN_GUTTER]
11563 .          \}
11564 .          el \{\
11565 .             if !\\n[#SILENT_QUOTE_LN] \{ .NUMBER_LINES OFF \}
11566 .          \}
11567 .       \}
11568 .       nr #Q_TOP \\n(nl
11569 .       if \\n[#PRINT_STYLE]=1 \{\
11570 .          if \\n[#UNDERLINE_QUOTES] \{\
11571 .               FT I
11572 .          \}
11573 .       \}
11574 .    \}
11575 .    el \{ .DO_QUOTE \}
11576 .END
11577 \#
11578 \#
11579 \# CODE
11580 \# ----
11581 \# *Arguments:
11582 \#   <none [ BR | BREAK | SPREAD ]> | <anything [ BR | BREAK | SPREAD ]>
11583 \# *Function:
11584 \#   Takes care of admistrivia associated with setting code snippets.
11585 \#
11586 .MAC CODE END
11587 \c
11588 .    if '\\$1'BR' \{\
11589 .       br
11590 .       shift
11591 .     \}
11592 .    if '\\$1'BREAK' \{\
11593 .       br
11594 .       shift
11595 .     \}
11596 .    if '\\$1'SPREAD' \{\
11597 .       brp
11598 .       shift
11599 .     \}
11600 .    ie '\\$1'' \{\
11601 .       ds $PRE_CODE_FAM \\n[.fam]
11602 .       ds $PRE_CODE_FT \\n[.sty]
11603 .       if !\\n[#PRINT_STYLE]=1 \{\
11604 .          ie \\n[#CODE_FAM]=1 \{ .fam \\*[$CODE_FAM] \}
11605 .          el \{ .fam C \}
11606 .       \}
11607 .       ft  R
11608 .       if \\n[#UNDERLINE_QUOTES]=1 \{\
11609 .           nr #RESTORE_UNDERLINE 1
11610 .           UNDERLINE_QUOTES OFF
11611 .           FT R
11612 .       \}
11613 .       if \\n[#PRINT_STYLE]=2 \{\
11614 .          tr `'
11615 .       \}
11616 .       if \\n[#RESTORE_SQ]=1 \{\
11617 .          nr #SQ_WAS_ON 1
11618 .          SMARTQUOTES OFF
11619 .       \}
11620 .    \}
11621 .    el \{\
11622 .       fam \\*[$PRE_CODE_FAM]
11623 .       ft  \\*[$PRE_CODE_FT]
11624 .       rr $RESTORE_FT
11625 .       if \\n[#RESTORE_UNDERLINE]=1 \{\
11626 .          rr #RESTORE_UNDERLINE
11627 .          UNDERLINE_QUOTES
11628 .       \}
11629 .       if \\n[#SQ_WAS_ON]=1 \{\
11630 .          rr #SQ_WAS_ON
11631 .          SMARTQUOTES
11632 .       \}
11633 .       if \\n[#PRINT_STYLE]=2 \{\
11634 .          tr ``
11635 .       \}
11636 .    \}
11637 .    if \\n[#NUM_ARGS]=2 \{\
11638 .       if '\\$2'BR'     \{ .br  \}
11639 .       if '\\$2'BREAK'  \{ .br  \}
11640 .       if '\\$2'SPREAK' \{ .brp \}
11641 .    \}
11642 .END
11643 \#
11644 \# CODE_FAMILY
11645 \# -----------
11646 \# *Arguments:
11647 \#   <family>
11648 \# *Function:
11649 \#   Creates register #CODE_FAM and string $CODE_FAM for use by CODE.
11650 \#
11651 .MAC CODE_FAMILY END
11652 .    nr #CODE_FAM 1
11653 .    ds $CODE_FAM \\$1
11654 .END
11655 \#
11656 \#
11657 \# ---Blockquotes---
11658 \#
11659 \# BLOCKQUOTE
11660 \# ----------
11661 \# *Arguments:
11662 \#   <none> | <anything>
11663 \# *Function:
11664 \#   Indents quoted text in fill mode and shortens line length
11665 \#   equivalently, or turns BLOCKQUOTE off.
11666 \# *Notes:
11667 \#   Owing to the need to bottom align TYPESET pages, quoted text gets
11668 \#   diverted so its depth can be measured (in DO_QUOTE) for determining
11669 \#   how much space to put before and after.
11670 \#
11671 \#   .PP after blockquote is optional if there's only one para,
11672 \#   but REQUIRED if there's more than one.
11673 \#
11674 .MAC BLOCKQUOTE END
11675 .    br
11676 .    if \\n[#LINENUMBERS]=1 \{\
11677 .       nr #LINENUMBERS 2
11678 .       nr #NEXT_LN \\n(ln
11679 .       nm
11680 .    \}
11681 .    ie '\\$1'' \{\
11682 .       ev BLOCKQUOTE
11683 .       if \\n[#LINENUMBERS]=2 \{\
11684 .          if \\n[#SILENT_BQUOTE_LN]=1 \{ .nm \\n[#NEXT_LN] 1000 -4 \}
11685 .       \}
11686 .       nr #IN_DIVER 1
11687 .       nr #QUOTE    2
11688 .       nr #PP_STYLE 2
11689 .       nr #Q_PP     0
11690 .       di B_QUOTE
11691 .       ie r#Q_OFFSET_VALUE \{\
11692 .          ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11693 .       \}
11694 .       el \{ .ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u) \}
11695 .       if \\n[#ENDNOTE] \{\
11696 .          if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
11697 .             ie r#Q_OFFSET_VALUE \{\
11698 .                ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11699 .             \}
11700 .             el \{\
11701 .                ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$Q_OFFSET_VALUE]*2u)
11702 .             \}
11703 .          \}
11704 .          if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
11705 .             ie r#Q_OFFSET_VALUE \{\
11706 .                ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11707 .             \}
11708 .             el \{\
11709 .                ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]u*2u)
11710 .             \}
11711 .          \}
11712 .       \}
11713 .       ta \\n(.lu
11714 .       CHECK_INDENT
11715 .       if \\n[#COLUMNS] \{\
11716 .          ie r#Q_OFFSET_VALUE \{\
11717 .             ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11718 .          \}
11719 .          el \{\
11720 .             ll \\n[#COL_L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
11721 .          \}
11722 .          if \\n[#ENDNOTE] \{\
11723 .             if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
11724 .                ie r#Q_OFFSET_VALUE \{\
11725 .                   ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11726 .                \}
11727 .                el \{\
11728 .                   ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$Q_OFFSET_VALUE]*2u)
11729 .                \}
11730 .             \}
11731 .             if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
11732 .                ie r#Q_OFFSET_VALUE \{\
11733 .                   ll \\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
11734 .                \}
11735 .                el \{\
11736 .                   ll \\n[#COL_L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
11737 .                \}
11738 .             \}
11739 .          \}
11740 .          ta \\n(.lu
11741 .       \}
11742 .       if \\n[#PRINT_STYLE]=1 \{\
11743 .          TYPEWRITER
11744 .          vs \\n[#DOC_LEAD]u
11745 .          QUAD LEFT
11746 .          HY OFF
11747 .       \}
11748 .       if \\n[#PRINT_STYLE]=2 \{\
11749 .          FAMILY  \\*[$BQUOTE_FAM]
11750 .          FT      \\*[$BQUOTE_FT]
11751 .          PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$BQUOTE_SIZE_CHANGE]
11752 .          ie !\\n[#BQ_AUTOLEAD] \{ .LS \\n[#BQ_LEAD]u \}
11753 .          el \{\
11754 .             AUTOLEAD \\n[#BQ_AUTOLEAD]
11755 .             nr #BQ_LEAD \\n(.v
11756 .          \}
11757 .          if \\n[#ENDNOTE] \{\
11758 .             PT_SIZE \\n[#EN_PS]u\\*[$BQUOTE_SIZE_CHANGE]
11759 .             ie !r#EN_BQ_AUTOLEAD  \{ .LS \\n[#EN_BQ_LEAD]u \}
11760 .             el \{\
11761 .                AUTOLEAD \\n[#EN_BQ_AUTOLEAD]
11762 .                nr #EN_BQ_LEAD \\n(.v
11763 .             \}
11764 .          \}
11765 .          nr #Q_LEAD_REAL \\n(.v
11766 .          if \\n[#BQUOTE_COLOR]=1 \{\
11767 .             nf
11768 \m[\\*[$BQUOTE_COLOR]]
11769 .             EOL
11770 .          \}
11771 .          QUAD \\*[$BQUOTE_QUAD]
11772 .          nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
11773 .          HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
11774 .          hy 14
11775 .       \}
11776 .       if \\n[#LINENUMBERS]=2 \{\
11777 .          ie \\n[#BQUOTE_LN]=1 \{\
11778 .             if '\\*[$BQ_LN_GUTTER]'' .ds $BQ_LN_GUTTER \\*[$LN_GUTTER]
11779 .             nm \\n(ln "" \\*[$BQ_LN_GUTTER] -3-\\*[$BQ_LN_GUTTER]
11780 .          \}
11781 .          el \{\
11782 .             if !\\n[#SILENT_BQUOTE_LN] \{ .NUMBER_LINES OFF \}
11783 .          \}
11784 .       \}
11785 .       nr #Q_TOP \\n(nl
11786 .       if \\n[#INDENT_FIRST_PARAS] \{\
11787 .          ie !\\n[#ENDNOTE] \{\
11788 .             if \\n[#PRINT_STYLE]=1 \{ .ti \\n[#PP_INDENT]u/2u \}
11789 .             if \\n[#PRINT_STYLE]=2 \{ .ti \\n[#PP_INDENT]u/2u \}
11790 .          \}
11791 .          el \{\
11792 .             if \\n[#INDENT_FIRSTS]=1 \{\
11793 .                if \\n[#PRINT_STYLE]=1 \{ .ti \\n[#EN_PP_INDENT]u/2u \}
11794 .                if \\n[#PRINT_STYLE]=2 \{ .ti \\n[#EN_PP_INDENT]u/2u \}
11795 .             \}
11796 .          \}
11797 .       \}
11798 .    \}
11799 .    el \{ .DO_QUOTE \}
11800 .END
11801 \#
11802 \#
11803 \# DO QUOTE
11804 \# --------
11805 \# *Arguments:
11806 \#   <none>
11807 \# *Function:
11808 \#   Ends the diversion P_QUOTE or B_QUOTE.  Spaces them according to
11809 \#   PRINTSTYLE, whether there's inter-paragraph spacing, and page
11810 \#   position.  TYPEWRITE treats spacing the same way in all circumstance
11811 \#   (viz. an extra line space).  TYPESET puts in only half
11812 \#   line spaces if the entire quote plus 1 line of body under the quote
11813 \#   fits on the the page; otherwise it puts in a full extra blank
11814 \#   line.  (This is to ensure the page remains bottom aligned).
11815 \#
11816 .MAC DO_QUOTE END
11817 .    br
11818 .    if \\n[#DIVER_LN_OFF] \{\
11819 \!.     NUMBER_LINES OFF
11820 .       rr #DIVER_LN_OFF
11821 .    \}
11822 .    di
11823 .    rr #IN_DIVER
11824 .    if \\n[#RESET_FN_COUNTERS]=2 \{\
11825 .       if !\\n[#FN_COUNT]=1 \{\
11826 .          if ((\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS])+\\n[#DIVER_DEPTH])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
11827 .             DIVER_FN_2_POST
11828 .             rr #RESET_FN_COUNTERS
11829 .          \}
11830 .       \}
11831 .    \}
11832 .    nr #SAVED_FN_NUMBER \\n[#FN_NUMBER]
11833 .    nr #DONE_ONCE 0 1
11834 .    REMOVE_INDENT
11835 .    ev
11836 .    nr #Q_DEPTH (\\n[#DIVER_DEPTH]-\\n[#Q_LEAD_REAL])+\\n[#LEAD]
11837 .    nr #Q_LEAD_DIFF \\n[#LEAD]-\\n[#Q_LEAD_REAL]
11838 .    SILENT
11839 .    br
11840 .    nf
11841 .    nr #CURRENT_V_POS \\n(nl+\\n[#Q_LEAD_DIFF]+(\\n[#DIVER_DEPTH]-\\n[#Q_DEPTH_REAL])
11842 .    SHIM
11843 .    SILENT OFF
11844 .    nr #Q_SPACE_ADJ \\n[#SHIM]/2
11845 .    nr #TRAP \\n(.t-1
11846 .    if \\n[#ENDNOTE] \{\
11847 .       nr #RESET_QUOTE_SPACING \\n[#FULLSPACE_QUOTES]
11848 .       ALWAYS_FULLSPACE_QUOTES
11849 .    \}
11850 .    if \\n[#PRINT_STYLE]=1 \{\
11851 .       if \\n[#START]=1 \{ . \}
11852 .       if \\n[#START]=0 \{\
11853 .          if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
11854 .       \}
11855 .       if \\n[#HEAD] \{\
11856 .          if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \}
11857 .       \}
11858 .    \}
11859 .    if \\n[#PRINT_STYLE]=2 \{\
11860 .       ie \\n[#PP_SPACE] \{\
11861 .          ie \\n[#HEAD]>0 \{ . \}
11862 .          el \{\
11863 .             ie \\n[#START] \{ . \}
11864 .             el \{ .ALD \\n[#DOC_LEAD]u \}
11865 .          \}
11866 .       \}
11867 .       el \{\
11868 .          ie \\n[#Q_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
11869 .             ie (\\n[#TRAP_DISTANCE]-1)-\\n[#Q_DEPTH]<\\n[#DOC_LEAD] \{\
11870 .                Q_NOFIT
11871 .             \}
11872 .             el \{\
11873 .                Q_FITS
11874 .             \}
11875 .          \}
11876 .          el \{\
11877 .             Q_NOFIT
11878 .          \}
11879 .       \}
11880 .    \}
11881 .    ie r#Q_OFFSET_VALUE \{\
11882 .       nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
11883 .    \}
11884 .    el \{ .nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE] \}
11885 .    if \\n[#COLUMNS] \{\
11886 .       ie r#Q_OFFSET_VALUE \{\
11887 .          nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
11888 .       \}
11889 .       el \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE] \}
11890 .    \}
11891 .    if !\\n[#ENDNOTE] \{ .po \\n[#Q_OFFSET]u \}
11892 .    if \\n[#ENDNOTE] \{\
11893 .       ie r#Q_OFFSET_VALUE \{ .in +\\n[#EN_PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u \}
11894 .       el \{ .in +\\*[$Q_OFFSET_VALUE] \}
11895 .    \}
11896 .    ie \\n[#START]=1 \{\
11897 .       ie !\\n[#Q_LEAD_DIFF]<0 \{ .ALD \\n[#Q_SPACE_ADJ]u \}
11898 .       el \{ .RLD 0-\\n[#Q_LEAD_DIFF]u \}
11899 .    \}
11900 .    el \{\
11901 .       if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#Q_SPACE_ADJ]u \}
11902 .    \}
11903 .    if \\n[#QUOTE]=1 \{\
11904 .       nf
11905 .       P_QUOTE
11906 .       if !\\n[#START] \{ .rr #QUOTE \}
11907 .    \}
11908 .    if \\n[#QUOTE]=2 \{\
11909 .       nf
11910 .       B_QUOTE
11911 .    \}
11912 .    if \\n[#PRINT_STYLE]=1 \{\
11913 .       ALD \\n[#DOC_LEAD]u
11914 .       if !\\n[.v]=\\n[#DOC_LEAD] \{ .SHIM \}
11915 .    \}
11916 .    if \\n[#PRINT_STYLE]=2 \{\
11917 .       ie \\n[#START] \{\
11918 .          ie \\n[#PP_SPACE] \{\
11919 .
11920 .          \}
11921 .          el \{\
11922 .             ALD \\n[#DOC_LEAD]u
11923 .             SHIM
11924 .          \}
11925 .       \}
11926 .       el \{\
11927 .          ie \\n[#PP_SPACE] \{ . \}
11928 .          el \{\
11929 .             ie \\n[#HEAD]=1 \{\
11930 .                ALD \\n[#DOC_LEAD]u
11931 .                SHIM
11932 .             \}
11933 .             el \{\
11934 .                ie \\n[#FULLSPACE_QUOTES] \{\
11935 .                   ie \\n[#ENDNOTE] \{ .ALD \\n[#EN_LEAD]u \}
11936 .                   el \{ .ALD \\n[#DOC_LEAD]u \}
11937 .                \}
11938 .                el \{ .ALD (\\n[#DOC_LEAD]u/2u) \}
11939 .                ie \\n[#Q_FITS] \{\
11940 .                   ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\
11941 .                      nr #Q_AT_TOP 1
11942 .                      nr #DELAY_SHIM 1
11943 .                   \}
11944 .                   el \{ .SHIM \}
11945 .                \}
11946 .                el \{\
11947 .                   SHIM
11948 .\" Make sure that Q_LEAD_DIFF is not added to the first line of
11949 .\" normal text at the top of any page following output of a quote
11950 .\" whose last line falls on B_MARGIN of the previous page.
11951 .                   if \\n(nl=(\\n[#T_MARGIN]-\\n[#DOC_LEAD]+\\n[#Q_LEAD_DIFF]) \{\
11952 .                      PRINT \&
11953 .                      br
11954 .                      sp -1v-\\n[#Q_LEAD_DIFF]u
11955 .                   \}
11956 .                \}
11957 .             \}
11958 .          \}
11959 .       \}
11960 .    \}
11961 .    if \\n[#LINENUMBERS]=2 \{\
11962 .       nr #LINENUMBERS 1
11963 .       if !\\n[#ENDNOTE] \{\
11964 .          ie \\n[#RESTORE_LN_NUM]=1 \{ .nm \\n[#NEXT_LN] \}
11965 .          el \{ .nm +0 \}
11966 .       \}
11967 .    \}
11968 .    if \\n[#ENDNOTE] \{ .nr #FULLSPACE_QUOTES \\n[#RESET_QUOTE_SPACING] \}
11969 .    if r#HEAD        \{ .rr #HEAD     \}
11970 .    if r#EPIGRAPH    \{ .rr #EPIGRAPH \}
11971 .    rr #Q_PP
11972 .    rr #LINEBREAK
11973 .    nr #PP_STYLE  1
11974 .    nr #END_QUOTE 1
11975 .    if !\\n[#ENDNOTE] \{ .po \\n[#L_MARGIN]u \}
11976 .    if \\n[#ENDNOTE] \{\
11977 .       in \\n[#EN_TEXT_INDENT]u
11978 .    \}
11979 .    if \\n[#COLUMNS] \{\
11980 .       if !\\n[#ENDNOTE] \{\
11981 .          po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
11982 .          nr #L_MARGIN \\n(.o
11983 .       \}
11984 .       if \\n[#ENDNOTE] \{\
11985 .          in \\n[#EN_TEXT_INDENT]u
11986 .       \}
11987 .    \}
11988 .    ie !\\n[#ENDNOTE] \{\
11989 .       nr #RESET_PP_INDENT \\n[#PP_INDENT]
11990 .       PARA_INDENT 0
11991 .       PP
11992 .       PARA_INDENT \\n[#RESET_PP_INDENT]u
11993 .       QUAD \\*[$DOC_QUAD]
11994 .    \}
11995 .    el \{\
11996 .       nr #RESET_EN_PP_INDENT \\n[#EN_PP_INDENT]
11997 .       ENDNOTE_PARA_INDENT 0
11998 .       PP
11999 .       ENDNOTE_PARA_INDENT \\n[#RESET_EN_PP_INDENT]u
12000 .       QUAD \\*[EN_QUAD]
12001 .    \}
12002 .    if r#DELAY_SHIM \{\
12003 .       SHIM
12004 .       rr #DELAY_SHIM
12005 .    \}
12006 .END
12007 \#
12008 \#
12009 \# Utility macros for DO_QUOTE
12010 \# ---------------------------
12011 \#
12012 .MAC Q_FITS END
12013 .    nr #Q_FITS 1
12014 .    ie \\n[#HEAD]=1 \{\
12015 .       ALD \\n[#Q_LEAD_DIFF]u
12016 .    \}
12017 .    el \{\
12018 .       ie \\n[#START] \{ . \}
12019 .       el \{\
12020 .          ie \\n[#FULLSPACE_QUOTES] \{\
12021 .             ie \\n[#ENDNOTE] \{ .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
12022 .             el \{ .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
12023 .          \}
12024 .          el \{\
12025 .\" This seems to be the only way to get the baseline of quotes that start
12026 .\" at the top of the page to fall on the first line of the "grid" (i.e on
12027 .\" the first valid baseline of the page).
12028 .             ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\
12029 .                if \\n[#QUOTE]=1 \{\
12030 .                   rn P_QUOTE Q_TEMP
12031 .                   di P_QUOTE
12032 .                   vs \\n[#Q_LEAD]u
12033 .                   PRINT \&
12034 .                   sp -1v+\\n[#Q_LEAD_DIFF]u
12035 .                   Q_TEMP
12036 .                   di
12037 .                \}
12038 .                if \\n[#QUOTE]=2 \{\
12039 .                   rn B_QUOTE Q_TEMP
12040 .                   di B_QUOTE
12041 .                   vs \\n[#BQ_LEAD]u
12042 .                   PRINT \&
12043 .                   sp -1v+\\n[#Q_LEAD_DIFF]u
12044 .                   Q_TEMP
12045 .                   di
12046 .                \}
12047 .                rm Q_TEMP
12048 .             \}
12049 .             el \{\
12050 .                ALD (\\n[#DOC_LEAD]u/2u)+\\n[#Q_LEAD_DIFF]u
12051 .             \}
12052 .          \}
12053 .       \}
12054 .       if \\n[#DIVER_FN]=2 \{ .rr #DIVER_FN \}
12055 .    \}
12056 .END
12057 \#
12058 .MAC Q_NOFIT END
12059 .    rr #Q_FITS
12060 .    ie r#HEAD \{\
12061 .       if \\n[#HEAD]=1 \{ . \}
12062 .    \}
12063 .    el \{\
12064 .       ie \\n[#FULLSPACE_QUOTES] \{\
12065 .          ie \\n[#ENDNOTE] \{ .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
12066 .          el \{ .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u \}
12067 .       \}
12068 .       el \{ .ALD (\\n[#DOC_LEAD]u/2u)+\\n[#Q_LEAD_DIFF]u \}
12069 .       nr #Q_PARTIAL_DEPTH 0 \\n[#Q_LEAD_REAL]
12070 .       while \\n+[#Q_PARTIAL_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
12071 .
12072 .\}
12073 .       nr #Q_PARTIAL_DEPTH -\\n[#Q_LEAD_REAL]
12074 .       nr #Q_SPACE_ADJ (\\n[#TRAP_DISTANCE]-1)-\\n[#Q_PARTIAL_DEPTH]+\\n[#Q_LEAD_DIFF]u
12075 .\" Hack to deal with the fact that even though the above routine
12076 .\" makes the bottom line of the quote fall exactly on the bottom
12077 .\" margin when traps are disabled, it refuses to do so when traps
12078 .\" are on.  The difference by which it's off is #Q_LEAD_DIFF
12079 .\" (the +\\n[#Q_LEAD_DIFF] at the end of the line, above).  Hack
12080 .\" solution: temporarily lower the FOOTER trap position.
12081 .       nr #SAVED_FOOTER_POS \\n[#VARIABLE_FOOTER_POS]
12082 .       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+.25v
12083 .    \}
12084 .END
12085 \#
12086 \# ====================================================================
12087 \#
12088 \# BREAK QUOTE
12089 \# -----------
12090 \# *Arguments:
12091 \#   <none>
12092 \# *Function:
12093 \#   Ends the diversion P_QUOTE or B_QUOTE, breaks to a new
12094 \#   page, and reinvokes BLOCKQUOTE.
12095 \# *Notes:
12096 \#   Because quotes go into a diversion before they're output,
12097 \#   footnotes in quotes that cross pages behave erratically.  The footnote
12098 \#   isn't processed until the diversion ends, hence the footnote
12099 \#   marker in the quote isn't always correct for the new page (it's
12100 \#   picked up from the old one).  BREAK_QUOTE is a workaround for
12101 \#   this problem.
12102 \#
12103 .MAC BREAK_QUOTE END
12104 .    br
12105 .    di
12106 .    nr #BROKEN_QUOTE 1
12107 .    REMOVE_INDENT
12108 .    ev
12109 .    nr #Q_DEPTH \\n[#DIVER_DEPTH]+\\n[#LEAD]
12110 .    if \\n[#PRINT_STYLE]=1 \{\
12111 .       if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
12112 .       if \\n[#HEAD] \{\
12113 .          if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \}
12114 .       \}
12115 .    \}
12116 .    if \\n[#PRINT_STYLE]=2 \{\
12117 .       ie \\n[#PP_SPACE] \{\
12118 .          ie \\n[#HEAD]=1 \{ . \}
12119 .          el \{\
12120 .             if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
12121 .          \}
12122 .       \}
12123 .       el \{\
12124 .          rr #Q_FITS
12125 .          ie r#HEAD \{\
12126 .             if \\n[#HEAD]=1 \{ . \}
12127 .          \}
12128 .          el \{ .ALD \\n[#DOC_LEAD]u \}
12129 .       \}
12130 .    \}
12131 .    ie r#Q_OFFSET_VALUE \{\
12132 .       nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
12133 .    \}
12134 .    el \{\
12135 .       nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
12136 .    \}
12137 .    if \\n[#COLUMNS] \{\
12138 .       ie r#Q_OFFSET_VALUE \{\
12139 .          nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
12140 .       \}
12141 .       el \{\
12142 .          nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE]
12143 .       \}
12144 .    \}
12145 .    po \\n[#Q_OFFSET]u
12146 .    if \\n[#QUOTE]=1 \{\
12147 .       nf
12148 .       P_QUOTE
12149 .    \}
12150 .    if \\n[#QUOTE]=2 \{\
12151 .       nf
12152 .       B_QUOTE
12153 .    \}
12154 .    if r#HEAD     \{ .rr #HEAD     \}
12155 .    if r#EPIGRAPH \{ .rr #EPIGRAPH \}
12156 .    rr #Q_PP
12157 .    rr #LINEBREAK
12158 .    nr #PP_STYLE  1
12159 .    nr #END_QUOTE 1
12160 .    if \\n[#PRINT_STYLE]=1 \{\
12161 .       if \\n[#UNDERLINE_QUOTES] \{\
12162 .          UNDERLINE OFF
12163 .       \}
12164 .    \}
12165 .    po \\n[#L_MARGIN]u
12166 .    if \\n[#COLUMNS] \{\
12167 .       po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
12168 .       nr #L_MARGIN \\n(.o
12169 .    \}
12170 .    QUAD \\*[$DOC_QUAD]
12171 .    sp |\\n[#PAGE_LENGTH]u  \" To trip footer/header
12172 .    BLOCKQUOTE
12173 .END
12174 \#
12175 \# ====================================================================
12176 \#
12177 \# +++PAGINATION+++
12178 \#
12179 \# PAGINATE
12180 \# --------
12181 \# *Arguments:
12182 \#   <none> | <anything>
12183 \# *Function:
12184 \#   Turns page numbering off or on during document processing.
12185 \# *Notes:
12186 \#   Default is on.
12187 \#
12188 .MAC PAGINATE END
12189 .    ie '\\$1'' \{ .nr #PAGINATE 1 \}
12190 .    el \{ .nr #PAGINATE 0 \}
12191 .    if \\n[#HF_OFF]=1 \{\
12192 .       rr #PAGINATION_STATE
12193 .       rr #HF_OFF
12194 .    \}
12195 .END
12196 \#
12197 \#
12198 \# SUSPEND PAGINATION (before ENDNOTES)
12199 \# ------------------
12200 \# *Argument:
12201 \#   <none>
12202 \# *Function:
12203 \#   Creates register #SUSPEND_PAGINATION
12204 \# *Notes:
12205 \#   Useful only to suspend pagination before outputting endnotes.
12206 \#
12207 .MAC SUSPEND_PAGINATION END
12208 .    nr #SUSPEND_PAGINATION 1
12209 .END
12210 \#
12211 \# RESTORE PAGINATION (after ENDNOTES)
12212 \# ------------------
12213 \# *Argument:
12214 \#   <none>
12215 \# *Function:
12216 \#   Removes register #SUSPEND_PAGINATION.  Creates register
12217 \#   #DEFER_PAGINATION
12218 \# *Notes:
12219 \#   Useful only to restore pagination after outputting endnotes.
12220 \#
12221 .MAC RESTORE_PAGINATION END
12222 .    rr #SUSPEND_PAGINATION
12223 .    if \\n[#PAGE_NUM_V_POS]=1 \{ .PAGINATE \}
12224 .    if \\n[#PAGE_NUM_V_POS]=2 \{ .nr #DEFER_PAGINATION 1 \}
12225 .END
12226 \#
12227 \#
12228 \# PAGE NUMBER FORMAT
12229 \# ------------------
12230 \# *Arguments:
12231 \#   DIGIT | ROMAN | roman | ALPHA | alpha
12232 \# *Function:
12233 \#   Assigns user entered format to #PAGENUMBER.
12234 \#
12235 .MAC PAGENUM_STYLE END
12236 .    nr #PAGENUM_STYLE_SET 1
12237 .    if '\\$1'DIGIT'  \{\
12238 .       ds $PAGENUM_STYLE \\$1
12239 .       af #PAGENUMBER 1
12240 .    \}
12241 .    if '\\$1'ROMAN'  \{\
12242 .       ds $PAGENUM_STYLE \\$1
12243 .       af #PAGENUMBER I
12244 .    \}
12245 .    if '\\$1'roman'  \{\
12246 .       ds $PAGENUM_STYLE \\$1
12247 .       af #PAGENUMBER i
12248 .    \}
12249 .    if '\\$1'ALPHA'  \{\
12250 .       ds $PAGENUM_STYLE \\$1
12251 .       af #PAGENUMBER A
12252 .    \}
12253 .    if '\\$1'alpha'  \{\
12254 .       ds $PAGENUM_STYLE \\$1
12255 .       af #PAGENUMBER a
12256 .    \}
12257 .END
12258 \#
12259 \#
12260 \# HYPHENS AROUND PAGE NUMBERS
12261 \# ---------------------------
12262 \# *Arguments:
12263 \#   <none> | <anything>
12264 \# *Function:
12265 \#   Creates or modifies register #PAGE_NUM_HYPHENS.
12266 \#   Used to dis/enable hyphens on either side of page numbers.
12267 \# *Notes:
12268 \#   Default is on.
12269 \#
12270 .MAC PAGENUM_HYPHENS END
12271 .    nr #PAGE_NUM_HYPHENS_SET 1
12272 .    ie '\\$1'' \{ .nr #PAGE_NUM_HYPHENS 1 \}
12273 .    el \{ .rr #PAGE_NUM_HYPHENS   \}
12274 .END
12275 \#
12276 \#
12277 \# PAGENUMBER POSITION
12278 \# -------------------
12279 \# *Arguments:
12280 \#   TOP | BOTTOM  LEFT | CENTER | RIGHT
12281 \# *Function:
12282 \#   Creates or modifies various PAGE_NUM_H | V_POS registers.
12283 \#   Used to position page numbers.
12284 \# *Notes:
12285 \#   Default is center/bottom.
12286 \#
12287 .MAC PAGENUM_POS END
12288 .    nr #PAGE_NUM_POS_SET 1
12289 .    if '\\$1'TOP'    \{ .nr #PAGE_NUM_V_POS 1 \}
12290 .    if '\\$1'BOTTOM' \{ .nr #PAGE_NUM_V_POS 2 \}
12291 .    if '\\$2'LEFT'   \{ .nr #PAGE_NUM_H_POS 1 \}
12292 .    if '\\$2'CENTER' \{ .nr #PAGE_NUM_H_POS 2 \}
12293 .    if '\\$2'CENTRE' \{ .nr #PAGE_NUM_H_POS 2 \}
12294 .    if '\\$2'RIGHT'  \{ .nr #PAGE_NUM_H_POS 3 \}
12295 .END
12296 \#
12297 \#
12298 .MAC PN_WITH_HYPHENS END
12299 .    nr #HYPHEN_ADJ \\n[#CAP_HEIGHT]/12
12300 .    ds $HYPHEN \v'-\En[#HYPHEN_ADJ]u'-\v'\En[#HYPHEN_ADJ]u'
12301 .    PRINT \m[\\*[$PAGENUM_COLOR]]\\*[$HYPHEN]\|\\n[#PAGENUMBER]\|\\*[$HYPHEN]
12302 .    br
12303 .END
12304 \#
12305 \#
12306 \# PRINT PAGE NUMBER
12307 \# -----------------
12308 \# *Arguments:
12309 \#   <none>
12310 \# *Function:
12311 \#   Prints page number if PAGINATE=1.
12312 \#
12313 .MAC PRINT_PAGE_NUMBER END
12314 .    ev PAGENUMBER
12315 .    nf
12316 .    na
12317 .    po \\n[#DOC_L_MARGIN]u
12318 .    ll \\n[#DOC_L_LENGTH]u
12319 .    ta \\n(.lu
12320 .    FAMILY  \\*[$PAGE_NUM_FAM]
12321 .    FT      \\*[$PAGE_NUM_FT]
12322 .    PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$PAGE_NUM_SIZE_CHANGE]
12323 .    if \\n[#PRINT_STYLE]=1 \{\
12324 .       TYPEWRITER
12325 .    \}
12326 .    if \\n[#PAGE_NUM_V_POS]=1 \{ .vs 0 \}
12327 .    if o \{\
12328 .       ie \\n[#PAGE_NUM_H_POS]=1 \{ .LEFT  \}
12329 .       el                        \{ .RIGHT \}
12330 .    \}
12331 .    if e \{\
12332 .       ie \\n[#PAGE_NUM_H_POS]=1 \{ .RIGHT  \}
12333 .       el                        \{ .LEFT   \}
12334 .    \}
12335 .    if \\n[#PAGE_NUM_H_POS]=2    \{ .CENTER \}
12336 .    if \\n[#RECTO_VERSO]=0 \{\
12337 .       if \\n[#PAGE_NUM_H_POS]=1 \{ .LEFT   \}
12338 .       if \\n[#PAGE_NUM_H_POS]=2 \{ .CENTER \}
12339 .       if \\n[#PAGE_NUM_H_POS]=3 \{ .RIGHT  \}
12340 .    \}
12341 .    nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
12342 .    if \\n[#EN_FIRST_PAGE] \{\
12343 .       if \\n[#EN_FIRST_PN] \{ .PAGENUMBER \\n[#EN_FIRST_PN] \}
12344 .       rr #EN_FIRST_PAGE
12345 .    \}
12346 .    if \\n[#BIB_FIRST_PAGE] \{\
12347 .       if \\n[#BIB_FIRST_PN] \{ .PAGENUMBER \\n[#BIB_FIRST_PN] \}
12348 .       rr #BIB_FIRST_PAGE
12349 .    \}
12350 .    if \\n[#TOC_FIRST_PAGE] \{\
12351 .       PAGENUMBER 1
12352 .       rr #TOC_FIRST_PAGE
12353 .    \}
12354 .    ie \\n[#DRAFT_WITH_PAGENUM] \{\
12355 .       ie '\\*[$REVISION]'' \{\
12356 .          PRINT "\\*[$DRAFT_STRING]\\*[$DRAFT] / \\n[#PAGENUMBER]"
12357 .       \}
12358 .       el \{\
12359 .          ie '\\*[$DRAFT]'' \{\
12360 .             PRINT "\\*[$REVISION_STRING] \\*[$REVISION] / \\n[#PAGENUMBER]"
12361 .          \}
12362 .          el \{\
12363 .             PRINT "\\*[$DRAFT_STRING]\\*[$DRAFT], \\*[$REVISION_STRING] \\*[$REVISION] / \\n[#PAGENUMBER]"
12364 .          \}
12365 .       \}
12366 .    \}
12367 .    el \{\
12368 .       ie \\n[#PAGE_NUM_HYPHENS] \{\
12369 .          if '\\*[$PAGENUM_STYLE]'DIGIT' \{\
12370 .             di NULL
12371 1\\R'#CAP_HEIGHT \\n[.cht]'
12372 .             di
12373 .             PN_WITH_HYPHENS
12374 .          \}
12375 .          if '\\*[$PAGENUM_STYLE]'ROMAN' \{\
12376 .             di NULL
12377 I\\R'#CAP_HEIGHT \\n[.cht]'
12378 .             di
12379 .             PN_WITH_HYPHENS
12380 .          \}
12381 .          if '\\*[$PAGENUM_STYLE]'ALPHA' \{\
12382 .             di NULL
12383 E\\R'#CAP_HEIGHT \\n[.cht]'
12384 .             di
12385 .             PN_WITH_HYPHENS
12386 .          \}
12387 .          if '\\*[$PAGENUM_STYLE]'roman' \{\
12388 .             PRINT \m[\\*[$PAGENUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
12389 .          \}
12390 .          if '\\*[$PAGENUM_STYLE]'alpha' \{\
12391 .             PRINT "\m[\\*[$PAGENUM_COLOR]]-\|\\n[#PAGENUMBER]\|-"
12392 .          \}
12393 .       \}
12394 .       el \{ .PRINT "\m[\\*[$PAGENUM_COLOR]]\\n[#PAGENUMBER]" \}
12395 .    \}
12396 .    ev
12397 .    nr #DIVER_DEPTH 0
12398 .END
12399 \#
12400 \# ====================================================================
12401 \#
12402 \# +++FOOTNOTES+++
12403 \#
12404 \# Mom's footnote handling is baroque, to say the least.  There are
12405 \# redundancies in a number of the macros involved, as well as some
12406 \# registers that probably don't get used anymore.  The baggage is left
12407 \# in in case some new footnote oddity/challenge gets thrown my way.
12408 \# 
12409 \# The macros are heavily commented.
12410 \#
12411 \# FOOTNOTE AUTOLEAD
12412 \# -----------------
12413 \# *Arguments:
12414 \#   <autolead value for footnotes>
12415 \# *Function:
12416 \#   Creates or modifies register #FN_AUTOLEAD.
12417 \# *Notes:
12418 \#   Default is #DOC_LEAD/2 for TYPEWRITE; 2 for TYPESET
12419 \#
12420 .MAC FOOTNOTE_AUTOLEAD END
12421 .    nr #FN_AUTOLEAD \\$1
12422 .END
12423 \#
12424 \#
12425 \# FOOTNOTE MARKERS
12426 \# ----------------
12427 \# *Arguments:
12428 \#   <none> | <anything>
12429 \# *Function:
12430 \#   Turns generation of footnote markers on or off.
12431 \# *Notes:
12432 \#   Default is on.
12433 \#
12434 .MAC FOOTNOTE_MARKERS END
12435 .    ie '\\$1'' \{ .nr #FN_MARKERS 1 \}
12436 .    el \{ .nr #FN_MARKERS 0 \}
12437 .END
12438 \#
12439 \#
12440 \# FOOTNOTE MARKER STYLE
12441 \# ---------------------
12442 \# *Arguments:
12443 \#   STAR | NUMBER | LINE
12444 \# *Function:
12445 \#   Sets register #FN_MARKER_STYLE, used in FOOTNOTE to determine
12446 \#   the style of footnote markers.
12447 \# *Notes:
12448 \#   1=STAR; 2=NUMBER; 3=LINE.  LINE means "use output line numbers".
12449 \#   Default is STAR.
12450 \#
12451 .MAC FOOTNOTE_MARKER_STYLE END
12452 .    if '\\$1'STAR' \{\
12453 .       if \\n[#FN_MARKER_STYLE]=3 \{\
12454 .          if !\\n[#NEWPAGE]=1 \{\
12455 .             tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is LINE.
12456 .             tm1 "       You cannot change footnote marker style without
12457 .             tm1 "       first breaking to a new page with NEWPAGE.
12458 .             tm1 "       Ignoring request FOOTNOTE_MARKER_STYLE STAR at line \\n(.c.
12459 .             return
12460 .          \}
12461 .       \}
12462 .       if \\n[#RUN_ON]=1 \{\
12463 .          tm1 "[mom]: FOOTNOTE_MARKER_STYLE STAR at line \\n(.c is incompatible
12464 .          tm1 "       with RUN_ON footnotes.  Ignoring request.
12465 .          return
12466 .       \}
12467 .       nr #FN_MARKER_STYLE 1
12468 .       if \\n[#NEWPAGE]=1 \{ .rr #NEWPAGE \}
12469 .       FOOTNOTE_MARKERS
12470 .    \}
12471 .    if '\\$1'NUMBER' \{\
12472 .       if \\n[#FN_MARKER_STYLE]=3 \{\
12473 .          if !\\n[#NEWPAGE]=1 \{\
12474 .             tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is NUMBER.
12475 .             tm1 "       You cannot change footnote marker style without
12476 .             tm1 "       first breaking to a new page with NEWPAGE.
12477 .             tm1 "       Ignoring request FOOTNOTE_MARKER_STYLE NUMBER at line \\n(.c.
12478 .             return
12479 .          \}
12480 .       \}
12481 .       if \\n[#RUN_ON]=1 \{\
12482 .          tm1 "[mom]: FOOTNOTE_MARKER_STYLE NUMBER at line \\n(.c is incompatible
12483 .          tm1 "       with RUN_ON footnotes.  Ignoring request.
12484 .          return
12485 .       \}
12486 .       nr #FN_MARKER_STYLE 2
12487 .       if \\n[#NEWPAGE]=1 \{ .rr #NEWPAGE \}
12488 .       FOOTNOTE_MARKERS
12489 .    \}
12490 .    if '\\$1'LINE' \{\
12491 .       nr #FN_MARKER_STYLE 3
12492 .       FOOTNOTE_MARKERS OFF
12493 .       if !\\n[#FN_LN_SEP] \{\
12494 .          if !\\n[#FN_LN_BRACKETS] \{ .FOOTNOTE_LINENUMBER_BRACKETS SQUARE \}
12495 .       \}
12496 .    \}
12497 .END
12498 \#
12499 \#
12500 \# FOOTNOTE LINENUMBER MARK
12501 \# ------------------------
12502 \# *Function:
12503 \#   This string, when called inline, stores the current output line
12504 \#   number in register #FN_MARK for use with FOOTNOTE.
12505 \#
12506 .ds FN-MARK \R'#FN_MARK \En(ln'
12507 \#
12508 \#
12509 \# FOOTNOTE LINENUMBER SEPARATOR
12510 \# -----------------------------
12511 \# *Argument:
12512 \#   <user-defined separator>
12513 \# *Function:
12514 \#   Stores user-defined separator (for use then
12515 \#   FOOTNOTE_MARKER_STYLE is LINE) in string $FN_LN_SEP.  The
12516 \#   separator is intended to be used when the user wishes a
12517 \#   separator, rather than the choice of brackets offered by
12518 \#   FOOTNOTE_LINENUMBER_BRACKETS.
12519 \#
12520 .MAC FOOTNOTE_LINENUMBER_SEPARATOR END
12521 .    rr #FN_LN_BRACKETS
12522 .    nr #FN_LN_SEP 1
12523 .    ds $FN_LN_SEP "\\$1
12524 .END
12525 \#
12526 \#
12527 \# FOOTNOTE LINENUMBER BRACKETS
12528 \# ----------------------------
12529 \# *Argument:
12530 \#   PARENS | SQUARE | BRACES or ( | [ | {
12531 \# *Function:
12532 \#   Sets register #FN_LN_BRACKETS to 1, and creates strings
12533 \#   $FN_OPEN_BRACKET and $FN_CLOSE_BRACKET according to the given
12534 \#   argument.
12535 \#
12536 .MAC FOOTNOTE_LINENUMBER_BRACKETS END
12537 .    rr #FN_LN_SEP
12538 .    nr #FN_LN_BRACKETS 1
12539 .    if '\\$1'PARENS' \{\
12540 .       ds $FN_OPEN_BRACKET (
12541 .       ds $FN_CLOSE_BRACKET )
12542 .    \}
12543 .    if '\\$1'(' \{\
12544 .       ds $FN_OPEN_BRACKET (
12545 .       ds $FN_CLOSE_BRACKET )
12546 .    \}
12547 .    if '\\$1'SQUARE' \{\
12548 .       ds $FN_OPEN_BRACKET [
12549 .       ds $FN_CLOSE_BRACKET ]
12550 .    \}
12551 .    if '\\$1'[' \{\
12552 .       ds $FN_OPEN_BRACKET [
12553 .       ds $FN_CLOSE_BRACKET ]
12554 .    \}
12555 .    if '\\$1'BRACES' \{\
12556 .       ds $FN_OPEN_BRACKET {
12557 .       ds $FN_CLOSE_BRACKET }
12558 .    \}
12559 .    if '\\$1'{' \{\
12560 .       ds $FN_OPEN_BRACKET {
12561 .       ds $FN_CLOSE_BRACKET }
12562 .    \}
12563 .END
12564 \#
12565 \#
12566 \# RESET FOOTNOTE NUMBER
12567 \# ---------------------
12568 \# *Arguments:
12569 \#   <none> | PAGE
12570 \# *Function:
12571 \#   Resets register #FN_NUMBER to 1.  If argument is PAGE, creates
12572 \#   toggle #RESET_FN_NUMBER which is checked in HEADER.  If 1,
12573 \#   numbered footnotes on every page start at 1.
12574 \#
12575 .MAC RESET_FOOTNOTE_NUMBER END
12576 .    ie '\\$1'' \{ .nr #FN_NUMBER 0 1 \}
12577 .    el \{ .nr #RESET_FN_NUMBER 1 \}
12578 .END
12579 \#
12580 \#
12581 \# FOOTNOTE RULE LENGTH
12582 \# --------------------
12583 \# *Arguments:
12584 \#   <length of rule used to separate footnotes from running text>
12585 \# *Function:
12586 \#   Creates or modifies registers #FN_RULE_LENGTH.
12587 \# *Notes:
12588 \#   Requires unit of measure (iPpcm).
12589 \#   Default is 4P for both PRINTSTYLEs.
12590 \#
12591 .MAC FOOTNOTE_RULE_LENGTH END
12592 .    nr #FN_RULE_LENGTH (\\$1)
12593 .END
12594 \#
12595 \#
12596 \# FOOTNOTE_RULE_ADJ
12597 \# -----------------
12598 \# *Arguments:
12599 \#   <number of points to raise footnote rule from it's baseline position>
12600 \# *Function:
12601 \#   Creates or modifies register #FN_RULE_ADJ.
12602 \# *Notes:
12603 \#   Default is 3p for both TYPESTYLES.
12604 \#
12605 \#   Requires unit of measure.
12606 \#
12607 .MAC FOOTNOTE_RULE_ADJ END
12608 .    nr #FN_RULE_ADJ (\\$1)
12609 .END
12610 \#
12611 \#
12612 \# FOOTNOTE RULE
12613 \# -------------
12614 \# *Arguments:
12615 \#   <none> | <anything>
12616 \# *Function:
12617 \#   Turns printing of footnote separator rule on or off.  If invoked as
12618 \#   PRINT_FOOTNOTE_RULE, prints footnote separator rule.
12619 \# *Notes:
12620 \#   Default is on.
12621 \#
12622 \#   Invoked in FOOTNOTE (as PRINT_FOOTNOTE_RULE) as 1st line of a footnote
12623 \#   if the footnote number (#FN_COUNT) is 1.
12624 \#
12625 .MAC FOOTNOTE_RULE END
12626 .    ie '\\$0'PRINT_FOOTNOTE_RULE' \{\
12627 .       if \\n[#FN_RULE]=0 \{ .RLD 1v \}
12628 .       RLD 1v
12629 .       LEFT
12630 \v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\
12631 \D't \\n[#FN_RULE_WEIGHT]'\
12632 \h'-\\n[#FN_RULE_WEIGHT]u'\
12633 \D'l \\n[#FN_RULE_LENGTH]u 0'\
12634 \v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u'
12635 \!.     PT_SIZE \\n[#DOC_PT_SIZE]u\\*$[FN_SIZE_CHANGE]
12636 .       QUAD \\*[$FN_QUAD]
12637 .    \}
12638 .    el \{\
12639 .       ie '\\$1'' \{ .nr #FN_RULE 1 \}
12640 .       el \{ .nr #FN_RULE 0 \}
12641 .    \}
12642 .END
12643 \#
12644 \#
12645 \# FOOTNOTE SPACING
12646 \# ----------------
12647 \# *Arguments:
12648 \#   <per item post footnote spacing> | <anything>
12649 \# *Function:
12650 \#   Enables printing of post footnote spacing.
12651 \# *Notes:
12652 \#   Default is no space.
12653 \#
12654 .MAC FOOTNOTE_SPACING END
12655 .    ie \B'\\$1' \{ .nr #FN_SPACE (\\$1) \}
12656 .    el \{ .nr #FN_SPACE 0 \}
12657 .END
12658 \#
12659 \#
12660 \# RUN ON FOOTNOTES
12661 \# ----------------
12662 \# *Arguments:
12663 \#   <none> | <anything>
12664 \# *Function:
12665 \#   Toggles run-on footnotes on or off.
12666 \#
12667 .MAC FOOTNOTES_RUN_ON END
12668 .    ie '\\$1'' \{\
12669 .       if \\n[#FN_COUNT]>0 \{\
12670 .          tm1 "[mom]: Switching to run-on footnotes at line \\n(.c will cause
12671 .          tm1 "       you to loose footnotes already formatted for this page.
12672 .          tm1 "       Ignoring request FOOTNOTES_RUN_ON.
12673 .          rr #RUN_ON
12674 .          return
12675 .       \}
12676 .       nr #RUN_ON 1
12677 .       if \\n[#FN_MARKER_STYLE]=1 \{ .RUNON_WARNING \}
12678 .       if \\n[#FN_MARKER_STYLE]=2 \{ .RUNON_WARNING \}
12679 .    \}
12680 .    el \{\
12681 .       if \\n[#FN_COUNT]>0 \{\
12682 .          if \\n[#RUN_ON]=1 \{\
12683 .             tm1 "[mom]: Switching off run-on footnotes at line \\n(.c will cause
12684 .             tm1 "       you to loose footnotes already formatted for this page.
12685 .             tm1 "       Ignoring request FOOTNOTES_RUN_ON \\$1.
12686 .             return
12687 .          \}
12688 .       \}
12689 .       rr #RUN_ON
12690 .    \}
12691 .END
12692 \#
12693 \#
12694 .MAC RUNON_WARNING END
12695 .    if \\n[#FN_MARKER_STYLE]=1 \{\
12696 .       tm1 "[mom]: The footnote marker style active at line \\n(.c is STAR,
12697 .       tm1 "       which is incompatible with run-on footnotes.  Please change
12698 .       tm1 "       the footnote marker style to LINE.  Continuing to process,
12699 .       tm1 "       but ignoring request FOOTNOTES_RUN_ON.
12700 .       rr #RUN_ON
12701 .    \}
12702 .    if \\n[#FN_MARKER_STYLE]=2 \{\
12703 .       tm1 "[mom]: The footnote marker style active at line \\n(.c is NUMBER,
12704 .       tm1 "       which is incompatible with run-on footnotes.  Please change
12705 .       tm1 "       the footnote marker style to LINE.  Continuing to process,
12706 .       tm1 "       but ignoring request FOOTNOTES_RUN_ON.
12707 .       rr #RUN_ON
12708 .    \}
12709 .END
12710 \#
12711 \# FOOTNOTE
12712 \# --------
12713 \# *Arguments:
12714 \#   <none> | INDENT  L|LEFT|R|RIGHT|B|BOTH  <indent value> | <anything>
12715 \# *Function:
12716 \#   Begins collecting and diverting footnote text if no argument
12717 \#   given.  Otherwise, ends diversion FOOTNOTES, measures footnote
12718 \#   depth, and sets footnote trap.
12719 \# *Notes:
12720 \#   The input line preceding a footnote call MUST terminate with \c
12721 \#   or the footnote marker will be spaced away from the word it
12722 \#   should be joined to.
12723 \#
12724 \#   If FOOTNOTE is invoked with INDENT, the footnote will
12725 \#   be indented.  An indent style and an indent value must be given.
12726 \#   Subsequent footnotes will NOT be indented; INDENT must be given
12727 \#   for each footnote the user wants indented.
12728 \#
12729 .MAC FOOTNOTE END
12730 .    ie '\\$1'' \{\
12731 .       if \\n[#FN_MARKER_STYLE]=3 \{\
12732 .          if !\\n[#LINENUMBERS] \{\
12733 .             tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
12734 .             tm1 "       FOOTNOTE_MARKER_STYLE is LINE.
12735 .             ab Aborting on FOOTNOTE at line \\n(.c.
12736 .          \}
12737 .          if \\n[#FN_MARK]=0 \{ .nr #FN_MARK \\n(ln \}
12738 .          nr #FN_MARK_2 \\n(ln
12739 .          if '\\n(.z'P_QUOTE' \{\
12740 .             nr #FN_MARK -1
12741 .             nr #FN_MARK_2 -1
12742 .          \}
12743 .          if \\n[#IN_DIVER]=1 \{\
12744 .             if '\\n(.z'P_QUOTE' \{\
12745 .                if !\\n[#QUOTE_LN]=1 \{\
12746 .                   if !\\n[#SILENT_QUOTE_LN]=1 \{\
12747 .                      tm1 "[mom]: You have requested a line-numbered footnote inside a
12748 .                      tm1 "       QUOTE at line \\n(.c, but line-numbering has not been enabled
12749 .                      tm1 "       for QUOTES.  Printing footnote with label "0".
12750 .                      rr #FN_MARK
12751 .                      rr #FN_MARK_2
12752 .                   \}
12753 .                \}
12754 .             \}
12755 .             if '\\n(.z'B_QUOTE' \{\
12756 .                if !\\n[#BQUOTE_LN]=1 \{\
12757 .                   if !\\n[#SILENT_BQUOTE_LN]=1 \{\
12758 .                      tm1 "[mom]: You have requested a line-numbered footnote inside a
12759 .                      tm1 "       BLOCKQUOTE at line \\n(.c, but line-numbering has not been enabled
12760 .                      tm1 "       for BLOCKQUOTES.  Printing footnote with label "0".
12761 .                      rr #FN_MARK
12762 .                      rr #FN_MARK_2
12763 .                   \}
12764 .                \}
12765 .             \}
12766 .          \}
12767 .       \}
12768 .\" Begin processing footnotes that occur inside QUOTE, BLOCKQUOTE
12769 .\" or EPIGRAPH.
12770 .       if \\n[#IN_DIVER]=1 \{\
12771 .          nr #PAGE_POS \\n(nl+\\n(.d+\\n[#DOC_LEAD]
12772 .          nr #FOOTER_POS \\n[#PAGE_LENGTH]+(\\n[#VARIABLE_FOOTER_POS]-1)
12773 .          nr #SPACE_TO_FOOTER \\n[#FOOTER_POS]-\\n[#PAGE_POS]
12774 .\" Are we on a "defer" line?  If so, defer the text of the footnote.
12775 .          ie \\n[#SPACE_TO_FOOTER]=\\n[#DOC_LEAD]:\\n[#SPACE_TO_FOOTER]=0 \{\
12776 .             nr #DIVER_FN 2 \" treat like a normal deferred footnote
12777 .          \}
12778 .          el \{\
12779 .             nr #DIVER_FN 2 \" treat like a normal footnote
12780 .          \}
12781 .          if \\n[#PAGE_POS]>\\n[#FOOTER_POS] \{\
12782 .             nr #DIVER_FN 1 \" move this footnote
12783 .          \}
12784 .\" Test for situation where, because a final line of QUOTE, BLOCKQUOTE
12785 .\" or EPIGRAPH isn't yet adjusted at this point, the last word on the
12786 .\" line may *seem* to belong to the final line of the page, but will,
12787 .\" in fact, become the first word of the subsequent page.  In such
12788 .\" circumstances, we want the the footnote to be treated as a "moved"
12789 .\" diversion footnote.
12790 .          if \\n(.k>\\n(.l \{ .nr #DIVER_FN 1 \}
12791 .          if r#DIVER_FN \{\
12792 .             if !\\n[#DIVER_FN]=2 \{ .\\n+[#DONE_ONCE] \}
12793 .\" A footnote inside a diversion will become the 1st footnote on the
12794 .\" following page/column.
12795 .             if \\n[#DIVER_FN]=1 \{ .DIVER_FN_1_PRE \}
12796 .\" A footnote inside a diversion that should be treated like a
12797 .\" normal footnote (including defers.)
12798 .             if \\n[#DIVER_FN]=2 \{ .DIVER_FN_2_PRE \}
12799 .          \}
12800 .          nr #SAVED_FN_COUNT \\n[#FN_COUNT]+1
12801 .          nr #SAVED_FN_COUNT_FOR_COLS \\n[#FN_COUNT_FOR_COLS]+1
12802 .       \}
12803 .\" End processing footnotes that occur inside QUOTE, BLOCKQUOTE or
12804 .\" EPIGRAPH.
12805 .\"
12806 .\" Test for situation where, because a final line of running text
12807 .\" isn't yet adjusted at this point, the last word on the line may
12808 .\" *seem* to belong to the final line of the page, but will, in
12809 .\" fact, become the first word of the subsequent page.  In such
12810 .\" circumstances, we want the the footnote marker in running text to
12811 .\" be the correct one for the 1st footnote on the page.
12812 .       if \\n(.k>\\n(.l \{\
12813 .          if (\\n(nl+\\n[#DOC_LEAD])>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
12814 .             ie \\n[#COLUMNS]=1 \{\
12815 .                if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
12816 .                   if \\n[#FN_MARKER_STYLE]=1 \{\
12817 .                      nr #FN_COUNT_FOR_COLS 0 1
12818 .                   \}
12819 .                   if \\n[#FN_MARKER_STYLE]=2 \{\
12820 .                      if \\n[#RESET_FN_NUMBER] \{\
12821 .                         nr #FN_NUMBER 0 1
12822 .                         nr #NOT_YET_ADJUSTED 1
12823 .                      \}
12824 .                   \}
12825 .                \}
12826 .             \}
12827 .             el \{\
12828 .                if \\n[#FN_MARKER_STYLE]=1 \{\
12829 .                   nr #FN_COUNT 0 1
12830 .                \}
12831 .                if \\n[#FN_MARKER_STYLE]=2 \{\
12832 .                   if \\n[#RESET_FN_NUMBER] \{\
12833 .                      nr #FN_NUMBER 0 1
12834 .                      nr #NOT_YET_ADJUSTED 1
12835 .                   \}
12836 .                \}
12837 .             \}
12838 .          \}
12839 .       \}
12840 .       if \\n[#FN_MARKERS] \{\
12841 .\" Housekeeping
12842 .          if \\n[#CONDENSE] \{ \*[CONDX]\c \}
12843 .          if \\n[#EXTEND]   \{ \*[EXTX]\c  \}
12844 .          if \\n[#PRINT_STYLE]=1 \{\
12845 .             if \\n[#UNDERLINE_ON] \{\
12846 .                nr #UNDERLINE_WAS_ON 1
12847 .                UNDERLINE OFF
12848 .             \}
12849 .          \}
12850 .\" Add footnote markers to running text...
12851 .          if !\\n[#NO_FN_MARKER] \{\
12852 .\" ...but not if TERMINATE has not been called
12853 .             if !r#TERMINATE \{\
12854 .\" Marker style star/dagger/double-dagger
12855 .                if \\n[#FN_MARKER_STYLE]=1 \{\
12856 .\" Columnar docs either move col to col, or last col to next page.
12857 .\" They require their own special FN_COUNT because regular FN_COUNT
12858 .\" is used to figure out things like whether or not to put a rule
12859 .\" above footnotes (in addition to keeping track of the footnote
12860 .\" count in non-columnar docs).
12861 .                   ie \\n[#COLUMNS]=1 \{\
12862 .                      if \\n[#FN_COUNT_FOR_COLS]=0 \{ .PRINT \*[BU2]*\c            \}
12863 .                      if \\n[#FN_COUNT_FOR_COLS]=1 \{ .PRINT \*[BU1]\(dg\c         \}
12864 .                      if \\n[#FN_COUNT_FOR_COLS]=2 \{ .PRINT \(dd\c                \}
12865 .                      if \\n[#FN_COUNT_FOR_COLS]=3 \{ .PRINT \*[BU2]**\c           \}
12866 .                      if \\n[#FN_COUNT_FOR_COLS]=4 \{ .PRINT \*[BU1]\(dg\(dg\c     \}
12867 .                      if \\n[#FN_COUNT_FOR_COLS]=5 \{ .PRINT \(dd\(dd\c            \}
12868 .                      if \\n[#FN_COUNT_FOR_COLS]=6 \{ .PRINT \*[BU2]***\c          \}
12869 .                      if \\n[#FN_COUNT_FOR_COLS]=7 \{ .PRINT \*[BU1]\(dg\(dg\(dg\c \}
12870 .                      if \\n[#FN_COUNT_FOR_COLS]=8 \{ .PRINT \(dd\(dd\(dd\c        \}
12871 .                      if \\n[#FN_COUNT_FOR_COLS]=9 \{ .PRINT \*[BU2]****\c         \}
12872 .                   \}
12873 .                   el \{\
12874 .                      if \\n[#FN_COUNT]=0 \{ .PRINT \*[BU2]*\c            \}
12875 .                      if \\n[#FN_COUNT]=1 \{ .PRINT \*[BU1]\(dg\c         \}
12876 .                      if \\n[#FN_COUNT]=2 \{ .PRINT \(dd\c                \}
12877 .                      if \\n[#FN_COUNT]=3 \{ .PRINT \*[BU2]**\c           \}
12878 .                      if \\n[#FN_COUNT]=4 \{ .PRINT \*[BU1]\(dg\(dg\c     \}
12879 .                      if \\n[#FN_COUNT]=5 \{ .PRINT \(dd\(dd\c            \}
12880 .                      if \\n[#FN_COUNT]=6 \{ .PRINT \*[BU2]***\c          \}
12881 .                      if \\n[#FN_COUNT]=7 \{ .PRINT \*[BU1]\(dg\(dg\(dg\c \}
12882 .                      if \\n[#FN_COUNT]=8 \{ .PRINT \(dd\(dd\(dd\c        \}
12883 .                      if \\n[#FN_COUNT]=9 \{ .PRINT \*[BU2]****\c         \}
12884 .                   \}
12885 .                \}
12886 .\" Marker style superscript numbers
12887 .                if \\n[#FN_MARKER_STYLE]=2 \{\
12888 .                   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" \}
12889 .                   if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n+[#FN_NUMBER]\*[SUPX]\c" \}
12890 .                \}
12891 .             \}
12892 .          \}
12893 .       \}
12894 .\" More housekeeping
12895 .\"
12896 .\" #SPACE_REMAINING is the space left between where we are
12897 .\" on the page and the bottom margin.  It's used to determine whether
12898 .\" or not the footnote will overflow, and how many lines of
12899 .\" footnotes will fit on the page if some have to overflow.
12900 .       ie \\n[#DIVER_FN]=2 \{\
12901 .          nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-(\\n[#PAGE_POS])
12902 .       \}
12903 .       el \{\
12904 .          nr #SPACE_REMAINING (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n(nl
12905 .       \}
12906 .       if \\n[#FROM_DIVERT_FN]=1 \{\
12907 .          nr #SPACE_REMAINING \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]
12908 .          rr #FROM_DIVERT_FN
12909 .       \}
12910 .       nr #PP_STYLE_PREV \\n[#PP_STYLE]
12911 .       nr #PP_STYLE 2
12912 .       if \\n[#INDENT_FIRST_PARAS] \{ .nr #INDENT_FIRSTS 1 \}
12913 .       INDENT_FIRST_PARAS
12914 .\" Prepare FOOTNOTE to receive footnote text.
12915 .       ev FOOTNOTES
12916 .       ll \\n[#DOC_L_LENGTH]u
12917 .       ta \\n(.lu
12918 .       if \\n[#COLUMNS]=1 \{\
12919 .          ll \\n[#COL_L_LENGTH]u
12920 .          ta \\n(.lu
12921 .       \}
12922 .       if \\n[#FN_R_INDENT]  \{\
12923 .          ll -\\n[#FN_R_INDENT]u
12924 .          ta \\n(.lu
12925 .       \}
12926 .       if \\n[#FN_BR_INDENT] \{\
12927 .          ll -\\n[#FN_BR_INDENT]u
12928 .          ta \\n(.lu
12929 .       \}
12930 .       FAMILY   \\*[$FN_FAM]
12931 .       FT       \\*[$FN_FT]
12932 .       PT_SIZE  \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
12933 .       AUTOLEAD \\n[#FN_AUTOLEAD]
12934 .       QUAD     \\*[$FN_QUAD]
12935 .       if \\n[#PRINT_STYLE]=1 \{\
12936 .          TYPEWRITER
12937 .          ie \\n[#SINGLE_SPACE] \{ .vs \\n[#ORIGINAL_DOC_LEAD]u \}
12938 .          el \{ .vs \\n[#ORIGINAL_DOC_LEAD]u/2u \}
12939 .          QUAD LEFT
12940 .          HY OFF
12941 .       \}
12942 .       nr #FN_LEAD \\n[#LEAD]
12943 .\" Begin diversion FOOTNOTES or FN_IN_DIVER
12944 .       ie r#COUNTERS_RESET \{\
12945 .          ie \\n[#DONE_ONCE]=1 \{\
12946 .             ie \\n[#RUN_ON] \{\
12947 .                di RUNON_FN_IN_DIVER
12948 .                nr #RUNON_FN_IN_DIVER 1
12949 .             \}
12950 .             el \{ .di FN_IN_DIVER \}
12951 .          \}
12952 .          el \{\
12953 .             ie \\n[#RUN_ON] \{\
12954 .                da RUNON_FN_IN_DIVER
12955 .                nr #RUNON_FN_IN_DIVER 1
12956 .             \}
12957 .             el \{ .da FN_IN_DIVER \}
12958 .          \}
12959 .       \\n+[#DONE_ONCE]
12960 .       \}
12961 .       el \{\
12962 .          ie \\n[#RUN_ON] \{\
12963 .             da RUNON_FOOTNOTES
12964 .             nr #RUNON_FOOTNOTES 1
12965 .          \}
12966 .          el \{ .da FOOTNOTES \}
12967 .       \}
12968 .       if \\n[#FOOTNOTE_COLOR]=1 \{\
12969 .          TRAP OFF
12970 .          nf
12971 \m[\\*[$FOOTNOTE_COLOR]]
12972 .          EOL
12973 .          fi
12974 .          TRAP
12975 .       \}
12976 .       if \\n[#EPIGRAPH] \{ .nr #FN_FOR_EPI 1 \}
12977 .\" When a deferred footnote is also the 1st footnote on the page,
12978 .\" and when the page it's output on also has footnotes, some
12979 .\" whitespace is needed between the deferred footnote and the
12980 .\" first footnote belonging to the output page so that there's
12981 .\" no confusion when two stars (or two number 1s) appear in
12982 .\" footnotes...
12983 .       if \\n[#FN_DEFER_SPACE] \{\
12984 .\" ...but only add the extra space if TERMINATE has not been called
12985 .          if !r#TERMINATE \{\
12986 .\" ...and not if defer space has already been added
12987 .             if !\\n[#DEFER_SPACE_ADDED] \{\
12988 .\" ...and not if the footnote count the last time we checked for
12989 .\" a defer situation inside a diversion is greater than 1.
12990 .                if !\\n[#SAVED_DIVER_FN_COUNT]>1 \{\
12991 .                   if \\n[#FN_MARKER_STYLE]=1 \{ .ALD 1v \}
12992 .                   if \\n[#RESET_FN_NUMBER] \{ .ALD 1v \}
12993 .                   nr #DEFER_SPACE_ADDED 1
12994 .                \}
12995 .             \}
12996 .          \}
12997 .          rr #FN_DEFER_SPACE
12998 .          rr #SAVED_DIVER_FN_COUNT
12999 .       \}
13000 .       if \\n[#DIVERTED]=3 \{\
13001 .          if \\n[#FN_COUNT]>0 \{\
13002 \!.           RLD 1v
13003 .          \}
13004 .       \}
13005 .\" Add footnote rule (or, if no rule, some whitespace).
13006 .\" N.B.- this line increments #FN_COUNT each and every time FOOTNOTE
13007 .\" is run.
13008 .       if \\n+[#FN_COUNT]=1 \{\
13009 .\" If a footnote is called in a diversion, and the footnote has to
13010 .\" be moved, don't put in the rule now (it's taken care of when
13011 .\" FN_IN_DIVER is output into FOOTNOTE in PROCESS_FN_IN_DIVER).
13012 .          if !\\n[#DONT_RULE_ME]=1 \{\
13013 .             if !\\n[#FN_DEPTH] \{\
13014 .                if \\n[#PRINT_STYLE]=1 \{\
13015 .                   if !\\n[#RUN_ON] \{ .ALD \\n[#DOC_LEAD]u \}
13016 .                \}
13017 .                ie \\n[#FN_RULE]=1 \{\
13018 .                   if !\\n[#RUN_ON] \{ .PRINT_FOOTNOTE_RULE \}
13019 .                \}
13020 .                el \{ .ALD 1v \}
13021 .                nr #RULED 1
13022 .             \}
13023 .          \}
13024 .       \}
13025 .       rr #DONT_RULE_ME
13026 .\" Add footnote markers to footnote text...
13027 .       ie \\n[#FN_MARKERS] \{\
13028 .          if \\n[#FN_SPACE]>0 \{\
13029 .             if \\n[#FN_COUNT]>0 \{\
13030 .                ALD \\n[#FN_SPACE]u
13031 .             \}
13032 .          \}
13033 .          if !\\n[#NO_FN_MARKER] \{\
13034 .\" ...but not if TERMINATE has been called.
13035 .             if !r#TERMINATE \{\
13036 .                if \\n[#REF]=1 \{\
13037 \!.                 in +\\*[$REF_FN_INDENT]
13038 \!.                 ti -\\*[$REF_FN_INDENT]
13039 .                \}
13040 .                if \\n[#FN_MARKER_STYLE]=1 \{\
13041 .                   ie \\n[#COLUMNS]=1 \{\
13042 .                      \\n+[#FN_COUNT_FOR_COLS]
13043 .                      if \\n[#FN_COUNT_FOR_COLS]=1  \{ .PRINT *\c            \}
13044 .                      if \\n[#FN_COUNT_FOR_COLS]=2  \{ .PRINT \(dg\c         \}
13045 .                      if \\n[#FN_COUNT_FOR_COLS]=3  \{ .PRINT \(dd\c         \}
13046 .                      if \\n[#FN_COUNT_FOR_COLS]=4  \{ .PRINT **\c           \}
13047 .                      if \\n[#FN_COUNT_FOR_COLS]=5  \{ .PRINT \(dg\(dg\c     \}
13048 .                      if \\n[#FN_COUNT_FOR_COLS]=6  \{ .PRINT \(dd\(dd\c     \}
13049 .                      if \\n[#FN_COUNT_FOR_COLS]=7  \{ .PRINT ***\c          \}
13050 .                      if \\n[#FN_COUNT_FOR_COLS]=8  \{ .PRINT \(dg\(dg\(dg\c \}
13051 .                      if \\n[#FN_COUNT_FOR_COLS]=9  \{ .PRINT \(dd\(dd\(dd\c \}
13052 .                      if \\n[#FN_COUNT_FOR_COLS]=10 \{ .PRINT ****\c         \}
13053 .                   \}
13054 .                   el \{\
13055 .                      if \\n[#FN_COUNT]=1  \{ .PRINT *\c            \}
13056 .                      if \\n[#FN_COUNT]=2  \{ .PRINT \(dg\c         \}
13057 .                      if \\n[#FN_COUNT]=3  \{ .PRINT \(dd\c         \}
13058 .                      if \\n[#FN_COUNT]=4  \{ .PRINT **\c           \}
13059 .                      if \\n[#FN_COUNT]=5  \{ .PRINT \(dg\(dg\c     \}
13060 .                      if \\n[#FN_COUNT]=6  \{ .PRINT \(dd\(dd\c     \}
13061 .                      if \\n[#FN_COUNT]=7  \{ .PRINT ***\c          \}
13062 .                      if \\n[#FN_COUNT]=8  \{ .PRINT \(dg\(dg\(dg\c \}
13063 .                      if \\n[#FN_COUNT]=9  \{ .PRINT \(dd\(dd\(dd\c \}
13064 .                      if \\n[#FN_COUNT]=10 \{ .PRINT ****\c         \}
13065 .                   \}
13066 .                \}
13067 .                if \\n[#FN_MARKER_STYLE]=2 \{\
13068 .                   if \\n[#COLUMNS]=1 \{\
13069 .                      \\n+[#FN_COUNT_FOR_COLS]
13070 .                   \}
13071 .                   if \\n[#NOT_YET_ADJUSTED]=1 \{\
13072 .                      nr #FN_NUMBER 1 1
13073 .                      rr #NOT_YET_ADJUSTED
13074 .                   \}
13075 .                   if \\n[#PRINT_STYLE]=1 \{ .PRINT "(\\n[#FN_NUMBER])\c" \}
13076 .                   if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n[#FN_NUMBER]\*[SUPX]\*[FU 2]\c" \}
13077 .                \}
13078 .             \}
13079 .          \}
13080 .       \}
13081 .       el \{\
13082 .\" Line-numbered footnotes handling
13083 .          if \\n[#FN_MARKER_STYLE]=3 \{\
13084 .             if \\n[#FN_SPACE]>0 \{\
13085 .                if !\\n[#RUN_ON]=1 \{\
13086 .                   if \\n[#FN_COUNT]>0 \{\
13087 .                      ALD \\n[#FN_SPACE]u
13088 .                   \}
13089 .                \}
13090 .             \}
13091 .             if \\n[#REF]=1 \{\
13092 .                if !\\n[#RUN_ON]=1 \{\
13093 \!.                 in +\\*[$REF_FN_INDENT]
13094 \!.                 ti -\\*[$REF_FN_INDENT]
13095 .                \}
13096 .             \}
13097 .             ie \\n[#FN_LN_BRACKETS]=1 \{\
13098 .                ds $FN_LINENUMBER \v'-.085m'\\*[$FN_OPEN_BRACKET]\v'.085m'
13099 .                ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \{\
13100 .                   as $FN_LINENUMBER \\n[#FN_MARK]\v'-.085m'\\*[$FN_CLOSE_BRACKET]\v'.085m' \"
13101 .                \}
13102 .                el \{\
13103 .                   as $FN_LINENUMBER \\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\v'-.085m'\\*[$FN_CLOSE_BRACKET]\v'.085m' \"
13104 .                \}
13105 .             \}
13106 .             el \{\
13107 .                ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \{\
13108 .                   ds $FN_LINENUMBER \\n[#FN_MARK]\\*[$FN_LN_SEP]
13109 .                \}
13110 .                el \{\
13111 .                   ds $FN_LINENUMBER \\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\\*[$FN_LN_SEP]
13112 .                \}
13113 .             \}
13114 .             if !\\n[#NO_FN_MARKER] \{\
13115 .                PRINT \\*[$FN_LINENUMBER]\c
13116 .             \}
13117 .             rm $FN_LINENUMBER
13118 .             nr #FN_MARK 0
13119 .          \}
13120 .       \}
13121 .    \}
13122 .    el \{\
13123 .\" If INDENT arg is passed to FOOTNOTE, calculate the indent...
13124 .       ie '\\$1'INDENT' \{\
13125 .          ev FOOTNOTES
13126 .          if '\\$2'L'     \{ .in (\\$3)  \}
13127 .          if '\\$2'LEFT'  \{ .in (\\$3)  \}
13128 .          if '\\$2'R'     \{ .nr #FN_R_INDENT (\\$3) \}
13129 .          if '\\$2'RIGHT' \{ .nr #FN_R_INDENT (\\$3) \}
13130 .          if '\\$2'B' \{\
13131 .             nr #FN_BL_INDENT (\\$3)
13132 .             ie '\\$4'' \{ .nr #FN_BR_INDENT \\n[#FN_BL_INDENT] \}
13133 .             el \{ .nr #FN_BR_INDENT (\\$4) \}
13134 .             in \\n[#FN_BL_INDENT]u
13135 .          \}
13136 .          if '\\$2'BOTH' \{\
13137 .             nr #FN_BL_INDENT (\\$3)
13138 .             ie '\\$4'' \{ .nr #FN_BR_INDENT \\n[#FN_BL_INDENT] \}
13139 .             el \{ .nr #FN_BR_INDENT (\\$4) \}
13140 .             in \\n[#FN_BL_INDENT]u
13141 .          \}
13142 .          ev
13143 .\" ...then re-run FOOTNOTE without an argument.
13144 .          FOOTNOTE
13145 .       \}
13146 .       el \{\
13147 .          br
13148 .\" Add "defer space" if the previously diverted footnote was the
13149 .\" 1st footnote proper to its page (i.e. it looks like a deferred
13150 .\" footnote but it's really an overflow).
13151 .          if \\n[#DIVERTED] \{\
13152 .             if \\n[#PREV_FN_DEFERRED]=1 \{\
13153 .                if \\n[#FN_MARKER_STYLE]=1 \{ .ALD \\n[#FN_LEAD]u \}
13154 .                if \\n[#RESET_FN_NUMBER] \{ .ALD \\n[#FN_LEAD]u \}
13155 .                nr #PREV_FN_DEFERRED 2
13156 .             \}
13157 .          \}
13158 .          if \\n[#REF]=1 \{\
13159 \!.           in
13160 .          \}
13161 .\" Terminate FOOTNOTES or FN_IN_DIVER diversion
13162 .          di
13163 .          HY_SET 1 \\n[#DIVERSIONS_HY_MARGIN]u (\\n[#PT_SIZE]u/1000u/8u)p
13164 .          hy 14
13165 .\" More housekeeping
13166 .\" Turn off indent possibly set by FOOTNOTE INDENT
13167 .          in 0
13168 .\" Restore sentence spacing
13169 .          if \\n[#PRINT_STYLE]=2 \{\
13170 .             if d$RESTORE_SS_VAR \{ .SS \\*[$RESTORE_SS_VAR] \}
13171 .             rm $RESTORE_SS_VAR
13172 .          \}
13173 .          if \\n[#PRINT_STYLE]=1 \{\
13174 .             if \\n[#UNDERLINE_WAS_ON] \{\
13175 .                UNDERLINE
13176 .                rr #UNDERLINE_WAS_ON
13177 .             \}
13178 .          \}
13179 .          ev
13180 .          rr #FN_R_INDENT
13181 .          rr #FN_BR_INDENT
13182 .          nr #PP_STYLE \\n[#PP_STYLE_PREV]
13183 .          if !\\n[#INDENT_FIRSTS] \{ .INDENT_FIRST_PARAS OFF \}
13184 .          rr #INDENT_FIRSTS
13185 .\" Calculate footnote depth, but not if #COUNTERS_RESET (created in
13186 .\" DIVER_FN_1_PRE) to instruct FOOTNOTES to skip this step for now
13187 .\" (it's taken care of when FN_IN_DIVER is output into FOOTNOTES in
13188 .\" PROCESS_FN_IN_DIVER).
13189 .          ie r#COUNTERS_RESET \{\
13190 .             rr #COUNTERS_RESET
13191 .          \}
13192 .          el \{\
13193 .             nr #GET_DEPTH 1
13194 .\" If the footnote is the 1st on the page and it falls too close
13195 .\" to the bottom margin, defer the footnote text to the next page...
13196 .             if (\\n[#SPACE_REMAINING]-1)<=(\\n[#DOC_LEAD]) \{\
13197 .\" ...but not if PROCESS_FN_LEFTOVER has set #PREV_FN_DEFERRED to 1
13198 .                if !\\n[#PREV_FN_DEFERRED]=1 \{\
13199 .                   nr #FN_DEFER 1
13200 .                   nr #FN_DEPTH +\\n[#DIVER_DEPTH]
13201 .                   rr #GET_DEPTH
13202 .\" This is required so that the defer space clause can distinguish
13203 .\" a real #FN_COUNT=1 from one generated if FOOTNOTE is run inside
13204 .\" QUOTE, BLOCKQUOTE or EPIGRAPH
13205 .                   if \\n[#DIVER_FN]=2 \{\
13206 .                      nr #SAVED_DIVER_FN_COUNT \\n[#FN_COUNT]
13207 .                      rr #DIVER_FN
13208 .                   \}
13209 .                \}
13210 .             \}
13211 .\" Calculate the footnote depth.
13212 .             if \\n[#GET_DEPTH]=1 \{\
13213 .\" Save the previous footnote depth (for use when there will be
13214 .\" some overflowed footnote text).
13215 .                nr #SAVED_FN_DEPTH_1 \\n[#FN_DEPTH]
13216 .\" Add the depth of the current footnote to any already existent
13217 .\" footnotes.
13218 .                nr #FN_DEPTH +\\n[#DIVER_DEPTH]
13219 .\" Special handling for run-on footnotes
13220 .                if \\n[#RUN_ON]=1 \{\
13221 .                   if \\n[#RUNON_FOOTNOTES] \{\
13222 .                      unformat RUNON_FOOTNOTES
13223 .                   \}
13224 .                   if \\n[#RUNON_FN_IN_DIVER] \{\
13225 .                      unformat RUNON_FN_IN_DIVER
13226 .                   \}
13227 .                   ev FOOTNOTES
13228 .\" Recreate FOOTNOTES with rule followed by text of unformatted
13229 .\" run-on footnotes.
13230 .                   di FOOTNOTES
13231 .                   ie \\n[#FN_RULE]=0 \{ .RLD 1v \}
13232 .                   el \{\
13233 \v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\
13234 \D't \\n[#FN_RULE_WEIGHT]'\
13235 \h'-\\n[#FN_RULE_WEIGHT]u'\
13236 \D'l \\n[#FN_RULE_LENGTH]u 0'\
13237 \v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u'
13238 .                   \}
13239 .                   br
13240 .                   if \\n[#RUNON_FOOTNOTES] \{\
13241 .                      RUNON_FOOTNOTES
13242 .                      rr #RUNON_FOOTNOTES
13243 .                   \}
13244 .                   if \\n[#RUNON_FN_IN_DIVER] \{\
13245 .                      RUNON_FN_IN_DIVER
13246 .                      rr #RUNON_FN_IN_DIVER
13247 .                   \}
13248 .                   br
13249 .                   di
13250 .                   ev
13251 .                   nr #FN_DEPTH \\n[#DIVER_DEPTH]
13252 .                   nr #SAVED_VFP 0+\\n[#VARIABLE_FOOTER_POS]
13253 .                   nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
13254 .                \}
13255 .\" Save the new depth
13256 .                nr #SAVED_FN_DEPTH_2 \\n[#FN_DEPTH]
13257 .\" Signal that defer space should be added when PROCESS_FN_LEFTOVER
13258 .\" processes deferred footnotes.
13259 .                if \\n[#FN_DEFER] \{\
13260 .                   if \\n[#FN_COUNT]=2 \{\
13261 .                      ie \\n[#COLUMNS] \{\
13262 .                         if !\\n[#FROM_FOOTER] \{\
13263 .                            if \\n[#FN_DEFER]=1 \{ .nr #FN_DEFER_SPACE 1 \}
13264 .                            if \\n[#FN_COUNT_FOR_COLS]>=1 \{ .rr #FN_DEFER_SPACE \}
13265 .                            if \\n[#FROM_HEADER] \{ .nr #FN_DEFER_SPACE 1 \}
13266 .                         \}
13267 .                      \}
13268 .                      el \{\
13269 .                         nr #FN_DEFER_SPACE 1
13270 .                      \}
13271 .                   \}
13272 .                   rr #FN_DEFER
13273 .                \}
13274 .\" If the depth of the whole footnote won't fit in the space
13275 .\" between where we are on the page and the bottom margin, calculate
13276 .\" how much of it will fit.
13277 .                if \\n[#FN_DEPTH]>\\n[#SPACE_REMAINING] \{\
13278 .                   nr #FN_LINES 0 1
13279 .                   while (\\n+[#FN_LINES]*\\n[#FN_LEAD])<\\n[#SPACE_REMAINING] \{\
13280 .                      nr #FN_DEPTH (\\n[#FN_LINES]*\\n[#FN_LEAD])
13281 .\}
13282 .                   nr #VFP_DIFF \\n[#FN_DEPTH]-\\n[#SAVED_FN_DEPTH_1]
13283 .                   nr #OVERFLOW 1
13284 .\" Very occasionally, #VFP_DIFF, on a 1st footnote that isn't to
13285 .\" be deferred, comes up with a depth equal to exactly 1 line
13286 .\" of footnotes, i.e. enough room to print the rule and nothing
13287 .\" else.  The following tests for such a condition, and rather than
13288 .\" attempting to treat the footnote as an overflow, it tells mom to
13289 .\" treat it as a special kind of deferred footnote (#FN_DEFER 2).
13290 .                   if \\n[#SAVED_FN_DEPTH_1]=0 \{\
13291 .                      if \\n[#FN_DEPTH]=\\n[#FN_LEAD] \{\
13292 .                         nr #FN_DEFER 2
13293 .                         nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_2]
13294 .                         rr #OVERFLOW
13295 .                      \}
13296 .                   \}
13297 .                \}
13298 .\" Calculate VFP based on whether the footnote overflows, or is to
13299 .\" be treated normally.
13300 .                ie \\n[#OVERFLOW]=1 \{\
13301 .                   if \\n[#RUN_ON] \{\
13302 .                      rr #VARIABLE_FOOTER_POS
13303 .                      nr #VARIABLE_FOOTER_POS \\n[#SAVED_VFP]
13304 .                   \}
13305 .                   ie \\n[#FN_COUNT]=1 \{\
13306 .                      ie \\n[#RULED]=1 \{\
13307 .                         ie \\n[#COLUMNS]=1 \{\
13308 .                            ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13309 .                               ie \\n[#FROM_FOOTER] \{\
13310 .                                  ie \\n[#FN_COUNT_FOR_COLS]>1 \{\
13311 .                                     nr #FN_DEPTH -\\n[#FN_DEPTH]
13312 .                                     if \\n[#DIVERTED]=1 \{ .nr #DIVERTED 3 \}
13313 .                                     if !\\n[#PREV_FN_DEFERRED]=1 \{\
13314 .                                        nr #FN_DEPTH -\\n[#VFP_DIFF]
13315 .                                     \}
13316 .                                  \}
13317 .                                  el \{\
13318 .                                     nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
13319 .                                     if \\n[#DIVERTED]=1 \{ .nr #DIVERTED 3 \}
13320 .                                  \}
13321 .                               \}
13322 .                               el \{\
13323 .                                  nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
13324 .                               \}
13325 .                            \}
13326 .                            el \{\
13327 .                               nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH])
13328 .                            \}
13329 .                         \}
13330 .                         el \{ .nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH]) \}
13331 .                      \}
13332 .                      el \{\
13333 .                         nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
13334 .                         if \\n[#DIVERTED]=1 \{ .nr #DIVERTED 3 \}
13335 .                         if !\\n[#PREV_FN_DEFERRED]=1 \{\
13336 .                            ie \\n[#COLUMNS]=1 \{\
13337 .                               if !\\n[#FROM_FOOTER] \{\
13338 .
13339 .                               \}
13340 .                            \}
13341 .                            el \{\
13342 .                               nr #FN_DEPTH -\\n[#VFP_DIFF]
13343 .                            \}
13344 .                         \}
13345 .                         if \\n[#DIVERTED]=3 \{\
13346 .                            if !\\n[#PREV_FN_DEFERRED] \{\
13347 .                               if !\\n[#FROM_FOOTER] \{\
13348 .                                  if \\n[#FN_COUNT]=1 \{\
13349 .                                     if !\\n[#VFP_DIFF] \{\
13350 .                                        if \\n[#FN_MARKER_STYLE]=1 \{\
13351 .                                           da FOOTNOTES
13352 \!.                                            ALD \\n[#FN_LEAD]u
13353 .                                           di
13354 .                                        \}
13355 .                                        if \\n[#RESET_FN_NUMBER] \{\
13356 .                                           da FOOTNOTES
13357 \!.                                            ALD \\n[#FN_LEAD]u
13358 .                                           di
13359 .                                        \}
13360 .                                     \}
13361 .                                  \}
13362 .                               \}
13363 .                            \}
13364 .                         \}
13365 .                      \}
13366 .\" Not sure what I was thinking with this next line.  As is, it
13367 .\" moves the already established VFP trap for footnote 1 higher up
13368 .\" the page, resulting in a VFP that's higher on the page than the
13369 .\" current page position.  Leaving it in anyway, commented out, in
13370 .\" case the logic and the conditions under which it should
13371 .\" apply reveal themselves.
13372 \#.                    nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
13373 .                      nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF]
13374 .                   \}
13375 .                   el \{\
13376 .                      nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
13377 .                      nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF]
13378 .                   \}
13379 .                   rr #OVERFLOW
13380 .                   rr #RULED
13381 .                \}
13382 .                el \{\
13383 .                   nr #VARIABLE_FOOTER_POS -\\n[#DIVER_DEPTH]
13384 .                   if \\n[#PREV_FN_DEFERRED]=1 \{\
13385 .                      if \\n[#DIVERTED] \{\
13386 .                         if !\\n[#FN_DEPTH]=\\n[#SAVED_FN_DEPTH_1] \{\
13387 .                            nr #FN_DEPTH +\\n[#FN_LEAD]
13388 .                            nr #VARIABLE_FOOTER_POS -\\n[#FN_LEAD]
13389 .                            rr #PREV_FN_DEFERRED
13390 .                         \}
13391 .                      \}
13392 .                   \}
13393 .                   if \\n[#FN_COUNT]>1 \{\
13394 .                      nr #NO_BACK_UP 1
13395 .                      rr #DIVERTED
13396 .                      rr #RULED
13397 .                   \}
13398 .                \}
13399 .             \}
13400 .          \}
13401 .          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
13402 .\" See VFP_CHECK for an explanation of the next lines.
13403 .\" The trap has to be removed, prior to setting it, each time
13404 .\" FOOTNOTE is run.
13405 .          if \\n[#PRINT_STYLE]=2 \{\
13406 .             ch VFP_CHECK
13407 .             wh \\n[#VARIABLE_FOOTER_POS]u-\\n[#DOC_LEAD]u VFP_CHECK
13408 .          \}
13409 .\" If we have a footnote whose text has to be deferred to the next
13410 .\" page, reset the FOOTER trap to its original location.
13411 .          if \\n[#FN_DEFER] \{\
13412 .             nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
13413 .             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
13414 .          \}
13415 .       \}
13416 .       nr #NO_FN_MARKER 0
13417 .    \}
13418 .    if \\n[#NUM_ARGS]=2 \{\
13419 .       if '\\$2'BREAK' \{ .BR \}
13420 .       if '\\$2'BR' \{ .BR \}
13421 .    \}
13422 .END
13423 \#
13424 \# Utility macros to manage footnotes that occur inside diversions
13425 \# ---------------------------------------------------------------
13426 \#
13427 \# There are some redundancies here; they're left in in case unforeseen
13428 \# footnote situations crop up in the future that might require
13429 \# manipulation of them.
13430 \#
13431 \# 1. Pre-footnote processing for footnotes in diversions
13432 \#
13433 \# a) A footnote inside a diversion will be moved entirely (marker
13434 \# in running text and text of footnote) to the next page/column.
13435 \#
13436 .MAC DIVER_FN_1_PRE END
13437 .    nr #RESET_FN_COUNTERS 1
13438 .    nr #COUNTERS_RESET 1
13439 .    if \\n[#DONE_ONCE]=1 \{\
13440 .       if \\n[#FN_DEFER] \{\
13441 .          if \\n[#SAVED_DIVER_FN_COUNT]=1 \{\
13442 .             ie \\n[#COLUMNS]=1 \{\
13443 .                if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_DEFER_SPACE 1 \}
13444 .             \}
13445 .             el \{\
13446 .                nr #FN_DEFER_SPACE 1
13447 .             \}
13448 .          \}
13449 .       \}
13450 .       if \\n[#FN_MARKER_STYLE]=1 \{\
13451 .          if \\n[#FN_COUNT]>0 \{ .nr #FN_COUNT 0 1 \}
13452 .          if \\n[#COLUMNS]=1 \{\
13453 .             if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13454 .                nr #FN_COUNT_FOR_COLS 0 1
13455 .             \}
13456 .          \}
13457 .       \}
13458 .       if \\n[#FN_MARKER_STYLE]=2 \{\
13459 .          if \\n[#RESET_FN_NUMBER]=1 \{\
13460 .             ie \\n[#COLUMNS]=1 \{\
13461 .                if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_NUMBER 0 1 \}
13462 .             \}
13463 .             el \{\
13464 .                nr #FN_NUMBER 0 1
13465 .             \}
13466 .          \}
13467 .       \}
13468 .    \}
13469 .END
13470 \#
13471 \# b) Treat as a normal footnote, including defers.
13472 \#
13473 .MAC DIVER_FN_2_PRE END
13474 .    nr #RESET_FN_COUNTERS 2
13475 .END
13476 \#
13477 \# 2. Post-footnote processing for footnotes in diversions
13478 \#
13479 \# Even when a footnote inside a diversion is treated as
13480 \# "normal," some manipulation of registers is required.  The
13481 \# macro is called in DO_QUOTE (i.e. at the termination of
13482 \# quotes and blockquotes) and in DO_EPIGRAPH.
13483 \#
13484 .MAC DIVER_FN_2_POST END
13485 .    if \\n[#DONE_ONCE]=1 \{\
13486 .       if \\n[#FN_MARKER_STYLE]=1 \{\
13487 .          if \\n[#FN_COUNT]=0 \{\
13488 .             nr #DONT_RULE_ME 1
13489 .          \}
13490 .          if \\n[#FN_COUNT]>0 \{\
13491 .             nr #FN_COUNT 0 1
13492 .          \}
13493 .          if \\n[#COLUMNS]=1 \{\
13494 .             if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_COUNT_FOR_COLS 0 1 \}
13495 .             if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13496 .             \}
13497 .          \}
13498 .       \}
13499 .       if \\n[#FN_MARKER_STYLE]=2 \{\
13500 .          if \\n[#FN_COUNT]=0 \{\
13501 .             nr #DONT_RULE_ME 1
13502 .          \}
13503 .          if \\n[#FN_COUNT]>0 \{\
13504 .             nr #FN_COUNT 0 1
13505 .          \}
13506 .          if \\n[#RESET_FN_NUMBER]=1 \{\
13507 .             ie \\n[#COLUMNS]=1 \{\
13508 .                if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_NUMBER 0 1 \}
13509 .             \}
13510 .             el \{\
13511 .                nr #FN_NUMBER 0 1
13512 .             \}
13513 .          \}
13514 .       \}
13515 .    \}
13516 .END
13517 \#
13518 \# The main macros that handle footnote processing.
13519 \# -----------------------------------------------
13520 \# Sometimes, #VARIABLE_FOOTER_POS sets FOOTER at a location that gives
13521 \# the impression another line of running text could fit on the page.
13522 \# VFP_CHECK is always set to the line just above the one where FOOTER
13523 \# will be sprung, and checks for this condition.  If it exists, FOOTER
13524 \# is set one line lower on the page, thus squeezing in an extra line
13525 \# of running text.  This is a judgment call on my part, but seems to
13526 \# work well.  If there are problems (e.g. footnotes really do look
13527 \# jammed), the user should probably adjust FOOTNOTE_AUTOLEAD and/or
13528 \# FOOTNOTE_RULE_ADJ.
13529 \# 
13530 \# The macro has to be run in its own environment, otherwise the first
13531 \# word of the last line before the footnotes gets chopped.
13532 \#
13533 .MAC VFP_CHECK END
13534 .    ev VFP_CHECK
13535 .\" The trap also has to be removed each time VFP_CHECK is run
13536 .    if \\n[#PRINT_STYLE]=2 \{\
13537 .       ch VFP_CHECK
13538 .       SIZESPECS
13539 .       ie !\\n[#IN_DIVER] \{ .nr #PAGE_POS \\n(nl \}
13540 .       el \{ .nr #PAGE_POS \\n(nl+\\n(.d+(\\n[#DOC_LEAD]) \}
13541 .       nr #FOOTER_POS \\n[#PAGE_LENGTH]+(\\n[#VARIABLE_FOOTER_POS])
13542 .       nr #SPACE_TO_FOOTER \\n[#FOOTER_POS]-\\n[#PAGE_POS]
13543 .       nr #FN_GAP \\n[#SPACE_TO_FOOTER]%\\n[#DOC_LEAD]
13544 .       if !\\n[#FN_GAP]<0 \{\
13545 .          if \\n[#FN_GAP]<\\n[#DOC_LEAD] \{\
13546 .             ie (\\n[#PAGE_POS]+(\\n[#FN_DEPTH]+\\n[#FN_GAP]))>(\\n[#VISUAL_B_MARGIN]) \{\
13547 .                nr #VARIABLE_FOOTER_POS 0+\\n[#VARIABLE_FOOTER_POS]
13548 .             \}
13549 .             el \{\
13550 .                ie \\n[#DOC_LEAD]-\\n[#FN_GAP]<\\n[#DESCENDER] \{\
13551 .                   nr #VARIABLE_FOOTER_POS +\\n[#DOC_LEAD]
13552 .                   ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
13553 .                \}
13554 .                el \{\
13555 .                   nr #VARIABLE_FOOTER_POS 0+\\n[#VARIABLE_FOOTER_POS]
13556 .                \}
13557 .             \}
13558 .          \}
13559 .       \}
13560 .    \}
13561 .    ev
13562 .END
13563 \#
13564 \# FN_OVERFLOW_TRAP starts off "underneath" FOOTER, but is revealed
13565 \# as #VARIABLE_FOOTER_POSITION changes the position of FOOTER.
13566 \# FN_OVERFLOW_TRAP simply starts diversion FN_OVERFLOW to "catch"
13567 \# the overflow.  The diversion is ended in FOOTER, immediately after
13568 \# FOOTER outputs the diversion, FOOTNOTES, before PROCESS_FN_LEFTOVER
13569 \# is run (either in HEADER, or in FOOTER if moving col to col).
13570 \#
13571 .MAC FN_OVERFLOW_TRAP END
13572 .    if \\n[#FN_COUNT] \{\
13573 .       di FN_OVERFLOW
13574 .       ie !\\n[#NO_BACK_UP]=1 \{\
13575 .          if \\n[#PREV_FN_DEFERRED] \{\
13576 .             ie \\n[#COLUMNS]=1 \{\
13577 .                if \\n[#FROM_FOOTER] \{\
13578 .                   if \\n[#PREV_FN_DEFERRED] \{\
13579 .                      if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13580 .                      rr #PREV_FN_DEFERRED
13581 .                      \}
13582 .                   \}
13583 .                \}
13584 .                if !\\n[#FROM_FOOTER] \{\
13585 .                   if !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13586 .                      if !\\n[#LAST_FN_COUNT_FOR_COLS]>1 \{\
13587 \!.                       RLD \\n[#FN_LEAD]u
13588 .                      \}
13589 .                   \}
13590 .                \}
13591 .             \}
13592 .             el \{\
13593 \!.              RLD \\n[#FN_LEAD]u
13594 .             \}
13595 .          \}
13596 .       \}
13597 .       el \{\
13598 .          rr #NO_BACK_UP
13599 .          rr #PREV_FN_DEFERRED
13600 .       \}
13601 .    \}
13602 .\" When #FROM_DIVERT_FN is 1, it signals to FOOTNOTE, when run from
13603 .\" within DIVERT_FN_LEFTOVER, to set #SPACE_REMAINING to the total
13604 .\" area allowable for running text.
13605 .    nr #FROM_DIVERT_FN 1
13606 .END
13607 \#
13608 \# PROCESS_FN_LEFTOVER is called at the top of HEADER, and in
13609 \# FOOTER if we're moving from one column to the next (i.e. after
13610 \# outputting FOOTNOTES).  It checks for whether we have a "deferred
13611 \# footnote" situation, and resets counters and number registers
13612 \# accordingly.  Lastly, if we have some footnote overflow, it calls
13613 \# DIVERT_FN_OVERFLOW.
13614 \#
13615 .MAC PROCESS_FN_LEFTOVER END
13616 .    if \\n[#PREV_FN_DEFERRED]=2 \{\
13617 .       if \\n[#FN_COUNT_AT_FOOTER]>1 \{ .rr #PREV_FN_DEFERRED \}
13618 .    \}
13619 .    if !\\n[#FN_DEFER] \{\
13620 .       nr #FN_COUNT 0 1
13621 .       nr #FN_DEPTH 0
13622 .       nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
13623 .    \}
13624 .    if r#FN_DEFER \{\
13625 .       if \\n[#FN_DEFER]=1 \{\
13626 .          nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
13627 .       \}
13628 .       if \\n[#FN_DEFER]=2 \{\
13629 .          nr #FN_DEPTH 0
13630 .          nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
13631 .       \}
13632 .    \}
13633 .    nr #SPACE_REMAINING 0
13634 .    ch FOOTER -\\n[#B_MARGIN]u
13635 .    if \\n[#FN_DEFER] \{\
13636 .       nr #NO_FN_MARKER 1
13637 .       FOOTNOTE
13638 .       nf
13639 .       FOOTNOTE OFF
13640 .       ie \\n[#COLUMNS]=1 \{\
13641 .          if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
13642 .             if !\\n[#FROM_FOOTER] \{\
13643 .                if \\n[#FN_COUNT_FOR_COLS]=1 \{ .nr #PREV_FN_DEFERRED 1 \}
13644 .             \}
13645 .          \}
13646 .       \}
13647 .       el \{ .nr #PREV_FN_DEFERRED 1 \}
13648 .    \}
13649 .    if !\\n[#FN_DEFER] \{\
13650 .       if \\n[#FN_OVERFLOW_DEPTH] \{\
13651 .          DIVERT_FN_LEFTOVER
13652 .       \}
13653 .    \}
13654 .    ie \\n[#COLUMNS]=1 \{\
13655 .       if \\n[#COL_NUM]>1 \{\
13656 .          if \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .nr #FN_COUNT 0 1 \}
13657 .       \}
13658 .    \}
13659 .    el \{ .nr #FN_COUNT 0 1 \}
13660 .    if \\n[#DIVER_FN]=2 \{ .rr #DIVER_FN \}
13661 .    rr #FROM_DIVERT_FN
13662 .END
13663 \#
13664 \# DIVERT_FN_LEFTOVER is called in PROCESS_FN_LEFTOVER (at
13665 \# the top of HEADER, and in FOOTER if we're moving from one column
13666 \# to the next).
13667 \#
13668 .MAC DIVERT_FN_LEFTOVER END
13669 .    nr #NO_FN_MARKER 1
13670 .    nr #DIVERTED 1
13671 .    FOOTNOTE
13672 .    nf
13673 .    FN_OVERFLOW
13674 .    FOOTNOTE OFF
13675 .    if \\n[#PREV_FN_DEFERRED] \{\
13676 .       nr #FN_DEPTH -\\n[#FN_LEAD]
13677 .       nr #VARIABLE_FOOTER_POS +\\n[#FN_LEAD]
13678 .       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
13679 .       if \\n[#PREV_FN_DEFERRED]=2 \{\
13680 .          nr #PREV_FN_DEFERRED 1
13681 .          rr #DIVERTED
13682 .       \}
13683 .    \}
13684 .    rr #FN_OVERFLOW_DEPTH
13685 .END
13686 \#
13687 \# This is a special macro to deal with footnotes that are set inside
13688 \# diversions (QUOTE, BLOCKQUOTE and EPIGRAPH).  It's called in HEADER
13689 \# (and in FOOTER, if we're moving from column to column), and comes
13690 \# after PROCESS_FOOTNOTE_LEFTOVER in those two macros.
13691 \#
13692 .MAC PROCESS_FN_IN_DIVER END
13693 .    nr #SPACE_REMAINING 0
13694 .    ch FOOTER -\\n[#B_MARGIN]u
13695 .    nr #NO_FN_MARKER 1
13696 .    if !\\n[#RESET_FN_COUNTERS]=2 \{\
13697 .       rr #RESET_FN_COUNTERS
13698 .    \}
13699 .    FOOTNOTE
13700 .    if \\n[#FN_OVERFLOW_DEPTH] \{ .nf \}
13701 .    ie dRUNON_FN_IN_DIVER \{\
13702 .       RUNON_FN_IN_DIVER
13703 .       rm RUNON_FN_IN_DIVER
13704 .    \}
13705 .    el \{\
13706 .       nf
13707 .       FN_IN_DIVER
13708 .    \}
13709 .    FOOTNOTE OFF
13710 .    rr #DIVER_FN
13711 .END
13712 \#
13713 \# ====================================================================
13714 \#
13715 \# +++ENDNOTES+++
13716 \#
13717 \# When endnotes are output, the spacing between the notes is always
13718 \# 1 extra linespace.  This can have bottom margin consequences.  If
13719 \# this doesn't bother you, don't worry about it.  If it does bother
13720 \# you, and you want to adjust the spacing between any two endnotes (as
13721 \# they're output), make the spacing adjustments (.ALD/.RLD) at the
13722 \# *end* of endnotes (i.e. just before .ENDNOTE OFF), not at the top.
13723 \# 
13724 \# Endnotes must be output manually with .ENDNOTES. This allows user
13725 \# the flexibility to output endnotes at the end of each collated
13726 \# document, or to output them at the end of the entire document.
13727 \#
13728 \# Control macros
13729 \# --------------
13730 \#
13731 \# ENDNOTE POINT SIZE
13732 \# ------------------
13733 \# *Argument:
13734 \#   <base point size for endnotes>
13735 \# *Function:
13736 \#   Creates or modifies register #EN_PS.
13737 \# *Notes:
13738 \#   Default is same as running text in body of document.
13739 \#
13740 \#   This size control macro differs from other size control macros
13741 \#   in that it sets an absolute point size, not a relative one.  This
13742 \#   is because a) endnotes always appear separate from the body of
13743 \#   a document and therefore don't need to be relative to the body
13744 \#   of the document, and b) there are quite a few elements of the
13745 \#   endnotes page(s) that need to be relative to the base point size
13746 \#   of that page.  If the base endnote point size were relative to
13747 \#   the body of the document (i.e. a _SIZE macro taking a +|- value)
13748 \#   getting the rest of the endnote elements sized properly could
13749 \#   become very confusing.
13750 \#
13751 .MAC ENDNOTE_PT_SIZE END
13752 .    nr #EN_PS (p;\\$1)
13753 .END
13754 \#
13755 \#
13756 \# ENDNOTE LEAD
13757 \# ------------
13758 \# *Argument:
13759 \#   <base leading to use in endnotes> [ ADJUST ]
13760 \# *Function:
13761 \#   Creates or modifies register #EN_LEAD.  Creates or removes
13762 \#   register #ADJ_EN_LEAD.  Stores arguments in strings if ENDNOTE_LEAD
13763 \#   set before START.
13764 \# *Notes:
13765 \#   Default is 14 points for TYPESET, adjusted; 24 for TYPEWRITE.
13766 \#
13767 .MAC ENDNOTE_LEAD END
13768 .    if !\\n[#OK_PROCESS_LEAD] \{\
13769 .       ds $EN_LEAD \\$1
13770 .       if !'\\$2'' \{\
13771 .           ds $ADJUST_EN_LEAD \\$2
13772 .       \}
13773 .       return
13774 .    \}
13775 .    rr #ADJ_EN_LEAD
13776 .    nr #EN_LEAD (p;\\$1)
13777 .    if '\\$2'ADJUST' \{\
13778 .       nr #ORIG_DOC_LEAD \\n[#DOC_LEAD]
13779 .       nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
13780 .       nr #ADJ_DOC_LEAD 1
13781 .       nr #ADJ_EN_LEAD 1
13782 .       nr #NO_TRAP_RESET 1
13783 .       DOC_LEAD \\n[#EN_LEAD]u ADJUST
13784 .       nr #EN_LEAD \\n[#DOC_LEAD]
13785 .       DOC_LEAD \\n[#ORIG_DOC_LEAD]u
13786 .       rr #NO_TRAP_RESET
13787 .       nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
13788 .       rr #ORIG_DOC_LEAD
13789 .    \}
13790 .END
13791 \#
13792 \#
13793 \# ENDNOTES_HDRFTR_CENTER
13794 \# ----------------------
13795 \# *Argument:
13796 \#   toggle
13797 \# *Function:
13798 \#   Creates or removes toggle register #EN_HDRFTR_CENTER, used to
13799 \#   determine whether mom should print a/the hdrftr center string
13800 \#   on the endnotes page.  Primarily to enable/disable printing of the
13801 \#   chapter name in hdrftrs when DOCTYPE CHAPTER.
13802 \# *Notes:
13803 \#   Default is OFF
13804 \#
13805 .MAC ENDNOTES_HDRFTR_CENTER END
13806 .    ie '\\$1'' \{ .nr #EN_HDRFTR_CENTER 1 \}
13807 .    el         \{ .rr #EN_HDRFTR_CENTER   \}
13808 .END
13809 \#
13810 \#
13811 \# ENDNOTE STRING
13812 \# --------------
13813 \# *Argument:
13814 \#   <title for endnotes page>
13815 \# *Function:
13816 \#   Creates or modifies string $EN_STRING.
13817 \# *Notes:
13818 \#   Default is "Endnotes"
13819 \#
13820 .MAC ENDNOTE_STRING END
13821 .    ds $EN_STRING \\$1
13822 .END
13823 \#
13824 \#
13825 .MAC ENDNOTE_STRING_ADVANCE END
13826 .    nr #EN_STRING_ADVANCE (\\$1)
13827 .END
13828 \#
13829 \#
13830 \# ENDNOTE STRING CAPS
13831 \# -------------------
13832 \# *Arguments:
13833 \#   <none> | <anything>
13834 \# *Function:
13835 \#   Turns capitalization of the endnotes pages title string
13836 \#   "Endnotes" on or off.
13837 \# *Notes:
13838 \#   Users may want the endnotes pages title string to be in caps,
13839 \#   but the toc entry for endnotes in lower case.  If the argument
13840 \#   to ENDNOTE_STRING is in lower case and ENDNOTE_STRING_CAPS is
13841 \#   turned on, this is exactly what will happen.
13842 \#
13843 \#   Default is on.
13844 \#
13845 .MAC ENDNOTE_STRING_CAPS END
13846 .   ie '\\$1'' \{ .nr #EN_STRING_CAPS 1 \}
13847 .   el \{ .rr #EN_STRING_CAPS \}
13848 .END
13849 \#
13850 \#
13851 \# ENDNOTE TITLE
13852 \# -------------
13853 \# *Argument:
13854 \#   <string that appears before the first endnote pertaining to any document>
13855 \# *Function:
13856 \#   Creates string $EN_TITLE.
13857 \# *Notes:
13858 \#   Default is the document title, or, if doc is a chapter, "Chapter #"
13859 \#
13860 .MAC ENDNOTE_TITLE END
13861 .    ds $EN_TITLE \\$1
13862 .END
13863 \#
13864 \#
13865 \# ENDNOTE MARKER STYLE
13866 \# --------------------
13867 \# *Arguments:
13868 \#   NUMBER | LINE
13869 \# *Function:
13870 \#   Sets register #EN_MARKER_STYLE, used in ENDNOTE to determine
13871 \#   the style of endnote markers (labels).
13872 \# *Notes:
13873 \#   1=NUMBER; 2=LINE.  LINE means "use output line numbers".
13874 \#   Default is NUMBER.
13875 \#
13876 .MAC ENDNOTE_MARKER_STYLE END
13877 .    if '\\$1'NUMBER' \{\
13878 .       nr #EN_MARKER_STYLE 1
13879 .    \}
13880 .    if '\\$1'LINE' \{\
13881 .       nr #EN_MARKER_STYLE 2
13882 .       if !\\n[#EN_LN_SEP] \{\
13883 .          if !\\n[#EN_LN_BRACKETS] \{ .ENDNOTE_LINENUMBER_BRACKETS SQUARE \}
13884 .       \}
13885 .    \}
13886 .END
13887 \#
13888 \#
13889 \# ENDNOTE LINENUMBER MARK
13890 \# -----------------------
13891 \# *Function:
13892 \#   This string, when called inline, stores the current output line
13893 \#   number in register #EN_MARK for use with ENDNOTE.
13894 \#
13895 .ds EN-MARK \R'#EN_MARK \En(ln'
13896 \#
13897 \#
13898 \# ENDNOTE LINENUMBER SEPARATOR
13899 \# ----------------------------
13900 \# *Argument:
13901 \#   <user-defined separator>
13902 \# *Function:
13903 \#   Stores user-defined separator (for use then
13904 \#   ENDNOTE_MARKER_STYLE is LINE) in string $EN_LN_SEP.  The
13905 \#   separator is intended to be used when the user wishes a
13906 \#   separator, rather than the choice of brackets offered by
13907 \#   ENDNOTE_LINENUMBER_BRACKETS.
13908 \#
13909 .MAC ENDNOTE_LINENUMBER_SEPARATOR END
13910 .    rr #EN_LN_BRACKETS
13911 .    nr #EN_LN_SEP 1
13912 .    ds $EN_LN_SEP "\\$1
13913 .END
13914 \#
13915 \#
13916 \# ENDNOTE LINENUMBER BRACKETS
13917 \# ---------------------------
13918 \# *Argument:
13919 \#   PARENS | SQUARE | BRACES or ( | [ | {
13920 \# *Function:
13921 \#   Sets register #EN_LN_BRACKETS to 1, and creates strings
13922 \#   $EN_OPEN_BRACKET and $EN_CLOSE_BRACKET according to the given argument.
13923 \#
13924 .MAC ENDNOTE_LINENUMBER_BRACKETS END
13925 .    rr #EN_LN_SEP
13926 .    nr #EN_LN_BRACKETS 1
13927 .    if '\\$1'PARENS' \{\
13928 .       ds $EN_OPEN_BRACKET (
13929 .       ds $EN_CLOSE_BRACKET )
13930 .    \}
13931 .    if '\\$1'(' \{\
13932 .       ds $EN_OPEN_BRACKET (
13933 .       ds $EN_CLOSE_BRACKET )
13934 .    \}
13935 .    if '\\$1'SQUARE' \{\
13936 .       ds $EN_OPEN_BRACKET [
13937 .       ds $EN_CLOSE_BRACKET ]
13938 .    \}
13939 .    if '\\$1'[' \{\
13940 .       ds $EN_OPEN_BRACKET [
13941 .       ds $EN_CLOSE_BRACKET ]
13942 .    \}
13943 .    if '\\$1'BRACES' \{\
13944 .       ds $EN_OPEN_BRACKET {
13945 .       ds $EN_CLOSE_BRACKET }
13946 .    \}
13947 .    if '\\$1'{' \{\
13948 .       ds $EN_OPEN_BRACKET {
13949 .       ds $EN_CLOSE_BRACKET }
13950 .    \}
13951 .END
13952 \#
13953 \#
13954 \# ENDNOTE LINENUMBER GAP
13955 \# ----------------------
13956 \# *Argument:
13957 \#   <space between line-number labels and endnotes text>
13958 \# *Function:
13959 \#   Defines string $EN_LN_GAP, used during printing of line-number
13960 \#   labels in ENDNOTE.
13961 \#
13962 .MAC ENDNOTE_LINENUMBER_GAP END
13963 .    ds $EN_LN_GAP \\$1
13964 .END
13965 \#
13966 \#
13967 \# ENDNOTE NUMBERS ALIGN RIGHT
13968 \# ---------------------------
13969 \# *Argument:
13970 \#   <max. number of digit placeholders that will appear in endnotes>
13971 \# *Function:
13972 \#   Toggles register #EN_NUMBERS_ALIGN_RIGHT on; creates register
13973 \#   #EN_NUMBER_PLACEHOLDERS.
13974 \# *Notes:
13975 \#   Default is for footnote numbers to be right aligned to 2 placeholders.
13976 \#
13977 .MAC ENDNOTE_NUMBERS_ALIGN_RIGHT END
13978 .    rr #EN_NUMBERS_ALIGN_LEFT
13979 .    nr #EN_NUMBERS_ALIGN_RIGHT 1
13980 .    nr #EN_NUMBER_PLACEHOLDERS \\$1
13981 .END
13982 \#
13983 \#
13984 \# ENDNOTE NUMBERS ALIGN LEFT
13985 \# --------------------------
13986 \# *Argument:
13987 \#   none
13988 \# *Function:
13989 \#   Toggles register #EN_NUMBERS_ALIGN_LEFT on.
13990 \# *Notes:
13991 \#   Default is for footnote numbers to be right aligned to 2 placeholders
13992 \#   (i.e. not left aligned).
13993 \#
13994 .MAC ENDNOTE_NUMBERS_ALIGN_LEFT END
13995 .    rr #EN_NUMBERS_ALIGN_RIGHT
13996 .    nr #EN_NUMBERS_ALIGN_LEFT 1
13997 .END
13998 \#
13999 \#
14000 \# ENDNOTE PARAGRAPH INDENT
14001 \# ------------------------
14002 \# *Argument:
14003 \#   <first line indent of paras subsequent to 1st in endnotes>
14004 \# *Function:
14005 \#   Creates register #EN_PP_INDENT for use in .PP.
14006 \# *Notes:
14007 \#   Requires a unit of measure.
14008 \#
14009 \#   Default is 1.5m for TYPESET; same indent as PARA_INDENT for TYPEWRITE.
14010 \#
14011 .MAC ENDNOTE_PARA_INDENT END
14012 .    nr #EN_PP_INDENT (\\$1)
14013 .END
14014 \#
14015 \#
14016 \# TURN OFF COLUMN MODE FOR ENDNOTES
14017 \# ---------------------------------
14018 \# *Argument:
14019 \#   <none> | <anything>
14020 \# *Function:
14021 \#   Creates or removes register #EN_NO_COLS
14022 \# *Notes:
14023 \#   Allows user to tell mom not to set endnotes in columnar
14024 \#   documents in columns.  Default is to set endnotes in columns.
14025 \#
14026 .MAC ENDNOTES_NO_COLUMNS END
14027 .    ie '\\$1'' \{ .nr #EN_NO_COLS 1 \}
14028 .    el \{ .rr #EN_NO_COLS \}
14029 .END
14030 \#
14031 \#
14032 \# NO FIRST PAGE NUMBER ON ENDNOTES FIRST PAGE
14033 \# -------------------------------------------
14034 \# *Argument:
14035 \#   <none> | <anything>
14036 \# *Function:
14037 \#   Creates or removes register #EN_NO_FIRST_PN
14038 \# *Notes:
14039 \#   For use if FOOTERS are on.  Tells ENDNOTES not to put a page
14040 \#   number on the first endnotes page.  Some users may want this.
14041 \#   Default is to print a page number at the top of the first
14042 \#   endnotes page when footers are on.
14043 \#
14044 .MAC ENDNOTES_NO_FIRST_PAGENUM END
14045 .    ie '\\$1'' \{ .nr #EN_NO_FIRST_PN 1 \}
14046 .    el \{ .rr #EN_NO_FIRST_PN \}
14047 .END
14048 \#
14049 \#
14050 \# PAGE HEADERS ON ENDNOTES PAGES
14051 \# ------------------------------
14052 \# *Argument:
14053 \#   <none> | ALL
14054 \# *Function:
14055 \#   Creates or removes register #EN_ALLOWS_HEADERS or
14056 \#   #EN_ALLOWS_HEADERS_ALL
14057 \# *Notes:
14058 \#   Whether ENDNOTES puts a page header at the top of endnotes
14059 \#   pages if page headers are used throughout the document.
14060 \#   Default is to insert the page headers, but not on the first
14061 \#   page.  If the optional argument ALL is given, ENDNOTES puts a
14062 \#   page header on the first page as well.
14063 \#
14064 .MAC ENDNOTES_ALLOWS_HEADERS END
14065 .    ie '\\$1'' \{ .nr #EN_ALLOWS_HEADERS 1 \}
14066 .    el \{\
14067 .       ie '\\$1'ALL' \{\
14068 .          nr #EN_ALLOWS_HEADERS 1
14069 .          nr #EN_ALLOWS_HEADERS_ALL 1
14070 .       \}
14071 .       el \{\
14072 .          nr #EN_ALLOWS_HEADERS 0
14073 .          nr #EN_ALLOWS_HEADERS_ALL 0
14074 .       \}
14075 .    \}
14076 .END
14077 \#
14078 \#
14079 \# ENDNOTES PAGES PAGE NUMBERING STYLE
14080 \# -----------------------------------
14081 \# *Argument:
14082 \#   DIGIT | ROMAN | roman | ALPHA | alpha
14083 \# *Function:
14084 \#   Creates or modifies $EN_PN_STYLE.
14085 \# *Notes:
14086 \#   Allows user to define what style should be used for endnotes
14087 \#   pages page numbering.  Arguments are the same as for
14088 \#   PAGENUM_STYLE.
14089 \#
14090 \#   Default is DIGIT.
14091 \#
14092 .MAC ENDNOTES_PAGENUM_STYLE END
14093 .    ds $EN_PN_STYLE \\$1
14094 .END
14095 \#
14096 \#
14097 \# FIRST PAGE NUMBER FOR ENDNOTES
14098 \# ------------------------------
14099 \# *Argument:
14100 \#   <page number that appears on page 1 of endnotes pages>
14101 \# *Function:
14102 \#   Creates or modifies string $EN_FIRST_PN
14103 \# *Notes:
14104 \#   To be used with caution, only if all endnotes
14105 \#   are to be output at once, i.e. not at the end of the separate
14106 \#   docs of a collated doc
14107 \#
14108 .MAC ENDNOTES_FIRST_PAGENUMBER END
14109 .    nr #EN_FIRST_PN \\$1
14110 .END
14111 \#
14112 \# SINGLESPACE ENDNOTES
14113 \# --------------------
14114 \# *Argument:
14115 \#   <none> | <anything>
14116 \# *Function:
14117 \#   Sets lead of endnotes pages in TYPEWRITE to 12 points,
14118 \#   adjusted.
14119 \# *Notes:
14120 \#   Default is to double-space endnotes pages.
14121 \#
14122 .MAC SINGLESPACE_ENDNOTES END
14123 .    if \\n[#PRINT_STYLE]=1 \{\
14124 .       ie \\n[#SINGLE_SPACE] \{\
14125 .          nr #EN_SINGLESPACE 1
14126 .          rr #IGNORE
14127 .          if \\n[#OK_PROCESS_LEAD] \{\
14128 .             ENDNOTE_LEAD 12 ADJUST
14129 .             nr #IGNORE 1
14130 .          \}
14131 .       \}
14132 .       el \{\
14133 .          ie '\\$1'' \{\
14134 .             nr #EN_SINGLESPACE 1
14135 .             rr #IGNORE
14136 .             if \\n[#OK_PROCESS_LEAD] \{\
14137 .                ENDNOTE_LEAD 12 ADJUST
14138 .                nr #IGNORE 1
14139 .             \}
14140 .          \}
14141 .          el \{\
14142 .             rr #EN_SINGLESPACE
14143 .             rr #IGNORE
14144 .             if \\n[#OK_PROCESS_LEAD] \{\
14145 .                ENDNOTE_LEAD 24 ADJUST
14146 .                nr #IGNORE 1
14147 .             \}
14148 .          \}
14149 .       \}
14150 .    \}
14151 .END
14152 \#
14153 \#
14154 \# ENDNOTE PARAGRAPH SPACE
14155 \# -----------------------
14156 \# *Argument:
14157 \#   toggle
14158 \# *Function:
14159 \#   Creates toggle register #EN_PP_SPACE for use in .PP.
14160 \# *Notes:
14161 \#   Like PARA_SPACE.  Default is not to space endnote paras.
14162 \#
14163 .MAC ENDNOTE_PARA_SPACE END
14164 .    ie '\\$1'' \{ .nr #EN_PP_SPACE 1 \}
14165 .    el \{ .rr #EN_PP_SPACE \}
14166 .END
14167 \#
14168 \#
14169 \# ENDNOTE
14170 \# -------
14171 \# *Argument:
14172 \#   toggle
14173 \# *Function:
14174 \#   Places superscript endnote number in text, then collects and
14175 \#   processes endnote in diversion END_NOTES.
14176 \# *Notes:
14177 \#   \c must be appended to the word immediately preceding .ENDNOTE
14178 \#   when ENDNOTE_MARKER_STYLE is NUMBER.
14179 \#
14180 .MAC ENDNOTE END
14181 .    ie '\\$1'' \{\
14182 .       nr #ENDNOTE 1
14183 .       if \\n[#EN_MARKER_STYLE]=1 \{\
14184 .          if \\n[#CONDENSE] \{ \*[CONDX]\c \}
14185 .          if \\n[#EXTEND]   \{ \*[EXTX]\c  \}
14186 .          if \\n[#PRINT_STYLE]=1 \{\
14187 .             if \\n[#UNDERLINE_ON] \{\
14188 .                nr #UNDERLINE_WAS_ON 1
14189 .                UNDERLINE OFF
14190 .             \}
14191 .             if \\n[#SLANT_ON] \{\
14192 .                 nr #SLANT_WAS_ON 1
14193 \*[SLANTX]\c
14194 .             \}
14195 .             PRINT "\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#EN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c"
14196 .          \}
14197 .          if \\n[#PRINT_STYLE]=2 \{\
14198 .             PRINT \*[SUP]\\n+[#EN_NUMBER]\*[SUPX]\c
14199 .          \}
14200 .       \}
14201 .       if \\n[#EN_MARKER_STYLE]=2 \{\
14202 .           ie r#EN_NUMBER \{ \\n+[#EN_NUMBER] \}
14203 .           el \{ .nr #EN_NUMBER 1 1 \}
14204 .          if !\\n[#LINENUMBERS] \{\
14205 .             tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
14206 .             tm1 "       ENDNOTE_MARKER_STYLE is LINE.
14207 .             ab Aborting on ENDNOTE at line \\n(.c.
14208 .          \}
14209 .          if \\n[#EN_MARK]=0 \{ .nr #EN_MARK \\n(ln \}
14210 .          nr #EN_MARK_2 \\n(ln
14211 .          if '\\n(.z'P_QUOTE' \{\
14212 .             nr #EN_MARK -1
14213 .             nr #EN_MARK_2 -1
14214 .          \}
14215 .       \}
14216 .       nr #PP_STYLE_PREV \\n[#PP_STYLE]
14217 .       nr #PP_STYLE 1
14218 .       if \\n[#INDENT_FIRST_PARAS] \{ .nr #INDENT_FIRSTS 1 \}
14219 .       INDENT_FIRST_PARAS
14220 .       ev EN
14221 .       da END_NOTES
14222 .       LL \\n[#DOC_L_LENGTH]u
14223 .       ta \\n(.lu
14224 .       if \\n[#COLUMNS] \{\
14225 .          ie \\n[#EN_NO_COLS] \{ .LL \\n[#DOC_L_LENGTH]u \}
14226 .          el \{ .LL \\n[#COL_L_LENGTH]u \}
14227 .          ta \\n(.lu
14228 .       \}
14229 .       vs \\n[#EN_LEAD]u
14230 .       if \\n[#EN_NUMBER]=1 \{\
14231 \!.        ne 3
14232 .          if \\n[#PRINT_STYLE]=1 \{\
14233 .             TYPEWRITER
14234 .          \}
14235 .          if \\n[#PRINT_STYLE]=2 \{\
14236 .             FAMILY  \\*[$EN_TITLE_FAM]
14237 .             FT      \\*[$EN_TITLE_FT]
14238 .             PT_SIZE \\n[#EN_PS]u\\*[$EN_TITLE_SIZE_CHANGE]
14239 .          \}
14240 .          sp
14241 .          if !'\\*[$EN_TITLE]'' \{\
14242 .             if '\\*[$EN_TITLE_QUAD]'L'      \{ .LEFT   \}
14243 .             if '\\*[$EN_TITLE_QUAD]'LEFT'   \{ .LEFT   \}
14244 .             if '\\*[$EN_TITLE_QUAD]'C'      \{ .CENTER \}
14245 .             if '\\*[$EN_TITLE_QUAD]'CENTER' \{ .CENTER \}
14246 .             if '\\*[$EN_TITLE_QUAD]'CENTRE' \{ .CENTER \}
14247 .             if '\\*[$EN_TITLE_QUAD]'R'      \{ .RIGHT  \}
14248 .             if '\\*[$EN_TITLE_QUAD]'RIGHT'  \{ .RIGHT  \}
14249 .             ie \\n[#EN_TITLE_UNDERLINE] \{\
14250 .                nr #FROM_EN_TITLE 1
14251 .                UNDERSCORE "\\*[$EN_TITLE]"
14252 .                rr #FROM_EN_TITLE
14253 .             \}
14254 .             el \{\
14255 .                PRINT "\\*[$EN_TITLE]"
14256 .             \}
14257 .          \}
14258 .       \}
14259 .       if \\n[#PRINT_STYLE]=1 \{\
14260 .          TYPEWRITER
14261 .          if \\n[#EN_NUMBER]=1 \{\
14262 .             if \\n[#SINGLE_SPACE]=1 \{ .sp \}
14263 .          \}
14264 .       \}
14265 .       if \\n[#PRINT_STYLE]=2 \{\
14266 .          if \\n[#EN_NUMBER]=1 \{\
14267 .             if !'\\*[$EN_TITLE]'' \{ .sp \}
14268 .          \}
14269 .          if \\n[#EN_MARKER_STYLE]=1 \{\
14270 .             FAMILY  \\*[$EN_NUMBER_FAM]
14271 .             FT      \\*[$EN_NUMBER_FT]
14272 .             PT_SIZE \\n[#EN_PS]u\\*[$EN_NUMBER_SIZE_CHANGE]
14273 .          \}
14274 .          if \\n[#EN_MARKER_STYLE]=2 \{\
14275 .             FAMILY  \\*[$EN_LN_FAM]
14276 .             FT      \\*[$EN_LN_FT]
14277 .             PT_SIZE \\n[#EN_PS]u\\*[$EN_LN_SIZE_CHANGE]
14278 .          \}
14279 .       \}
14280 .       if \\n[#EN_MARKER_STYLE]=2 \{\
14281 .          ENDNOTE_NUMBERS_ALIGN_LEFT
14282 .          ie \\n[#EN_LN_BRACKETS]=1 \{\
14283 .             ds $EN_LINENUMBER \v'-.085m'\\*[$EN_OPEN_BRACKET]\v'.085m'
14284 .             ie \\n[#EN_MARK_2]=\\n[#EN_MARK] \{\
14285 .                as $EN_LINENUMBER \\n[#EN_MARK]\v'-.085m'\\*[$EN_CLOSE_BRACKET]\v'.085m' \"
14286 .             \}
14287 .             el \{\
14288 .                as $EN_LINENUMBER \\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\v'-.085m'\\*[$EN_CLOSE_BRACKET]\v'.085m' \"
14289 .             \}
14290 .          \}
14291 .          el \{\
14292 .             ie \\n[#EN_MARK_2]=\\n[#EN_MARK] \{\
14293 .                ds $EN_LINENUMBER \\n[#EN_MARK]\\*[$EN_LN_SEP]
14294 .             \}
14295 .             el \{\
14296 .                ds $EN_LINENUMBER \\n[#EN_MARK]\v'-.1m'-\v'.1m'\\n[#EN_MARK_2]\\*[$EN_LN_SEP]
14297 .             \}
14298 .          \}
14299 .          nr #EN_MARK 0
14300 .       \}
14301 \!.     TRAP OFF
14302 .       nr #RESET_L_LENGTH \\n(.l
14303 .       ie \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
14304 .          nr #EN_NUMBER_L_LENGTH \w'\0'*\\n[#EN_NUMBER_PLACEHOLDERS]+\w'.'
14305 .          RIGHT
14306 .       \}
14307 .       el \{\
14308 .          nr #EN_NUMBER_L_LENGTH \w'\En[#EN_NUMBER].\0'
14309 .          LEFT
14310 .       \}
14311 .       if \\n[#EN_MARKER_STYLE]=2 \{\
14312 .          if !\\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
14313 .             nr #EN_NUMBER_L_LENGTH \w'\\*[$EN_LINENUMBER]'+\\*[$EN_LN_GAP]
14314 .             LEFT
14315 .          \}
14316 .       \}
14317 .       ll \\n[#EN_NUMBER_L_LENGTH]u
14318 .       if \\n[#EN_MARKER_STYLE]=1 \{\
14319 \En[#EN_NUMBER].
14320 .       \}
14321 .       if \\n[#EN_MARKER_STYLE]=2 \{\
14322 \\*[$EN_LINENUMBER]
14323 .          rm $EN_LINENUMBER
14324 .       \}
14325 .       EOL
14326 .       ll \\n[#RESET_L_LENGTH]u
14327 .       nr #EN_FIGURE_SPACE \w'\0.'
14328 .       ie \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
14329 .          in \\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_FIGURE_SPACE]u
14330 .       \}
14331 .       el \{\
14332 .          ti \\n[#EN_NUMBER_L_LENGTH]u
14333 .       \}
14334 .       nr #EN_TEXT_INDENT \\n(.i
14335 .       QUAD \\*[$EN_QUAD]
14336 \!.     TRAP
14337 .       if \\n[#PRINT_STYLE]=1 \{\
14338 .          TYPEWRITER
14339 .       \}
14340 .       if \\n[#PRINT_STYLE]=2 \{\
14341 .          FAMILY  \\*[$EN_FAM]
14342 .          FT      \\*[$EN_FT]
14343 .          PT_SIZE \\n[#EN_PS]u
14344 .       \}
14345 .       if \\n[#REF]=1 \{\
14346 .          ie !\\n[#EN_MARKER_STYLE]=2 \{\
14347 .             if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
14348 .                in \\*[$REF_EN_INDENT]
14349 .                ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u)
14350 .             \}
14351 .             if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
14352 \#.                in \\*[$REF_EN_INDENT]
14353 \#.                ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u-\\n[#EN_FIGURE_SPACE]u)
14354 \#.                in \\*[$REF_EN_INDENT]+\\n[#EN_NUMBER_L_LENGTH]u
14355 \#.                ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_FIGURE_SPACE]u)
14356 .                in +\\*[$REF_EN_INDENT]
14357 .                ti -\\*[$REF_EN_INDENT]
14358 .             \}
14359 .          \}
14360 .          el \{\
14361 .             if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
14362 .                in \\*[$REF_EN_INDENT]
14363 .                ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u)
14364 .             \}
14365 .          \}
14366 .       \}
14367 .    \}
14368 .    el \{\
14369 .       sp
14370 .       in 0
14371 .       if \\n[#EN_MARKER_STYLE]=2 \{\
14372 \!.        in 0
14373 .       \}
14374 .       di
14375 .\" Restore sentence spacing
14376 .       if \\n[#PRINT_STYLE]=2 \{\
14377 .          if d$RESTORE_SS_VAR \{ .SS \\*[$RESTORE_SS_VAR] \}
14378 .          rm $RESTORE_SS_VAR
14379 .       \}
14380 .       ev
14381 .       nr #PP_STYLE \\n[#PP_STYLE_PREV]
14382 .       if !\\n[#INDENT_FIRSTS] \{ .INDENT_FIRST_PARAS OFF \}
14383 .       rr #INDENT_FIRSTS
14384 .       rr #ENDNOTE
14385 .       if \\n[#PRINT_STYLE]=1 \{\
14386 .          if \\n[#UNDERLINE_WAS_ON] \{\
14387 .             rr #UNDERLINE_WAS_ON
14388 .             UNDERLINE
14389 .          \}
14390 .       \}
14391 .       if \\n[#SLANT_WAS_ON] \{\
14392 .          rr #SLANT_WAS_ON
14393 \*[SLANT]\c
14394 .       \}
14395 .    \}
14396 .    if \\n[#NUM_ARGS]=2 \{\
14397 .       if '\\$2'BREAK' \{ .BR \}
14398 .       if '\\$2'BR' \{ .BR \}
14399 .    \}
14400 .END
14401 \#
14402 \#
14403 \# ENDNOTES
14404 \# --------
14405 \# *Arguments:
14406 \#   none
14407 \# *Function:
14408 \#   Sets new document leading from #EN_LEAD, breaks to a new page,
14409 \#   sets up an endnotes page based on registers and strings associated
14410 \#   with endnotes, then outputs diversion END_NOTES.
14411 \#
14412 .MAC ENDNOTES END
14413 .    nr #ENDNOTES 1
14414 .    nr #EN_FIRST_PAGE 1
14415 .    nr #HEADER_STATE \\n[#HEADERS_ON]
14416 .    ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
14417 .    if \\n[#LINENUMBERS]=1 \{\
14418 .       NUMBER_LINES OFF
14419 .       nr #LINENUMBERS 2
14420 .    \}
14421 .    if \\n[#HEADERS_ON]=1 \{\
14422 .       if !\\n[#EN_ALLOWS_HEADERS_ALL] \{ .HEADERS OFF \}
14423 .    \}
14424 .    if \\n[#HEADER_STATE]=1 \{\
14425 .       ie \\n[#EN_HDRFTR_CENTER]=1 \{ . \}
14426 .       el \{ .rm $HDRFTR_CENTER  \}
14427 .    \}
14428 .    ie !\\n[#SUSPEND_PAGINATION] \{\
14429 .       if \\n[#PAGINATE]=1 \{\
14430 .          if \\n[#PAGE_NUM_V_POS]=1 \{\
14431 .             PAGENUM_STYLE \\*[$EN_PN_STYLE]
14432 .             if \\n[#EN_FIRST_PN] \{ .PAGENUMBER \\n[#EN_FIRST_PN]-1 \}
14433 .             if r#EN_NO_FIRST_PN \{ .nr #PAGINATE 0 \}
14434 .          \}
14435 .       \}
14436 .    \}
14437 .    el \{\
14438 .       ie \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 1 \}
14439 .       el \{ .nr #PAGINATE 0 \}
14440 .    \}
14441 .    if \\n[#FOOTERS_ON]=1 \{\
14442 .       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
14443 .    \}
14444 .    NEWPAGE
14445 .    if \\n[#FOOTERS_ON]=1 \{\
14446 .       ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
14447 .       rm $HDRFTR_CENTER_OLD
14448 .       rm $HDRFTR_CENTER_NEW
14449 .    \}
14450 .    ie !\\n[#SUSPEND_PAGINATION] \{\
14451 .       if \\n[#PAGE_NUM_V_POS]=1 \{\
14452 .          if r#EN_NO_FIRST_PN \{\
14453 .             if \\n[#PAGINATION_STATE]=1 \{\
14454 .                nr #PAGINATE 1
14455 .             \}
14456 .          \}
14457 .       \}
14458 .    \}
14459 .    el \{\
14460 .       if \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 0 \}
14461 .    \}
14462 .    rr #PAGINATION_STATE
14463 .    PAGENUM_STYLE \\*[$EN_PN_STYLE]
14464 .    if \\n[#EN_FIRST_PN] \{ .PAGENUMBER \\n[#EN_FIRST_PN] \}
14465 .    if \\n[#HEADER_STATE]=1 \{\
14466 .       if \\n[#EN_ALLOWS_HEADERS] \{ .HEADERS \}
14467 .    \}
14468 .\" Collect endnotes title string for TOC
14469 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
14470 .    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
14471 .    ds $TOC_TITLE_ITEM \\*[$EN_STRING]\\|
14472 .    ev TOC_EV
14473 .    da TOC_ENTRIES
14474 .    if \\n[#PRINT_STYLE]=1 \{\
14475 .       TYPEWRITER
14476 .    \}
14477 .    if \\n[#PRINT_STYLE]=2 \{\
14478 \!.     FAMILY  \\*[$TOC_TITLE_FAM]
14479 \!.     FT      \\*[$TOC_TITLE_FT]
14480 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
14481 .    \}
14482 \!.  TRAP OFF
14483 \!.  PAD_MARKER ^
14484 .    ie \\n[#PRINT_STYLE]=1 \{\
14485 \!.     PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]"
14486 .    \}
14487 .    el \{\
14488 \!.     PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]"
14489 .    \}
14490 \!.  PAD_MARKER #
14491 \!.  EOL
14492 \!.  ST 100 L
14493 \!.  ST 101 R
14494 .    if \\n[#PRINT_STYLE]=2 \{\
14495 \!.     FAMILY  \\*[$TOC_PN_FAM]
14496 \!.     FT      \\*[$TOC_PN_FT]
14497 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
14498 .    \}
14499 \!.  TAB 100
14500 \!.  PRINT \\*[LEADER]
14501 \!.  TN
14502 \!.  TRAP
14503 \!.  PRINT \\n[#TOC_ENTRY_PN]
14504 \!.  TQ
14505 .    di
14506 .    ev
14507 .\" End collection of endnotes title string for TOC
14508 .\" Process endnotes
14509 .    if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#EN_LEAD]u \}
14510 .    if \\n[#PRINT_STYLE]=2 \{\
14511 .       if \\n[#EN_NO_COLS] \{\
14512 .          if \\n[#COLUMNS] \{ .nr #COLUMNS_WERE_ON 1 \}
14513 .          nr #COLUMNS 0
14514 .       \}
14515 .       nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
14516 .       ie \\n[#ADJ_EN_LEAD] \{\
14517 .          nr #DOC_LEAD \\n[#EN_LEAD]
14518 .       \}
14519 .       el \{ .DOC_LEAD \\n[#EN_LEAD]u \}
14520 .    \}
14521 .    PRINT \&
14522 .    ie r#EN_STRING_ADVANCE \{ .sp |\\n[#EN_STRING_ADVANCE]u \}
14523 .    el \{ .sp |\\n[#T_MARGIN]u \}
14524 .    mk ec
14525 .    if \\n[#SLANT_ON] \{\
14526 \*[SLANTX]\c
14527 .    \}
14528 .    ev ENDNOTES
14529 .    if !'\\*[$EN_STRING]'' \{\
14530 .       if \\n[#PRINT_STYLE]=1 \{\
14531 .          TYPEWRITER
14532 .          vs \\n[#EN_LEAD]u
14533 .       \}
14534 .       if \\n[#PRINT_STYLE]=2 \{\
14535 .          LL \\n[#DOC_L_LENGTH]u
14536 .          ta \\n(.lu
14537 .          if \\n[#COLUMNS] \{\
14538 .             ie \\n[#EN_NO_COLS] \{ .LL \\n[#DOC_L_LENGTH]u \}
14539 .             el \{ .LL \\n[#COL_L_LENGTH]u \}
14540 .             ta \\n(.lu
14541 .          \}
14542 .          FAMILY  \\*[$EN_STRING_FAM]
14543 .          FT      \\*[$EN_STRING_FT]
14544 .          PT_SIZE \\n[#EN_PS]u\\*[$EN_STRING_SIZE_CHANGE]
14545 .          vs      \\n[#EN_LEAD]u
14546 .       \}
14547 .       if '\\*[$EN_STRING_QUAD]'L'      \{ .LEFT   \}
14548 .       if '\\*[$EN_STRING_QUAD]'LEFT'   \{ .LEFT   \}
14549 .       if '\\*[$EN_STRING_QUAD]'C'      \{ .CENTER \}
14550 .       if '\\*[$EN_STRING_QUAD]'CENTER' \{ .CENTER \}
14551 .       if '\\*[$EN_STRING_QUAD]'CENTRE' \{ .CENTER \}
14552 .       if '\\*[$EN_STRING_QUAD]'R'      \{ .RIGHT  \}
14553 .       if '\\*[$EN_STRING_QUAD]'RIGHT'  \{ .RIGHT  \}
14554 .       EOL
14555 .       if \\n[#EN_STRING_CAPS] \{ .CAPS \}
14556 .       ie \\n[#EN_STRING_UNDERLINE] \{\
14557 .          nr #FROM_EN_STRING 1
14558 .          ie \\n[#EN_STRING_UNDERLINE]=2 \{\
14559 .             UNDERSCORE2 \\*[$EN_UNDERLINE_GAP] \\*[$EN_RULE_GAP] "\\*[$EN_STRING]"
14560 .          \}
14561 .          el \{\
14562 .             UNDERSCORE "\\*[$EN_STRING]"
14563 .          \}
14564 .          rr #FROM_EN_STRING
14565 .       \}
14566 .       el \{\
14567 .          PRINT "\\*[$EN_STRING]
14568 .       \}
14569 .    \}
14570 .    CAPS OFF
14571 .    if \\n[#PRINT_STYLE]=1 \{\
14572 .       ie \\n[#SINGLE_SPACE]=1 \{\
14573 .          ALD \\n[#EN_LEAD]u*2u
14574 .       \}
14575 .       el \{\
14576 .          ie \\n[#EN_SINGLESPACE]=1 \{\
14577 .              ALD \\n[#EN_LEAD]u*2
14578 .          \}
14579 .          el \{\
14580 .
14581 .          \}
14582 .       \}
14583 .    \}
14584 .    if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#EN_LEAD]u \}
14585 .    QUAD \\*[$EN_QUAD]
14586 .    nf
14587 .    END_NOTES
14588 .    br
14589 .    ev
14590 .    rm END_NOTES
14591 .    if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#DOC_LEAD]u \}
14592 .    if \\n[#PRINT_STYLE]=2 \{\
14593 .       ie \\n[#ADJ_EN_LEAD] \{\
14594 .          nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
14595 .       \}
14596 .       el \{ .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u \}
14597 .       rr #RESTORE_DOC_LEAD
14598 .    \}
14599 .    if \\n[#COLUMNS_WERE_ON] \{ .nr #COLUMNS 1 \}
14600 .    if \\n[#HEADER_STATE]=1 \{ .HEADERS \}
14601 .    if \\n[#LINENUMBERS]=2 \{\
14602 .       NUMBER_LINES RESUME
14603 .       nr #LINENUMBERS 1
14604 .    \}
14605 .    rr #ENDNOTES
14606 .END
14607 \#
14608 \# ====================================================================
14609 \#
14610 \# +++BIBLIOGRAPHY+++
14611 \#
14612 \# Mom treats bibliographies and endnotes very similarly.  The chief
14613 \# difference is that endnotes are collected and formatted inside a
14614 \# diversion, while bibliographies are built "by hand."  ENDNOTES sets
14615 \# up the endnotes page and outputs the formatted diversion.
14616 \# BIBLIOGRAPHY sets up the bibliography page, then awaits refer
14617 \# commands.
14618 \# 
14619 \# All of the bibliography control macros have their exact
14620 \# counterparts in the endnotes control macros.  It was tempting to do
14621 \# fancy stuff with aliases to avoid the repetition, but for reasons
14622 \# of my own sanity, and for the benefit of anyone wanting to play
14623 \# around with the bibliography control macros, I decided to keep them
14624 \# separate.
14625 \# 
14626 \# Because the bibliography control macros all have endnotes
14627 \# equivalents, refer to the appropriate, similar endnote macro for
14628 \# Arguments, Function and Notes.
14629 \# Bibliography control macros
14630 \#
14631 .MAC BIBLIOGRAPHY_PT_SIZE END
14632 .    nr #BIB_PS (p;\\$1)
14633 .END
14634 \#
14635 .MAC BIBLIOGRAPHY_LEAD END
14636 .    if !\\n[#OK_PROCESS_LEAD] \{\
14637 .       ds $BIB_LEAD \\$1
14638 .       if !'\\$2'' \{\
14639 .           ds $ADJUST_BIB_LEAD \\$2
14640 .       \}
14641 .       return
14642 .    \}
14643 .    rr #ADJ_BIB_LEAD
14644 .    nr #BIB_LEAD (p;\\$1)
14645 .    if '\\$2'ADJUST' \{\
14646 .       nr #ORIG_DOC_LEAD \\n[#DOC_LEAD]
14647 .       nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
14648 .       nr #ADJ_DOC_LEAD 1
14649 .       nr #ADJ_BIB_LEAD 1
14650 .       nr #NO_TRAP_RESET 1
14651 .       DOC_LEAD \\n[#BIB_LEAD]u ADJUST
14652 .       nr #BIB_LEAD \\n[#DOC_LEAD]
14653 .       DOC_LEAD \\n[#ORIG_DOC_LEAD]u
14654 .       rr #NO_TRAP_RESET
14655 .       nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
14656 .       rr #ORIG_DOC_LEAD
14657 .    \}
14658 .END
14659 \#
14660 .MAC BIBLIOGRAPHY_HDRFTR_CENTER END
14661 .    ie '\\$1'' \{ .nr #BIB_HDRFTR_CENTER 1 \}
14662 .    el         \{ .rr #BIB_HDRFTR_CENTER   \}
14663 .END
14664 \#
14665 .MAC BIBLIOGRAPHY_STRING END
14666 .    ds $BIB_STRING \\$1
14667 .END
14668 \#
14669 .MAC BIBLIOGRAPHY_STRING_CAPS END
14670 .   ie '\\$1'' \{ .nr #BIB_STRING_CAPS 1 \}
14671 .   el \{ .rr #BIB_STRING_CAPS \}
14672 .END
14673 \#
14674 .MAC BIBLIOGRAPHY_NO_COLUMNS END
14675 .    ie '\\$1'' \{ .nr #BIB_NO_COLS 1 \}
14676 .    el \{ .rr #BIB_NO_COLS \}
14677 .END
14678 \#
14679 .MAC BIBLIOGRAPHY_NO_FIRST_PAGENUM END
14680 .    ie '\\$1'' \{ .nr #BIB_NO_FIRST_PN 1 \}
14681 .    el \{ .rr #BIB_NO_FIRST_PN \}
14682 .END
14683 \#
14684 .MAC BIBLIOGRAPHY_ALLOWS_HEADERS END
14685 .    ie '\\$1'' \{ .nr #BIB_ALLOWS_HEADERS 1 \}
14686 .    el \{\
14687 .       ie '\\$1'ALL' \{\
14688 .          nr #BIB_ALLOWS_HEADERS 1
14689 .          nr #BIB_ALLOWS_HEADERS_ALL 1
14690 .       \}
14691 .       el \{\
14692 .          rr #BIB_ALLOWS_HEADERS
14693 .          rr #BIB_ALLOWS_HEADERS_ALL
14694 .       \}
14695 .    \}
14696 .END
14697 \#
14698 .MAC BIBLIOGRAPHY_PAGENUM_STYLE END
14699 .    ds $BIB_PN_STYLE \\$1
14700 .END
14701 \#
14702 .MAC BIBLIOGRAPHY_FIRST_PAGENUMBER END
14703 .    nr #BIB_FIRST_PN \\$1
14704 .END
14705 \#
14706 .MAC SINGLESPACE_BIBLIOGRAPHY END
14707 .    if \\n[#PRINT_STYLE]=1 \{\
14708 .       ie \\n[#SINGLE_SPACE] \{\
14709 .          nr #BIB_SINGLESPACE 1
14710 .          rr #IGNORE
14711 .          if \\n[#OK_PROCESS_LEAD] \{\
14712 .             BIBLIOGRAPHY_LEAD 12 ADJUST
14713 .             nr #IGNORE 1
14714 .          \}
14715 .       \}
14716 .       el \{\
14717 .          ie '\\$1'' \{\
14718 .             nr #BIB_SINGLESPACE 1
14719 .             rr #IGNORE
14720 .             if \\n[#OK_PROCESS_LEAD] \{\
14721 .                BIBLIOGRAPHY_LEAD 12 ADJUST
14722 .                nr #IGNORE 1
14723 .             \}
14724 .          \}
14725 .          el \{\
14726 .             rr #BIB_SINGLESPACE
14727 .             rr #IGNORE
14728 .             if \\n[#OK_PROCESS_LEAD] \{\
14729 .                BIBLIOGRAPHY_LEAD 24 ADJUST
14730 .                nr #IGNORE 1
14731 .             \}
14732 .          \}
14733 .       \}
14734 .    \}
14735 .END
14736 \#
14737 \#
14738 \# Style for outputting collected bibliographic references
14739 \# -------------------------------------------------------
14740 \# *Argument:
14741 \#   LIST | PLAIN [ <list separator> ] [ <list prefix> ]
14742 \# *Function:
14743 \#   Sets #BIB_LIST to 1 for numbered list style, 0 for plain output
14744 \# *Notes:
14745 \#   Technically, user is supposed to enter PLAIN if s/he wants an
14746 \#   unumbered bibliography, but the el clause says "any arg but
14747 \#   LIST means unumbered."  Effectively, any arg but LIST produces
14748 \#   a "plain" bibliographic list.
14749 \#
14750 \#   The 2nd and 3rd args have the same options as the 2nd arg to LIST.
14751 \#
14752 .MAC BIBLIOGRAPHY_TYPE END
14753 .    ie '\\$1'LIST' \{\
14754 .       nr #BIB_LIST 1
14755 .       ie '\\$2'' \{\
14756 .          if '\\*[$BIB_LIST_SEPARATOR]'' .ds $BIB_LIST_SEPARATOR .
14757 .       \}
14758 .       el .ds $BIB_LIST_SEPARATOR \\$2
14759 .       ie '\\$3'' .ds $BIB_LIST_PREFIX
14760 .       el .ds $BIB_LIST_PREFIX \\$3
14761 .    \}
14762 .    el \{ .nr #BIB_LIST 0 \}
14763 .END
14764 \#
14765 \# Spacing between items in bibliographies
14766 \# ---------------------------------------
14767 \# *Argument:
14768 \#   <amount of space>
14769 \# *Function:
14770 \#   Gets value for #BIB_SPACE in units.
14771 \# *Notes:
14772 \#   Requires a unit of measure.
14773 \#
14774 .MAC BIBLIOGRAPHY_SPACING END
14775 .    ds $BIB_SPACE \\$1
14776 .    if \\n[#BIB_LEAD]=0 \{\
14777 .       nr #DEFER_BIB_SPACING 1
14778 .       return
14779 .    \}
14780 .    ds $EVAL_BIB_SPACE \\*[$BIB_SPACE]
14781 .    substring $EVAL_BIB_SPACE -1
14782 .    ie '\\*[$EVAL_BIB_SPACE]'v' \{\
14783 .       substring $BIB_SPACE 0 0
14784 .       nr #BIB_SPACE \\n[#BIB_LEAD]*\\*[$BIB_SPACE]
14785 .    \}
14786 .    el \{\
14787 .       nr #BIB_SPACE (\\$1)
14788 .    \}
14789 .END
14790 \#
14791 \# Set up bibliography page
14792 \# ------------------------
14793 \# *Function:
14794 \#   Sets up a new page, with title, ready to accept the output
14795 \#   of refer's $LIST$ or .R1 bibliography .R2
14796 \# *Notes:
14797 \#   Bibliography pages are set up almost identically to endnotes pages.
14798 \#
14799 .MAC BIBLIOGRAPHY END
14800 .    nr #BIBLIOGRAPHY 1
14801 .    nr #BIB_FIRST_PAGE 1
14802 .    nr #HEADER_STATE \\n[#HEADERS_ON]
14803 .    ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
14804 .    if \\n[#LINENUMBERS]=1 \{\
14805 .       NUMBER_LINES OFF
14806 .       nr #LINENUMBERS 2
14807 .    \}
14808 .    if \\n[#HEADERS_ON]=1 \{\
14809 .       if !\\n[#BIB_ALLOWS_HEADERS_ALL] \{ .HEADERS OFF \}
14810 .    \}
14811 .    if \\n[#HEADER_STATE]=1 \{\
14812 .       ie \\n[#BIB_HDRFTR_CENTER]=1 \{ . \}
14813 .       el \{ .rm $HDRFTR_CENTER  \}
14814 .    \}
14815 .    ie !\\n[#SUSPEND_PAGINATION] \{\
14816 .       if \\n[#PAGINATE]=1 \{\
14817 .          if \\n[#PAGE_NUM_V_POS]=1 \{\
14818 .             PAGENUM_STYLE \\*[$BIB_PN_STYLE]
14819 .             if \\n[#BIB_FIRST_PN] \{ .PAGENUMBER \\n[#BIB_FIRST_PN]-1 \}
14820 .             if r#BIB_NO_FIRST_PN \{ .nr #PAGINATE 0 \}
14821 .          \}
14822 .       \}
14823 .    \}
14824 .    el \{\
14825 .       ie \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 1 \}
14826 .       el \{ .nr #PAGINATE 0 \}
14827 .    \}
14828 .    if \\n[#FOOTERS_ON]=1 \{\
14829 .       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
14830 .    \}
14831 .    NEWPAGE
14832 .    if \\n[#FOOTERS_ON]=1 \{\
14833 .       ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
14834 .       rm $HDRFTR_CENTER_OLD
14835 .       rm $HDRFTR_CENTER_NEW
14836 .    \}
14837 .    ie !\\n[#SUSPEND_PAGINATION] \{\
14838 .       if \\n[#PAGE_NUM_V_POS]=1 \{\
14839 .          if r#BIB_NO_FIRST_PN \{\
14840 .             if \\n[#PAGINATION_STATE]=1 \{\
14841 .                nr #PAGINATE 1
14842 .             \}
14843 .          \}
14844 .       \}
14845 .    \}
14846 .    el \{\
14847 .       if \\n[#PAGE_NUM_V_POS]=2 \{ .nr #PAGINATE 0 \}
14848 .    \}
14849 .    rr #PAGINATION_STATE
14850 .    PAGENUM_STYLE \\*[$BIB_PN_STYLE]
14851 .    if \\n[#BIB_FIRST_PN] \{ .PAGENUMBER \\n[#BIB_FIRST_PN] \}
14852 .    if \\n[#HEADER_STATE]=1 \{\
14853 .       if \\n[#BIB_ALLOWS_HEADERS] \{ .HEADERS \}
14854 .    \}
14855 .\" Collect bibliography title string for TOC
14856 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
14857 .    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
14858 .    ds $TOC_TITLE_ITEM \\*[$BIB_STRING]\\|
14859 .    ev TOC_EV
14860 .    da TOC_ENTRIES
14861 .    if \\n[#PRINT_STYLE]=1 \{\
14862 .       TYPEWRITER
14863 .    \}
14864 .    if \\n[#PRINT_STYLE]=2 \{\
14865 \!.     FAMILY  \\*[$TOC_TITLE_FAM]
14866 \!.     FT      \\*[$TOC_TITLE_FT]
14867 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
14868 .    \}
14869 \!.  TRAP OFF
14870 .    ie \\n[#PRINT_STYLE]=1 \{\
14871 \!.     PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]"
14872 .    \}
14873 .    el \{\
14874 \!.     PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]"
14875 .    \}
14876 \!.  EOL
14877 \!.  ST 100 L
14878 \!.  ST 101 R
14879 .    if \\n[#PRINT_STYLE]=2 \{\
14880 \!.     FAMILY  \\*[$TOC_PN_FAM]
14881 \!.     FT      \\*[$TOC_PN_FT]
14882 \!.     PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
14883 .    \}
14884 \!.  TAB 100
14885 \!.  PRINT \\*[LEADER]
14886 \!.  TN
14887 \!.  TRAP
14888 \!.  PRINT \\n[#TOC_ENTRY_PN]
14889 \!.  TQ
14890 .    di
14891 .    ev
14892 .\" End collection of bibliography title string for TOC
14893 .\" Process bibliography
14894 .    if \\n[#PRINT_STYLE]=1 \{ .vs \\n[#BIB_LEAD]u \}
14895 .    if \\n[#PRINT_STYLE]=2 \{\
14896 .       if \\n[#BIB_NO_COLS] \{\
14897 .          if \\n[#COLUMNS] \{ .nr #COLUMNS_WERE_ON 1 \}
14898 .          nr #COLUMNS 0
14899 .       \}
14900 .       nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
14901 .       ie \\n[#ADJ_BIB_LEAD] \{\
14902 .          nr #DOC_LEAD \\n[#BIB_LEAD]
14903 .       \}
14904 .       el \{ .DOC_LEAD \\n[#BIB_LEAD]u \}
14905 .    \}
14906 .    PRINT \&
14907 .    ie r#BIB_TITLE_SPACE \{ .sp |\\n[#BIB_TITLE_SPACE]u \}
14908 .    el \{ .sp |\\n[#T_MARGIN]u \}
14909 .    mk ec
14910 .    if \\n[#SLANT_ON] \{\
14911 \*[SLANTX]\c
14912 .    \}
14913 .    if !'\\*[$BIB_STRING]'' \{\
14914 .       if \\n[#PRINT_STYLE]=1 \{\
14915 .          TYPEWRITER
14916 .          vs \\n[#BIB_LEAD]u
14917 .       \}
14918 .       if \\n[#PRINT_STYLE]=2 \{\
14919 .          LL \\n[#DOC_L_LENGTH]u
14920 .          ta \\n(.lu
14921 .          if \\n[#COLUMNS] \{\
14922 .             ie \\n[#BIB_NO_COLS] \{ .LL \\n[#DOC_L_LENGTH]u \}
14923 .             el \{ .LL \\n[#COL_L_LENGTH]u \}
14924 .             ta \\n(.lu
14925 .          \}
14926 .          FAMILY  \\*[$BIB_STRING_FAM]
14927 .          FT      \\*[$BIB_STRING_FT]
14928 .          PT_SIZE \\n[#BIB_PS]u\\*[$BIB_STRING_SIZE_CHANGE]
14929 .          vs      \\n[#BIB_LEAD]u
14930 .       \}
14931 .       if '\\*[$BIB_STRING_QUAD]'L'      \{ .LEFT   \}
14932 .       if '\\*[$BIB_STRING_QUAD]'LEFT'   \{ .LEFT   \}
14933 .       if '\\*[$BIB_STRING_QUAD]'C'      \{ .CENTER \}
14934 .       if '\\*[$BIB_STRING_QUAD]'CENTER' \{ .CENTER \}
14935 .       if '\\*[$BIB_STRING_QUAD]'CENTRE' \{ .CENTER \}
14936 .       if '\\*[$BIB_STRING_QUAD]'R'      \{ .RIGHT  \}
14937 .       if '\\*[$BIB_STRING_QUAD]'RIGHT'  \{ .RIGHT  \}
14938 .       EOL
14939 .       if \\n[#BIB_STRING_CAPS] \{ .CAPS \}
14940 .       ie \\n[#BIB_STRING_UNDERLINE] \{\
14941 .          nr #FROM_BIB_STRING 1
14942 .          ie \\n[#BIB_STRING_UNDERLINE]=2 \{\
14943 .             UNDERSCORE2 "\\*[$BIB_STRING]"
14944 .          \}
14945 .          el \{\
14946 .             UNDERSCORE "\\*[$BIB_STRING]"
14947 .          \}
14948 .          rr #FROM_BIB_STRING
14949 .       \}
14950 .       el \{\
14951 .          PRINT "\\*[$BIB_STRING]"
14952 .       \}
14953 .    \}
14954 .    CAPS OFF
14955 .    FAMILY \\*[$BIB_FAMILY]
14956 .    FT \\*[$BIB_FT]
14957 .    PT_SIZE -\\*[$BIB_STRING_SIZE_CHANGE]
14958 .    if \\n[#PRINT_STYLE]=1 \{\
14959 .       ie \\n[#SINGLE_SPACE]=1 \{\
14960 .          ALD \\n[#BIB_LEAD]*3u
14961 .       \}
14962 .       el \{\
14963 .          ie \\n[#BIB_SINGLESPACE]=1 \{\
14964 .             ALD \\n[#BIB_LEAD]u*3u
14965 .          \}
14966 .          el \{\
14967 .             ALD \\n[#BIB_LEAD]u
14968 .          \}
14969 .       \}
14970 .    \}
14971 .    if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#BIB_LEAD]u*2u \}
14972 .    QUAD \\*[$BIB_QUAD]
14973 .    if \\n[#PRINT_STYLE]=1 \{\
14974 .       ie \\n[#SINGLE_SPACE]=1 \{\
14975 .          vs \\n[#BIB_LEAD]u
14976 .       \}
14977 .       el \{\
14978 .          ie \\n[#BIB_SINGLESPACE]=1 \{\
14979 .             vs \\n[#BIB_LEAD]u
14980 .          \}
14981 .          el \{\
14982 .             vs \\n[#BIB_LEAD]u
14983 .          \}
14984 .       \}
14985 .    \}
14986 .    if \\n[#PRINT_STYLE]=2 \{\
14987 .       ie \\n[#ADJ_BIB_LEAD] \{\
14988 .          nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
14989 .       \}
14990 .       el \{ .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u \}
14991 .       rr #RESTORE_DOC_LEAD
14992 .    \}
14993 .    if \\n[#COLUMNS_WERE_ON] \{ .nr #COLUMNS 1 \}
14994 .    if \\n[#HEADER_STATE]=1 \{ .HEADERS \}
14995 .    rr #BIBLIOGRAPHY
14996 .    if \\n[#LINENUMBERS]=2 \{\
14997 .       NUMBER_LINES RESUME
14998 .       nr #LINENUMBERS 1
14999 .    \}
15000 .END
15001 \#
15002 \# ====================================================================
15003 \#
15004 \# +++TABLE OF CONTENTS+++
15005 \#
15006 \# Strings to allocate space for leaders and entry page numbers
15007 \#
15008 .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]
15009 .ds $TOC_PN_TYPEWRITE \\*[ST100]^\\*[ST100X]\\*[ST101]\\|\\h'\\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST101X]
15010 \#
15011 \# TOC ENTRIES PAGE NUMBERS PADDING
15012 \# --------------------------------
15013 \# *Argument:
15014 \#   <number of placeholders for toc entries page numbers>
15015 \# *Function:
15016 \#   Creates or modifies register #TOC_PN_PADDING.
15017 \# *Notes:
15018 \#   "Placeholders" is the maximum number of digits in a page
15019 \#   number numeral.
15020 \#
15021 \#   Default is 3.
15022 \#
15023 .MAC TOC_PADDING END
15024 .    nr #TOC_PN_PADDING \\$1
15025 .END
15026 \#
15027 \#
15028 \# PAGINATE TOC
15029 \# ------------
15030 \# *Argument:
15031 \#   <none> | <anything>
15032 \# *Function:
15033 \#   Creates or removes register #PAGINATE_TOC.
15034 \# *Notes:
15035 \#   Default is to paginate toc.
15036 \#
15037 .MAC PAGINATE_TOC END
15038 .    ie '\\$1'' \{ .nr #PAGINATE_TOC 1 \}
15039 .    el \{ .nr #PAGINATE_TOC 0 \}
15040 .END
15041 \#
15042 \#
15043 \# TOC POINT SIZE
15044 \# --------------
15045 \# *Argument:
15046 \#   <base point size for toc pages>
15047 \# *Function:
15048 \#   Creates or modifies register #TOC_PS.
15049 \# *Notes:
15050 \#   This size control macro differs from other size control macros
15051 \#   in that it sets an absolute point size, not a relative one.
15052 \#   See notes for ENDNOTE_PT_SIZE for explanation.  No unit of
15053 \#   measure required.
15054 \#
15055 \#   No unit of measure required (points assumed).  Default is 12.5
15056 \#   for TYPESET.
15057 \#
15058 .MAC TOC_PT_SIZE END
15059 .    nr #TOC_PS (p;\\$1)
15060 .END
15061 \#
15062 \#
15063 \# TOC LEADING
15064 \# -----------
15065 \# *Argument:
15066 \#   <leading for toc pages> [ADJUST]
15067 \# *Function:
15068 \#   Creates or modifies register #TOC_LEAD. If optional ADJUST
15069 \#   given, adjusts lead to fill page.  If #OK_PROCESS_LEAD doesn't
15070 \#   exist, stores arguments for when it's okay to run the macro.
15071 \# *Notes:
15072 \#   No unit of measure required (points assumed).
15073 \#
15074 \#   Default is same as DOC_LEAD.
15075 \#
15076 .MAC TOC_LEAD END
15077 .    if !\\n[#OK_PROCESS_LEAD] \{\
15078 .       ds $TOC_LEAD \\$1
15079 .       if !'\\$2'' \{\
15080 .           ds $ADJUST_TOC_LEAD \\$2
15081 .       \}
15082 .       return
15083 .    \}
15084 .    rr #ADJ_TOC_LEAD
15085 .    nr #TOC_LEAD (p;\\$1)
15086 .    if '\\$2'ADJUST' \{\
15087 .       nr #ORIG_DOC_LEAD \\n[#DOC_LEAD]
15088 .       nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
15089 .       nr #ADJ_DOC_LEAD 1
15090 .       nr #ADJ_TOC_LEAD 1
15091 .       nr #NO_TRAP_RESET 1
15092 .       DOC_LEAD \\n[#TOC_LEAD]u ADJUST
15093 .       nr #TOC_LEAD \\n[#DOC_LEAD]
15094 .       DOC_LEAD \\n[#ORIG_DOC_LEAD]u
15095 .       rr #NO_TRAP_RESET
15096 .       nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
15097 .       rr #ORIG_DOC_LEAD
15098 .    \}
15099 .END
15100 \#
15101 \#
15102 \# TOC PAGES PAGE-NUMBERING STYLE
15103 \# ------------------------------
15104 \# *Argument:
15105 \#   DIGIT | ROMAN | roman | ALPHA | alpha
15106 \# *Function:
15107 \#   Creates or modifies string $TOC_PN_STYLE
15108 \# *Notes:
15109 \#   Page numbering style for page numbers that appear in the
15110 \#   headers/footers of toc pages.  See notes for PAGENUM_STYLE.
15111 \#
15112 \#   Default is roman.
15113 \#
15114 .MAC TOC_PAGENUM_STYLE END
15115 .    ds $TOC_PN_STYLE \\$1
15116 .END
15117 \#
15118 \#
15119 \# TOC RECTO_VERSO SWITCH
15120 \# ----------------------
15121 \# *Argument:
15122 \#   <none> | <anything>
15123 \# *Function:
15124 \#   Creates or removes register #TOC_RV_SWITCH
15125 \# *Notes:
15126 \#   Allows switching of L/R margins if a doc is recto/verso and
15127 \#   the first toc page happens to fall the wrong way
15128 \#
15129 .MAC TOC_RV_SWITCH END
15130 .    ie '\\$1'' \{ .nr #TOC_RV_SWITCH 1 \}
15131 .    el \{ .rr #TOC_RV_SWITCH \}
15132 .END
15133 \#
15134 \# - for TOC "doc header" (i.e. "Contents")
15135 \#
15136 \# TOC HEADER STRING
15137 \# -----------------
15138 \# *Argument:
15139 \#   <string for "doc header" of first toc page>
15140 \# *Function:
15141 \#   Creates or modifies string $TOC_HEADER_STRING
15142 \# *Notes:
15143 \#   Default is "Contents".
15144 \#
15145 .MAC TOC_HEADER_STRING END
15146 .    ds $TOC_HEADER_STRING \\$1
15147 .END
15148 \#
15149 \# - for TOC entries page number numerals
15150 \#
15151 \# Control macros for toc doc titles, heads, subheads and paraheads
15152 \# ----------------------------------------------------------------
15153 \#
15154 \# All these control macros behave the same way, setting the family,
15155 \# font, point size and indent from the left margin of the different
15156 \# kinds of entries that can appear in the toc.  The way they
15157 \# operate is identical to all other _FAMILY, _FONT and _SIZE
15158 \# control macros.  _INDENT takes an absolute value.
15159 \# TOC_APPENDS_AUTHORS is unique in this section.
15160 \#
15161 \# - for title entries
15162 \#
15163 .MAC TOC_TITLE_INDENT END
15164 .    nr #TOC_TITLE_INDENT (\\$1)
15165 .END
15166 \#
15167 \#
15168 .MAC TOC_TITLE_ENTRY END
15169 .    nr #USER_SET_TITLE_ITEM 1
15170 .    ds $USER_SET_TITLE_ITEM \\$1
15171 .END
15172 \#
15173 \#
15174 \# APPEND AUTHOR(S) TO TOC DOC TITLE ENTRIES
15175 \# -----------------------------------------
15176 \# *Argument:
15177 \#   <none> | <name(s) of author(s) as they should appear in toc doc title entries>
15178 \# *Function:
15179 \#   Creates register #TOC_AUTHORS (to tell TOC to append authors
15180 \#   to toc doc title entries).  Optionally creates string
15181 \#   $TOC_AUTHORS.
15182 \# *Notes:
15183 \#   Normally, TOC does not append the author(s) to a toc doc title
15184 \#   entry.  This special macro instructs TOC to do so.
15185 \#
15186 \#   If user has multiple authors for each doc when collating,
15187 \#   TOC_APPENDS_AUTHOR "<string>" must be inserted somewhere between
15188 \#   COLLATE and START in each doc.  Otherwise, mom prints only the
15189 \#   first author given to AUTHOR.
15190 \#
15191 .MAC TOC_APPENDS_AUTHOR END
15192 .    nr #TOC_AUTHORS 1
15193 .    if !'\\$1'' \{\
15194 .       ds $TOC_AUTHORS \\$1
15195 .    \}
15196 .END
15197 \#
15198 \# - for head entries
15199 \#
15200 .MAC TOC_HEAD_INDENT END
15201 .    nr #TOC_HEAD_INDENT (\\$1)
15202 .END
15203 \#
15204 \# - for subhead entries
15205 \#
15206 .MAC TOC_SUBHEAD_INDENT END
15207 .    nr #TOC_SH_INDENT (\\$1)
15208 .END
15209 \#
15210 \# - for parahead entries
15211 \#
15212 .MAC TOC_PARAHEAD_INDENT END
15213 .    nr #TOC_PH_INDENT (\\$1)
15214 .END
15215 \#
15216 \#
15217 .MAC TOC END
15218 .    if \\n[#LINENUMBERS]=1 \{\
15219 .       NUMBER_LINES OFF
15220 .       nr #LINENUMBERS 2
15221 .    \}
15222 .    if !r#PAGINATE_TOC \{ .PAGINATE_TOC \}
15223 .    nr #TOC_FIRST_PAGE 1
15224 .    if \\n[#FINIS] \{\
15225 .       if \\n[#FOOTERS_WERE_ON] \{\
15226 .          FOOTERS \" Have to turn FOOTERS on for next bit to work, so we can't skip this step
15227 .       \}
15228 .    \}
15229 .    if \\n[#FOOTERS_ON]=1 \{\
15230 .       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
15231 .       ie \\n[#PAGINATE_TOC]=1 \{ .PAGINATE \}
15232 .       el \{ .PAGINATION OFF \}
15233 .    \}
15234 .    if \\n[#FOOTERS_WERE_ON] \{ .FOOTERS OFF \} \" But have to turn FOOTERS off again so they don't print when FINIS was called
15235 .    COLLATE
15236 .    if \\n[#FINIS] \{\
15237 .       if \\n[#FOOTERS_WERE_ON] \{ .FOOTERS \} \" Finally, turn footers on if they were on
15238 .       rr #FOOTERS_WERE_ON
15239 .       if \\n[#PAGINATION_WAS_ON] \{\
15240 .          nr #PAGINATE 1
15241 .          rr #PAGINATION_WAS_ON
15242 .       \}
15243 .       rr #FINIS
15244 .    \}
15245 .    ie \\n[#PAGINATE_TOC]=1 \{ .PAGINATE \}
15246 .    el \{ .PAGINATION OFF \}
15247 .    if \\n[#FOOTERS_ON]=1 \{\
15248 .       ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
15249 .       rm $HDRFTR_CENTER_OLD
15250 .       rm $HDRFTR_CENTER_NEW
15251 .    \}
15252 .    rr #COLLATED_DOC
15253 .    DOCHEADER OFF
15254 .    PAGENUMBER 1
15255 .    if \\n[#PRINT_STYLE]=1 \{\
15256 .       rr #IGNORE
15257 .       DOC_LEAD 24 ADJUST
15258 .       nr #IGNORE 1
15259 .    \}
15260 .    if \\n[#LINENUMBERS]=2 \{ .nr #LINENUMBERS 3 \}
15261 .    START
15262 .    PP
15263 .    nr #COLUMNS 0
15264 .    if \\n[#PRINT_STYLE]=2 \{\
15265 .       ie r#ADJ_TOC_LEAD \{\
15266 .          nr #NO_TRAP_RESET 1
15267 .          DOC_LEAD \\n[#TOC_LEAD]u ADJUST
15268 .          rr #NO_TRAP_RESET
15269 .       \}
15270 .       el \{ .DOC_LEAD \\n[#TOC_LEAD]u \}
15271 .    \}
15272 .    sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
15273 .    if \\n[#SLANT_ON] \{\
15274 \*[SLANTX]\c
15275 .    \}
15276 .    DOC_LINE_LENGTH \\n[#DOC_L_LENGTH]u
15277 .    QUAD \\*[$TOC_HEADER_QUAD]
15278 .    PAGENUM_STYLE \\*[$TOC_PN_STYLE]
15279 .    if \\n[#PRINT_STYLE]=1 \{\
15280 .       TYPEWRITER
15281 .    \}
15282 .    if \\n[#PRINT_STYLE]=2 \{\
15283 .       FAMILY  \\*[$TOC_HEADER_FAM]
15284 .       FT      \\*[$TOC_HEADER_FT]
15285 .       PT_SIZE \\n[#TOC_PS]u\\*[$TOC_HEADER_SIZE_CHANGE]
15286 .    \}
15287 .    ie \\n[#PRINT_STYLE]=1 \{\
15288 .       CAPS
15289 .       UNDERLINE
15290 .       PRINT "\\*[$TOC_HEADER_STRING]"
15291 .       UNDERLINE OFF
15292 .       CAPS      OFF
15293 .    \}
15294 .    el \{\
15295 .       PRINT "\\*[$TOC_HEADER_STRING]"
15296 .    \}
15297 .    LEFT
15298 .    SP
15299 .\" In collated docs, this bit inserts the first doc's title
15300 .\" underneath the TOC header, before the TOC_ENTRIES diversion
15301 .\" gets output.
15302 .    nf
15303 .    if d$FIRST_DOC_TITLE \{\
15304 .    nr #RESTORE_TOC_PN_PADDING \\n[#TOC_PN_PADDING]
15305 .    TOC_PADDING \\n[#FIRST_DOC_TOC_PN_PADDING]
15306 .       if \\n[#PRINT_STYLE]=2 \{\
15307 .          FAMILY  \\*[$TOC_TITLE_FAM]
15308 .          FT      \\*[$TOC_TITLE_FT]
15309 .          PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE]
15310 .       \}
15311 .       PAD_MARKER ^
15312 .       ie \\n[#PRINT_STYLE]=1 \{\
15313 .          PAD "\\*[$FIRST_DOC_TITLE]\\*[$TOC_PN_TYPEWRITE]"
15314 .       \}
15315 .       el \{\
15316 .          PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$FIRST_DOC_TITLE]\\*[$TOC_PN]"
15317 .       \}
15318 .       PAD_MARKER #
15319 .       EOL
15320 .       ST 100 L
15321 .       ST 101 R
15322 .       if \\n[#PRINT_STYLE]=2 \{\
15323 .          FAMILY  \\*[$TOC_PN_FAM]
15324 .          FT      \\*[$TOC_PN_FT]
15325 .          PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PN_SIZE_CHANGE]
15326 .       \}
15327 .       TAB 100
15328 .       PRINT \\*[LEADER]
15329 .       TN
15330 .       PRINT \\n[#FIRST_DOC_TITLE_PN]
15331 .       TQ
15332 .    \}
15333 .    TOC_PADDING \\n[#RESTORE_TOC_PN_PADDING]
15334 .    nf
15335 .    TOC_ENTRIES
15336 .    br
15337 .    rr #TOC
15338 .    if \\n[#LINENUMBERS]=3 \{\
15339 .       NUMBER_LINES RESUME
15340 .       nr #LINENUMBERS 1
15341 .       nn 1
15342 .    \}
15343 .END
15344 \#
15345 \# ====================================================================
15346 \#
15347 \# +++COLUMNS+++
15348 \#
15349 \# COLUMNS
15350 \# -------
15351 \# *Arguments:
15352 \#   <number of columns>  <width of gutters>
15353 \# *Function:
15354 \#   Creates registers associated with setting docs in columns.
15355 \#   Calculates column line lengths and offsets
15356 \# *Notes:
15357 \#   COLUMNS, if used, s/b the last macro invoked before START.
15358 \#
15359 .MAC COLUMNS END
15360 .    if \\n[#IGNORE_COLUMNS]=1 \{ .return \}
15361 .    nr #COLUMNS 1
15362 .    nr #NUM_COLS \\$1
15363 .    nr #GUTTER (\\$2)
15364 .    nr #COL_L_LENGTH \\n[#L_LENGTH]-(\\n[#GUTTER]*(\\n[#NUM_COLS]-1))/\\n[#NUM_COLS]
15365 .    nr #COL_TOTAL 0 \\n[#COL_L_LENGTH]+\\n[#GUTTER]
15366 .    nr #COL_NUM 0 1
15367 .    while !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
15368 .       nr #COL_\\n+[#COL_NUM]_L_MARGIN \\n[#L_MARGIN]+\\n[#COL_TOTAL]
15369 .       nr #COL_TOTAL \\n+[#COL_TOTAL]
15370 .\}
15371 .    if \\n[#NUM_COLS]=1 \{\
15372 .       if !\\n[#COLLATE]=1 \{ .MN_INIT \}
15373 .    \}
15374 .    rr #COL_TOTAL
15375 .    rr #COL_NUM
15376 .END
15377 \#
15378 \#
15379 \# NEXT COLUMN
15380 \# -----------
15381 \# *Arguments:
15382 \#   <none>
15383 \# *Function:
15384 \#   Breaks current column and moves to next column.
15385 \#   If current column is the last on the page, breaks
15386 \#   to a new page.
15387 \#
15388 .MAC COL_NEXT END
15389 .    if \\n[#COLUMNS] \{\
15390 .       nr #COL_NEXT 1
15391 .       ie '\\$0'COL_NEXT' \{ .br  \}
15392 .       el \{\
15393 .          brp
15394 .          RLD 1v
15395 .       \}
15396 .       ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
15397 .          bp
15398 .       \}
15399 .       el \{ .FOOTER \}
15400 .    \}
15401 .END
15402 \#
15403 \# ====================================================================
15404 \#
15405 \# +++LISTS+++
15406 \#
15407 \# LIST
15408 \# ----
15409 \# *Arguments:
15410 \#   [ BULLET | DASH | DIGIT | alpha | ALPHA | roman | ROMAN | USER ] [ <separator> | NONE ] [ <prefix> ] [ <anything> ]
15411 \# *Function:
15412 \#   Stores indent information in effect prior to invocation and
15413 \#   initializes a list with the supplied enumerator (and separator).
15414 \# *Notes:
15415 \#   Default enumerator is a bullet.
15416 \#
15417 \#   Enumerator *must* be supplied for every list that's to the
15418 \#   right of another list, every time, unless the default bullet is
15419 \#   desired.
15420 \#
15421 \#   <anything> moves back one list level intuitively, or exits lists
15422 \#   completely if the level in which it's invoked is the first.
15423 \#
15424 .MAC LIST END
15425 .    ds $1ST_LETTER \\$1
15426 .    substring $1ST_LETTER 0 0
15427 .    if '\\*[$1ST_LETTER]'r' .ds $1ST_LETTER R
15428 .    ie '\\*[$1ST_LETTER]'R' \{\
15429 .       ds $LAST_CHAR \\$1
15430 .       substring $LAST_CHAR -1
15431 .       if !\B'\\*[$LAST_CHAR]' \{\
15432 .          if !'\\$1'ROMAN' \{\
15433 .             LIST OFF
15434 .             return
15435 .          \}
15436 .          if !'\\$1'roman' \{\
15437 .             LIST OFF
15438 .             return
15439 .          \}
15440 .          tm1 "[mom]: You must append a number to the \\$1 argument to LIST at line \\n(.c.
15441 .          tm1 "       The number should be the total number of items in this list.
15442 .          tm1 "       See the documentation.
15443 .          ab Aborting LIST
15444 .       \}
15445 .       ds $ROMAN_WIDTH \\$1
15446 .          substring $ROMAN_WIDTH 1
15447 .       while !\B'\\*[$ROMAN_WIDTH]' \{\
15448 .          substring $ROMAN_WIDTH 1
15449 .\}
15450 .       length #ROMAN_LENGTH \\*[$ROMAN_WIDTH]
15451 .       ds $LIST_ARG_1 \\$1
15452 .       substring $LIST_ARG_1 0 -(\\n[#ROMAN_LENGTH]+1)
15453 .    \}
15454 .    el \{\
15455 .       ds $LIST_ARG_1 \\$1
15456 .    \}
15457 .    if !r#DEPTH \{\
15458 .       nr #STORED_HL_INDENT \\n[#HL_INDENT]
15459 .       nr #STORED_T_INDENT  \\n[#T_INDENT]
15460 .       nr #CURRENT_L_LENGTH \\n(.l
15461 .       nr #DEPTH 0 1
15462 .       if \\n[#INDENT_ACTIVE]=1 \{\
15463 .          if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
15464 .             nr #STORED_L_INDENT \\n[#L_INDENT]
15465 .             nr #RESTORE_PREV_INDENT 1
15466 .          \}
15467 .          if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
15468 .             nr #STORED_BL_INDENT \\n[#BL_INDENT]
15469 .             nr #STORED_BR_INDENT \\n[#BR_INDENT]
15470 .             IBX
15471 .             nr #ORIG_L_LENGTH \\n(.l
15472 .             IB
15473 .             nr #RESTORE_PREV_INDENT 2
15474 .          \}
15475 .          if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
15476 .             nr #STORED_R_INDENT \\n[#R_INDENT]
15477 .             IRX
15478 .             nr #ORIG_L_LENGTH \\n(.l
15479 .             IR
15480 .             nr #RESTORE_PREV_INDENT 3
15481 .             if \\n[#INDENT_LEFT_ACTIVE]=1 \{ .nr #RESTORE_PREV_INDENT 4 \}
15482 .          \}
15483 .       \}
15484 .    \}
15485 .    if \\n[#NUM_ARGS]=0 \{\
15486 .       nr #ARGS_TO_LIST 1 \" So default behaves as if LIST BULLET
15487 .       ds $ENUMERATOR\\n+[#DEPTH] \(bu
15488 .       ds $ENUMERATOR_TYPE\\n[#DEPTH] other
15489 .       ds $SEPARATOR
15490 .    \}
15491 .    if \\n[#NUM_ARGS]>0 \{\
15492 .       rr #ARGS_TO_LIST \" Clear this before processing arg 1.
15493 .       if '\\*[$LIST_ARG_1]'DASH'   \{\
15494 .          nr #ARGS_TO_LIST 1
15495 .          ds $ENUMERATOR\\n+[#DEPTH] \(en
15496 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
15497 .          ds $SEPARATOR\\n[#DEPTH]
15498 .       \}
15499 .       if '\\*[$LIST_ARG_1]'BULLET' \{\
15500 .          nr #ARGS_TO_LIST 1
15501 .          ds $ENUMERATOR\\n+[#DEPTH] \(bu
15502 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
15503 .          ds $SEPARATOR\\n[#DEPTH]
15504 .       \}
15505 .       if '\\*[$LIST_ARG_1]'DIGIT'  \{\
15506 .          nr #ARGS_TO_LIST 1
15507 .          nr #ENUMERATOR\\n+[#DEPTH] 0 1
15508 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
15509 .          ds $SEPARATOR\\n[#DEPTH] .
15510 .          ds $PREFIX\\n[#DEPTH]
15511 .          if \\n[#NUM_ARGS]>=2 \{\
15512 .             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
15513 .             el             .ds $SEPARATOR\\n[#DEPTH] \\$2
15514 .             if \\n[#NUM_ARGS]=3 \{\
15515 .                ds $PREFIX\\n[#DEPTH] \\$3
15516 .             \}
15517 .          \}
15518 .       \}
15519 .       if '\\*[$LIST_ARG_1]'alpha'  \{\
15520 .          nr #ARGS_TO_LIST 1
15521 .          nr #ENUMERATOR\\n+[#DEPTH] 0 1
15522 .          af #ENUMERATOR\\n[#DEPTH] a
15523 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
15524 .          ds $SEPARATOR\\n[#DEPTH] )
15525 .          ds $PREFIX\\n[#DEPTH]
15526 .          if \\n[#NUM_ARGS]>=2 \{\
15527 .             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
15528 .             el             .ds $SEPARATOR\\n[#DEPTH] \\$2
15529 .             if \\n[#NUM_ARGS]=3 \{\
15530 .                ds $PREFIX\\n[#DEPTH] \\$3
15531 .             \}
15532 .          \}
15533 .       \}
15534 .       if '\\*[$LIST_ARG_1]'ALPHA'  \{\
15535 .          nr #ARGS_TO_LIST 1
15536 .          nr #ENUMERATOR\\n+[#DEPTH] 0 1
15537 .          af #ENUMERATOR\\n[#DEPTH] A
15538 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] register
15539 .          ds $SEPARATOR\\n[#DEPTH] )
15540 .          ds $PREFIX\\n[#DEPTH]
15541 .          if \\n[#NUM_ARGS]>=2 \{\
15542 .             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
15543 .             el             .ds $SEPARATOR\\n[#DEPTH] \\$2
15544 .             if \\n[#NUM_ARGS]=3 \{\
15545 .                ds $PREFIX\\n[#DEPTH] \\$3
15546 .             \}
15547 .          \}
15548 .       \}
15549 .       if '\\*[$1ST_LETTER]'R'  \{\
15550 .          nr #ARGS_TO_LIST 1
15551 .          nr #ENUMERATOR\\n+[#DEPTH] 0 1
15552 .          if '\\*[$LIST_ARG_1]'roman' \{\
15553 .             af #ENUMERATOR\\n[#DEPTH] i
15554 .          \}
15555 .          if '\\*[$LIST_ARG_1]'ROMAN' \{\
15556 .             af #ENUMERATOR\\n[#DEPTH] I
15557 .          \}
15558 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] roman
15559 .          ds $SEPARATOR\\n[#DEPTH] )
15560 .          ds $PREFIX\\n[#DEPTH]
15561 .          if \\n[#NUM_ARGS]>=2 \{\
15562 .             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
15563 .             el             .ds $SEPARATOR\\n[#DEPTH] \\$2
15564 .             if \\n[#NUM_ARGS]=3 \{\
15565 .                ds $PREFIX\\n[#DEPTH] \\$3
15566 .             \}
15567 .          \}
15568 .       \}
15569 .       if '\\*[$LIST_ARG_1]'USER'   \{\
15570 .          nr #ARGS_TO_LIST 1
15571 .          ds $ENUMERATOR\\n+[#DEPTH] \\$2
15572 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
15573 .          ds $SEPARATOR\\n[#DEPTH]
15574 .          ds $PREFIX\\n[#DEPTH]
15575 .       \}
15576 .       if \\n[#NUM_ARGS]=1 \{\
15577 .          if !r#ARGS_TO_LIST \{\
15578 .             ie \\n[#DEPTH]=1 \{\
15579 .                ie \\n[#NEXT_DEPTH_BACK]=0 \{\
15580 .                   SET_LIST_INDENT
15581 .                   if \\n[#QUIT]=1 \{\
15582 .                      QUIT_LISTS
15583 .                      return
15584 .                   \}
15585 .                   return
15586 .                \}
15587 .                el \{\
15588 .                   QUIT_LISTS
15589 .                   return
15590 .                \}
15591 .             \}
15592 .             el \{\
15593 .                SET_LIST_INDENT
15594 .                return
15595 .             \}
15596 .          \}
15597 .       \}
15598 .    \}
15599 .    nr #TOTAL_LISTS \\n[#DEPTH]
15600 .    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
15601 .       nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]m\\*[$SEPARATOR\\n[#DEPTH]]\ '
15602 .       if '\\*[$LIST_ARG_1]'ALPHA'\{\
15603 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]M\\*[$SEPARATOR\\n[#DEPTH]]\ '
15604 .       \}
15605 .    \}
15606 .    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\
15607 .       GET_ROMAN_INDENT
15608 .    \}
15609 .    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \{\
15610 .       nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$ENUMERATOR\\n[#DEPTH]]\0'
15611 .    \}
15612 .    ll \\n[#CURRENT_L_LENGTH]u
15613 .    ie \\n[#DEPTH]=1 \{\
15614 .       ie \\n[#INDENT_ACTIVE]=1 \{\
15615 .          if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
15616 .             nr #L_INDENT \\n[#L_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
15617 .             nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
15618 .             nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
15619 .          \}
15620 .          if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
15621 .             nr #L_INDENT \\n[#BL_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
15622 .             nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
15623 .             nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
15624 .          \}
15625 .          if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
15626 .             ie \\n[#INDENT_LEFT_ACTIVE]=1 \{\
15627 .             \" Don't do anything; we already have a left indent
15628 .             \}
15629 .             el \{\
15630 .                nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
15631 .                nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
15632 .             \}
15633 .          \}
15634 .       \}
15635 .       el \{\
15636 .          nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
15637 .          nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
15638 .       \}
15639 .    \}
15640 .    el \{\
15641 .       nr #L_INDENT +\\n[#LIST_INDENT\\n[#DEPTH]]
15642 .       nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
15643 .    \}
15644 .END
15645 \#
15646 \#
15647 \# ITEM
15648 \# ----
15649 \# *Arguments:
15650 \#   none
15651 \# *Function:
15652 \#   Prints enumerator for a given list depth and prepares mom to
15653 \#   receive the text of an item.
15654 \#
15655 .MAC ITEM END
15656 .    if !r#DEPTH \{ .return \}
15657 .    if \\n[#LINENUMBERS]=1 \{\
15658 .       NUMBER_LINES OFF
15659 .       nr #LINENUMBERS 2
15660 .    \}
15661 .    if \\n[#KERN]=1 \{\
15662 .       nr #KERN_WAS_ON 1
15663 .       KERN OFF
15664 .    \}
15665 .    IL
15666 .    ll \\n[#CURRENT_L_LENGTH]u \" Set ll again because IL turns IB off.
15667 .    TRAP OFF
15668 .    HI \\n[#HL_INDENT\\n[#DEPTH]]u
15669 .    if '\\*[$SEPARATOR\\n[#DEPTH]]')' \{ .nr #SEP_TYPE 1 \}
15670 .    if '\\*[$SEPARATOR\\n[#DEPTH]]']' \{ .nr #SEP_TYPE 1 \}
15671 .    if '\\*[$SEPARATOR\\n[#DEPTH]]'}' \{ .nr #SEP_TYPE 1 \}
15672 .    ie \\n[#IN_BIB_LIST]=1 \{\
15673 .       ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\
15674 .          ie \\n[#SEP_TYPE]=1 \{\
15675 .             PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15676 .          \}
15677 .          el \{\
15678 .             PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15679 .          \}
15680 .       \}
15681 .       el \{\
15682 .          ie \\n[#SEP_TYPE]=1 \{\
15683 .             PRINT \h'-\w'\0'u'\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15684 .          \}
15685 .          el \{\
15686 .             PRINT \h'-\w'\0'u'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15687 .          \}
15688 .       \}
15689 .    \}
15690 .    el \{\
15691 .       ie '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
15692 .\" DIGIT
15693 .          ie '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\
15694 .             ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\
15695 .                ie \\n[#ENUMERATOR\\n[#DEPTH]]<9 \{\
15696 .                   ie \\n[#SEP_TYPE]=1 \{\
15697 .                      PRINT \0\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15698 .                   \}
15699 .                   el \{\
15700 .                      PRINT \0\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15701 .                   \}
15702 .                \}
15703 .                el \{\
15704 .                   ie \\n[#SEP_TYPE]=1 \{\
15705 .                      PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15706 .                   \}
15707 .                   el \{\
15708 .                      PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15709 .                   \}
15710 .                \}
15711 .             \}
15712 .             el \{\
15713 .                ie \\n[#SEP_TYPE]=1 \{\
15714 .                   PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15715 .                \}
15716 .                el \{\
15717 .                   PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15718 .                \}
15719 .             \}
15720 .          \}
15721 .          el \{\
15722 .\" ALPHA
15723 .             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'A' \{\
15724 .                ie \\n[#SEP_TYPE]=1 \{\
15725 .                   PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15726 .                \}
15727 .                el \{\
15728 .                   PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15729 .                \}
15730 .             \}
15731 .\" alpha
15732 .             el \{\
15733 .                PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15734 .             \}
15735 .          \}
15736 .       \}
15737 .       if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\
15738 .          ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\
15739 .\" ROMAN I, padded
15740 .             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
15741 .                ie \\n[#SEP_TYPE]=1 \{\
15742 .                   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'
15743 .                \}
15744 .                el \{\
15745 .                   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]]
15746 .                \}
15747 .             \}
15748 .\" roman i, padded
15749 .             el \{\
15750 .                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]]
15751 .             \}
15752 .          \}
15753 .\" No pad
15754 .          el \{\
15755 .\" ROMAN I, no pad
15756 .             ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
15757 .                ie \\n[#SEP_TYPE]=1 \{\
15758 .                   PRINT \v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n+[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m'
15759 .                \}
15760 .                el \{\
15761 .                   PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15762 .                \}
15763 .             \}
15764 .\" roman i, no pad
15765 .             el \{\
15766 .                PRINT \\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15767 .             \}
15768 .          \}
15769 .       \}
15770 .       if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \{\
15771 .          PRINT \\*[$ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
15772 .       \}
15773 .    \}
15774 .    rr #SEP_TYPE
15775 .    EOL
15776 .    if \\n[#REF]=1 \{\
15777 .       IL +\\*[$REF_BIB_INDENT]
15778 .       ti \\n[#L_INDENT]u-\\*[$REF_BIB_INDENT]
15779 .    \}
15780 .    TRAP
15781 .    if \\n[#KERN_WAS_ON]=1 \{\
15782 .       KERN
15783 .       rr #KERN_WAS_ON
15784 .    \}
15785 .    if \\n[#LINENUMBERS]=2 \{\
15786 .       NUMBER_LINES RESUME
15787 .       nr #LINENUMBERS 1
15788 .    \}
15789 .END
15790 \#
15791 \# A utility macro that determines the space to reserve for
15792 \# roman numeral enumerated lists.  Limit is 20 roman numerals
15793 \# per list.  If this isn't enough, the user can add to the
15794 \# macro.
15795 \#
15796 .MAC GET_ROMAN_INDENT END
15797 .    if '\\*[$LIST_ARG_1]'roman' \{\
15798 .       if '\\*[$ROMAN_WIDTH]'1'  \{\
15799 .          ds $ROMAN_WIDTH\\n[#DEPTH] 1
15800 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]i\\*[$SEPARATOR\\n[#DEPTH]]\0'
15801 .       \}
15802 .       if '\\*[$ROMAN_WIDTH]'2'  \{\
15803 .          ds $ROMAN_WIDTH\\n[#DEPTH] 2
15804 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]ii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15805 .       \}
15806 .       if '\\*[$ROMAN_WIDTH]'3'  \{\
15807 .          ds $ROMAN_WIDTH\\n[#DEPTH] 3
15808 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15809 .       \}
15810 .       if '\\*[$ROMAN_WIDTH]'4'  \{\
15811 .          ds $ROMAN_WIDTH\\n[#DEPTH] 4
15812 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15813 .       \}
15814 .       if '\\*[$ROMAN_WIDTH]'5'  \{\
15815 .          ds $ROMAN_WIDTH\\n[#DEPTH] 5
15816 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15817 .       \}
15818 .       if '\\*[$ROMAN_WIDTH]'6'  \{\
15819 .          ds $ROMAN_WIDTH\\n[#DEPTH] 6
15820 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]iii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15821 .       \}
15822 .       if '\\*[$ROMAN_WIDTH]'7'  \{\
15823 .          ds $ROMAN_WIDTH\\n[#DEPTH] 7
15824 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]vii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15825 .       \}
15826 .       if '\\*[$ROMAN_WIDTH]'8'  \{\
15827 .          ds $ROMAN_WIDTH\\n[#DEPTH] 8
15828 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15829 .       \}
15830 .       if '\\*[$ROMAN_WIDTH]'9'  \{\
15831 .          ds $ROMAN_WIDTH\\n[#DEPTH] 9
15832 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15833 .       \}
15834 .       if '\\*[$ROMAN_WIDTH]'10'  \{\
15835 .          ds $ROMAN_WIDTH\\n[#DEPTH] 10
15836 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15837 .       \}
15838 .       if '\\*[$ROMAN_WIDTH]'11'  \{\
15839 .          ds $ROMAN_WIDTH\\n[#DEPTH] 11
15840 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15841 .       \}
15842 .       if '\\*[$ROMAN_WIDTH]'12'  \{\
15843 .          ds $ROMAN_WIDTH\\n[#DEPTH] 12
15844 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]viii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15845 .       \}
15846 .       if '\\*[$ROMAN_WIDTH]'13'  \{\
15847 .          ds $ROMAN_WIDTH\\n[#DEPTH] 13
15848 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15849 .       \}
15850 .       if '\\*[$ROMAN_WIDTH]'14'  \{\
15851 .          ds $ROMAN_WIDTH\\n[#DEPTH] 14
15852 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15853 .       \}
15854 .       if '\\*[$ROMAN_WIDTH]'15'  \{\
15855 .          ds $ROMAN_WIDTH\\n[#DEPTH] 15
15856 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15857 .       \}
15858 .       if '\\*[$ROMAN_WIDTH]'16'  \{\
15859 .          ds $ROMAN_WIDTH\\n[#DEPTH] 16
15860 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xiii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15861 .       \}
15862 .       if '\\*[$ROMAN_WIDTH]'17'  \{\
15863 .          ds $ROMAN_WIDTH\\n[#DEPTH] 17
15864 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xvii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15865 .       \}
15866 .       if '\\*[$ROMAN_WIDTH]'18'  \{\
15867 .          ds $ROMAN_WIDTH\\n[#DEPTH] 18
15868 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15869 .       \}
15870 .       if '\\*[$ROMAN_WIDTH]'19'  \{\
15871 .          ds $ROMAN_WIDTH\\n[#DEPTH] 19
15872 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15873 .       \}
15874 .       if '\\*[$ROMAN_WIDTH]'20'  \{\
15875 .          ds $ROMAN_WIDTH\\n[#DEPTH] 20
15876 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]xviii\\*[$SEPARATOR\\n[#DEPTH]]\0'
15877 .       \}
15878 .    \}
15879 .    if '\\*[$LIST_ARG_1]'ROMAN' \{\
15880 .       if '\\*[$ROMAN_WIDTH]'1'  \{\
15881 .          ds $ROMAN_WIDTH\\n[#DEPTH] 1
15882 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]I\\*[$SEPARATOR\\n[#DEPTH]]\0'
15883 .       \}
15884 .       if '\\*[$ROMAN_WIDTH]'2'  \{\
15885 .          ds $ROMAN_WIDTH\\n[#DEPTH] 2
15886 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]II\\*[$SEPARATOR\\n[#DEPTH]]\0'
15887 .       \}
15888 .       if '\\*[$ROMAN_WIDTH]'3'  \{\
15889 .          ds $ROMAN_WIDTH\\n[#DEPTH] 3
15890 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]III\\*[$SEPARATOR\\n[#DEPTH]]\0'
15891 .       \}
15892 .       if '\\*[$ROMAN_WIDTH]'4'  \{\
15893 .          ds $ROMAN_WIDTH\\n[#DEPTH] 4
15894 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15895 .       \}
15896 .       if '\\*[$ROMAN_WIDTH]'5'  \{\
15897 .          ds $ROMAN_WIDTH\\n[#DEPTH] 5
15898 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15899 .       \}
15900 .       if '\\*[$ROMAN_WIDTH]'6'  \{\
15901 .          ds $ROMAN_WIDTH\\n[#DEPTH] 6
15902 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]IV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15903 .       \}
15904 .       if '\\*[$ROMAN_WIDTH]'7'  \{\
15905 .          ds $ROMAN_WIDTH\\n[#DEPTH] 7
15906 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15907 .       \}
15908 .       if '\\*[$ROMAN_WIDTH]'8'  \{\
15909 .          ds $ROMAN_WIDTH\\n[#DEPTH] 8
15910 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15911 .       \}
15912 .       if '\\*[$ROMAN_WIDTH]'9'  \{\
15913 .          ds $ROMAN_WIDTH\\n[#DEPTH] 9
15914 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15915 .       \}
15916 .       if '\\*[$ROMAN_WIDTH]'10'  \{\
15917 .          ds $ROMAN_WIDTH\\n[#DEPTH] 10
15918 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15919 .       \}
15920 .       if '\\*[$ROMAN_WIDTH]'11'  \{\
15921 .          ds $ROMAN_WIDTH\\n[#DEPTH] 11
15922 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15923 .       \}
15924 .       if '\\*[$ROMAN_WIDTH]'12'  \{\
15925 .          ds $ROMAN_WIDTH\\n[#DEPTH] 12
15926 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]VIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15927 .       \}
15928 .       if '\\*[$ROMAN_WIDTH]'13'  \{\
15929 .          ds $ROMAN_WIDTH\\n[#DEPTH] 13
15930 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15931 .       \}
15932 .       if '\\*[$ROMAN_WIDTH]'14'  \{\
15933 .          ds $ROMAN_WIDTH\\n[#DEPTH] 14
15934 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15935 .       \}
15936 .       if '\\*[$ROMAN_WIDTH]'15'  \{\
15937 .          ds $ROMAN_WIDTH\\n[#DEPTH] 15
15938 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15939 .       \}
15940 .       if '\\*[$ROMAN_WIDTH]'16'  \{\
15941 .          ds $ROMAN_WIDTH\\n[#DEPTH] 16
15942 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XIV\\*[$SEPARATOR\\n[#DEPTH]]\0'
15943 .       \}
15944 .       if '\\*[$ROMAN_WIDTH]'17'  \{\
15945 .          ds $ROMAN_WIDTH\\n[#DEPTH] 17
15946 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15947 .       \}
15948 .       if '\\*[$ROMAN_WIDTH]'18'  \{\
15949 .          ds $ROMAN_WIDTH\\n[#DEPTH] 18
15950 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15951 .       \}
15952 .       if '\\*[$ROMAN_WIDTH]'19'  \{\
15953 .          ds $ROMAN_WIDTH\\n[#DEPTH] 19
15954 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15955 .       \}
15956 .       if '\\*[$ROMAN_WIDTH]'20'  \{\
15957 .          ds $ROMAN_WIDTH\\n[#DEPTH] 20
15958 .          nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$PREFIX\\n[#DEPTH]]XVIII\\*[$SEPARATOR\\n[#DEPTH]]\0'
15959 .       \}
15960 .    \}
15961 .END
15962 \#
15963 \# SHIFT LIST
15964 \# ----------
15965 \# *Arguments:
15966 \#   <amount by which to indent a list to the right>
15967 \# *Function:
15968 \#   Adds the value of the arg to the current list's indent.
15969 \# *Notes:
15970 \#   Requires a unit of measure.
15971 \#
15972 .MAC SHIFT_LIST END
15973 .       nr #SHIFT_LIST\\n[#DEPTH] (\\$1)
15974 .       nr #L_INDENT +\\n[#SHIFT_LIST\\n[#DEPTH]]
15975 .END
15976 \#
15977 \#
15978 \# PAD LIST DIGITS
15979 \# ---------------
15980 \# *Arguments:
15981 \#   [ LEFT ]
15982 \# *Function:
15983 \#   Adds a figure space to a list's hanging and left indent.  If
15984 \#   LEFT is given, sets reg. #PAD_LIST_DIGITS to 1 for use in ITEM.
15985 \#
15986 .MAC PAD_LIST_DIGITS END
15987 .    if '\\g[#ENUMERATOR\\n[#DEPTH]]'0' \{\
15988 .       nr #LIST_INDENT\\n[#DEPTH] +\\w'\\0'
15989 .       nr #L_INDENT \\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#LIST_INDENT\\n-[#DEPTH]]
15990 .       nr #HL_INDENT\\n+[#DEPTH] +\\w'\\n[#ENUMERATOR\\n[#DEPTH]]'
15991 .       if '\\$1'LEFT' \{ .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 \}
15992 .    \}
15993 .    if '\\g[#ENUMERATOR\\n[#DEPTH]]'i' \{\
15994 .       if '\\$1'LEFT' \{ .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 \}
15995 .    \}
15996 .    if '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\
15997 .       if '\\$1'LEFT' \{ .nr #PAD_LIST_DIGITS\\n[#DEPTH] 1 \}
15998 .    \}
15999 .END
16000 \#
16001 \#
16002 \# RESET LIST
16003 \# ----------
16004 \# *Arguments:
16005 \#   none
16006 \# *Function:
16007 \#   Resets register enumerators to 1 or a.
16008 \#
16009 .MAC RESET_LIST END
16010 .    ie '\\$1'' \{ .nr #ENUMERATOR\\n[#DEPTH] 0 1 \}
16011 .    el \{ .nr #ENUMERATOR\\n[#DEPTH] \\$1-1 1 \}
16012 .END
16013 \#
16014 \#
16015 \# QUIT LISTS
16016 \# ----------
16017 \# *Arguments:
16018 \#   none
16019 \# *Function:
16020 \#   Exits lists cleanly and restores any indents that were in
16021 \#   effect prior to LIST.
16022 \#
16023 .MAC QUIT_LISTS END
16024 .   IQ CLEAR
16025 .   nr #HL_INDENT \\n[#STORED_HL_INDENT]
16026 .   nr #T_INDENT  \\n[#STORED_T_INDENT]
16027 .   rr #STORED_HL_INDENT
16028 .   if \\n[#RESTORE_PREV_INDENT]=1 \{\
16029 .      nr #L_INDENT  \\n[#STORED_L_INDENT]
16030 .      IL
16031 .      rr #STORED_L_INDENT
16032 .   \}
16033 .   if \\n[#RESTORE_PREV_INDENT]=2 \{\
16034 .      nr #BL_INDENT \\n[#STORED_BL_INDENT]
16035 .      nr #BR_INDENT \\n[#STORED_BR_INDENT]
16036 .      ll \\n[#ORIG_L_LENGTH]u
16037 .      IB
16038 .      rr #STORED_BL_INDENT
16039 .      rr #STORED_BR_INDENT
16040 .   \}
16041 .   if \\n[#RESTORE_PREV_INDENT]=3 \{\
16042 .      nr #R_INDENT \\n[#STORED_R_INDENT]
16043 .      ll \\n[#ORIG_L_LENGTH]u
16044 .      IR
16045 .      rr #STORED_R_INDENT
16046 .   \}
16047 .   if \\n[#RESTORE_PREV_INDENT]=4 \{\
16048 .      nr #R_INDENT \\n[#STORED_R_INDENT]
16049 .      nr #L_INDENT \\n[#STORED_L_INDENT]
16050 .      ll \\n[#ORIG_L_LENGTH]u
16051 .      IR
16052 .      IL
16053 .      rr #STORED_R_INDENT
16054 .      rr #STORED_L_INDENT
16055 .   \}
16056 .\" Clean up after exiting last depth of list
16057 .   nr #REMOVE 0 1
16058 .   while \\n+[#REMOVE]<=\\n[#TOTAL_LISTS] \{\
16059 .      rr #LIST_INDENT\\n[#REMOVE]
16060 .      rr #ENUMERATOR\\n[#REMOVE]
16061 .      rm $ENUMERATOR\\n[#REMOVE]
16062 .      rm $SEPARATOR\\n[#REMOVE]
16063 .      rm $ENUMERATOR_TYPE\\n[#REMOVE]
16064 .      rr #PAD_LIST_DIGITS\\n[#REMOVE]
16065 .\}
16066 .   rr #REMOVE
16067 .   rr #TOTAL_LISTS
16068 .   rr #QUIT
16069 .   rr #DEPTH
16070 .   rr #NEXT_DEPTH_BACK
16071 .   rr #RESTORE_PREV_INDENT
16072 .   rr #ORIG_L_LENGTH
16073 .   rr #CURRENT_L_LENGTH
16074 .END
16075 \#
16076 \#
16077 \# SET LIST INDENT
16078 \# ---------------
16079 \# *Arguments:
16080 \#   none
16081 \# *Function:
16082 \#   Restores indent of prev. list in nested lists.  Also sets the
16083 \#   #QUIT register if an invocation of LIST OFF applies to the first
16084 \#   level of list.
16085 \#
16086 .MAC SET_LIST_INDENT END
16087 .    nr #NEXT_DEPTH_BACK \\n[#DEPTH]-1
16088 .    if \\n[#NEXT_DEPTH_BACK]=0 \{\
16089 .       nr #QUIT 1
16090 .       return
16091 .    \}
16092 .    nr #L_INDENT -\\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#SHIFT_LIST\\n[#DEPTH]]
16093 .    nr #HL_INDENT \\n[#HL_INDENT\\n-[#DEPTH]]
16094 .END
16095 \#
16096 \# ====================================================================
16097 \#
16098 \# +++DOCUMENT PROCESSING MISC AND SUPPORT MACROS+++
16099 \#
16100 \# COLLATE
16101 \# -------
16102 \# *Arguments:
16103 \#   <none>
16104 \# *Function:
16105 \#   Turns headers off (if on) and saves header state, sets register
16106 \#   #COLLATE to 1 (toggle), and breaks to a new page.
16107 \# *Notes:
16108 \#   COLLATE exists primarily to allow putting multiple chapters in
16109 \#   a single file, although it can be used for any document type.  After
16110 \#   COLLATE, any of the macros that normally precede START may be
16111 \#   used, and should behave as expected.
16112 \#
16113 \#   N.B.--the START macro *must* be used after COLLATE (and any other
16114 \#   macros that alter mom's behaviour).
16115 \#
16116 .MAC COLLATE END
16117 .    if ( (\\n[.t]-1) <= \\n[.v] ) \{ .nr #NO_BREAK 1 \}
16118 .    ds $SAVED_PP_FT \\*[$PP_FT]
16119 .    nr #COLLATE 1
16120 .    nr #PRE_COLLATE 1
16121 .    nr #HEADER_STATE \\n[#HEADERS_ON]
16122 .    HEADERS OFF
16123 .    if \\n[#DOC_HEADER]=2 \{ .nr #DOC_HEADER 1 \}
16124 .    if \\n[#PAGE_NUM_V_POS]=1 \{\
16125 .       nr #PAGINATION_STATE \\n[#PAGINATE]
16126 .       PAGINATION OFF
16127 .    \}
16128 .    IQ CLEAR
16129 .    TQ
16130 .\" Collect first doc's title for TOC
16131 .    if \\n[#COLLATED_DOC]=0 \{\
16132 .       ie \\n[#USER_SET_TITLE_ITEM] \{\
16133 .          ds $FIRST_DOC_TITLE \\*[$USER_SET_TITLE_ITEM]\\|
16134 .          rr #USER_SET_TITLE_ITEM
16135 .          rm $USER_SET_TITLE_ITEM
16136 .       \}
16137 .       el \{\
16138 .          ie \\n[#DOC_TYPE]=2 \{\
16139 .             ie '\\*[$CHAPTER_TITLE]'' \{\
16140 .                ds $FIRST_DOC_TITLE \\*[$CHAPTER_STRING] \\*[$CHAPTER]\\|
16141 .             \}
16142 .             el \{\
16143 .                ie '\\*[$CHAPTER]'' \{\
16144 .                   ds $FIRST_DOC_TITLE \\*[$CHAPTER_TITLE]\\|
16145 .                \}
16146 .                el \{\
16147 .                   ds $FIRST_DOC_TITLE \\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]\\|
16148 .                \}
16149 .             \}
16150 .          \}
16151 .          el \{\
16152 .             ds $FIRST_DOC_TITLE \\*[$TITLE]\\|
16153 .          \}
16154 .       \}
16155 .       if \\n[#TOC_AUTHORS]=1 \{\
16156 .          ie '\\*[$TOC_AUTHORS]'' \{\
16157 .             as $FIRST_DOC_TITLE /\\|\\*[$AUTHOR_1]\\|
16158 .          \}
16159 .          el \{\
16160 .             as $FIRST_DOC_TITLE /\\|\\*[$TOC_AUTHORS]\\|
16161 .             rm $TOC_AUTHORS
16162 .          \}
16163 .       \}
16164 .       nr #COLLATED_DOC 1
16165 .    \}
16166 .\" End title collection for TOC
16167 .    LL \\n[#DOC_L_LENGTH]u
16168 .    QUAD $DOC_QUAD
16169 .    nr #SAVED_DOC_LEAD \\n[#DOC_LEAD]
16170 .    LS \\n[#DOC_LEAD]u
16171 \*[SLANTX]
16172 \*[CONDX]
16173 \*[EXTX]
16174 '    NEWPAGE
16175 .    if \\n[#DEFER_PAGINATION] \{ .PAGINATE \}
16176 .    if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
16177 .       PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
16178 .       rm $RESTORE_PAGENUM_STYLE
16179 .    \}
16180 .    if \\n[#CH_NUM] \{ .nr #CH_NUM +1 \}
16181 .    rm $EN_TITLE
16182 .    COVERTITLE
16183 .    DOCCOVERTITLE
16184 .    MISC
16185 .    TITLE
16186 .    SUBTITLE
16187 .    CHAPTER
16188 .    CHAPTER_TITLE
16189 .    rr #PAGENUM_STYLE_SET
16190 .    rr #DOC_COVER
16191 .    rr #COVER
16192 .END
16193 \#
16194 \#
16195 \# NUMBER_LINES
16196 \# ------------
16197 \# *Arguments:
16198 \#   <starting line number> [ <increment> [ <gutter> ] ]
16199 \#   or
16200 \#   <anything> | RESUME
16201 \# *Function:
16202 \#   Begin, suspend/turn off, or resume numbering of output lines.
16203 \#
16204 .MAC NUMBER_LINES END
16205 .    br
16206 .    if '\\n(.z'EPI_TEXT' \{ .return \}
16207 .    if '\\$1'' \{\
16208 .       tm1 "[mom]: NUMBER_LINES at line \\n(.c has no argument.
16209 .       tm1 "       Most likely, you have forgotten to give it a starting line number.
16210 .       ab Aborting on NUMBER_LINES.
16211 .    \}
16212 .    if !\\n[#LINENUMBERS]=2 \{ .nr #LINENUMBERS 1 \}
16213 .\" Test whether the first arg is a digit.
16214 .    if \B'\\$1' \{\
16215 .       nr #LN \\$1
16216 .       ds $LN_NUM \\$1
16217 .       if !'\\n(.z'' \{ .nr #RESTORE_LN_NUM 1 \}
16218 .       ie '\\$2'' \{\
16219 .          if '\\*[$LN_INC]'' .ds $LN_INC 1
16220 .       \}
16221 .       el .ds $LN_INC \\$2
16222 .       ie '\\$3'' \{\
16223 .          if '\\*[$LN_GUTTER]'' .ds $LN_GUTTER 2
16224 .       \}
16225 .       el .ds $LN_GUTTER \\$3
16226 .    \}
16227 .    ie !\\n[#LN] \{\
16228 .\" In other words, the first arg was not a digit.
16229 .       rr #LN
16230 .       ie '\\$1'RESUME' \{\
16231 .          LN_PARAMS
16232 .          nm +0
16233 .          fam
16234 .          ft
16235 .          ps
16236 .          gcolor
16237 .       \}
16238 .       el \{\
16239 .          LN_PARAMS
16240 .          nm
16241 .          fam
16242 .          ft
16243 .          ps
16244 .          gcolor
16245 .          if !\\n[#LINENUMBERS]=2 \{ .rr #LINENUMBERS \}
16246 .       \}
16247 .    \}
16248 .    el \{\
16249 .       LN_PARAMS
16250 .       nm \\*[$LN_NUM] \\*[$LN_INC] \\*[$LN_GUTTER] -3-\\*[$LN_GUTTER]
16251 .       fam
16252 .       ft
16253 .       ps
16254 .       gcolor
16255 .       if !'\\n(.z'' \{ .nr #DIVER_LN_OFF 1 \}
16256 .    \}
16257 .    rr #LN
16258 .END
16259 \#
16260 \#
16261 \# LINENUMBER STYLE PARAMETERS
16262 \# ---------------------------
16263 \# *Arguments:
16264 \#   none
16265 \# *Function:
16266 \#   Checks if any line numbering parameters have been set, and
16267 \#   passes the args, if any, to the appropriate request.  If a linenumber
16268 \#   parameter is missing, passes the current value of the register
16269 \#   associated with the request to the request.  (Ensures that the
16270 \#   same requests, called in NUMBER_LINES to reset the registers
16271 \#   to their former values, stay at those values.)
16272 \#
16273 .MAC LN_PARAMS END
16274 .    ie d$LN_FAM          \{ .fam \\*[$LN_FAM] \}
16275 .    el                   \{ .fam \\n[.fam]    \}
16276 .    ie d$LN_FT           \{ .ft \\*[$LN_FT]   \}
16277 .    el                   \{ .ft \\n[.sty]     \}
16278 .    ie d$LN_SIZE_CHANGE  \{ .ps \\*[$LN_SIZE_CHANGE] \}
16279 .    el                   \{ .ps \\n[.s] \}
16280 .    ie d$LN_COLOR        \{ .gcolor \\*[$LN_COLOR] \}
16281 .    el                   \{ .gcolor \\n[.m] \}
16282 .END
16283 \#
16284 \#
16285 \# NUMBER QUOTE AND BLOCKQUOTE LINES AS PART OF RUNNING TEXT
16286 \# ---------------------------------------------------------
16287 \# *Argument:
16288 \#   <gutter> | <anything>
16289 \# *Function:
16290 \#   Sets #(B)QUOTE_LN to 1 if no argument, or a single numeric
16291 \#   argument, is given; otherwise, turns (BLOCK)QUOTE linenumbering
16292 \#   off.
16293 \# *Notes:
16294 \#   #(B)QUOTE is checked for in QUOTE and BLOCKQUOTE.
16295 \#   The single numeric argument allows establishing a different gutter from
16296 \#   the one used for line numbers in running text.
16297 \#
16298 .MAC NUMBER_QUOTE_LINES END
16299 .    ie \\n[#NUM_ARGS]=0 \{ .nr #QUOTE_LN 1 \}
16300 .    el \{\
16301 .       ie \B'\\$1' \{\
16302 .          nr #QUOTE_LN 1
16303 .          ds $Q_LN_GUTTER \\$1
16304 .       \}
16305 .       el \{\
16306 .          ie '\\$1'SILENT' \{ .nr #SILENT_QUOTE_LN 1 \}
16307 .          el \{\
16308 .             rr #QUOTE_LN
16309 .             rr #SILENT_QUOTE_LN
16310 .          \}
16311 .       \}
16312 .    \}
16313 .END
16314 \#
16315 \#
16316 .MAC NUMBER_BLOCKQUOTE_LINES END
16317 .    ie \\n[#NUM_ARGS]=0 \{ .nr #BQUOTE_LN 1 \}
16318 .    el \{\
16319 .       ie \B'\\$1' \{\
16320 .          nr #BQUOTE_LN 1
16321 .          ds $BQ_LN_GUTTER \\$1
16322 .       \}
16323 .       el \{\
16324 .          ie '\\$1'SILENT' \{ .nr #SILENT_BQUOTE_LN 1 \}
16325 .          el \{\
16326 .             rr #BQUOTE_LN
16327 .             rr #SILENT_BQUOTE_LN
16328 .          \}
16329 .       \}
16330 .    \}
16331 .END
16332 \#
16333 \# OUTPUT BLANK PAGES
16334 \# ------------------
16335 \# *Argument:
16336 \#   <number of blank pages to output> [ NULL ]
16337 \# *Function:
16338 \#   Outputs blank pages.
16339 \# *Notes:
16340 \#   If recto/verso, each page is recto/verso, even if there's
16341 \#   nothing on it.
16342 \#
16343 \#   The argument to BLANKPAGE is non-optional.
16344 \#
16345 .MAC BLANKPAGE END
16346 .    nr #HOW_MANY \\$1
16347 .    nr #PAGES 0 1
16348 .    while \\n+[#PAGES]<=\\n[#HOW_MANY] \{\
16349 .       if \\n[#HEADERS_ON]=1 \{\
16350 .          nr #HEADERS_WERE_ON 1
16351 .          HEADERS OFF
16352 .       \}
16353 .       if \\n[#PAGE_NUM_V_POS]=1 \{\
16354 .          if \\n[#PAGINATE]=1 \{ .nr #PAGINATE_WAS_ON 1 \}
16355 .          PAGINATION OFF
16356 .       \}
16357 .       NEWPAGE
16358 .       PRINT \&
16359 .       if \\n[#FOOTERS_ON]=1 \{\
16360 .          nr #FOOTERS_WERE_ON 1
16361 .          FOOTERS OFF
16362 .       \}
16363 .       if \\n[#PAGE_NUM_V_POS]=2 \{\
16364 .          if \\n[#PAGINATE]=1 \{ .nr #PAGINATE_WAS_ON 1 \}
16365 .          PAGINATION OFF
16366 .       \}
16367 .       if \\n[#HEADERS_WERE_ON] \{ .HEADERS \}
16368 .       if \\n[#PAGE_NUM_V_POS]=1 \{\
16369 .          if \\n[#PAGINATE_WAS_ON] \{ .PAGINATE \}
16370 .       \}
16371 .\}
16372 .    NEWPAGE
16373 .    if \\n[#FOOTERS_WERE_ON] \{ .FOOTERS \}
16374 .    if \\n[#PAGE_NUM_V_POS]=2 \{\
16375 .       if \\n[#PAGINATE_WAS_ON] \{ .PAGINATE \}
16376 .    \}
16377 .    if \\n[#PAGINATE]=1 \{\
16378 .       if '\\$2'NULL' \{ .nr #PAGE_NUM_ADJ -\\n[#HOW_MANY] \}
16379 .    \}
16380 .    rr #HOW_MANY
16381 .    rr #HEADERS_WERE_ON
16382 .    rr #FOOTERS_WERE_ON
16383 .    rr #PAGINATE_WAS_ON
16384 .END
16385 \#
16386 \#
16387 \# SET TRAPS FOR HEADERS/FOOTERS/FOOTNOTES
16388 \# ---------------------------------------
16389 \# *Arguments:
16390 \#   <none>
16391 \# *Function:
16392 \#   Sets header/footer/footnotes/etc... traps.
16393 \#
16394 \#   Calculates the number of lines that actually fit on a
16395 \#   page based on #B_MARGIN and resets page bottom trap to coincide
16396 \#   with the depth of that number of lines, or, if #ADJ_DOC_LEAD=1,
16397 \#   adjusts #DOC_LEAD so that the last line of text on a page falls
16398 \#   exactly on #B_MARGIN.
16399 \#
16400 .MAC TRAPS END
16401 .\" Remove all header/footer traps
16402 .    if !\\n[#NO_TRAP_RESET] \{\
16403 .       ch DO_T_MARGIN
16404 .       ch DO_B_MARGIN
16405 .       ch HEADER
16406 .       ch FOOTER
16407 .       ch FN_OVERFLOW_TRAP
16408 .\" Plant header trap
16409 .       wh 0 HEADER
16410 .    \}
16411 .\" Adjust lead so last line of text falls on B_MARGIN,...
16412 .    ie \\n[#ADJ_DOC_LEAD]=1 \{\
16413 .       nr #LINES_PER_PAGE 0 1
16414 .       nr #DOC_LEAD_ADJ 0 1
16415 .       nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#ORIGINAL_B_MARGIN]-1v
16416 .\" Get the number of unadjusted lines that fit on the page; always a
16417 .\" bit short of the bottom margin
16418 .       while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
16419 .
16420 .\}
16421 .       nr #LINES_PER_PAGE -1
16422 .\" Add machine units, 1 at a time, increasing the leading until the
16423 .\" new leading fills the page properly
16424 .       while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]+\\n+[#DOC_LEAD_ADJ]*\\n[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
16425 .
16426 .\}
16427 .       DOC_LEAD \\n[#DOC_LEAD]u+\\n[#DOC_LEAD_ADJ]u
16428 .\" The "visual" bottom margin is what \n(nl would report on the
16429 .\" last line before the FOOTER trap is sprung
16430 .       nr #VISUAL_B_MARGIN \\n[#T_MARGIN]+(\\n[#LINES_PER_PAGE]*\\n[#DOC_LEAD])
16431 .\" Get the difference between #B_MARGIN and #VISUAL_B_MARGIN
16432 .       nr #FOOTER_DIFF (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[#VISUAL_B_MARGIN]
16433 .\" Set #B_MARGIN to 1 machine unit lower on the page than #VISUAL_B_MARGIN
16434 .       nr #B_MARGIN \\n[#B_MARGIN]+(\\n[#FOOTER_DIFF]-1)
16435 .\" Set the FN_OVERFLOW_TRAP position
16436 .       nr #FN_OVERFLOW_TRAP_POS \\n[#B_MARGIN]u-\\n[#FN_LEAD]
16437 .       if \\n[#PRINT_STYLE]=1 .nr #FN_OVERFLOW_TRAP_POS \\n[#ORIGINAL_B_MARGIN]u
16438 .    \}
16439 .\" ...or calculate new B_MARGIN based on # of lines (at #DOC_LEAD) that fit
16440 .\" on the page.
16441 .    el \{\
16442 .       nr #LINES_PER_PAGE 0 1
16443 .       nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]-1v
16444 .       while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\
16445 .
16446 .\}
16447 .       nr #VISUAL_B_MARGIN \\n[#T_MARGIN]+(\\n[#LINES_PER_PAGE]*\\n[#DOC_LEAD]-1v)
16448 .       nr #FOOTER_DIFF (\\n[#PAGE_LENGTH]-\\n[#B_MARGIN])-\\n[#VISUAL_B_MARGIN]
16449 .       nr #B_MARGIN \\n[#B_MARGIN]+(\\n[#FOOTER_DIFF]-1)
16450 .       nr #FN_OVERFLOW_TRAP_POS \\n[#B_MARGIN]u-\\n[#FN_LEAD]
16451 .    \}
16452 .\" Set footer and footnote overflow traps
16453 .    if !\\n[#NO_TRAP_RESET] \{\
16454 .       nr #FN_COUNT 0 1
16455 .       nr #SPACE_REMAINING 0
16456 .       nr #FN_DEPTH 0
16457 .       nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
16458 .       wh \\n(.pu FOOTER
16459 .       wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP
16460 .       ch FOOTER -\\n[#B_MARGIN]u
16461 .    \}
16462 .END
16463 \#
16464 \#
16465 \# CHECK INDENT
16466 \# ------------
16467 \# *Arguments:
16468 \#   <none>
16469 \# *Function:
16470 \#   Adds left, right, or both indent values to document elements
16471 \#   like heads and subheads that are processed in environments.
16472 \#
16473 .MAC CHECK_INDENT END
16474 .    if \\n[#INDENT_LEFT_ACTIVE] \{\
16475 .       in \\n[#L_INDENT]u
16476 .       if \\n[#QUOTE] \{\
16477 .          in -\\n[#L_INDENT]u \"Because you added an indent in 2nd line of macro
16478 .          ll -\\n[#L_INDENT]u
16479 .          ta \\n(.lu
16480 .       \}
16481 .       if \\n[#EPIGRAPH] \{\
16482 .          in -\\n[#L_INDENT]u
16483 .          ll -\\n[#L_INDENT]u
16484 .          ta \\n(.lu
16485 .       \}
16486 .    \}
16487 .    if \\n[#INDENT_RIGHT_ACTIVE] \{\
16488 .       ll -\\n[#R_INDENT]u
16489 .       ta \\n(.lu
16490 .    \}
16491 .    if \\n[#INDENT_BOTH_ACTIVE] \{\
16492 .       in \\n[#BL_INDENT]u
16493 .       ll -\\n[#BR_INDENT]u
16494 .       ta \\n(.lu
16495 .       if \\n[#QUOTE] \{\
16496 .          in -\\n[#BL_INDENT]u
16497 .          ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
16498 .             ll -\\n[#BR_INDENT]u
16499 .             ta \\n(.lu
16500 .          \}
16501 .          el \{\
16502 .             ll -(\\n[#BR_INDENT]u/2u)
16503 .             ta \\n(.lu
16504 .          \}
16505 .       \}
16506 .       if \\n[#EPIGRAPH] \{\
16507 .          in -\\n[#BL_INDENT]u
16508 .          ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
16509 .             ll -\\n[#BR_INDENT]u
16510 .             ta \\n(.lu
16511 .          \}
16512 .          el \{\
16513 .             ll -(\\n[#BR_INDENT]u/2u)
16514 .             ta \\n(.lu
16515 .          \}
16516 .       \}
16517 .    \}
16518 .END
16519 \#
16520 \#
16521 \# REMOVE INDENT
16522 \# -------------
16523 \# *Arguments:
16524 \#   <none>
16525 \# *Function:
16526 \#   Removes left, right, or both indent values from document elements
16527 \#   like heads and subheads that are processed in environments.
16528 \#
16529 .MAC REMOVE_INDENT END
16530 .    in 0
16531 .    ll \\n[#L_LENGTH]u
16532 .    ta \\n(.lu
16533 .END
16534 \#
16535 \#
16536 \# This .em (for all DOC_TYPEs except 4 [LETTER]) ensures that
16537 \# deferred footnotes that happen on the 2nd to last page get
16538 \# output.
16539 \#
16540 .MAC TERMINATE END
16541 .    ie \\n[#FN_DEPTH] \{\
16542 .       ie \\n[#FN_DEFER] \{\
16543 .          br
16544 .          nr #TERMINATE 1
16545 .          FOOTNOTE
16546 .          nf
16547 .          FOOTNOTE OFF
16548 .       \}
16549 .       el \{\
16550 .          br
16551 .          ch FN_OVERFLOW_TRAP
16552 .          DO_B_MARGIN
16553 .       \}
16554 .    \}
16555 .    el \{\
16556 .       br
16557 .       ch FN_OVERFLOW_TRAP
16558 .       DO_B_MARGIN
16559 .    \}
16560 .END
16561 \#
16562 \# END MACRO FOR LETTERS
16563 \# ---------------------
16564 \# *Arguments:
16565 \#   none
16566 \# *Function:
16567 \#   The .em macro executed at the end of letters.  Turns footers
16568 \#   and pagination off, terminates and outputs diversion CLOSING
16569 \#   (indented with the author's name underneath).
16570 \#
16571 .MAC ALL_DONE END
16572 .    br
16573 .    FOOTERS OFF
16574 .    PAGINATION OFF
16575 .    if \\n[#DOC_TYPE]=4 \{\
16576 .       br
16577 .       if !'\\n(.z'' \{ .di \}
16578 .       IQ CLEAR
16579 .       TQ
16580 .       TAB_SET 1 \\n[#DOC_L_LENGTH]u/2u \\n[#DOC_L_LENGTH]u/2u LEFT
16581 .       ALD \\n[#DOC_LEAD]u*2u
16582 .       TAB 1
16583 .       if \\n[#CLOSING] \{\
16584 .          nf
16585 .          CLOSING
16586 .       \}
16587 .       ALD \\n[#DOC_LEAD]u*3u
16588 .       PRINT \\*[$AUTHOR_1]
16589 .    \}
16590 .    DO_FOOTER
16591 .END
16592 \#
16593 \# Set up a default papersize of US letter
16594 \#
16595 .PAPER LETTER
16596 \#
16597 \# ====================================================================
16598 \#
16599 \# +++DOCUMENT PROCESSING ALIASES+++
16600 \#
16601 \# Aliases to make life easier for users: synonyms, short forms
16602 \# and alternate spellings.
16603 \#
16604 .ALIAS   BREAK_BLOCKQUOTE    BREAK_QUOTE
16605 .ALIAS   BREAK_CITATION      BREAK_QUOTE
16606 .ALIAS   BREAK_CITE          BREAK_QUOTE
16607 .ALIAS   BLOCKQUOTE_INDENT   QUOTE_INDENT
16608 .ALIAS   CITATION            BLOCKQUOTE
16609 .ALIAS   CITATION_FAMILY     BLOCKQUOTE_FAMILY
16610 .ALIAS   CITATION_FONT       BLOCKQUOTE_FONT
16611 .ALIAS   CITATION_SIZE       BLOCKQUOTE_SIZE
16612 .ALIAS   CITATION_COLOR      BLOCKQUOTE_COLOR
16613 .ALIAS   CITATION_QUAD       BLOCKQUOTE_QUAD
16614 .ALIAS   CITE                BLOCKQUOTE
16615 .ALIAS   CITE_FAMILY         BLOCKQUOTE_FAMILY
16616 .ALIAS   CITE_FONT           BLOCKQUOTE_FONT
16617 .ALIAS   CITE_SIZE           BLOCKQUOTE_SIZE
16618 .ALIAS   CITE_COLOR          BLOCKQUOTE_COLOR
16619 .ALIAS   CITE_QUAD           BLOCKQUOTE_QUAD
16620 .ALIAS   DOC_R_MARGIN        DOC_RIGHT_MARGIN
16621 .ALIAS   DOC_L_MARGIN        DOC_LEFT_MARGIN
16622 .ALIAS   DOC_L_LENGTH        DOC_LINE_LENGTH
16623 .ALIAS   DOC_RMARGIN         DOC_RIGHT_MARGIN
16624 .ALIAS   DOC_LMARGIN         DOC_LEFT_MARGIN
16625 .ALIAS   DOC_LLENGTH         DOC_LINE_LENGTH
16626 .ALIAS   DOC_FAM             DOC_FAMILY
16627 .ALIAS   DOC_LS              DOC_LEAD
16628 .ALIAS   DOC_PS              DOC_PT_SIZE
16629 .ALIAS   FILL                QUAD
16630 .ALIAS   PAGENUM             PAGENUMBER
16631 .ALIAS   PAGINATION          PAGINATE
16632 .ALIAS   PP_FT               PP_FONT
16633 .ALIAS   REF_INDENT          INDENT_REFS
16634 .ALIAS   TOC_PS              TOC_PT_SIZE
16635 \#
16636 \# HEADER and FOOTER macros
16637 \# ------------------------
16638 \# Because the type-style of headers and footers are managed
16639 \# identically, and the type-style macros (_<type parameter>) all
16640 \# require the correct name of the calling macro, it's necessary
16641 \# to create HEADER_ and FOOTER_ macros here.  They're basically
16642 \# "aliases" of HDRFTR_, but required because you can't alias an
16643 \# alias.
16644 \#
16645 .MAC FOOTER_CENTER_COLOR END
16646 .    HDRFTR_CENTER_COLOR \\$1
16647 .END
16648 \#
16649 .MAC FOOTER_CENTER_COLOUR END
16650 .    HDRFTR_CENTER_COLOR \\$1
16651 .END
16652 \#
16653 .MAC FOOTER_CENTER_FAM END
16654 .    HDRFTR_CENTER_FAMILY \\$1
16655 .END
16656 \#
16657 .MAC FOOTER_CENTER_FAMILY END
16658 .    HDRFTR_CENTER_FAMILY \\$1
16659 .END
16660 \#
16661 .MAC FOOTER_CENTER_FONT END
16662 .    HDRFTR_CENTER_FONT \\$1
16663 .END
16664 \#
16665 .MAC FOOTER_CENTER_FT END
16666 .    HDRFTR_CENTER_FONT \\$1
16667 .END
16668 \#
16669 .MAC FOOTER_CENTER_PS END
16670 .    HDRFTR_CENTER_SIZE \\$1
16671 .END
16672 \#
16673 .MAC FOOTER_CENTER_SIZE END
16674 .    HDRFTR_CENTER_SIZE \\$1
16675 .END
16676 \#
16677 .MAC FOOTER_CENTRE_CAPS END
16678 .    HDRFTR_CENTER_CAPS \\$1
16679 .END
16680 \#
16681 .MAC FOOTER_CENTRE_COLOR END
16682 .    HDRFTR_CENTRE_COLOR \\$1
16683 .END
16684 \#
16685 .MAC FOOTER_CENTRE_COLOUR END
16686 .    HDRFTR_CENTRE_COLOR \\$1
16687 .END
16688 \#
16689 .MAC FOOTER_CENTRE_FAM END
16690 .    HDRFTR_CENTER_FAMILY \\$1
16691 .END
16692 \#
16693 .MAC FOOTER_CENTRE_FAMILY END
16694 .    HDRFTR_CENTER_FAMILY \\$1
16695 .END
16696 \#
16697 .MAC FOOTER_CENTRE_FONT END
16698 .    HDRFTR_CENTER_FONT \\$1
16699 .END
16700 \#
16701 .MAC FOOTER_CENTRE_FT END
16702 .    HDRFTR_CENTER_FONT \\$1
16703 .END
16704 \#
16705 .MAC FOOTER_CENTRE_PS END
16706 .    HDRFTR_CENTER_SIZE \\$1
16707 .END
16708 \#
16709 .MAC FOOTER_CENTRE_SIZE END
16710 .    HDRFTR_CENTER_SIZE \\$1
16711 .END
16712 \#
16713 .MAC FOOTER_COLOR END
16714 .    HDRFTR_COLOR \\$1
16715 .END
16716 \#
16717 .MAC FOOTER_COLOUR END
16718 .    HDRFTR_COLOR \\$1
16719 .END
16720 \#
16721 .MAC FOOTER_FAM END
16722 .    HDRFTR_FAMILY \\$1
16723 .END
16724 \#
16725 .MAC FOOTER_FAMILY END
16726 .    HDRFTR_FAMILY \\$1
16727 .END
16728 \#
16729 .MAC FOOTER_LEFT_COLOR END
16730 .    HDRFTR_LEFT_COLOR \\$1
16731 .END
16732 \#
16733 .MAC FOOTER_LEFT_COLOUR END
16734 .    HDRFTR_LEFT_COLOR \\$1
16735 .END
16736 \#
16737 .MAC FOOTER_LEFT_FAM END
16738 .    HDRFTR_LEFT_FAMILY \\$1
16739 .END
16740 \#
16741 .MAC FOOTER_LEFT_FAMILY END
16742 .    HDRFTR_LEFT_FAMILY \\$1
16743 .END
16744 \#
16745 .MAC FOOTER_LEFT_FONT END
16746 .    HDRFTR_LEFT_FONT \\$1
16747 .END
16748 \#
16749 .MAC FOOTER_LEFT_FT END
16750 .    HDRFTR_LEFT_FONT \\$1
16751 .END
16752 \#
16753 .MAC FOOTER_LEFT_PS END
16754 .    HDRFTR_LEFT_SIZE \\$1
16755 .END
16756 \#
16757 .MAC FOOTER_LEFT_SIZE END
16758 .    HDRFTR_LEFT_SIZE \\$1
16759 .END
16760 \#
16761 .MAC FOOTER_RIGHT_COLOR END
16762 .    HDRFTR_RIGHT_COLOR \\$1
16763 .END
16764 \#
16765 .MAC FOOTER_RIGHT_COLOUR END
16766 .    HDRFTR_RIGHT_COLOR \\$1
16767 .END
16768 \#
16769 .MAC FOOTER_RIGHT_FAM END
16770 .    HDRFTR_RIGHT_FAMILY \\$1
16771 .END
16772 \#
16773 .MAC FOOTER_RIGHT_FAMILY END
16774 .    HDRFTR_RIGHT_FAMILY \\$1
16775 .END
16776 \#
16777 .MAC FOOTER_RIGHT_FONT END
16778 .    HDRFTR_RIGHT_FONT \\$1
16779 .END
16780 \#
16781 .MAC FOOTER_RIGHT_FT END
16782 .    HDRFTR_RIGHT_FONT \\$1
16783 .END
16784 \#
16785 .MAC FOOTER_RIGHT_PS END
16786 .    HDRFTR_RIGHT_SIZE \\$1
16787 .END
16788 \#
16789 .MAC FOOTER_RIGHT_SIZE END
16790 .    HDRFTR_RIGHT_SIZE \\$1
16791 .END
16792 \#
16793 .MAC FOOTER_RULE_COLOR END
16794 .    HDRFTR_RULE_COLOR \\$1
16795 .END
16796 \#
16797 .MAC FOOTER_SIZE END
16798 .    HDRFTR_SIZE \\$1
16799 .END
16800 \#
16801 .MAC HEADER_CENTER_COLOR END
16802 .    HDRFTR_CENTER_COLOR \\$1
16803 .END
16804 \#
16805 .MAC HEADER_CENTER_COLOUR END
16806 .    HDRFTR_CENTER_COLOR \\$1
16807 .END
16808 \#
16809 .MAC HEADER_CENTER_FAM END
16810 .    HDRFTR_CENTER_FAMILY \\$1
16811 .END
16812 \#
16813 .MAC HEADER_CENTER_FAMILY END
16814 .    HDRFTR_CENTER_FAMILY \\$1
16815 .END
16816 \#
16817 .MAC HEADER_CENTER_FONT END
16818 .    HDRFTR_CENTER_FONT \\$1
16819 .END
16820 \#
16821 .MAC HEADER_CENTER_FT END
16822 .    HDRFTR_CENTER_FONT \\$1
16823 .END
16824 \#
16825 .MAC HEADER_CENTER_PS END
16826 .    HDRFTR_CENTER_SIZE \\$1
16827 .END
16828 \#
16829 .MAC HEADER_CENTER_SIZE END
16830 .    HDRFTR_CENTER_SIZE \\$1
16831 .END
16832 \#
16833 .MAC HEADER_CENTRE_COLOR END
16834 .    HDRFTR_CENTRE_COLOR \\$1
16835 .END
16836 \#
16837 .MAC HEADER_CENTRE_COLOUR END
16838 .    HDRFTR_CENTRE_COLOR \\$1
16839 .END
16840 \#
16841 .MAC HEADER_CENTRE_FAM END
16842 .    HDRFTR_CENTER_FAMILY \\$1
16843 .END
16844 \#
16845 .MAC HEADER_CENTRE_FAMILY END
16846 .    HDRFTR_CENTER_FAMILY \\$1
16847 .END
16848 \#
16849 .MAC HEADER_CENTRE_FONT END
16850 .    HDRFTR_CENTER_FONT \\$1
16851 .END
16852 \#
16853 .MAC HEADER_CENTRE_FT END
16854 .    HDRFTR_CENTER_FONT \\$1
16855 .END
16856 \#
16857 .MAC HEADER_CENTRE_PS END
16858 .    HDRFTR_CENTER_SIZE \\$1
16859 .END
16860 \#
16861 .MAC HEADER_CENTRE_SIZE END
16862 .    HDRFTR_CENTER_SIZE \\$1
16863 .END
16864 \#
16865 .MAC HEADER_COLOR END
16866 .    HDRFTR_COLOR \\$1
16867 .END
16868 \#
16869 .MAC HEADER_COLOUR END
16870 .    HDRFTR_COLOR \\$1
16871 .END
16872 \#
16873 .MAC HEADER_FAM END
16874 .    HDRFTR_FAMILY \\$1
16875 .END
16876 \#
16877 .MAC HEADER_FAMILY END
16878 .    HDRFTR_FAMILY \\$1
16879 .END
16880 \#
16881 .MAC HEADER_LEFT_COLOR END
16882 .    HDRFTR_LEFT_COLOR \\$1
16883 .END
16884 \#
16885 .MAC HEADER_LEFT_COLOUR END
16886 .    HDRFTR_LEFT_COLOR \\$1
16887 .END
16888 \#
16889 .MAC HEADER_LEFT_FAM END
16890 .    HDRFTR_LEFT_FAMILY \\$1
16891 .END
16892 \#
16893 .MAC HEADER_LEFT_FAMILY END
16894 .    HDRFTR_LEFT_FAMILY \\$1
16895 .END
16896 \#
16897 .MAC HEADER_LEFT_FONT END
16898 .    HDRFTR_LEFT_FONT \\$1
16899 .END
16900 \#
16901 .MAC HEADER_LEFT_FT END
16902 .    HDRFTR_LEFT_FONT \\$1
16903 .END
16904 \#
16905 .MAC HEADER_LEFT_PS END
16906 .    HDRFTR_LEFT_SIZE \\$1
16907 .END
16908 \#
16909 .MAC HEADER_LEFT_SIZE END
16910 .    HDRFTR_LEFT_SIZE \\$1
16911 .END
16912 \#
16913 .MAC HEADER_RIGHT_COLOR END
16914 .    HDRFTR_RIGHT_COLOR \\$1
16915 .END
16916 \#
16917 .MAC HEADER_RIGHT_COLOUR END
16918 .    HDRFTR_RIGHT_COLOR \\$1
16919 .END
16920 \#
16921 .MAC HEADER_RIGHT_FAM END
16922 .    HDRFTR_RIGHT_FAMILY \\$1
16923 .END
16924 \#
16925 .MAC HEADER_RIGHT_FAMILY END
16926 .    HDRFTR_RIGHT_FAMILY \\$1
16927 .END
16928 \#
16929 .MAC HEADER_RIGHT_FONT END
16930 .    HDRFTR_RIGHT_FONT \\$1
16931 .END
16932 \#
16933 .MAC HEADER_RIGHT_FT END
16934 .    HDRFTR_RIGHT_FONT \\$1
16935 .END
16936 \#
16937 .MAC HEADER_RIGHT_PS END
16938 .    HDRFTR_RIGHT_SIZE \\$1
16939 .END
16940 \#
16941 .MAC HEADER_RIGHT_SIZE END
16942 .    HDRFTR_RIGHT_SIZE \\$1
16943 .END
16944 \#
16945 .MAC HEADER_RULE_COLOR END
16946 .    HDRFTR_RULE_COLOR \\$1
16947 .END
16948 \#
16949 .MAC HEADER_SIZE END
16950 .    HDRFTR_SIZE \\$1
16951 .END
16952 \#
16953 \# HEADER and FOOTER aliases for HDRFTR macros.
16954 \#
16955 .ALIAS   BIBLIOGRAPHY_FOOTER_CENTER    BIBLIOGRAPHY_HDRFTR_CENTER
16956 .ALIAS   BIBLIOGRAPHY_FOOTER_CENTRE    BIBLIOGRAPHY_HDRFTR_CENTRE
16957 .ALIAS   BIBLIOGRAPHY_HEADER_CENTER    BIBLIOGRAPHY_HDRFTR_CENTER
16958 .ALIAS   BIBLIOGRAPHY_HEADER_CENTRE    BIBLIOGRAPHY_HDRFTR_CENTRE
16959 .ALIAS   ENDNOTES_FOOTER_CENTER    ENDNOTES_HDRFTR_CENTER
16960 .ALIAS   ENDNOTES_FOOTER_CENTRE    ENDNOTES_HDRFTR_CENTRE
16961 .ALIAS   ENDNOTES_HEADER_CENTER    ENDNOTES_HDRFTR_CENTER
16962 .ALIAS   ENDNOTES_HEADER_CENTRE    ENDNOTES_HDRFTR_CENTRE
16963 .ALIAS   FOOTER_CENTER_CAPS        HDRFTR_CENTER_CAPS
16964 .ALIAS   FOOTER_CENTER             HDRFTR_CENTER
16965 .ALIAS   FOOTER_CENTER_PAD         HDRFTR_CENTER_PAD
16966 .ALIAS   FOOTER_CENTRE             HDRFTR_CENTER
16967 .ALIAS   FOOTER_CENTRE_PAD         HDRFTR_CENTER_PAD
16968 .ALIAS   FOOTER_LEFT_CAPS          HDRFTR_LEFT_CAPS
16969 .ALIAS   FOOTER_LEFT               HDRFTR_LEFT
16970 .ALIAS   FOOTER_PLAIN              HDRFTR_PLAIN
16971 .ALIAS   FOOTER_RECTO              HDRFTR_RECTO
16972 .ALIAS   FOOTER_RIGHT_CAPS         HDRFTR_RIGHT_CAPS
16973 .ALIAS   FOOTER_RIGHT              HDRFTR_RIGHT
16974 .ALIAS   FOOTER_RULE_GAP           HDRFTR_RULE_GAP
16975 .ALIAS   FOOTER_RULE               HDRFTR_RULE
16976 .ALIAS   FOOTER_VERSO              HDRFTR_VERSO
16977 .ALIAS   HEADER_CENTER_CAPS        HDRFTR_CENTER_CAPS
16978 .ALIAS   HEADER_CENTER             HDRFTR_CENTER
16979 .ALIAS   HEADER_CENTER_PAD         HDRFTR_CENTER_PAD
16980 .ALIAS   HEADER_CENTRE_CAPS        HDRFTR_CENTER_CAPS
16981 .ALIAS   HEADER_CENTRE             HDRFTR_CENTER
16982 .ALIAS   HEADER_CENTRE_PAD         HDRFTR_CENTER_PAD
16983 .ALIAS   HEADER_LEFT_CAPS          HDRFTR_LEFT_CAPS
16984 .ALIAS   HEADER_LEFT               HDRFTR_LEFT
16985 .ALIAS   HEADER_PLAIN              HDRFTR_PLAIN
16986 .ALIAS   HEADER_RECTO              HDRFTR_RECTO
16987 .ALIAS   HEADER_RIGHT_CAPS         HDRFTR_RIGHT_CAPS
16988 .ALIAS   HEADER_RIGHT              HDRFTR_RIGHT
16989 .ALIAS   HEADER_RULE_GAP           HDRFTR_RULE_GAP
16990 .ALIAS   HEADER_RULE               HDRFTR_RULE
16991 .ALIAS   HEADER_VERSO              HDRFTR_VERSO
16992 .ALIAS   SWITCH_FOOTERS            SWITCH_HDRFTR
16993 .ALIAS   SWITCH_HEADERS            SWITCH_HDRFTR
16994 \#
16995 \# Type-style aliases
16996 \#
16997 .ALIAS   AUTHOR_FAMILY                    _FAMILY
16998 .ALIAS   BIBLIOGRAPHY_FAMILY              _FAMILY
16999 .ALIAS   BIBLIOGRAPHY_STRING_FAMILY       _FAMILY
17000 .ALIAS   BLOCKQUOTE_FAMILY                _FAMILY
17001 .ALIAS   CHAPTER_TITLE_FAMILY             _FAMILY
17002 .ALIAS   COVER_AUTHOR_FAMILY              _FAMILY
17003 .ALIAS   COVER_CHAPTER_TITLE_FAMILY       _FAMILY
17004 .ALIAS   COVER_COPYRIGHT_FAMILY           _FAMILY
17005 .ALIAS   COVER_DOCTYPE_FAMILY             _FAMILY
17006 .ALIAS   COVER_FAMILY                     _FAMILY
17007 .ALIAS   COVER_SUBTITLE_FAMILY            _FAMILY
17008 .ALIAS   COVER_TITLE_FAMILY               _FAMILY
17009 .ALIAS   DOC_COVER_AUTHOR_FAMILY          _FAMILY
17010 .ALIAS   DOC_COVER_CHAPTER_TITLE_FAMILY   _FAMILY
17011 .ALIAS   DOC_COVER_COPYRIGHT_FAMILY       _FAMILY
17012 .ALIAS   DOC_COVER_DOCTYPE_FAMILY         _FAMILY
17013 .ALIAS   DOC_COVER_FAMILY                 _FAMILY
17014 .ALIAS   DOC_COVER_SUBTITLE_FAMILY        _FAMILY
17015 .ALIAS   DOC_COVER_TITLE_FAMILY           _FAMILY
17016 .ALIAS   DOCHEADER_FAMILY                 _FAMILY
17017 .ALIAS   DOCTYPE_FAMILY                   _FAMILY
17018 .ALIAS   ENDNOTE_FAMILY                   _FAMILY
17019 .ALIAS   ENDNOTE_NUMBER_FAMILY            _FAMILY
17020 .ALIAS   ENDNOTE_LINENUMBER_FAMILY        _FAMILY
17021 .ALIAS   ENDNOTE_STRING_FAMILY            _FAMILY
17022 .ALIAS   ENDNOTE_TITLE_FAMILY             _FAMILY
17023 .ALIAS   EPIGRAPH_FAMILY                  _FAMILY
17024 .ALIAS   FOOTNOTE_FAMILY                  _FAMILY
17025 .ALIAS   HDRFTR_CENTER_FAMILY             _FAMILY
17026 .ALIAS   HDRFTR_FAMILY                    _FAMILY
17027 .ALIAS   HDRFTR_LEFT_FAMILY               _FAMILY
17028 .ALIAS   HDRFTR_RIGHT_FAMILY              _FAMILY
17029 .ALIAS   HEAD_FAMILY                      _FAMILY
17030 .ALIAS   LINENUMBER_FAMILY                _FAMILY
17031 .ALIAS   PAGENUM_FAMILY                   _FAMILY
17032 .ALIAS   PARAHEAD_FAMILY                  _FAMILY
17033 .ALIAS   QUOTE_FAMILY                     _FAMILY
17034 .ALIAS   SUBHEAD_FAMILY                   _FAMILY
17035 .ALIAS   SUBTITLE_FAMILY                  _FAMILY
17036 .ALIAS   TITLE_FAMILY                     _FAMILY
17037 .ALIAS   TOC_FAM                          _FAMILY
17038 .ALIAS   TOC_FAMILY                       _FAMILY
17039 .ALIAS   TOC_HEADER_FAMILY                _FAMILY
17040 .ALIAS   TOC_HEAD_FAMILY                  _FAMILY
17041 .ALIAS   TOC_PARAHEAD_FAMILY              _FAMILY
17042 .ALIAS   TOC_PN_FAMILY                    _FAMILY
17043 .ALIAS   TOC_SUBHEAD_FAMILY               _FAMILY
17044 .ALIAS   TOC_TITLE_FAMILY                 _FAMILY
17045 \#
17046 .ALIAS   AUTHOR_FONT                    _FONT
17047 .ALIAS   BIBLIOGRAPHY_STRING_FONT       _FONT
17048 .ALIAS   BIBLIOGRAPHY_FONT              _FONT
17049 .ALIAS   BLOCKQUOTE_FONT                _FONT
17050 .ALIAS   CHAPTER_TITLE_FONT             _FONT
17051 .ALIAS   COVER_AUTHOR_FONT              _FONT
17052 .ALIAS   COVER_CHAPTER_TITLE_FONT       _FONT
17053 .ALIAS   COVER_COPYRIGHT_FONT           _FONT
17054 .ALIAS   COVER_DOCTYPE_FONT             _FONT
17055 .ALIAS   COVER_SUBTITLE_FONT            _FONT
17056 .ALIAS   COVER_TITLE_FONT               _FONT
17057 .ALIAS   DOC_COVER_AUTHOR_FONT          _FONT
17058 .ALIAS   DOC_COVER_CHAPTER_TITLE_FONT   _FONT
17059 .ALIAS   DOC_COVER_COPYRIGHT_FONT       _FONT
17060 .ALIAS   DOC_COVER_DOCTYPE_FONT         _FONT
17061 .ALIAS   DOC_COVER_SUBTITLE_FONT        _FONT
17062 .ALIAS   DOC_COVER_TITLE_FONT           _FONT
17063 .ALIAS   DOCTYPE_FONT                   _FONT
17064 .ALIAS   ENDNOTE_FONT                   _FONT
17065 .ALIAS   ENDNOTE_NUMBER_FONT            _FONT
17066 .ALIAS   ENDNOTE_LINENUMBER_FONT        _FONT
17067 .ALIAS   ENDNOTE_STRING_FONT            _FONT
17068 .ALIAS   ENDNOTE_TITLE_FONT             _FONT
17069 .ALIAS   EPIGRAPH_FONT                  _FONT
17070 .ALIAS   FOOTNOTE_FONT                  _FONT
17071 .ALIAS   HDRFTR_CENTER_FONT             _FONT
17072 .ALIAS   HDRFTR_LEFT_FONT               _FONT
17073 .ALIAS   HDRFTR_RIGHT_FONT              _FONT
17074 .ALIAS   HEAD_FONT                      _FONT
17075 .ALIAS   LINENUMBER_FONT                _FONT
17076 .ALIAS   PAGENUM_FONT                   _FONT
17077 .ALIAS   PARAHEAD_FONT                  _FONT
17078 .ALIAS   QUOTE_FONT                     _FONT
17079 .ALIAS   SUBHEAD_FONT                   _FONT
17080 .ALIAS   SUBTITLE_FONT                  _FONT
17081 .ALIAS   TITLE_FONT                     _FONT
17082 .ALIAS   TOC_HEADER_FONT                _FONT
17083 .ALIAS   TOC_HEAD_FONT                  _FONT
17084 .ALIAS   TOC_PARAHEAD_FONT              _FONT
17085 .ALIAS   TOC_PN_FONT                    _FONT
17086 .ALIAS   TOC_SUBHEAD_FONT               _FONT
17087 .ALIAS   TOC_TITLE_FONT                 _FONT
17088 \#
17089 .ALIAS   AUTHOR_SIZE                    _SIZE
17090 .ALIAS   BIBLIOGRAPHY_STRING_SIZE       _SIZE
17091 .ALIAS   BLOCKQUOTE_SIZE                _SIZE
17092 .ALIAS   CHAPTER_TITLE_SIZE             _SIZE
17093 .ALIAS   COVER_AUTHOR_SIZE              _SIZE
17094 .ALIAS   COVER_CHAPTER_TITLE_SIZE       _SIZE
17095 .ALIAS   COVER_COPYRIGHT_SIZE           _SIZE
17096 .ALIAS   COVER_DOCTYPE_SIZE             _SIZE
17097 .ALIAS   COVER_SUBTITLE_SIZE            _SIZE
17098 .ALIAS   COVER_TITLE_SIZE               _SIZE
17099 .ALIAS   DOC_COVER_AUTHOR_SIZE          _SIZE
17100 .ALIAS   DOC_COVER_CHAPTER_TITLE_SIZE   _SIZE
17101 .ALIAS   DOC_COVER_COPYRIGHT_SIZE       _SIZE
17102 .ALIAS   DOC_COVER_DOCTYPE_SIZE         _SIZE
17103 .ALIAS   DOC_COVER_SUBTITLE_SIZE        _SIZE
17104 .ALIAS   DOC_COVER_TITLE_SIZE           _SIZE
17105 .ALIAS   DOCTYPE_SIZE                   _SIZE
17106 .ALIAS   ENDNOTE_NUMBER_SIZE            _SIZE
17107 .ALIAS   ENDNOTE_LINENUMBER_SIZE        _SIZE
17108 .ALIAS   ENDNOTE_STRING_SIZE            _SIZE
17109 .ALIAS   ENDNOTE_TITLE_SIZE             _SIZE
17110 .ALIAS   EPIGRAPH_SIZE                  _SIZE
17111 .ALIAS   FOOTNOTE_SIZE                  _SIZE
17112 .ALIAS   HDRFTR_CENTER_SIZE             _SIZE
17113 .ALIAS   HDRFTR_LEFT_SIZE               _SIZE
17114 .ALIAS   HDRFTR_RIGHT_SIZE              _SIZE
17115 .ALIAS   HDRFTR_SIZE                    _SIZE
17116 .ALIAS   HEAD_SIZE                      _SIZE
17117 .ALIAS   LINENUMBER_SIZE                _SIZE
17118 .ALIAS   PAGENUM_SIZE                   _SIZE
17119 .ALIAS   PARAHEAD_SIZE                  _SIZE
17120 .ALIAS   QUOTE_SIZE                     _SIZE
17121 .ALIAS   SUBHEAD_SIZE                   _SIZE
17122 .ALIAS   SUBTITLE_SIZE                  _SIZE
17123 .ALIAS   TITLE_SIZE                     _SIZE
17124 .ALIAS   TOC_HEADER_SIZE                _SIZE
17125 .ALIAS   TOC_HEAD_SIZE                  _SIZE
17126 .ALIAS   TOC_PARAHEAD_SIZE              _SIZE
17127 .ALIAS   TOC_PN_SIZE                    _SIZE
17128 .ALIAS   TOC_SUBHEAD_SIZE               _SIZE
17129 .ALIAS   TOC_TITLE_SIZE                 _SIZE
17130 \#
17131 .ALIAS   ATTRIBUTE_COLOR                 _COLOR
17132 .ALIAS   AUTHOR_COLOR                    _COLOR
17133 .ALIAS   BLOCKQUOTE_COLOR                _COLOR
17134 .ALIAS   CHAPTER_TITLE_COLOR             _COLOR
17135 .ALIAS   COVER_ATTRIBUTE_COLOR           _COLOR
17136 .ALIAS   COVER_AUTHOR_COLOR              _COLOR
17137 .ALIAS   COVER_CHAPTER_TITLE_COLOR       _COLOR
17138 .ALIAS   COVER_COLOR                     _COLOR
17139 .ALIAS   COVER_COPYRIGHT_COLOR           _COLOR
17140 .ALIAS   COVER_DOCTYPE_COLOR             _COLOR
17141 .ALIAS   COVER_MISC_COLOR                _COLOR
17142 .ALIAS   COVER_SUBTITLE_COLOR            _COLOR
17143 .ALIAS   COVER_TITLE_COLOR               _COLOR
17144 .ALIAS   DOC_COVER_ATTRIBUTE_COLOR       _COLOR
17145 .ALIAS   DOC_COVER_AUTHOR_COLOR          _COLOR
17146 .ALIAS   DOC_COVER_CHAPTER_TITLE_COLOR   _COLOR
17147 .ALIAS   DOC_COVER_COLOR                 _COLOR
17148 .ALIAS   DOC_COVER_COPYRIGHT_COLOR       _COLOR
17149 .ALIAS   DOC_COVER_DOCTYPE_COLOR         _COLOR
17150 .ALIAS   DOC_COVER_MISC_COLOR            _COLOR
17151 .ALIAS   DOC_COVER_SUBTITLE_COLOR        _COLOR
17152 .ALIAS   DOC_COVER_TITLE_COLOR           _COLOR
17153 .ALIAS   DOCHEADER_COLOR                 _COLOR
17154 .ALIAS   DOCTYPE_COLOR                   _COLOR
17155 .ALIAS   EPIGRAPH_COLOR                  _COLOR
17156 .ALIAS   FINIS_COLOR                     _COLOR
17157 .ALIAS   FOOTNOTE_COLOR                  _COLOR
17158 .ALIAS   HDRFTR_CENTER_COLOR             _COLOR
17159 .ALIAS   HDRFTR_COLOR                    _COLOR
17160 .ALIAS   HDRFTR_LEFT_COLOR               _COLOR
17161 .ALIAS   HDRFTR_RIGHT_COLOR              _COLOR
17162 .ALIAS   HDRFTR_RULE_COLOR               _COLOR
17163 .ALIAS   HEAD_COLOR                      _COLOR
17164 .ALIAS   LINEBREAK_COLOR                 _COLOR
17165 .ALIAS   LINENUMBER_COLOR                _COLOR
17166 .ALIAS   PAGENUM_COLOR                   _COLOR
17167 .ALIAS   PARAHEAD_COLOR                  _COLOR
17168 .ALIAS   QUOTE_COLOR                     _COLOR
17169 .ALIAS   SUBHEAD_COLOR                   _COLOR
17170 .ALIAS   SUBTITLE_COLOR                  _COLOR
17171 .ALIAS   TITLE_COLOR                     _COLOR
17172 \#
17173 .ALIAS   BIBLIOGRAPHY_QUAD          _QUAD
17174 .ALIAS   BIBLIOGRAPHY_STRING_QUAD   _QUAD
17175 .ALIAS   BLOCKQUOTE_QUAD            _QUAD
17176 .ALIAS   COVER_COPYRIGHT_QUAD       _QUAD
17177 .ALIAS   COVER_MISC_QUAD            _QUAD
17178 .ALIAS   DOC_COVER_COPYRIGHT_QUAD   _QUAD
17179 .ALIAS   DOC_COVER_MISC_QUAD        _QUAD
17180 .ALIAS   DOC_QUAD                   _QUAD
17181 .ALIAS   ENDNOTE_QUAD               _QUAD
17182 .ALIAS   ENDNOTE_STRING_QUAD        _QUAD
17183 .ALIAS   ENDNOTE_TITLE_QUAD         _QUAD
17184 .ALIAS   EPIGRAPH_QUAD              _QUAD
17185 .ALIAS   FOOTNOTE_QUAD              _QUAD
17186 .ALIAS   HEAD_QUAD                  _QUAD
17187 .ALIAS   SUBHEAD_QUAD               _QUAD
17188 .ALIAS   TOC_HEADER_QUAD            _QUAD
17189 \#
17190 \# Support aliases
17191 \#
17192 .ALIAS   COL_BREAK             COL_NEXT
17193 .ALIAS   DOC_COVER_ADVANCE     COVER_ADVANCE
17194 .ALIAS   DOC_COVER             COVER
17195 .ALIAS   DOC_COVERS            COVERS
17196 .ALIAS   DOC_COVER_LEAD        COVER_LEAD
17197 .ALIAS   DOC_COVERTITLE        COVERTITLE
17198 .ALIAS   DO_DOC_COVER          DO_COVER
17199 .ALIAS   PRINT_FOOTNOTE_RULE   FOOTNOTE_RULE
17200 \#
17201 \# Miscellaneous aliases
17202 .ALIAS  SECTION       LINEBREAK
17203 .ALIAS  SECTION_CHAR  LINEBREAK_CHAR
17204 \#
17205 \# Miscellaneous macros to take care of backward compatibility
17206 \# -----------------------------------------------------------
17207 \#
17208 \# As of 1.1.9, EL and TN got changed to make TRAP...TRAP OFF
17209 \# unnecessary for users.  However, I used both macros extensively
17210 \# throughout this file (in conjunction with TRAP...TRAP OFF).
17211 \# EOL is the "old" EL, for the personal use of om.tmac
17212 \#
17213 .MAC EOL END
17214 .    TRAP OFF
17215 .    br
17216 .    sp -1v
17217 .    TRAP
17218 .END
17219 \#
17220 \# REFER SUPPORT
17221 \# -------------
17222 \#
17223 \# Footnote references
17224 \# -------------------
17225 \# *Function:
17226 \#   Instruct REF to put references in footnotes.
17227 \#
17228 .MAC FOOTNOTE_REFS END
17229 .    if r#EN_REF \{ .rr #EN_REF \}
17230 .    nr #FN_REF 1
17231 .END
17232 \#
17233 \# Endnote references
17234 \# ------------------
17235 \# *Function:
17236 \#   Instruct REF to collect references for endnotes output.
17237 \#
17238 .MAC ENDNOTE_REFS END
17239 .    if r#FN_REF \{ .rr #FN_REF \}
17240 .    nr #EN_REF 1
17241 .END
17242 \#
17243 \# Prepare mom for a reference
17244 \# ---------------------------
17245 \# *Argument:
17246 \#   <none> | INDENT  L|LEFT|R|RIGHT|B|BOTH  <indent value>
17247 \# *Function:
17248 \#   Calls FOOTNOTE or ENDNOTE, depending on whether #REF_FN or
17249 \#   #REF_EN is set to 1.
17250 \# *Notes:
17251 \#   For convenience, REF is a toggle.
17252 \#
17253 \#   REF optionally takes the same arguments as FOOTNOTE, allowing
17254 \#   users to indent references that go in footnotes when footnote
17255 \#   indenting is required.  FOOTNOTE_REFS must be on for this.
17256 \#
17257 .MAC REF END
17258 .    ie \\n[#FN_REF]+\\n[#EN_REF]=0 \{\
17259 .       if !\\n[#REF_WARNING]=1 \{\
17260 .          tm1 "[mom]: Before REF at line \\n(.c, neither FOOTNOTE_REFS nor ENDNOTE_REFS
17261 .          tm1 "       has been selected.  If "sort" and "accumulate" are in your refer
17262 .          tm1 "       commands, references will be collected for later output with $LIST$.
17263 .          tm1 "       Otherwise, they will disappear.
17264 .          nr #REF_WARNING 1
17265 .       \}
17266 .    \}
17267 .    el \{\
17268 .       ie \\n[#REF]=1 \{\
17269 .          if \\n[#FN_REF]=1 \{ .FOOTNOTE OFF \}
17270 .          if \\n[#EN_REF]=1 \{ .ENDNOTE OFF  \}
17271 .          rr #REF
17272 .       \}
17273 .       el \{\
17274 .          rr #REF_WARNING
17275 .          nr #REF 1
17276 .          if \\n[#FN_REF]=1 \{ .FOOTNOTE \\$1 \\$2 \\$3 \}
17277 .          if \\n[#EN_REF]=1 \{ .ENDNOTE  \}
17278 .       \}
17279 .    \}
17280 .END
17281 \#
17282 \# Embedded references in text (with brackets)
17283 \# -------------------------------------------
17284 \#
17285 .MAC REF_BRACKETS_START END
17286 .    ds $CURRENT_EV \\n[.ev]
17287 .    ev REFERENCE
17288 .    evc  \\*[$CURRENT_EV]
17289 .    di REFERENCE
17290 .END
17291 \#
17292 .MAC REF_BRACKETS_END END
17293 .    br
17294 .    di
17295 .    ev
17296 .    chop REFERENCE
17297 .    unformat REFERENCE
17298 .    if '\\$0'REF)' \{ .nop (\\*[REFERENCE]) \}
17299 .    if '\\$0'REF]' \{ .nop [\\*[REFERENCE]] \}
17300 .    if '\\$0'REF}' \{ .nop {\\*[REFERENCE]} \}
17301 .END
17302 \#
17303 \# These three pairs of aliases allow users to embed references in
17304 \# text and have them surrounded by (), [] or {}.
17305 \#
17306 .ALIAS REF( REF_BRACKETS_START
17307 .ALIAS REF) REF_BRACKETS_END
17308 \#
17309 .ALIAS REF[ REF_BRACKETS_START
17310 .ALIAS REF{ REF_BRACKETS_START
17311 \#
17312 .ALIAS REF} REF_BRACKETS_END
17313 .ALIAS REF] REF_BRACKETS_END
17314 \#
17315 \# Second-line indent for refs
17316 \# ---------------------------
17317 \# *Argument:
17318 \#   FOOTNOTE | ENDNOTE | BIBLIO <indent for 2nd and subsequent lines of discrete reference entries>
17319 \# *Function:
17320 \#   Sets strings $REF_FN_INDENT, $REF_EN_INDENT or $REF_BIB_INDENT.
17321 \# *Notes:
17322 \#   Indent value requires a unit of measure.
17323 \#
17324 .MAC INDENT_REFS END
17325 .    if '\\$1'FOOTNOTE' .ds $REF_FN_INDENT \\$2
17326 .    if '\\$1'ENDNOTE'  .ds $REF_EN_INDENT \\$2
17327 .    if '\\$1'BIBLIO'   .ds $REF_BIB_INDENT \\$2
17328 .END
17329 \#
17330 \# Hyphenation of references
17331 \# -------------------------
17332 \# *Argument:
17333 \#   <none> | <anything>
17334 \# *Function:
17335 \#   Sets register #REF_HY
17336 \#
17337 .MAC HYPHENATE_REFS END
17338 .    ie '\\$1'' \{ .nr #REF_HY 1 \}
17339 .    el \{\
17340 .       if r#REF_HY \{ .rr #REF_HY \}
17341 .    \}
17342 .END
17343 \#
17344 \# The remainder of the definitions in this section are modified
17345 \# versions of the definitions found in the refer module of s.tmac.
17346 \#
17347 \# This one is directly from s.tmac.
17348 \#
17349 .de @error
17350 .tm \\n(.F:\\n(.c: macro error: \\$*
17351 ..
17352 \#
17353 \# The following strings define the order of entries for different
17354 \# types of references.  Each letter in the string refers to a database
17355 \# field (A for author, T1/T2 for article and book titles, etc).
17356 \# Mom is set up for MLA-style bibliographies.  Other styles can be
17357 \# implemented here by re-ordering the fields.
17358 \#
17359 \# Book - type 2
17360 .ds ref*spec!2 Q A T1 d t l r E S e V a C I D P O
17361 \# Article within book - type 3
17362 .ds ref*spec!3 Q A T2 B d t l r E S e V a C I D P O
17363 \# Journal article - type 1
17364 .ds ref*spec!1 Q A T2 J S N D P O
17365 \# Tech report - type 4
17366 .ds ref*spec!4 Q A T1 R G C I D P O
17367 \# Internet site - type 0
17368 .ds ref*spec!0 Q A T2 s E c d o a u O
17369 \#
17370 \# Refer's "1st" macro.  Since it is possible to define database
17371 \# fields using any single letter, we remove all possible string
17372 \# definitions of the form [X and [x
17373 \#
17374 .de ]-
17375 .rm [A [B [C [D [E [F [G [H [I [J [K [L [M \
17376     [N [O [P [Q [R [S [T [U [V [W [X [Y [Z \
17377 .   [a [b [c [d [e [f [g [h [i [j [k [l [m \
17378     [n [o [p [q [r [s [t [u [v [w [x [y [z
17379 .rm ref*string
17380 .rr ref*type
17381 ..
17382 \#
17383 \# Refer's "2nd" macro; builds up a reference with ref*build, and
17384 \# prints it with ref*print.
17385 \#
17386 .de ][
17387 .nr ref*type \\$1
17388 .if \\n[ref*type]=3 \{\
17389 .   if !'\\*([R'' \{\
17390 .      nr ref*type 4
17391 .      ds ref*spec!4 Q A T2 B R C I D P O
17392 .   \}
17393 .   if !'\\*([G'' \{\
17394 .      nr ref*type 4
17395 .      ds ref*spec!4 Q A T2 B G C I D P O
17396 .   \}
17397 .\}
17398 .if r [T \{\
17399 .   als [T1 [T
17400 .   als [T2 [T
17401 .\}
17402 .ie d ref*spec!\\n[ref*type] .ref*build \\*[ref*spec!\\n[ref*type]]
17403 .el \{\
17404 .   @error unknown reference type `\\n[ref*type]'
17405 .   ref*build \\*[ref*spec!0]
17406 .\}
17407 .if !\\n[.hy]=0 \{\
17408 .nr #RESTORE_HY \\n[.hy]
17409 .if !r#REF_HY .nh
17410 .\}
17411 .ref*print
17412 .if !\\n[#RESTORE_HY]=0 .hy \\n[#RESTORE_HY]
17413 .rr #RESTORE_HY
17414 .rm ref*string
17415 .rm [F [T1 [T2
17416 ..
17417 \#
17418 \# Refer's "3rd" macros, which set up and terminate the output
17419 \# of collected references
17420 \#
17421 .de ]<
17422 .als ref*print ref*end-print
17423 .nr #REF 1
17424 .if \\n[#BIB_LIST]=1 \{\
17425 .   nr #IN_BIB_LIST 1
17426 .   LIST DIGIT \\*[$BIB_LIST_SEPARATOR] \\*[$BIB_LIST_PREFIX]
17427 .\}
17428 ..
17429 \#
17430 .de ]>
17431 .LIST OFF
17432 .rr #REF
17433 .rr #IN_BIB_LIST
17434 .als ref*print ref*normal-print
17435 ..
17436 \#
17437 \# Output
17438 \# ------
17439 \#
17440 \# Output normal, non-collected refs
17441 \#
17442 .de ref*normal-print
17443 .nr #CURRENT_HY \\n[.hy]
17444 \\*[ref*string]
17445 ..
17446 \#
17447 \# Output collected refs
17448 \#
17449 .de ref*end-print
17450 .\" 10 is abritrary
17451 .nn 10
17452 .ie \\n[#BIB_LIST]=0 \{\
17453 .in +\\*[$REF_BIB_INDENT]
17454 .ti -\\*[$REF_BIB_INDENT]
17455 .\}
17456 .el .ITEM
17457 \\*[ref*string]
17458 .sp \\n[#BIB_SPACE]u
17459 .ie \\n[#BIB_LIST]=0 .in
17460 .el .IL -\\*[$REF_BIB_INDENT]u
17461 .nn 0
17462 ..
17463 \#
17464 .als ref*print ref*normal-print
17465 \#
17466 \# Build up the ref*string
17467 \#
17468 \# Correct MLA "typewritten" style (printstyle TYPEWRITE) demands
17469 \# two spaces after each period.  The spaces are hardwired into the
17470 \# string definitions (ref*add-<x>), so we have to make sure that there
17471 \# aren't two spaces when the printstyle is TYPESET.  Since I find that
17472 \# references look a bit crowded with 0 sentence space, I've bumped it
17473 \# up to +4.  User's sentence spacing is reset in FOOTNOTES and ENDNOTES.
17474 \#
17475 .de ref*build
17476 .if \\n[#PRINT_STYLE]=2 \{\
17477 .   ds $RESTORE_SS_VAR \\*[$SS_VAR]
17478 .   SS +4
17479 .\}
17480 \#.rm ref*string ref*post-punct
17481 .rm ref*string
17482 .nr ref*suppress-period 1
17483 .while \\n[.$] \{\
17484 .   if d [\\$1 \{\
17485 .      ie d ref*add-\\$1 .ref*add-\\$1
17486 .      el .ref*add-dflt \\$1
17487 .   \}
17488 .   shift
17489 .\}
17490 .\" now add a final period
17491 .ie d ref*string \{\
17492 .   if !\\n[ref*suppress-period] .as ref*string .
17493 .   if d ref*post-punct \{\
17494 .      as ref*string "\\*[ref*post-punct]
17495 .      rm ref*post-punct
17496 .   \}
17497 .\}
17498 .el .ds ref*string
17499 ..
17500 \#
17501 \# The following macros determine how entries are formatted WRT
17502 \# punctuation, type style, additional strings, etc.
17503 \#
17504 \# o First argument is the database field letter.
17505 \# o Second argument is the punctuation character to use to separate this
17506 \#   field from the previous field.
17507 \# o Third argument is a string with which to prefix this field.
17508 \# o Fourth argument is a string with which to postfix this field.
17509 \# o Fifth argument is a string to add after the punctuation character
17510 \#   supplied by the next field.
17511 \#
17512 \# %A Author(s)
17513 .de ref*add-A
17514 .ref*field A ,
17515 .if r [A .nr ref*suppress-period \\n([A
17516 ..
17517 \# %T Title (generic)
17518 .de ref*add-T1
17519 .ref*field T . " \E*[IT]" "" \E*[PREV]
17520 .if \\n([T .nr ref*suppress-period \\n([T
17521 ..
17522 \# %T Title of a chapter or article
17523 .de ref*add-T2
17524 .ref*field T . " \(lq" "" "\(rq"
17525 .if \\n([T .nr ref*suppress-period \\n([T
17526 ..
17527 \# %B Book title (when citing an article from a book)
17528 .de ref*add-B
17529 .ie \\n([T .ref*field B "" ".\E*[IT]" "" \E*[PREV]
17530 .el .ref*field B . " \E*[IT]" "" \E*[PREV]
17531 \# refer doesn't set reg [T to 1 for these book titles, so we do it here
17532 .ds eval*[B \\*([B
17533 .substring eval*[B -1
17534 .rr [T
17535 .if '\\*[eval*[B]'!' .nr [T 1
17536 .if '\\*[eval*[B]'?' .nr [T 1
17537 .rm eval*[B
17538 ..
17539 \# %R Report number for technical reports
17540 .de ref*add-R
17541 .ref*field R . " "
17542 ..
17543 \# %J Journal name
17544 .de ref*add-J
17545 .ie \\n([T .ref*field J "" " \E*[IT]" "" \E*[PREV]
17546 .el .ref*field J . " \E*[IT]" "" \E*[PREV]
17547 ..
17548 \# %E Editor(s)
17549 .de ref*add-E
17550 .ie !\\n[ref*type]=0 \{\
17551 .   ie \\n([E>0 \{\
17552 .      ie \\n([T .ref*field E "" " Eds. "
17553 .      el .ref*field E . " Eds. "
17554 .   \}
17555 .   el \{\
17556 .      ie \\n([T .ref*field E "" " Ed. "
17557 .      el .ref*field E . " Ed. "
17558 .   \}
17559 .\}
17560 .el \{\
17561 .   ie \\n([T .ref*field E "" " "
17562 .   el .ref*field E . " "
17563 .\}
17564 .rr [T
17565 ..
17566 \# %e Edition
17567 .de ref*add-e
17568 .ie \\n([T .ref*field e "" " " " edition"
17569 .el .ref*field e . " " " edition"
17570 .rr [T
17571 ..
17572 \# %V Volume (of a journal, or series of books)
17573 .de ref*add-V
17574 .if \\n[ref*type]=1 \{\
17575 .   ref*field V 
17576 .\}
17577 .if \\n[ref*type]=2 \{\
17578 .   ie \\n([T .ref*field V "" " "
17579 .   el .ref*field V . " "
17580 .\}
17581 .if \\n[ref*type]=3 \{\
17582 .   ie \\n([T .ref*field V "" " "
17583 .   el .ref*field V . " "
17584 .\}
17585 .rr [T
17586 ..
17587 \# %N Journal number
17588 .de ref*add-N
17589 .ref*field N 
17590 ..
17591 \# %S Series (books or journals)
17592 .de ref*add-S
17593 .if \\n[ref*type]=1 \{\
17594 .   ref*field S
17595 .\}
17596 .if \\n[ref*type]=2 \{\
17597 .   ie \\n([T .ref*field S "" " "
17598 .   el .ref*field S . " "
17599 .\}
17600 .if \\n[ref*type]=3 \{\
17601 .   ie \\n([T .ref*field S "" " "
17602 .   el .ref*field S . " "
17603 .\}
17604 .rr [T
17605 \# refer doesn't set reg [T to 1 for series titles, so we do it here
17606 .ds eval*[S \\*([S
17607 .substring eval*[S -1
17608 .if '\\*[eval*[S]'!' .nr [T 1
17609 .if '\\*[eval*[S]'?' .nr [T 1
17610 .rm eval*[S
17611 ..
17612 \# %C City
17613 .de ref*add-C
17614 .ie \\n([T .ref*field C "" " "
17615 .el .ref*field C . " "
17616 .rr [T
17617 ..
17618 \# %I Publisher (I stands for Issuer)
17619 .de ref*add-I
17620 .ie !'\\*([C'' .ref*field I :
17621 .el \{\
17622 .   ie \\n([T .ref*field I "" " "
17623 .   el .ref*field I . " "
17624 .\}
17625 .rr [T
17626 ..
17627 \# %D Date of publication
17628 .de ref*add-D
17629 .if \\n[ref*type]=1 \{\
17630 .   ie !'\\*([V''.ref*field D "" "(" ")"
17631 .   el .ref*field D
17632 .\}
17633 .if \\n[ref*type]=2 .ref*field D ,
17634 .if \\n[ref*type]=3 \{\
17635 .   ie '\\*([C'' \{\
17636 .      ie '\\*([I'' .ref*field D . " "
17637 .      el .ref*field D ,
17638 .   \}
17639 .   el .ref*field D ,
17640 .\}
17641 .if \\n[ref*type]=4 .ref*field D ,
17642 ..
17643 \# %P Page number(s)
17644 .de ref*add-P
17645 .ie \\n[ref*type]=1 .ref*field P : 
17646 .el .ref*field P . " "
17647 ..
17648 \# %G Gov't. ordering number
17649 .de ref*add-G
17650 .ref*field G . " "
17651 ..
17652 \# %O Other (usually goes at end of ref)
17653 .de ref*add-O
17654 .ref*field O . " "
17655 .ie r [O .nr ref*suppress-period \\n([O
17656 .el .nr ref*suppress-period 1
17657 ..
17658 \#
17659 .de ref*add-dflt
17660 .ref*field \\$1 ,
17661 ..
17662 \#
17663 \# Book reprints
17664 \# -------------
17665 \# %d date of publication (the orignal date of publication)
17666 .de ref*add-d
17667 .ie \\n([T .ref*field d "" " "
17668 .el .ref*field d . " "
17669 .rr [T
17670 ..
17671 \# %a additions (such as a new intro to reprints)
17672 .de ref*add-a
17673 .ie \\n([T .ref*field a "" " "
17674 .el .ref*field a . " "
17675 .rr [T
17676 ..
17677 \# %t title, if different from original title (the T field, which s/b
17678 \# the original title)
17679 .de ref*add-t
17680 .ie \\n([T .ref*field t "" " Rpt. as \E*[IT]" "" \E*[PREV]
17681 .el .ref*field t . " Rpt. as \E*[IT]" "" \E*[PREV]
17682 .rr [T
17683 ..
17684 \#
17685 \# Translated works
17686 \# ----------------
17687 \# %l Trans(l)ator
17688 .de ref*add-l
17689 .ie \\n([T .ref*field l "" " Trans. "
17690 .el .ref*field l . " Trans. "
17691 .rr [T
17692 ..
17693 \# %r Translato(r) and edito(r)
17694 .de ref*add-r
17695 .ie \\n([T .ref*field r "" " Trans. and Ed. "
17696 .el .ref*field r . " Trans. and Ed. " 
17697 .rr [T
17698 ..
17699 \#
17700 \# Internet
17701 \# --------
17702 \# %s Site name
17703 .de ref*add-s
17704 .ie \\n([s .ref*field s "" ".\E*[IT]" "" \E*[PREV]
17705 .el .ref*field s . " \E*[IT]" "" \E*[PREV]
17706 .\" refer doesn't set reg [T to 1 for these book titles, so we do it here
17707 .ds eval*[s \\*([s
17708 .substring eval*[s -1
17709 .rr [T
17710 .if '\\*[eval*[s]'!' .nr [T 1
17711 .if '\\*[eval*[s]'?' .nr [T 1
17712 .rm eval*[s
17713 ..
17714 \# %c content of site, if unclear (i.e. advertisement, cartoon,
17715 \# interview, etc.)
17716 .de ref*add-c
17717 .ie \\n([T .ref*field c "" " "
17718 .el .ref*field c . " "
17719 .rr [T
17720 ..
17721 \# %o organization, group or sponsor of site
17722 .de ref*add-o
17723 .ie \\n([T .ref*field o "" " "
17724 .el .ref*field o . " "
17725 .rr [T
17726 ..
17727 \# %a access date, i.e. the date you read it
17728 .de ref*add-a
17729 .ie \\n([T .ref*field a "" " "
17730 .el .ref*field a . " "
17731 .rr [T
17732 ..
17733 \# %u URL
17734 .de ref*add-u
17735 .ref*field u "" " <" ">"
17736 .rr [T
17737 ..
17738 \#
17739 \# Build up reference string from ref*add-<x> macros.
17740 \#
17741 .de ref*field
17742 .if d ref*string \{\
17743 .   ie d ref*post-punct \{\
17744 .      as ref*string "\\$2\\*[ref*post-punct] \"
17745 .      rm ref*post-punct
17746 .   \}
17747 .   el .as ref*string "\\$2 \"
17748 .\}
17749 .as ref*string "\\$3\\*([\\$1\\$4
17750 .if \\n[.$]>4 .ds ref*post-punct "\\$5
17751 .nr ref*suppress-period 0
17752 ..
17753 \#
17754 \# MARGIN NOTES
17755 \# ------------
17756 \# This is a wrapper for MNinit.
17757 \#
17758 \# I could use a 'while' loop to assign args to strings, but too many
17759 \# 'while' loops are slowing things down.
17760 \#
17761 .MAC MN_INIT END
17762 .    if !'\\$1'rerun' \{\
17763 .       ds $MN-arg1 \\$1
17764 .       ie '\\$2'' .ds $MN-arg2 @
17765 .       el .ds $MN-arg2 \\$2
17766 .       ie '\\$3'' .ds $MN-arg3 @
17767 .       el .ds $MN-arg3 \\$3
17768 .       ie '\\$4'' .ds $MN-arg4 @
17769 .       el .ds $MN-arg4 \\$4
17770 .       ie '\\$5'' .ds $MN-arg5 @
17771 .       el .ds $MN-arg5 \\$5
17772 .       ie '\\$6'' .ds $MN-arg6 @
17773 .       el .ds $MN-arg6 \\$6
17774 .       ie '\\$7'' .ds $MN-arg7 @
17775 .       el .ds $MN-arg7 \\$7
17776 .       ie '\\$8'' .ds $MN-arg8 @
17777 .       el .ds $MN-arg8 \\$8
17778 .       ie '\\$9'' .ds $MN-arg9 @
17779 .       el .ds $MN-arg9 \\$9
17780 .    \}
17781 .    ie \\n[#START_FOR_MNinit]=0 \{\
17782 .       nr #MNinit_DEFERRED 1
17783 .       nr #START_FOR_MNinit 1
17784 .       return
17785 .    \}
17786 .    el \{\
17787 .       MNinit \\*[$MN-arg1] \\*[$MN-arg2] \\*[$MN-arg3] \\*[$MN-arg4] \\*[$MN-arg5] \\*[$MN-arg6] \\*[$MN-arg7] \\*[$MN-arg8] \\*[$MN-arg9]
17788 .    \}
17789 .END
17790 \#
17791 .MAC MN_OVERFLOW_TRAP END
17792 .    if \\n[#OVERFLOW_LEFT]=1  \{\
17793 .       nr #no-repeat-MN-left 1
17794 .       di MN_OVERFLOW_LEFT
17795 .    \}
17796 .    if \\n[#OVERFLOW_RIGHT]=1 \{\
17797 .       nr #no-repeat-MN-right 1
17798 .       di MN_OVERFLOW_RIGHT
17799 .    \}
17800 .    rr #OVERFLOW_LEFT
17801 .    rr #OVERFLOW_RIGHT
17802 .END
17803 \#
17804 \# The remainder of the margin notes macros and routines are adapted
17805 \# from Werner Lemberg's MN.tmac.
17806 \#
17807 \# MNinit
17808 \# ------
17809 \# Usage:
17810 \# MNinit [ragged|symmetric] \
17811 \#        left-width right-width separation \
17812 \#        font fontsize vertical-spacing \
17813 \#        color hyphenation-flags
17814 \#
17815 \# Initialize margin notes.  Empty arguments (denoted with "") set
17816 \# default values.  If the first argument is the string `ragged',
17817 \# left and right margin notes are printed ragged-right.  If it is
17818 \# `symmetric', left margin notes are printed ragged-left and right
17819 \# margin notes ragged-right.  If omitted, margin notes are left
17820 \# and right adjusted.
17821 \#
17822 \#
17823 .de MNinit
17824 .  nr #MNinit 1
17825 .  ds MN-left-ad b\"
17826 .  ds MN-right-ad b\"
17827 .  if '\\$1'RAGGED' \{\
17828 .    ds MN-left-ad l\"
17829 .    ds MN-right-ad l\"
17830 .    shift
17831 .  \}
17832 .  if '\\$1'SYMMETRIC' \{\
17833 .    ds MN-left-ad r\"
17834 .    ds MN-right-ad l\"
17835 .    shift
17836 .  \}
17837 .  ie \B'\\$3' \
17838 .    nr MN-sep (n;\\$3)
17839 .  el \
17840 .    nr MN-sep 1m
17841 .  if ((\\n[.o] - \\n[MN-sep]) < 1n) \
17842 .    ab MN: Left margin too small (<1n) for requested margin notes separation.
17843 .  ie \B'\\$1' \{\
17844 .    nr MN-left-width (n;\\$1)
17845 .    nr MN-left-start (\\n[.o] - \\n[MN-sep] - \\n[MN-left-width])
17846 .  \}
17847 .  el \{\
17848 .    nr MN-left-width (\\n[.o] - \\n[MN-sep])
17849 .    nr MN-left-start 0
17850 .  \}
17851 .  if (\\n[MN-left-start] < 0) \
17852 .    ab MN: Left margin too small for requested margin notes settings.
17853 .  if (\\n[MN-left-width] < 1n) \
17854 .    ab MN: Left margin notes width too small (<1n).
17855 .  ie \B'\\$2' \{\
17856 .    nr MN-right-width (n;\\$2)
17857 .    nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
17858 .    if \\n[#COLUMNS]=1 \{\
17859 .      if !\\n[#NUM_COLS]=1 \{\
17860 .        nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
17861 .      \}
17862 .    \}
17863 .  \}
17864 .  el \{\
17865 .    nr MN-right-width \\n[MN-left-width]
17866 .    nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
17867 .    if \\n[#COLUMNS]=1 \{\
17868 .      if !\\n[#NUM_COLS]=1 \{\
17869 .        nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
17870 .      \}
17871 .    \}
17872 .  \}
17873 .  ie \A'\\$4' \{\
17874 .    ds MN-font \\$4\"
17875 .    if \\n[#PRINT_STYLE]=1 .ds MN-font CR
17876 .  \}
17877 .  el \{\
17878 .    ds MN-font \\*[$PP_FT]
17879 .    if \\n[#PRINT_STYLE]=1 .ds MN-font CR
17880 .  \}
17881 .  ie \B'\\$5' \{\
17882 .    ps \\$5
17883 .    nr MN-size \\n[.ps]
17884 .    ps
17885 .    if \\n[#PRINT_STYLE]=1 \{\
17886 .       ps 12
17887 .       nr MN-size \\n[.ps]
17888 .       ps
17889 .    \}
17890 .  \}
17891 .  el \{\
17892 .    nr MN-size \\n[#DOC_PT_SIZE]
17893 .  \}
17894 .  ie \B'\\$6' \{\
17895 '    vs \\$6
17896 .    nr MN-spacing \\n(.v
17897 '    vs
17898 .    if '\\$6'DOC' \{ .nr MN-spacing \\n[#DOC_LEAD] \}
17899 .    if \\n[#PRINT_STYLE]=1 \{\
17900 .       nr MN-spacing \\n[#DOC_LEAD]
17901 .    \}
17902 .  \}
17903 .  el \{\
17904 .    nr MN-spacing \\n[#DOC_LEAD]
17905 .  \}
17906 .  ie \A'\\$7' \
17907 .    if !\\n[#PRINT_STYLE]=1 .ds MN-color \\$7\"
17908 .  el \
17909 .    if !\\n[#PRINT_STYLE]=1 .ds MN-color
17910 .  ie \B'\\$8' \
17911 .    nr MN-hy \\$8
17912 .  el \
17913 .    nr MN-hy \\n[.hy]
17914 .  ev MNbottom-left-env
17915 .  if \A'\\*[MN-font]' \
17916 .    ft \\*[MN-font]
17917 .  if \\n[MN-size] \
17918 .    ps \\n[MN-size]u
17919 .  if \\n[MN-spacing] \
17920 .    vs \\n[MN-spacing]u
17921 .  ll \\n[MN-left-width]u
17922 .  ad \\*[MN-left-ad]
17923 .  hy \\n[MN-hy]
17924 '  in 0
17925 .  nop \m[\\*[MN-color]]\c
17926 .  ev
17927 .  ev MNbottom-right-env
17928 .  if \A'\\*[MN-font]' \
17929 .    ft \\*[MN-font]
17930 .  if \\n[MN-size] \
17931 .    ps \\n[MN-size]u
17932 .  if \\n[MN-spacing] \
17933 .    vs \\n[MN-spacing]u
17934 .  ll \\n[MN-right-width]u
17935 .  ad \\*[MN-right-ad]
17936 .  hy \\n[MN-hy]
17937 '  in 0
17938 .  nop \m[\\*[MN-color]]\c
17939 .  ev
17940 .  nr MN-active 0
17941 ..
17942 \# MN
17943 \# --
17944 \# Usage:
17945 \#
17946 \#   MN LEFT|RIGHT
17947 \#   margin note text
17948 \#   MN
17949 \#
17950 \# With a parameter, start a margin note, otherwise end a margin note.
17951 \# If the parameter is the string `left', define a left margin note,
17952 \# otherwise define a right margin note.
17953 \#
17954 .de MN
17955 .ds MN-dir \\$1
17956 .if !'\\$1'LEFT' \{\
17957 .  if !'\\$1'RIGHT' \{\
17958 .    MN_QUIT
17959 .    return
17960 .  \}
17961 .\}
17962 .if \\n[#COLUMNS]=1 \{\
17963 .  if \\n[#NUM_COLS]>2 \{\
17964 .    tm [mom]: Macro MN: More than two columns.  Ignoring margin notes.
17965 .    return
17966 .  \}
17967 .  if !\\n[#NUM_COLS]=1 \{\
17968 .    ie \\n[#COL_NUM]=1 .ds MN-dir LEFT
17969 .    el .ds MN-dir RIGHT
17970 .  \}
17971 .\}
17972 .  if !\\n[#MNinit]=1 \{\
17973 .    tm [mom]: Macro MN: You must set parameters with MN_INIT before using MN.
17974 .    ab Aborting
17975 .  \}
17976 .  ie !'\\$1'' \{\
17977 .    if \\n[MN-active] \{\
17978 .      tm [mom]: Macro MN: Can't handle nested margin notes.
17979 .      return
17980 .    \}
17981 .    nr MN-active 1
17982 .    ev MN-env
17983 .    ie '\\*[MN-dir]'LEFT' \{\
17984 .      nr MN-left +1
17985 .      ds MN-curr l-\\n[MN-left]\"
17986 .      evc MNbottom-left-env
17987 .    \}
17988 .    el \{\
17989 .      nr MN-right +1
17990 .      ds MN-curr r-\\n[MN-right]\"
17991 .      evc MNbottom-right-env
17992 .    \}
17993 .    mk MN-mk-\\*[MN-curr]
17994 .    di MN-div-\\*[MN-curr]
17995 .  \}
17996 .  el \{\
17997 .    MN_QUIT
17998 .  \}
17999 ..
18000 \#
18001 \# MN_QUIT
18002 \# -------
18003 \# Utility macro to handle .MN OFF | QUIT | X etc
18004 \#
18005 .de MN_QUIT
18006 .    if \\n[MN-active] \{\
18007 .      br
18008 .      di
18009 .      nr MN-div-\\*[MN-curr]-depth \\n(dn
18010 .      ev
18011 .    \}
18012 .    nr MN-active 0
18013 ..
18014 \#
18015 \# MNtop
18016 \# -----
18017 \# Resets these registers (called in HEADER)
18018 .de MNtop
18019 .  nr MN-left 0
18020 .  nr MN-right 0
18021 .  nr MN-active 0
18022 .  rr MN-shifted
18023 .  ch FOOTER -\\n[#B_MARGIN]u
18024 ..
18025 \#
18026 \# MNbottom-left
18027 \# -------------
18028 \# The "left" half of Werner's original MNbottom.
18029 \#
18030 .de MNbottom-left
18031 .  nr MN-curr 0
18032 .  nr MN-last-pos 0
18033 .  nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
18034 .  vpt 0
18035 .  mk MN-curr-pos
18036 .  if \\n[MN-active] \{\
18037 .    di
18038 .    tm [mom]: Macro MN: Margin note finished by new page.  Ignored.
18039 .  \}
18040 .  po \\n[MN-left-start]u
18041 .  ev MNbottom-left-env
18042 .  nr #P \\n%+\\n[#PAGE_NUM_ADJ]
18043 .  while (\\n[MN-curr] < \\n[MN-left]) \{\
18044 .    nr MN-curr +1
18045 .    ie (\\n[MN-last-pos] < \\n[MN-mk-l-\\n[MN-curr]]) \
18046 .      sp |\\n[MN-mk-l-\\n[MN-curr]]u+\\n[MN-lead-adj]u
18047 .    el \{\
18048 .      nr MN-shifted 1
18049 .      sp 1v
18050 .      SHIM
18051 .      if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u)
18052 .      tm [mom]: Macro MN: Warning: Left margin note #\\n[MN-curr] on page \\n[#P] shifted down.
18053 .    \}
18054 .\" If last margin note doesn't fit
18055 .    if ( (\\n(nl+\\n[MN-div-l-\\n[MN-curr]-depth]) > (\\n(.p+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\
18056 .      if \\n[MN-shifted]=1 \{\
18057 .        sp -(1v+\\n[#SHIM]u)
18058 .        rm MN-div-l-\\n[MN-curr]
18059 .        tm1 "[mom]: No room to start left margin note #\\n[MN-curr] on page \\n[#P].
18060 .        tm1 "       Ignoring margin note.
18061 .        rr MN-shifted
18062 .      \}
18063 .      nr #no-repeat-MN-left 1
18064 .      nr #OVERFLOW_LEFT 1
18065 .      ie \\n[#FN_COUNT]=0 \{\
18066 .        ch FOOTER \\n(.pu
18067 .        wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP
18068 .      \}
18069 .      el \{\
18070 .        wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
18071 .      \}
18072 .      vpt 1
18073 .    \}
18074 .    nf
18075 .    MN-div-l-\\n[MN-curr]
18076 .    fi
18077 .    br
18078 .    nr MN-last-pos \\n[nl]
18079 .\}
18080 .  ev
18081 .  po
18082 .  if !\\n[#no-repeat-MN-left]=1 \{\
18083 .     if \\n[MN-right]=0 .vpt 1
18084 .  \}
18085 ..
18086 \#
18087 \# MNbottom-right
18088 \# --------------
18089 \# The "right" half of Werner's original MNbottom.
18090 \#
18091 .de MNbottom-right
18092 .  nr MN-curr 0
18093 .  nr MN-last-pos 0
18094 .  nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
18095 .  vpt 0
18096 .  po \\n[MN-right-start]u
18097 .  ev MNbottom-right-env
18098 .  nr #P \\n%+\\n[#PAGE_NUM_ADJ]
18099 .  while (\\n[MN-curr] < \\n[MN-right]) \{\
18100 .    nr MN-curr +1
18101 .    ie (\\n[MN-last-pos] < \\n[MN-mk-r-\\n[MN-curr]]) \
18102 .      sp |\\n[MN-mk-r-\\n[MN-curr]]u+\\n[MN-lead-adj]u
18103 .    el \{\
18104 .      nr MN-shifted 1
18105 .      sp 1v
18106 .      SHIM
18107 .      if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u)
18108 .      tm [mom]: Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
18109 .    \}
18110 .\" If last margin note doesn't fit
18111 .    if ( (\\n(nl+\\n[MN-div-r-\\n[MN-curr]-depth]) > (\\n(.p+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\
18112 .      if \\n[MN-shifted]=1 \{\
18113 .        sp -(1v+\\n[#SHIM]u)
18114 .        rm MN-div-r-\\n[MN-curr]
18115 .        tm1 "[mom]: No room to start right margin note #\\n[MN-curr] on page \\n[#P] on page \\n[#P].
18116 .        tm1 "       Ignoring margin note.
18117 .        rr MN-shifted
18118 .      \}
18119 .      nr #no-repeat-MN-right 1
18120 .      nr #OVERFLOW_RIGHT 1
18121 .      ie \\n[#FN_COUNT]=0 \{\
18122 .        ch FOOTER \\n(.pu
18123 .        wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP
18124 .      \}
18125 .      el \{\
18126 .        wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
18127 .      \}
18128 .      vpt 1
18129 .    \}
18130 .    nf
18131 .    MN-div-r-\\n[MN-curr]
18132 .    fi
18133 .    br
18134 .    nr MN-last-pos \\n[nl]
18135 .\}
18136 .  ev
18137 .  po
18138 .  if !\\n[#no-repeat-MN-right]=1 .vpt 1
18139 ..
18140 \#
18141 \# vim: ft=groff: