Annotation of researchv10dc/vol2/troff/man.ms, revision 1.1

1.1     ! root        1: .so ../ADM/mac
        !             2: .XX troffref 187 "Troff User's Manual"
        !             3: .nr *% \n(%#u+7u
        !             4: .fp 8 C CW
        !             5: .ds NR "\f2nroff\fP
        !             6: .ds TR "\f2troff\fP
        !             7: .ds Tr \f2Troff\fP
        !             8: .ds Nr \f2Nroff\fP
        !             9: .              \" CW - constant width font not from -ms
        !            10: .de T&
        !            11: .X "END US
        !            12: .X "US T&
        !            13: ..
        !            14: .de CW
        !            15: .nr PQ \\n(.f
        !            16: .if \\n(.$=0 .ft CW
        !            17: .if \\n(.$>0 \%\&\\$3\f(CW\\$1\\f\\n(PQ\\$2
        !            18: ..
        !            19: .de BI
        !            20: .nr PQ \\n(.f
        !            21: .if \\n(.$=0 .ft 4
        !            22: .if \\n(.$>0 \%\&\\$3\f4\\$1\\f\\n(PQ\\$2
        !            23: ..
        !            24: .de UC
        !            25: \\$3\s-2\\$1\s+2\\$2
        !            26: ..
        !            27: .am NH
        !            28: .nr p \\np+1
        !            29: .nr s 0 1
        !            30: ..
        !            31: .de sc
        !            32: .LP
        !            33: \f4\\np.\\n+s.\ \ \\$1\f1\0
        !            34: ..
        !            35: .de bt
        !            36: .SP .25
        !            37: .LP
        !            38: .NE 2.1
        !            39: .ta 1i 2i 3i 4i
        !            40: \\$1   \\$2    \\$3    \\$4
        !            41: .IP "" 0.8i
        !            42: ....br
        !            43: \\$5
        !            44: ..
        !            45: .
        !            46: .
        !            47: .
        !            48: .
        !            49: .EQ
        !            50: delim @@
        !            51: define cw % "\&" font CW %
        !            52: .EN
        !            53: .
        !            54: .
        !            55: .
        !            56: .TL
        !            57: Troff User's Manual\(dg
        !            58: .AU
        !            59: Joseph F. Ossanna
        !            60: .br
        !            61: Brian W. Kernighan
        !            62: .AI
        !            63: .MH
        !            64: .SH
        !            65: Introduction
        !            66: .PP
        !            67: \*(Tr and \*(NR are text processors 
        !            68: that format text for typesetter- and
        !            69: typewriter-like terminals, respectively.
        !            70: They accept lines of text interspersed with lines of
        !            71: format control information and
        !            72: format the text into a printable, paginated document
        !            73: having a user-designed style.
        !            74: \*(Tr and \*(NR offer
        !            75: unusual freedom in document styling:
        !            76: arbitrary style headers and footers;
        !            77: arbitrary style footnotes;
        !            78: multiple automatic sequence numbering for paragraphs, sections, etc;
        !            79: multiple column output;
        !            80: dynamic font and point-size control;
        !            81: arbitrary horizontal and vertical local motions at any point;
        !            82: and
        !            83: a family of automatic overstriking, bracket construction, and
        !            84: line-drawing functions.
        !            85: .
        !            86: .de TL
        !            87: .LP
        !            88: .ce
        !            89: .ps +2
        !            90: .ft B
        !            91: ..
        !            92: .
        !            93: .FS
        !            94: \(dgThis is a version of |reference(v7man troff reference) revised by B. W. Kernighan.
        !            95: .FE
        !            96: .PP
        !            97: .I Troff
        !            98: produces its output in a device-independent form,
        !            99: although parameterized for a specific device;
        !           100: \*(TR output must be processed by a driver for that
        !           101: device to produce printed output.
        !           102: .PP
        !           103: \*(Tr and \*(NR are highly compatible with each other and it is almost always
        !           104: possible to prepare input acceptable to both.
        !           105: Conditional input is provided that enables
        !           106: the user to embed input expressly destined for either program.
        !           107: \*(Nr can prepare output directly for a variety of terminal types and
        !           108: is capable of utilizing the full resolution of each terminal.
        !           109: A warning for the future, however:
        !           110: \*(NR
        !           111: is near the end of its useful life,
        !           112: and it is not supported or maintained.
        !           113: There has been no attempt to add modern 
        !           114: \*(TR
        !           115: features to
        !           116: \*(NR .
        !           117: .SH
        !           118: Background to the Second Edition
        !           119: .PP
        !           120: \*(Tr
        !           121: was originally written by the late Joe Ossanna
        !           122: in about 1973, in assembly language for the
        !           123: .UC PDP -11,
        !           124: to drive the Graphic Systems CAT typesetter.
        !           125: It was rewritten in C around 1975,
        !           126: and underwent slow but steady evolution until
        !           127: Ossanna's death late in 1977.
        !           128: .PP
        !           129: In 1979, Brian Kernighan
        !           130: modified
        !           131: \*(TR
        !           132: so that it would produce output for a variety of typesetters,
        !           133: while retaining its input specifications.
        !           134: Over the decade from 1979 to 1989,
        !           135: the internals
        !           136: have been modestly revised,
        !           137: though much of the code remains as it was when Ossanna wrote it.
        !           138: .PP
        !           139: \*(Tr
        !           140: reads parameter files
        !           141: each time it is invoked, to
        !           142: set values for machine resolution,
        !           143: legal type sizes and fonts, and character names,
        !           144: character widths
        !           145: and the like.
        !           146: \*(Tr
        !           147: output is
        !           148: .UC ASCII
        !           149: characters
        !           150: in a simple language
        !           151: that describes where each character is to be placed
        !           152: and in what size and font.
        !           153: A post-processor must be written for each device
        !           154: to convert this typesetter-independent language
        !           155: into specific instructions for that device.
        !           156: .PP
        !           157: The output language contains information that was not readily
        !           158: identifiable in the older output.
        !           159: Most notably, the beginning of each page and line
        !           160: is marked,
        !           161: so post-processors can do device-specific optimizations
        !           162: such as sorting the data vertically or printing it boustrophedonically,
        !           163: independent of
        !           164: \*(TR.
        !           165: .PP
        !           166: Capabilities for graphics have been added.
        !           167: \*(TR
        !           168: now recognizes commands for drawing diagonal lines,
        !           169: circles, ellipses, circular arcs,
        !           170: and quadratic B-splines;
        !           171: there are also ways to pass arbitrary information to the output
        !           172: unprocessed by
        !           173: \*(TR.
        !           174: .PP
        !           175: A number of limitations have been eased or eliminated.
        !           176: A document may have an arbitrary number of fonts on any page
        !           177: (if the output device permits it, of course).
        !           178: Fonts may be accessed merely by naming them;
        !           179: ``mounting'' is no longer necessary.
        !           180: There are no limits on the number of characters.
        !           181: \H'8'Character height\H'10' and \S'-1'sl\S'0'a\S'1'nt\S'0' may be set
        !           182: independently of width.
        !           183: .PP
        !           184: The remainder of this document contains a description of
        !           185: usage and command-line options;
        !           186: a summary of requests, escape sequences, and pre-defined number registers;
        !           187: a reference manual;
        !           188: tutorial examples;
        !           189: and a list of commonly-available characters.
        !           190: .SH
        !           191: Acknowledgements
        !           192: .PP
        !           193: Joe Ossanna's
        !           194: \*(TR
        !           195: remains a remarkable accomplishment.
        !           196: For fifteen years, it has proven a robust tool,
        !           197: taking unbelievable abuse from a variety of preprocessors
        !           198: and being forced into uses that were never conceived of
        !           199: in the original design,
        !           200: all with considerable grace under fire.
        !           201: .PP
        !           202: The current version of \*(TR has profited from
        !           203: significant code improvements by
        !           204: Jaap Akkerhuis, Dennis Ritchie, Ken Thompson, and Molly Wagner.
        !           205: Andrew Hume, Doug McIlroy, and Ravi Sethi made valuable suggestions on the manual.
        !           206: I fear that the remaining bugs are my fault.
        !           207: .SH
        !           208: References
        !           209: .LP
        !           210: |reference_placement
        !           211: .sp 100
        !           212: .BP
        !           213: .TL
        !           214: Usage
        !           215: .SP
        !           216: .PP
        !           217: \*(Tr or \*(NR is invoked as
        !           218: .P1
        !           219: troff  \fIoptions  files\fP
        !           220: nroff  \fIoptions  files\fP
        !           221: .P2
        !           222: where @options@ represents any of a number of option arguments
        !           223: and @files@ represents the list of files containing the document
        !           224: to be formatted.
        !           225: An argument consisting of a single minus
        !           226: .CW - ' `
        !           227: is taken to be
        !           228: a filename corresponding to the standard input.
        !           229: If no filenames are given input is taken from the standard input.
        !           230: The options, which may appear in any order so long as they appear
        !           231: before the files, are:
        !           232: .TS
        !           233: center;
        !           234: lfCW lw(4.5i).
        !           235: -m@name@       T{
        !           236: Read the macro file
        !           237: @cw /usr/lib/tmac. name@
        !           238: before the input @files@.
        !           239: T}
        !           240: -T@name@       T{
        !           241: Specifies
        !           242: the type of the output device.
        !           243: Specific devices are site-dependent.
        !           244: For
        !           245: \*(TR,
        !           246: useful names include
        !           247: .CW post
        !           248: (Postscript, the default),
        !           249: .CW 202
        !           250: (Linotron 202), and
        !           251: .CW aps 
        !           252: (Autologic APS-5).
        !           253: For
        !           254: \*(NR ,
        !           255: useful names include
        !           256: @cw "37"@ for the (default) Model 37 Teletype\(rg,
        !           257: @cw "450"@ for the \s-1DASI\s+1-450 (Diablo Hyterm),
        !           258: @cw lp@ for ``dumb'' line printer terminals (no half-line motions,
        !           259: no reverse motions,
        !           260: and @cw think@ for the HP ThinkJet printer.
        !           261: T}
        !           262: -i     T{
        !           263: Read standard input after the input files are exhausted.
        !           264: T}
        !           265: -o@list@       T{
        !           266: Print only pages whose page numbers appear in @list@,
        !           267: which consists of comma-separated numbers and number ranges.
        !           268: A number range has the form @N-M@
        !           269: and means pages @N@ through @M@;
        !           270: a initial @-N@ means
        !           271: from the beginning to page @N@; and a final @N-@ means
        !           272: from @N@ to the end.
        !           273: T}
        !           274: -n@N@  T{
        !           275: Number first generated page @N@.
        !           276: T}
        !           277: -r@aN@ T{
        !           278: Set number register @a@ (one-character) to @N@.
        !           279: T}
        !           280: -s@N@  T{
        !           281: Stop every @N@ pages.
        !           282: \*(Nr will halt prior to every @N@ pages (default @N=1@)
        !           283: to allow paper loading or
        !           284: changing, and will resume upon receipt of a newline.
        !           285: \*(Tr will include a ``pause'' code every @N@ pages;
        !           286: its meaning, if any, depends on the output device.
        !           287: T}
        !           288: -u@N@  T{
        !           289: Set amount of emboldening for the
        !           290: .CW bd
        !           291: request to @N@.
        !           292: T}
        !           293: -F@path@       T{
        !           294: Look in directory @path@ for font information;
        !           295: default is
        !           296: .CW /usr/lib/font
        !           297: for \*(TR
        !           298: and
        !           299: .CW /usr/lib/term
        !           300: for \*(NR.
        !           301: T}
        !           302: .sp .5
        !           303:        T{
        !           304:                   \*(TR Only
        !           305: T}
        !           306: -a     T{
        !           307: Send a printable \s-1(ASCII)\s+1 approximation
        !           308: of the results to the standard output.
        !           309: T}
        !           310: .sp .5
        !           311:        T{
        !           312:                   \*(NR Only
        !           313: T}
        !           314: -e     T{
        !           315: Produce equally-spaced words in adjusted
        !           316: lines, using full terminal resolution.
        !           317: T}
        !           318: -h     T{
        !           319: Use tabs instead of spaces
        !           320: to speed up printing.
        !           321: T}
        !           322: -q     T{
        !           323: Invoke the simultaneous input-output mode of the @cw rd@ request.
        !           324: T}
        !           325: .TE
        !           326: .PP
        !           327: Each option is a separate argument;
        !           328: for example,
        !           329: .P1
        !           330: troff -Tpost -ms -o4,6,8-10 @file1 ~ file2@
        !           331: .P2
        !           332: requests formatting of pages 4, 6, and 8 through 10 of a document contained in the files
        !           333: named @file1@ and @file2@,
        !           334: specifies the output device as a Postscript printer,
        !           335: and invokes the macro package
        !           336: .CW -ms .
        !           337: .PP
        !           338: Various pre- and post-processors are available for use with \*(NR and \*(TR.
        !           339: These include the equation preprocessor
        !           340: .I eqn
        !           341: (for \*(TR only),
        !           342: the table-construction preprocessor
        !           343: .I tbl ,
        !           344: and
        !           345: .I pic ,
        !           346: .I ideal ,
        !           347: and
        !           348: .I grap
        !           349: for various forms of graphics.
        !           350: A reverse-line postprocessor
        !           351: .I col
        !           352: is available for multiple-column \*(NR output on terminals without reverse-line ability;
        !           353: .I col
        !           354: expects the Model 37 Teletype
        !           355: escape sequences that \*(NR produces by default.
        !           356: .sp 100
        !           357: .BP
        !           358: .TL
        !           359: Request Summary
        !           360: .PP
        !           361: In the following table,
        !           362: the notation @+- N@ in the
        !           363: .BI "Request Form
        !           364: column means that the forms @N@, @+N@, or @-N@ are permitted,
        !           365: to set the parameter to @N@, increment it by @N@, or decrement it by @N@,
        !           366: respectively.
        !           367: Plain @N@ means that the value is used to set the parameter.
        !           368: .BI "Initial Values
        !           369: separated by 
        !           370: .CW ;
        !           371: are for
        !           372: \*(TR
        !           373: and
        !           374: \*(NR
        !           375: respectively.
        !           376: In the 
        !           377: .BI Notes
        !           378: column,
        !           379: .TS
        !           380: center;
        !           381: c lw(4.5i).
        !           382: B      T{
        !           383: Request normally causes a break.
        !           384: The use of
        !           385: .CW ' \&
        !           386: as control character (instead of
        !           387: .CW . )\&
        !           388: suppresses the break function.
        !           389: T}
        !           390: D      T{
        !           391: Mode or relevant parameters associated with current diversion level.
        !           392: T}
        !           393: E      T{
        !           394: Relevant parameters are a part of the current environment.
        !           395: T}
        !           396: O      T{
        !           397: Must stay in effect until logical output.
        !           398: T}
        !           399: P      T{
        !           400: Mode must be still or again in effect at the time of physical output.
        !           401: T}
        !           402: T      T{
        !           403: \*(TR only; no effect in \*(NR.
        !           404: T}
        !           405: @bold v@, @bold p@, @bold m@, @bold u@ T{
        !           406: Default scale indicator; if not specified, scale indicators are ignored.
        !           407: T}
        !           408: .TE
        !           409: .sp
        !           410: .tr &.
        !           411: .ps 9
        !           412: .vs 11
        !           413: .nr z 0 1
        !           414: .TS
        !           415: lf4 lf4 lf4 lf4 lf4
        !           416: lf4 lf4 lf4 lf4 lf4
        !           417: lfCW l l l l.
        !           418: Request        Initial If No
        !           419: Form   Value   Argument        Notes   Explanation
        !           420: .sp .5
        !           421: .T&
        !           422: lf3 s s s s.
        !           423: \\n+z.  General Information
        !           424: .sp .5
        !           425: .T&
        !           426: lf3 s s s s
        !           427: lfCW l l l l.
        !           428: \\n+z.  Font and Character Size Control
        !           429: .sp .5
        !           430: &ps @+- N@     10 point        previous        E,T     Point size; also @cw "\es" +- N@.
        !           431: &ss @N@        12/36\fBm\fP    ignored E,T     Space-character size set to @N/36@ em.
        !           432: &cs @ F~N~ M@  off     -       P,T     Constant character space (width) mode (font @F@).
        !           433: &bd @F~N@      off     -       P,T     Embolden font @F@ by @N-1@ units.
        !           434: &bd S@~F~N@    off     -       P,T     Embolden Special Font when current font is @F@.
        !           435: &ft@~F@        Roman   previous        E       Change to font @F@; also @cw "\ef" x@, @cw "\ef(" xx@, @cw "\ef" N@.
        !           436: &fp@~N~F~L@    R,I,B,...,S     ignored -       Mount font named @F@ on physical position @N>=1@;
        !           437:                                  long name is @L@ if given.
        !           438: .sp .5
        !           439: .T&
        !           440: lf3 s s s s
        !           441: lfCW l l l l.
        !           442: \\n+z.  Page Control
        !           443: &pl @+- N@     11i     11i     @bold v@        Page length.
        !           444: &bp @+- N@     @N=1@   -       B,@bold v@      Eject current page; next page number @N@.
        !           445: &pn @+- N@     @N=1@   ignored -       Next page number @N@.
        !           446: &po @+- N@     1i; 0   previous        @bold v@        Page offset.
        !           447: &ne @N@        -       @N=1 roman v@   D,@bold v@      Need @N@ vertical space.
        !           448: &mk @R@        none    internal        D       Mark current vertical place in register @R@.
        !           449: &rt @+- N@     none    internal        D,@bold v@      Return (upward only) to marked vertical place.
        !           450: .sp .5
        !           451: .T&
        !           452: lf3 s s s s
        !           453: lfCW l l l l.
        !           454: \\n+z.  Text Filling, Adjusting, and Centering
        !           455: &br    -       -       B       Break.
        !           456: &fi    fill    -       B,E     Fill output lines.
        !           457: &nf    fill    -       B,E     No filling or adjusting of output lines.
        !           458: &ad @c@        adj, both       adjust  E       Adjust output lines with mode @c@;  @c = cw l , cw r , cw c , cw b , none@
        !           459: &na    adjust  -       E       No output line adjusting.
        !           460: &ce @N@        off     @N=1@   B,E     Center next @N@ input text lines.
        !           461: .sp .5
        !           462: .T&
        !           463: lf3 s s s s
        !           464: lfCW l l l l.
        !           465: \\n+z.  Vertical Spacing
        !           466: &vs @N@        12p; 1/6i       previous        E,@bold p@      Vertical baseline spacing (@V@).
        !           467: &ls @N@        @N=1@   previous        E       Output @N-1@ @bold v@'s after each text output line.
        !           468: &sp @N@        -       @N=1@v  B,@bold v@      Space vertical distance @N@ in either direction.
        !           469: &sv @N@        -       @N=1@v  @bold v@        Save vertical distance @N@.
        !           470: &os    -       -       -       Output saved vertical distance.
        !           471: &ns    space   -       D       Turn no-space mode on.
        !           472: &rs    -       -       D       Restore spacing; turn no-space mode off.
        !           473: .sp .5
        !           474: .T&
        !           475: lf3 s s s s
        !           476: lfCW l l l l.
        !           477: \\n+z.  Line Length and Indenting
        !           478: &ll @+- N@     6.5i    previous        E,@bold m@      Line length.
        !           479: &in @+- N@     @N=0@   previous        B,E,@bold m@    Indent.
        !           480: &ti @+- N@     -       ignored B,E,@bold m@    Temporary indent.
        !           481: .sp .5
        !           482: .ne 2.1
        !           483: .T&
        !           484: lf3 s s s s
        !           485: lfCW l l l l.
        !           486: \\n+z.  Macros, Strings, Diversion, and Position Traps
        !           487: &de @xx~yy@    -       @.yy= cw ".."@  -       Define or redefine macro @xx@; end at call of @yy@.
        !           488: &am @xx~yy@    -       @.yy= cw ".."@  -       Append to a macro.
        !           489: &ds @xx~string@        -       ignored -       Define a string @xx@ containing @string@.
        !           490: &as @xx~string@        -       ignored -       Append @string@ to string @xx@.
        !           491: &rm @xx@       -       ignored -       Remove request, macro, or string.
        !           492: &rn @xx~yy@    -       ignored -       Rename request, macro, or string @xx@ to @yy@.
        !           493: &di @xx@       -       end     D       Divert output to macro @xx@.
        !           494: &da @xx@       -       end     D       Divert and append to @xx@.
        !           495: &wh @N~xx@     -       -       @bold v@        Set location trap; negative is w.r.t. page bottom.
        !           496: &ch @xx~N@     -       -       @bold v@        Change trap location.
        !           497: &dt @N~xx@     -       off     D,@bold v@      Set a diversion trap.
        !           498: &it @N~xx@     -       off     E       Set an input-line count trap.
        !           499: &em @xx@       none    none    -       End macro is @xx@.
        !           500: .sp .5
        !           501: .T&
        !           502: lf3 s s s s
        !           503: lfCW l l l l.
        !           504: \\n+z.  Number Registers
        !           505: &nr @R~+- N~M@         -       @bold u@        Define and set number register @R@; auto-increment by @M@.
        !           506: &af @R~c@      arabic  -       -       Assign format to register @R@ (@c= cw "1" , cw i , cw I , cw a , cw A@).
        !           507: &rr @R@        -       -       -       Remove register @R@.
        !           508: .sp .5
        !           509: .T&
        !           510: lf3 s s s s
        !           511: lfCW l l l l.
        !           512: \\n+z.  Tabs, Leaders, and Fields
        !           513: &ta@~Nt~. . .@ 0.5i; 0.8n      none    E,@bold m@      Tab settings; left-adjusting, unless @t= cw R@ (right), @cw C@ (centered).
        !           514: &tc@~c@        none    none    E       Tab repetition character.
        !           515: &lc@~c@        @cw "."@        none    E       Leader repetition character.
        !           516: &fc@~a~b@      off     off     -       Set field delimiter @a@ and pad character @b@.
        !           517: .sp .5
        !           518: .T&
        !           519: lf3 s s s s
        !           520: lfCW l l l l.
        !           521: \\n+z.  Input and Output Conventions and Character Translations
        !           522: &ec@~c@        \e      \e      -       Set escape character.
        !           523: &eo    on      -       -       Turn off escape character mechanism.
        !           524: &lg@~N@        on; -   on      T       Ligature mode on if @N>0@.
        !           525: &ul@~N@        off     @N=1@   E       Underline (italicize in \*(TR) @N@ input lines.
        !           526: &cu@~N@        off     @N=1@   E       Continuous underline in \*(NR; in \*(TR, like @cw ul@.
        !           527: &uf@~F@        Italic  Italic  -       Underline font set to @F@ (to be switched to by @cw ul@).
        !           528: &cc@~c@        @cw .@  @cw .@  E       Set control character to @c@.
        !           529: &c2@~c@        @cw "'"@        @cw "'"@        E       Set no-break control character to @c@.
        !           530: &tr@~abcd....@ none    -       O       Translate @a@ to @b@, etc., on output.
        !           531: .sp .5
        !           532: .T&
        !           533: lf3 s s s s.
        !           534: \\n+z.  Local Horizontal and Vertical Motions, and the Width Function
        !           535: .sp .5
        !           536: .T&
        !           537: lf3 s s s s.
        !           538: \\n+z.  Overstrike, Bracket, Line-drawing, Graphics, and Zero-width Functions
        !           539: .sp .5
        !           540: .T&
        !           541: lf3 s s s s
        !           542: lfCW l l l l.
        !           543: \\n+z.  Hyphenation.
        !           544: &nh    hyphenate       -       E       No hyphenation.
        !           545: &hy@~N@        hyphenate       hyphenate       E       Hyphenate; @N =@ mode.
        !           546: &hc@~c@        @cw "\e%"@      @cw "\e%"@      E       Hyphenation indicator character @c@.
        !           547: &hw@~word~. . .@               ignored -       Add words to hyphenation dictionary.
        !           548: .sp .5
        !           549: .T&
        !           550: lf3 s s s s
        !           551: lfCW l l l l.
        !           552: \\n+z.  Three-Part Titles.
        !           553: &tl@~'l'c'r'@          -       -       Three-part title; delimiter may be any character.
        !           554: &pc@~c@        @cw %@  off     -       Page number character.
        !           555: &lt@~+- N@     6.5i    previous        E,@bold m@      Length of title.
        !           556: .sp .5
        !           557: .T&
        !           558: lf3 s s s s
        !           559: lfCW l l l l.
        !           560: \\n+z.  Output Line Numbering.
        !           561: &nm@~+- N^M^S^I@               off     E       Number mode on or off, set parameters.
        !           562: &nn@~N@        -       @N=1@   E       Do not number next @N@ lines.
        !           563: .sp .5
        !           564: .T&
        !           565: lf3 s s s s
        !           566: lfCW l l l l.
        !           567: \\n+z.  Conditional Acceptance of Input
        !           568: &if@~c~any@            -       -       If condition @c@ true, accept @any@ as input;
        !           569:                                  for multi-line, use @cw "\e{" any cw "\e}"@.
        !           570: &if !@c~any@           -       -       If condition @c@ false, accept @any@.
        !           571: &if@~N~any@            -       @bold u@        If expression @N > 0@, accept @any@.
        !           572: &if !@N~any@           -       @bold u@        If expression @N <= 0@ [sic], accept @any@.
        !           573: &if@~ 's1 's2 '~any@           -       -       If string @s1@ identical to @s2@, accept @any@.
        !           574: &if !@ 's1 's2 '~any@          -       -       If string @s1@ not identical to @s2@, accept @any@.
        !           575: &ie@~c~any@            -       @bold u@        If portion of if-else; all above forms (like @cw "if"@).
        !           576: &el@~any@              -       -       Else portion of if-else.
        !           577: .sp .5
        !           578: .T&
        !           579: lf3 s s s s
        !           580: lfCW l l l l.
        !           581: \\n+z.  Environment Switching
        !           582: &ev@~N@        @N=0@   previous        -       Environment switch (push down).
        !           583: .sp .5
        !           584: .T&
        !           585: lf3 s s s s
        !           586: lfCW l l l l.
        !           587: \\n+z.  Insertions from the Standard Input
        !           588: &rd@~prompt@   -       @prompt@=\s-1BEL\s+1    -       Read insertion.
        !           589: &ex    -       -       -       Exit.
        !           590: .sp .5
        !           591: .T&
        !           592: lf3 s s s s
        !           593: lfCW l l l l.
        !           594: \\n+z.  Input/Output File Switching
        !           595: &so@~filename@         -       -       Switch source file (push down).
        !           596: &nx@~filename@         end-of-file     -       Next file.
        !           597: &sy@~string@           -       -       Execute program @string@.  Output is not interpolated.
        !           598: &pi@~string@           -       -       Pipe output to program @string@.
        !           599: &cf@~filename@         -       -       Copy file contents to \*(TR output.
        !           600: .sp .5
        !           601: .T&
        !           602: lf3 s s s s
        !           603: lfCW l l l l.
        !           604: \\n+z.  Miscellaneous
        !           605: &mc@~c~N@      -       off     E,@bold m@      Set margin character @c@ and separation @N@.
        !           606: &tm@~string@   -       newline -       Print @string@ on terminal (standard error).
        !           607: &ab@~string@   -       newline -       Print @string@ on standard error, exit program.
        !           608: &ig@~yy@       -       @.yy= cw ".."@  -       Ignore input until call of @yy@.
        !           609: &lf@~N ~f@             -       -       Set input line number to @N@ and filename to @f@.
        !           610: &pm@~t@        -       all     -       Print macro names, sizes; if @t@ present, print only total of sizes.
        !           611: &fl    -       -       B       Flush output buffer.
        !           612: .sp .5
        !           613: .T&
        !           614: lf3 s s s s.
        !           615: \\n+z.  Output and Error Messages
        !           616: .sp .5
        !           617: \\n+z.  Output Language
        !           618: .sp .5
        !           619: \\n+z.  Device and Font Description Files
        !           620: .TE
        !           621: .br
        !           622: .nr zz 9
        !           623: .de cl
        !           624: .ie \\n+(cl<\n(zz \{\
        !           625: .      po +\\n(.lu/\n(zzu
        !           626: .      rt\}
        !           627: .el \{.po 1i\}
        !           628: ..
        !           629: .nr cl 0 1
        !           630: .di zz
        !           631: .ta .35iR
        !           632: .nf
        !           633: .ps 9
        !           634: .vs 10.5
        !           635: \f(CWab\fP     20
        !           636: \f(CWad\fP     4
        !           637: \f(CWaf\fP     8
        !           638: \f(CWam\fP     7
        !           639: \f(CWas\fP     7
        !           640: \f(CWbd\fP     2
        !           641: \f(CWbp\fP     3
        !           642: \f(CWbr\fP     4
        !           643: \f(CWc2\fP     10
        !           644: \f(CWcc\fP     10
        !           645: \f(CWce\fP     4
        !           646: \f(CWcf\fP     19
        !           647: \f(CWch\fP     7
        !           648: \f(CWcs\fP     2
        !           649: \f(CWcu\fP     10
        !           650: \f(CWda\fP     7
        !           651: \f(CWde\fP     7
        !           652: \f(CWdi\fP     7
        !           653: \f(CWds\fP     7
        !           654: \f(CWdt\fP     7
        !           655: \f(CWec\fP     10
        !           656: \f(CWel\fP     16
        !           657: \f(CWem\fP     7
        !           658: \f(CWeo\fP     10
        !           659: \f(CWev\fP     17
        !           660: \f(CWex\fP     18
        !           661: \f(CWfc\fP     9
        !           662: \f(CWfi\fP     4
        !           663: \f(CWfl\fP     20
        !           664: \f(CWfp\fP     2
        !           665: \f(CWft\fP     2
        !           666: \f(CWhc\fP     13
        !           667: \f(CWhw\fP     13
        !           668: \f(CWhy\fP     13
        !           669: \f(CWie\fP     16
        !           670: \f(CWif\fP     16
        !           671: \f(CWig\fP     20
        !           672: \f(CWin\fP     6
        !           673: \f(CWit\fP     7
        !           674: \f(CWlc\fP     9
        !           675: \f(CWlg\fP     10
        !           676: \f(CWlf\fP     20
        !           677: \f(CWll\fP     6
        !           678: \f(CWls\fP     5
        !           679: \f(CWlt\fP     14
        !           680: \f(CWmc\fP     20
        !           681: \f(CWmk\fP     3
        !           682: \f(CWna\fP     4
        !           683: \f(CWne\fP     3
        !           684: \f(CWnf\fP     4
        !           685: \f(CWnh\fP     13
        !           686: \f(CWnm\fP     15
        !           687: \f(CWnn\fP     15
        !           688: \f(CWnr\fP     8
        !           689: \f(CWns\fP     5
        !           690: \f(CWnx\fP     19
        !           691: \f(CWos\fP     5
        !           692: \f(CWpc\fP     14
        !           693: \f(CWpi\fP     19
        !           694: \f(CWpl\fP     3
        !           695: \f(CWpm\fP     20
        !           696: \f(CWpn\fP     3
        !           697: \f(CWpo\fP     3
        !           698: \f(CWps\fP     2
        !           699: \f(CWrd\fP     18
        !           700: \f(CWrm\fP     7
        !           701: \f(CWrn\fP     7
        !           702: \f(CWrr\fP     8
        !           703: \f(CWrs\fP     5
        !           704: \f(CWrt\fP     3
        !           705: \f(CWso\fP     19
        !           706: \f(CWsp\fP     5
        !           707: \f(CWss\fP     2
        !           708: \f(CWsv\fP     5
        !           709: \f(CWsy\fP     19
        !           710: \f(CWta\fP     9
        !           711: \f(CWtc\fP     9
        !           712: \f(CWti\fP     6
        !           713: \f(CWtl\fP     14
        !           714: \f(CWtm\fP     20
        !           715: \f(CWtr\fP     10
        !           716: \f(CWuf\fP     10
        !           717: \f(CWul\fP     10
        !           718: \f(CWvs\fP     5
        !           719: \f(CWwh\fP     7
        !           720: .di
        !           721: .nr aa \n(dn/\n(zz
        !           722: .ne \\n(aau+10p
        !           723: .sp
        !           724: .SP 2
        !           725: .TL
        !           726: Alphabetical Request and Section Number Cross Reference
        !           727: .SP .5
        !           728: .LP
        !           729: .sp .5
        !           730: .nf
        !           731: .wh \n(nlu+\n(aau cl
        !           732: .nr qq \n(nlu+\n(aau
        !           733: .ps
        !           734: .vs
        !           735: .mk
        !           736: .zz
        !           737: .rt
        !           738: .sp \n(.tu
        !           739: .ch cl 12i
        !           740: .sp 100
        !           741: .BP
        !           742: .TL
        !           743: Escape Sequences for Characters, Indicators, and Functions
        !           744: .SP .5
        !           745: .LP
        !           746: .ps -1
        !           747: .vs -1
        !           748: .TS
        !           749: center;
        !           750: c2 l
        !           751: c2 l2 l
        !           752: n2 l2fCW l.
        !           753: .ft 4
        !           754: Section        Escape
        !           755: Reference      Sequence        Meaning
        !           756: .ft
        !           757: .sp .5
        !           758: 10.1   \e\e    \e prevents or delays the interpretation of \&\f(CW\e\fP
        !           759: 10.1   \ee     Printable version of the current escape character.
        !           760: 2.1    \e'     \' (acute accent); equivalent to \&\f(CW\e(aa\fP
        !           761: 2.1    \e`     \` (grave accent); equivalent to \&\f(CW\e(ga\fP
        !           762: 2.1    \e\-    \- Minus sign in the current font
        !           763: 7.     \e\^.   Period (dot) (see \&\f(CWde\fP)
        !           764: 11.1   \e\f2space\fP   Unpaddable space-size space character
        !           765: 11.1   \e0     Digit width space
        !           766: 11.1   \e|     1/6 em narrow space character (zero width in \*(NR)
        !           767: 11.1   \e^     1/12 em half-narrow space character (zero width in \*(NR)
        !           768: .tr &&
        !           769: 4.1    \e&     Non-printing, zero width character
        !           770: .tr &.
        !           771: 10.6   \e!     Transparent line indicator
        !           772: 10.8   \e"     Beginning of comment; continues to end of line
        !           773: 13.    \e%     Default optional hyphenation character
        !           774: 2.1    \e(@xx@ Character named @xx@
        !           775: 7.1    \e*@x,~@\e*(@xx@        Interpolate string @x@ or @xx@
        !           776: 7.3    \e$@N@  Interpolate argument @1 <= N <= 9@
        !           777: 9.1    \ea     Non-interpreted leader character
        !           778: 12.3   \eb'@abc...@'   Bracket building function
        !           779: 4.2    \ec     Connect to next input text
        !           780: 2.1    \eC'@xyz@'      Character named @xyz@
        !           781: 11.1   \ed     Downward 1/2 em vertical motion (1/2 line in \*(NR)
        !           782: 12.5   \eD'@c...@'     Draw graphics function @c@ with parameters @. . .@; @c= cw l , cw c , cw e , cw a , cw "~"@
        !           783: 2.2    \ef@x,~@\ef(@xx,~@\ef@N@        Change to font named @x@ or @xx@, or position @N@
        !           784: 8.     \eg@x,~@\eg(@xx@        Format of number register @x@ or @xx@
        !           785: 11.1   \eh'@N@'        Local horizontal motion; move right @N@ (negative left)
        !           786: 2.3    \eH'@N@'        Height of current font is @N@
        !           787: 11.3   \ek@x@  Mark horizontal input place in register @x@
        !           788: 12.4   \el'@Nc@'       Horizontal line drawing function (optionally with @c@ )
        !           789: 12.4   \eL'@Nc@'       Vertical line drawing function (optionally with @c@ )
        !           790: 8.     \en@x,~@\en(@xx@        Contents of number register @x@ or @xx@
        !           791: 2.1    \eN'@N@'        Character number @N@ on current font
        !           792: 12.1   \eo'@abc...@'   Overstrike characters @a,~ b,~ c@, ...
        !           793: 4.1    \ep     Break and spread output line
        !           794: 11.1   \er     Reverse 1 em vertical motion (reverse line in \*(NR)
        !           795: 2.3    \es@N,~@\es@+- N@       Point-size change function; also @cw "\es(" nn@, @cw "\es" +- cw "(" nn@
        !           796: 2.2    \eS'@N@'        Slant output @N@ degrees
        !           797: 9.1    \et     Non-interpreted horizontal tab
        !           798: 11.1   \eu     Reverse (up) 1/2 em vertical motion (1/2 line in \*(NR)
        !           799: 11.1   \ev'@N@'        Local vertical motion; move down N (negative up)
        !           800: 11.2   \ew'@string@'   Width of @string@
        !           801: 5.2    \ex'@N@'        Extra line-space function (negative before, positive after)
        !           802: 10.7   \eX'@string@'   Ouput @string@ as device control function
        !           803: 12.2   \ez@c@  Print @c@ with zero width (without spacing)
        !           804: 16.    \e{     Begin conditional input
        !           805: 16.    \e}     End conditional input
        !           806: 10.8   \e@newline@     Concealed (ignored) newline
        !           807: -      \e@Z@   @Z@, any character not listed above
        !           808: .TE
        !           809: .ps +1
        !           810: .vs +1
        !           811: .LP
        !           812: The escape sequences
        !           813: .CW \e\e ,
        !           814: .CW \e\^. ,
        !           815: .CW \e" ,
        !           816: .CW \e$ ,
        !           817: .CW \e* ,
        !           818: .CW \ea ,
        !           819: .CW \en ,
        !           820: .CW \et ,
        !           821: .CW \eg ,
        !           822: and
        !           823: .CW \e@newline@
        !           824: are interpreted in copy mode (\(sc7.2).
        !           825: .SP .5i
        !           826: \0
        !           827: .sp 100
        !           828: .BP
        !           829: .TL
        !           830: Predefined Number Registers
        !           831: .LP
        !           832: .ps -1
        !           833: .vs -1
        !           834: .TS
        !           835: c2l
        !           836: c2 l2 l
        !           837: n2 l2fCW l.
        !           838: .ft 4
        !           839: Section        Register
        !           840: Reference      Name    Description
        !           841: .ft
        !           842: .sp .5
        !           843: 3.     %       Current page number.
        !           844: 11.2   ct      Character type (set by \&\fC\ew\fP function).
        !           845: 7.4    dl      Width (maximum) of last completed diversion.
        !           846: 7.4    dn      Height (vertical size) of last completed diversion.
        !           847: -      dw      Current day of the week (1-7).
        !           848: -      dy      Current day of the month (1-31).
        !           849: 15.    ln      Output line number.
        !           850: -      mo      Current month (1-12).
        !           851: 4.1    nl      Vertical position of last printed text baseline.
        !           852: 11.2   sb      Depth of string below baseline (generated by \&\fC\ew\fP function).
        !           853: 11.2   st      Height of string above baseline (generated by \&\fC\ew\fP function).
        !           854: -      yr      Last two digits of current year.
        !           855: .TE
        !           856: .ps +1
        !           857: .vs +1
        !           858: 
        !           859: 
        !           860: .TL
        !           861: Predefined Read-Only Number Registers
        !           862: .LP
        !           863: .ps -1
        !           864: .vs -1
        !           865: .TS
        !           866: c2 l
        !           867: c2 l2 l
        !           868: n2 l2fCW l.
        !           869: .ft 4
        !           870: Section        Register
        !           871: Reference      Name    Description
        !           872: .ft
        !           873: .sp .5
        !           874: 19.    $$      Process id of \*(TR or \*(NR.
        !           875: 7.3    &$      Number of arguments available at the current macro level.
        !           876: 5.2    &a      Post-line extra line-space most recently used in @cw "\ex'" N cw "'" @.
        !           877: -      &A      Set to 1 in \*(TR, if @cw -a@ option used; always 1 in \*(NR.
        !           878: 2.3    &b      Emboldening level.
        !           879: 20.    &c      Number of lines read from current input file.
        !           880: 7.4    &d      Current vertical place in current diversion; equal to @cw nl@, if no diversion.
        !           881: 2.2    &f      Current font number.
        !           882: 20.    &F      Current input file name [sic].
        !           883: 4.     &h      Text baseline high-water mark on current page or diversion.
        !           884: 11.1   &H      Available horizontal resolution in basic units.
        !           885: 6.     &i      Current indent.
        !           886: 4.2    &j      Current @cw ad@ mode.
        !           887: 4.1    &k      Current output horizontal position.
        !           888: 6.     &l      Current line length.
        !           889: 5.1    &L      Current @cw ls@ value.
        !           890: 4.     &n      Length of text portion on previous output line.
        !           891: 3.     &o      Current page offset.
        !           892: 3.     &p      Current page length.
        !           893: 7.5    .R      Number of unused number registers.
        !           894: -      &T      Set to 1 in \*(NR, if \&\fC\-T\fP option used; always 0 in \*(TR.
        !           895: 2.3    &s      Current point size.
        !           896: 7.5    &t      Distance to the next trap.
        !           897: 4.1    &u      Equal to 1 in fill mode and 0 in nofill mode.
        !           898: 5.1    &v      Current vertical line spacing.
        !           899: 11.1   &V      Available vertical resolution in basic units.
        !           900: 11.2   &w      Width of previous character.
        !           901: -      &x      Reserved version-dependent register.
        !           902: -      &y      Reserved version-dependent register.
        !           903: 7.4    &z      Name [sic] of current diversion.
        !           904: .TE
        !           905: .ps +1
        !           906: .vs +1
        !           907: .sp 100
        !           908: .BP
        !           909: .TL
        !           910: Reference Manual
        !           911: .NH
        !           912: General Explanation
        !           913: .sc "Form of input.
        !           914: Input consists of \fItext lines\fR, which are destined to be printed,
        !           915: interspersed with \fIcontrol lines\fR,
        !           916: which set parameters or otherwise control subsequent processing.
        !           917: Control lines begin with a \fIcontrol character\fR\(em\
        !           918: normally \&\fC.\fR (period) or \&\fC'\fR (single quote)\(em\
        !           919: followed by a one or two character name that specifies
        !           920: a basic \fIrequest\fR or the substitution of
        !           921: a user-defined \fImacro\fR in place of the control line.
        !           922: The control character \&\fC'\fR suppresses the \fIbreak\fR function\(em\
        !           923: the forced output of a partially filled line\(em\
        !           924: caused by certain requests.
        !           925: The control character may be separated from the request/macro name by
        !           926: white space (spaces and/or tabs) for aesthetic reasons.
        !           927: Names should be followed by either
        !           928: space or newline.
        !           929: Control lines with unrecognized names are ignored.
        !           930: .PP
        !           931: Various special functions may be introduced anywhere in the input by
        !           932: means of an \fIescape\fR character, normally \&\fC\e\fR.
        !           933: For example, the function
        !           934: .CW \en@R@
        !           935: causes the interpolation of the contents of the
        !           936: \fInumber register R\fR
        !           937: in place of the function;
        !           938: here @R@ is either a single character name
        !           939: as in \&\fC\en\fIx\fR,
        !           940: or a two-character name introduced by
        !           941: a left-parenthesis, as in \&\fC\en(\fIxx\fR.
        !           942: .sc "Formatter and device resolution.
        !           943: \*(Tr internally stores and processes dimensions in units that correspond to
        !           944: the particular device for which output is being prepared;
        !           945: values from 300 to 1200/inch are typical.
        !           946: See \(sc23.
        !           947: \*(Nr internally uses 240 units/inch,
        !           948: corresponding to the least common multiple of the
        !           949: horizontal and vertical resolutions of various
        !           950: typewriter-like output devices.
        !           951: \*(Tr rounds horizontal/vertical numerical parameter input to the actual
        !           952: horizontal/vertical resolution of the output device indicated by the \&\fC-T\fR option
        !           953: (default
        !           954: .CW post ).
        !           955: \*(Nr similarly rounds numerical input to the actual resolution
        !           956: of its output device
        !           957: (default Model 37 Teletype).
        !           958: .sc "Numerical parameter input.
        !           959: Both \*(NR and \*(TR
        !           960: accept numerical input with the appended scale
        !           961: indicators
        !           962: shown in the following table,
        !           963: where
        !           964: \fIS\fR is the current type size in points and
        !           965: \fIV\fR is the current vertical line spacing in
        !           966: basic units.
        !           967: .TS
        !           968: center box;
        !           969: c|c
        !           970: c|c
        !           971: c|l.
        !           972: Scale
        !           973: Indicator      Meaning
        !           974: _
        !           975: \&\fCi\fR      Inch
        !           976: \&\fCc\fR      Centimeter
        !           977: \&\fCP\fR      Pica = 1/6 inch
        !           978: \&\fCm\fR      Em = \fIS\fR points
        !           979: \&\fCn\fR      En = Em/2
        !           980: \&\fCp\fR      Point = 1/72 inch
        !           981: \&\fCu\fR      Basic unit
        !           982: \&\fCv\fR      Vertical line space \fIV\fR
        !           983: none   Default, see below
        !           984: .TE
        !           985: In \*(NR, both the em and the en are taken to be equal to the
        !           986: nominal character width,
        !           987: which is output-device dependent;
        !           988: common values are 1/10 and 1/12 inch.
        !           989: Actual character widths in \*(NR need not be all the same and constructed characters
        !           990: such as \-> (\(->) are often extra wide.
        !           991: The default scaling is
        !           992: .CW m
        !           993: for the horizontally-oriented requests
        !           994: and functions
        !           995: .CW ll ,
        !           996: .CW in ,
        !           997: .CW ti ,
        !           998: .CW ta ,
        !           999: .CW lt ,
        !          1000: .CW po ,
        !          1001: .CW mc ,
        !          1002: .CW \eh ,
        !          1003: .CW \el ,
        !          1004: and horizontal coordinates of
        !          1005: .CW \eD ;
        !          1006: .CW v
        !          1007: for the vertically-oriented requests and functions
        !          1008: .CW pl ,
        !          1009: .CW wh ,
        !          1010: .CW ch ,
        !          1011: .CW dt ,
        !          1012: .CW sp ,
        !          1013: .CW sv ,
        !          1014: .CW ne ,
        !          1015: .CW rt ,
        !          1016: .CW \ev ,
        !          1017: .CW \ex ,
        !          1018: .CW \eL ,
        !          1019: and vertical coordinates of
        !          1020: .CW \eD ;
        !          1021: .CW p
        !          1022: for the
        !          1023: .CW vs
        !          1024: request;
        !          1025: and
        !          1026: .CW u
        !          1027: for the requests
        !          1028: .CW nr ,
        !          1029: .CW if ,
        !          1030: and
        !          1031: .CW ie .
        !          1032: \fIAll\fR other requests ignore any scale indicators.
        !          1033: When a number register containing an already appropriately scaled number
        !          1034: is interpolated to provide numerical input,
        !          1035: the unit scale indicator
        !          1036: \&\fCu\fR may need to be appended to prevent
        !          1037: an additional inappropriate default scaling.
        !          1038: The number, @N@, may be specified in decimal-fraction form
        !          1039: but the parameter finally stored is rounded to an integer number of basic units.
        !          1040: Internal computations are performed in integer arithmetic.
        !          1041: .PP
        !          1042: The \fIabsolute position\fR indicator \&\fC|\fR may be prepended
        !          1043: to a number @N@
        !          1044: to generate the distance to the vertical or horizontal place @N@.
        !          1045: For vertically-oriented requests and functions, \&\fC|\fP@N@
        !          1046: becomes the distance in basic units from the current vertical place on the page or in a \fIdiversion\fR (\(sc7.4)
        !          1047: to the vertical place @N@.
        !          1048: For \fIall\fR other requests and functions,
        !          1049: \&\fC|\fP@N@
        !          1050: becomes the distance from
        !          1051: the current horizontal place on the \fIinput\fR line to the horizontal place @N@.
        !          1052: For example,
        !          1053: .P1
        !          1054: \&.sp |3.2c
        !          1055: .P2
        !          1056: will space in the required direction to 3.2 centimeters from the top of the page.
        !          1057: .sc "Numerical expressions.
        !          1058: .tr &&
        !          1059: Wherever numerical input is expected an expression involving parentheses,
        !          1060: the arithmetic operators \&\fC+\fR, \&\fC-\fR, \&\fC/\fR, \&\fC\(**\fR, \&\fC%\fR (mod),
        !          1061: and the logical operators
        !          1062: \&\fC<\fR,
        !          1063: \&\fC>\fR,
        !          1064: \&\fC<=\fR,
        !          1065: \&\fC>=\fR,
        !          1066: \&\fC=\fR (or \&\fC==\fR),
        !          1067: \&\fC&\fR\ (and),
        !          1068: \&\fC:\fR\ (or)
        !          1069: may be used.
        !          1070: Except where controlled by parentheses, evaluation of expressions is left-to-right;
        !          1071: there is no operator precedence.
        !          1072: In the case of certain requests, an initial \&\fC+\fR or \&\fC-\fR is stripped
        !          1073: and interpreted as an increment or decrement indicator respectively.
        !          1074: In the presence of default scaling, the desired scale indicator must be
        !          1075: attached to \fIevery\fR number in an expression
        !          1076: for which the desired and default scaling differ.
        !          1077: For example,
        !          1078: if the number register \&\fCx\fR contains 2
        !          1079: and the current point size is 10,
        !          1080: then
        !          1081: .P1
        !          1082: \&.ll (4.25i+\enxP+3)/2u
        !          1083: .P2
        !          1084: will set the line length to 1/2 the sum of 4.25 inches + 2 picas + 3 ems.
        !          1085: .sc "Notation.
        !          1086: Numerical parameters are indicated in this manual in two ways.
        !          1087: @+- N@ means that the argument may take the forms @N@, @+N@, or @-N@ and
        !          1088: that the corresponding effect is to set the parameter
        !          1089: to @N@, to increment it by @N@, or to decrement it by @N@ respectively.
        !          1090: Plain @N@ means that an initial algebraic sign is \fInot\fR
        !          1091: an increment indicator,
        !          1092: but merely the sign of @N@.
        !          1093: Generally, unreasonable numerical input is either ignored
        !          1094: or truncated to a reasonable value.
        !          1095: For example,
        !          1096: most requests expect to set parameters to non-negative
        !          1097: values;
        !          1098: exceptions are
        !          1099: .CW sp ,
        !          1100: .CW wh ,
        !          1101: .CW ch ,
        !          1102: .CW nr ,
        !          1103: and
        !          1104: .CW if .
        !          1105: The requests
        !          1106: .CW ps ,
        !          1107: .CW ft ,
        !          1108: .CW po ,
        !          1109: .CW vs ,
        !          1110: .CW ls ,
        !          1111: .CW ll ,
        !          1112: .CW in ,
        !          1113: and
        !          1114: .CW lt 
        !          1115: restore the previous parameter value in the absence
        !          1116: of an argument.
        !          1117: .PP
        !          1118: Single character arguments are indicated by single lower case letters
        !          1119: and
        !          1120: one/two character arguments are indicated by a pair of lower case letters.
        !          1121: Character string arguments are indicated by multi-character mnemonics.
        !          1122: .NH
        !          1123: Font and Character Size Control
        !          1124: .sc "Character set.
        !          1125: The \*(TR character set is defined by a description file specific to each output device (\(sc23).
        !          1126: There are normally several regular fonts and one or more special fonts.
        !          1127: Characters are input as themselves (\s-2ASCII\s0),
        !          1128: as @cw "\e(" xx@, as @cw "\eC'" name cw "'"@,
        !          1129: or as 
        !          1130: .CW \eN'@n@' .
        !          1131: The form
        !          1132: .CW \eC'@name@'
        !          1133: permits a name of any length;
        !          1134: the form
        !          1135: .CW \eN'@n@'
        !          1136: refers to the @n@-th character on the current font,
        !          1137: whether named or not.
        !          1138: .PP
        !          1139: Normally the input characters
        !          1140: .CW ' ,
        !          1141: .CW ` ,
        !          1142: and
        !          1143: .CW -
        !          1144: are printed as `, ', and - respectively;
        !          1145: .CW \e' ,
        !          1146: .CW \e` ,
        !          1147: and
        !          1148: .CW \e-
        !          1149: produce \', \`, and \-.
        !          1150: Non-existent characters are printed as a 1-em space.
        !          1151: .PP
        !          1152: \*(Nr has an analogous, but different, mechanism for defining legal characters
        !          1153: and how to print them.
        !          1154: By default all \s-1ASCII\s0 characters are valid.
        !          1155: There are such
        !          1156: additional characters as may be available on
        !          1157: the output device,
        !          1158: such characters as may be able to be constructed
        !          1159: by overstriking or other combination,
        !          1160: and those that can reasonably be mapped
        !          1161: into other printable characters.
        !          1162: The exact behavior is determined by a driving
        !          1163: table prepared for each device.
        !          1164: .sc "Fonts.
        !          1165: \*(Tr
        !          1166: begins execution by reading information for a set of defaults fonts,
        !          1167: said to be
        !          1168: .I mounted ;
        !          1169: conventionally, the first four are
        !          1170: Times Roman (\&\fCR\fR),
        !          1171: .I "Times Italic
        !          1172: (\&\fCI\fR),
        !          1173: .B "Times Bold
        !          1174: (\&\fCB\fR),
        !          1175: and
        !          1176: .BI "Times Bold Italic
        !          1177: (\&\fCBI\fR) ,
        !          1178: and the last is a Special font
        !          1179: .CW S ) (
        !          1180: containing miscellaneous characters.
        !          1181: These fonts are used in this document.
        !          1182: The set of fonts and positions is determined by the device description file,
        !          1183: described in \(sc23.
        !          1184: .PP
        !          1185: The current font, initially Roman, may be changed
        !          1186: by use of the \&\fCft\fR request,
        !          1187: or by embedding at any desired point
        !          1188: either \&\fC\ef\fIx\fR, \&\fC\ef(\fIxx\fR, or \&\fC\ef\fP@N@,
        !          1189: where
        !          1190: \fIx\fR and \fIxx\fR are the name of a font
        !          1191: and @N@ is a numerical font position.
        !          1192: .PP
        !          1193: It is not necessary to change to the Special font;
        !          1194: characters on that font are automatically handled
        !          1195: as if they were physically part of the current font.
        !          1196: The Special font may actually be several fonts;
        !          1197: the name
        !          1198: .CW S
        !          1199: is reserved and is generally used for one of these.
        !          1200: All special fonts must be mounted after regular fonts.
        !          1201: .PP
        !          1202: \*(Tr can be informed that any particular font is mounted
        !          1203: by use of the \&\fCfp\fR request.
        !          1204: The list of known fonts is installation dependent.
        !          1205: In the subsequent discussion of font-related requests,
        !          1206: @F@ represents either a one/two-character
        !          1207: font name or the numerical font position.
        !          1208: The current font is available (as a numerical position) in the read-only number register \&\fC.f\fR.
        !          1209: .PP
        !          1210: A request for a named but not-mounted font is honored
        !          1211: if the font description information exists.
        !          1212: In this way, there is no limit on the number of fonts that may be printed
        !          1213: in any part of a document.
        !          1214: Mounted fonts may be handled more efficiently,
        !          1215: and they may be referred to by their mount positions,
        !          1216: but there is no other difference.
        !          1217: .PP
        !          1218: The function
        !          1219: .CW \eS'@+- N@'
        !          1220: causes the current font to be slanted by
        !          1221: @+- N@
        !          1222: degrees.
        !          1223: Not all devices support slanting.
        !          1224: .PP
        !          1225: \*(Nr understands font control
        !          1226: and normally underlines italic characters (see \(sc10.5).
        !          1227: .sc "Character size.
        !          1228: Character point sizes available depend on the specific output device;
        !          1229: a typical (historical) set of values is
        !          1230: 6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, and 36.
        !          1231: This is a range of 1/12 inch to 1/2 inch.
        !          1232: The \&\fCps\fR request is used to change or restore the point size.
        !          1233: Alternatively the point size may be changed between any two characters
        !          1234: by embedding a
        !          1235: .CW \es@N@
        !          1236: at the desired point
        !          1237: to set the size to @N@,
        !          1238: or a
        !          1239: .CW "\&\fC\es@+- N@
        !          1240: (@1<=N<=9@)
        !          1241: to increment/decrement the size by @N@;
        !          1242: .CW \es0
        !          1243: restores the previous size.
        !          1244: Requested point size values that are between two valid
        !          1245: sizes yield the larger of the two.
        !          1246: .PP
        !          1247: Note that through an accident of history, a construction like
        !          1248: .CW \es39
        !          1249: is parsed as size 39, and thus converted to size 36 (given the sizes above),
        !          1250: while
        !          1251: .CW \es40
        !          1252: is parsed as size 4 followed by
        !          1253: .CW 0 .
        !          1254: The syntax
        !          1255: @cw "\es(" nn@ and @cw "\es" +- cw "(" nn@
        !          1256: permits specification of sizes that would otherwise be ambiguous.
        !          1257: .PP
        !          1258: The current size is available in the \&\fC.s\fR register.
        !          1259: \*(Nr ignores type size requests.
        !          1260: .PP
        !          1261: The function
        !          1262: .CW "\eH'@+- N@'
        !          1263: sets \H'+2'the height of the current font\H'0' to
        !          1264: @N@, or increments it by @+N@, or decrements it by @-N@;
        !          1265: if @N=0@, the height is restored to the current point size.
        !          1266: In each case, the width is unchanged.
        !          1267: Not all devices support independent height and width for characters.
        !          1268: .FS
        !          1269: *The fields have the same meaning as described earlier in the Request Summary.
        !          1270: .FE
        !          1271: .SP .5
        !          1272: .LP
        !          1273: .ne 2.1
        !          1274: .ta 1i 2i 3i 4i
        !          1275: \f4Request\fR  \f4Initial\fR   \f4If\ No\fR
        !          1276: .br
        !          1277: \f4Form\fR     \f4Value\fR     \f4Argument\fR  \f4Notes\fR
        !          1278: .bt "\&\fC.ps\fI \(+-N\fR*" "10\|point" "previous" "E" "Point size
        !          1279: set to \(+-@N@.
        !          1280: Alternatively embed
        !          1281: .CW \es@N@
        !          1282: or
        !          1283: .CW "\&\fC\es@+- N@" .
        !          1284: Any positive size value may be requested;
        !          1285: if invalid, the next larger valid size will result, with a
        !          1286: maximum of 36.
        !          1287: A paired sequence
        !          1288: @+N@, @-N@
        !          1289: will work because the previous requested value is also remembered.
        !          1290: Ignored in \*(NR.
        !          1291: .bt "\&\fC.ss\fI N\fR" "12/36\|em" "ignored" "E" "Space-character size
        !          1292: (i.e., inter-word gap)
        !          1293: is set to @N@/36 ems.
        !          1294: This size is the minimum word spacing in adjusted text.
        !          1295: Ignored in \*(NR.
        !          1296: .bt "\&\fC.cs\fI\|F\|N\|M\fR" "off" "-" "P" "Constant character space
        !          1297: (width) mode is
        !          1298: set on for font @F@ (if mounted); the width of every character will be
        !          1299: taken to be @N@/36 ems.
        !          1300: If @M@ is absent,
        !          1301: the em is that of the character's point size;
        !          1302: if @M@ is given,
        !          1303: the em is @M@ points.
        !          1304: All affected characters
        !          1305: are centered in this space, including those with an actual width
        !          1306: larger than this space.
        !          1307: Special Font characters occurring while the current font
        !          1308: is @F@ are also so treated.
        !          1309: If @N@ is absent, the mode is turned off.
        !          1310: The mode must be in effect when the characters are physically printed.
        !          1311: Ignored in \*(NR.
        !          1312: .bt "\&\fC.bd\fI F N\fR" "off" "-" "P" "The characters in font @F@ will be artificially
        !          1313: emboldened by printing each one twice, separated by @N-1@ basic units.
        !          1314: A reasonable value for @N@ is 3 when the character size is near 10 points.
        !          1315: If @N@ is missing the embolden mode is turned off.
        !          1316: The emboldening value @N@ is in the \&\fC.b\fP register.
        !          1317: .IP
        !          1318: .bd R 3
        !          1319: This paragraph is printed with \&\fC.bd R 3\fR.
        !          1320: The mode must be in effect when the characters are physically printed.
        !          1321: Ignored in \*(NR.
        !          1322: .br
        !          1323: .bd R
        !          1324: .bt "\&\fC.bd S \fIF N\fR" "off" "-" "P" "The characters in the Special font
        !          1325: will be emboldened whenever the current font is @F@.
        !          1326: The mode must be in effect when the characters are physically printed.
        !          1327: Ignored in \*(NR.
        !          1328: .bt "\&\fC.ft\fP @F@" "Roman" "previous" "E" "Font changed to
        !          1329: @F@.
        !          1330: Alternatively, embed
        !          1331: .CW \ef@F@ .
        !          1332: The font name \&\fCP\fR is reserved to mean the previous font,
        !          1333: and the name
        !          1334: .CW S
        !          1335: for the special font.
        !          1336: .bt "\&\fC.fp \fIN F L\fR" "R,I,B,...,S" "ignored" "-" "Font position.
        !          1337: This is a statement
        !          1338: that a font named @F@ is associated with position @N@.
        !          1339: It is a fatal error if @F@ is not known.
        !          1340: For fonts with names longer than two characters,
        !          1341: .I L
        !          1342: refers to the long name,
        !          1343: and
        !          1344: .I F
        !          1345: becomes a synonym.
        !          1346: There is generally a limit of about 10 mounted fonts.
        !          1347: .NH
        !          1348: Page control
        !          1349: .PP
        !          1350: Top and bottom margins are not automatically provided;
        !          1351: it is conventional to define two \fImacros\fR and to set \fItraps\fR
        !          1352: for them at vertical positions 0 (top) and @-N@ (distance @N@ up from the bottom).
        !          1353: See \(sc7 and Tutorial Examples \(scT2.
        !          1354: A pseudo-page transition onto the first page occurs
        !          1355: either when the first \fIbreak\fR occurs or
        !          1356: when the first \fInon-diverted\fR text processing occurs.
        !          1357: Arrangements
        !          1358: for a trap to occur at the top of the first page
        !          1359: must be completed before this transition.
        !          1360: In the following, references to the \fIcurrent diversion\fR (\(sc7.4)
        !          1361: mean that the mechanism being described works during both
        !          1362: ordinary and diverted output (the former considered as the top diversion level).
        !          1363: .PP
        !          1364: The limitations on \*(TR and \*(NR output dimensions
        !          1365: are device dependent.
        !          1366: .bt "\&\fC.pl\fI \(+-N\fR" "11\|in" "11\|in" "\fBv\fR" "Page length set to @+- N@.
        !          1367: The current page length is available in the \&\fC.p\fR register.
        !          1368: .bt "\&\fC.bp\fI \(+-N\fR" "\fIN\(eq\fR1" "-" "B,\fBv\fR" "Begin page.
        !          1369: The current page is ejected and a new page is begun.
        !          1370: If @+- N@ is given, the new page number will be @+- N@.
        !          1371: Also see request \&\fCns\fR.
        !          1372: .bt "\&\fC.pn\fI \(+-N\fR" "@N@\(eq1" "ignored" "-" "Page number.
        !          1373: The next page (when it occurs) will have the page number @+- N@.
        !          1374: A \&\fCpn\fR must occur before the initial pseudo-page transition
        !          1375: to affect the page number of the first page.
        !          1376: The current page number is in the \&\fC%\fR register.
        !          1377: .bt "\&\fC.po\fI \(+-N\fR" "1\|in; 0" "previous" "\fBv\fR" "Page offset.
        !          1378: The current \fIleft margin\fR is set to @+- N@.
        !          1379: The \*(TR initial value provides 1 inch of paper margin
        !          1380: on a typical device.
        !          1381: The current page offset is available in the \&\fC.o\fR register.
        !          1382: .bt "\&\fC.ne\fI N\fR" "-" "\fIN\(eq\fR1\|\fIV\fR" "D,\fBv\fR" "Need @N@ vertical space.
        !          1383: If the distance \fID\fR to the next trap position (see \(sc7.5) is less than @N@,
        !          1384: a forward vertical space of size \fID\fR occurs,
        !          1385: which will spring the trap.
        !          1386: If there are no remaining
        !          1387: traps on the page,
        !          1388: \fID\fR is the distance to the bottom of the page.
        !          1389: If @D<V@, another line could still be output
        !          1390: and spring the trap.
        !          1391: In a diversion, \fID\fR is the distance to the \fIdiversion trap\fR, if any,
        !          1392: or is very large.
        !          1393: .bt "\&\fC.mk\fI R\fR" "none" "internal" "D" "Mark the current vertical place
        !          1394: in an internal register (both associated with the current diversion level),
        !          1395: or in register @R@, if given.
        !          1396: See \&\fCrt\fR request.
        !          1397: .bt "\&\fC.rt\fI \(+-N\fR" "none" "internal" "D,\fBv\fR" "Return \fIupward only\fR to a marked vertical place
        !          1398: in the current diversion.
        !          1399: If @+- N@ (with respect to current place) is given,
        !          1400: the place is @+- N@ from the top of the page or diversion
        !          1401: or, if @N@ is absent, to a
        !          1402: place marked by a previous \&\fCmk\fR.
        !          1403: The \&\fCsp\fR request (\(sc5.3) may be used
        !          1404: in all cases instead of \&\fCrt\fR
        !          1405: by spacing to the absolute place stored in a explicit register,
        !          1406: e.g., using the sequence
        !          1407: .CW ".mk
        !          1408: @R@ ...\&
        !          1409: .CW ".sp
        !          1410: .CW |\en@R@u ;
        !          1411: this also works when the motion is downwards.
        !          1412: .NH
        !          1413: Text Filling, Adjusting, and Centering
        !          1414: .sc "Filling and adjusting.
        !          1415: Normally,
        !          1416: words are collected from input text lines
        !          1417: and assembled into a output text line
        !          1418: until some word does not fit.
        !          1419: An attempt is then made
        !          1420: to hyphenate the word to put part
        !          1421: of it into the output line.
        !          1422: The spaces between the words on the output line
        !          1423: are then increased to spread out the line
        !          1424: to the current \fIline length\fR
        !          1425: minus any current \fIindent\fR.
        !          1426: A \fIword\fR is any string of characters delimited by
        !          1427: the \fIspace\fR character or the beginning/end of the input line.
        !          1428: Any adjacent pair of words that must be kept together
        !          1429: (neither split across output lines nor spread apart
        !          1430: in the adjustment process)
        !          1431: can be tied together by separating them with the
        !          1432: \fIunpaddable space\fR character
        !          1433: ``\&\fC\e\ \fR'' (backslash-space).
        !          1434: The adjusted word spacings are uniform in \*(TR
        !          1435: and the minimum interword spacing can be controlled
        !          1436: with the \&\fCss\fR request (\(sc2).
        !          1437: In \*(NR, they are normally nonuniform because of
        !          1438: quantization to character-size spaces;
        !          1439: however,
        !          1440: the command line option \&\fC-e\fR causes uniform
        !          1441: spacing with full output device resolution.
        !          1442: Filling, adjustment, and hyphenation (\(sc13) can all be
        !          1443: prevented or controlled.
        !          1444: The text length on the last line output is available in the \&\fC.n\fR register,
        !          1445: and text baseline position on the page for this line is in the \&\fCnl\fR register.
        !          1446: The text baseline high-water mark (lowest place) on the current page is in
        !          1447: the \&\fC.h\fR register.
        !          1448: The current horizontal output position is in the \&\fC.k\fP register.
        !          1449: .PP
        !          1450: An input text line ending with \&\fC.\fR\^, \&\fC?\fR, or \&\fC!\fR,
        !          1451: optionally followed by any number of
        !          1452: .CW \&" ,
        !          1453: .CW ' ,
        !          1454: .CW ) ,
        !          1455: .CW ] ,
        !          1456: .CW * ,
        !          1457: or
        !          1458: \(dg,
        !          1459: is taken
        !          1460: to be the end of a sentence, and an additional space character is
        !          1461: automatically provided during filling.
        !          1462: To prevent this, add
        !          1463: .CW \e&
        !          1464: to the end of the input line.
        !          1465: Multiple inter-word space characters found in the input are retained,
        !          1466: except for trailing spaces;
        !          1467: initial spaces also cause a break.
        !          1468: .PP
        !          1469: When filling is in effect, a \&\fC\ep\fR may be embedded or attached to a word to
        !          1470: cause a break at the end of the word and have the resulting output
        !          1471: line spread out to fill the current line length.
        !          1472: .PP
        !          1473: .tr &&
        !          1474: A text input line that happens to begin
        !          1475: with a control character can
        !          1476: be made not to look like a control line
        !          1477: by prefixing it with
        !          1478: the non-printing, zero-width filler character \&\fC\e&\fR.
        !          1479: Still another way is to specify output translation of some
        !          1480: convenient character into the control character
        !          1481: using \&\fCtr\fR (\(sc10.5).
        !          1482: .tr &.
        !          1483: .sc "Interrupted text.
        !          1484: The copying of a input line in \fInofill\f (non-fill) mode can be interrupted
        !          1485: by terminating
        !          1486: the partial line with a \&\fC\ec\fR.
        !          1487: The next encountered input text line will be considered to be a continuation
        !          1488: of the same line of input text.
        !          1489: Similarly,
        !          1490: a word within \fIfilled\fR text may be interrupted by terminating the
        !          1491: word (and line) with \&\fC\ec\fR;
        !          1492: the next encountered text will be taken as a continuation of the
        !          1493: interrupted word.
        !          1494: If the intervening control lines cause a break,
        !          1495: any partial line will be forced out along with any partial word.
        !          1496: .bt "\&\fC.br\fR" "-" "-" "B" "Break.
        !          1497: The filling of the line currently
        !          1498: being collected is stopped and
        !          1499: the line is output without adjustment.
        !          1500: Text lines beginning with space characters
        !          1501: (but not tabs)
        !          1502: and empty text lines (blank lines) also cause a break.
        !          1503: .bt "\&\fC.fi\fR" "fill on" - B,E "Fill subsequent output lines.
        !          1504: The register \&\fC.u\fR is 1 in fill mode and 0 in nofill mode.
        !          1505: .bt "\&\fC.nf\fR" "fill on" "-" "B,E" "Nofill.
        !          1506: Subsequent output lines are neither filled nor adjusted.
        !          1507: Input text lines are copied directly to output lines
        !          1508: without regard for the current line length.
        !          1509: .bt "\&\fC.ad\fI c\fR" "adj, both" "adjust" "E" "Line adjustment is begun.
        !          1510: If fill mode is not on, adjustment will be deferred until
        !          1511: fill mode is back on.
        !          1512: If the type indicator @c@ is present,
        !          1513: the adjustment type is changed as shown in the following table.
        !          1514: .TS
        !          1515: center box;
        !          1516: c|c
        !          1517: c|l.
        !          1518: Indicator      Adjust Type
        !          1519: _
        !          1520: \&\fCl\fR      adjust left margin only
        !          1521: \&\fCr\fR      adjust right margin only
        !          1522: \&\fCc\fR      center
        !          1523: \&\fCb\fR or \&\fCn\fR adjust both margins
        !          1524: absent unchanged
        !          1525: .TE
        !          1526: The number register
        !          1527: .CW .j
        !          1528: contains the current value of the
        !          1529: .CW ad
        !          1530: setting;
        !          1531: its value can be recorded and used subsequently to set adjustment.
        !          1532: .bt "\&\fC.na\fR" "adjust" "-" "E" "Noadjust.
        !          1533: Adjustment is turned off;
        !          1534: the right margin will be ragged.
        !          1535: The adjustment type for \&\fCad\fR is not changed.
        !          1536: Output line filling still occurs if fill mode is on.
        !          1537: .bt "\&\fC.ce\fI N\fR" "off" "@N=1@" "B,E" "Center the next @N@ input text lines
        !          1538: within the current available horizontal space (line-length minus indent).
        !          1539: If @N=0@, any residual count is cleared.
        !          1540: A break occurs after each of the @N@ input lines.
        !          1541: If the input line is too long,
        !          1542: it will be left adjusted.
        !          1543: .NH
        !          1544: Vertical Spacing
        !          1545: .sc "Baseline spacing.
        !          1546: The vertical spacing @(V)@ between the baselines of successive
        !          1547: output lines can be set
        !          1548: using the \&\fCvs\fR request.
        !          1549: \fIV\fR should be large enough to accommodate the character sizes
        !          1550: on the affected output lines.
        !          1551: For the common type sizes (9-12 points),
        !          1552: usual typesetting practice is to set \fIV\fR to 2 points greater than the
        !          1553: point size;
        !          1554: \*(TR default is 10-point type on a 12-point spacing
        !          1555: (as in this document).
        !          1556: The current \fIV\fR is available in the \&\fC.v\fR register.
        !          1557: Multiple-\fIV\|\fR line separation (e.g., double spacing) may be requested
        !          1558: with \&\fCls\fR,
        !          1559: but it is better to use a large
        !          1560: .CW vs
        !          1561: instead;
        !          1562: certain preprocessors assume single spacing.
        !          1563: The current line spacing is available in the \&\fC.L\fP register.
        !          1564: .sc "Extra line-space.
        !          1565: If a word contains a vertically tall construct requiring
        !          1566: the output line containing it to have extra vertical space
        !          1567: before and/or after it,
        !          1568: the \fIextra-line-space\fR function \&\fC\ex'\fIN\fP'\fR
        !          1569: can be embedded in or attached to that word.
        !          1570: If @N@ is negative,
        !          1571: the output line containing the word will
        !          1572: be preceded by @N@ extra vertical space;
        !          1573: if @N@ is positive,
        !          1574: the output line containing the word
        !          1575: will be followed by @N@ extra vertical space.
        !          1576: If successive requests for extra space apply to the same line,
        !          1577: the maximum values are used.
        !          1578: The most recently utilized post-line extra line-space is available in the \&\fC.a\fR register.
        !          1579: .PP
        !          1580: In
        !          1581: .CW \ex'\f2...\fP'
        !          1582: and other functions having a pair of delimiters around
        !          1583: their parameter,
        !          1584: the delimiter choice (here 
        !          1585: .CW ' )
        !          1586: is arbitrary,
        !          1587: except that it can not look like the continuation of a number expression for @N@.
        !          1588: .sc "Blocks of vertical space.
        !          1589: A block of vertical space is ordinarily requested using \&\fCsp\fR,
        !          1590: which honors the \fIno-space\fR mode and which does
        !          1591: not space past a trap.
        !          1592: A contiguous block of vertical space may be reserved using \&\fCsv\fR.
        !          1593: .bt "\&\fC.vs \fIN\fR" "12pts; 1/6in" "previous" "E,\fBp\fR" "Set vertical baseline spacing size \fIV\fR.
        !          1594: Transient extra vertical space is available with \&\fC\ex\fI'N\|\|'\fR (see above).
        !          1595: .bt "\&\fC.ls \fIN\fR" "@N=1@" "previous" "E" "\fILine\fR spacing
        !          1596: set to @+- N@.
        !          1597: @N-1@ \fIV\fR\^s (blank lines) are
        !          1598: appended to each output text line.
        !          1599: Appended blank lines are omitted, if the text or previous appended blank line reached a trap position.
        !          1600: .bt "\&\fC.sp \fIN\fR" "-" "@N=1~V@" "B,\fBv\fR" "Space vertically in either direction.
        !          1601: If @N@ is negative, the motion is backward (upward)
        !          1602: and is limited to the distance to the top of the page.
        !          1603: Forward (downward) motion is truncated to the distance to the
        !          1604: nearest trap.
        !          1605: If the no-space mode is on,
        !          1606: no spacing occurs (see \&\fCns\fR, and \&\fCrs\fR below).
        !          1607: .bt "\&\fC.sv\fI N\fR" "-" "@N=1~V@" "\fBv\fR" "Save a contiguous vertical block of size @N@.
        !          1608: If the distance to the next trap is greater
        !          1609: than @N@, @N@ vertical space is output.
        !          1610: No-space mode has no effect.
        !          1611: If this distance is less than @N@,
        !          1612: no vertical space is immediately output,
        !          1613: but @N@ is remembered for later output (see \&\fCos\fR).
        !          1614: Subsequent \&\fCsv\fR requests will overwrite any still remembered @N@.
        !          1615: .bt "\&\fC.os\fR" "-" "-" "-" "Output saved vertical space.
        !          1616: No-space mode has no effect.
        !          1617: Used to finally output a block of vertical space requested
        !          1618: by an earlier \&\fCsv\fR request.
        !          1619: .bt "\&\fC.ns\fR" "space" "-" "D" "No-space mode turned on.
        !          1620: When on, no-space mode inhibits \&\fCsp\fR requests and
        !          1621: \&\fCbp\fR requests \fIwithout\fR a next page number.
        !          1622: No-space mode is turned off when a line of
        !          1623: output occurs, or with \&\fCrs\fR.
        !          1624: .bt "\&\fC.rs\fR" "space" "-" "D" "Restore spacing.
        !          1625: The no-space mode is turned off.
        !          1626: .bt "\&Blank text line." "" "-" "B" "Causes a break and
        !          1627: output of a blank line exactly like \&\fCsp 1\fR.
        !          1628: .NH
        !          1629: Line Length and Indenting
        !          1630: .PP
        !          1631: The maximum line length for fill mode may be set with \&\fCll\fR.
        !          1632: The indent may be set with \&\fCin\fR;
        !          1633: an indent applicable to only the next output line may be set with \&\fCti\fR.
        !          1634: The line length includes indent space but not
        !          1635: page offset space.
        !          1636: The line length minus the indent is the basis for centering with \&\fCce\fR.
        !          1637: The effect of \&\fCll\fR, \&\fCin\fR, or \&\fCti\fR
        !          1638: is delayed, if a partially collected line exists,
        !          1639: until after that line is output.
        !          1640: In fill mode the length of text on an output line is less than or equal to
        !          1641: the line length minus the indent.
        !          1642: The current line length and indent are available in registers \&\fC.l\fR and \&\fC.i\fR respectively.
        !          1643: The length of \fIthree-part titles\fR produced by \&\fCtl\fR
        !          1644: (see \(sc14) is independently set by \&\fClt\fR.
        !          1645: .bt "\&\fC.ll\fI \(+-N\fR" "6.5\|in" "previous" "E,\fBm\fR" "Line length is set to \(+-@N@.
        !          1646: .bt "\&\fC.in\fI \(+-N\fR" "\fIN\(eq\^\fR0" "previous" "B,E,\fBm\fR" "Indent is set to @+- N@.
        !          1647: The indent is prepended to each output line.
        !          1648: .bt "\&\fC.ti\fI \(+-N\fR" "-" "ignored" "B,E,\fBm\fR" "Temporary indent.
        !          1649: The next output text line will be indented a distance @+- N@
        !          1650: with respect to the current indent.
        !          1651: The resulting total indent may not be negative.
        !          1652: The current indent is not changed.
        !          1653: .NH
        !          1654: Macros, Strings, Diversion, and Position Traps
        !          1655: .sc "Macros and strings.
        !          1656: A \fImacro\fR is a named set of arbitrary \fIlines\fR that may be invoked by name or
        !          1657: with a \fItrap\fR.
        !          1658: A \fIstring\fR is a named string of \fIcharacters\fR,
        !          1659: not including a newline character,
        !          1660: that may be interpolated by name at any point.
        !          1661: Request, macro, and string names share the same name list.
        !          1662: Macro and string names
        !          1663: may be one or two characters long and may usurp previously defined
        !          1664: request, macro, or string names;
        !          1665: this implies that built-in operations may be (irrevocably) redefined.
        !          1666: Any of these entities may be renamed with \&\fCrn\fR
        !          1667: or removed with \&\fCrm\fR.
        !          1668: .PP
        !          1669: Macros are created by \&\fCde\fR and \&\fCdi\fR, and appended to by \&\fCam\fR and \&\fCda\fR;
        !          1670: \&\fCdi\fR and \&\fCda\fR cause normal output to be stored in a macro.
        !          1671: A macro is invoked in the same way as a request;
        !          1672: a control line beginning \&\fC.\fIxx\fR will interpolate the contents of macro \fIxx\fR.
        !          1673: The remainder of the line may contain up to nine \fIarguments\fR.
        !          1674: .PP
        !          1675: Strings are created by \&\fCds\fR and appended to by \&\fCas\fR.
        !          1676: The strings \fIx\fR and \fIxx\fR are interpolated at any desired point with
        !          1677: \&\fC\e\(**\fIx\fR and \&\fC\e\(**(\fIxx\fR respectively.
        !          1678: String references and macro invocations may be nested.
        !          1679: .sc "Copy mode input interpretation.
        !          1680: During the definition and extension
        !          1681: of strings and macros (not by diversion)
        !          1682: the input is read in \fIcopy mode\fR.
        !          1683: In copy mode, input is copied without interpretation
        !          1684: except that:
        !          1685: .IP
        !          1686: .ds + \v'-.1m'\s-4\(bu\s+4\v'+.1m'
        !          1687: .nf
        !          1688: \*+ The contents of number registers indicated by \&\fC\en\fR are interpolated.
        !          1689: \*+ Strings indicated by \&\fC\e\(**\fR are interpolated.
        !          1690: \*+ Arguments indicated by \&\fC\e$\fR are interpolated.
        !          1691: \*+ Concealed newlines indicated by \&\fC\e\fP\f2newline\fP are eliminated.
        !          1692: \*+ Comments indicated by \&\fC\e"\fR are eliminated.
        !          1693: \*+ \&\fC\et\fR and \&\fC\ea\fR are interpreted as \s-1ASCII\s+1 horizontal tab and \s-1SOH\s+1 respectively (\(sc9).
        !          1694: \*+ \&\fC\e\e\fR is interpreted as \&\fC\e\fR.
        !          1695: \*+ \&\fC\e.\fR is interpreted as ``\&\fC.\fR''.
        !          1696: .LP
        !          1697: These interpretations can be suppressed by
        !          1698: prepending
        !          1699: a \&\fC\e\fR.
        !          1700: For example, since \&\fC\e\e\fR maps into a \&\fC\e\fR, \&\fC\e\en\fR will copy as \&\fC\en\fR, which
        !          1701: will be interpreted as a number register indicator when the
        !          1702: macro or string is reread.
        !          1703: .sc "Arguments.
        !          1704: When a macro is invoked by name, the remainder of the line is
        !          1705: taken to contain up to nine arguments.
        !          1706: The argument separator is the space character (not tab), and arguments
        !          1707: may be surrounded by double quotes to permit embedded space characters.
        !          1708: Pairs of double quotes may be embedded in double-quoted arguments to
        !          1709: represent a single double-quote character.
        !          1710: The argument
        !          1711: .CW \&""
        !          1712: is explicitly null.
        !          1713: If the desired arguments won't fit on a line,
        !          1714: a concealed newline may be used to continue on the next line.
        !          1715: A trailing double quote may be omitted.
        !          1716: .PP
        !          1717: When a macro is invoked the \fIinput level\fR is \fIpushed down\fR and
        !          1718: any arguments available at the previous level become unavailable
        !          1719: until the macro is completely read and the previous level is restored.
        !          1720: A macro's own arguments can be interpolated at any point
        !          1721: within the macro with
        !          1722: .CW \e$@N@ ,
        !          1723: which interpolates the @N@\^th
        !          1724: argument
        !          1725: (1\(<=@N@\^\(<=9).
        !          1726: If an invoked argument does not exist,
        !          1727: a null string results.
        !          1728: For example, the macro \fIxx\fR may be defined by
        !          1729: .P1
        !          1730: .ta .75i
        !          1731: &de xx \e" begin definition
        !          1732: Today is \e\e$1 the \e\e$2.
        !          1733: &.     \e" end definition
        !          1734: .P2
        !          1735: and called by
        !          1736: .P1
        !          1737: &xx Monday 14th
        !          1738: .P2
        !          1739: to produce the text
        !          1740: .P1
        !          1741: Today is Monday the 14th.
        !          1742: .P2
        !          1743: Note that each \&\fC\e$\fR
        !          1744: was concealed in the definition with a prepended \&\fC\e\fR.
        !          1745: The number of
        !          1746: arguments is in the \&\fC.$\fR register.
        !          1747: .PP
        !          1748: No arguments are available at the top (non-macro) level,
        !          1749: within a string, or within a trap-invoked macro.
        !          1750: .PP
        !          1751: Arguments are copied in copy mode onto a stack
        !          1752: where they are available for reference.
        !          1753: It is advisable to
        !          1754: conceal string references (with an extra \&\fC\e\fR\|)
        !          1755: to delay interpolation until argument reference time.
        !          1756: .sc "Diversions.
        !          1757: Processed output may be diverted into a macro for purposes
        !          1758: such as footnote processing (see Tutorial \(scT5)
        !          1759: or determining the horizontal and vertical size of some text for
        !          1760: conditional changing of pages or columns.
        !          1761: A single diversion trap may be set at a specified vertical position.
        !          1762: The number registers \&\fCdn\fR and \&\fCdl\fR respectively contain the
        !          1763: vertical and horizontal size of the most
        !          1764: recently ended diversion.
        !          1765: Processed text that is diverted into a macro
        !          1766: retains the vertical size of each of its lines when reread
        !          1767: in \fInofill\fR mode
        !          1768: regardless of the current \fIV\fR.
        !          1769: Constant-spaced (\&\fCcs\fR) or emboldened (\&\fCbd\fR) text that is diverted
        !          1770: can be reread correctly only if these modes are again or still in effect
        !          1771: at reread time.
        !          1772: One way to do this is to embed in the diversion the appropriate
        !          1773: \&\fCcs\fR or \&\fCbd\fR requests with the \fItransparent\fR
        !          1774: mechanism described in \(sc10.6.
        !          1775: .PP
        !          1776: Diversions may be nested
        !          1777: and certain parameters and registers
        !          1778: are associated
        !          1779: with the current diversion level
        !          1780: (the top non-diversion level may be thought of as the
        !          1781: 0th diversion level).
        !          1782: These are the diversion trap and associated macro,
        !          1783: no-space mode,
        !          1784: the internally-saved marked place (see \&\fCmk\fR and \&\fCrt\fR),
        !          1785: the current vertical place (\&\fC.d\fR register),
        !          1786: the current high-water text baseline (\&\fC.h\fR register),
        !          1787: and the current diversion name (\&\fC.z\fR register).
        !          1788: .sc "Traps.
        !          1789: Three types of trap mechanisms are available\(empage traps, a diversion trap, and
        !          1790: an input-line-count trap.
        !          1791: Macro-invocation traps may be planted using \&\fCwh\fR at any page position including the top.
        !          1792: This trap position may be changed using \&\fCch\fR.
        !          1793: Trap positions at or below the bottom of the page
        !          1794: have no effect unless or until
        !          1795: moved to within the page or rendered effective by an increase in page length.
        !          1796: Two traps may be planted at the same position only by first planting them at different
        !          1797: positions and then moving one of the traps;
        !          1798: the first planted trap will conceal the second unless and until the first one is moved
        !          1799: (see Tutorial Examples).
        !          1800: If the first one is moved back, it again conceals the second trap.
        !          1801: The macro associated with a page trap is automatically
        !          1802: invoked when a line of text is output whose vertical size reaches
        !          1803: or sweeps past the trap position.
        !          1804: Reaching the bottom of a page springs the top-of-page trap, if any,
        !          1805: provided there is a next page.
        !          1806: The distance to the next trap position is available in the \&\fC.t\fR register;
        !          1807: if there are no traps between the current position and the bottom of the page,
        !          1808: the distance returned is the distance to the page bottom.
        !          1809: .PP
        !          1810: A macro-invocation trap effective in the current diversion may be planted using \&\fCdt\fR.
        !          1811: The \&\fC.t\fR register works in a diversion; if there is no subsequent trap a large
        !          1812: distance is returned.
        !          1813: For a description of input-line-count traps, see \&\fCit\fR below.
        !          1814: .bt "\&\fC&de\fI xx yy\fR" "-" "\fI.yy=\&\fC..\fR" "-" "Define or redefine the macro \fIxx\fR.
        !          1815: The contents of the macro begin on the next input line.
        !          1816: Input lines are copied in \fIcopy mode\fR until the definition is terminated by a
        !          1817: line beginning with \&\fC.\fIyy\fR,
        !          1818: whereupon the macro \fIyy\fR is called.
        !          1819: In the absence of \fIyy\fR, the definition
        !          1820: is terminated by a
        !          1821: line beginning with ``\&\fC..\fR''.
        !          1822: A macro may contain \&\fCde\fR requests
        !          1823: provided the terminating macros differ
        !          1824: or the contained definition terminator is concealed.
        !          1825: \&``\&\fC..\fR'' can be concealed as
        !          1826: \&\fC\e\e..\fR which will copy as \&\fC\e..\fR and be reread as ``\&\fC..\fR''.
        !          1827: .bt "\&\fC&am\fI xx yy\fR" "-" "\fI.yy=\&\fC..\fR" "-" "Append to macro
        !          1828: .I xx
        !          1829: (append version of \&\fCde\fR).
        !          1830: .bt "\&\fC&ds\fI xx string\fR" "-" "ignored" "-" "Define a string
        !          1831: \fIxx\fR containing \fIstring\fR.
        !          1832: Any initial double quote in \fIstring\fR is stripped off to permit
        !          1833: initial blanks.
        !          1834: .bt "\&\fC&as\fI xx string\fR" "-" "ignored" "-" "Append
        !          1835: \fIstring\fR to string \fIxx\fR
        !          1836: (append version of \&\fCds\fR).
        !          1837: .bt "\&\fC&rm\fI xx\fR" "-" "ignored" "-" "Remove
        !          1838: request, macro, or string.
        !          1839: The name \fIxx\fR is removed from the name list and
        !          1840: any related storage space is freed.
        !          1841: Subsequent references will have no effect.
        !          1842: If many macros and strings are being created dynamically, it
        !          1843: may become necessary to remove unused ones
        !          1844: to recapture internal storage space for newer registers.
        !          1845: .bt "\&\fC&rn\fI xx yy\fR" "-" "ignored" "-" "Rename request, macro, or string
        !          1846: \fIxx\fR to \fIyy\fR.
        !          1847: If \fIyy\fR exists, it is first removed.
        !          1848: .bt "\&\fC&di\fI xx\fR" "-" "end" "D" "Divert output to macro \fIxx\fR.
        !          1849: Normal text processing occurs during diversion
        !          1850: except that page offsetting is not done.
        !          1851: The diversion ends when the request \&\fCdi\fR or \&\fCda\fR is encountered without an argument;
        !          1852: extraneous
        !          1853: requests of this type should not appear when nested diversions are being used.
        !          1854: .bt "\&\fC&da \fIxx\fR" "-" "end" "D" "Divert, appending to macro \fIxx\fR
        !          1855: (append version of \&\fCdi\fR).
        !          1856: .bt "\&\fC&wh\fI N xx\fR" "-" "-" "\fBv\fR" "Install
        !          1857: a trap to invoke \fIxx\fR at page position \fIN\fR;
        !          1858: a negative N will be interpreted as a distance from the
        !          1859: page bottom.
        !          1860: Any macro previously planted at @N@ is replaced by \fIxx\fR.
        !          1861: A zero @N@ refers to the top of a page.
        !          1862: In the absence of \fIxx\fR, the first trap found at @N@, if any, is removed.
        !          1863: .bt "\&\fC&ch\fI xx N\fR" "-" "-" "\fBv\fR" "Change
        !          1864: the trap position for macro \fIxx\fR to be @N@.
        !          1865: In the absence of @N@, the trap, if any, is removed.
        !          1866: .bt "\&\fC&dt\fI N xx\fR" "-" "off" "D,\fBv\fR" "Install a diversion trap
        !          1867: at position @N@ in the \fIcurrent\fR diversion to invoke
        !          1868: macro \fIxx\fR.
        !          1869: Another \&\fCdt\fR will redefine the diversion trap.
        !          1870: If no arguments are given, the diversion trap is removed.
        !          1871: .bt "\&\fC&it\fI N xx\fR" "-" "off" "E" "Set an input-line-count trap
        !          1872: to invoke the macro \fIxx\fR after @N@ lines of \fItext\fR input
        !          1873: have been read
        !          1874: (control or request lines do not count).
        !          1875: The text may be inline text or
        !          1876: text interpolated by inline or trap-invoked macros.
        !          1877: .bt "\&\fC&em\fI xx\fR" "none" "none" "-" "The
        !          1878: macro \fIxx\fR will be invoked
        !          1879: when all input has ended.
        !          1880: The effect is almost as if the contents of \fIxx\fR had been at the end
        !          1881: of the last file processed,
        !          1882: but all processing ceases at the next page eject.
        !          1883: .NH
        !          1884: Number Registers
        !          1885: .PP
        !          1886: A variety of parameters are available to the user as
        !          1887: predefined \fInumber registers\fR (see Summary, page \n(*%).
        !          1888: In addition, users may define their own registers.
        !          1889: Register names are one or two characters long and do not conflict
        !          1890: with request, macro, or string names.
        !          1891: Except for certain predefined read-only registers,
        !          1892: a number register can be read, written, automatically
        !          1893: incremented or decremented, and interpolated
        !          1894: into the input in a variety of formats.
        !          1895: One common use of user-defined registers is to
        !          1896: automatically number sections, paragraphs, lines, etc.
        !          1897: A number register may be used any time numerical input is expected or desired
        !          1898: and may be used in numerical \fIexpressions\fR (\(sc1.4).
        !          1899: .PP
        !          1900: Number registers are created and modified using \&\fCnr\fR, which
        !          1901: specifies the name, numerical value, and the auto-increment size.
        !          1902: Registers are also modified, if accessed
        !          1903: with an auto-incrementing sequence.
        !          1904: If the registers \fIx\fR and \fIxx\fR both contain
        !          1905: @N@ and have the auto-increment size @M@,
        !          1906: the following access sequences have the effect shown:
        !          1907: .TS
        !          1908: center box;
        !          1909: c2|c2|c
        !          1910: c2|c2|c2
        !          1911: l2|c2|c2
        !          1912: l2|c2|c2
        !          1913: l2|l2|c2.
        !          1914:        Effect on       Value
        !          1915: Sequence       Register        Interpolated
        !          1916: _
        !          1917: \&\fC\en\fIx\fR        none    @N@
        !          1918: \&\fC\en(\fIxx\fR      none    @N@
        !          1919: \&\fC\en+\fIx\fR       \fIx\fR incremented by @M@      \fIN+M\fR
        !          1920: \&\fC\en\-\fIx\fR      \fIx\fR decremented by @M@      \fIN\-M\fR
        !          1921: \&\fC\en+(\fIxx\fR     \fIxx\fR incremented by @M@     \fIN+M\fR
        !          1922: \&\fC\en\-(\fIxx\fR    \fIxx\fR decremented by @M@     \fIN\-M\fR
        !          1923: .TE
        !          1924: When interpolated, a number register is converted to
        !          1925: decimal (default),
        !          1926: decimal with leading zeros,
        !          1927: lower-case Roman,
        !          1928: upper-case Roman,
        !          1929: lower-case sequential alphabetic,
        !          1930: or
        !          1931: upper-case sequential alphabetic
        !          1932: according to the format specified by \&\fCaf\fR.
        !          1933: .bt "\&\fC&nr\fI R \(+-N M\fR" "" "-" "\fBu\fR" "The number register
        !          1934: @R@ is assigned the value @+- N@
        !          1935: with respect to the previous value, if any.
        !          1936: The increment for auto-incrementing is set to @M@.
        !          1937: .bt "\&\fC&af\fI R c\fR" "arabic" "-" "-" "Assign
        !          1938: format @c@ to register @R@.
        !          1939: The available formats are:
        !          1940: .Tm number register format     s
        !          1941: .TS
        !          1942: center box;
        !          1943: c2|c
        !          1944: c2|c
        !          1945: c2|l.
        !          1946:        Numbering
        !          1947: Format Sequence
        !          1948: _
        !          1949: \&\fC1\fR      0, 1, 2, 3, 4, 5, ...
        !          1950: \&\fC001\fR    000, 001, 002, 003, 004, 005, ...
        !          1951: \&\fCi\fR      0, i, ii, iii, iv, v, ...
        !          1952: \&\fCI\fR      0, I, II, III, IV, V, ...
        !          1953: \&\fCa\fR      0, a, b, c, ..., z, aa, ab, ..., zz, aaa, ...
        !          1954: \&\fCA\fR      0, A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, ...
        !          1955: .TE
        !          1956: An arabic format having @N@ digits
        !          1957: specifies a field width of @N@ digits (example 2 above).
        !          1958: The read-only registers and the width function
        !          1959: .CW \ew
        !          1960: (\(sc11.2)
        !          1961: are always arabic.
        !          1962: Warning: the value of a number register in a non-arabic format
        !          1963: is not numeric, and will not produce the expected results in expressions.
        !          1964: .IP
        !          1965: The function
        !          1966: .CW \eg@x@
        !          1967: or
        !          1968: .CW \eg(@xx@
        !          1969: returns the format of a number register in a form suitable for
        !          1970: .CW af ;
        !          1971: it returns nothing if the register has not been used.
        !          1972: .bt "\&\fC&rr\fI R\fR" "-" "ignored" "-" "Remove number register @R@.
        !          1973: If many registers are being created dynamically, it
        !          1974: may become necessary to remove unused registers
        !          1975: to recapture internal storage space for newer registers.
        !          1976: The register
        !          1977: .CW .R
        !          1978: contains the number of number registers still available.
        !          1979: .NH
        !          1980: Tabs, Leaders, and Fields
        !          1981: .sc "Tabs and leaders.
        !          1982: The \s-1ASCII\s+1 horizontal tab character and the \s-1ASCII\s+1
        !          1983: \s-1SOH\s+1 (control-A, hereafter called the \fIleader\fR character)
        !          1984: can both be used to generate either horizontal motion or
        !          1985: a string of repeated characters.
        !          1986: The length of the generated entity is governed
        !          1987: by internal \fItab stops\fR specifiable
        !          1988: with \&\fCta\fR.
        !          1989: The default difference is that tabs generate motion and leaders generate
        !          1990: a string of periods;
        !          1991: \&\fCtc\fR and \&\fClc\fR
        !          1992: offer the choice of repeated character or motion.
        !          1993: There are three types of internal tab stops\(em\
        !          1994: \fIleft\fR adjusting, \fIright\fR adjusting,
        !          1995: and \fIcentering\fR.
        !          1996: In the following table,
        !          1997: \fID\fR is the distance from the current position on the \fIinput\fR line
        !          1998: (where a tab or leader was found)
        !          1999: to the next tab stop,
        !          2000: \fInext-string\fR consists
        !          2001: of the input characters following the tab (or leader) up to the next tab (or leader) or end of line,
        !          2002: and
        !          2003: \fIW\fR is the width of \fInext-string\fR.
        !          2004: .TS
        !          2005: center box;
        !          2006: c2|c2|c
        !          2007: c2|c2|c
        !          2008: c2|c2|l.
        !          2009: Tab    Length of motion or     Location of
        !          2010: type   repeated characters     \fInext-string\fR
        !          2011: _
        !          2012: Left   \fID\fR Following \fID\fR
        !          2013: Right  \fID\-W\fR      Right adjusted within \fID\fR
        !          2014: Centered       \fID\-W/\fR2    Centered on right end of \fID\fR
        !          2015: .TE
        !          2016: The length of generated motion is allowed to be negative, but
        !          2017: that of a repeated character string cannot be.
        !          2018: Repeated character strings contain an integer number of characters, and
        !          2019: any residual distance is prepended as motion.
        !          2020: Tabs or leaders found after the last tab stop are ignored, but may be used
        !          2021: as \fInext-string\fR terminators.
        !          2022: .PP
        !          2023: Tabs and leaders are not interpreted in copy mode.
        !          2024: \&\fC\et\fR and \&\fC\ea\fR always generate a non-interpreted
        !          2025: tab and leader respectively, and
        !          2026: are equivalent to actual tabs and leaders in copy mode.
        !          2027: .sc "Fields.
        !          2028: A \fIfield\fR is contained between
        !          2029: a pair of \fIfield delimiter\fR characters,
        !          2030: and consists of sub-strings
        !          2031: separated by \fIpadding\fR indicator characters.
        !          2032: The field length is the distance on the
        !          2033: \fIinput\fR line from the position where the field begins to the next tab stop.
        !          2034: The difference between the total length of all the sub-strings
        !          2035: and the field length is incorporated as horizontal
        !          2036: padding space that is divided among the indicated
        !          2037: padding places.
        !          2038: The incorporated padding is allowed to be negative.
        !          2039: For example,
        !          2040: if the field delimiter is \&\fC#\fR and the padding indicator is \&\fC^\fR,
        !          2041: \&\fC#^\fIxxx\&\fC^\fIright\|\&\fC#\fR
        !          2042: specifies a right-adjusted string with the string \fIxxx\fR centered
        !          2043: in the remaining space.
        !          2044: .h1
        !          2045: .bt "\&\fC&ta\fI Nt ...\fR" "0.8; 0.5in" "none" "E,\fBm\fR" "Set tab stops and types.
        !          2046: \fIt=\&\fCR\fR, right adjusting;
        !          2047: \fIt=\&\fCC\fR, centering;
        !          2048: \fIt\fR absent, left adjusting.
        !          2049: \*(Tr tab stops are preset every 0.5in.,
        !          2050: \*(NR every 0.8in.
        !          2051: The stop values are separated by spaces, and
        !          2052: a value preceded by \&\fC+\fR
        !          2053: is treated as an increment to the previous stop value.
        !          2054: .bt "\&\fC&tc\fI c\fR" "none" "none" "E" "The tab repetition character
        !          2055: becomes @c@,
        !          2056: or is removed, thus specifying motion.
        !          2057: .bt "\&\fC&lc\fI c\fR" "\&\fC.\fR" "none" "E" "The leader repetition character
        !          2058: becomes @c@,
        !          2059: or is removed, thus specifying motion.
        !          2060: .bt "\&\fC&fc\fI a b\fR" "off" "off" "-" "The field delimiter
        !          2061: is set to \fIa\fR;
        !          2062: the padding indicator is set to the space character or to
        !          2063: \fIb\fR, if given.
        !          2064: In the absence of arguments the field mechanism is turned off.
        !          2065: .NH
        !          2066: Input and Output Conventions and Character Translations
        !          2067: .sc "Input character translations.
        !          2068: Ways of inputting the valid character set were
        !          2069: discussed in \(sc2.1.
        !          2070: The \s-1ASCII\s+1 control characters horizontal tab (\(sc9.1),
        !          2071: \s-1SOH\s+1 (\(sc9.1), and backspace (\(sc10.3) are discussed elsewhere.
        !          2072: The newline delimits input lines.
        !          2073: In addition,
        !          2074: \s-1STX\s+1, \s-1ETX\s+1, \s-1ENQ\s+1, \s-1ACK\s+1, and \s-1BEL\s+1
        !          2075: are accepted,
        !          2076: and may be used as delimiters or translated into a graphic with \&\fCtr\fR (\(sc10.5).
        !          2077: All others are ignored.
        !          2078: .PP
        !          2079: The \fIescape\fR character \&\fC\e\fR
        !          2080: introduces \fIescape sequences\fR,
        !          2081: which cause the following character to mean
        !          2082: another character, or to indicate
        !          2083: some function.
        !          2084: .nr %% \n(*%-1
        !          2085: A complete list of such sequences is given in the Summary on page \n(%%.
        !          2086: The escape character \&\fC\e\fR
        !          2087: should not be confused with the \s-1ASCII\s+1 control character \s-1ESC\s+1.
        !          2088: The escape character \&\fC\e\fR can be input with the sequence \&\fC\e\e\fR.
        !          2089: The escape character can be changed with \&\fCec\fR,
        !          2090: and all that has been said about the default \&\fC\e\fR becomes true
        !          2091: for the new escape character.
        !          2092: \&\fC\ee\fR can be used to print whatever the current escape character is.
        !          2093: The escape mechanism may be turned off with \&\fCeo\fR,
        !          2094: and restored with \&\fCec\fR.
        !          2095: .h1
        !          2096: .bt "\&\fC&ec\fI c\fR" "\&\fC\e\fR" "\&\fC\e\fR" "-" "Set escape character
        !          2097: to \&\fC\e\fR, or to @c@, if given.
        !          2098: .bt "\&\fC&eo\fR" "on" "-" "-" "Turn escape mechanism off.
        !          2099: .sc "Ligatures.
        !          2100: .lg0
        !          2101: The set of available ligatures is device and font dependent,
        !          2102: but is often a subset of
        !          2103: \&\fC\(fi\fR, \&\fC\(fl\fR, \&\fC\(ff\fR, \&\fC\(Fi\fR, and \&\fC\(Fl\fR.
        !          2104: They may be input by
        !          2105: \&\fC\e(fi\fR, \&\fC\e(fl\fR, \&\fC\e(ff\fR, \&\fC\e(Fi\fR, and \&\fC\e(Fl\fR respectively.
        !          2106: .lg
        !          2107: The ligature mode is normally on in \*(TR, and automatically invokes 
        !          2108: ligatures during input.
        !          2109: .h1
        !          2110: .bt "\&\fC&lg\fI N\fR" "on; off" "on" "-" "Ligature mode
        !          2111: is turned on if @N@ is absent or non-zero,
        !          2112: and turned off if @N=0@.
        !          2113: If @N=2@, only the two-character ligatures are automatically invoked.
        !          2114: Ligature mode is inhibited for
        !          2115: request, macro, string, register, or file names,
        !          2116: and in copy mode.
        !          2117: No effect in \*(NR.
        !          2118: .sc "Backspacing, underlining, overstriking, etc.
        !          2119: Unless in copy mode, the \s-1ASCII\s+1 backspace character is replaced
        !          2120: by a backward horizontal motion having the width of the
        !          2121: space character.
        !          2122: Underlining as a form of line-drawing is discussed in \(sc12.4.
        !          2123: A generalized overstriking function is described in \(sc12.1.
        !          2124: .PP
        !          2125: \*(Nr automatically underlines
        !          2126: characters in the \fIunderline\fR font,
        !          2127: specifiable with \&\fCuf\fR,
        !          2128: normally that on font position 2.
        !          2129: In addition to \&\fCft\fR and
        !          2130: .CW \ef@F@ ,
        !          2131: the underline font may be selected by \&\fCul\fR and \&\fCcu\fR.
        !          2132: Underlining is restricted to an output-device-dependent
        !          2133: subset of reasonable characters.
        !          2134: .bt "\&\fC&ul\fI N\fR" "off" "@N=1@" "E" "Italicize in \*(TR
        !          2135: (underline in \*(NR) the next @N@
        !          2136: input text lines.
        !          2137: Actually, switch to underline font, saving the
        !          2138: current font for later restoration;
        !          2139: other font changes within the span of a \&\fCul\fR
        !          2140: will take effect,
        !          2141: but the restoration will undo the last change.
        !          2142: Output generated by \&\fCtl\fR (\(sc14) is affected by the
        !          2143: font change, but does not decrement @N@.
        !          2144: If @N>1@, there is the risk that
        !          2145: a trap interpolated macro may provide text
        !          2146: lines within the span;
        !          2147: environment switching can prevent this.
        !          2148: .bt "\&\fC&cu\fI N\fR" "off" "@N=1@" "E" "Continuous underline.
        !          2149: A variant
        !          2150: of \&\fCul\fR that causes \fIevery\fR character to be underlined in \*(NR.
        !          2151: Identical to \&\fCul\fR in \*(TR.
        !          2152: .bt "\&\fC&uf\fI F\fR" "Italic" "Italic" "-" "Underline font set to @F@.
        !          2153: In \*(NR,
        !          2154: @F@ may not be on position 1.
        !          2155: .sc "Control characters.
        !          2156: Both the control character \&\fC.\fR and the \fIno-break\fR
        !          2157: control character \&\fC'\fR may be changed.
        !          2158: Such a change must be compatible with the design
        !          2159: of any macros used in the span of the change,
        !          2160: and
        !          2161: particularly of any trap-invoked macros.
        !          2162: .bt "\&\fC&cc\fI c\fR" "\&\fC.\fR" "\&\fC.\fR" "E" "The basic control character
        !          2163: is set to @c@,
        !          2164: or reset to ``\&\fC.\fR''.
        !          2165: .bt "\&\fC&c2\fI c\fR" "\&\fC'" "'\fR" "E" "The \fIno-break\fR control character is set
        !          2166: to @c@, or reset to ``\&\fC'\fR''.
        !          2167: .sc "Output translation.
        !          2168: One character can be made a stand-in for another character using \&\fCtr\fR.
        !          2169: All text processing (e.g., character comparisons) takes place
        !          2170: with the input (stand-in) character which appears to have the width of the final
        !          2171: character.
        !          2172: The graphic translation occurs at the moment of output
        !          2173: (including diversion).
        !          2174: .bt "\&\fC&tr\fI abcd....\fR" "none" "-" "O" "Translate
        !          2175: \fIa\fR into \fIb\fR, @c@ into \fId\fR, etc.
        !          2176: If an odd number of characters is given,
        !          2177: the last one will be mapped into the space character.
        !          2178: To be consistent, a particular translation
        !          2179: must stay in effect from \fIinput\fR to \fIoutput\fR time.
        !          2180: .sc "Transparent throughput.
        !          2181: An input line beginning with a \&\fC\e!\fR is read in copy mode and \fItrans\%parently\fR output
        !          2182: (without the initial \&\fC\e!\fR);
        !          2183: the text processor is otherwise unaware of the line's presence.
        !          2184: This mechanism may be used to pass control information to a post-processor
        !          2185: or to embed control lines in a macro created by a diversion.
        !          2186: .sc "Transparent output
        !          2187: The sequence
        !          2188: .CW \eX'@anything@'
        !          2189: copies
        !          2190: .I anything
        !          2191: to the output, as a device control function of the form
        !          2192: .CW x
        !          2193: .CW X 
        !          2194: .I anything 
        !          2195: (\(sc22).
        !          2196: Escape sequences in
        !          2197: .I anything
        !          2198: are processed.
        !          2199: .sc "Comments and concealed newlines.
        !          2200: An uncomfortably long input line that must stay
        !          2201: one line (e.g., a string definition, or nofilled text)
        !          2202: can be split into several physical lines by ending all but
        !          2203: the last one with the escape \&\fC\e\fR.
        !          2204: The sequence \&\fC\e\fR@newline@ is always ignored,
        !          2205: except in a comment.
        !          2206: Comments may be embedded at the end of any line by
        !          2207: prefacing them with \&\fC\e"\fR.
        !          2208: The newline at the end of a comment cannot be concealed.
        !          2209: A line beginning with \&\fC\e"\fR will appear as a blank line and
        !          2210: behave like
        !          2211: .CW ".sp\ 1" ;
        !          2212: a comment can be on a line by itself by beginning the line with \&\fC.\e"\fR.
        !          2213: .NH
        !          2214: Local Horizontal and Vertical Motions, and the Width Function
        !          2215: .sc "Local Motions.
        !          2216: The functions \&\fC\ev'\fIN\&\fC'\fR and
        !          2217: \&\fC\eh'\fIN\&\fC'\fR
        !          2218: can be used for \fIlocal\fR vertical and horizontal motion respectively.
        !          2219: The distance @N@ may be negative; the positive directions
        !          2220: are rightward and downward.
        !          2221: A local motion is one contained within a line.
        !          2222: To avoid unexpected vertical dislocations, it is necessary that
        !          2223: the net vertical local motion within a word in filled text
        !          2224: and otherwise within a line balance to zero.
        !          2225: The above and certain other escape sequences providing local motion are
        !          2226: summarized in the following table.
        !          2227: .ds Y \0\0\0
        !          2228: .TS
        !          2229: center box;
        !          2230: c2|cs2||c2|cs2
        !          2231: c1|c2c2||c2|c2c2.
        !          2232: Vertical       Effect in       Horizontal      Effect in
        !          2233: Local Motion   \*(TR   \*(NR   Local Motion    \*(TR   \*(NR
        !          2234: _
        !          2235: .sp.4
        !          2236: .TC
        !          2237: l2|ls2||l2|ls2.
        !          2238: \&\fC\*Y\ev'\fIN\|\fC'\fR      Move distance @N@       \
        !          2239: \&\fC\*Y\eh'\fIN\|\fC'\fR      Move distance @N@
        !          2240: .TC
        !          2241: _2|_2_2||l2|ls2.
        !          2242: x      x       x       \&\fC\*Y\e\fP\f2space\fP        Unpaddable space-size space
        !          2243: .TC
        !          2244: l2|l2|l2||l2|ls2.
        !          2245: \&\fC\*Y\eu\fR \(12 em up      \(12 line up    \&\fC\*Y\e0\fR  Digit-size space
        !          2246: .TC
        !          2247: l2|l2|l2||_2|_2_2.
        !          2248: \&\fC\*Y\ed\fR \(12 em down    \(12 line down  x       x       x
        !          2249: .TC
        !          2250: l2|l2|l2||l2|l2|l2.
        !          2251: \&\fC\*Y\er\fR 1 em up 1 line up       \&\fC\*Y\e|\fR  1/6 em space    ignored
        !          2252:                        \&\fC\*Y\e^\fR  1/12 em space   ignored
        !          2253: .sp.4
        !          2254: .TE
        !          2255: As an example,
        !          2256: \&\fCE\s-2\v'-.4m'2\v'.4m'\s+2\fR
        !          2257: could be generated by the sequence
        !          2258: \&\fCE\es\-2\ev'\-0.4m'2\ev'0.4m'\es+2\fR;
        !          2259: note that
        !          2260: the 0.4 em vertical motions are at the smaller size.
        !          2261: .sc "Width Function.
        !          2262: The \fIwidth\fR function \&\fC\ew'\fIstring\&\fC'\fR
        !          2263: generates the numerical width of \fIstring\fR (in basic units).
        !          2264: Size and font changes may be embedded in \fIstring\fR,
        !          2265: and will not affect the current environment.
        !          2266: For example,
        !          2267: \&\&\fC.ti\ \-\ew'\efB1.\ 'u\fR could be used to
        !          2268: temporarily indent leftward a distance equal to the
        !          2269: size of the string ``\&\fC1.\ \fR'' in font
        !          2270: .CW B .
        !          2271: .PP
        !          2272: The width function also sets three number registers.
        !          2273: The registers \&\fCst\fR and \&\fCsb\fR are set respectively to the highest and
        !          2274: lowest extent of \fIstring\fR relative to the baseline;
        !          2275: then, for example,
        !          2276: the total height of the string is \&\fC\en(stu\-\en(sbu\fR.
        !          2277: In \*(TR the number register \&\fCct\fR is set to a value
        !          2278: between 0 and 3.
        !          2279: The value
        !          2280: 0 means that all of the characters in \fIstring\fR were short lower
        !          2281: case characters without descenders (like \&\fCe\fR);
        !          2282: 1 means that at least one character has a descender (like \&\fCy\fR);
        !          2283: 2 means that at least one character is tall (like \&\fCH\fR);
        !          2284: and 3 means that both tall characters and characters with
        !          2285: descenders are present.
        !          2286: .sc "Mark horizontal place.
        !          2287: The function \&\fC\ek\fIx\fR causes the current horizontal
        !          2288: position in the \fIinput line\fR to be stored in register \fIx\fR.
        !          2289: For example,
        !          2290: the construction \&\fC\ekx\fIword\fC\eh'|\enxu+3u'\fIword\&\fC\fR
        !          2291: will embolden \fIword\fR by backing up to almost its beginning and overprinting it,
        !          2292: resulting in \kz\fIword\fR\h'|\nzu+3u'\fIword\fR.
        !          2293: .NH
        !          2294: Overstrike, Bracket, Line-drawing, Graphics, and Zero-width Functions
        !          2295: .sc "Overstriking.
        !          2296: Automatically centered overstriking of up to nine characters
        !          2297: is provided by the \fIoverstrike\fR function
        !          2298: \&\fC\eo'\fIstring\&\fC\|'\fR.
        !          2299: The characters in \fIstring\fR are overprinted with centers aligned; the total width
        !          2300: is that of the widest character.
        !          2301: \fIstring\fR may not contain local vertical motion.
        !          2302: As examples,
        !          2303: \&\fC\eo'e\e''\fR produces \o'e\'', and
        !          2304: \&\fC\eo'\e(mo\e(sl'\fR produces \o'\(mo\(sl'.
        !          2305: .sc "Zero-width characters.
        !          2306: The function
        !          2307: .CW \ez@c@
        !          2308: will output @c@ without spacing over
        !          2309: it, and can be used to produce left-aligned overstruck
        !          2310: combinations.
        !          2311: As examples,
        !          2312: \&\fC\ez\e(ci\e(pl\fR will produce \&\fC\z\(ci\(pl\fR, and
        !          2313: \&\fC\e(br\ez\e(rn\e(ul\e(br\fR will produce a small
        !          2314: constructed box \&\fC\(br\z\(rn\(ul\(br\fR\|.
        !          2315: .sc "Large Brackets.
        !          2316: The Special Font usually contains a number of bracket construction pieces
        !          2317: \|\|\(lt\|\|\(lb\|\|\(rt\|\|\(rb\|\|\(lk\|\|\(rk\|\|\(bv\|\|\(lf\|\|\(rf\|\|\(lc\|\|\(rc\|\|
        !          2318: that can be combined into various bracket styles.
        !          2319: The function \&\fC\eb'\fIstring\&\fC\|'\fR may be used to pile
        !          2320: up vertically the characters in \fIstring\fR
        !          2321: (the first character on top and the last at the bottom);
        !          2322: the characters are vertically separated by 1 em and the total
        !          2323: pile is centered 1/2 em above the current baseline
        !          2324: (\(12 line in \*(NR).
        !          2325: For example,
        !          2326: .P1
        !          2327: \eb'\e(lc\e(lf'E\eb'\e(rc\e(rf'\ex'\-0.5m'\ex'0.5m'
        !          2328: .P2
        !          2329: produces
        !          2330: \x'-.5m'\x'.5m'\b'\(lc\(lf'E\b'\(rc\(rf'.
        !          2331: .sc "Line drawing.
        !          2332: .tr &&
        !          2333: The function \&\fC\el'\fINc\fC'\fR (backslash-ell) draws a string of repeated @c@'s towards the right for a distance @N@.
        !          2334: If @c@ looks like a continuation of
        !          2335: an expression for @N@, it may be insulated from @N@ with a \&\fC\e&\fR.
        !          2336: If @c@ is not specified, the \&\fC\(ru\fR (baseline rule) is used
        !          2337: (underline character in \*(NR).
        !          2338: If @N@ is negative, a backward horizontal motion
        !          2339: of size @N@ is made before drawing the string.
        !          2340: Any space resulting from @N@/(size of @c@) having a remainder is put at the beginning (left end)
        !          2341: of the string.
        !          2342: If @N@ is less than the width of @c@,
        !          2343: a single @c@ is centered on a distance @N@.
        !          2344: In the case of characters
        !          2345: that are designed to be connected, such as
        !          2346: baseline-rule\ \&\fC\(ru\fR\|,
        !          2347: under-rule\ \&\fC\(ul\fR\|,
        !          2348: and
        !          2349: root-en\ \&\fC\(rn\fR\|,
        !          2350: the remainder space is covered by overlapping.
        !          2351: As an example, a macro to underscore a string can be written
        !          2352: .tr &.
        !          2353: .P1
        !          2354: .ne 2.1
        !          2355: &de us
        !          2356: \e\e$1\e\|l\|'|0\e(ul'
        !          2357: &&
        !          2358: .P2
        !          2359: .ne2.1
        !          2360: .de xu
        !          2361: \\$1\l'|0\(ul'
        !          2362: ..
        !          2363: or one to draw a box around a string
        !          2364: .P1
        !          2365: &de bx
        !          2366: \e(br\e|\e\e$1\e|\e(br\e\|l\|'|0\e(rn'\e\|l\|'|0\e(ul'
        !          2367: &&
        !          2368: .P2
        !          2369: .de bx
        !          2370: \(br\|\\$1\|\(br\l'|0\(rn'\l'|0\(ul'
        !          2371: ..
        !          2372: such that
        !          2373: .P1
        !          2374: &ul "underlined words"
        !          2375: .P2
        !          2376: and
        !          2377: .P1
        !          2378: &bx "words in a box"
        !          2379: .P2
        !          2380: yield
        !          2381: .xu "underlined words"
        !          2382: and
        !          2383: .bx "words in a box"
        !          2384: \h'-\w'.'u'.
        !          2385: .PP
        !          2386: The function \&\fC\eL'\fINc\&\fC'\fR draws a vertical line consisting
        !          2387: of the (optional) character @c@ stacked vertically apart 1\|em
        !          2388: (1 line in \*(NR),
        !          2389: with the first two characters overlapped,
        !          2390: if necessary, to form a continuous line.
        !          2391: The default character is the \fIbox rule\fR \|\(br\| (\&\fC\|\e(br\fR);
        !          2392: the other suitable character is the \fIbold vertical\fR \|\(bv\| (\&\fC\|\e(bv\fR).
        !          2393: The line is begun without any initial motion relative to the
        !          2394: current baseline.
        !          2395: A positive @N@ specifies a line drawn downward and
        !          2396: a negative @N@ specifies a line drawn upward.
        !          2397: After the line is drawn no compensating
        !          2398: motions are made;
        !          2399: the instantaneous baseline is at the end of the line.
        !          2400: .PP
        !          2401: .de eb
        !          2402: .sp -1
        !          2403: .nf
        !          2404: \h'-.5n'\L'|\\nzu-1'\l'\\n(.lu+1n\(ul'\L'-|\\nzu+1'\l'|0u-.5n\(ul'
        !          2405: .fi
        !          2406: ..
        !          2407: .ne 2i
        !          2408: .mk z
        !          2409: .nr z \nz+1
        !          2410: The horizontal and vertical line drawing functions may be used
        !          2411: in combination to produce large boxes.
        !          2412: The zero-width \fIbox-rule\fR and the \(12-em wide \fIunder-rule\fR
        !          2413: were designed to form corners when using 1-em vertical
        !          2414: spacings.
        !          2415: For example the macro
        !          2416: .nr x \n(DV
        !          2417: .nr DV 0
        !          2418: .P1 .15i
        !          2419: \&.de eb
        !          2420: \&.sp \-1      \e"compensate for next automatic baseline spacing
        !          2421: \&.nf  \e"avoid possibly overflowing word buffer
        !          2422: \&\eh'-.5n'\eL'|\e\enau\-1'\el'\e\en(.lu+1n\e(ul'\eL'-|\e\enau+1'\el'|0u-.5n\e(ul'  \e"draw box
        !          2423: \&.fi
        !          2424: \&..
        !          2425: .P2
        !          2426: .nr DV \nx 
        !          2427: will draw a box around some text whose beginning vertical place was
        !          2428: saved in number register \fIa\fR
        !          2429: (e.g., using \&\fC.mk\ a\fR)
        !          2430: as was done for this paragraph.
        !          2431: .eb
        !          2432: .sc "Graphics.
        !          2433: The function
        !          2434: .CW \eD'@c...@'
        !          2435: draws a graphic object of type @c@
        !          2436: according to a sequence of parameters,
        !          2437: which are generally pairs of numbers.
        !          2438: .IP
        !          2439: .nf
        !          2440: .ta 1.7i
        !          2441: \fC\eD'l @dh~ dv@'     \f1draw line from current position by @dh,~dv@\fC
        !          2442: \fC\eD'c @d@'  \f1draw circle of diameter @d@ with left side at current position\fC
        !          2443: \fC\eD'e @d sub 1 d sub 2@'    \f1draw ellipse of diameters @d sub 1@ and @d sub 2@\fC
        !          2444: \fC\eD'a @dh sub 1~ dv sub 1~ dh sub 2~ dv sub 2@'\fC  \f1draw arc from current position to @dh sub 1 +dh sub 2@, @dv sub 1 +dv sub 2@,\fC
        !          2445:           \f1with center at @dh sub 1 ,~ dv sub 1@ from current position\fC
        !          2446: \fC\eD'~ @dh sub 1 dv sub 1 dh sub 2 dv sub 2 "..."@'\fC       \f1draw B-spline from current position by @dh sub 1, dv sub 1@,\fC
        !          2447:           \f1then by @dh sub 2 , dv sub 2@, then by @dh sub 2 , dv sub 2@, then ...\fC
        !          2448: .LP
        !          2449: For example,
        !          2450: .CW "\eD'e0.2i 0.1i'"
        !          2451: draws the ellipse
        !          2452: \D'e.2i .1i'\|,
        !          2453: and
        !          2454: .CW "\eD'l.2i -.1i'\eD'l.1i .1i'"
        !          2455: the line
        !          2456: \D'l.2i -.1i'\D'l.1i .1i'\|.
        !          2457: A
        !          2458: .CW \\eD
        !          2459: with an unknown @c@ is processed and copied through to the output
        !          2460: for unspecified interpretation.
        !          2461: .PP
        !          2462: Numbers taken as horizontal (first, third, etc.) have default scaling of ems;
        !          2463: vertical numbers (second, fourth, etc.) have default scaling of @V^@s (\(sc1.3).
        !          2464: The position after a graphical object has been drawn is
        !          2465: at its end; for circles and ellipses, the ``end''
        !          2466: is at the right side.
        !          2467: .NH
        !          2468: Hyphenation.
        !          2469: .PP
        !          2470: Automatic hyphenation may be switched off and on.
        !          2471: When switched on with \&\fChy\fR,
        !          2472: several variants may be set.
        !          2473: A \fIhyphenation indicator\fR character may be embedded in a word to
        !          2474: specify desired hyphenation points,
        !          2475: or may be prepended to suppress hyphenation.
        !          2476: In addition,
        !          2477: the user may specify a small list of exception words.
        !          2478: .PP
        !          2479: Only words that consist of a central alphabetic string
        !          2480: surrounded by (usually null) non-alphabetic strings
        !          2481: are candidates for automatic hyphenation.
        !          2482: Words that contain hyphens
        !          2483: (minus),
        !          2484: em-dashes (\&\fC\e(em\fR),
        !          2485: or hyphenation indicator characters
        !          2486: are always subject to splitting after those characters,
        !          2487: whether automatic hyphenation is on or off.
        !          2488: .bt "\&\fC&nh\fR" "hyphenate" "-" "E" "Automatic hyphenation is turned off.
        !          2489: .bt "\&\fC&hy\fP@~N@" "on, @N=1@" "on, @N=1@" "E" "Automatic hyphenation is turned on
        !          2490: for @N>=1@, or off for @N=0@.
        !          2491: If @N=2@, last lines (ones that will cause a trap)
        !          2492: are not hyphenated.
        !          2493: For @N=4@ and 8, the last and first two characters
        !          2494: respectively of a word are not split off.
        !          2495: These values are additive;
        !          2496: i.e., @N=14@ will invoke all three restrictions.
        !          2497: .bt "\&\fC&hc\fI c\fR" "\&\fC\e%" "\e%\fR" "E" "Hyphenation indicator character is set
        !          2498: to @c@ or to the default \&\fC\e%\fR.
        !          2499: The indicator does not appear in the output.
        !          2500: .bt "\&\fC&hw\fI word ...\fR" "" "ignored" "-" "Specify
        !          2501: hyphenation points in words
        !          2502: with embedded minus signs.
        !          2503: Versions of a word with terminal \fIs\fR are implied;
        !          2504: i.e.,
        !          2505: .CW dig-it
        !          2506: implies
        !          2507: .CW dig-its .
        !          2508: This list is examined initially and after
        !          2509: each suffix stripping.
        !          2510: The space available is small\(emabout 128 characters.
        !          2511: .NH
        !          2512: Three-Part Titles.
        !          2513: .PP
        !          2514: The titling function \&\fCtl\fR provides for automatic placement
        !          2515: of three fields at the left, center, and right of a line
        !          2516: with a title length
        !          2517: specifiable with \&\fClt\fR.
        !          2518: \&\fCtl\fR may be used anywhere, and is independent of the
        !          2519: normal text collecting process.
        !          2520: A common use is in header and footer macros.
        !          2521: .h1
        !          2522: .bt "\&\fC&tl '\fIleft\fP'\fIcenter\fP'\fIright\fP'\fR" "" "-" "-" "The strings
        !          2523: \fIleft\fR, \fIcenter\fR, and \fIright\fR are
        !          2524: respectively left-adjusted, centered, and right-adjusted
        !          2525: in the current title length.
        !          2526: Any of the strings may be empty,
        !          2527: and overlapping is permitted.
        !          2528: If the page-number character (initially \&\fC%\fR) is found within any of the fields it is replaced
        !          2529: by the current page number in the format assigned to register \&\fC%\fR.
        !          2530: Any character may be used in place of
        !          2531: .CW '
        !          2532: as the string delimiter.
        !          2533: .bt "\&\fC&pc\fI c\fR" "\&\fC%\fR" "off" "-" "The page number character is set to @c@,
        !          2534: or removed.
        !          2535: The page number register remains \&\fC%\fR.
        !          2536: .bt "\&\fC&lt\fI \(+-N\fR" "6.5\|in" "previous" "E,\fBm\fR" "Length of title
        !          2537: is set to @+- N@.
        !          2538: The line length and the title length are independent.
        !          2539: Indents do not apply to titles; page offsets do.
        !          2540: .NH
        !          2541: Output Line Numbering.
        !          2542: .PP
        !          2543: .ll -\w'0000'u
        !          2544: .nm 1 3
        !          2545: Automatic sequence numbering of output lines may be
        !          2546: requested with \&\fCnm\fR.
        !          2547: When in effect,
        !          2548: a three-digit, arabic number plus a digit-space
        !          2549: is prepended to output text lines.
        !          2550: The text lines are thus offset by four digit-spaces,
        !          2551: and otherwise retain their line length;
        !          2552: a reduction in line length may be desired to keep the right margin
        !          2553: aligned with an earlier margin.
        !          2554: Blank lines, other vertical spaces, and lines generated by \&\fCtl\fR
        !          2555: are not numbered.
        !          2556: Numbering can be temporarily suspended with \&\fCnn\fR,
        !          2557: or with an \&\fC.nm\fR followed by a later \&\fC.nm +0\fR.
        !          2558: In addition,
        !          2559: a line number indent \fII\fR, and the number-text separation \fIS\fR
        !          2560: may be specified in digit-spaces.
        !          2561: Further, it can be specified that only those line numbers that are
        !          2562: multiples of some number @M@ are to be printed (the others will appear
        !          2563: as blank number fields).
        !          2564: .br
        !          2565: .nm
        !          2566: .ll
        !          2567: .bt "\&\fC&nm\fI \(+-N M S I\fR" "" "off" "E" "Line number mode.
        !          2568: If @+- N@ is given,
        !          2569: line numbering is turned on,
        !          2570: and the next output line numbered is numbered @+- N@.
        !          2571: Default values are @M=1@, @S=1@, and @I=0@.
        !          2572: Parameters corresponding to missing arguments are unaffected;
        !          2573: a non-numeric argument is considered missing.
        !          2574: In the absence of all arguments, numbering is turned off;
        !          2575: the next line number is preserved for possible further use
        !          2576: in number register \&\fCln\fR.
        !          2577: .bt "\&\fC&nn\fI N\fR" "-" "@N=1@" "E" "The next @N@ text output lines are not
        !          2578: numbered.
        !          2579: .PP
        !          2580: .ll -\w'0000'u
        !          2581: .nm +0
        !          2582: As an example, the paragraph portions of this section
        !          2583: are numbered with \fIM=\fR\|3:
        !          2584: \&\&\fC.nm\ 1\ 3\fR was placed at the beginning;
        !          2585: \&\&\fC.nm\fR was placed at the end of the first paragraph;
        !          2586: and \&\fC.nm\ +0\fR was placed in front of this paragraph;
        !          2587: and \&\fC.nm\fR finally placed at the end.
        !          2588: Line lengths were also changed (by \&\fC\ew'0000'u\fR) to keep the right side aligned.
        !          2589: Another example is
        !          2590: .CW .nm
        !          2591: .CW +5
        !          2592: .CW 5
        !          2593: .CW x
        !          2594: .CW 3 ,
        !          2595: which turns on numbering with the line number of the next
        !          2596: line to be 5 greater than the last numbered line,
        !          2597: with @M=5@, with spacing \fIS\fR untouched, and with the indent \fII\fR set to 3.
        !          2598: .br
        !          2599: .ll
        !          2600: .nm
        !          2601: .NH
        !          2602: Conditional Acceptance of Input
        !          2603: .PP
        !          2604: In the following,
        !          2605: @c@ is a one-character built-in \fIcondition\fR name,
        !          2606: \&\fC!\fR signifies \fInot\fR,
        !          2607: @N@ is a numerical expression,
        !          2608: \fIstring1\fR and \fIstring2\fR are strings delimited by any non-blank, non-numeric character not in the strings,
        !          2609: and
        !          2610: \fIanything\fR represents what is conditionally accepted.
        !          2611: .bt "\&\fC&if\fI c anything\fR" "" "-" "-" "If condition
        !          2612: @c@ true, accept \fIanything\fR as input;
        !          2613: in multi-line case use \fI\e{anything\|\e}\fR.
        !          2614: .bt "\&\fC&if !\fIc anything\fR" "-" "-" "" "If condition @c@ false, accept \fIanything\fR.
        !          2615: .bt "\&\fC&if\fI N anything\fR" "" "-" "\fBu\fR" "If expression @N@ > 0, accept \fIanything\fR.
        !          2616: .bt "\&\fC&if !\fIN anything\fR" "-" "\fBu\fR" "" "If expression @N@ \(<= 0, accept \fIanything\fR.
        !          2617: .bt "\&\fC&if '\fIstring1\fC'\fIstring2\fC'\fI anything\fR" "" "-" "" "If \fIstring1\fR identical to \fIstring2\fR,
        !          2618: accept \fIanything\fR.
        !          2619: .bt "\&\fC&if !'\fIstring1\fC'\fIstring2\fC'\fI anything\fR" "" "-" "" "If \fIstring1\fR not identical to \fIstring2\fR,
        !          2620: accept \fIanything\fR.
        !          2621: .bt "\&\fC&ie\fI c anything\fR" "" "-" "\fBu\fR" "If portion of if-else;
        !          2622: all of the forms for \&\fCif\fR above are valid.
        !          2623: .bt "\&\fC&el\fI anything\fR" "" "-" "-" "Else portion of if-else.
        !          2624: .PP
        !          2625: The built-in condition names are:
        !          2626: .TS
        !          2627: center box;
        !          2628: c2|c2
        !          2629: c2|c2
        !          2630: c2|l2.
        !          2631: Condition
        !          2632: Name   True If
        !          2633: _
        !          2634: \&\fCo\fR      Current page number is odd
        !          2635: \&\fCe\fR      Current page number is even
        !          2636: \&\fCt\fR      Formatter is \*(TR
        !          2637: \&\fCn\fR      Formatter is \*(NR
        !          2638: .TE
        !          2639: If the condition @c@ is true, or if the number @N@ is greater than zero,
        !          2640: or if the strings compare identically (including motions and character size and font),
        !          2641: \fIanything\fR is accepted as input.
        !          2642: If a \&\fC!\fR precedes the condition, number, or string comparison,
        !          2643: the sense of the acceptance is reversed.
        !          2644: .PP
        !          2645: Any spaces between the condition and the beginning of \fIanything\fR are skipped over.
        !          2646: The \fIanything\fR can be either a single input line (text, macro, or whatever)
        !          2647: or a number of input lines.
        !          2648: In the multi-line case,
        !          2649: the first line must begin with a left delimiter \&\fC\e{\fR and
        !          2650: the last line must end with a right delimiter \&\fC\e}\fR.
        !          2651: .PP
        !          2652: The request \&\fCie\fR (if-else) is identical to \&\fCif\fR
        !          2653: except that the acceptance state is remembered.
        !          2654: A subsequent and matching \&\fCel\fR (else) request then uses the reverse sense of that state.
        !          2655: \&\fCie\fR-\&\fCel\fR pairs may be nested.
        !          2656: .PP
        !          2657: Some examples are:
        !          2658: .P1
        !          2659: &if e .tl '\|Even Page %'''
        !          2660: .P2
        !          2661: which outputs a title if the page number is even; and
        !          2662: .P1
        !          2663: &ie \en%>1 \e{\e
        !          2664: \&'    sp 0.5i
        !          2665: &      tl 'Page %'''
        !          2666: \&'    sp |1.2i \e}
        !          2667: &el .sp |2.5i
        !          2668: .P2
        !          2669: which treats page 1 differently from other pages.
        !          2670: .NH
        !          2671: Environment Switching.
        !          2672: .PP
        !          2673: A number of the parameters that
        !          2674: control the text processing are gathered together into an
        !          2675: \fIenvironment\fR, which can be switched by the user.
        !          2676: The environment parameters are those associated
        !          2677: with requests noting E in their \fINotes\fR column;
        !          2678: in addition, partially collected lines and words are in the environment.
        !          2679: Everything else is global; examples are page-oriented parameters,
        !          2680: diversion-oriented parameters, number registers, and macro and string definitions.
        !          2681: All environments are initialized with default parameter values.
        !          2682: .bt "\&\fC&ev\fI N\fR" "@N=0@" "previous" "-" "Environment switched to
        !          2683: environment @0<=N<=2@.
        !          2684: Switching is done in push-down fashion so that
        !          2685: restoring a previous environment \fImust\fR be done with \&\fC.ev\fR
        !          2686: rather than specific reference.
        !          2687: Note that what is pushed down and restored is the environment
        !          2688: .I number,
        !          2689: not its contents.
        !          2690: .NH
        !          2691: Insertions from the Standard Input
        !          2692: .PP
        !          2693: The input can be temporarily switched to the system standard input
        !          2694: with \&\fCrd\fR,
        !          2695: which will switch back when two consecutive newlines
        !          2696: are found (the extra blank line is not used).
        !          2697: This mechanism is intended for insertions in form-letter-like documentation.
        !          2698: On \s-1UNIX\s+1, the standard input can be the user's keyboard,
        !          2699: a pipe, or a file.
        !          2700: .bt "\&\fC&rd\fI prompt\fR" "-" "\fIprompt=\fR\s-1BEL\s+1" "-" "Read insertion
        !          2701: from the standard input until two newlines in a row are found.
        !          2702: If the standard input is the user's keyboard, \fIprompt\fR (or a \s-1BEL\s+1)
        !          2703: is written onto the standard output.
        !          2704: \&\fCrd\fR behaves like a macro,
        !          2705: and arguments may be placed after \fIprompt\fR.
        !          2706: .bt "\&\fC&ex\fR" "-" "-" "-" "Exit from \*(NR/\*(TR.
        !          2707: Text processing is terminated exactly as if all input had ended.
        !          2708: .PP
        !          2709: If insertions are to be
        !          2710: taken from the terminal keyboard while output is being printed
        !          2711: on the terminal, the command line option \&\fC\-q\fR will turn off the echoing
        !          2712: of keyboard input and prompt only with \s-1BEL\s+1.
        !          2713: The regular input and insertion input cannot
        !          2714: simultaneously come from the standard input.
        !          2715: .PP
        !          2716: As an example,
        !          2717: multiple copies of a form letter may be prepared by entering the insertions
        !          2718: for all the copies in one file to be used as the standard input,
        !          2719: and causing the file containing the letter to reinvoke itself with \&\fCnx\fR (\(sc19);
        !          2720: the process would ultimately be ended by an \&\fCex\fR in the insertion file.
        !          2721: .NH
        !          2722: Input/Output File Switching
        !          2723: .bt "\&\fC&so\fI filename\fR" "" "-" "-" "Switch source file.
        !          2724: The top input (file reading) level is switched to \fIfilename\fR.
        !          2725: When the new file ends,
        !          2726: input is again taken from the original file.
        !          2727: \&\fCso\fR's may be nested.
        !          2728: .bt "\&\fC&nx\fI filename\fR" "" "end-of-file" "-" "Next file is \fIfilename\fR.
        !          2729: The current file is considered ended, and the input is immediately switched
        !          2730: to \fIfilename\fR.
        !          2731: .bt "\&\fC&sy\fI string\fR" "" "-" "-" "Execute program from \fIstring\fR,
        !          2732: which is the rest of the input line.
        !          2733: The output is not collected automatically.
        !          2734: The number register
        !          2735: .CW $$ ,
        !          2736: which contains the process id of the \*(TR process,
        !          2737: may be useful in generating unique filenames for output.
        !          2738: .bt "\&\fC&pi\fI string\fR" "" "-" "-" "Pipe output to \fIstring\fR,
        !          2739: which is the rest of the input line.
        !          2740: This request must occur before any printing occurs.
        !          2741: .bt "\&\fC&cf\fI filename\fR" "" "-" "-" "Copy
        !          2742: contents of file
        !          2743: .I filename
        !          2744: to output, completely unprocessed.
        !          2745: The file is assumed to contain something meaningful
        !          2746: to subsequent processes.
        !          2747: .NH
        !          2748: Miscellaneous
        !          2749: .br
        !          2750: .mc \s12\(br\s0
        !          2751: .bt "\&\fC.mc\fI c N\fR" - off E,\fBm\fR "Specifies
        !          2752: that a \fImargin\fR character @c@ appear a distance
        !          2753: @N@ to the right of the right margin
        !          2754: after each non-empty text line (except those produced by \&\fCtl\fR).
        !          2755: If the output line is too long (as can happen in nofill mode)
        !          2756: the character will be appended to the line.
        !          2757: If @N@ is not given, the previous @N@ is used; the initial @N@ is
        !          2758: 0.2 inches in \*(NR and 1 em in \*(TR.
        !          2759: The margin character used with this paragraph was a 12-point box-rule.
        !          2760: .br
        !          2761: .mc
        !          2762: .bt "\&\fC.tm\fI string\fR" "-" "newline" "-" "After skipping initial blanks,
        !          2763: \fIstring\fR (rest of the line) is read in copy mode
        !          2764: and written on the standard error.
        !          2765: .bt "\&\fC&ab\fI string\fR" "-" "newline" "-" "After skipping initial blanks,
        !          2766: \fIstring\fR (rest of the line) is read in copy mode
        !          2767: and written on the standard error.
        !          2768: \*(Tr or \*(NR then exit.
        !          2769: .bt "\&\fC.ig\fI yy\fR" "-" "\fI.yy=\&\fC..\fR" "-" "Ignore
        !          2770: input lines.
        !          2771: \&\fCig\fR behaves exactly like \&\fCde\fR (\(sc7) except that the
        !          2772: input is discarded.
        !          2773: The input is read in copy mode, and any auto-incremented
        !          2774: registers will be affected.
        !          2775: .bt "\&\fC.lf\fI N filename\fR" "" "-" "-" "Set
        !          2776: line number to @N@ and filename to @filename@
        !          2777: for purposes of subsequent error messages, etc.
        !          2778: The number register [sic]
        !          2779: .CW .F
        !          2780: contains the name of the current input file,
        !          2781: as set by command line argument,
        !          2782: .CW so ,
        !          2783: .CW nx ,
        !          2784: or
        !          2785: .CW lf .
        !          2786: The number register
        !          2787: .CW .c
        !          2788: contains the number of input lines read from the current file,
        !          2789: again perhaps as modified by
        !          2790: .CW lf .
        !          2791: .CW 
        !          2792: .bt "\&\fC.pm\fI t\fR" "-" "all" "-" "Print macros.
        !          2793: The names and sizes of all of the defined macros and strings are printed
        !          2794: on the standard error;
        !          2795: if \fIt\fR is given, only the total of the sizes is printed.
        !          2796: The sizes is given in blocks
        !          2797: of 128 characters.
        !          2798: .bt "\&\fC.fl\fR" - - B "Flush output buffer.
        !          2799: Force output, including any pending position information.
        !          2800: ......
        !          2801: .NH
        !          2802: Output and Error Messages.
        !          2803: .PP
        !          2804: The output from \&\fCtm\fR, \&\fCpm\fR, and the prompt from \&\fCrd\fR,
        !          2805: as well as various error messages are written onto
        !          2806: the standard error.
        !          2807: The latter is different from the standard output,
        !          2808: where formatted text goes.
        !          2809: By default, both are written onto the user's terminal,
        !          2810: but they can be independently redirected.
        !          2811: .PP
        !          2812: Various error conditions may occur during
        !          2813: the operation of \*(NR and \*(TR.
        !          2814: Certain less serious errors having only local impact do not
        !          2815: cause processing to terminate.
        !          2816: Two examples are \fIword overflow\fR, caused by a word that is too large
        !          2817: to fit into the word buffer (in fill mode), and
        !          2818: \fIline overflow\fR, caused by an output line that grew too large
        !          2819: to fit in the line buffer.
        !          2820: In both cases, a message is printed, the offending excess
        !          2821: is discarded,
        !          2822: and the affected word or line is marked at the point of truncation
        !          2823: with a \(** in \*(NR and a \(lh in \*(TR.
        !          2824: Processing continues if possible,
        !          2825: on the grounds that output useful for debugging may be produced.
        !          2826: If a serious error occurs, processing terminates,
        !          2827: and a message is printed, along with a list of the macro names currently active.
        !          2828: Examples of serious errors include the inability to create, read, or write files,
        !          2829: and the exceeding of certain internal limits that
        !          2830: make future output unlikely to be useful.
        !          2831: .NH
        !          2832: Output Language
        !          2833: .PP
        !          2834: \*(Tr
        !          2835: produces its output in a language that is independent of any
        !          2836: specific output device,
        !          2837: except that the numbers in it have been computed on the basis
        !          2838: of the resolution of the device,
        !          2839: and the sizes, fonts, and characters that that device can print.
        !          2840: Nevertheless it is quite possible to interpret that output
        !          2841: on a different device, within the latter's capabilities.
        !          2842: .IP
        !          2843: .nf
        !          2844: .ta .7i
        !          2845: @cw s n@       set point size to @n@
        !          2846: @cw f n@       set font to @n@
        !          2847: @cw c c@       print \s-1ASCII\s0 character @c@
        !          2848: @cw C xx@      print character @xx@;  terminate @xx@ by white space
        !          2849: @cw N n@       print character @n@ on current font
        !          2850: @cw H n@       go to absolute horizontal position \f2n\fP (@n>=0@)
        !          2851: @cw V n@       go to absolute vertical position \f2n\fP (@n>=0@, down is positive)
        !          2852: @cw h n@       go \f2n\fP units horizontally; @n < 0@ is to the left
        !          2853: @cw v n@       go \f2n\fP units vertically; @n < 0@ is up
        !          2854: @nnc@  move right \f2nn\fP, then print \s-1ASCII\s0 character \f2c\fP;  \f2nn\fP must be exactly 2 digits
        !          2855: @cw p n@       new page \f2n\fP begins\(emset vertical position to 0
        !          2856: @cw n b~a@     end of line (information only\(emno action);  \f2b\fP = space before line, \f2a\fP = after
        !          2857: @cw w@ paddable word space (information only\(emno action)
        !          2858: @cw D c@ ...\en        graphics function @c@; see below
        !          2859: @cw x@ ...\en  device control functions; see below
        !          2860: @cw "#"@ ...\en        comment
        !          2861: .LP
        !          2862: All position values are in units.
        !          2863: Sequences that end in digits must be followed by a non-digit.
        !          2864: Blanks, tabs and newlines may occur as separators
        !          2865: in the input, and are mandatory to separate constructions
        !          2866: that would otherwise be confused.
        !          2867: Graphics functions, device control functions, and comments extend to the
        !          2868: end of the line they occur on.
        !          2869: .PP
        !          2870: The device control and graphics commands are intended as open-ended
        !          2871: families, to be expanded as needed.
        !          2872: The graphics functions coincide directly with the
        !          2873: .CW \eD 
        !          2874: sequences:
        !          2875: .IP
        !          2876: .nf
        !          2877: .ta 1.7i
        !          2878: @cw Dl@ \f2dh dv\fP    draw line from current position by @dh,~ dv@
        !          2879: @cw Dc@ \f2d\fP        draw circle of diameter \f2d\fP with left side here
        !          2880: @cw De@ @dh sub 1~dv sub 2@    draw ellipse of diameters @dh sub 1@ and @ dv sub 2@\fP
        !          2881: @cw Da ~dh sub 1~ dv sub 1 ~ dh sub 2 ~dv sub 2@       draw arc from current position to @dh sub 1 +dh sub 2 ,~ dv sub 1 +dv sub 2@,
        !          2882:                   center at @dh sub 1 ,~ dv sub 1@ from current position
        !          2883: @cw "D~" ~dh sub 1 ~dv sub 1 ~dh sub 2 ~dv sub 2@ ...  draw B-spline from current position to @dh sub 1 ,~ dv sub 1@,
        !          2884:                   then to @dh sub 2 , ~dv sub 2@, then to ...
        !          2885: @cw "D"z ~dh sub 1 ~dv sub 1 ~dh sub 2 ~dv sub 2@ ...  for any other @z@ is uninterpreted
        !          2886: .LP
        !          2887: In all of these, @dh, ~dv@ is an increment on the current horizontal and
        !          2888: vertical position,
        !          2889: with down and right positive.
        !          2890: All distances and dimensions are in units.
        !          2891: .PP
        !          2892: The device control functions begin with
        !          2893: .CW x ,
        !          2894: then a command, then other parameters.
        !          2895: .IP
        !          2896: .ta .8i
        !          2897: .nf
        !          2898: .ft CW
        !          2899: x T \f2s\fP    \f1name of typesetter is @s@\fC
        !          2900: x r \f2n h v\fP        \f1resolution is @n@ units/inch;\fC  \f1@h@ = minimum horizontal motion, @v@ = minimum vertical\fC
        !          2901: x i    \f1initialize\fP
        !          2902: x f \f2n s\fP  \f1mount font @s@ on font position @n@\fC
        !          2903: x p    \f1pause\(emcan restart\fC
        !          2904: x s    \f1stop\(emdone forever\fC
        !          2905: x t    \f1generate trailer information, if any\fC
        !          2906: x H \f2n\fP    \f1set character height to @n@\fC
        !          2907: x S \f2n\fP    \f1set slant to @n@\fC
        !          2908: x X \f2any\fP  \f1generated by the \&\fC\eX\fP function\fC
        !          2909: x \f2any\fP    \f1to be ignored if not recognized\fC
        !          2910: .LP
        !          2911: Subcommands like
        !          2912: .CW i '' ``
        !          2913: may be spelled out like
        !          2914: .CW init ''. ``
        !          2915: .PP
        !          2916: The commands
        !          2917: .CW "x T" ,
        !          2918: .CW "x r " ...,
        !          2919: and
        !          2920: .CW "x i"
        !          2921: must occur first;
        !          2922: fonts must be mounted before they can be used;
        !          2923: .CW "x s
        !          2924: comes last.
        !          2925: There are no other order requirements.
        !          2926: .PP
        !          2927: The following is the output from
        !          2928: .CW hello, "" ``
        !          2929: .CW world ''
        !          2930: for a typical Postscript printer,
        !          2931: as described in \(sc23:
        !          2932: .P1
        !          2933: x T post
        !          2934: x res 720 1 1
        !          2935: x init
        !          2936: V0
        !          2937: p1
        !          2938: .P2
        !          2939: .P1
        !          2940: x font 1 R
        !          2941: x font 2 I
        !          2942: x font 3 B
        !          2943: x font 4 BI
        !          2944: x font 5 CW
        !          2945: x font 6 H
        !          2946: x font 7 HB
        !          2947: x font 8 HX
        !          2948: x font 9 S1
        !          2949: x font 10 S
        !          2950: .P2
        !          2951: .P1
        !          2952: s10
        !          2953: f1
        !          2954: H0
        !          2955: s10
        !          2956: f1
        !          2957: V0
        !          2958: H720
        !          2959: V120
        !          2960: ch
        !          2961: 50e44l28l28o50,w58w72o50r33l28dn120 0
        !          2962: x trailer
        !          2963: V7920
        !          2964: x stop
        !          2965: .P2
        !          2966: .PP
        !          2967: \*(Tr output is normally not redundant;
        !          2968: size and font changes and position information are not included
        !          2969: unless needed.
        !          2970: Nevertheless, each page is self-contained, for the benefit of postprocessors
        !          2971: that re-order pages or process only a subset.
        !          2972: .NH
        !          2973: Device and Font Description Files
        !          2974: .PP
        !          2975: The parameters that describe a output device
        !          2976: .I name
        !          2977: are read
        !          2978: from the directory
        !          2979: .CW /usr/lib/font/dev@name@ ,
        !          2980: each time
        !          2981: \*(TR
        !          2982: is invoked.
        !          2983: The device name is provided by default,
        !          2984: by the environment variable
        !          2985: .CW TYPESETTER ,
        !          2986: or by a command-line argument
        !          2987: .CW -T@name@ .
        !          2988: The default device name is
        !          2989: .CW post ,
        !          2990: for Postscript.
        !          2991: The pre-defined string
        !          2992: .CW .T
        !          2993: contains the name of the device.
        !          2994: The
        !          2995: .CW -F
        !          2996: command-line option may be used to change the default directory.
        !          2997: .......
        !          2998: .sc "Device description file.
        !          2999: The file 
        !          3000: .CW DESC
        !          3001: in
        !          3002: .CW /usr/lib/font/dev@name@
        !          3003: contains general parameters of the device, one per line,
        !          3004: as a sequence of names and values.
        !          3005: \*(Tr recognizes these parameters, and ignores any
        !          3006: others that may be present for specific drivers:
        !          3007: .IP
        !          3008: .nf
        !          3009: .ta 1i
        !          3010: @cw fonts ~ n ~ F sub 1  ~F sub 2  ~. . .~ F sub n@
        !          3011: @cw sizes ~ s sub 1 ~ s sub 2 ~ . . . cw 0@
        !          3012: @cw res ~n@
        !          3013: @cw hor ~n@
        !          3014: @cw vert ~n@
        !          3015: @cw unitwidth ~n@
        !          3016: @cw charset@
        !          3017: \f2list of multi-character character names (optional)\fP
        !          3018: .LP
        !          3019: The @F sub i@ are font names
        !          3020: to be initially mounted.
        !          3021: The list of sizes is a set of integers representing
        !          3022: some or all of the legal sizes the device can produce,
        !          3023: terminated by a zero.
        !          3024: The 
        !          3025: .CW res
        !          3026: parameter gives the resolution of the machine in units per inch;
        !          3027: .CW hor
        !          3028: and
        !          3029: .CW ver
        !          3030: give the minimum number of units that can be moved
        !          3031: horizontally and vertically.
        !          3032: .PP
        !          3033: Character widths for each font are assumed to be given in machine units
        !          3034: at point size
        !          3035: .CW unitwidth .
        !          3036: (In other words, a character with a width of
        !          3037: @n@ is @n@ units wide at size
        !          3038: .CW unitwidth .)
        !          3039: .PP
        !          3040: A list of valid character names may be introduced by
        !          3041: .CW charset ;
        !          3042: the list of names is optional.
        !          3043: .PP
        !          3044: A line whose first non-blank character is
        !          3045: .CW #
        !          3046: is a comment.
        !          3047: Except that
        !          3048: .CW charset
        !          3049: must occur last, parameters may appear in any order.
        !          3050: .PP
        !          3051: Here is a subset of the
        !          3052: .CW DESC
        !          3053: file for a typical Postscript printer:
        !          3054: .P1
        !          3055: # Description file for Postscript printers.
        !          3056: 
        !          3057: fonts 10 R I B BI CW H HB HX S1 S
        !          3058: sizes 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
        !          3059:    24 25 26 27 28 29 30 31 32 33 34 35 36 38 40 44 48 54 60 72 0
        !          3060: res 720
        !          3061: hor 1
        !          3062: vert 1
        !          3063: unitwidth 10
        !          3064: charset
        !          3065: hy ct fi fl ff Fi Fl dg em 14 34 12 en aa
        !          3066: ga ru sc dd -> br Sl ps cs cy as os =. ld
        !          3067: rd le ge pp -+ ob vr
        !          3068: sq bx ci fa te ** pl mi eq ~= *A *B *X *D
        !          3069: *E *F *G *Y *I *K *L *M *N *O *P *R *H *S *T *U *W
        !          3070: *C *Q *Z ul rn *a *b *x *d *e *f *g *y *i *k
        !          3071: *l *m *n *o *p *h *r *s *t *u *w *c *q *z
        !          3072: .P2
        !          3073: .sc "Font description files.
        !          3074: Each font is described by an analogous description file,
        !          3075: which begins with parameters of the font, one per line, followed by a
        !          3076: list of characters and widths.
        !          3077: The file for font
        !          3078: .I f
        !          3079: is
        !          3080: .CW /usr/lib/font/dev@name@/@f@ .
        !          3081: .IP
        !          3082: .ta 1.7i
        !          3083: .nf
        !          3084: @cw name ~str@ name of font is @str@
        !          3085: @cw ligatures ~ ". . ." ~ cw "0"@      list of ligatures
        !          3086: @cw spacewidth ~n@     width of a space on this font
        !          3087: @cw special@   this is a special font
        !          3088: @cw charset@
        !          3089: \f2list of character name, width, ascender/descender, code\fP
        !          3090: .LP
        !          3091: The
        !          3092: .CW name
        !          3093: and
        !          3094: .CW charset
        !          3095: fields are mandatory;
        !          3096: .CW charset
        !          3097: must be last.
        !          3098: Comments are permitted,
        !          3099: as are other unrecognized parameters.
        !          3100: .PP
        !          3101: Each line following
        !          3102: .CW charset 
        !          3103: describes one character: its name, its width in units as described above,
        !          3104: ascender/descender information, and a decimal, octal or hexadecimal value
        !          3105: by which the output device knows it
        !          3106: (the
        !          3107: .CW \eN
        !          3108: ``number'' of the character).
        !          3109: The character name is arbitrary, except that
        !          3110: .CW ---
        !          3111: signifies an unnamed character.
        !          3112: If the width field contains
        !          3113: .CW \&" ,
        !          3114: the name is a synonym for the previous character.
        !          3115: The ascender/descender field is 1 if
        !          3116: the character has a descender (hangs below the baseline, like
        !          3117: .CW y ),
        !          3118: is 2 if it has an ascender (is tall, like
        !          3119: .CW Y ),
        !          3120: is 3 if both,
        !          3121: and is 0 if neither.
        !          3122: The value is returned
        !          3123: in the 
        !          3124: .CW ct
        !          3125: register, as computed by the
        !          3126: .CW \ew
        !          3127: function (\(sc11.2).
        !          3128: .PP
        !          3129: Here are excerpts from a typical font description file
        !          3130: for the same Postscript printer.
        !          3131: .P1
        !          3132: hy     33      0       45      hyphen \e(hy
        !          3133: -      "                       - is a synonym for \e(hy
        !          3134: .sp .3
        !          3135: Q      72      3       81
        !          3136: .sp .3
        !          3137: a      44      0       97
        !          3138: b      50      2       98
        !          3139: c      44      0       99
        !          3140: d      50      2       100
        !          3141: y      50      1       121
        !          3142: .sp .3
        !          3143: em     100     0       208
        !          3144: ---    44      2       220     English pound currency symbol \eN'220'
        !          3145: ---    36      0       221     centered dot \eN'221'
        !          3146: .P2
        !          3147: This says, for example, that the width of the letter
        !          3148: .CW a
        !          3149: is 44 units at point size 10,
        !          3150: the value of 
        !          3151: .CW unitwidth .
        !          3152: Point sizes are scaled linearly and rounded, so the width of
        !          3153: .CW a
        !          3154: will be 44 at size 10, 40 at size 9, 35 at size 8,
        !          3155: and so on.
        !          3156: .sp 100
        !          3157: .BP
        !          3158: .fp 8 C CW
        !          3159: .tr &.
        !          3160: .tr |
        !          3161: .tr ~|
        !          3162: .TL
        !          3163: Tutorial Examples
        !          3164: .SP
        !          3165: .2C
        !          3166: .sp .25i
        !          3167: .SH
        !          3168: Introduction
        !          3169: .PP
        !          3170: It is almost always necessary to
        !          3171: prepare at least a small set of macro definitions
        !          3172: to describe a document.
        !          3173: Such common formatting needs
        !          3174: as page margins and footnotes
        !          3175: are deliberately not built into \*(NR and \*(TR.
        !          3176: Instead,
        !          3177: the macro and string definition, number register, diversion,
        !          3178: environment switching, page-position trap, and conditional input mechanisms
        !          3179: provide the basis for user-defined implementations.
        !          3180: .PP
        !          3181: For most uses, a standard package like
        !          3182: .CW -ms
        !          3183: or
        !          3184: .CW -mm
        !          3185: is the right choice.
        !          3186: The next stage is to augment that,
        !          3187: or to selectively replace macros from the standard package.
        !          3188: The last stage, much harder,
        !          3189: is to write one's own from scratch.
        !          3190: .PP
        !          3191: The examples discussed here are intended to be useful and somewhat realistic,
        !          3192: but will not necessarily cover all relevant contingencies.
        !          3193: Explicit numerical parameters are used
        !          3194: in the examples
        !          3195: to make them easier to read and to
        !          3196: illustrate typical values.
        !          3197: In many cases, number registers would really be used
        !          3198: to reduce the number of places where numerical
        !          3199: information is kept,
        !          3200: and to concentrate conditional parameter initialization
        !          3201: like that which depends on whether \*(TR or \*(NR is being used.
        !          3202: .SH
        !          3203: Page Margins
        !          3204: .PP
        !          3205: As discussed in \(sc3,
        !          3206: header and footer macros are usually defined
        !          3207: to describe the top and bottom page margin areas respectively.
        !          3208: A trap is planted at page position 0 for the header, and at
        !          3209: \fI\-N\fR (\fIN\fR from the page bottom) for the footer.
        !          3210: The simplest such definitions might be
        !          3211: .P1 .1i
        !          3212: &de hd \e"define header
        !          3213: \&'sp 1i
        !          3214: &&     \e"end definition
        !          3215: &de fo \e"define footer
        !          3216: \&'bp
        !          3217: &&     \e"end definition
        !          3218: &wh 0 hd
        !          3219: &wh -1i fo
        !          3220: .P2
        !          3221: which provide blank 1 inch top and bottom margins.
        !          3222: The header will occur on the \fIfirst\fR page,
        !          3223: only if the definition and trap exist prior to
        !          3224: the initial pseudo-page transition (\(sc3).
        !          3225: In fill mode, the output line that springs the footer trap
        !          3226: was typically forced out because some part or whole word didn't fit on it.
        !          3227: If anything in the footer and header that follows causes a break,
        !          3228: that word or part word will be forced out.
        !          3229: In this and other examples,
        !          3230: requests like \&\fCbp\fR and \&\fCsp\fR that normally cause breaks are invoked using
        !          3231: the no-break control character \&\fC'\fR
        !          3232: to avoid this.
        !          3233: When the header/footer design contains material
        !          3234: requiring independent text processing, the
        !          3235: environment may be switched, avoiding
        !          3236: most interaction with the running text.
        !          3237: .PP
        !          3238: A more realistic example would be
        !          3239: .P1 .1i
        !          3240: &de hd \e"header
        !          3241: &if \e\en%>1 \e{\e
        !          3242: \&'sp ~0.5i-1  \e"tl base at 0.5i
        !          3243: &tl ''- % -''  \e"centered page number
        !          3244: &ps    \e"restore size
        !          3245: &ft    \e"restore font
        !          3246: &vs  \e}       \e"restore vs
        !          3247: \&'sp ~1.0i    \e"space to 1.0i
        !          3248: &ns    \e"turn on no-space mode
        !          3249: &&
        !          3250: &de fo \e"footer
        !          3251: &ps 10 \e"set footer/header size
        !          3252: &ft R  \e"set font
        !          3253: &vs 12p        \e"set baseline spacing
        !          3254: &if \e\en%=1 \e{\e
        !          3255: \&'sp ~\e\en(.pu-0.5i-1  \e"tl base 0.5i up
        !          3256: &tl ''- % -'' \e}  \e"first page number
        !          3257: \&'bp
        !          3258: &&
        !          3259: &wh 0 hd
        !          3260: &wh -1i fo
        !          3261: .P2
        !          3262: which sets the size, font, and baseline spacing for the
        !          3263: header/footer material, and ultimately restores them.
        !          3264: The material in this case is a page number at the bottom of the
        !          3265: first page and at the top of the remaining pages.
        !          3266: The \&\fCsp\fR's refer to absolute positions to avoid
        !          3267: dependence on the baseline spacing.
        !          3268: Another reason for doing this in the footer
        !          3269: is that the footer is invoked by printing a line whose
        !          3270: vertical spacing swept past the trap position by possibly
        !          3271: as much as the baseline spacing.
        !          3272: No-space mode is turned on at the end of \&\fChd\fR
        !          3273: to render ineffective
        !          3274: accidental occurrences of \&\fCsp\fR at the top of the running text.
        !          3275: .PP
        !          3276: The above method of restoring size, font, etc., presupposes
        !          3277: that such requests (that set \fIprevious\fR value) are \fInot\fR
        !          3278: used in the running text.
        !          3279: A better scheme is save and restore both the current \fIand\fR
        !          3280: previous values as shown for size in the following:
        !          3281: .P1 .1i
        !          3282: &de fo
        !          3283: &nr s1 \e\en(.s        \e"current size
        !          3284: &ps
        !          3285: &nr s2 \e\en(.s        \e"previous size
        !          3286: &  --- \e"rest of footer
        !          3287: &&
        !          3288: &de hd
        !          3289: &  --- \e"header stuff
        !          3290: &ps \e\en(s2  \e"restore previous size
        !          3291: &ps \e\en(s1  \e"restore current size
        !          3292: &&
        !          3293: .P2
        !          3294: Page numbers may be printed in the bottom margin
        !          3295: by a separate macro triggered during the footer's
        !          3296: page ejection:
        !          3297: .P1 .1i
        !          3298: &de bn \e"bottom number
        !          3299: &tl ''- % -''  \e"centered page number
        !          3300: &&
        !          3301: &wh -0.5i-1v bn         \e"tl base 0.5i up
        !          3302: .P2
        !          3303: .SH
        !          3304: Paragraphs and Headings
        !          3305: .PP
        !          3306: The housekeeping
        !          3307: associated with starting a new paragraph should be collected
        !          3308: in a paragraph macro
        !          3309: that, for example,
        !          3310: does the desired preparagraph spacing,
        !          3311: forces the correct font, size, baseline spacing, and indent,
        !          3312: checks that enough space remains for \fImore than one\fR line,
        !          3313: and
        !          3314: requests a temporary indent.
        !          3315: .P1 .1i
        !          3316: &de pg    \e"paragraph
        !          3317: &br       \e"break
        !          3318: &ft R     \e"force font,
        !          3319: &ps 10    \e"size,
        !          3320: &vs 12p   \e"spacing,
        !          3321: &in 0     \e"and indent
        !          3322: &sp 0.4   \e"prespace
        !          3323: &ne 1+\e\en(.Vu  \e"want more than 1 line
        !          3324: &ti 0.2i         \e"temp indent
        !          3325: &&
        !          3326: .P2
        !          3327: The first break in \&\fCpg\fR
        !          3328: will force out any previous partial lines,
        !          3329: and must occur before the \&\fCvs\fR.
        !          3330: The forcing of font, etc. is
        !          3331: partly a defense against prior error and
        !          3332: partly to permit
        !          3333: things like section heading macros to
        !          3334: set parameters only once.
        !          3335: The prespacing parameter is suitable for \*(TR;
        !          3336: a larger space, at least as big as the output device vertical resolution, would be
        !          3337: more suitable in \*(NR.
        !          3338: The choice of remaining space to test for in the \&\fCne\fR
        !          3339: is the smallest amount greater than one line
        !          3340: (the \&\fC.V\fR is the available vertical resolution).
        !          3341: .PP
        !          3342: A macro to automatically number section headings
        !          3343: might look like:
        !          3344: .P1 .1i
        !          3345: &de sc \e"section
        !          3346: &  --- \e"force font, etc.
        !          3347: &sp 0.4        \e"prespace
        !          3348: &ne 2.4+\e\en(.Vu \e"want 2.4+ lines
        !          3349: .lg 0
        !          3350: &fi
        !          3351: .lg
        !          3352: \e\en+S.
        !          3353: &&
        !          3354: &nr S 0 1      \e"init S
        !          3355: .P2
        !          3356: The usage is \&\fC.sc\fR,
        !          3357: followed by the section heading text,
        !          3358: followed by \&\fC.pg\fR.
        !          3359: The \&\fCne\fR test value includes one line of heading,
        !          3360: 0.4 line in the following \&\fCpg\fR, and
        !          3361: one line of the paragraph text.
        !          3362: A word consisting of the next section number and a period is
        !          3363: produced to begin the heading line.
        !          3364: The format of the number may be set by \&\fCaf\fR (\(sc8).
        !          3365: .PP
        !          3366: Another common form is the labeled, indented paragraph,
        !          3367: where the label protrudes left into the indent space.
        !          3368: .P1 .1i
        !          3369: &de lp \e"labeled paragraph
        !          3370: &pg
        !          3371: &in 0.5i       \e"paragraph indent
        !          3372: &ta 0.2i 0.5i  \e"label, paragraph
        !          3373: &ti 0
        !          3374: \et\e\e$1\et\ec        \e"flow into paragraph
        !          3375: &&
        !          3376: .P2
        !          3377: The intended usage is ``\&\fC.lp\fR \fIlabel\fR\|'';
        !          3378: \fIlabel\fR will begin at 0.2 inch, and
        !          3379: cannot exceed a length of 0.3 inch without intruding into
        !          3380: the paragraph.
        !          3381: The label could be right adjusted against 0.4 inch by
        !          3382: setting the tabs instead with \&\fC.ta|0.4iR|0.5i\fR.
        !          3383: The last line of \&\fClp\fR ends with \&\fC\ec\fR so that
        !          3384: it will become a part of the first line of the text
        !          3385: that follows.
        !          3386: .SH
        !          3387: Multiple Column Output
        !          3388: .PP
        !          3389: The production of multiple column pages requires
        !          3390: the footer macro to decide whether it was
        !          3391: invoked by other than the last column,
        !          3392: so that it will begin a new column rather than
        !          3393: produce the bottom margin.
        !          3394: The header can initialize a column register that
        !          3395: the footer will increment and test.
        !          3396: The following is arranged for two columns, but
        !          3397: is easily modified for more.
        !          3398: .P1 .1i
        !          3399: &de hd \e"header
        !          3400: &  ---
        !          3401: &nr cl 0 1     \e"init column count
        !          3402: &mk    \e"mark top of text
        !          3403: &&
        !          3404: .P2
        !          3405: .P1 .1i
        !          3406: &de fo \e"footer
        !          3407: &ie \e\en+(cl<2 \e{\e
        !          3408: &po +3.4i      \e"next column; 3.1+0.3
        !          3409: &rt    \e"back to mark
        !          3410: &ns \e}        \e"no-space mode
        !          3411: &el \e{\e
        !          3412: &po \e\enMu    \e"restore left margin
        !          3413: &  ---
        !          3414: \&'bp \e}
        !          3415: &&
        !          3416: &ll 3.1i       \e"column width
        !          3417: &nr M \e\en(.o \e"save left margin
        !          3418: .P2
        !          3419: Typically a portion of the top of the first page
        !          3420: contains full width text;
        !          3421: the request for the narrower line length,
        !          3422: as well as another \&\fC.mk\fR would
        !          3423: be made where the two column output was to begin.
        !          3424: .SH
        !          3425: Footnotes
        !          3426: .PP
        !          3427: The footnote mechanism to be described is used by
        !          3428: embedding the footnotes in the input text at the
        !          3429: point of reference,
        !          3430: demarcated by an initial \&\fC.fn\fR and a terminal \&\fC.ef\fR:
        !          3431: .P1 .1i
        !          3432: &fn
        !          3433: \fIFootnote text and control lines...\fP
        !          3434: &ef
        !          3435: .P2
        !          3436: In the following,
        !          3437: footnotes are processed in a separate environment and diverted
        !          3438: for later printing in the space immediately prior to the bottom
        !          3439: margin.
        !          3440: There is provision for the case where the last collected
        !          3441: footnote doesn't completely fit in the available space.
        !          3442: .P1 .1i
        !          3443: &de hd \e"header
        !          3444: &  ---
        !          3445: &nr x 0 1      \e"init footnote count
        !          3446: &nr y 0-\e\enb \e"current footer place
        !          3447: &ch fo -\e\enbu        \e"reset footer trap
        !          3448: &if \e\en(dn .fz       \e"leftover footnote
        !          3449: &&
        !          3450: .P2
        !          3451: .P1 .1i
        !          3452: &de fo \e"footer
        !          3453: &nr dn 0  \e"zero last diver. size
        !          3454: &if \e\enx \e{\e
        !          3455: &ev 1  \e"expand footnotes in ev1
        !          3456: &nf    \e"retain vertical size
        !          3457: &FN    \e"footnotes
        !          3458: &rm FN \e"delete it
        !          3459: .P2
        !          3460: .P1 .1i
        !          3461: &if "\e\en(.z"fy" .di  \e"end overflow di
        !          3462: &nr x 0        \e"disable fx
        !          3463: &ev  \e}       \e"pop environment
        !          3464: &  ---
        !          3465: \&'bp
        !          3466: &&
        !          3467: .P2
        !          3468: .P1 .1i
        !          3469: &de fx \e"process footnote overflow
        !          3470: &if \e\enx .di fy      \e"divert overflow
        !          3471: &&
        !          3472: .P2
        !          3473: .P1 .1i
        !          3474: &de fn \e"start footnote
        !          3475: &da FN \e"divert (append) footnote
        !          3476: &ev 1  \e"in environment 1
        !          3477: &if \e\en+x=1 .fs   \e"if 1st, separator
        !          3478: &fi    \e"fill mode
        !          3479: &&
        !          3480: .P2
        !          3481: .P1 .1i
        !          3482: &de ef \e"end footnote
        !          3483: &br    \e"finish output
        !          3484: &nr z \e\en(.v \e"save spacing
        !          3485: &ev    \e"pop ev
        !          3486: &di    \e"end diversion
        !          3487: &nr y -\e\en(dn        \e"new footer position,
        !          3488: &if \e\enx=1 .nr y -(\e\en(.v-\e\enz) \e
        !          3489:        \e"uncertainty correction
        !          3490: &ch fo \e\enyu \e"y is negative
        !          3491: &if (\e\en(nl+1v)>(\e\en(.p+\e\eny) \e
        !          3492: &ch fo \e\en(nlu+1v     \e"didn't fit
        !          3493: &&
        !          3494: .P2
        !          3495: .P1 .1i
        !          3496: &de fs \e"separator
        !          3497: \el'1i'        \e"1 inch rule
        !          3498: &br
        !          3499: &&
        !          3500: .P2
        !          3501: .P1 .1i
        !          3502: &de fz \e"get leftover footnote
        !          3503: &fn
        !          3504: &nf    \e"retain vertical size
        !          3505: &fy    \e"where fx put it
        !          3506: &ef
        !          3507: &&
        !          3508: .P2
        !          3509: .P1 .1i
        !          3510: &nr b 1.0i  \e"bottom margin size
        !          3511: &wh 0 hd    \e"header trap
        !          3512: &wh 12i fo  \e"footer trap->temp pos
        !          3513: &wh -\e\enbu fx        \e"fx at footer position
        !          3514: &ch fo -\e\enbu        \e"conceal fx with fo
        !          3515: .P2
        !          3516: .PP
        !          3517: The header \&\fChd\fR initializes a footnote count register \&\fCx\fR,
        !          3518: and sets both the current footer trap position register \&\fCy\fR and
        !          3519: the footer trap itself to a nominal position specified in
        !          3520: register \&\fCb\fR.
        !          3521: In addition, if the register \&\fCdn\fR indicates a leftover footnote,
        !          3522: \&\fCfz\fR is invoked to reprocess it.
        !          3523: The footnote start macro \&\fCfn\fR begins a diversion (append) in environment 1,
        !          3524: and increments the count \&\fCx\fR; if the count is one, the footnote separator \&\fCfs\fR
        !          3525: is interpolated.
        !          3526: The separator is kept in a separate macro to permit user redefinition.
        !          3527: .PP
        !          3528: The footnote end macro \&\fCef\fR restores
        !          3529: the previous environment and ends the diversion after saving the spacing size in register \&\fCz\fR.
        !          3530: \&\fCy\fR is then decremented by the size of the footnote, available in \&\fCdn\fR;
        !          3531: then on the first footnote, \&\fCy\fR is further decremented by the difference
        !          3532: in vertical baseline spacings of the two environments, to
        !          3533: prevent the late triggering the footer trap from causing the last
        !          3534: line of the combined footnotes to overflow.
        !          3535: The footer trap is then set to the lower (on the page) of \&\fCy\fR or the current page position (\&\fCnl\fR)
        !          3536: plus one line, to allow for printing the reference line.
        !          3537: .PP
        !          3538: If indicated by \&\fCx\fR, the footer \&\fCfo\fR rereads the footnotes from \&\fCFN\fR in nofill mode
        !          3539: in environment 1,
        !          3540: and deletes \&\fCFN\fR.
        !          3541: If the footnotes were too large to fit, the macro \&\fCfx\fR will be trap-invoked to redivert
        !          3542: the overflow into \&\fCfy\fR,
        !          3543: and the register \&\fCdn\fR will later indicate to the header whether \&\fCfy\fR is empty.
        !          3544: .PP
        !          3545: Both \&\fCfo\fR and \&\fCfx\fR are planted in the nominal footer trap position in an order
        !          3546: that causes \&\fCfx\fR to be concealed unless the \&\fCfo\fR trap is moved.
        !          3547: The footer then terminates the overflow diversion, if necessary, and
        !          3548: zeros \&\fCx\fR to disable \&\fCfx\fR,
        !          3549: because the uncertainty correction
        !          3550: together with a not-too-late triggering of the footer can result
        !          3551: in the footnote rereading finishing before reaching the \&\fCfx\fR trap.
        !          3552: .PP
        !          3553: A good exercise for the student is to combine the multiple-column and footnote mechanisms.
        !          3554: .SH
        !          3555: The Last Page
        !          3556: .PP
        !          3557: After the last input file has ended, \*(NR and \*(TR
        !          3558: invoke the \fIend macro\fR (\(sc7), if any,
        !          3559: and when it finishes, eject the remainder of the page.
        !          3560: During the eject, any traps encountered are processed normally.
        !          3561: At the end of this last page, processing terminates
        !          3562: unless a partial line, word, or partial word remains.
        !          3563: If it is desired that another page be started, the end-macro
        !          3564: .P1 .1i
        !          3565: &de en \e"end-macro
        !          3566: \ec
        !          3567: \&'bp
        !          3568: &&
        !          3569: &em en
        !          3570: .P2
        !          3571: will deposit a null partial word,
        !          3572: and produce another last page.
        !          3573: .1C
        !          3574: .sp 100
        !          3575: .BP
        !          3576: ........
        !          3577: .TL
        !          3578: Special Character Names
        !          3579: .SP
        !          3580: .PP
        !          3581: The following table lists names for a set of characters,
        !          3582: most of which have typically been available with \*(TR.
        !          3583: Not all print on any particular device, including this one.
        !          3584: .TS
        !          3585: center;
        !          3586: l l20fCW l l20fCW l l20fCW.
        !          3587: \&\'   \e'     \(*m    \e(*m   \(~=    \e(~=
        !          3588: \`     \e`     \(*n    \e(*n   \(ap    \e(ap
        !          3589: \(em   \e(em   \(*c    \e(*c   \(!=    \e(!=
        !          3590: -      \e-     \(*o    \e(*o   \(->    \e(->
        !          3591: \(hy   \e(hy   \(*p    \e(*p   \(<-    \e(<-
        !          3592: \-     \e-     \(*r    \e(*r   \(ua    \e(ua
        !          3593: \(bu   \e(bu   \(*s    \e(*s   \(da    \e(da
        !          3594: \(sq   \e(sq   \(ts    \e(ts   \(mu    \e(mu
        !          3595: \(ru   \e(ru   \(*t    \e(*t   \(di    \e(di
        !          3596: \(14   \e(14   \(*u    \e(*u   \(+-    \e(+-
        !          3597: \(12   \e(12   \(*f    \e(*f   \(cu    \e(cu
        !          3598: \(34   \e(34   \(*x    \e(*x   \(ca    \e(ca
        !          3599: \(fi   \e(fi   \(*q    \e(*q   \(sb    \e(sb
        !          3600: \(fl   \e(fl   \(*w    \e(*w   \(sp    \e(sp
        !          3601: \(ff   \e(ff   \(*A    \e(*A   \(ib    \e(ib
        !          3602: \(Fi   \e(Fi   \(*B    \e(*B   \(ip    \e(ip
        !          3603: \(Fl   \e(Fl   \(*G    \e(*G   \(if    \e(if
        !          3604: \(de   \e(de   \(*D    \e(*D   \(pd    \e(pd
        !          3605: \(dg   \e(dg   \(*E    \e(*E   \(gr    \e(gr
        !          3606: \(fm   \e(fm   \(*Z    \e(*Z   \(no    \e(no
        !          3607: \(ct   \e(ct   \(*Y    \e(*Y   \(is    \e(is
        !          3608: \(rg   \e(rg   \(*H    \e(*H   \(pt    \e(pt
        !          3609: \(co   \e(co   \(*I    \e(*I   \(es    \e(es
        !          3610: \(pl   \e(pl   \(*K    \e(*K   \(mo    \e(mo
        !          3611: \(mi   \e(mi   \(*L    \e(*L   \(br    \e(br
        !          3612: \(eq   \e(eq   \(*M    \e(*M   \(dd    \e(dd
        !          3613: \(**   \e(**   \(*N    \e(*N   \(rh    \e(rh
        !          3614: \(sc   \e(sc   \(*C    \e(*C   \(lh    \e(lh
        !          3615: \(aa   \e(aa   \(*O    \e(*O   \(L1    \e(bs
        !          3616: \(ga   \e(ga   \(*P    \e(*P   \(or    \e(or
        !          3617: \(ul   \e(ul   \(*R    \e(*R   \(ci    \e(ci
        !          3618: \(sl   \e(sl   \(*S    \e(*S   \(lt    \e(lt
        !          3619: \(*a   \e(*a   \(*T    \e(*T   \(lb    \e(lb
        !          3620: \(*b   \e(*b   \(*U    \e(*U   \(rt    \e(rt
        !          3621: \(*g   \e(*g   \(*F    \e(*F   \(rb    \e(rb
        !          3622: \(*d   \e(*d   \(*X    \e(*X   \(lk    \e(lk
        !          3623: \(*e   \e(*e   \(*Q    \e(*Q   \(rk    \e(rk
        !          3624: \(*z   \e(*z   \(*W    \e(*W   \(bv    \e(bv
        !          3625: \(*y   \e(*y   \(sr    \e(sr   \(lf    \e(lf
        !          3626: \(*h   \e(*h   \(rn    \e(rn   \(rf    \e(rf
        !          3627: \(*i   \e(*i   \(>=    \e(>=   \(lc    \e(lc
        !          3628: \(*k   \e(*k   \(<=    \e(<=   \(rc    \e(rc
        !          3629: \(*l   \e(*l   \(==    \e(==
        !          3630: .TE

unix.superglobalmegacorp.com

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