Annotation of researchv10no/cmd/troff/ancient.nroff/macros.d/mmt.src, revision 1.1

1.1     ! root        1: '''\"  9442 Memorandum Macros - 15.125 of 12/3/80
        !             2: '''\"  TROFF Version   @(#) mmt.src 15.125@(#)
        !             3: '\"    *** COMMENTING CONVENTIONS ***
        !             4: '\"    '''\"tab ==> prime comment, used in most terse macro summary
        !             5: '\"    ''\"tab  ==> additional external comments
        !             6: '\"    '\"tab   ==> internal comments, not shown to user
        !             7: '\"    *** MACRO DOCUMENTATION ***
        !             8: '\"    (following for external macros)
        !             9: '\"    '''\"tabXX: Description [number of args allowed: n or n:m]
        !            10: '\"    ''\"tab .XX arguments (with optional arguments in [] )
        !            11: '\"    ''\"tab further description, comments, notes, etc.
        !            12: '\"    (internal macros similar, but prefixed only by single ')
        !            13: ''\"   *** NAMING CONVENTIONS ***
        !            14: ''\"   A = upper-case alphabetic; a = lower-case alphabetic;
        !            15: ''\"   n = digit; X = A, a, or n.
        !            16: ''\"   EXTERNALLY-KNOWN ITEMS (generally in order of preference)
        !            17: ''\"   MACROS: AA, A, nA, An
        !            18: ''\"   STRINGS: An, nA, AA, A (like macros, but necessarily disjoint)
        !            19: ''\"   REGISTERS: Aa, a, An.
        !            20: ''\"   INTERNAL ITEMS
        !            21: ''\"   MACROS:         )X (orignally defined)
        !            22: ''\"                   (X (originally defined for splitting source)
        !            23: ''\"                   >X (dynamically created via di, da, de, am)
        !            24: ''\"                   ?a (text of floating displays)
        !            25: ''\"   STRINGS:        ]X (dedicated to specific uses)
        !            26: ''\"                   }X (dynamic; function return; temps (esp }n))
        !            27: ''\"   REGISTERS:      :X (dedicated)
        !            28: ''\"                   ?a (size of floating displays)
        !            29: ''\"                   ;X (function return; temporaries (esp. ;n))
        !            30: '\"    Available Name List
        !            31: '\"    macros:
        !            32: '\"    )egij03456789
        !            33: '\"    (A-Za-z0-9
        !            34: '\"    >FGHIJLMOPQUVZaefghijklmno
        !            35: '\"    strings:
        !            36: '\"    ]ABDGHIJKLMOPQRSTUVWXYijklmopqsu0789
        !            37: '\"    }FGIJKMNOPQRTUVWXYZacdghijklmnqrsu56789
        !            38: '\"    registers:
        !            39: '\"    :KMW
        !            40: '\"    ;GHLOQV
        !            41: '\"    !EGHIJMRSU46789
        !            42: '\"    *** INTERNAL STRINGS ***
        !            43: '\"    ]a: list stack for counter :a
        !            44: '\"    ]b: list stack for text indent :b
        !            45: '\"    ]c: list stack for mark indent :c
        !            46: '\"    ]d: list stack for pad distance/justification :d
        !            47: '\"    ]e: list stack for type :e
        !            48: '\"    ]f: list stack for LI-space :f
        !            49: '\"    ]g: current list mark
        !            50: '\"    ]h: list stack for mark ]g
        !            51: '\"    *** INTERNAL NUMBER REGISTERS ***
        !            52: '\"    !A  set if long footnotes output on this page
        !            53: '\"    !B flag wide display output on this page
        !            54: '\"    !F flag narrow/wide (2/1) footnotes already on this page
        !            55: '\"    :A accumulated amount of space before line :N on this page (.SP)
        !            56: '\"    :D flag to indicate inside diversion
        !            57: '\"    0 ==> not inside, 1 ==> inside
        !            58: '\"    used by .SP to do spacing right
        !            59: '\"    :N line number of end of block of blank lines :A long (.SP)
        !            60: '\"    :I set to control indenting on paragraphs for Pt 2
        !            61: '\"            0 is no indent; 1 is indent
        !            62: '\"            also flag to )y (float displays) that am
        !            63: '\"            inside header
        !            64: '\"    :a current counter for lists
        !            65: .nr :a 0 1
        !            66: '\"    :b current text indent for lists
        !            67: .nr :b 0
        !            68: '\"    :c current mark indent for lists
        !            69: .nr :c 0
        !            70: '\"    :d current pad distance/justification for lists
        !            71: .nr :d 0
        !            72: '\"    :e current type for lists [0:1]
        !            73: '\"    0 ==> simple mark, found in ]g
        !            74: '\"    1 ==> autonumber/letter
        !            75: .nr :e 0
        !            76: '\"    :f current LI-space for lists
        !            77: .nr :f 0
        !            78: '\"    :g current level for lists = [0:6]
        !            79: .nr :g 0 1
        !            80: '\"    :h flag for default adjustment mode
        !            81: '\"    0 ==> .na,  1 ==> .ad (used by .SA and thus .)R )
        !            82: .nr :h 1\" default = adjust???
        !            83: '\"    :u flag to controlling page increment & main section increment in )h
        !            84: '\"    set by .H 1: = 0 if no section/page increment needed, = 1 if needed
        !            85: .nr :u 0
        !            86: '\"    ;p flag controls floating displays cause a break when output
        !            87: '\"    on the current page.  ;p set by FB mode of the WC macro.  by default,
        !            88: '\"    floaters cause a break.
        !            89: .nr ;p 1       \" set FB mode
        !            90: '\"    !0 flag for figures, Fg may be reset to 0 by .H1
        !            91: .nr !0 0
        !            92: '\"    !1 flag for tables, Tb may be reset to 0 by .H1
        !            93: .nr !1 0
        !            94: '\"    !2 flag for equations, Ec may be reset to 0 by .H1
        !            95: .nr !2 0
        !            96: '\"    !3 flag for exhibits, Ex may be reset to 0 by .H1
        !            97: .nr !3 0
        !            98: .nr !N 0  \" copy-to flag; no copy-to's encountered yet
        !            99: '\"    *** TEMPORARY REGISTERS ***
        !           100: '\"    ;0: .H, .HU, .LI, .SK
        !           101: '\"    ;1: .LI, .H, .HU, .)F
        !           102: '\"    ;2: .MT and .AF normally zero but set to 1 to suppress headings
        !           103: '\"    also temp in .H
        !           104: '\"    ;3: .)I. .H.
        !           105: '\"    ;4: .SP
        !           106: '\"    *** TEMPORARY STRINGS ***
        !           107: '\"    }0: .H, .)F
        !           108: '\"    }1: .H
        !           109: '\"    }2: .H, .MT, .AF
        !           110: '\"    following allows for override of Bell Laboratories by .AF
        !           111: .ds }2 Bell Laboratories
        !           112: '\"    }3: .)I return value; .H
        !           113: '\"    *** TEMPORARY MACROS ***
        !           114: '\"    >A: .H
        !           115: '''\"  *** EXTERNALLY AVAILABLE STRINGS ***
        !           116: '''\"  Notation: [n] means n arguments; [n:m] means n to m args
        !           117: '''\"  BU: Bullet (for nroff/troff compatibility)
        !           118: .ds BU \s-2\(bu\s0
        !           119: '''\"  EM: Dash (for nroff/troff compatibility)
        !           120: .ds EM \(em
        !           121: '''\"  F : footnote numberer
        !           122: .ds F \v'-.4m'\s-3\\n+(:p\s0\v'.4m'\" in the text.\*F
        !           123: '''\"  DT: current date (unless overriden by .ND) in Month dy, 19yr
        !           124: '''\"  HF: Heading Fonts: gives fonts for levels 1-7 of .H & .HU
        !           125: '''\"  default: 3 3 2 2 2 2 2
        !           126: '''\"  i.e.:    B B I I I I I
        !           127: .ds HF 3 3 2 2 2 2 2
        !           128: '''\"  Lf: title for List of Figures
        !           129: .ds Lf LIST OF FIGURES
        !           130: '''\"  Lt: title for List of Tables
        !           131: .ds Lt LIST OF TABLES
        !           132: '''\"  Lx: title for List of Exhibits
        !           133: .ds Lx LIST OF EXHIBITS
        !           134: '''\"  Le: title for List of Equations
        !           135: .ds Le LIST OF EQUATIONS
        !           136: '''\"  RE: SCCS Release.Level of memomacs
        !           137: .ds RE 15.125
        !           138: '''\"  Rf: reference numberer
        !           139: .ds Rf \v'-.4m'\s-3[\\n+(:R]\s0\v'.4m'\" in the text.\*(Rf
        !           140: '''\"  Rp: title for references page
        !           141: .ds Rp References
        !           142: '''\"  Tm: Trademark indicator
        !           143: .ds Tm \v'-0.5m'\s-4TM\s+4\v'0.5m'
        !           144: '''\"  *** EXTERNALLY-KNOWN NUMBER REGISTERS ***
        !           145: '''\"  Notation: [n:m] means x st n <= x <= m
        !           146: '''\"  Au: add'l author info after 'from' [0:1] default 1
        !           147: .nr Au 1
        !           148: '''\"  C : type of copy [0:3] default 0 (original)
        !           149: ''\"   0 original; 1 Official;2 Date;3 Draft
        !           150: ''\"   settable via -rCn
        !           151: '''\"  Cp: List of Figs, etc. on TOC page or separate page, default 0
        !           152: ''\"   = 0 ==> Use separate pages
        !           153: ''\"   = 1 ==> Put on Table of Contents page
        !           154: .nr Cp 0
        !           155: '''\"  Cl: Contents level [0:3], default = 2
        !           156: ''\"   if heading level <= Cl, it is saved for table of contents,
        !           157: ''\"   0 ==> none, 1 ==> .H 1 only, etc.
        !           158: .nr Cl 2
        !           159: '''\"  D : debug flag, settable to debug mode via -rD1 [0:1], default = 0
        !           160: ''\"   0 ==> stop on any error, 1 ==> continue, even if garbage output
        !           161: '''\"  Ej: page Ejection flag for headings, default = 0
        !           162: ''\"   Eject if heading level <= Ej.
        !           163: ''\"   0 ==> no Eject, 1 ==> .bp for level 1 headings, 2 ==> .bp
        !           164: ''\"   for levels 1 & 2.
        !           165: '\"    nr Ej 0
        !           166: '''\"  Ds: display space flag
        !           167: .nr Ds 1v
        !           168: '''\"  Ec:equation counter
        !           169: .nr Ec 0 1
        !           170: '''\"  Eq: equation label flag, default 0 means labels on right
        !           171: .nr Eq 0
        !           172: '''\"  Ex: exhibit counter, initially 0.
        !           173: .nr Ex 0 1
        !           174: '''\"  De: Eject after each floating display is output [0:1] default 0
        !           175: ''\"   0 => no eject,    <> 0 => eject
        !           176: .nr De 0
        !           177: '''\"  Df: Floating display format specifier [0:7] default 5
        !           178: ''\"   The following flags may be added together to set a combination of
        !           179: ''\"   action conditions.  The flags are:
        !           180: ''\"     1: put one display on the current page if it fits
        !           181: ''\"     2: put one on the top of each page (only if any are queued)
        !           182: ''\"     4: put as many as will fit at the top of the page (always at least
        !           183: ''\"           one, if any are in the queue)
        !           184: ''\"   Note: if both 2 and 4 are selected, the result is as if only 4 were
        !           185: ''\"   selected.  If neither 2 or 4 are set, no floating displays will be
        !           186: ''\"   output at the top of the page.  Similarly, if 1 is not set, no
        !           187: ''\"   floating displays are output on the current page.
        !           188: .nr Df 5
        !           189: '''\"  Fg: Figure counter, initially 0.
        !           190: .nr Fg 0 1
        !           191: '''\"  Fs: amount of spacing between footnote entries; default 1
        !           192: .nr Fs 1
        !           193: '''\"  H1-H7: heading counters: controlled by .H and .HU
        !           194: '''\"  H1: 1st level heading counter, initially 0
        !           195: ''\"   incremented by .H 1
        !           196: .nr H1 0 1
        !           197: '''\"  H2: 2nd level heading counter
        !           198: .nr H2 0 1
        !           199: '''\"  H3: 3rd level heading counter
        !           200: .nr H3 0 1
        !           201: '''\"  H4: 4th level heading counter
        !           202: .nr H4 0 1
        !           203: '''\"  H5: 5th level heading counter
        !           204: .nr H5 0 1
        !           205: '''\"  H6: 6th level heading counter
        !           206: .nr H6 0 1
        !           207: '''\"  H7: 7th level heading counter
        !           208: .nr H7 0 1
        !           209: '''\"  Hb: Break level for headings [0:7], default=2
        !           210: ''\"   If heading level <= Hb, break occurs after it, else run-in text.
        !           211: ''\"   Break always occurs after .H 1 heading.
        !           212: .nr Hb 2
        !           213: '''\"  Hc: heading centering level, [0:7], default = 0
        !           214: ''\"   if level <= Hc & (level <= Hs | level <= Hb), center heading
        !           215: '\"    nr Hc 0
        !           216: '''\"  Hi: heading temporary indent (following .H) [0:2], default = 1
        !           217: ''\"   when registers Hb and sl create a break or space after a heading
        !           218: ''\"   (.H and .HU), Hi controls the indent of next line.
        !           219: ''\"   = 0 ==> 0 indent (left margin)
        !           220: ''\"   = 1 ==> indent to right as much as paragraph (like .P 1)
        !           221: ''\"   = 2 ==> indent to line up with text part of preceding heading
        !           222: .nr Hi 1
        !           223: '''\"  Hs: space level for headings [0:7], default = 2
        !           224: ''\"   if head-level <= Hs, a space is output following the heading.
        !           225: ''\"   SEE ALSO: register Hb; .H, .HU.
        !           226: .nr Hs 2
        !           227: '''\"  Ht: Heading type of numbering (multiple or single)
        !           228: '''\"  = 0 ==> multiple (1.1.1 etc), = 1 ==> single (as in outline)
        !           229: '\"    nr Ht 0
        !           230: '''\"  Hu: level at which HU considered to be [1:7], default = 2
        !           231: ''\"   This value is used for Bold, Italic, break, space determination,
        !           232: ''\"   and also causes incrementation of counter (H1-H7) as appropriate.
        !           233: ''\"   SEE ALSO: registers Bl, Hb, H1-H7, Il, sl; .HU, .H
        !           234: .nr Hu 2
        !           235: '''\"  Hy: control hyphenation in body
        !           236: ''\"   0 - no hyphenation (default)
        !           237: ''\"   1 - hyphenate
        !           238: .nr Hy 0
        !           239: '''\"  Le: list indicator for equations; default 0
        !           240: '''\"  = 0 ==> no list generated after TOC
        !           241: '''\"  = 1 ==> list generated
        !           242: .nr Le 0
        !           243: '''\"  Lf: list indicator for figures; default 1
        !           244: '''\"  = 0 ==> no list generated after TOC
        !           245: '''\"  = 1 ==> list generated
        !           246: .nr Lf 1
        !           247: '''\"  Li: standard list indent (for .AL), default = 5.
        !           248: .nr Li 5
        !           249: '''\"  Ls: list level for no LB/LI/LE space; default 6
        !           250: '\"    there is no spacing for either LB, for LI, or for LE
        !           251: '\"    even if requested if the list depth is greater than Ls value
        !           252: .nr Ls 6
        !           253: '''\"  Lt: list indicator for tables; default 1
        !           254: '''\"  = 0 ==> no list generated after TOC
        !           255: '''\"  = 1 ==> list generated
        !           256: .nr Lt 1
        !           257: '''\"  Lx: list indicator for exhibits; default 1
        !           258: '''\"  = 0 ==> no list generated after TOC
        !           259: '''\"  = 1 ==> list generated
        !           260: .nr Lx 1
        !           261: '''\"  Np: flag for numbered paragraphs, default 0
        !           262: ''\"   = 0 ==> paragraphs not numbered
        !           263: ''\"   = 1 ==> paragraphs numbered in first level headings
        !           264: .nr Np 0
        !           265: '''\"  Oc: Arabic TOC page numbering for OSDD, default 0
        !           266: ''\"   = 0 ==> Roman page numbering for TOC
        !           267: ''\"   = 1 ==> Arabic page numbering for TOC
        !           268: .nr Oc 0
        !           269: '''\"  Of: figure caption punctuation, default 0
        !           270: ''\"   = 0 ==> use period
        !           271: ''\"   = 1 ==> use dash
        !           272: .nr Of 0
        !           273: '''\"  )d: counter for numbered paragraphs
        !           274: .nr )d 0 1
        !           275: .af )d 01
        !           276: '''\"  Pi: std paragraph indent, default 5
        !           277: .nr Pi 3
        !           278: '''\"  Ps: amount of paragraph spacing, default 1
        !           279: .nr Ps 1
        !           280: '''\"  Pt: default paragraph type [0:2], initial value = 0
        !           281: ''\"   = 0 ==> left-justified is default for .P macro
        !           282: ''\"   = 1 ==> indented first line for .P macro
        !           283: ''\"   = 2 ==> indent .P except after .H, .DE, .LE
        !           284: .nr Pt 0
        !           285: '''\"  Pv: put PRIVATE at top of page, default 0
        !           286: ''\"   = 0 ==> don't print PRIVATE on any page
        !           287: ''\"   = 1 ==> on first page only
        !           288: ''\"   = 2 ==> on every page
        !           289: .nr Pv 0
        !           290: '''\"  Rf: reference count for CS
        !           291: .nr Rf 0
        !           292: '''\"  Si: standard indent for displays (default 5)
        !           293: .nr Si 3
        !           294: '''\"  Tb: Table counter, initially = 0
        !           295: .nr Tb 0 1
        !           296: '''\"  U : Underline headings (0 ==> cu when possible, 1 ==> ul)
        !           297: '\"    W will be used in environment initializations later in file
        !           298: '''\"  *** EXTERNALLY-AVAILABLE MACROS ***
        !           299: '''\"  RD: promt and read from standard input.
        !           300: ''\"   .RD prompt diversion string
        !           301: ''\"   This macro prints the prompt message on the standard error
        !           302: ''\"   channel (an ascii bel if prompt is empty), and then reads text from
        !           303: ''\"   the terminal, using the rd request.  All the input is captured in
        !           304: ''\"   the diversion named on the macro line, and the first line (up to the
        !           305: ''\"   first newline) is captured in the string named on the macro line.
        !           306: .de RD
        !           307: 'fl
        !           308: .di }w         \" diversion to capture text
        !           309: .rd \\$1       \" get the input
        !           310: .br
        !           311: .di
        !           312: .ie \w@\\$3@ \{\
        !           313: '\"            set string only if asked for
        !           314: .      di }x
        !           315: .      ds \\$3 "\\*(}w
        !           316: .      br
        !           317: .      di
        !           318: '      br \}
        !           319: .if \w@\\$2@ .rn }w \\$2       \" set diversion only if asked for
        !           320: .rm }w }x
        !           321: ..
        !           322: '''\"  B : Boldface [0:6]
        !           323: '''\"  .B ["Bold-arg" [prevailing-arg]] (up to six args)
        !           324: ''\"   If bold-arg is present, it is made Boldface,
        !           325: ''\"   and then the font reverts to the prevailing font.
        !           326: ''\"   If no argument is given, the font is changed to Bold
        !           327: ''\"   until explicitly changed again.
        !           328: ''\"   If the second argument is given, it is concatenated to the
        !           329: ''\"   first one, and return to prevailing font.
        !           330: ''\"   Up to six arguments are allowed, they will alternate in font.
        !           331: ''\"   SEE ALSO: I, R, .IB, .BI, .RI, .IR, .RB, .BR.
        !           332: .de B
        !           333: .ie \\n(.$ .nr ;G \\n(.f
        !           334: .el .ft 3
        !           335: .if \\n(.$ .if !\\n(.$-2 \&\f3\\$1\fP\\$2
        !           336: .if \\n(.$-2 \{.ds }i
        !           337: .              if @\\n(.f@2@ .ds }i \^
        !           338: .              ds }I \&\f3\\$1\fP\\$2\\*(}i
        !           339: 'br \}
        !           340: .if \\n(.$-2 .if !\\n(.$-4 \\*(}I\f3\\$3\fP\\$4
        !           341: .if \\n(.$-4 .if !\\n(.$-6 \\*(}I\f3\\$3\fP\\$4\\*(}i\f3\\$5\fP\\$6
        !           342: .if \\n(.$ .ft \\n(;G
        !           343: ..
        !           344: '''\"  I : Italic font [0:6]
        !           345: '''\"  .I [ "italic-arg" [prevailing-arg]] (up to six args)
        !           346: ''\"   If italic-arg is given, it is made Italic (TROFF) or underlined
        !           347: ''\"   (NROFF), and then font reverts to prevailing.
        !           348: ''\"   If the argument is omitted, font is changed to Italic (underlined)
        !           349: ''\"   until explicitly changed.
        !           350: ''\"   If the second argument is given, it is concatenated to the
        !           351: ''\"   first one, with one-half narrow blank, and return to prevailing font.
        !           352: ''\"   Up to six arguments are allowed, arguments will alternate in font.
        !           353: ''\"   SEE ALSO: .B, .R, .IR, .RI, .IB, .BI, .RB, .BR.
        !           354: .de I
        !           355: .ie \\n(.$ .nr ;G \\n(.f
        !           356: .el .ft 2
        !           357: .if \\n(.$ .if !\\n(.$-1 \&\f2\\$1
        !           358: .if \\n(.$-1 \{.ds }i \^
        !           359: .              if @\\n(.f@2@ .ds }i
        !           360: .              ds }I \&
        !           361: .              if \w@\\$1@ .ds }I \&\f2\\$1\fP\\*(}i
        !           362: 'br \}
        !           363: .if \\n(.$-1 .if !\\n(.$-3 \\*(}I\\$2\f2\\$3
        !           364: .if \\n(.$-3 .if !\\n(.$-5 \\*(}I\\$2\f2\\$3\fP\\*(}i\\$4\f2\\$5
        !           365: .if \\n(.$-5 \\*(}I\\$2\f2\\$3\fP\\*(}i\\$4\f2\\$5\fP\\*(}i\\$6
        !           366: .if \\n(.$ .ft \\n(;G
        !           367: ..
        !           368: '''\"  RI : Alternate Roman and Italic [1:6]
        !           369: .de RI
        !           370: .nr ;G \\n(.f
        !           371: .}S 1 2 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6"
        !           372: ..
        !           373: '''\"  RB : Alternate Roman and Bold [1:6]
        !           374: .de RB
        !           375: .nr ;G \\n(.f
        !           376: .}S 1 3 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6"
        !           377: ..
        !           378: '''\"  IR : Alternate Italic and Roman [1:6]
        !           379: .de IR
        !           380: .nr ;G \\n(.f
        !           381: .}S 2 1 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6"
        !           382: ..
        !           383: '''\"  IB : Alternate Italic and Bold [1:6]
        !           384: .de IB
        !           385: .nr ;G \\n(.f
        !           386: .}S 2 3 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6"
        !           387: ..
        !           388: '''\"  BR : Alternate Bold and Roman [1:6]
        !           389: .de BR
        !           390: .nr ;G \\n(.f
        !           391: .}S 3 1 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6"
        !           392: ..
        !           393: '''\"  BI : Alternate Bold and Italic [1:6]
        !           394: .de BI
        !           395: .nr ;G \\n(.f
        !           396: .}S 3 2 \& "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6"
        !           397: ..
        !           398: '''\"  }S : Common part of double-font macros [4:9]
        !           399: .de }S
        !           400: .ds }i
        !           401: .if @\\$1@2@ .if !@\\$5@@ .ds }i\^
        !           402: .ie !@\\$4@@ .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(}i" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
        !           403: .el \\$3
        !           404: .ft \\n(;G
        !           405: ..
        !           406: '''\"  SM : If 1 or 2 args, reduce arg1's point size by 1; append arg2 [1:3]
        !           407: '''\"  If 3 args, reduce arg2's point size by 1; prepend arg1 & append arg3.
        !           408: .de SM
        !           409: .ie \\n(.$-2 \&\\$1\s-1\\$2\s0\\$3
        !           410: .el \&\s-1\\$1\s0\\$2
        !           411: ..
        !           412: '''\"  R : Roman font [0]
        !           413: '''\"  .R
        !           414: ''\"   Change to the Roman font.
        !           415: ''\"   NOTE: this is intended as the closing bracket for I and B, as in:
        !           416: ''\"   .I or .B
        !           417: ''\"   one or more lines of text
        !           418: ''\"   .R
        !           419: .de R
        !           420: .ft 1
        !           421: .ul 0
        !           422: ..
        !           423: '''\"  EQ: begin equation display [0:1]
        !           424: '''\"  .EQ
        !           425: .de EQ
        !           426: .ds ]E \\$1
        !           427: .di >E\"when inside display, begin NESTED DIVERSION
        !           428: ..
        !           429: '''\"  EN: end equation display [0]
        !           430: '''\"  .EN
        !           431: .de EN
        !           432: \!.br
        !           433: .br
        !           434: .di\"end diversion into >E
        !           435: .rm >E
        !           436: .lt \\n(.lu
        !           437: .pc
        !           438: .if \w@\\*(10\\*(}E@ \{\
        !           439: .ie !\\n(Eq \{\
        !           440: .    ie \\n(:Y>0 \{.if \\n(:Y<\w@\\*(10@ .nr :Y \w@\\*(10@\"if centered block
        !           441: \!\\*(10\h'\\\\n(.lu-\w@\\*(10\\*(]E@u-\\\\n(.iu'\\*(]E
        !           442: .    br \}
        !           443: .    el .ie \\n(:B=2 .tl \(ts\(ts\\*(10\(ts\\*(]E\(ts\"if centered
        !           444: .    el .ie \\n(:B=1 .tl \(ts\h'\\n(Sin'\\*(10\(ts\(ts\\*(]E\(ts\"if indented
        !           445: .    el .if \\n(:B=0 .tl \(ts\\*(10\(ts\(ts\\*(]E\(ts\"if left-blocked
        !           446: '    br \}             \" end block output only if strings 10 or }E have width
        !           447: .el \{\
        !           448: .    ie \\n(:Y>0 \{.if \\n(:Y<\w@\\*(10@ .nr :Y \w@\\*(10@\"if centered block
        !           449: \!\\\\h'-\\\\n(.iu'\\*(]E\\\\h'\\\\n(.iu-\\w@\\*(]E@u'\\*(10
        !           450: .    br \}
        !           451: .    el .ie \\n(:B=2 .tl \(ts\\*(]E\(ts\\*(10\(ts\(ts\"if centered
        !           452: .    el .ie \\n(:B=1 .tl \(ts\h'\\n(Sin'\\*(]E\(ts\(ts\\*(10\(ts\"if indented
        !           453: .    el .if \\n(:B=0 .tl \(ts\\*(]E\(ts\(ts\\*(10\(ts\"if left-blocked
        !           454: '    br  \} \}         \" end block output only if strings 10 or ]E have width
        !           455: .pc %
        !           456: .lt
        !           457: .rm ]E 10
        !           458: .rr :E
        !           459: ..
        !           460: '''\"  HC: Set hyphenatication character everywhere [0:1]
        !           461: ''\"   .HC [hyphen-character]
        !           462: '\"    sets hyphen character in all 3 enivornments
        !           463: .de HC
        !           464: .ev 0
        !           465: .hc \\$1
        !           466: .ev
        !           467: .ev 1
        !           468: .hc \\$1
        !           469: .ev
        !           470: .ev 2
        !           471: .hc \\$1
        !           472: .ev
        !           473: ..
        !           474: '''\"  H : Heading, numbered [1:3]
        !           475: '''\"  .H level ["heading"] [\*F]
        !           476: ''\"   level = subordination value [1:7], 1 = most major, 7 = most minor
        !           477: ''\"   1 space is output before heading (level = [2:7])
        !           478: ''\"   1 more space is added for level=1, unless register Ej=1,
        !           479: ''\"           a .bp occurs to get to next page
        !           480: ''\"   a .bp occurs in any case if level <= Ej
        !           481: ''\"   heading is Bold, Italic, or Roman depending on value of level-th
        !           482: ''\"   item in string HF.  null is considered 1 (Roman).
        !           483: ''\"   if level <= Hc & (level <= Hb | level <= Hs), heading is centered
        !           484: ''\"   if level <= Hb, a break occurs after the heading
        !           485: ''\"   if level <= Hs, a space occurs after it.
        !           486: ''\"   if there is break or space, temporary indent is done according to Hi
        !           487: ''\"   a .ne is done before the heading to keep it together. its value is:
        !           488: ''\"           (size of heading)+1     if run-in text used
        !           489: ''\"           (size of heading)+2     if break, but no space
        !           490: ''\"           (size of heading)+3     if space after heading
        !           491: ''\"   SEE ALSO: Hb, Ej, H1-H7, Hi, Hu, Hs; HF; .HU.
        !           492: '\"    NOTE: a (secret) entry of .H 0 "heading" is used to implement .HU.
        !           493: '\"    ;0 used as temp
        !           494: '\"    ;1 is level, either from arg1, or from Hu.
        !           495: '\"    ;2 is temp (width of numbering + blanks)
        !           496: '\"    ;3 is temp (from .)I)
        !           497: '\"    }0, }1, }2, }3 used as local temp strings
        !           498: '\"    >A is created and removed
        !           499: '\"    :S is flag for sect-page numbering
        !           500: .de H
        !           501: '\"    error checks
        !           502: .if \\n(:F .)D "H:missing FE"
        !           503: .if \\n(:y .)D "H:missing DE"
        !           504: .if !\\n(.$ .)D "H:missing arg"
        !           505: '\"    ;0 set to 1 on any error
        !           506: .nr ;0 0
        !           507: .if \\$1-7 .nr ;0 1
        !           508: .if \w@\\$1@-\w'0'u .nr ;0 1
        !           509: .if \\n(;0 .)D "H:bad arg:\\$1"
        !           510: '\"    make sure all List Control items cleared
        !           511: '\"    Also, reset the world
        !           512: .LC 0
        !           513: .br
        !           514: .)R
        !           515: '\"    derive level in ;1, to control most decisions on format
        !           516: .nr ;1 0\\$1
        !           517: .if !0\\$1 .nr ;1 \\n(Hu \" for unnumbered heading
        !           518: .if !\\n(;1 .)D "H:bad arg:\\$1"\" .H a title
        !           519: '\"    clear lower-level counters
        !           520: .if 2-\\n(;1 .nr H2 0 1
        !           521: .if 3-\\n(;1 .nr H3 0 1
        !           522: .if 4-\\n(;1 .nr H4 0 1
        !           523: .if 5-\\n(;1 .nr H5 0 1
        !           524: .if 6-\\n(;1 .nr H6 0 1
        !           525: .if 7-\\n(;1 .nr H7 0 1
        !           526: .if 2-\\n(;1 \{.if \\n(:S .)w\"flush floating keeps if .H 1 & sec-page
        !           527: .      if \\n(:C .nr :p 0 1 \}\" reset fn ctr if .H 1 and :C set
        !           528: '\"    do pre-spacing & fix increment of current-level counter
        !           529: .SP .5
        !           530: .nr :u 0
        !           531: .if \\n(;1-1 .nr H\\n(;1 +1 \"all but 1st-level
        !           532: .if !\\n(;1-1 \{.nr :u 1 \"in case we cross page
        !           533: .      SP 1 \}\"total of 1 space, at least, if 1st level
        !           534: .if \\n(;1-1 .if (\\n(Ej+1-\\n(;1)&(\\n(nl-\\n(:J) \{ .if \\n(;C .nr ;C 2      \" force into the first column
        !           535: .                                   bp \}
        !           536: .if !\\n(;1-1 \{.if (\\n(Ej+\\n(:S)&(\\n(nl-\\n(:J) \{ .if \\n(;C .nr ;C 2     \" force in the 1st col
        !           537: .                                    bp \}     \" :S ==> Ej
        !           538: .      if !\\n(:u-1 .nr H1 +1 \"bump if not done by )h
        !           539: .if (\\n(:u=1)&(\\n(:S=1) .nr P 1 \}\"and for sec-page restart to 1
        !           540: .nr :u 0
        !           541: '\"    '       additional pre-space if space or break
        !           542: '\"    .if !\\n(;1-\\n(Hs .SP 1\"if level <=Hs
        !           543: '\"    .if !\\n(;1-\\n(Hb .SP 1\"if level <=Hb
        !           544: '\"    all constant pre-space done. now accumulate number, if any
        !           545: .ds }0 \\n(H1.
        !           546: .if 0\\$1-1 .as }0 \\n(H2
        !           547: .if 0\\$1-2 .as }0 .\\n(H3
        !           548: .if 0\\$1-3 .as }0 .\\n(H4
        !           549: .if 0\\$1-4 .as }0 .\\n(H5
        !           550: .if 0\\$1-5 .as }0 .\\n(H6
        !           551: .if 0\\$1-6 .as }0 .\\n(H7
        !           552: .if \\n(Ht \{.)I \\n(;1 \\n(H1 \\n(H2 \\n(H3 \\n(H4 \\n(H5 \\n(H6 \\n(H7
        !           553: .      ds }0 \\*(}3.
        !           554: '      br  \}
        !           555: .as }0 \ \ \"spaces between number and heading
        !           556: .if !0\\$1 .ds }0 \"clear if unnumbered heading
        !           557: '\"    at this pt, }0 is number blank blank, and $2 (if any) is heading
        !           558: '\"    now set ;0 = 0 (run-in), = 1 (break only), = 2 (space)
        !           559: .nr ;0 0
        !           560: .if !\\n(;1-\\n(Hb .nr ;0 1
        !           561: .if !\\n(;1-\\n(Hs .nr ;0 2
        !           562: '\"    following defines for non-run-in and run-in text
        !           563: .ds }2
        !           564: .if !\\n(;0 .if \w@\\$2@ .ds }2 "  \" 2 adjustable blanks
        !           565: '\"    set up ;3 to be increment for later .ne, so that HX can change
        !           566: .nr ;3 2v
        !           567: '\"    call user exit macro (if any exists) to override numbering
        !           568: .HX \\n(;1 0\\$1 "\\$2\\$3"
        !           569: '\" for double line indent reset counter if first or second level
        !           570: .if \\$1<3 .nr )a 0 1
        !           571: .af )a 01
        !           572: '\"    if numbered paragraphs restart counter for .H 1
        !           573: .if (\\$1=1)&(\\n(Np=1) .nr )d 0
        !           574: '\"    figure out number of lines for .ne
        !           575: .di >A
        !           576: \&\\*(}0\\$2\\$3\\*(}2
        !           577: .br
        !           578: .di
        !           579: .rm >A
        !           580: .if \\n(;0-1 .nr ;3 +.5v\"add some for post-space
        !           581: .ne \\n(;3u+\\n(dnu+.5p-1v
        !           582: '\"    call user exit macro (if any exists) to reset indents
        !           583: .HY \\n(;1 0\\$1 "\\$2\\$3"
        !           584: '\"    finally put out the heading
        !           585: .if \\n(;0 .na                 \" only if not run-in heading
        !           586: .)I \\n(;1 \\*(HF\" get font, }3 = 1/null (R), 2 (I), 3 (B)
        !           587: .nr ;3 1
        !           588: .nr ;3 \\*(}3
        !           589: .ft \\n(;3
        !           590: .nr :I \\n(.s\"save existing point size
        !           591: .)I \\n(;1 \\*(HP\"set }3 with user-specified point size, if any
        !           592: '\"    by default, shrink standalone bold hdgs
        !           593: '\"    e.g. if }3 is 0 or null AND ;3=3 AND ;0>0 then shrink
        !           594: .if ((\\*(}3=0):(\w@\\*(}3@>0))&(\\n(;3=3)&(\\n(;0>0) .ps -1
        !           595: '\"    use user-specified point size when }3 is non-null and non-zero
        !           596: .if !@\\*(}3@@ .if !@\\*(}3@0@ .ps \\*(}3
        !           597: .nr ;2 \w@\\*(}0@
        !           598: .if \\n(;0 \{.in+\\n(;2u
        !           599: .      ti-\\n(;2u \}
        !           600: .nr ;2 \\n(.i\"save current indent for use with Hi = 2
        !           601: .if !\\n(;1-\\n(Hc .if \\n(;0 .ce
        !           602: \\*(}0\&\c
        !           603: .if \\n(;0 \&\\$2\\$3
        !           604: .if !\\n(;0 \&\\$2\\$3\\*(}2\&\c
        !           605: .ft 1
        !           606: .ps \\n(:Ip\"restore point size
        !           607: .if \\n(;0 'in
        !           608: .if !\\n(;1-\\n(Cl .if \w@\\$2@ .)E \\$1 "\\$2"\"save entry for TOC
        !           609: .SA
        !           610: .if \\n(;0 .br
        !           611: .if \\n(;0-1 .SP .5
        !           612: '\"    do .ti only if Hi and Pt are both 1
        !           613: .if \\n(;0*\\n(Hi*\\n(Pt .if !\\n(Hi-1+\\n(Pt-1 .ti+\\n(Pin
        !           614: .if 0\\$1*\\n(;0 .if \\n(Hi-1 .ti\\n(;2u
        !           615: .nr :I 1\"force indent on following .P
        !           616: .nr !D \\n(nl          \" save position (for .P)
        !           617: .nr !Z \\n()O          \" save on-line position for .P
        !           618: .if (\\$1=1)&(\\nN=5) \{\
        !           619: .      nr Fg 0
        !           620: .      nr Tb 0
        !           621: .      nr Ec 0
        !           622: .      nr Ex 0 \}
        !           623: .HZ \\n(;1 0\\$1 "\\$2\\$3"
        !           624: ..
        !           625: '''\"  HM: Heading Marker styles [0:7]
        !           626: '''\"  .HM [arg1 ... arg7]
        !           627: ''\"   args are as .af args: 1,a,A,i,I
        !           628: ''\"   provide default in case of omitted args
        !           629: .de HM
        !           630: .af H1 \\$1 1
        !           631: .af H2 \\$2 1
        !           632: .af H3 \\$3 1
        !           633: .af H4 \\$4 1
        !           634: .af H5 \\$5 1
        !           635: .af H6 \\$6 1
        !           636: .af H7 \\$7 1
        !           637: ..
        !           638: '''\"  HU: Heading, unnumbered [1:2]
        !           639: '''\"  .HU "heading" [\*F]
        !           640: ''\"   SEE ALSO: register Hu, bl, br, Il, sl, H1-H7; .H
        !           641: .de HU
        !           642: .if !\\n(.$ .)D "HU:missing arg"
        !           643: .H 0 "\\$1" "\\$2"
        !           644: ..
        !           645: '''\"  HX: Heading user exit X [3]
        !           646: '''\"  .HX level-1 level-2 "heading"
        !           647: ''\"   called by .H after number string built, just before heading
        !           648: ''\"   size computed and put out.
        !           649: ''\"   level-1 [1:7]   heading level, given in .H, or by Hu
        !           650: ''\"   level-2 [0:7]   same as level-1 for .H, = 0 for .HU
        !           651: ''\"   "heading"       heading given to .H or .HU, may be null
        !           652: ''\"   useful items (changeable by user):
        !           653: ''\"   }0      has string of accumulated numbers, followed by 2 blanks
        !           654: ''\"   }2      string to separate number and heading, normally 2 blanks
        !           655: ''\"   also: may want to do .ne dependent on level, add extra pre-space,
        !           656: ''\"   change indent (maybe?)
        !           657: '\"    .de HX
        !           658: '\"    ..
        !           659: '''\"  HY: Heading user exit Y [3]
        !           660: '''\"  .HY level-1 level-2 "heading"
        !           661: ''\"   arguments same as .HX but called after heading
        !           662: ''\"   size computed, could be used to reset indents
        !           663: '\"    .de HY
        !           664: '\"    ..
        !           665: '''\"  HZ: Heading user exit Z [3]
        !           666: '''\"  .HZ level-1 level-2 "heading"
        !           667: '''\"  arguments same as .HX, but called at very end of .H
        !           668: ''\"   could be used to reset counters (figures, tables, footnotes, etc)
        !           669: '\"    .de HZ
        !           670: '\"    ..
        !           671: '''\"  LOWEST LEVEL LISTING MACROS - LB,LC,LE,LI.
        !           672: '''\"  LB: List Begin (and define parameters) [4:7]
        !           673: '''\"  .LB text-indent mark-indent pad type [mark [LI-space [LB-space]]]
        !           674: ''\"   text-indent = [0:?] = relative indent of text from current indent
        !           675: ''\"   normal = [1:2] (simple mark) or [4:5] (a.\ \ text, 10.\ \ text)
        !           676: ''\"   mark-indent = [0:?] = relative indent of beginning of
        !           677: ''\"   mark from current indent.  only used when left-justifying (pad = 0).
        !           678: ''\"   pad = [1:?] = position difference between right character of
        !           679: ''\"   right-justified mark and left character of text. normal = [1:3]
        !           680: ''\"       = 0 ==> left justify mark
        !           681: ''\"   type = [0:6] notes type of marking desired
        !           682: ''\"        = 0 ==> simple mark character(s)
        !           683: ''\"        = 1 ==> auto number/letter, form x.
        !           684: ''\"        = 2 ==> auto number/letter, form x)
        !           685: ''\"        = 3 ==> auto number/letter, form (x)
        !           686: ''\"        = 4 ==> auto number/letter, form [x]
        !           687: ''\"        = 5 ==> auto number/letter, form <x>
        !           688: ''\"        = 6 ==> auto number/letter, form {x}
        !           689: ''\"   mark = actual mark character (if type = 0)
        !           690: ''\"        = beginning value for auto-marking (if type = 1) = 1,a,A,i,I
        !           691: ''\"           Defaults to null (type = 0) or 1 (type > 0)
        !           692: ''\"   LI-space = [0:1] = number of blank lines to precede .LI
        !           693: ''\"           If = 1, LB-space would normally be 0.
        !           694: ''\"           defaults to 1 if omitted.
        !           695: ''\"   LB-space = [0:1] = number of blank lines to preced .LB
        !           696: ''\"           if omitted, 0 assumed
        !           697: .de LB
        !           698: .if 4-\\n(.$ .)D "LB:missing arg(s)"
        !           699: '\"    .)L \\$1u*1.5n \\$2u*1.5n \\$3n "\\$4" "\\$5" "\\$6" "\\$7"
        !           700: .)L 0\\$1n 0\\$2n 0\\$3n "\\$4" "\\$5" "\\$6" "\\$7"
        !           701: ..
        !           702: '\"    )L: actual LB as in nroff version
        !           703: '\"    args already have proper dimension
        !           704: .de )L
        !           705: .if \\n(:g>5 .)D "LB:too many nested lists"\"if :g now 6
        !           706: .if \\n(:g .)A \"push status
        !           707: .if !\\n+(:g-1 .ds ]b \\n(.i\"save current indent at outer level
        !           708: .nr :b \\n(.iu+0\\$1u \"text indent
        !           709: .nr :c \\n(.iu+0\\$2u \"mark indent
        !           710: .nr :d 0\\$3 \"pad
        !           711: .nr :e 0\\$4 \"type
        !           712: .nr :f 0\\$6 \"LI-space
        !           713: .if !\w@\\$6@ .nr :f 1
        !           714: .ds ]g \\$5
        !           715: '\"    take care of omitted case
        !           716: .if !\w@\\$5@ \{.ds ]g \&
        !           717: .      if \\n(:e .ds ]g 1
        !           718: '      br  \}
        !           719: .nr :a 0 1
        !           720: .if 0\\$4 .af :a \\$5 1\"in case $5 is null
        !           721: .if (\\n(:g<=\\n(Ls)&(0\\$7) .SP .5
        !           722: .fi
        !           723: .in\\n(:bu
        !           724: .ti\\n(:bu\"preserve against .ti of .H
        !           725: ..
        !           726: '''\"  LC: List Status Clear (to specified level) [1]
        !           727: '''\"  .LC nmbr
        !           728: ''\"   nmbr = [0:?]
        !           729: ''\"   List status information is popped, and the list level decremented
        !           730: ''\"   until = nmbr.  Thus, .LC 0 makes sure list information cleared.
        !           731: .de LC
        !           732: .if \\n(:g-0\\$1 .)B\"which decrements :g
        !           733: .if \\n(:g-0\\$1 .LC 0\\$1\"only if more levels to pop
        !           734: ..
        !           735: '''\"  LE: List End (at current level) [0:1]
        !           736: '''\"  .LE [1]
        !           737: ''\"   Terminates list at current level (i.e., pops 1 level)
        !           738: ''\"   If the optional argument 1 given, a blank line is output.
        !           739: .de LE
        !           740: .if (\\n(:I>1)&(\\n(nl-\\n(:J) .nr :I 0\" no indent on following .P unless just past )h
        !           741: .if \\n(:I<2 .nr :I 0
        !           742: .ie \\n(:g<1 .)D "LE:mismatched"
        !           743: .el .)B
        !           744: .if (\\n(:g<=\\n(Ls)&(\\n(.$>0) .SP .5
        !           745: .nr :J \\n(nl
        !           746: ..
        !           747: '''\"  LI: List Item [0:2]
        !           748: '''\"  .LI ["mark" [1]]
        !           749: ''\"   The list item is output according to parameters set by the last
        !           750: ''\"   previous .LB at same level.
        !           751: ''\"   If no arguments given, the mark used is that established by the .LB.
        !           752: ''\"   If "mark" is given alone, it is used in place of the default.
        !           753: ''\"   If the "1" option used, the "mark" is used as a prefix to the default.
        !           754: .de LI 
        !           755: .if !\\n(:g .)D "LI:no lists active" 
        !           756: .if (\\n(:g<=\\n(Ls)&(\\n(:f>0) .SP .5
        !           757: .in\\n(:bu
        !           758: '\"    if doing space and not inside diversion, then use need
        !           759: .if (\\n(:f)&(\\n(:D<1) .ne1v+.5p\"
        !           760: .ds }0 \\*(]g
        !           761: .if \\n(:e .ds }0 \\n+(:a.
        !           762: .if \\n(:e-1 .ds }0 \\n(:a)
        !           763: .if \\n(:e-2 .ds }0 (\\n(:a)
        !           764: .if \\n(:e-3 .ds }0 [\\n(:a]
        !           765: .if \\n(:e-4 .ds }0 <\\n(:a>
        !           766: .if \\n(:e-5 .ds }0 {\\n(:a}
        !           767: .if \\n(.$-1 .ds }0 \\$1\ \\*(}0
        !           768: .if \\n(.$=1 .ds }0 \\$1
        !           769: .nr ;0 \w@\\*(}0@
        !           770: .nr ;1 \\n(:c
        !           771: .if \\n(:d .nr ;1 \\n(:bu-\\n(:du-\\n(;0u
        !           772: .if !\\n(;1 .nr ;1 0
        !           773: .nr ;0 \\n(:bu-\\n(;1u-\\n(;0u
        !           774: .ti\\n(;1u
        !           775: .if !\\n(;0 .nr ;0 \w@ @u\"want at least one blank
        !           776: '\"    if zero-width mark, do hanging indent instead
        !           777: .if \w@\\*(}0@ \&\\*(}0\h@\\n(;0u@\&\c
        !           778: ..
        !           779: '''\"  INTERMEDIATE LIST START MACROS: AL, BL, DL, ML, VL.
        !           780: '''\"  AL: Begin Auto-Incremented List [0:2]
        !           781: '''\"  .AL [type [text-indent]]
        !           782: ''\"   type (if present) is: 1, a, A, i, or I  indicating how list is to
        !           783: ''\"   be lettered/numbered.
        !           784: ''\"   text-indent gives indentation from current margin to text: 4 is
        !           785: ''\"   appropriate for lettered lists (or numbered lists going only to 9),
        !           786: ''\"   while 5 is better for numbered lists going higher than 9.
        !           787: ''\"   if text-indent only is omitted, it is assumed to be Li.
        !           788: ''\"   if type if omitted, it is assumed to be 1.
        !           789: .de AL
        !           790: .nr !D 0               \" clear header mark (for .P test)
        !           791: .if !\\n(.$-1 .)L \\n(Lin 0 2n 1 "\\$1"
        !           792: .if \\n(.$-1 .if !\\n(.$-2 .LB 0\\$2 0 2 1 "\\$1"
        !           793: .if \\n(.$-2 .if !\w@\\$2@ .)L \\n(Lin 0 2n 1 "\\$1" 0 1
        !           794: .if \\n(.$-2 .if \w@\\$2@ .LB 0\\$2 0 2 1 "\\$1" 0 1
        !           795: ..
        !           796: '''\"  BL: Begin Bullet List [0:1]
        !           797: '''\"  .BL [text-indent]
        !           798: '''\"  (followed by 1 or more .LI which generate bullet items)
        !           799: .de BL
        !           800: .if \\n(.$<1 .)L \\n(Pin 0 1n 0 \\*(BU
        !           801: .if \\n(.$=1 .LB 0\\$1 0 1 0 \\*(BU
        !           802: .if \\n(.$>1 \{.ie !\w@\\$1@ .)L \\n(Pin 0 1n 0 \\*(BU 0 1
        !           803: .      el .LB 0\\$1 0 1 0 \\*(BU 0 1 \}
        !           804: ..
        !           805: '''\"  DL: Begin Dashed List [0:1]
        !           806: '''\"  .DL [text-indent]
        !           807: '''\"  (followed by 1 or more .LI which generate dashed items)
        !           808: .de DL
        !           809: .if \\n(.$<1 .)L \\n(Pin 0 1n 0 \(em
        !           810: .if \\n(.$=1 .LB 0\\$1 0 1 0 \(em
        !           811: .if \\n(.$>1 \{.ie !\w@\\$1@ .)L \\n(Pin 0 1n 0 \(em 0 1
        !           812: .      el .LB 0\\$1 0 1 0 \(em 0 1 \}
        !           813: ..
        !           814: '''\"  ML: Begin Marked List [1:2]
        !           815: '''\"  .ML mark [text-indent]
        !           816: ''\"   similar to Bullet List or Dashed List, but with arbitrary mark
        !           817: .de ML
        !           818: .if \\n(.$<1 .)D "ML:missing arg"
        !           819: .nr ;0 \w@\\$1@u/3u/\\n(.su+1u\" get size in n's
        !           820: .ie \\n(.$<2 .LB \\n(;0 0 1 0 "\\$1"
        !           821: .el .if \\n(.$<3 .LB 0\\$2 0 1 0 "\\$1"
        !           822: .if \\n(.$>2 \{.ie !\w@\\$2@ .LB \\n(;0 0 1 0 "\\$1" 0 1
        !           823: .      el .LB 0\\$2 0 1 0 "\\$1" 0 1 \}
        !           824: ..
        !           825: '''\"  RL: Begin Reference List [0:1]
        !           826: '''\"  .RL [text-indent]
        !           827: ''\"   makes auto-numbered list with square brackets.
        !           828: ''\"   text-indent defaults to 6 if omitted.
        !           829: .de RL
        !           830: .if \\n(.$<1 .LB 6 0 2 4
        !           831: .if \\n(.$=1 .LB 0\\$1 0 2 4
        !           832: .if \\n(.$>1 \{.ie !\w@\\$1@ .LB 6 0 2 4 1 0 1
        !           833: .      el .LB 0\\$1 0 2 4 1 0 1 \}
        !           834: ..
        !           835: '''\"  VL: Begin Variable-item List [1:2]
        !           836: '''\"  .VL text-indent [mark-indent]
        !           837: ''\"   followed by: .LI item
        !           838: ''\"   text-ident gives distance to text
        !           839: ''\"   mark-indent gives indent from current margin to mark, default = 0
        !           840: .de VL
        !           841: .if \\n(.$<1 .)D "VL:missing arg"
        !           842: .ie \\n(.$<3 .LB 0\\$1 0\\$2 0 0
        !           843: .el .LB 0\\$1 0\\$2 0 0 \& 0 1
        !           844: ..
        !           845: '''\"  P : Paragraph [0:1]
        !           846: '''\"  .P [type]
        !           847: ''\"   if no argument is present, the default paragraph style is used.
        !           848: ''\"   type = 0 ==> use left-justified paragraph
        !           849: ''\"   type = 1 ==> use indented paragraph
        !           850: ''\"   the default is set by the register Pt (same 0:1 meanings)
        !           851: '\"    if Pt = 2, then indent when :I >= 1 or when
        !           852: '\"            :I = 0 and nl != :J (spot marked by things
        !           853: '\"            that say "don't indent")
        !           854: .de P
        !           855: .if !(((\\n(!D=\\n(nl):(\\n(!D=(\\n(nl-.5v)))&(\\n(!Z=\\n()O)&(\\n(Np=0)) \{\
        !           856: '\"                    \" if just after a .H (or DF, etc) - this is a no-op
        !           857: '\"                    \" unless numbered paragraphs are being used
        !           858: .br
        !           859: .nr ;1 \\n(:J\"save place where "no-indent" last marked
        !           860: .nr ;2 \\n(nl\"save place where now
        !           861: .SP \\n(Psu*.5
        !           862: .if !\\n(:D .ne 1v+.5p
        !           863: .ie !\\n(;1-\\n(:J .nr ;2 \\n(;2-\\n(:J
        !           864: .el .nr ;2 \\n(nl-\\n(:J
        !           865: .nr :J \\n(;2
        !           866: .if \\n(.$>0&(0\\$1) .ti+\\n(Pin
        !           867: .if \\n(.$=0 \{\
        !           868: .if \\n(Pt=1 .ti+\\n(Pin
        !           869: .if \\n(Pt>1&(\\n(:I) .ti+\\n(Pin
        !           870: .if \\n(Pt>1&(\\n(:I=0)&(\\n(:J>0) .ti+\\n(Pin \}
        !           871: .if \\n(Np \{\
        !           872: \\n(H1.\\n+()d\ \ \c
        !           873: 'br \}
        !           874: .nr :I 1 \}            \"force indent on following .P (for Pt 2)
        !           875: .nr :u  0
        !           876: ..
        !           877: '''\"  nP: double-line indented paragraph (from ASC)
        !           878: '''\"  .nP
        !           879: '\"    uses )a as paragraph number counter (set in .H)
        !           880: .de nP
        !           881: .P 0
        !           882:  
        !           883: .br
        !           884: .sp -\\n()H
        !           885: .de )p
        !           886: 'ti 6n
        !           887: .rm )p
        !           888: .wh \\n(.du+\\n()H
        !           889: \\..
        !           890: .wh \\n(.du+\\n()H )p
        !           891: \\n(H2.\\n+()a\h'|6n'\\c
        !           892: ..
        !           893: '''\"  S : set point size and vertical spacing
        !           894: '''\"  .S [arg1] [arg2] [0:2]
        !           895: '\"    :P and !P current point size and vertical spacing respectively
        !           896: '\"    :Q and !Q previous point size and vertical spacing respectively
        !           897: '\"    first argument is selectable point size
        !           898: '\"    second argument is selectable vertical spacing
        !           899: '\"    D=default, P=previous, C=current
        !           900: .de S
        !           901: .if !\\n(:Q .nr :Q \\nS
        !           902: .if !\\n(.$ .nr ;0 \\n(:Q
        !           903: .if \\n(.$ .if !\w@\\$1@ \{\
        !           904: .      nr ;J 2
        !           905: .      nr ;0 \\n(:P \}
        !           906: .if \w@\\$1@ \{\
        !           907: .   ie @\\$1@D@ \{\
        !           908: .      nr ;J 1
        !           909: .      nr ;0 \\nS \}
        !           910: .   el \{\
        !           911: .      ie @\\$1@C@ \{\
        !           912: .          nr ;J 2
        !           913: .          nr ;0 \\n(:P \}
        !           914: .      el \{\
        !           915: .          ie @\\$1@P@ \{\
        !           916: .              nr ;J 3
        !           917: .              nr ;0 \\n(:Q \}
        !           918: .          el \{.if !\\n(;J \{\
        !           919: .              nr ;0 \\n(:P
        !           920: .              nr ;0 \\$1 \}\}\}\}\}
        !           921: .if 0\\$1-99 .nr ;0 \\nS
        !           922: .if !\\n(;0 .)D "S:bad arg \\$1"
        !           923: .nr :Q \\n(:P
        !           924: .nr :P \\n(;0
        !           925: .ps \\n(:Pp
        !           926: .nr ;J 0
        !           927: .if !\\n(!Q .nr !Q \\nS+2
        !           928: .if !\\n(.$-1 \{\
        !           929: .   ie \\n(.$ \{\
        !           930: .      nr ;K 1
        !           931: .      nr ;7 \\n(.s+2 \}
        !           932: .   el \{\
        !           933: .      nr ;K 3
        !           934: .      nr ;7 \\n(!Q \}\}
        !           935: .if \\n(.$-1 .if !\w@\\$2@ \{\
        !           936: .      nr ;K 2
        !           937: .      nr ;7 \\n(!P \}
        !           938: .if \w@\\$2@ \{\
        !           939: .   ie @\\$2@D@ \{\
        !           940: .      nr ;K 1
        !           941: .      nr ;7 \\n(.s+2 \}
        !           942: .   el \{\
        !           943: .      ie @\\$2@C@ \{\
        !           944: .          nr ;K 2
        !           945: .          nr ;7 \\n(!P \}
        !           946: .      el \{\
        !           947: .          ie @\\$2@P@ \{\
        !           948: .              nr ;K 3
        !           949: .              nr ;7 \\n(!Q \}
        !           950: .          el \{.if !\\n(;K \{\
        !           951: .              nr ;7 \\n(!P
        !           952: .              nr ;7 \\$2 \}\}\}\}\}
        !           953: .if 0\\$2-99 .nr ;7 \\n(.s+2
        !           954: .if !\\n(;7 .)D "S:bad arg \\$2"
        !           955: .nr !Q \\n(!P
        !           956: .nr !P \\n(;7
        !           957: .vs \\n(!Pp
        !           958: .nr ;K 0
        !           959: ..
        !           960: '''\"  pn: set page number
        !           961: '''\"  REDEFINES pn REQUEST
        !           962: '\"    fake out the function of the pn request so that
        !           963: '\"    the P register tracks w/ the % register when .pn used
        !           964: .rn pn ]N
        !           965: .de pn
        !           966: .nr :Z 1\"set flag that .pn invoked
        !           967: .]N \\$1\"invoke real .pn request
        !           968: ..
        !           969: '''\"  SA: Set Adjustment default [0:1]
        !           970: '''\"  .SA [arg]
        !           971: ''\"   .SA 0   sets default & current adjustment to no adjust (.na)
        !           972: ''\"   .SA 1   sets default & current adjustment to adjust (.ad)
        !           973: ''\"   .SA     sets adjustment to current default value
        !           974: '\"    SEE ALSO: nr :h, macro )R
        !           975: .de SA
        !           976: .if \\n(.$ \{.if \\$1-1 .)D "SA:bad arg:\\$1"
        !           977: .      nr :h 0\\$1 \}
        !           978: 'na
        !           979: .if \\n(:h 'ad
        !           980: ..
        !           981: '''\"  SK: skip pages
        !           982: '''\"  .SK [arg]
        !           983: '\"    skip arg pages
        !           984: '\"    if arg omitted, to top of a page
        !           985: .de SK
        !           986: .br
        !           987: .bp
        !           988: .nr ;0 0\\$1-1
        !           989: .if \\n(;0+1 .rs
        !           990: .if \\n(;0+1 .SK \\n(;0
        !           991: ..
        !           992: '''\"  OP: odd page
        !           993: '''\"  .OP
        !           994: '\"    ensure top of odd page
        !           995: .de OP
        !           996: .SK
        !           997: .if !\\nP%2 .SK 1
        !           998: ..
        !           999: '''\"  SP: SPace 1 or more lines [0:1]
        !          1000: '''\"  .SP [lines]  defaults to 1 if omitted, must be positive
        !          1001: ''\"   multiple .SP calls cooperate in producing only maximum requested
        !          1002: ''\"   spacing.
        !          1003: ''\"   uses ;4 as temp.
        !          1004: ''\"   :A expected to be # of accumulate blank lines
        !          1005: ''\"   :N = nl at end of last blank output
        !          1006: '\"    when in a diversion, use .d (rather than nl) for position
        !          1007: '\"    -mm diversion => :D set
        !          1008: '\"    tbl diversion => .z is non-null
        !          1009: '\"            careful--SP might occur at the same
        !          1010: '\"            position BUT in a different named diversion
        !          1011: '\"            (hence, the use of the string }D)
        !          1012: '\"    bug: still might be possible, if the same named diversion
        !          1013: '\"    is used, that a .SP might occur in the same vertical place.
        !          1014: '\"    very unlikely for
        !          1015: '\"            a) -mm will zero ;D and ;E whenever :D is cleared
        !          1016: '\"            b) tbl generates unique names
        !          1017: .de SP
        !          1018: .br
        !          1019: .ie \\n(:D .)S \\$1\" -mm diversion
        !          1020: .el .ie !'\\n(.z'' .)S \\$1\" tbl T{...}T diversion
        !          1021: .el \{.rr ;D ;E\"no diversion;remove the SP-in-diversion registers
        !          1022: .      nr ;4 1v
        !          1023: .      if \\n(.$ .nr ;4 \\$1v
        !          1024: .      if !(\\n(nl=\\n(:N) .nr :A 0\" different place for sure
        !          1025: .      nr ;4 -\\n(:Au\" remove previous accumulation, if any
        !          1026: '\"    space and recompute accumulation 
        !          1027: .      if \\n(;4 \{.sp\\n(;4u
        !          1028: .              nr :A +\\n(;4u \}
        !          1029: .      nr :N \\n(nl \}
        !          1030: ..
        !          1031: .de )S\"space ala SP but within a diversion
        !          1032: .br
        !          1033: .if !'\\n(.z'\\*(}D' .rr ;D ;E
        !          1034: .nr ;4 1v
        !          1035: .if \\n(.$ .nr ;4 \\$1v
        !          1036: .if !(\\n(.d=\\n(;D) .nr ;E 0\" different place for sure
        !          1037: .nr ;4 -\\n(;Eu\" remove previous accumulation, if any
        !          1038: .if \\n(;4 \{.sp\\n(;4u
        !          1039: .      nr ;E +\\n(;4u \}
        !          1040: .nr ;D \\n(.d
        !          1041: .ds }D \\n(.z
        !          1042: ..
        !          1043: ''\"   Multi-page tables--carry headings over multiple pages
        !          1044: '\"    tbl-generated macros/registers that must be utilized:
        !          1045: '\"            macros:         T#
        !          1046: '\"            registers:      )P )c
        !          1047: '\"    (code gleaned from -ms and from tbl output)
        !          1048: '\"    macros used:
        !          1049: '\"    .t      diversion containing the top-of-table titles
        !          1050: '\"            and line drawing info
        !          1051: '\"    T#      tbl-defined macro that draws the bottom portion
        !          1052: '\"            of boxed tables
        !          1053: '\"    >u      macro into which footer is hidden while T# works
        !          1054: '\"    registers used:
        !          1055: '\"    ;h      flag that header has printed >t
        !          1056: '\"    ;f      flag that footer has printed T#
        !          1057: '\"    ;I      temp storage for indent value
        !          1058: '\"    ;A      flag that .TS H being used
        !          1059: '\"    ;B      flag that .TH encountered
        !          1060: '''\"  TS: begin table display [0:1]
        !          1061: '''\"  .TS [H]
        !          1062: '\"    .de TS
        !          1063: '\"    ..
        !          1064: .de TS
        !          1065: .if (\\n(:D=0)&(\\n(Ds>0) .SP\"space according to Ds if NOT being diverted 
        !          1066: .if @\\$1@H@ \{.br\"divert tbl-gen'd text up to TH call
        !          1067: .      di >t
        !          1068: .      nr ;A 1 \}
        !          1069: ..
        !          1070: '''\"  TH: end .TS H
        !          1071: '''\"  .TH [N]
        !          1072: ''\"   [N] causes the table header text to be output now only if it
        !          1073: ''\"    is the first table header on the current page
        !          1074: .de TH\"close off .TS H diversion
        !          1075: .if \\n(.du>0.5v \{.nr )P 0
        !          1076: .      T# 0 \}
        !          1077: .br
        !          1078: .di
        !          1079: .nr ;I \\n(.i
        !          1080: .nr ;B 1
        !          1081: .if \\n(;T .if !@\\$1@N@ .nr ;T 0
        !          1082: .in 0                          \" this might trip )h
        !          1083: .mk #a
        !          1084: .mk #b
        !          1085: .mk #c
        !          1086: .mk #d
        !          1087: .mk #e
        !          1088: .mk #f
        !          1089: .if \\n(;T=0 \{\
        !          1090: .      >t                      \" output the header
        !          1091: .      nr ;T 1 \}              \" mark header output
        !          1092: .in \\n(;Iu
        !          1093: .mk )c
        !          1094: ..
        !          1095: '''\"  TE: end table display [0]
        !          1096: '''\"  .TE
        !          1097: .de TE
        !          1098: .if (\\n(:D=0)&(\\n(Ds>0) .SP\"space according to Ds if NOT being diverted 
        !          1099: .if (\\n(;A>0)&(\\n(;B=0) \{.br
        !          1100: .      di
        !          1101: .      )D "TE: used TS H but no TH" \}
        !          1102: .rr ;A ;B ;h ;D ;E
        !          1103: '\"    remove tbl-generated strings/macros/registers
        !          1104: .rm a+ b+ c+ d+ e+ f+ g+ h+ i+ j+ k+ l+ n+ m+
        !          1105: .rr 32 33 34 35 36 37 38 40 79 80 81 82
        !          1106: .rr a| b| c| d| e| f| g| h| i| j| k| l| m|
        !          1107: .rr a- b- c- d- e- f- g- h- i- j- k- l- m-
        !          1108: ..
        !          1109: '\"    INNER UTILITY MACROS
        !          1110: '\"    )A: stack push for list macros; called by .LB
        !          1111: '\"    prepends each parameter to front of stack string
        !          1112: .de )A
        !          1113: .af :a 1
        !          1114: .ds ]a \\n(:a \\*(]a
        !          1115: .ds ]b \\n(:b \\*(]b
        !          1116: .ds ]c \\n(:c \\*(]c
        !          1117: .ds ]d \\n(:d \\*(]d
        !          1118: .ds ]e \\n(:e \\*(]e
        !          1119: .ds ]f \\n(:f \\*(]f
        !          1120: .ds ]h \\*(]g \\*(]h
        !          1121: ..
        !          1122: '\"    )B: list status stack pop of 1 level: called by .LC
        !          1123: '\"    expects :g > 0
        !          1124: .de )B
        !          1125: .br
        !          1126: .nr :g -1
        !          1127: .)C nr :a ]a \\*(]a
        !          1128: .)C nr :b ]b \\*(]b
        !          1129: 'in \\n(:bu
        !          1130: 'ti \\n(:bu
        !          1131: .)C nr :c ]c \\*(]c
        !          1132: .)C nr :d ]d \\*(]d
        !          1133: .)C nr :e ]e \\*(]e
        !          1134: .)C nr :f ]f \\*(]f
        !          1135: .)C ds ]g ]h \\*(]h
        !          1136: .af :a 1
        !          1137: .if \\n(:e .af :a \\*(]g
        !          1138: ..
        !          1139: '\"    )C: stack shift operation, called from .)B
        !          1140: '\"    .)C command current-name stack-name stack-args...
        !          1141: .de )C
        !          1142: .\\$1 \\$2 \\$4
        !          1143: .ds \\$3 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1144: ..
        !          1145: '\"    )D: print error message and possibly terminate
        !          1146: '\"    .)D "message"
        !          1147: .de )D
        !          1148: 'di
        !          1149: .nr :D 0
        !          1150: .fl
        !          1151: .tm ERROR:(\\n(.F)input line \\n(.c:\\$1
        !          1152: .if !\\nD .ab \&
        !          1153: ..
        !          1154: '''\"  TB: Table Title Line(s)
        !          1155: '''\"  .TB ["title" ["override" [flag]]]
        !          1156: ''\"   issues table title and saves for TOC
        !          1157: ''\"   all args same as for .FG
        !          1158: ''\"   uses counter Tb.
        !          1159: ''\"   SEE ALSO: .FG, .)F.
        !          1160: .de TB
        !          1161: .nr !1 1
        !          1162: .ie .)F TABLE 1 \\n+(Tb "\\$1" "\\n(H1-" 0
        !          1163: .el .)F TABLE 1 \\n+(Tb "\\$1" "\\$2" 0\\$3
        !          1164: ..
        !          1165: '''\"  EC:equation caption lines
        !          1166: '''\"  .EC ["title" ["override" [flag]]]
        !          1167: '\"    args like FG or TB
        !          1168: '\"    uses Ec as counter
        !          1169: .de EC
        !          1170: .nr !2 1
        !          1171: .ie .)F Equation 2 \\n+(Ec "\\$1" "\\n(H1-" 0
        !          1172: .el .)F Equation 2 \\n+(Ec "\\$1" "\\$2" 0\\$3
        !          1173: ..
        !          1174: '''\"  EX: Exhibit Title Line(s)
        !          1175: '''\"  .EX ["title" ["override" [flag]]]
        !          1176: ''\"   args like FG or TB
        !          1177: ''\"   uses Ex as counter
        !          1178: .de EX
        !          1179: .nr !3 1
        !          1180: .ie .)F Exhibit 3 \\n+(Ex "\\$1" "\\n(H1-" 0
        !          1181: .el .)F Exhibit 3 \\n+(Ex "\\$1" "\\$2" 0\\$3
        !          1182: ..
        !          1183: '''\"  FG: Figure Title Line(s)
        !          1184: '''\"  .FG ["title" ["override" [flag]]]
        !          1185: ''\"   issues figure title and saves for TOC
        !          1186: ''\"   normally gives: Figure n -  title
        !          1187: ''\"   if title omitted, so are preceding - and blanks
        !          1188: ''\"   override is string which can modify normal numbering (using Fg)
        !          1189: ''\"   and works according to flag:
        !          1190: ''\"   flag: omitted or 0 ==> override used as prefix,
        !          1191: ''\"   = 1 ==> suffix, = 2 ==> replaces Fg
        !          1192: ''\"   !0 flag that there are figs since Fg may be reset to 0 by .H 1
        !          1193: ''\"   SEE ALSO: .TB, .)F
        !          1194: .de FG
        !          1195: .nr !0 1
        !          1196: .ie .)F Figure 0 \\n+(Fg "\\$1" "\\n(H1-" 0
        !          1197: .el .)F Figure 0 \\n+(Fg "\\$1" "\\$2" 0\\$3
        !          1198: ..
        !          1199: '\"    )F: Figure/Table/Equation line inner macro (for .FG, .TB, .EC)
        !          1200: '\"    .)F name type counter "title" "override" flag
        !          1201: '\"    name = Figure or Table or Equation
        !          1202: '\"    type = 0 (Figure) or 1 (Table)  or 2 (equation) for TOC saving
        !          1203: '\"    counter = already-incremented value of counter (Fg or Tb or Ec)
        !          1204: '\"    "title", "override", and flag as in FG/TB
        !          1205: '\"    flag = 0/null ==> prefix for override, 1 ==> suffix, 2 ==> replacement
        !          1206: '\"    uses temps: regs ;0 & ;1, string }0.
        !          1207: '\"    NOTE: needs more work (for TOC); also maybe option for spacing &
        !          1208: '\"    always indenting rather than current centering/indent choice.
        !          1209: .de )F
        !          1210: .nr ;0 \w@\\$5@
        !          1211: .nr ;1 0
        !          1212: .nr ;1 0\\$6
        !          1213: .ds }0 \\$3
        !          1214: .if \\n(;0 .ds }0 \\$5\\$3
        !          1215: .if \\n(;1*\\n(;0 .ds }0 \\$3\\$5
        !          1216: .if \\n(;1-1*\\n(;0 .ds }0 \\$5
        !          1217: .ds }0 \\$1\ \\*(}0
        !          1218: .ie (\w@\\$4@)&(\\n(Of=0) .as }0 .\ \ \" if actual title, add some space
        !          1219: .el .if \\n(Of .as }0 " -\ \"use dash rather than period for OSDD
        !          1220: '\"    }0 is now entire string before title: name number [ - ]
        !          1221: .nr ;0 \w@\\*(}0@
        !          1222: .ll \\nWu
        !          1223: .nr ;1 \\n(.lu-\\n(;0u-\w@\\$4@u+1u
        !          1224: '\"    ;1 <= 0 ==> cannot center title, > 0 ==> can do so.
        !          1225: '\"    don't mess if display already centered (:B=2)
        !          1226: .if (\\n(:B<2)&(\\n(;1>0) \{\
        !          1227: .      in 0  \" center with respect to left margin
        !          1228: .      ce  \}
        !          1229: .if !\\n(;1 \{\
        !          1230: .if !\\n(.u .nr ;U 1  \" set flag that no-fill on
        !          1231: .      if \\n(:B=2 .ce 0
        !          1232: .      fi
        !          1233: .      in \\n(;0u
        !          1234: .      ti-\\n(;0u \}
        !          1235: \f3\\*(}0\fP\\$4
        !          1236: .ll
        !          1237: .in
        !          1238: .if \\n(:B=2 .ce 9999
        !          1239: .if \\n(;U \{\
        !          1240: .      nf
        !          1241: .      nr ;U 0 \}
        !          1242: '\"    code here to save for TOC, using }0, \\$2, \\$4
        !          1243: .if (\\n(Lf=1&(\\$2=0)):(\\n(Lt=1&(\\$2=1)):\
        !          1244: (\\n(Le=1&(\\$2=2)):(\\n(Lx=1&(\\$2=3)) \{\
        !          1245: .      ds }3
        !          1246: .      if \\n(:S .ds }3 \\n(H1
        !          1247: .ie \\n(:y=1 \{\
        !          1248: \!.am >L\" if display make page# transparent
        !          1249: \!.if \\$2=\\\\\\\\$1 .)T 1 1 "\\*(}0" "\\$4" \\\\nP \\*(}3
        !          1250: \!\\\\..
        !          1251: 'br \}
        !          1252: .el \{\
        !          1253: .      am >L
        !          1254: .      if \\$2=\\\\$1 .)T 1 1 "\\*(}0" "\\$4" \\nP \\*(}3
        !          1255: \\.. \} \}
        !          1256: ..
        !          1257: '\"    )I: index into list of items
        !          1258: '\"    .)I index item1 ... item8
        !          1259: '\"    sets }3 to value of item(index); items cannot contain normal blanks
        !          1260: '\"    if less items than index, }3 is set to null
        !          1261: .de )I
        !          1262: .nr ;9 0\\$1+1
        !          1263: .ds }3 \\$\\n(;9
        !          1264: .rr ;9
        !          1265: ..
        !          1266: '\"    )E: accumulate 1 entry for TOC
        !          1267: '\"    .)E rlevel "heading"
        !          1268: '\"    expects:
        !          1269: '\"    ;1 = dlevel = [1:7], = rlevel except when rlevel = 0
        !          1270: '\"    }0 = string of digits/letters, followed by 2 blanks (normally)
        !          1271: '\"    uses as temps: }3
        !          1272: '\"    SEE ALSO: .H, .TC
        !          1273: .de )E
        !          1274: .ds }3
        !          1275: .if \\n(:S .ds }3 \\n(H1
        !          1276: .am >C
        !          1277: .)T \\n(;1 \\$1 "\\*(}0" "\\$2" \\nP \\*(}3
        !          1278: \\..
        !          1279: ..
        !          1280: '\"    )T: version 1: obtain maximum sizes for various section counters
        !          1281: '\"    .)T dlevel rlevel mark "heading" page [section]
        !          1282: '\"    (called from within .>C, set up by .)E )
        !          1283: '\"    sets H1 -- H7 to maximum widths of marks at that level
        !          1284: '\"    sets :a to max width of page number (incl. section)
        !          1285: '\"    TEMPS: ;0, }3
        !          1286: .de )T
        !          1287: .nr ;0 \w@\\$5@
        !          1288: .if \w@\\$6@ .nr ;0 +\w'-'u+\w@\\$6@u
        !          1289: .if \\n(;0-\\n(:a .nr :a \\n(;0
        !          1290: .)I \\$1 \\n(H1 \\n(H2 \\n(H3 \\n(H4 \\n(H5 \\n(H6 \\n(H7
        !          1291: .if \w@\\$3@-\\*(}3 .nr H\\$1 \w@\\$3@
        !          1292: ..
        !          1293: '\"    )U: (actually version 2 of )T) expand 1 TOC entry
        !          1294: '\"    .)U dlevel rlevel mark "heading" page [section]
        !          1295: '\"    dlevel = [1:7]
        !          1296: '\"    rlevel = [0:7], 0 ==> .HU, ignore mark
        !          1297: '\"    mark = string of digits/letters, followed by 2 blanks (normally)
        !          1298: '\"    "heading" is always present (no entries for title-less sections)
        !          1299: '\"    page is page number, may be restarted at 1 in some cases
        !          1300: '\"    section is present if :S > 0
        !          1301: '\"    expects:
        !          1302: '\"    :a = max size of page, or size of section-page (not counting -)
        !          1303: '\"    :b,:c,:d,:f set to args 1-4 (or defaults) of .TC
        !          1304: '\"    }0, }1, and }2 set as described in .TC
        !          1305: .de )U
        !          1306: .if !0\\$1-\\n(:b .sp\\n(:cu*.5v
        !          1307: .)I \\$1 \\*(}0
        !          1308: .nr ;0 \\*(}3
        !          1309: .)I \\$1 \\*(Ci
        !          1310: .nr ;1 \\*(}3
        !          1311: .)I \\$1 \\*(}2
        !          1312: .nr ;2 \\*(}3
        !          1313: '\"    ;0 = width of mark
        !          1314: '\"    ;1 = offset to begin of mark
        !          1315: '\"    ;2 = offset to text
        !          1316: .ds }3 \\$5
        !          1317: .if \\n(.$-5 .ds }3 \%\\$6\(hy\\$5
        !          1318: .nr :e \\n(:au-\w@\\*(}3@u+2n
        !          1319: .ds }3 \h@\\n(:eu@\\*(}3
        !          1320: '\"    }3 is complete [section-]page string
        !          1321: .ds }y
        !          1322: .nr ;0 -\w@\\$3@
        !          1323: .if \\n(;0 .as }y \h@\\n(;0u@
        !          1324: .if 2-0\\$1 .as }y "\\$3
        !          1325: .if 0\\$1-1 .ds }y "\\$3\\*(}y
        !          1326: .if !0\\$2 .ds }y
        !          1327: '\"    }y = mark string, with blanks (if necessary) prepended for level 1
        !          1328: '\"    is null for .HU heading
        !          1329: .ll \\nWu-\\n(:au-3n
        !          1330: .in \\n(;2u
        !          1331: .if !0\\$2 .in\\n(;1u
        !          1332: .ti \\n(;1u
        !          1333: .fi
        !          1334: .di >A
        !          1335: \!.cs 3 48\"for diversion layout
        !          1336: '''\"  \\\\f NEEDED to get bold leaders when laying out diversion
        !          1337: .if !0\\$1-\\n(:d .if !\\n(:f \\*(}y\\$4\\\\f3\\a\\\\fP\\*(}3
        !          1338: .if !0\\$1-\\n(:d .if \\n(:f \\*(}y\\$4\\t\\*(}3
        !          1339: .if 0\\$1-\\n(:d \\*(}y\\$4\\*(}3
        !          1340: .br\"force out partial line while diverting
        !          1341: \!.br\"force out partial line when laying out diversion
        !          1342: \!.cs 3
        !          1343: .di
        !          1344: .br
        !          1345: .ll \\nWu
        !          1346: .ne \\n(dnu+.5p-1v
        !          1347: .ta \\nWu-\\n(:au-2n
        !          1348: .nf
        !          1349: .in0
        !          1350: .na
        !          1351: .>A
        !          1352: ..
        !          1353: '\"    )Z: set-up for list output
        !          1354: '\"    .)Z "list heading" type
        !          1355: '\"    "list heading" is the title of the particular
        !          1356: '\"    list (i.e., figure, exhibit, table, or equation)
        !          1357: '\"    type = [0:3], 0 ==> figure, 1 ==> table,
        !          1358: '\"    2 ==> equation, 3 ==> exhibit
        !          1359: .de )Z
        !          1360: .in 0
        !          1361: .ie !\\n(Cp \{\
        !          1362: .      SK
        !          1363: .      rs
        !          1364: .      sp 3v
        !          1365: .      ce 1 \}
        !          1366: .el .sp 2v
        !          1367: \\$1
        !          1368: .sp 1v
        !          1369: .nr :a 0
        !          1370: .nr H1 0
        !          1371: .af H1 1
        !          1372: .>L \\$2
        !          1373: .rn )T )V
        !          1374: .rn )U )T
        !          1375: .ds }0 \\n(H1
        !          1376: .ds Ci 0
        !          1377: .ds }2 \\n(H1
        !          1378: .>L \\$2
        !          1379: .rn )T )U
        !          1380: .rn )V )T
        !          1381: ..
        !          1382: '''\"  TC: Generate Table of Contents
        !          1383: '''\"  .TC [slevel] [spacing] [tlevel] [tab] [head1 ... head5]
        !          1384: ''\"   slevel gives max level number to have spacing between
        !          1385: ''\"   spacing is number of spaces.
        !          1386: ''\"   tlevel is max level which tabs over to right margin for page
        !          1387: ''\"   tab = 0 (default) ==> leaders, >0 ==> tabs
        !          1388: .de TC
        !          1389: .LC 0\"clean out lists
        !          1390: .if \\n(:F .FE\"close dangling footnote
        !          1391: .if \\n(:y .DE \" end dangling DS
        !          1392: .if \\n(!N .NE \" end up dangling notation
        !          1393: .)N    \" flush stored NS/NE
        !          1394: .)w\" flush floating keeps
        !          1395: .if \\n(;R .RP 0 1
        !          1396: .)R
        !          1397: '\"    may need more, like messing with headers
        !          1398: .rm )E )F DE DF DS FD FE FG FS H HU TB
        !          1399: '\"    clear out top titles
        !          1400: .if !\\nP-1 .if \\nN .if !\\nN-1 .rn }t }b\"only if N = 1
        !          1401: .if !\\nP-1 .if \\nN .if !\\nN-1 .nr N 0 
        !          1402: .rm }t }e }o
        !          1403: .rs
        !          1404: .if \\n(;C .nr ;C 2            \" force back to the first column
        !          1405: .bp
        !          1406: .ie \\n(Oc .nr P 1 \" use page 1 for osdd contents
        !          1407: .el \{\
        !          1408: .      rm }f }p
        !          1409: .      nr ;g 1 1
        !          1410: .      af ;g i
        !          1411: .      ds }b ''- \\\\n(;g -''
        !          1412: .      am )b
        !          1413: .      nr ;g +1
        !          1414: \\..
        !          1415: '\"    3 lines above set up for roman page numbering, using ;g as counter
        !          1416: '      br \}
        !          1417: .nr N 0
        !          1418: .rs
        !          1419: .if !\\n(.$-4 .TX\"user exit if no more than 4 args
        !          1420: .if \\n(;C .ll \\n(:Lu         \" temp in wide mode
        !          1421: '''\"  TY is defined to put out CONTENTS--user may redefine
        !          1422: .if !\\n(.$-4 .TY\"user exit (without CONTENTS) if no more than 4 args
        !          1423: .ce99
        !          1424: .if \\n(.$-4 \\$5
        !          1425: .if \\n(.$-5 \\$6
        !          1426: .if \\n(.$-6 \\$7
        !          1427: .if \\n(.$-7 \\$8
        !          1428: .if \\n(.$-8 \\$9
        !          1429: .if \\n(.$-4 .sp
        !          1430: .ce 0
        !          1431: .sp
        !          1432: .if \\n(;C .ll \\n(:lu         \" go back to narrow mode
        !          1433: .nr ;m \\n(.hu+2v              \" return marker for 2C
        !          1434: .nr :b 1
        !          1435: .if \w@\\$1@ .nr :b 0\\$1
        !          1436: .nr :c 1
        !          1437: .if \w@\\$2@ .nr :c 0\\$2
        !          1438: .nr :d 2
        !          1439: .if \w@\\$3@ .nr :d 0\\$3
        !          1440: .nr :f 0
        !          1441: .if \w@\\$4@ .nr :f 0\\$4
        !          1442: '\"    :b = level for spacing, :c = number of spaces.
        !          1443: '\"    :d = max level to tab to right margin
        !          1444: '\"    :f = tab flag (0 ==> leader, 1 ==> tab)
        !          1445: '\"    set up to find max sizes of things
        !          1446: .nr H1 0
        !          1447: .af H1 1
        !          1448: .nr H2 0
        !          1449: .af H2 1
        !          1450: .nr H3 0
        !          1451: .af H3 1
        !          1452: .nr H4 0
        !          1453: .af H4 1
        !          1454: .nr H5 0
        !          1455: .af H5 1
        !          1456: .nr H6 0
        !          1457: .af H6 1
        !          1458: .nr H7 0
        !          1459: .af H7 1
        !          1460: .nr :a 0
        !          1461: '\"    H1 -H7 will have max widths; :a max width of [section] page
        !          1462: .>C
        !          1463: .rn )T )V
        !          1464: .rn )U )T
        !          1465: '\"    set up }0, }1, and }2 as useful arrays:
        !          1466: '\"    }0 = sizes of individual marks
        !          1467: '\"    }1 = offsets to beginning of marks
        !          1468: '\"    }2 = offsets to text parts
        !          1469: .ds }0 \\n(H1 \\n(H2 \\n(H3 \\n(H4 \\n(H5 \\n(H6 \\n(H7
        !          1470: .nr H2 +\\n(H1
        !          1471: .nr H3 +\\n(H2
        !          1472: .nr H4 +\\n(H3
        !          1473: .nr H5 +\\n(H4
        !          1474: .nr H6 +\\n(H5
        !          1475: .nr H7 +\\n(H6
        !          1476: .if !\w'\\*(Ci' .ds Ci 0 \\n(H1 \\n(H2 \\n(H3 \\n(H4 \\n(H5 \\n(H6
        !          1477: .ds }2 \\n(H1 \\n(H2 \\n(H3 \\n(H4 \\n(H5 \\n(H6 \\n(H7
        !          1478: '\"    more set up here for lists
        !          1479: .>C
        !          1480: .rm >C HX
        !          1481: .rn )T )U
        !          1482: .rn )V )T
        !          1483: .if (\\n(Lf=1)&(\\n(!0>0) .)Z "\\*(Lf" 0
        !          1484: .if (\\n(Lt=1)&(\\n(!1>0) .)Z "\\*(Lt" 1
        !          1485: .if (\\n(Lx=1)&(\\n(!3>0) .)Z "\\*(Lx" 3
        !          1486: .if (\\n(Le=1)&(\\n(!2>0) .)Z "\\*(Le" 2
        !          1487: .)R
        !          1488: ..
        !          1489: '''\"  TY may be redefined by user to suppress CONTENTS
        !          1490: .de TY
        !          1491: .ce
        !          1492: CONTENTS
        !          1493: ..
        !          1494: '''\"  Subject/Date/From and Signature
        !          1495: '\"    NB: certain portions of this are needed only____
        !          1496: '\"    at the beginning of the document.  
        !          1497: '\"    Therefore, certain macros/strings/registers are
        !          1498: '\"    used here and subsequently reused by other functions.
        !          1499: '\"    Reused names are so noted.
        !          1500: '\"    list of signatures are diverted and held until .SG macro
        !          1501: '\"    >v text of signature list
        !          1502: '\"    :V size of signature list
        !          1503: '\"    ;x size/flag for TM number      REUSED
        !          1504: '\"    ;y flag indicating title diversion      REUSED
        !          1505: '\"    >z text of FROM diversion       REUSED
        !          1506: '\"    ;z size of FROM diversion       REUSED
        !          1507: '\"    }z diverted text of title       REUSED
        !          1508: '\"    >8 holder for TM number         REUSED
        !          1509: '\"    :9 size of diverted title text  REUSED
        !          1510: '\"    :1 temp loc'n of prevailing indent      REUSED
        !          1511: '\"    :2 mark location        REUSED
        !          1512: '\"    :3 indent for Abstract REUSED
        !          1513: '\"    ;2 flag to suppress Bell Laboratories, etc. 
        !          1514: '\"    }2 Bell Laboratories or other company name. 
        !          1515: '''\"  TL: title of memo [0:2]
        !          1516: '''\"  .TL [ [case] [file case] ]
        !          1517: '''\"  {text of title}
        !          1518: ''\"   gather in charging case(s), filing case(s),
        !          1519: ''\"   and lines of the title for the top of a memo page
        !          1520: .de TL
        !          1521: .nr :D 2 \"s/d/f flag & flag for other diversions
        !          1522: .nr ;c 2 \" set flag for FE
        !          1523: .nr ;z 0 \" zero size of author info diversion
        !          1524: .nr :V 0 \" zero size of signature diversion
        !          1525: .nr :1 \\n(.i \" save prevailing indent
        !          1526: .if \\nC=4 .ls 1 \" single space DRAFT for memo header
        !          1527: .ds >1 \\$1
        !          1528: .ds >2 \\$2
        !          1529: 'nr ;y 1
        !          1530: .eo            \" remove the escape character until AU
        !          1531: 'de >T AU
        !          1532: ..
        !          1533: '''\"  AU: author info [6:9]
        !          1534: '''\"  .AU name initials [loc] [dept] [ext] [room] [[arg] ...]
        !          1535: '\"    optional args will appear, one line per each, following FROM
        !          1536: '\"    first arg (name) and second arg (initials) will be utilized in .SG
        !          1537: .de AU
        !          1538: .ec            \" restore the escape character
        !          1539: .nr :D 1 \"s/d/f flag
        !          1540: .nr ;c 1 \" set flag for FE
        !          1541: .if !\\n(;y 'nf
        !          1542: .if \\n(;y .>9 \" process TL text
        !          1543: .rm TL\" free up space
        !          1544: .ll \\nWu
        !          1545: '\"    build next author info for memo style
        !          1546: .da >z
        !          1547: 'if \\nE 'ft 3
        !          1548: .if (\\n(;z>0)&(\\n(Au>0) .sp \" space if not first author
        !          1549: \\$1
        !          1550: .if \\n(Au>0 \{.if \w@\\$3@ .ie @\\$3@HP@ HP\ \&\c
        !          1551: .              el \\$3\ \&\c
        !          1552: .      if \w@\\$4@ \\$4
        !          1553: .      if \w@\\$3@ .if !\w@\\$4@ \&
        !          1554: .      if \w@\\$6@ \\$6\ \&\c
        !          1555: .      if \w@\\$5@ x\\$5
        !          1556: .      if \w@\\$6@ .if !\w@\\$5@ \&
        !          1557: '      br  \}
        !          1558: .if \\n(.$-6 \\$7
        !          1559: .if \\n(.$-7 \\$8
        !          1560: .if \\n(.$-8 \\$9
        !          1561: .br
        !          1562: 'if \\nE 'ft1
        !          1563: .di
        !          1564: .nr ;z +\\n(dn
        !          1565: .nr dn 0
        !          1566: '\"    info for TM cover sheet
        !          1567: .am >A
        !          1568: .ie \\nE \{\
        !          1569: \f3\\$1\\\\t\\$3\ \\$6\\\\t\\$5\fP\" >A, inside MT into >S, then CS
        !          1570: 'br \}
        !          1571: .el \{\
        !          1572: \\$1\\\\t\\$3\ \\$6\\\\t\\$5\" >A, inside MT into >S, then CS
        !          1573: 'br \}
        !          1574: \\..
        !          1575: '\"    build signature & reference portion
        !          1576: 'in \\n(:1u
        !          1577: .if !\\n(:V .ds }v \\$3-\\$4-\\$2
        !          1578: .if \\n(:V .as }v /\\$2
        !          1579: .da >v
        !          1580: 'if \\nE 'ft 3
        !          1581: .sp 3
        !          1582: \\$1
        !          1583: .br
        !          1584: 'if \\nE 'ft1
        !          1585: .di
        !          1586: .nr :V +\\n(dnu
        !          1587: .nr dn 0
        !          1588: '\"    released paper author info
        !          1589: .ds }L \\$3\" get location string
        !          1590: .if '\\$3'HOH' .ds }L HO\"change to 2-char name for HOH
        !          1591: .if '\\$3'HOH' .nr :H 1
        !          1592: .if '\\$3'HP' .ds }L }A\"used for HP location
        !          1593: .if '\\$3'AL' .ds }L }B\"used for AL location
        !          1594: .if '\\$3'ALF' .ds }L }B\"used for ALF location
        !          1595: .if '\\$3'RD' .ds }L }E\"used for RD location
        !          1596: .if '\\$3'FJ' .ds }L HO\"used for FJ location
        !          1597: .if '\\$3'IW' .ds }L IH\"used for IW location
        !          1598: .am >4
        !          1599: .ps +1
        !          1600: .ft2
        !          1601: \\$1
        !          1602: .br
        !          1603: .ps
        !          1604: .ft1
        !          1605: .if \\\\n(:2 .sp .5v
        !          1606: .if \\\\n(:2 \\*(}2
        !          1607: .if \\\\n(:2 .if \\n(:H \\\\*(}H
        !          1608: .if \\\\n(:2 \\\\*(\\*(}L
        !          1609: .if \\\\n(:2 .sp .5v
        !          1610: .ds }z \\\\*(\\*(}L
        !          1611: \\..
        !          1612: ..
        !          1613: '\"    .>9
        !          1614: '\"    terminate .TL diversion and add case numbers if necessary
        !          1615: '\"    REUSED
        !          1616: .de >9
        !          1617: .di }z
        !          1618: 'll \\nWu-34n
        !          1619: 'nh
        !          1620: 'na
        !          1621: 'fi
        !          1622: 'if \\nE 'ft 3
        !          1623: .>T
        !          1624: '\"    if both charge and file case were given
        !          1625: .if (\w'\\*(>1')&(\w'\\*(>2') \{\
        !          1626: .      ie '\\*(>1'\\*(>2' \{\
        !          1627: .              br
        !          1628: Charge and Filing Case \\*(>1
        !          1629: .              br \}
        !          1630: .      el \{\
        !          1631: .              br
        !          1632: Charge Case \\*(>1
        !          1633: .              br
        !          1634: File Case \\*(>2
        !          1635: .              br \} \}
        !          1636: .if (\w'\\*(>1'=0):(\w'\\*(>2'=0) \{\
        !          1637: .      ie \w'\\*(>1' \{\
        !          1638: - Case\ \\*(>1
        !          1639: .                      br \}
        !          1640: .      el .ie \w'\\*(>2' \{\
        !          1641: - Case\ \\*(>2
        !          1642: .                      br \}
        !          1643: .              el .br \}
        !          1644: .ll \\nWu
        !          1645: .di
        !          1646: .if \\nE .ft1
        !          1647: .nr :9 \\n(dn \" size of diverted title info
        !          1648: .nr dn 0
        !          1649: .nr ;y 0
        !          1650: 'nf \" process rest of heading info in no-fill
        !          1651: .rm >9
        !          1652: ..
        !          1653: '''\"  AT: author title [0:9]
        !          1654: '''\"  .AT "line1" [line2-9]
        !          1655: ''\"   author title lines appear after signer's name
        !          1656: .de AT
        !          1657: .da >v
        !          1658: 'if \\nE 'ft 3
        !          1659: .if \\n(.$-0 \\$1
        !          1660: .if \\n(.$-1 \\$2
        !          1661: .if \\n(.$-2 \\$3
        !          1662: .if \\n(.$-3 \\$4
        !          1663: .if \\n(.$-4 \\$5
        !          1664: .if \\n(.$-5 \\$6
        !          1665: .if \\n(.$-6 \\$7
        !          1666: .if \\n(.$-7 \\$8
        !          1667: .if \\n(.$-8 \\$9
        !          1668: .br
        !          1669: 'if \\nE 'ft
        !          1670: .di
        !          1671: .nr :V +\\n(dnu
        !          1672: .nr dn 0
        !          1673: ..
        !          1674: '''\"  OK: provide other keywords [1:9]
        !          1675: '''\"  .OK kw1 kw2 ... kw9
        !          1676: .de OK
        !          1677: .nr :D 1 \"s/d/f flag
        !          1678: .nr ;c 1  \" set FE flag
        !          1679: .de >7
        !          1680: .ps -1
        !          1681: .if \\n(.$-0 \\$1
        !          1682: .if \\n(.$-1 \\$2
        !          1683: .if \\n(.$-2 \\$3
        !          1684: .if \\n(.$-3 \\$4
        !          1685: .if \\n(.$-4 \\$5
        !          1686: .if \\n(.$-5 \\$6
        !          1687: .if \\n(.$-6 \\$7
        !          1688: .if \\n(.$-7 \\$8
        !          1689: .if \\n(.$-8 \\$9
        !          1690: .ps
        !          1691: \\..
        !          1692: .rm OK
        !          1693: ..
        !          1694: '''\"  TM: get TM numbers [1:9]
        !          1695: '''\"  .TM number
        !          1696: .de TM
        !          1697: .nr :D 1 \"s/d/f flag
        !          1698: .nr ;c 1 \" set FE flag
        !          1699: .de >8
        !          1700: .if \\nE .ft 3
        !          1701: .if \\n(.$-0 \\$1
        !          1702: .if \\n(.$-1 \\$2
        !          1703: .if \\n(.$-2 \\$3
        !          1704: .if \\n(.$-3 \\$4
        !          1705: .if \\n(.$-4 \\$5
        !          1706: .if \\n(.$-5 \\$6
        !          1707: .if \\n(.$-6 \\$7
        !          1708: .if \\n(.$-7 \\$8
        !          1709: .if \\n(.$-8 \\$9
        !          1710: .if \\nE .ft1
        !          1711: \\..
        !          1712: .nr ;x \\n(.$+1 \" size of TM line(s) plus a space
        !          1713: .rm TM
        !          1714: ..
        !          1715: '''\"  AS: abstract start [0:2]
        !          1716: '''\"  .AS [flag] [indent]
        !          1717: '\"    begin abstract indicating dump now & later (0 or null)
        !          1718: '\"    or dump later only (1)
        !          1719: '\"    indent and .ll shrink 2nd arg; deflt 5
        !          1720: '\"    >3 stored abstract text
        !          1721: '\"    :t flag
        !          1722: '\"    ;3 size of >3
        !          1723: '\"    :3 register containing indent amount (passed to MT)
        !          1724: '\"    :t ;1 :3 REUSED
        !          1725: .de AS
        !          1726: .nr :D 3 \"s/d/f flag & flag for other diversions
        !          1727: .nr ;c 3 \" set FE flag
        !          1728: .rm TL\"free up space
        !          1729: .nr :t 0\\$1 \" set flag for type of abstract
        !          1730: .if \\n(:t=1 .nr ;s \\n(:s \" save value of footnote flag - AS/AE footnotes don't go in
        !          1731: .nr :3 0       \" no indent by default
        !          1732: .if \\n(.$-1 .nr :3 0\\$2n \" get optional indent
        !          1733: .nr ;N \\n(:1  \" save indent for copy-to list
        !          1734: 'in \\n(:1u
        !          1735: 'fi
        !          1736: .SA
        !          1737: 'nh
        !          1738: 'if \\n(Hy 'hy 14
        !          1739: .di >3
        !          1740: .ll 0u-2u*\\n(:3u+\\nWu\" really mean \\nW-(2*\\n(:3)
        !          1741: .ce
        !          1742: .ul
        !          1743: ABSTRACT
        !          1744: .SP 1.5
        !          1745: .ns
        !          1746: .nr :I 1\"indent any following .P's
        !          1747: .rm AS
        !          1748: ..
        !          1749: '''\"  AE: abstract end [0]
        !          1750: '''\"  .AE
        !          1751: .de AE
        !          1752: .br
        !          1753: .di
        !          1754: 'nf
        !          1755: 'nh
        !          1756: .nr ;3 \\n(dn
        !          1757: .nr ;6 \\n(;3 \"save unperturbed copy for .NE
        !          1758: .ll \\nWu
        !          1759: 'in \\n(:1u
        !          1760: .if \\n(:t=1 .nr :s \\n(;s \" restore value of :s
        !          1761: .rm AE
        !          1762: ..
        !          1763: '''\"  MT: specify type of memo [0:2]
        !          1764: '''\"  .MT [type] [1]   or  .MT [type] [addressee name]
        !          1765: ''\"   indicate type of memo; if no arg, get Memo for File
        !          1766: '\"    dump subj, date, from info as well
        !          1767: '\"    expects ;2 and }2 to be set appropriately (by default or .AF)
        !          1768: '\"    second arg (except for MT=4) is addressee's name
        !          1769: .de MT
        !          1770: .nr :D 0 \"clear s/d/f flag
        !          1771: .nr ;c 0  \" clear FE flag
        !          1772: .if !\\n(;y 'nf
        !          1773: .rm TL TM OK AS AE AF AU
        !          1774: .ll \\nWu
        !          1775: .rn TP >Y \" move TP so not there for )h
        !          1776: .in \\n(:1u\" causes )h to be tripped
        !          1777: .rn >Y TP
        !          1778: .rn )K >Y\"disguise )K in case of long abstract
        !          1779: '\"    call >6 for memo style
        !          1780: '\"    call >5 for released paper style
        !          1781: '\"    both of these disappear after either is used!
        !          1782: '\"    note that they use :2
        !          1783: '\"    second arg (except MT=4) adds addressee name to page header
        !          1784: '\"    must check width of $1 because .if !0\\$1=4 doesn't work for string
        !          1785: .ie \w@\\$1@u<2n .if !0\\$1=4 .if \\n(.$=2 .ds ]n \\$2
        !          1786: .el .if \\n(.$=2 .ds ]n \\$2
        !          1787: .if !\\n(.$ .>6
        !          1788: .if \\n(.$ .if \w@\\$1@u-\w'0'u .>6 "\\$1"
        !          1789: .if \\n(.$ .nr ;y 0\\$1
        !          1790: .if \\n(.$ .if !\\n(;y .>6 ""
        !          1791: .if \\n(.$ .if \\n(;y-4 .>x 
        !          1792: .if \\n(.$ .if \\n(;y-3 .>5 "\\$2"
        !          1793: .if \\n(.$ .if \\n(;y-2 .>6 "ENGINEER'S NOTES"
        !          1794: .if \\n(.$ .if \\n(;y-1 .>6 "PROGRAMMER'S NOTES"
        !          1795: .if \\n(.$ .if \\n(;y .>6 "MEMORANDUM FOR FILE"
        !          1796: .)R
        !          1797: .ft1\"to default font
        !          1798: .ft1\" so that previous is right, too
        !          1799: .ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i
        !          1800: .ns
        !          1801: .if \\nC=4 .ls 2 \" double space for DRAFT
        !          1802: .>Y\" kill macros/strings; zero registers
        !          1803: .rm >Y MT
        !          1804: ..
        !          1805: '\"    )x: print external letter
        !          1806: .de >x
        !          1807: .rm >6 >5 )Y )X
        !          1808: .ta \\nWu-1.4i
        !          1809: .br
        !          1810: .rs
        !          1811: .sp 1
        !          1812: .if \\n(Pv \{\
        !          1813: .      ce
        !          1814: PRIVATE\h'-\w'PRIVATE'u'\l'\w'PRIVATE'u'
        !          1815: .              sp \}
        !          1816: .sp |4v
        !          1817: .}z
        !          1818: .br
        !          1819: .rs
        !          1820: .mk :2
        !          1821: .sp |12v
        !          1822: .in \\nWu-1.4i
        !          1823: .ti+6
        !          1824: .ie \\nE \{\
        !          1825: \f3\\*(DT\fP
        !          1826: 'br \}
        !          1827: .el \{\
        !          1828: \\*(DT
        !          1829: 'br \}
        !          1830: .if \\n(:2u-\\n(nlu .sp |\\n(:2u
        !          1831: .sp 2v
        !          1832: .rm >x
        !          1833: ..
        !          1834: '\"    >6: dump out memorandum style
        !          1835: .de >6 
        !          1836: .rm >5 >x )Y
        !          1837: .di ]t  \" heading will be saved in ]t
        !          1838: .ta \\nWu-1.75i 
        !          1839: .br 
        !          1840: .rs 
        !          1841: .sp 1
        !          1842: .if \\n(Pv \{\
        !          1843: .      ce
        !          1844: PRIVATE\h'-\w'PRIVATE'u'\l'\w'PRIVATE'u'
        !          1845: .              sp \}
        !          1846: .sp |1.1i-1v
        !          1847: \t\s36\(bs\s0
        !          1848: .vs .3i
        !          1849: .if \w@\\*(}2@ \t\s16\f3\\*(}2\fP\s0
        !          1850: .vs 12p
        !          1851: .sp |1.9i
        !          1852: .mk :2
        !          1853: \!.po -\w'\s8subject:\s0'u+1n
        !          1854: \s8subject:\s0
        !          1855: .rt -1
        !          1856: \!.po
        !          1857: .}z
        !          1858: .br
        !          1859: .rt \\n(:2u
        !          1860: .in \\nWu-1.4i
        !          1861: .ps 8
        !          1862: .ti -6n
        !          1863: date:
        !          1864: .ps
        !          1865: .rt -1
        !          1866: .ie \\nE \{\
        !          1867: \f3\\*(DT\fP
        !          1868: 'br \}
        !          1869: .el \{\
        !          1870: \\*(DT
        !          1871: 'br \}
        !          1872: .sp
        !          1873: .ps 8
        !          1874: .ti -6n
        !          1875: from:
        !          1876: .ps
        !          1877: .rt -1
        !          1878: .if \\nE .ft 3
        !          1879: .>z
        !          1880: .if \\nE .ft
        !          1881: .in \\n(:1u
        !          1882: .if \\n(;x \{.sp
        !          1883: .      in \\nWu-1.4i
        !          1884: .      if \\nE .ft 3
        !          1885: TM 
        !          1886: .      rt -1
        !          1887: '      in +\w'TM 'u
        !          1888: '      if \\nE 'ft
        !          1889: .      >8
        !          1890: .      in \\n(:1u \}
        !          1891: .br
        !          1892: .if \\n(:9u-\\n(;zu-2v-\\n(;xv .sp \\n(:9u-\\n(;zu-2v-\\n(;xv
        !          1893: .sp 3
        !          1894: .di
        !          1895: .rs
        !          1896: '''\"  produce abstract page conditionally, depending
        !          1897: '''\"  upon the existence of a abstract and whether
        !          1898: '''\"  or not ".AS 1" was specified.
        !          1899: '''\"  ".AS" or ".AS 0" puts abstract on page 1 and saves for CS
        !          1900: '''\"  ".AS 2" makes memo-style cover sheet with abstract
        !          1901: .ie \\n(;3 \{\
        !          1902: .      ie \\n(:t=2 \{\
        !          1903: .              af !S \\gP \" save format of P register
        !          1904: .              af P i
        !          1905: .              ]t  \"put out heading
        !          1906: .              in +\\n(:3u
        !          1907: .              >3  \"put out abstract 
        !          1908: .              sp 3
        !          1909: .              )N  \"put out copy to
        !          1910: .              in -\\n(:3u
        !          1911: .              wh 0 )k  \"disable page-top trap except for cutmarks
        !          1912: .              bp
        !          1913: .              nr P 1  \"necessary for tbl of cntnts
        !          1914: .              af P \\g(!S \" restore format of P register
        !          1915: .              ]t  \"put out heading
        !          1916: .              wh 0 )h  \"re-enable page top trap
        !          1917: .              if \\n(:G \{\
        !          1918: .                      nr :s +1  \"put ftnt from cs -- increment cntr
        !          1919: .                      da >y
        !          1920: .                      >d
        !          1921: \!.                    br
        !          1922: .                      di
        !          1923: '                      nr dn +4v+.5p   \" leave space for 2 blank lines and rule
        !          1924: '                      nr :o +\\n(dnu
        !          1925: '                      nr :O +\\n(dnu
        !          1926: .                      nr dn 0
        !          1927: '\"                    Move up footer trap, but not above current position on page,
        !          1928: '                      if !\\n(.pu-\\n(nlu-.5p-\\n(:ou 'nr :o \\n(.pu-\\n(nlu-.5p
        !          1929: '\"                    or below :m!
        !          1930: '                      if !\\n(:ou-\\n(:mu 'nr :o \\n(:mu
        !          1931: '                      ch )f -\\n(:ou \" move footer trap
        !          1932: '                      br \}
        !          1933: .              rm CS \}  \"can't have both kinds of cover sheet
        !          1934: .      el .ie \\n(:t=1 .]t  \" just put out heading (no abstract)
        !          1935: .              el \{\
        !          1936: .                      ]t  \" put out heading
        !          1937: .                      in +\\n(:3u
        !          1938: .                      >3  \" put out abstract
        !          1939: .                      sp 3
        !          1940: .                      in -\\n(:3u \} \}
        !          1941: .el .]t  \"no abstract just put out heading
        !          1942: .ns
        !          1943: .ne 10
        !          1944: .ce
        !          1945: .ul
        !          1946: .if !\\n(.$ MEMORANDUM FOR FILE
        !          1947: .if \\n(.$ .if \w@\\$1@ \\$1
        !          1948: .SP 3 \" no effect if $1 is null (due to .ns above)
        !          1949: .ce 0
        !          1950: .ul 0
        !          1951: .if !\\n(:t=2 .)X\"build memo style cover sheet
        !          1952: .nr ;M 1 \"indicate to .NS that .MT has been called
        !          1953: .rm )X >6
        !          1954: ..
        !          1955: '\"    >5: dump released paper style
        !          1956: .de >5
        !          1957: .rm >6 >x )X
        !          1958: .br
        !          1959: .rs
        !          1960: .sp 1
        !          1961: .ie \\n(Pv \{\
        !          1962: .      ce
        !          1963: PRIVATE\h'-\w'PRIVATE'u'\l'\w'PRIVATE'u'
        !          1964: .              sp 4\}
        !          1965: .el 'sp 5
        !          1966: .in 0
        !          1967: .ds }H "Crawford Hill Laboratory
        !          1968: .ds }A "South Plainfield, New Jersey 07080\"
        !          1969: .ds PY "Piscataway, New Jersey 08854\"
        !          1970: .ds MH "Murray Hill, New Jersey 07974\"
        !          1971: .ds WH "Whippany, New Jersey 07981\"
        !          1972: .ds HO "Holmdel, New Jersey 07733\"
        !          1973: .ds RR "Piscataway, New Jersey 08854\"
        !          1974: .ds }B Allentown, Pennsylvania 18103\"
        !          1975: .ds AK Norcross, Georgia 30071\"
        !          1976: .ds CP Piscataway, New Jersey 08854\"
        !          1977: .ds CH Chester, New Jersey 07930\"
        !          1978: .ds CB Columbus, Ohio 43213\"
        !          1979: .ds DR Denver, Colorado 80234\"
        !          1980: .ds IN Indianapolis, Indiana 46206\"
        !          1981: .ds IH Naperville, Illinois 60566\"
        !          1982: .ds MV North Andover, Maine 01845\"
        !          1983: .ds }E Reading, Pennsylvania 19604\"
        !          1984: .ds WB "West Long Branch, New Jersey 07764\"
        !          1985: .ds WV Warren, New Jersey 07060\"
        !          1986: .ds HL Short Hills, New Jersey 07078\"
        !          1987: .ll \\nWu
        !          1988: .fi
        !          1989: .na
        !          1990: .nh
        !          1991: .di >6
        !          1992: .ps +2
        !          1993: .vs \\n(.sp+4p
        !          1994: .if \\nE .ft3
        !          1995: .nr ;X 1
        !          1996: .>T
        !          1997: .nr ;X 0
        !          1998: .ps
        !          1999: .vs \\n(.sp+2p
        !          2000: .if \\nE .ft1
        !          2001: .br
        !          2002: .di
        !          2003: .nf
        !          2004: .ce 1000
        !          2005: .>6
        !          2006: .nr :2 0
        !          2007: .if \w@\\$1@ .nr :2 1
        !          2008: .ul 0
        !          2009: .sp .5v
        !          2010: .>4
        !          2011: .br\"required!!
        !          2012: .if !\\n(:2 .sp.5v
        !          2013: .if !\\n(:2 \\*(}2
        !          2014: .if !\\n(:2 .if \\n(:H \\*(}H
        !          2015: .if !\\n(:2 \\*(}z
        !          2016: .ce 0
        !          2017: .sp 
        !          2018: '\"    if abstract (;3 non zero), output according to flag :t
        !          2019: .if \\n(;3 .if !\\n(:t .in +\\n(:3u
        !          2020: .if \\n(;3 .if !\\n(:t .>3
        !          2021: .if \\n(;3 .if !\\n(:t .in -\\n(:3u
        !          2022: .if \\n(;3 .if !\\n(:t .sp 
        !          2023: .ns
        !          2024: .br\"needed so that RP maintains fill mode via )R in MT (bug??)
        !          2025: .)Y\"build RP style cover sheet
        !          2026: .rm )Y >6 PY MH WH HO RR }H WB }A }B }E HL
        !          2027: .rm AK CP CH CB DR IN IH MV WV SG )N )M
        !          2028: .de NS
        !          2029: .br
        !          2030: .di
        !          2031: .di >Y
        !          2032: \\..
        !          2033: .de NE
        !          2034: .br
        !          2035: .di
        !          2036: \\..
        !          2037: .rm >5
        !          2038: ..
        !          2039: '\"    )K: kill S/D/F stuff
        !          2040: '\"    throw away unneeded macros/strings
        !          2041: '\"    zero unneeded registers
        !          2042: .de )K
        !          2043: .if \\n(:D .ie !\\n(:t=2 .)D "check TL, AU, AS, AE, MT sequence"
        !          2044: .              el .)D "check TL, AU, AS, AE, NS, NE, MT sequence"
        !          2045: .rm )X )Y >T >x >z >1 >2 >3 >4 >5 >6 >7 >8 >9 }2 }z
        !          2046: .rr ;x ;y ;z :D :1 :2 :3 :9 ;0 ;1 ;2 ;3 
        !          2047: .rm TL AU TM AF AS AE OK
        !          2048: .rm )K
        !          2049: ..
        !          2050: '\"    )X: build part of memo style cover sheet
        !          2051: '\"    some things currently known; other things must
        !          2052: '\"    be computed when >S called (in CS)
        !          2053: .de )X
        !          2054: .di >S
        !          2055: \!.nr O 216u\"get back default page offset
        !          2056: \!.po 216u
        !          2057: \!.nr W 6.5i\"get back default line length
        !          2058: \!.ll 6.5i
        !          2059: \!.lt 6.5i
        !          2060: \!.ll +.45i
        !          2061: \!.lt +.45i
        !          2062: \!.sp 3
        !          2063: \!.tl '\s24\(bs\s0\s14\f3  Bell Laboratories\s0\fP''\s16Cover Sheet for Technical Memorandum\s0'
        !          2064: \!.if !\n(.A \l@\\\\n(.lu@
        !          2065: \!.if \n(.A __________
        !          2066: \!.br
        !          2067: \!.fi
        !          2068: \!.ad
        !          2069: \!.ss 10
        !          2070: \!.ps 9
        !          2071: \!.ft 2
        !          2072: \!The information contained herein is for the use of
        !          2073: \!employees of Bell Laboratories
        !          2074: \!and is not for publication
        !          2075: \!(see GEI 13.9-3)\\\\p
        !          2076: \!.ps
        !          2077: \!.ft
        !          2078: \!.nf
        !          2079: \!.SA\"back to user-selected adjustment
        !          2080: \!.ss 12
        !          2081: \!.sp -.6v
        !          2082: \!.if !\n(.A \l@\\\\n(.lu@
        !          2083: \!.if \n(.A __________
        !          2084: \!.ll
        !          2085: \!.lt
        !          2086: \!.nf
        !          2087: \!.sp 2
        !          2088: \!.mk ;2
        !          2089: \s9Title:\s0
        !          2090: \!.rt -1
        !          2091: .ll \\nWu-34n
        !          2092: .nh
        !          2093: .na
        !          2094: .fi
        !          2095: \!.in \w'\s9Title:\s0'u+1n
        !          2096: .if \\nE .ft3
        !          2097: .nr ;X 1
        !          2098: .>T
        !          2099: .nr ;X 0
        !          2100: .if \\nE .ft1
        !          2101: .rm >T
        !          2102: .ll
        !          2103: .hy
        !          2104: .ad
        !          2105: .nf
        !          2106: \!.in0
        !          2107: \!.sp
        !          2108: \s9Other\ Keywords:\s0
        !          2109: \!.rt -1
        !          2110: \!.in \w'\s9Other Keywords:\s0'u+1n
        !          2111: .if \\nE .ft 3
        !          2112: .>7
        !          2113: .rm >7
        !          2114: .if \\nE .ft
        !          2115: \!.br
        !          2116: \!.mk ;0
        !          2117: \!.rt \\\\n(;2u
        !          2118: \!.in \\\\nWu-1.4i
        !          2119: \!.ti -6n
        !          2120: \s9Date:\s0
        !          2121: \!.rt -1
        !          2122: .ie \\nE \{\
        !          2123: \f3\\*(DT\fP
        !          2124: 'br \}
        !          2125: .el \{\
        !          2126: \\*(DT
        !          2127: 'br \}
        !          2128: \!.sp
        !          2129: \!.in \\\\nWu-1.4i
        !          2130: \!.ti -6n
        !          2131: \s9TM:\s0
        !          2132: \!.rt -1
        !          2133: .>8
        !          2134: \!.in 0
        !          2135: \!.br
        !          2136: \!.if \\\\n(;0u-\\\\n(nlu .sp \\\\n(;0u-\\\\n(nlu
        !          2137: \!.sp 2
        !          2138: \!.ta 2.5i 3.7i
        !          2139: \!.mk ;0
        !          2140: \!.ul
        !          2141: \s9Author(s)\\tLocation\\tExtension\s0
        !          2142: .>A
        !          2143: .rm >A
        !          2144: \!.mk ;1
        !          2145: \!.rt \\\\n(;0u
        !          2146: .br
        !          2147: .di
        !          2148: ''\"   go through TERRIBLE convolutions to get the case numbers
        !          2149: ''\"   in >1 and >2 into vertically stacked lists w/o commas
        !          2150: ''\"   biggest problem was that in contructing a macro call line
        !          2151: ''\"   within a diversion, a blank didn't stay as a blank
        !          2152: .nf
        !          2153: .de >7
        !          2154: .di >A
        !          2155: .tr ,+
        !          2156: .tr |.
        !          2157: .ie \\nE \{\
        !          2158: |ds\ >8\ \f3\\\\$1+\\\\$2+\\\\$3+\\\\$4+\\\\$5+\\\\$6+\\\\$7+\\\\$8+\\\\$9\fP
        !          2159: 'br \}
        !          2160: .el \{\
        !          2161: |ds\ >8\ \\\\$1+\\\\$2+\\\\$3+\\\\$4+\\\\$5+\\\\$6+\\\\$7+\\\\$8+\\\\$9
        !          2162: 'br \}
        !          2163: .br
        !          2164: \!.br
        !          2165: .tr ,,++||
        !          2166: .di
        !          2167: \\..
        !          2168: .>7 \\*(>1
        !          2169: .>A
        !          2170: .rn >8 >1
        !          2171: .>7 \\*(>2
        !          2172: .>A
        !          2173: .rn >8 >2
        !          2174: .di >7
        !          2175: .tr |.
        !          2176: .tr +
        !          2177: |>A\ \\*(>1
        !          2178: |rn\ >T\ >1
        !          2179: |>A\ \\*(>2
        !          2180: |rn\ >T\ >2
        !          2181: .br
        !          2182: .tr ||++
        !          2183: .di
        !          2184: .de >A
        !          2185: .de >T
        !          2186: .if \\\\n(.$ \\\\$1
        !          2187: .if \\\\n(.$-1 \\\\$2
        !          2188: .if \\\\n(.$-2 \\\\$3
        !          2189: .if \\\\n(.$-3 \\\\$4
        !          2190: .if \\\\n(.$-4 \\\\$5
        !          2191: .if \\\\n(.$-5 \\\\$6
        !          2192: .if \\\\n(.$-6 \\\\$7
        !          2193: .if \\\\n(.$-7 \\\\$8
        !          2194: .if \\\\n(.$-8 \\\\$9
        !          2195: \\\\..
        !          2196: \\..
        !          2197: .>7
        !          2198: .rm >A >7 >T
        !          2199: .da >S
        !          2200: \!.in \\\\nWu-13n
        !          2201: \!.ti \\\\nWu-1.4i-6n
        !          2202: \!.mk ;0
        !          2203: \s9Charging\\\\ Case:\s0
        !          2204: .br
        !          2205: \!.br
        !          2206: \!.rt -1
        !          2207: \!.if \\nE .ft 3
        !          2208: .>1
        !          2209: \!.if \\nE .ft
        !          2210: .rm>1
        !          2211: .br
        !          2212: \!.br
        !          2213: \!.if \\\\n(nl=\\\\n(;0 .sp1v\"since >1 must have been empty
        !          2214: \!.ti \\\\nWu-1.4i-6n
        !          2215: \s9Filing\\\\ Case:\s0
        !          2216: .br
        !          2217: \!.br
        !          2218: \!.rt -1
        !          2219: \!.if \\nE .ft 3
        !          2220: .>2
        !          2221: \!.if \\nE .ft
        !          2222: .rm>2
        !          2223: .br
        !          2224: \!.br
        !          2225: \!.if \\\\n(;1u-\\\\n(nlu .sp \\\\n(;1u-\\\\n(nlu
        !          2226: \!.sp 3
        !          2227: \!.in 0
        !          2228: \!.ll \\\\nWu
        !          2229: \!.in +\\n(:3u
        !          2230: \!.po +(6.95i-\\\\n(!Wu)/2u
        !          2231: .>3
        !          2232: \!.in -\\n(:3u
        !          2233: \!.po
        !          2234: \!.nr ;0 0\" TM style cover sheet
        !          2235: .br
        !          2236: .di
        !          2237: '\"    Now put the footnotes, if any, on the cover sheet
        !          2238: .di >b
        !          2239: .nf
        !          2240: .na
        !          2241: .>c
        !          2242: .br
        !          2243: .di
        !          2244: .rm >b
        !          2245: .if \\n(dn \{\
        !          2246: .nr ;c \\n(.pu-\\n(dnu-8v
        !          2247: .da >S
        !          2248: \!.ie \\n(;cu-\\\\n(nlu .sp \\n(;cu-\\\\n(nlu
        !          2249: \!.el .sp .5v
        !          2250: .nr ;c 0
        !          2251: \l'60p'
        !          2252: .>c
        !          2253: .di
        !          2254: .br \}
        !          2255: ..
        !          2256: '\"    )Y: build part of cover sheet for released paper
        !          2257: '\"    some things currently known; other things must
        !          2258: '\"    be computed when >S called (in CS)
        !          2259: .de )Y
        !          2260: .di >S
        !          2261: \!.sp 5
        !          2262: \!.in 0
        !          2263: \!.ce 1000
        !          2264: \!.ul 1000
        !          2265: .>6
        !          2266: \!.ul 0
        !          2267: \!.sp .5v
        !          2268: .>4
        !          2269: \!.br\"required!!
        !          2270: \!.if \\n(:2=0 .sp.5v
        !          2271: \!.if \\n(:2=0 \\*(}2
        !          2272: \!.if \\n(:2=0 .if \\n(:H \\*(}H
        !          2273: \!.if \\n(:2=0 \\*(}z
        !          2274: \!.ce 0
        !          2275: \!.sp 
        !          2276: \!.in 0
        !          2277: \!.in +\\n(:3u
        !          2278: .>3
        !          2279: \!.in -\\n(:3u
        !          2280: \!.nr ;0 1\"release paper cover sheet
        !          2281: .di
        !          2282: '\"    Now put the footnotes, if any, on the cover sheet
        !          2283: .di >b
        !          2284: .nf
        !          2285: .na
        !          2286: .>c
        !          2287: .br
        !          2288: .di
        !          2289: .rm >b
        !          2290: .if \\n(dn \{\
        !          2291: .nr ;c \\n(.pu-\\n(dnu-8v
        !          2292: .da >S
        !          2293: \!.ie \\n(;cu-\\\\n(nlu .sp \\n(;cu-\\\\n(nlu
        !          2294: \!.el .sp .5v
        !          2295: .nr ;c 0
        !          2296: \l'60p'
        !          2297: .>c
        !          2298: .di
        !          2299: .br \}
        !          2300: ..
        !          2301: '''\"  CS: generate cover sheet [0:6]
        !          2302: '''\"  .CS [pages] [other] [total] [figs] [tbls] [refs]
        !          2303: .de CS
        !          2304: .LC 0\"clean out lists
        !          2305: .if \\n(:F .FE\"close dangling footnote
        !          2306: .if \\n(:y .DE \" end dangling DS
        !          2307: .if \\n(!N .NE \" end up dangling notation
        !          2308: .)N    \" flush stored NS/NE
        !          2309: .)w \" flush floating keeps
        !          2310: .if \\n(;R .RP 0 1
        !          2311: '\"    kill off any page titles
        !          2312: .if !\\nP-1 .if \\nN .if !\\nN-1 .rn }t }b\"only if N = 1
        !          2313: .if !\\nP-1 .if \\nN .if !\\nN-1 .nr N 0 
        !          2314: .rm }t }e }o
        !          2315: .wh 0 \" toss off header trap
        !          2316: .br
        !          2317: .rs
        !          2318: .bp
        !          2319: .)k\"get cut marks
        !          2320: .rm }b }f }p
        !          2321: .rn )f >z \" save footer def'n
        !          2322: .rn >B >s      \" save bottom block expander while moving it out
        !          2323: .ch )n 15.1i \" move away footnote diverter
        !          2324: .ch )b 15.2i \" move away bottom
        !          2325: .de )f \" temp footer
        !          2326: .)D "CS:cover sheet too long"
        !          2327: \\..
        !          2328: .ch )f -\\n(:Mu        \" reset footer in case moved by BS/BE
        !          2329: .)R
        !          2330: .ll \\nWu
        !          2331: .in 0
        !          2332: .nr !O \\nO    \" save offset to restore for later TC
        !          2333: .nr !W \\nW    \" save width to restore for later TC
        !          2334: .br
        !          2335: .rs
        !          2336: '\"    do previous part of cover sheet
        !          2337: .nf
        !          2338: .>S
        !          2339: .rm )f \" kill temp footer
        !          2340: .ch )f 15.0i \" move away footer trap
        !          2341: .sp \\n(.pu-\\n(nlu-7.5v
        !          2342: '\"    TM or Released Paper?
        !          2343: .ie \\n(;0 .sp 7.5
        !          2344: .el \{ .nr ;1 \\n(.lu+.45i
        !          2345: \l@\\n(;1u\(ul@
        !          2346: .      mk ;2
        !          2347: .      ta 1.3i 2.4i
        !          2348: .      ie \\n(.$ \{ .ds ]1 \\$1
        !          2349: .              ie \w'\\$1' .nr !T +0\\$1
        !          2350: .              el .nr !T \\nP \}
        !          2351: .      el .nr !T \\nP
        !          2352: .      if \\n(.$-1 \{ .ds ]2 \\$2
        !          2353: .              nr !T +0\\$2 \}
        !          2354: .      if \\n(.$-2 .ds ]3 \\$3
        !          2355: .      if \\n(.$-3 .ds ]4 \\$4
        !          2356: .      if \\n(.$-4 .ds ]5 \\$5
        !          2357: .      if \\n(.$-5 .ds ]6 \\$6
        !          2358: .      if !\w'\\*(]1' .ds ]1 \\nP
        !          2359: .      if !\w'\\*(]2' .ds ]2 0
        !          2360: .      if !\w'\\*(]3' .ds ]3 \\n(!T
        !          2361: .      if !\w'\\*(]4' .ds ]4 \\n(Fg
        !          2362: .      if !\w'\\*(]5' .ds ]5 \\n(Tb
        !          2363: .      if !\w'\\*(]6' .ds ]6 \\n(Rf
        !          2364: .      sp .5v
        !          2365: \s9Pages Text:\ \ \s0\\*(]1\t\s9Other:\ \ \s0\\*(]2\t\s9Total:\ \ \s0\\*(]3
        !          2366: .      sp 1v
        !          2367: \s9No. Figures:\ \ \s0\\*(]4\t\s9No. Tables:\ \ \s0\\*(]5\t\s9No. Refs.:\ \ \s0\\*(]6
        !          2368: .      sp .5v
        !          2369: .      mk ;3
        !          2370: \l@\\n(;1u\(ul@
        !          2371: .      nr ;1 \\n(;3u-\\n(;2u+1v
        !          2372: .      sp -1
        !          2373: \h'3.65i'\L'-\\n(;1u'\v'\\n(;1u'
        !          2374: .      tl '\s8E-1932-U (3-76)'SEE REVERSE SIDE FOR DISTRIBUTION LIST\s0''
        !          2375: '      br \}
        !          2376: .nr O \\n(!O   \" restore offset
        !          2377: .nr W \\n(!W   \" restore page width
        !          2378: .po \\nOu
        !          2379: .ll \\nWu
        !          2380: .lt \\nWu
        !          2381: '\"    put back traps
        !          2382: .wh 0 )h
        !          2383: .ch )n -\\n(:mu
        !          2384: .rn >z )f \" regular footer def'n
        !          2385: .rn >s >B      \" put back bottom block expander
        !          2386: .ch )f -\\n(:mu
        !          2387: .ch )b -\\n(:ru
        !          2388: .)R \" reset normal world
        !          2389: .ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i
        !          2390: '\"    clean up
        !          2391: .nr ;0 0
        !          2392: .nr ;1 0
        !          2393: .nr ;2 0
        !          2394: .rm >S
        !          2395: ..
        !          2396: '''\"  FC: generate formal closing [0:1]
        !          2397: '''\"  .FC [arg]
        !          2398: ''\"   .FC   (no arg) uses "Yours very truly," as closing
        !          2399: ''\"   .FC x    uses x as formal closing
        !          2400: .de FC
        !          2401: .)w    \" force out any floating keeps
        !          2402: .in 0
        !          2403: .nf
        !          2404: .ls 1
        !          2405: .in (\\n(.lu/2u)       \" start closing at center of page
        !          2406: .rs
        !          2407: .ne \\n(:Vu+3v+.5p     \" need .SG room + 2 lines
        !          2408: .sp
        !          2409: .ie \\n(.$ \\$1
        !          2410: .el Yours very truly,
        !          2411: .in
        !          2412: .fi
        !          2413: ..
        !          2414: '''\"  SG: generate signature line(s) [0:2]
        !          2415: '''\"  .SG [arg] [1]
        !          2416: ''\"   .SG     (no arg) causes signature, but no reference data
        !          2417: ''\"   .SG ""  causes signature, followed by reference data
        !          2418: ''\"   .SG x   causes x to be added to reference data as typist's initials
        !          2419: ''\"   if 2nd arg, then ref data aligned with first joint author
        !          2420: .de SG
        !          2421: '\"    error checks
        !          2422: .if !\\n(:V .)D "SG:no authors"
        !          2423: .if \\n(:F .)D "SG:missing FE"
        !          2424: .if \\n(:y .)D "SG:missing DE"
        !          2425: .LC 0 \" clean out any lists
        !          2426: .)w            \" force out any floating keeps
        !          2427: .)R \" reset things
        !          2428: .in 0
        !          2429: .nf
        !          2430: .ls 1
        !          2431: .in (\\n(.lu/2u)
        !          2432: .ne \\n(:Vu+1v+.5p
        !          2433: .rs
        !          2434: .mk
        !          2435: .>v
        !          2436: .in
        !          2437: .if \w@\\$1@ .as }v -\\$1
        !          2438: .if \\n(.$-1 .rt \" go to top of sig. if 2nd arg
        !          2439: .if \\n(.$-1 .sp 3
        !          2440: .if \\n(.$ .if !\\n(.$-1 .rt -1
        !          2441: .if \\n(.$ \\*(}v
        !          2442: .rm >v
        !          2443: .fi
        !          2444: ..
        !          2445: '''\"  NS: notation after .SG [0:1]
        !          2446: '''\"  .NS [arg]
        !          2447: '\"    null,0 - 9 => various notations
        !          2448: '\"    string => copy (string) to
        !          2449: .de NS
        !          2450: .if \\n(!N .di \"close diversion if multiple NS
        !          2451: .if \\n(;M .br \"break only if following .MT
        !          2452: .)R \" just in case
        !          2453: .nr :D 1  \" indicate nofill, open diversion
        !          2454: .ds }4 "Copy to\" default notation
        !          2455: .nr ;0 0\\$1
        !          2456: .if \w@\\$1@u-\w'\0\0'u .nr ;0 10\"arg value not over two digits
        !          2457: .if \\n(;0 .ds }4 "Copy (with att.) to\"
        !          2458: .if \\n(;0-1 .ds }4 "Copy (without att.) to\"
        !          2459: .if \\n(;0-2 .ds }4 "Att.\"
        !          2460: .if \\n(;0-3 .ds }4 "Atts.\"
        !          2461: .if \\n(;0-4 .ds }4 "Enc.\"
        !          2462: .if \\n(;0-5 .ds }4 "Encs.\"
        !          2463: .if \\n(;0-6 .ds }4 "U.S.C.\"
        !          2464: .if \\n(;0-7 .ds }4 "Letter to\"
        !          2465: .if \\n(;0-8 .ds }4 "Memorandum to\"
        !          2466: .if \\n(;0-9 .ds }4 "Copy (\\$1) to\"
        !          2467: 'in \\n(;N  \" indent the same amount as the abstract
        !          2468: .if !\\n(!N .ds }5 \\*(}4  \"save initial copy-to string
        !          2469: .if \\n(!N  .da }C  \"if not initial copy-to, continue }C
        !          2470: .if !\\n(!N  .di }C  \" if initial copy-to, open }C
        !          2471: .if \\n(!N .sp
        !          2472: \!.ds }4 \\*(}4\"req'd for >Z macro inside )M
        !          2473: \\*(}4
        !          2474: .nf
        !          2475: .nr !N 1  \"indicate presence of at least 1 NS
        !          2476: ..
        !          2477: ''\"   )N: put out copy-to list(s)
        !          2478: .de )N
        !          2479: .br
        !          2480: .rr !N \"indicate completion of a copy-to list
        !          2481: .di ]v         \" temp div to find size of copy to list
        !          2482: .}C
        !          2483: .br
        !          2484: .di
        !          2485: .rm ]v
        !          2486: .nr ;0 \\n(dn  \" size of list
        !          2487: .if \\n(;0 .)M \" output notations, if any
        !          2488: ..
        !          2489: ''\"   )M - dump a notations list
        !          2490: .de )M
        !          2491: .nf
        !          2492: .sp
        !          2493: .ne 2v
        !          2494: .if \\n(.tu<=2v \{\
        !          2495: \&\\*(}5
        !          2496: See next page
        !          2497: 'br \}
        !          2498: .nr !U \\n(;0>=\\n(.tu \" will the list be continued?
        !          2499: .if \\n(!U \{\
        !          2500: .      ds ]w Continued next page\"     for footer
        !          2501: .      ds ]x \\\\*(}4\ \-\ contd.\"    for header
        !          2502: .      ch )f -(\\n(:ou+1v) \}  \" move up footer
        !          2503: .}C                    \" output copy to list
        !          2504: .if \\n(!U \{\
        !          2505: .      rm ]w ]x
        !          2506: .      ch )f -\\n(:ou \}       \" restore footer pos
        !          2507: .rm }C
        !          2508: ..
        !          2509: '''\"  NE: notation end
        !          2510: '''\"  .NE
        !          2511: .de NE
        !          2512: .br
        !          2513: .if \\n(!N .di
        !          2514: .if \\n(;M .)N  \"if post-MT, put out list immediately
        !          2515: .)R \" reset normal world
        !          2516: ..
        !          2517: '''\"  AV: generate approval line
        !          2518: '''\"  .AV "name"
        !          2519: .de AV
        !          2520: .ne 6v
        !          2521: .in 0
        !          2522: .nf
        !          2523: .sp
        !          2524: APPROVED:
        !          2525: .sp 2
        !          2526: '\"    Draw 3 inch line then .3 inch space then 1.5 inch line
        !          2527: \l'3i'\h'.3i\l'1.5i'
        !          2528: '\" Arg is approver's name under 3" line then Date under 1.5" line
        !          2529: \\$1\h'|4i-(\w'Da'u)'Date
        !          2530: .in
        !          2531: .fi
        !          2532: ..
        !          2533: '''\"  ND: set new date [0:1]
        !          2534: '''\"  .ND date
        !          2535: .de ND
        !          2536: .if !\\n(.$ .)D "ND:missing arg"
        !          2537: .ds DT "\\$1
        !          2538: ..
        !          2539: '''\"  AF: Override Format of Bell Laboratories, Subject/Date/From
        !          2540: '''\"  .AF ["company"]
        !          2541: ''\"   .AF "company" replaces BTL by company
        !          2542: ''\"   .AF "" suppresses BTL only (so stamp) can be used
        !          2543: '\"    exists only to set ;2 and }2 for .MT
        !          2544: .de AF
        !          2545: .ds }2 "\\$1
        !          2546: ..
        !          2547: '\"    Header, Footer, Bottom of page and Footnotes
        !          2548: '\"    header/bottom of page use .ev 2
        !          2549: '\"    footnotes done in .ev 1
        !          2550: '\"    ;x flag set in .em to help flush any remaining footnotes
        !          2551: '\"    :o place that footer trap is moved at end of a footnote
        !          2552: '\"    :q size of diverted partial footnote
        !          2553: '\"    :m trap for partial footnote diverter and initial footer trap locn
        !          2554: '\"    :r bottom of page trap
        !          2555: '\"    :s counter of existing footnotes
        !          2556: '\"    :u flag set by .H to increment H1 (and p)
        !          2557: '\"    ;y amount of space left on page when footer called TEMP
        !          2558: '\"    ;z amt of space before expanding footnote TEMP
        !          2559: '\"    >x partial footnote text diverted here
        !          2560: '\"    >w entire footnote text diverted here
        !          2561: '\"    }y string used in line drawing func TEMP
        !          2562: '\"    !C test if PX outputs text     TEMP
        !          2563: '\"    
        !          2564: '\"    .)h
        !          2565: '\"    header macro
        !          2566: .de )h
        !          2567: 'ev 0
        !          2568: 'nh
        !          2569: 'if \\n(Hy 'hy 14
        !          2570: 'ev
        !          2571: 'ev 2
        !          2572: .nr ;8 1
        !          2573: .)k\" do cut mark w/o messing w/ .po
        !          2574: .rr ;8
        !          2575: .)R
        !          2576: .nr P +1
        !          2577: .if \\n(:Z \{.nr P \\n%
        !          2578: .      rr :Z \}
        !          2579: '\"            following may occur when new page is because of .H 1
        !          2580: .if \\n(:u*\\n(:S .nr P 1 \" new section, restart to 1
        !          2581: .if \\n(:u \{.nr H1 +1 \" section needs increment
        !          2582: .            nr :u 2 \}\" show )h incremented it, so .H knows
        !          2583: 'sp \\n(!X             \" extra for top margin
        !          2584: .TP\" user-redefinable macro
        !          2585: .br\"force a break in the header environment
        !          2586: .)R
        !          2587: 'ev
        !          2588: .nr :I 2\"force indent on following .P & set flag for )y
        !          2589: .nr :J \\n(nl\"mark spot for )y
        !          2590: 'ns
        !          2591: 'if \\n(:q .)l \" reprocess any leftover partial footnotes
        !          2592: 'nr :q 0
        !          2593: .mk ;r
        !          2594: .mk ;m
        !          2595: .nr !B 0               \" display width flag (set by )z)
        !          2596: .if \\n(;d=0&\\n(:z>0 \{\
        !          2597: '\"                    \" then process floating keeps
        !          2598: '      ie \\n(Df>3  \{ ')z     \"option 4: output at least one
        !          2599: '                       )s \}  \"    but as many as will fit
        !          2600: '      el 'if \\n(Df>1 ')z \}  \"option 2: output one keep only
        !          2601: .nr !C \\n(.h          \" save position
        !          2602: .PX \"user-definable page exit
        !          2603: 'ns\"in case PX is non-empty
        !          2604: .if !((\\n(!C=\\n(.h)&(\\n(!B=0)) .mk ;m       \" set only if PX or wide display
        !          2605: '\"    print top part of multi-page table--see )1 macro
        !          2606: .nr ;T 0
        !          2607: .if \\n(;A>0 \{.nr ;h \\n(.i
        !          2608: .      in0
        !          2609: .      >t
        !          2610: .      nr ;T 1         \" mark table header (>t) printed
        !          2611: .      in \\n(;hu      \}
        !          2612: .mk )c
        !          2613: .nr :J \\n(nl\"mark spot for .P indent check
        !          2614: .if !@\\*(]x@@ \\*(]x  \" output message for continued NS/NE
        !          2615: ..
        !          2616: '\"    .)f
        !          2617: '\"    footer macro
        !          2618: .de )f
        !          2619: .if !@\\*(]w@@ \\*(]w  \" output message for continued NS/NE
        !          2620: .nr !D 0               \" clear header position (for .P)
        !          2621: '\"    following cancels effect of .SP lying around
        !          2622: .nr :N 0
        !          2623: 'nr dn 0
        !          2624: '\"    print bottom part of boxed multi-page table
        !          2625: .rn )f >u\"hide footer
        !          2626: .if \\n(;A>0 \{.nr )P 1
        !          2627: .      if \\n(;f=0 .T# 1
        !          2628: '      br \}
        !          2629: .nr ;f 1
        !          2630: .rn >u )f\"restore footer
        !          2631: '\"    compute amount of room left on the page
        !          2632: 'nr ;y \\n(.pu-\\n(nlu-\\n(:mu
        !          2633: '\"    if footnotes and there is room left, call footnote expander
        !          2634: 'if \\n(:s \{'ie \\n(;y-4v .)o
        !          2635: '\"    if footnotes and no room left, save entire footnote text
        !          2636: '             el .)m \}
        !          2637: 'nr :s 0
        !          2638: 'nr :o \\n(:mu
        !          2639: 'nr :O \\n(:mu
        !          2640: .ie \\n(;C=0 \{\
        !          2641: '\"            \"new page if not multi-column
        !          2642: .      if \\n(;e \&\c\"   if end of input - leave a partial
        !          2643: '      bp \}           \" and start a new page
        !          2644: .el .ie \\n(;C=2 .)2   \" end second column
        !          2645: .    el .)1            \" end first column
        !          2646: .rr ;f
        !          2647: .ie @\\*(]w@@ 'ch )f -\\n(:ou  \" reset footer trap pos if not contd NS/NE
        !          2648: .el 'ch )f -(\\n(:ou+1v)       \" up one line if contd NS/NE
        !          2649: ..
        !          2650: '''\"  page headings
        !          2651: '\"    }t string containing top title info
        !          2652: '\"    }e string containing even top title info
        !          2653: '\"    }o string containing odd top title info
        !          2654: '\"    }b string containing bottom title info
        !          2655: '''\"  PH: set page header [1]
        !          2656: '''\"  .PH arg
        !          2657: .de PH
        !          2658: .ds }t "\\$1\"
        !          2659: ..
        !          2660: '''\"  EH: set even page header [1]
        !          2661: '''\"  .EH arg
        !          2662: ''\"   appears below .PH line
        !          2663: .de EH
        !          2664: .ds }e "\\$1\"
        !          2665: ..
        !          2666: '''\"  OH: set odd page header [1]
        !          2667: '''\"  .OH arg
        !          2668: ''\"   appears below .PH line
        !          2669: .de OH
        !          2670: .ds }o "\\$1\"
        !          2671: ..
        !          2672: '''\"  PF: set page footer [1]
        !          2673: '''\"  .PF arg
        !          2674: .de PF
        !          2675: .ds }b "\\$1\"
        !          2676: ..
        !          2677: '''\"  EF: set even page footer [1]
        !          2678: '''\"  .EF arg
        !          2679: ''\"   appears above .PF line
        !          2680: .de EF
        !          2681: .ds }f "\\$1\"
        !          2682: ..
        !          2683: '''\"  OF: set odd page footer [1]
        !          2684: '''\"  .OF arg
        !          2685: ''\"   appears above PF line
        !          2686: .de OF
        !          2687: .ds }p "\\$1\"
        !          2688: ..
        !          2689: '''\"  TP: user redefinable top of page macro [0]
        !          2690: '''\"  .TP
        !          2691: ''\"   page titles (for top of page)
        !          2692: .de TP
        !          2693: 'sp
        !          2694: .)K\" kill S/D/F macros when no .MT
        !          2695: .af ;P \\gP    \" save format of P
        !          2696: .af P 1                \" normal format for next line
        !          2697: .nr ;P \\nP    \" must use different name for P (see .PH)
        !          2698: .af P \\g(;P   \" restore format to P
        !          2699: .af ;P 1       \" normal format for control register
        !          2700: .ie \\n(Pv \{\
        !          2701: .      ie (\\n(Pv=1)&(\\n(;P>1) 'sp 2
        !          2702: .      el \{\
        !          2703: .              ce
        !          2704: PRIVATE\h'-\w'PRIVATE'u'\l'\w'PRIVATE'u'
        !          2705: .              sp \} \}
        !          2706: .el 'sp 2
        !          2707: .if !\\n(;P-1 .if \\nN 'sp
        !          2708: .if !\\n(;P-1 .if \\n(:S .tl \\*(}t
        !          2709: .if !\\n(;P-1 .if !\\nN .tl \\*(}t
        !          2710: .if \\n(;P-1 .ie \w'\\*(]n' .tl '\\*(]n - \\nP'''
        !          2711: .      el .tl \\*(}t
        !          2712: 'if !\\n(;P%2 'tl \\*(}e
        !          2713: 'if \\n(;P%2 'tl \\*(}o
        !          2714: 'sp 2
        !          2715: ..
        !          2716: '''\"  PX: page heading exit
        !          2717: '''\"  user-definable macro
        !          2718: '\"    .de PX
        !          2719: '\"    ..
        !          2720: '''\"  .de PM [N:P:BP:BR:]
        !          2721: '\"    disclosure notice invoking macro.
        !          2722: .de PM
        !          2723: .if @\\$1@@ \{\
        !          2724: .      nr !K 0
        !          2725: .      nr :U 0-5v      \}
        !          2726: .if \w@\\$1@ \{\
        !          2727: .   ie @\\$1@P@ .nr !K 1
        !          2728: .   el .ie @\\$1@BP@ .nr !K 3
        !          2729: .      el .ie @\\$1@BR@ .nr !K 4
        !          2730: .         el .nr !K 2 
        !          2731: .   nr :U 5v  \}       \" size of disclosure message
        !          2732: .)G            \" reserve bottom
        !          2733: ..
        !          2734: '\"    .)b
        !          2735: '\"    bottom of page titles
        !          2736: .de )b
        !          2737: 'ev 2
        !          2738: .ie \\n(!K=1 \{\
        !          2739: .      tl @@\fBPRIVATE\fR@@
        !          2740: .      tl @@This information should not be disclosed to unauthorized persons.@@
        !          2741: .      tl @@It is meant solely for use by authorized Bell System employees.@@ \}
        !          2742: .el .ie \\n(!K=3 \{\
        !          2743: .      tl @@\fBBELL LABORATORIES PROPRIETARY\fR@@
        !          2744: .      tl @@Not for use or disclosure outside Bell Laboratories except by@@
        !          2745: .      tl @@written approval of the director of the distributing organization.@@ \}
        !          2746: .el .ie \\n(!K=4 \{\
        !          2747: .      tl @@\fBBELL LABORATORIES RESTRICTED\fR@@
        !          2748: .      tl @@The information herein is meant solely for use by authorized@@
        !          2749: .      tl @@Bell Laboratories employees and is not to be disclosed to others.@@ \}
        !          2750: .el .if \\n(!K=2 \{\
        !          2751: .      tl @@\fBNOTICE\fR@@
        !          2752: .      tl @@Not for use or disclosure outside the@@
        !          2753: .      tl @@Bell System except under written agreement.@@ \}
        !          2754: .if \\n(!K .tl @@@@
        !          2755: .)R
        !          2756: .af ;P \\gP    \" save format of P
        !          2757: .af P 1                \" make the value of P be available
        !          2758: .nr ;P \\nP    \" must use different name for P (see .PH)
        !          2759: .af P \\g(;P   \" return format to P
        !          2760: .af ;P 1       \" make that value be available
        !          2761: .ie !\\n(;P%2 .tl \\*(}f
        !          2762: .el .tl \\*(}p
        !          2763: .ie \\n(;P=1 \{\
        !          2764: .   ie \\nN=1 .tl \\*(}t
        !          2765: .   el .tl \\*(}b \}
        !          2766: .el .tl \\*(}b
        !          2767: .if \\nC .tl \\*(]C
        !          2768: .)R
        !          2769: 'ev
        !          2770: ..
        !          2771: '\"    )2: end second column
        !          2772: .de )2
        !          2773: .po \\nOu \" reset page offset
        !          2774: .nr ;C 1 \"set col indicator
        !          2775: 'bp \" force next page
        !          2776: ..
        !          2777: '\"    )1: end first column
        !          2778: .de )1
        !          2779: .rt \\n(;mu
        !          2780: .po +\\n(;ou \"advance page offset
        !          2781: .nr ;C 2 \"set col indicator
        !          2782: .nr :I 2\"force indent on following .P & set flag for )y
        !          2783: .nr :J \\n(nl\"mark spot for )y
        !          2784: 'ns
        !          2785: 'if \\n(:q .)l \" reprocess any leftover partial footnotes
        !          2786: 'nr :q 0
        !          2787: 'if \\n(;d=0&\\n(:z>0 \{\
        !          2788: '\"                            \" process floating keeps
        !          2789: '      ie \\n(Df>3 \{ ')z      \" option 4: output as many as will fit
        !          2790: '                       )s  \}
        !          2791: '      el 'if \\n(Df>1 ')z  \} \" option 2: output only one
        !          2792: '\"    print top part of multi-page table--see )h macro
        !          2793: .nr ;T 0
        !          2794: .if \\n(;A>0 \{.nr ;h \\n(.i
        !          2795: .      in0
        !          2796: .      >t
        !          2797: .      nr ;T 1                 \" mark table header (>t) output
        !          2798: .      in \\n(;hu      \}
        !          2799: .mk )c
        !          2800: .nr :J \\n(nl\"mark spot for .P indent check
        !          2801: ..
        !          2802: '\"    ;l new line length for each column
        !          2803: '\"    ;o page offset for 2nd column
        !          2804: '\"    ;C column indicator
        !          2805: '\"    ;m marked place (where 2nd col returns to)
        !          2806: .de 2C \" begin 2 column stuff
        !          2807: .if \\n(;C=0 \{\
        !          2808: '\"                    \" a .2C when in 2C mode is a no-op
        !          2809: .br
        !          2810: .)R
        !          2811: .nr ;C 1
        !          2812: .if !\\n(.$ .nr ;l \\n(.lu*8u/17u \" new line length
        !          2813: .if !\\n(.$ .nr ;o \\n(.lu*9u/17u \" 2nd col page offset
        !          2814: .if \\n(.$ .nr ;l \\$1u*1.3n
        !          2815: .if \\n(.$ .nr ;o \\nWu-\\n(;lu
        !          2816: .ev 1
        !          2817: .ll \\n(;lu
        !          2818: .lt \\n(;lu
        !          2819: .ev
        !          2820: .ll \\n(;lu
        !          2821: .lt \\n(;lu
        !          2822: .nr :L \\nW\"save line length
        !          2823: .nr W \\n(.lu
        !          2824: .SP
        !          2825: .ns
        !          2826: .mk ;m \}
        !          2827: ..
        !          2828: .de 1C
        !          2829: .if \\n(;C \{\
        !          2830: '\"                    \" 1C no-ops if not in 2C mode
        !          2831: .br
        !          2832: .if \\n(;C>1 .sp |\\n(.hu      \" move below high water mark on this page
        !          2833: .po \\nOu                      \" reset page offset
        !          2834: .)R
        !          2835: .nr W \\n(:Lu
        !          2836: .rr ;L ;C
        !          2837: .ev1
        !          2838: .ll \\nWu
        !          2839: .lt \\nWu
        !          2840: .ev
        !          2841: .ll \\nWu
        !          2842: .lt \\nWu
        !          2843: .SP .5
        !          2844: .ns \}
        !          2845: ..
        !          2846: '''\"  WC:  Width and Output Control for displays/footnotes in 1C/2C
        !          2847: '''\"  .WC [arg1] [arg2] ... [arg9]
        !          2848: '''\"  where each of argi is either N, [-]WD, [-]WF, [-]FF, [-]FB
        !          2849: ''\"   N - set defaults (;a=;b=;j=0, ;p=1)
        !          2850: ''\"   WD - set wide display mode (;a=1) - all displays wide
        !          2851: ''\"   WF - set wide footnote mode (;b=1) - all footnotes wide
        !          2852: ''\"   FF - set footnotes follow mode (;j=1) - footnotes follow prev on page
        !          2853: ''\"   FB - set floaters cause break mode (;p=1) - on current page
        !          2854: ''\"   an optional '-' preceeding any of the latter 3 arguments will clear
        !          2855: ''\"   the specified flag.
        !          2856: ''\"   this macro sets the internal flags from the command mnemonics
        !          2857: .de WC
        !          2858: .if \\n(.$ \{\
        !          2859: .      ie @\\$1@N@ \{ .nr ;a 0
        !          2860: .                      nr ;b 0
        !          2861: .                      nr ;j 0
        !          2862: .                      nr ;p 1 \}      \" set defaults
        !          2863: .      el .ie @\\$1@WD@ .nr ;a 1       \" set wide display mode
        !          2864: .      el .ie @\\$1@WF@ .nr ;b 1       \" set wide footnotes mode
        !          2865: .      el .ie @\\$1@FF@ .nr ;j 1       \" set footnotes follow mode
        !          2866: .      el .ie @\\$1@FB@ .nr ;p 1       \" set floaters cause break mode
        !          2867: .      el .ie @\\$1@-WD@ .nr ;a 0      \" clear wide display mode
        !          2868: .      el .ie @\\$1@-WF@ .nr ;b 0      \" clear wide footnode mode
        !          2869: .      el .ie @\\$1@-FF@ .nr ;j 0      \" clear footnotes follow mode
        !          2870: .      el .ie @\\$1@-FB@ .nr ;p 0      \" clear floaters cause break mode
        !          2871: .      el ')D "WC: unknown option"
        !          2872: .      if \\n(.$ .WC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          2873: '      br  \}
        !          2874: ..
        !          2875: .de >W
        !          2876: ''\"   go to temporary wide mode for footnote or display
        !          2877: .if \\n(;C \{\
        !          2878: .      ev 1            \" change only footnote/keep environment
        !          2879: .      ll \\n(:Lu
        !          2880: .      lt \\n(:Lu      \" set long length
        !          2881: .      ev
        !          2882: .      nr W \\n(:Lu    \" set width register
        !          2883: .      nr ;W 1 \}      \" mark temporary wide mode
        !          2884: ..
        !          2885: .de >N
        !          2886: ''\"   go to temporary narrow mode for footnote or display
        !          2887: .if (\\n(;l>0)&(\\n(;C=0) \{\
        !          2888: .      ev 1            \" change only footnote/keep environment
        !          2889: .      ll \\n(;lu      \" set short length (calculated by 2C)
        !          2890: .      lt \\n(;lu
        !          2891: .      ev
        !          2892: .      nr W \\n(;lu
        !          2893: .      nr ;W 2 \}      \" mark temporary narrow mode
        !          2894: ..
        !          2895: .de >R
        !          2896: ''\"   return from temporary wide or narrow mode
        !          2897: .ie \\n(;W=1 .nr W \\n(;lu     \" change back to narrow
        !          2898: .el .if \\n(;W=2 .nr W \\n(;Lu \" back to wide
        !          2899: .if \\n(;W \{\
        !          2900: .      ev 1
        !          2901: .      ll \\nWu                \" reset line lengths
        !          2902: .      lt \\nWu
        !          2903: .      ev
        !          2904: .      nr ;W 0 \}              \" clear temp mode flag
        !          2905: ..
        !          2906: .de )Q
        !          2907: '\"    called in second column to not overprint a long footnote
        !          2908: '\"    (called as a substitute to )f)
        !          2909: .ch )Q 200v    \" move away
        !          2910: .rs
        !          2911: 'sp 70 \}      \" space over already printed footnotes
        !          2912: ..
        !          2913: '''\"  BS: bottom start [0]
        !          2914: '''\"  .BS
        !          2915: ''\"   define a block of text to appear on
        !          2916: ''\"   the bottom of a page between the footnotes and
        !          2917: ''\"   the page footer
        !          2918: .de BS
        !          2919: .ev1
        !          2920: .)R
        !          2921: .di >K
        !          2922: ..
        !          2923: '''\"  BE: bottom end [0]
        !          2924: '''\"  .BE
        !          2925: ''\"   end bottom block
        !          2926: .de BE
        !          2927: .br
        !          2928: .di
        !          2929: .)R
        !          2930: .ev
        !          2931: .nr :U \\n(dnu\"how big is new tail block
        !          2932: .)W    \" set bottom to size of :U
        !          2933: .rn >K >D
        !          2934: .nr :T \\n(:Uu\"save size of current tail block
        !          2935: ..
        !          2936: .de )W         \" move bottom definitions and traps.
        !          2937: .if (\\n(:Uu+\\n(:Mu)>(\\n(.pu-\\n(nlu-.5v) .SK\"new page if bigger than where we are now
        !          2938: .ch )n -(\\n(:Mu+\\n(:Uu)\"move footnote diverter trap
        !          2939: .nr :o +(\\n(:Uu-\\n(:Tu)
        !          2940: .nr :O +(\\n(:Uu-\\n(:Tu)
        !          2941: .ch )f -\\n(:ou\"move footer trap
        !          2942: .nr :m \\n(:Mu+\\n(:Uu\"new place for footer to reside
        !          2943: .ch >B -(\\n(:Mu+\\n(:Uu+\\n(!Yu-1v) \"plant trap for tail mode expander
        !          2944: ..
        !          2945: '\"    >B: bottom expander
        !          2946: '\"    layout block of text collected by BS/BE
        !          2947: .de >B
        !          2948: .ev2
        !          2949: .)R
        !          2950: .nf
        !          2951: .>D
        !          2952: .)R
        !          2953: .ev
        !          2954: ..
        !          2955: '''\"  VM - Vertical Margin control
        !          2956: '\"    VM t b   where t and b are extra number of lines for top and bottom
        !          2957: .de VM
        !          2958: .ie 0\\$1>=0 .nr !X 0\\$1      \" legal value
        !          2959: .el .nr !X 0                   \" illegal - default
        !          2960: .ie 0\\$2>=0 .nr ;n 0\\$2      \" legal for bottom?
        !          2961: .el .nr ;n 0
        !          2962: .if !@\\$2@@ \{\
        !          2963: .      nr :U \\n(;nv   \" bottom size
        !          2964: .      ie !\\n(!K .nr :M \\n(!V        \" real bottom of page
        !          2965: .      el      .nr :M \\n(!V+5v        \" for disclosre message
        !          2966: .      )G \}           \" reserve new bottom
        !          2967: ..
        !          2968: ''\"   )G - reserve a new bottom margin (size in :U)
        !          2969: .de )G
        !          2970: .nr !Y \\n(:T  \" save old size
        !          2971: .nr :T 0
        !          2972: .)W            \" move traps, etc.
        !          2973: .nr :M \\n(:m  \" save 'real' bottom for BS/BE
        !          2974: .ch )b -(\\n(:mu-2v)   \" move bottom message trap
        !          2975: .nr :T \\n(!Y  \" restore
        !          2976: .rr !Y
        !          2977: ..
        !          2978: '''\"  FS: footnote text start [0:1]
        !          2979: '''\"  .FS [flag]
        !          2980: ''\"   optional flag used as footnote label;
        !          2981: ''\"   if no argument, lay out a number derived from the
        !          2982: ''\"   \*F that appears in the text which auto increment 
        !          2983: ''\"   a number register
        !          2984: '\"    set hyphenation and adjust according to :i and :j
        !          2985: '\"    set }y to the "label" -- either the argument
        !          2986: '\"            or the footnote numberer
        !          2987: '\"    if no indent, layout the label
        !          2988: '\"    if indent, determine the width of the standard indent (;z)
        !          2989: '\"            and the width of the label
        !          2990: '\"            indent by the standard amount
        !          2991: '\"            if the label is to be left justified, undent the
        !          2992: '\"                    std amount; layout either the label
        !          2993: '\"                    and enough space to make up the std
        !          2994: '\"                    amt or the label (if it is bigger than the 
        !          2995: '\"                    amt); layout the label
        !          2996: '\"            if the label is to be right justified,
        !          2997: '\"                    undent by the minimum of the std amt
        !          2998: '\"                    and the width of the label
        !          2999: '\"                    layout the label
        !          3000: '\"    !A  used to inhibit the output of footnotes in the second column
        !          3001: .de FS
        !          3002: 'nr :s +1 \" incr counter of existing footnotes
        !          3003: .if \\n(:F .)D "FS:missing FE"\"error if existing footnote
        !          3004: .if \\n(:F .FE\"end prior footnote
        !          3005: .if \\n(:y .)D "FS:missing DE"\"error if existing keep
        !          3006: .if \\n(:y .DE\"end prior keep
        !          3007: .nr :F 1\"indicate FS begun
        !          3008: .if !\\n(!F \{\
        !          3009: .      ie \\n(;C .nr !F 2      \" narrow
        !          3010: .      el .nr !F 1  \}         \" go wide
        !          3011: .ie (\\n(;C>0)&((\\n(;b=1):((\\n(;j=1)&(\\n(!F=1))) \{\
        !          3012: .      nr !F 1                 \" go wide
        !          3013: .      >W  \}
        !          3014: .el .if ((\\n(;C=0)&(\\n(;j=1)&(\\n(!F=2))  .>N   \" go narrow
        !          3015: 'ev 1
        !          3016: 'di >b
        !          3017: .nr :D 1
        !          3018: .)R
        !          3019: 'nh
        !          3020: 'if \\n(:i 'hy 14
        !          3021: 'ad
        !          3022: 'if \\n(:j 'na
        !          3023: 'ps -2
        !          3024: 'vs \\n(.sp+1p
        !          3025: 'sp \\n(Fsu*3p
        !          3026: 'if \\n(.$ 'ds }y \\$1\ \"
        !          3027: 'if !\\n(.$ 'ds }y \\*(]y.\ \"
        !          3028: 'if \\n(:k \\*(}y\&\c
        !          3029: 'if !\\n(:k 'nr ;v \w@\0\0.\ @
        !          3030: 'if !\\n(:k 'nr ;u \w@\\*(}y@
        !          3031: 'if !\\n(:k 'in +\\n(;vu
        !          3032: 'if !\\n(:k 'if !\\n(:l 'ti -\\n(;vu
        !          3033: 'if !\\n(:k 'if !\\n(:l 'if !\\n(;u-\\n(;v \\*(}y\h@\\n(;vu-\\n(;uu@\&\c\"}y now free
        !          3034: 'if !\\n(:k 'if !\\n(:l 'if \\n(;u-\\n(;v \\*(}y\&\c
        !          3035: 'if !\\n(:k 'if \\n(:l 'if \\n(;v-\\n(;u 'ti -\\n(;uu
        !          3036: 'if !\\n(:k 'if \\n(:l 'if !\\n(;v-\\n(;u 'ti -\\n(;vu
        !          3037: 'if !\\n(:k 'if \\n(:l \\*(}y\&\c
        !          3038: ..
        !          3039: '\"    .FE - Footnote end
        !          3040: .de FE
        !          3041: .if !\\n(:F .)D "FE:no FS active"
        !          3042: .br
        !          3043: 'di
        !          3044: .nr :D 0
        !          3045: .if \\n(;c .nr :D \\n(;c
        !          3046: 'in 0
        !          3047: 'nf
        !          3048: 'na
        !          3049: .if !\\n% \{\
        !          3050: '      da >c
        !          3051: .      >b
        !          3052: \!.    br
        !          3053: '      di
        !          3054: .      if !(\\n(:D=3) \{\
        !          3055: .              nr :G 1 \" save footnt for reprint on P. 1 of .AS 2
        !          3056: .              da >d
        !          3057: .              >b
        !          3058: \!.            br
        !          3059: .              di
        !          3060: '              br \}
        !          3061: '      br \}
        !          3062: .if !((\\n%=0)*(\\n(:D=3)*(\\n(:t=1):(\\n(;X)) \{\
        !          3063: '      da >y
        !          3064: .      >b
        !          3065: \!.    br
        !          3066: '      di
        !          3067: '      br \}
        !          3068: 'rm >b
        !          3069: .)R
        !          3070: 'ev
        !          3071: .nr :F 0\"indicate footnote ended
        !          3072: .>R            \" revert from possible temporary width
        !          3073: '\"    add a space if this is the first footnote
        !          3074: .if !((\\n%=0)*(\\n(:D=3)*(\\n(:t=1):(\\n(;X)) \{\
        !          3075: .if !((\\n(!A=1):((\\n(;C=2)&(\\n(!F=1))) \{\
        !          3076: '\"    No footnotes now if they are wide in 2C, or there are already
        !          3077: '\"    wide ones on this page
        !          3078: '      if !\\n(:s-1 'nr dn +4v+.5p
        !          3079: '      nr :o +\\n(dnu
        !          3080: '      nr :O +\\n(dnu
        !          3081: .      nr dn 0
        !          3082: '\"    Move up footer trap, but not above current position on page,
        !          3083: '      if !\\n(.pu-\\n(nlu-.5p-\\n(:ou 'nr :o \\n(.pu-\\n(nlu-.5p
        !          3084: '\"    or below :m!
        !          3085: '      if !\\n(:ou-\\n(:mu 'nr :o \\n(:mu
        !          3086: '      ch )f -\\n(:ou \" move footer trap
        !          3087: '      br \}\}
        !          3088: ..
        !          3089: '\"    .)o
        !          3090: '\"    footnote expander, called via footer
        !          3091: .de )o
        !          3092: '\"    if first column and wide footnotes, prepare for second column.
        !          3093: .ie (\\n(!F=1)&(\\n(;C=1) \{\
        !          3094: .      nr !A 1 \}      \" mark wide footnotes output
        !          3095: .el .nr !A 0           \" else wont overprint footnotes
        !          3096: 'ev 1
        !          3097: .)R
        !          3098: 'ps -2
        !          3099: 'vs \\n(.sp+1p
        !          3100: 'nf
        !          3101: '\"    compensate for the .5p in FE
        !          3102: 'nr ;5 \\n(.pu-\\n(:ou+.5p
        !          3103: 'if \\n(;5u>\\n(nlu 'sp |\\n(;5u+.5p
        !          3104: 'nr ;5 \\n(.pu-\\n(nlu-1v-\\n(:mu
        !          3105: .ie \\n(;5u>0 \{\
        !          3106: '      sp      \" put two spaces before footnote rule
        !          3107: .      ti 0
        !          3108: '\"            layout partial rule if new footnote
        !          3109: '\"            layout full line length rule if continued footnote
        !          3110: .      ie \\n(:n=0 \{.ie \n(.A=0 \l'72p'
        !          3111: .              el  __________ \}
        !          3112: .      el \{.ie \n(.A=0 \l@\\n(.lu@
        !          3113: .              el _____________________________ \}
        !          3114: '      nr :n 0
        !          3115: .      br
        !          3116: .      if \\n(!A .wh (\\n(nl-2v) )Q    \" set trap for later if long ftnts
        !          3117: '      br \}
        !          3118: .el 'sp 15i
        !          3119: .rr ;5
        !          3120: 'nr ;Z 1       \" signal )n to expect text
        !          3121: 'nr dn 0
        !          3122: '\"    dump accumulated footnote text
        !          3123: '\"    long text may spring )n trap so the remaining partial
        !          3124: '\"    text may go into >x
        !          3125: 'ps
        !          3126: 'vs \\n(.sp+2p
        !          3127: .>y
        !          3128: .br
        !          3129: 'di
        !          3130: .if \\n(dn=1v .nr dn 0 \" if only the blank line - ignore it
        !          3131: 'nr ;Z 0       \" footnotes over
        !          3132: .if !\\n(;C=1 \{\
        !          3133: .      rr !A           \" if new page - clr long footnotes on page flag
        !          3134: .      if \\n(dn=0 .rr !F \}  \" clr footnote width flag if no partial
        !          3135: 'rm >y
        !          3136: 'nr :q \\n(dnu
        !          3137: 'nr dn 0
        !          3138: 'nr :s 0 \" zero counter of existing footnotes
        !          3139: .)R
        !          3140: 'ev
        !          3141: ..
        !          3142: '\"    .)n
        !          3143: '\"    partial footnote text diverter
        !          3144: '\"    called via trap planted at -\n(:m
        !          3145: '\"    since the default footer trap is also at -n(:m,
        !          3146: '\"    this macro actually invoked when the footer trap
        !          3147: '\"    has been moved up due to footnote processing
        !          3148: .de )n
        !          3149: 'if \\n(;Z \{
        !          3150: '      di >x
        !          3151: '      sp \\n(Fs  \}   \" only if footnotes
        !          3152: ..
        !          3153: '\"    .)m
        !          3154: '\"    called from footer when the size of the footnote text
        !          3155: '\"    is greater than room left on the page
        !          3156: '\"    saves all the accumulated footnote text into >w
        !          3157: .de )m
        !          3158: 'ev 1
        !          3159: .)R
        !          3160: 'ps -2
        !          3161: 'vs \\n(.sp+1p
        !          3162: .nf
        !          3163: 'di >w
        !          3164: .>y
        !          3165: .br
        !          3166: 'di
        !          3167: 'rm >y
        !          3168: 'nr :q \\n(dn
        !          3169: 'nr dn 0
        !          3170: 'nr :s 0
        !          3171: 'if \\n(:q 'nr :n 1
        !          3172: .if !\\(;C=1 .rr !A    \" if new page - clr long notes on page flag
        !          3173: .)R
        !          3174: 'ps
        !          3175: 'vs \\n(.sp+2p
        !          3176: 'ev
        !          3177: ..
        !          3178: '\"    .)l
        !          3179: '\"    reprocess any leftover partial footnotes and any
        !          3180: '\"    entire footnotes
        !          3181: '\"    called from .)h
        !          3182: .de )l
        !          3183: 'nr :s 1
        !          3184: .nr :n 1
        !          3185: 'di
        !          3186: 'ev 1
        !          3187: 'di >b
        !          3188: .)R
        !          3189: 'ps -2
        !          3190: 'vs \\n(.sp+1p
        !          3191: 'nh
        !          3192: 'nf
        !          3193: .>x
        !          3194: .>w
        !          3195: .nr :F 1\"pretend to be .FS
        !          3196: .FE
        !          3197: 'rm >x
        !          3198: 'rm >w
        !          3199: ..
        !          3200: '''\"  FD: set footnote default formatting [0:2]
        !          3201: '''\"  .FD [arg] [1]           0 <= arg <= 11
        !          3202: ''\"   arg=1 ==> hyphenate footnotes
        !          3203: ''\"   arg=2 ==> don't adjust footnotes
        !          3204: ''\"   arg=4 ==> footnotes flush left, no indent
        !          3205: ''\"   arg=8 ==> footnotes indented, stub flush right
        !          3206: '\"                    (or any combination <_ 11 decimal).
        !          3207: '\"             arg=0, arg >11, or arg null ==> reset all defaults 
        !          3208: '\"    defaults: no hyphenate, adjust, indent, no stub right
        !          3209: '\"    nroff defaults via .FD 10 (or plain .FD)
        !          3210: '\"    if 2nd arg, arrange that .H 1's reset fn ctr (set :C)
        !          3211: .de FD
        !          3212: '\"    set defaults
        !          3213: 'nr :i 0 \" hyphenate flag
        !          3214: 'nr :j 0 \" no adjust flag
        !          3215: 'nr :k 0 \" no-indent flag (on means no indent)
        !          3216: 'nr :l 0 \" stub right flag
        !          3217: 'nr ;z 0\"
        !          3218: 'if \\n(.$ 'nr ;z \\$1\"
        !          3219: 'if \\n(;z-11 'nr ;z 0\"
        !          3220: 'if \\n(;z-7 'nr :l 1\"
        !          3221: 'if \\n(;z-7 'nr ;z -8\"
        !          3222: 'if \\n(;z-3 'nr :k 1\"
        !          3223: 'if \\n(;z-3 'nr ;z -4\"
        !          3224: 'if \\n(;z-1 'nr :j 1\"
        !          3225: 'if \\n(;z-1 'nr ;z -2\"
        !          3226: 'if \\n(;z 'nr :i 1\"
        !          3227: 'if \\n(.$-1 .nr :C 1\"set flag for .H 1
        !          3228: ..
        !          3229: '\"    Display mechanism
        !          3230: '\"    ?a text of stored floating keep (where a is a-z)
        !          3231: '\"    ?n size of stored floating keep (where a is a-z)
        !          3232: '\"    !a width of stored floating keep (where a is a-z)
        !          3233: '\"    >0 store for initally diverted text
        !          3234: '\"    :0 size of initially diverted text
        !          3235: '\"    :z counter of floating keeps 
        !          3236: '\"    :y flag indicating Display in progress
        !          3237: '\"    :x index of floating keep most recently expanded
        !          3238: '\"    :w index of floating keep most recently diverted
        !          3239: '\"    :v copy of value of :z (used in .)x and .)y)
        !          3240: '\"    :t register to pass fixed/float info to DE
        !          3241: '\"    ;z size of next to-be-expanded floating keep TEMP
        !          3242: '''\"  DS: start fixed display [0:2]
        !          3243: '''\"  .DS [arg1] [arg2]
        !          3244: ''\"   arg1: no indent (0 or L), indent (1 or I), center (2 or C),
        !          3245: ''\"           center block (3 or CB)
        !          3246: ''\"   arg2: no fill (0 or N), fill (1 or F)
        !          3247: .de DS
        !          3248: .nr :t 0
        !          3249: .)J "\\$1" "\\$2" "\\$3"
        !          3250: ..
        !          3251: '''\"  DF: start floating display [0:2]
        !          3252: '''\"  .DF [arg1] [arg2]
        !          3253: ''\"   arg1: no indent (0 or L), indent (1 or I), center (2 or C),
        !          3254: ''\"           center block (3 or CB)
        !          3255: ''\"   arg2: no fill (0 or N), fill (1 or F)
        !          3256: .de DF
        !          3257: .nr :t 1
        !          3258: .)J "\\$1" "\\$2" "\\$3"
        !          3259: ..
        !          3260: '\"    )J: real display start
        !          3261: '\"    take args from either DS or DF
        !          3262: '\"    :t set to indicate float (1) or fixed (0)
        !          3263: '\"    add 2 if centered
        !          3264: .de )J
        !          3265: .nr ;i \\n(.i          \" save prevailing indent
        !          3266: .nr ;q \\n(.u          \" save prevailing fill/no-fill mode
        !          3267: 'di
        !          3268: .if \\n(:D>1 \{.ie \\n(:t=0  .)D "DS:illegal inside TL or AS"
        !          3269: .      el  .)D "DF:illegal inside TL or AS" \}
        !          3270: .if \\n(:F \{.ie \\n(:t=0 .)D "DS:missing FE"
        !          3271: .      el .)D "DF:missing FE"
        !          3272: .      FE \}           \"close it
        !          3273: .if \\n(:y \{.ie \\n(:t=0 .)D "DS:missing DE"
        !          3274: .      el .)D "DF:missing DE"
        !          3275: .      DE \}           \" end the prev. DS
        !          3276: .nr :y 1               \" set flag indicating Display
        !          3277: .if (\\n(;C>0)&(\\n(;a=1) .>W  \" go wide
        !          3278: .ev 1                  \" switch to keep/footnote environment
        !          3279: .)R                    \" reset all things
        !          3280: 'di >0
        !          3281: .nr :D 1
        !          3282: .nr ;z 0+0\\$1
        !          3283: .if @\\$1@L@ .nr ;z 0  \"left-blocked
        !          3284: .if @\\$1@I@ .nr ;z 1  \"indented
        !          3285: .if @\\$1@C@ .nr ;z 2  \"center each line
        !          3286: .if @\\$1@CB@ .nr ;z 3 \"center as a block
        !          3287: .if \\n(;z>3 .nr ;z 3
        !          3288: .nr :B \\n(;z          \"set flag for type of display
        !          3289: '\"    shorten line length only if .DS 0 or .DS 1
        !          3290: .if \\n(:t=0 .if \\n(;z<2 .ll -\\n(;iu
        !          3291: .if \\n(;z=1 .in +\\n(Sin
        !          3292: .if \\n(;z=2 \{.ce 9999
        !          3293: .      nr :t +2 \}     \"centering flag
        !          3294: .if \\n(:B=3 \{.nr :Y 1        \"initialize width-of-block register
        !          3295: .      nr :t +2
        !          3296: .      nr :X \\n(.i    \"save existing indent
        !          3297: .      di >X \}                \"begin second diversion
        !          3298: .nr ;z 0+0\\$2
        !          3299: .if @\\$2@N@ .nr ;z 0  \" No-fill mode
        !          3300: .if @\\$2@F@ .nr ;z 1  \" Fill mode
        !          3301: .nf
        !          3302: .if \\n(;z .fi
        !          3303: .ll -0\\$3
        !          3304: ..
        !          3305: '\"    .)z
        !          3306: '\"    expand one floating keep here & now
        !          3307: '\"    dump it in keep/footnote env
        !          3308: .de )z
        !          3309: .nr ;w \\n(:x+1%26+1   \" name of next display in queue
        !          3310: .if !((\\n(;C=2)&(\\n(!\\n(;w=1)) \{\
        !          3311: '\"    inhibit if wide display in second column
        !          3312: .nr ;d 1               \" inhibit header from calling )y
        !          3313: .ev 1                  \"keep/footnote env
        !          3314: .SP .5
        !          3315: .)R                    \" reset all things
        !          3316: 'nf
        !          3317: 'rs
        !          3318: .nr :x \\n(:x+1%26     \" get index of the next in the queue
        !          3319: .?\\n(;w               \" lay out one keep
        !          3320: .rm ?\\n(;w
        !          3321: .rr ?\\n(;w !\\n(;w    \" and remove it
        !          3322: .if \\n(!\\n(;w=1 .nr !B 1     \" mark wide display
        !          3323: .)R                    \" reset all things
        !          3324: .if \\n(De \{\
        !          3325: .      if \\n(;e \&\c\"   eject - but leave a partial after EOI
        !          3326: .      bp
        !          3327: .      nr !B 0 \}      \" clear wide column display flag
        !          3328: .ie \\n(:I>1 \{\
        !          3329: '\"                    \" no indent on following .P
        !          3330: .      if \\n(nl>\\n(:J .nr :I 0 \}    \" unless just past )h
        !          3331: .el .nr :I 0
        !          3332: .SP .5
        !          3333: .nr :J \\n(nl
        !          3334: .ev
        !          3335: 'nr :z -1              \" one less keep extant
        !          3336: .nr ;d 0 \}            \" allow )h to process fl keeps again
        !          3337: ..
        !          3338: '\"    .)y
        !          3339: '\"    expand floating keep only if it will fit on this page
        !          3340: .de )y
        !          3341: '\"    get name of next floating display queue entry
        !          3342: 'if \\n(:z \{\
        !          3343: '      nr ;w \\n(:x+1%26+1     \"get index of next in queue
        !          3344: '      nr ;z \\n(?\\n(;w       \"get length of next queue element
        !          3345: '\"    - if there is room to expand the display - do so,  then do a break
        !          3346: '\"    unless called from the header (:I=2) (and watch for the case
        !          3347: '\"    of header, then text, then a DF that fits).
        !          3348: '\"    the same test logic is used in )r.  The if conditional consists
        !          3349: '\"    of thee major parts: (1) the test on :I tests whether we just
        !          3350: '\"    finished a header, (2) the next test tests whether the display will
        !          3351: '\"    fit on this page (distance to the next trap), and (3) is a multiple
        !          3352: '\"    test - it takes the value true when the display is too large to
        !          3353: '\"    fit on any one page, and we have used less than half of the current
        !          3354: '\"    page (meaning that the display can be output now).
        !          3355: .      if (\\n(:I=2):(\\n(;z<\\n(.t):\
        !          3356: ((\\n(;z>(\\n(.p-\\n(;r-\\n(:m))&(\\n(nl<(\\n(.p-\\n(;r-\\n(:o/2u+\\n(;r))) \{\
        !          3357: '              ie \\n(:I<2  .if \\n(;p .br     \" break only if FB mode
        !          3358: '              el .if \\n(:Ju<\\n(nlu  .if \\n(;p .br
        !          3359: '              )z  \}\}        \" output a DF
        !          3360: ..
        !          3361: '\"    .)x
        !          3362: '\"    expand one floating keep here if it fits
        !          3363: '\"    else onto next page
        !          3364: '\"    called only via .)w
        !          3365: .de )x
        !          3366: 'nr :v \\n(:z          \" count of keeps in queue
        !          3367: ')y                    \" attempt to output one
        !          3368: 'if \\n(:v=\\n(:z \{\
        !          3369: '      nr ;d 1         \" don't let )h do the work
        !          3370: '      if \\n(;e \&\c\"   if no keep was output -
        !          3371: '      SP \\n(.tu+1v           \" then start a new page
        !          3372: '      nr ;d 0 
        !          3373: '      )z  \}          \" and force output of one floating keep
        !          3374: ..
        !          3375: '\"    .)w
        !          3376: '\"    expand all floating keeps
        !          3377: '\"    must be called via .em-called macro
        !          3378: '\"    should be called by other macros which cause
        !          3379: '\"            major breaks i.e. certain level headings
        !          3380: .de )w
        !          3381: 'if \\n(:z \{\
        !          3382: '      )x              \" output the next
        !          3383: '      )w \}           \" and do all
        !          3384: ..
        !          3385: '\"    .)u
        !          3386: '\"    process floating keep for the current page
        !          3387: '\"    the action to be performed is controlled by the user-accessible
        !          3388: '\"    registers De and Df, which cause, respectively, a page eject after
        !          3389: '\"    each display, and specify the number of displays on each page.
        !          3390: .de )u
        !          3391: 'if \\n+(:z>25 ')D "DF: too many displays"
        !          3392: 'nr :w \\n(:w+1%26     \" form the next queue element name
        !          3393: 'nr ;w \\n(:w+1                \" get the index name [a:z]
        !          3394: 'rn >0 ?\\n(;w         \" put the display into the queue
        !          3395: .nr !\\n(;w 1          \" mark full column width
        !          3396: .if (\\n(;C>0)&(\\n(;a=0) .nr !\\n(;w 2        \" unless narrow
        !          3397: .nr ?\\n(;w \\n(:0     \" put the size of text into parallel nr queue
        !          3398: '\"    if single display, desired on current page, and not wide
        !          3399: '\"    in two columns, then try to fit it
        !          3400: 'if !((\\n(;C>0)&(\\n(!\\n(;w=1)) 'if (\\n(:z=1)&((\\n(Df%2=1):(\\n(Df>5)) ')y
        !          3401: ..
        !          3402: '\"    .)s
        !          3403: '\"    output as many floating keeps as will fit on this page
        !          3404: .de )s
        !          3405: 'nr :v \\n(:z          \" mark the number of keeps now on queue
        !          3406: 'nr ;Y \\n(:I          \" save
        !          3407: 'nr :I 2               \" from the header
        !          3408: ')y                    \" try to output one
        !          3409: 'ie \\n(:v>\\n(:z  ')s \" and put them out while they fit
        !          3410: 'el 'nr :I \\n(;Y      \" reset
        !          3411: ..
        !          3412: '\"    .)t
        !          3413: '\"    process a static display.  If it is longer than one page and less
        !          3414: '\"    than half of the current page has been used, or the display will
        !          3415: '\"    fit on this page, output is begun immediately.  Otherwise, a new
        !          3416: '\"    page is begun (which may cause output of a floating keep via )h)
        !          3417: '\"    and the static display is output then.  If )h has output a floating
        !          3418: '\"    keep, then the tests for available space must be made again.
        !          3419: .de )t
        !          3420: .br
        !          3421: .nr !L \\n()H          \" save line spacing
        !          3422: .ls 1                  \" output display in ls 1
        !          3423: .)r                    \" perform page/display length tests and leave setup
        !          3424: .ti \\n(.iu            \" preserve against .ti of .H
        !          3425: .nf
        !          3426: .if \\n(:t>1 .in -\\n(;iu  \" go to zero indent for centering
        !          3427: .rs
        !          3428: .nr ;d 1               \" prevent )h from outputting a floating keep
        !          3429: .>0                    \" expand display
        !          3430: .)R
        !          3431: .nr ;d 0
        !          3432: .ie \\n(:I>1 \{\
        !          3433: .      if \\n(nl>\\n(:J .nr :I 0 \}  \" mark indent flag
        !          3434: .el .nr :I 0
        !          3435: .ls \\n(!L             \" reset line spacing
        !          3436: .in \\n(;iu            \" restore prevailing indent
        !          3437: .if !\\n(;q .nf                \" restore no-fill if necessary
        !          3438: .if \\n(Ds .SP .5
        !          3439: .nr :J \\n(nl
        !          3440: ..
        !          3441: '\"    .)r
        !          3442: '\"    Control page orientation  of static displays.
        !          3443: '\"    Static displays are output as soon after their definition as
        !          3444: '\"    feasible.  The following rules are used:
        !          3445: '\"      1. if the display will fit on the current page, output it there.
        !          3446: '\"      2. if the display won't fit on any page, and we have used less than
        !          3447: '\"            half of the current page, then output the display on the
        !          3448: '\"            current page.
        !          3449: '\"      3. skip to the next page.  If this causes a floating display (or
        !          3450: '\"            more than one) to be output, then start again with rule
        !          3451: '\"            1, otherwise, just output the display.
        !          3452: .de )r
        !          3453: .if \\n(Ds  .SP .5     \" initial spacing
        !          3454: '\"    The following if condition tests: (1) if the display is too large to
        !          3455: '\"    fit on the current page and either (2) it will fit on an unused page
        !          3456: '\"    or (3) we have already used more than half of the current page. (the
        !          3457: '\"    three conditions are grouped in the form 1 & (2 : 3)). If this
        !          3458: '\"    total condition is true, then a page is ejected and the display output
        !          3459: '\"    on the next page.  (see )y for a similar construction).
        !          3460: .if (\\n(:0>=\\n(.t)&((\\n(:0<(\\n(.p-\\n(;r-\\n(:m)):\
        !          3461: (\\n(nl>(\\n(.p-\\n(;r-\\n(:o/2u+\\n(;r))) \{\
        !          3462: '\"            \" conditions not met - force a new page
        !          3463: .      if \\n(;e \&\c\" save a partial
        !          3464: .      ne \\n(.tu+1v   \" spring the trap
        !          3465: .      if \\n(:I<2 .)r \}  \" verify room if a floating keep was output
        !          3466: ..
        !          3467: '''\"  DE: display end
        !          3468: '''\"  .DE
        !          3469: '\"    :t=0=>fixed; :t=1=>float; +2 for centering
        !          3470: .de DE
        !          3471: .if !\\n(:y .)D "DE:no DS or DF active"
        !          3472: .if \\n(:B=3 \{.br
        !          3473: .      di              \"if centered block, end diversion into >X
        !          3474: .      if \\n(dl>\\n(:Y .nr :Y \\n(dl
        !          3475: .      if \\n(:Y<\\n(.l .in (\\n(.lu-\\n(:Yu)/2u \"indent by half of white-space
        !          3476: .      nf
        !          3477: .      >X
        !          3478: .      fi
        !          3479: .      rm >X
        !          3480: .      in \\n(:Xu
        !          3481: .      rr :X \}
        !          3482: .ce 0
        !          3483: .br
        !          3484: 'di
        !          3485: .rr :D ;D ;E :B
        !          3486: .)R                    \" reset all things
        !          3487: .ll \\nWu              \"including line length
        !          3488: .ev
        !          3489: 'nr :0 \\n(dn          \" get size of keep 
        !          3490: 'nr dn 0
        !          3491: .nr ;x \\n(:t
        !          3492: .if \\n(:t-1 .nr ;x -2
        !          3493: .>R                    \" revert from possible temp width
        !          3494: .if !\\n(;x .)t                \" process fixed style 
        !          3495: .if \\n(;x .)u         \" process floating keep
        !          3496: .nr :y 0               \" flag indicating DE
        !          3497: .nr :Y 0               \"clear width-of-block register
        !          3498: ..
        !          3499: '\"    .)R
        !          3500: '\"    reset all things
        !          3501: .de )R
        !          3502: 'fi
        !          3503: 'na\"  reset default adjustment (see .SA)
        !          3504: .if \\n(:h 'ad
        !          3505: 'nh
        !          3506: 'if \\n(Hy 'hy 14
        !          3507: 'in 0
        !          3508: 'ti 0
        !          3509: 'ps \\n(:Pp
        !          3510: 'vs \\n(!Pp
        !          3511: ..
        !          3512: '''\"  RS: reference text start [0:1]
        !          3513: '''\"  .RS [stringname]
        !          3514: ''\"   optional stringname used to store number for later reference
        !          3515: ''\"   preceding \*(Rf in text generates new number from :R 
        !          3516: ''\"   ]r is string version of :r -- ;R flag indicates
        !          3517: ''\"   that there are references which have not been printed on
        !          3518: ''\"   references page yet (set to 2 by .RS and to 1 by .RF)
        !          3519: .de RS
        !          3520: .if \\n(;R=2 .)D "RS:missing RF"\"error if existing reference
        !          3521: .nr ;R 2 \" indicate a reference exists and is currently in progress
        !          3522: .nr Rf +1 \" total reference count for CS
        !          3523: .if \\n(.$ .ds \\$1 \v'-.4m'\s-3[\\n(:R]\s0\v'.4m'
        !          3524: .ev 2
        !          3525: .)R
        !          3526: 'in \w@\0\0.\ @u
        !          3527: 'ti -\w@\\*(]r.\ @u
        !          3528: .nr :D 1
        !          3529: .da >r
        !          3530: \!.ne 2
        !          3531: \\*(]r.\ \&\c
        !          3532: ..
        !          3533: '''\"  RF: reference text finish
        !          3534: '''\"  .RF
        !          3535: ''\"   completes reference text diversion - set ;R to 1 that reference ready
        !          3536: .de RF
        !          3537: .if !(\\n(;R=2) .)D "RF: no RS active"
        !          3538: .nr ;R 1
        !          3539: .br
        !          3540: \!.if \\\\n(Ls .sp .5
        !          3541: .di
        !          3542: 'in
        !          3543: .nr :D 0
        !          3544: .ev
        !          3545: ..
        !          3546: '''\"  RP: lays out references page [0:2]
        !          3547: '''\"  .RP [arg1] [arg2]
        !          3548: ''\"   called by TC, CS, and )q or explicitly by user
        !          3549: ''\"   first arg 0 means restart numbering
        !          3550: ''\"   second arg 0 means do a .SK following references page
        !          3551: .de RP
        !          3552: .if \\n(;R=2 .)D "RP: missing RF"
        !          3553: .if \\n(;R \{\
        !          3554: .nr ;R 0 \" turn off references flag
        !          3555: .if !(0\\$1) .nr :R 0 1 \" restart counter
        !          3556: .)R
        !          3557: .ie (0\\$2=2):(0\\$2=3) \{\
        !          3558: .if \\n(;e \&\c
        !          3559: 'ne 8
        !          3560: .sp 1 \}
        !          3561: .el \{\
        !          3562: .ie \\n(;e .SK
        !          3563: .el \{\
        !          3564: \&\c
        !          3565: .bp \" can't use .SK when called from )q
        !          3566: 'br \} \}
        !          3567: .ce 1
        !          3568: .ul
        !          3569: \\*(Rp
        !          3570: .if \w@\\*(Rp@ \{
        !          3571: .am >C
        !          3572: .)T 1 1 "" "\\*(Rp" \\nP 
        !          3573: \\..
        !          3574: 'br \}
        !          3575: .nf
        !          3576: .>r
        !          3577: .br
        !          3578: .rm >r
        !          3579: .)R
        !          3580: .if (0\\$2=0):(0\\$2=2) .SK
        !          3581: 'br \}
        !          3582: ..
        !          3583: '\"    .)q
        !          3584: '\"    called via .em request
        !          3585: '\"    set flag for footnotes and flush keep/releases
        !          3586: .de )q
        !          3587: .br\"force out partial line
        !          3588: .LC 0\"clean out lists
        !          3589: .nr ;e 1               \" mark end of input read
        !          3590: .if \\n(:F .FE\"close dangling footnote
        !          3591: .if \\n(:y .DE \" end dangling DS
        !          3592: .if \\n(!N .NE \" end up dangling notation
        !          3593: .)N    \" flush stored NS/NE
        !          3594: .nr ;x 0 \" flag for footnotes
        !          3595: .if \\n(;R .RP 0 1
        !          3596: \&\c
        !          3597: .if (\\n(;C>0)&(\\n(:z>0) 'bp  \" new page for keeps in 2C
        !          3598: .)w \" flush floating keeps
        !          3599: \&
        !          3600: '\"    if footnotes remain and there is no room 
        !          3601: '\"    on this page, or if diverted footnote text
        !          3602: '\"    remains, be sure to begin another page
        !          3603: 'nr :0 \\n(.pu+1v-\\n(nlu-\\n(:Ou
        !          3604: 'if \\n(:s 'if (\\n(:0<=0):((\\n(;C=2)&(\\n(!F=1)) 'nr ;x 1
        !          3605: 'if \\n(:q 'nr ;x 1
        !          3606: '\"    if ;x set, force out footnotes
        !          3607: 'if \\n(;x \&\c
        !          3608: 'if \\n(;x 'bp
        !          3609: 'if \\n(;x \&
        !          3610: .wh -.5p )k\"cut marks at end of page
        !          3611: .nr ;e 0               \" prevent extra pages
        !          3612: ..
        !          3613: '\"    .)k
        !          3614: '\"    produce cut marks
        !          3615: .de )k
        !          3616: .po 0          \" always from left margin
        !          3617: .lt 7.5i
        !          3618: .ps 10
        !          3619: .vs 10p
        !          3620: .ft 1          \" always roman font
        !          3621: .tl '--''--'
        !          3622: .ft
        !          3623: .vs            \" restore values
        !          3624: .po
        !          3625: .ps
        !          3626: .lt
        !          3627: ..
        !          3628: '\"    REQUIRED INITIALIZATIONS
        !          3629: '\"    initialize various regs
        !          3630: .nr :r .6i \" bottom of page
        !          3631: .nr :m .8i \" initial footer place and partial footnote diverter trap
        !          3632: 'nr :i 0 \"    footnote hyphenate flag
        !          3633: 'nr :j 0 \"    footnote no adjust flag
        !          3634: 'nr :k 0 \"    footnote flush left flag
        !          3635: 'nr :l 0 \"    footnote stub flush right flag
        !          3636: .nr :n 0 \" flag for continuation footnote rule
        !          3637: .nr :p 0 1 \" in-text footnote numberer
        !          3638: .nr :o 0 \" register for footer trap location (set via .FE)
        !          3639: .nr :z 0 1 \" counter for floating keeps in progress
        !          3640: .nr :y 0 \" flag indicating Display in progress
        !          3641: .nr :x 0               \" index for name of expanded floating keep
        !          3642: .af ;w a               \" conversion register for display queue names
        !          3643: .nr :w 0               \" index for name of diverted floating keep
        !          3644: .nr :F 0\" flag indicating FS in progress
        !          3645: .nr :R 0 1 \" in-text reference numberer
        !          3646: .ds ]r \\n(:R
        !          3647: .ds ]y \\n(:p
        !          3648: '\"                    INITIAL SET UP
        !          3649: 'wh 0 )h
        !          3650: .nr :o \n(:mu \" initial footer trap location on a page
        !          3651: .nr :O \n(:mu \" high water mark of :o (needed by )q)
        !          3652: 'wh -\n(:mu )f
        !          3653: 'ch )f 15i
        !          3654: 'wh -\n(:mu )n \" trap for partial footnote diverter
        !          3655: 'ch )f -\n(:mu
        !          3656: 'wh -\n(:ru )b
        !          3657: .nr :M \n(:mu
        !          3658: .nr !V \n(:mu          \" save real bottom
        !          3659: .wh -(\n(:Mu-1v) >B\"initial trap for bottom expander
        !          3660: '''>S>NOCOMPACT<<name>>
        !          3661: .if @\*(]Z@MM DEFINED@ \{\
        !          3662: .      tm ERROR: MM package read twice
        !          3663: .      ab     \}
        !          3664: .ds ]Z MM DEFINED
        !          3665: '''\"  *** EXTERNALLY-KNOWN NUMBER REGISTERS
        !          3666: '''\"  E : emboldening for s/d/f etc.
        !          3667: ''\"   0=no bold (nroff default)
        !          3668: ''\"   1=bold (troff default)
        !          3669: .if !\w'\gE' .nr E 1
        !          3670: '''\"  L : length of page
        !          3671: ''\"   settable via -rLn
        !          3672: .if !\nL .nr L 11i
        !          3673: .pl \nLu
        !          3674: '''\"  N : numbering style [0:3] default = 0; set via -rNn
        !          3675: ''\"   0/1 normal; 2/3 sect-page; if 1 or 3 special footer for P=1
        !          3676: '''\"  O : initial page offset, normally = 26/27i (.964i), but can be overridden from
        !          3677: ''\"   command line (via -rOvalue)
        !          3678: .if !\w'\gO' .nr O .963i
        !          3679: .po\nOu
        !          3680: '''\"  P : Page number (internally managed), initially = 0
        !          3681: ''\"   if :S = 0, same as %, but reset to 1 by each .H 1 when :S = 1
        !          3682: .if \nP .nr P -1
        !          3683: .nr P \nP 1
        !          3684: '''\"  S : default point size, initially 10
        !          3685: .if !\nS .nr S 10
        !          3686: '''\"  W : Width of page (line length and length of title)
        !          3687: ''\"   settable via -rWn from command line
        !          3688: .if !\nW .nr W 6i
        !          3689: '''\"  REQUIRED INITIALIZATIONS
        !          3690: '\"    load date into DT string
        !          3691: .if \n(mo-0 .ds DT January
        !          3692: .if \n(mo-1 .ds DT February
        !          3693: .if \n(mo-2 .ds DT March
        !          3694: .if \n(mo-3 .ds DT April
        !          3695: .if \n(mo-4 .ds DT May
        !          3696: .if \n(mo-5 .ds DT June
        !          3697: .if \n(mo-6 .ds DT July
        !          3698: .if \n(mo-7 .ds DT August
        !          3699: .if \n(mo-8 .ds DT September
        !          3700: .if \n(mo-9 .ds DT October
        !          3701: .if \n(mo-10 .ds DT November
        !          3702: .if \n(mo-11 .ds DT December
        !          3703: .as DT " \n(dy, 19\n(yr
        !          3704: '\"                    INITIALIZE ALL THREE ENVIRONMENTS
        !          3705: .S D D\"set up point size
        !          3706: 'ev 0
        !          3707: .)R
        !          3708: .ll \nWu
        !          3709: .lt \nWu
        !          3710: 'ev
        !          3711: 'ev 1
        !          3712: .)R
        !          3713: .ll \nWu
        !          3714: .lt \nWu
        !          3715: 'ev
        !          3716: 'ev 2
        !          3717: .)R
        !          3718: .ll \nWu
        !          3719: .lt \nWu
        !          3720: 'ev
        !          3721: '\"    INITIALS SET UP
        !          3722: .PH "''- \\\\nP -''
        !          3723: '\"    set up type of copy
        !          3724: .if \nC=3 \{.ds ]C @@D\ R\ A\ F\ T@@
        !          3725: .      PF "''\\\\*(DT'' \}     \" set footer when DRAFT
        !          3726: .if \nC=4 \{.ds ]C @@D\ R\ A\ F\ T@@
        !          3727: .      PF "''\\\\*(DT''        \" set footer when DRAFT
        !          3728: .      ls 2    \" use double space
        !          3729: .      nr Pt 1 \" indented paragraphs
        !          3730: .      nr Pi 10 \}     \" with 10 space indent
        !          3731: .if \nC=2 .ds ]C ''DATE FILE COPY''
        !          3732: .if \nC=1 .ds ]C ''OFFICIAL FILE COPY''
        !          3733: '\"    set defaults for sect-page numbering scheme
        !          3734: .if (\nN=3):(\nN=5) \{.nr :S 1
        !          3735: .      PF "''\\\\n(H1-\\\\nP''"
        !          3736: .      PH \}
        !          3737: .if \nN=4 \{.PH\"inhibit default page numbering
        !          3738: .      nr N 0 \}
        !          3739: .if \nD .PH "'\\*(RE line # \\\\n(.c'- \\\\nP -''
        !          3740: .if \nA=1 .AF\" for use with preprinted forms
        !          3741: 'em )q \" end macro
        !          3742: '''>E>NOCOMPACT<<name>>
        !          3743: '\"    accents put at end of file so that grave accent string doesn't
        !          3744: '\"    mess up commenting conventions
        !          3745: '\"    TROFF ACCENTS (` ' ^ ~ cedilla and 2 umlauts)
        !          3746: '\" The accent string must follow immediately the character to be accented.
        !          3747: '\" These strings are "tuned" to the Times Roman type faces ONLY.
        !          3748: '\" The R, I, and B fonts are assumed to be mounted in
        !          3749: '\" positions 1, 2, and 3, respectively.
        !          3750: '\" All of these strings alter the number register `:'.
        !          3751: '\"    Grave accent -- [aeou]\*`
        !          3752: .ds ` \\k:\h@-\\n(.wu*8u/10u@\h@\\n(.fu/2u*2u+1u-\\n(.fu*.2m@\(ga\h@|\\n:u@
        !          3753: '\"    Acute accent -- [aeou]\*'
        !          3754: .ds ' \\k:\h@-\\n(.wu*8u/10u@\h@\\n(.fu/2u*2u+1u-\\n(.fu*.2m+.07m@\(aa\h@|\\n:u@
        !          3755: '\"    Circumflex -- [aeou]\*^
        !          3756: .ds ^ \\k:\h@-\\n(.wu*8u/10u@\h@\\n(.fu/2u*2u+1u-\\n(.fu*.15m-.07m@\
        !          3757: \h@\\n(.fu-1u/2u*.02m@^\h@|\\n:u@
        !          3758: '\"    Tilde -- n\*~ (But watch out for ".tr ~")
        !          3759: .ds ~ \\k:\h@-\\n(.wu*8u/10u@\h@\\n(.fu/2u*2u+1u-\\n(.fu*.2m-.07m@\
        !          3760: \h@\\n(.fu-1u/2u*.05m@~\h@|\\n:u@
        !          3761: '\"    Cedilla -- c\*,
        !          3762: .ds , \\k:\h@-\\n(.wu*85u/100u@\[email protected]@,\[email protected]@\h@|\\n:u@
        !          3763: '\"    Lower-case umlaut -- [aeou]\*:
        !          3764: .ds : \\k:\h@-\\n(.wu*85u/100u@\h@\\n(.fu/2u*2u+1u-\\n(.fu*3u*.06m@\
        !          3765: \h@3u-\\n(.fu/2u*.05m-.1m@\
        !          3766: \[email protected]@\z.\h@\\n(.fu-1u/2u*.05m+.2m@.\[email protected]@\h@|\\n:u@
        !          3767: '\"    Upper-case umlaut -- [AEOU]\*;
        !          3768: .ds ; \\k:\h@-\\n(.wu*75u/100u@\h@\\n(.fu/2u*2u+1u-\\n(.fu*3u*.09m@\
        !          3769: \h@3u-\\n(.fu/2u*.06m-.15m@\h@\\n(.fu-1u/2u*.04m@\
        !          3770: \[email protected]@\z.\[email protected]@.\[email protected]@\h@|\\n:u@

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.