[BACK]Return to doc CVS log [TXT][DIR] Up to [local] / src / share / tmac

Annotation of src/share/tmac/doc, Revision 1.1

1.1     ! deraadt     1: .\" Copyright (c) 1991 The Regents of the University of California.
        !             2: .\" All rights reserved.
        !             3: .\"
        !             4: .\" Redistribution and use in source and binary forms, with or without
        !             5: .\" modification, are permitted provided that the following conditions
        !             6: .\" are met:
        !             7: .\" 1. Redistributions of source code must retain the above copyright
        !             8: .\"    notice, this list of conditions and the following disclaimer.
        !             9: .\" 2. Redistributions in binary form must reproduce the above copyright
        !            10: .\"    notice, this list of conditions and the following disclaimer in the
        !            11: .\"    documentation and/or other materials provided with the distribution.
        !            12: .\" 3. All advertising materials mentioning features or use of this software
        !            13: .\"    must display the following acknowledgement:
        !            14: .\"    This product includes software developed by the University of
        !            15: .\"    California, Berkeley and its contributors.
        !            16: .\" 4. Neither the name of the University nor the names of its contributors
        !            17: .\"    may be used to endorse or promote products derived from this software
        !            18: .\"    without specific prior written permission.
        !            19: .\"
        !            20: .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            21: .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            22: .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            23: .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            24: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            25: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            26: .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            27: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            28: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            29: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            30: .\" SUCH DAMAGE.
        !            31: .\"
        !            32: .\"     @(#)doc        5.8 (Berkeley) 8/5/91
        !            33: .\"
        !            34: .\" .mdoc-parse - attempt to parse troff request arguments
        !            35: .\"     %beginstrip%
        !            36: .if \n(.g \{\
        !            37: .cp 0
        !            38: .ftr C CR
        !            39: .\}
        !            40: .if t \{\
        !            41: .       so /usr/share/tmac/tmac.doc-ditroff
        !            42: .\}
        !            43: .if n \{\
        !            44: .       so /usr/share/tmac/tmac.doc-nroff
        !            45: .\}
        !            46: .so /usr/share/tmac/tmac.doc-common
        !            47: .so /usr/share/tmac/tmac.doc-syms
        !            48: .\" NS Db macro - start/stop DEBUG MODE
        !            49: .\" NS Db register DEBUG MODE
        !            50: .\" NS iN register DEBUG MODE (inline if 1, to stderr if 0 (default))
        !            51: .nr Db 0
        !            52: .de Db
        !            53: .ie \\n(.$==0 \{\
        !            54: .      ie \\n(Db==0 \{\
        !            55: .tm DEBUGGING ON
        !            56: .              nr Db 1
        !            57: .      \}
        !            58: .      el \{\
        !            59: .tm DEBUGGING OFF
        !            60: .              nr Db 0
        !            61: .      \}
        !            62: .\}
        !            63: .el \{\
        !            64: .      if "\\$1"on" \{\
        !            65: .tm DEBUGGING ON
        !            66: .              nr Db 1
        !            67: .      \}
        !            68: .      if "\\$1"off" \{\
        !            69: .tm DEBUGGING OFF
        !            70: .              nr Db 0
        !            71: .      \}
        !            72: .\}
        !            73: ..
        !            74: .\" NS aV macro - parse argument vector (recursive) (.aV arg ... )
        !            75: .\" NS fV macro - parse argument vector (recursive) (.fV)
        !            76: .\" NS aC register argument counter (aV/fV)
        !            77: .\" NS fV register argument counter (must set to \\n(.$ prior to reuqest) (fV)
        !            78: .\" NS A[0-9] argument vector (aV/fV)
        !            79: .\" NS C[0-9] reg. arg type(1=macro, 2=arg, 3=punct-suf, 4=punct-pre) (aV/fV)
        !            80: .\" NS S[0-9] space vector (sV)
        !            81: .\" NS aP register argument pointer (aV)
        !            82: .\" NS yU local string used for debugging
        !            83: .\" NS iI local register (indent for inline debug mode)
        !            84: .\" NS mN name of calling request (set in each user requestable macro)
        !            85: .de aV
        !            86: .nr aC \\n(aC+1
        !            87: .ie "\\$1"|" \{\
        !            88: .      if "\\*(mN"Op" .ds A\\n(aC \fR\\$1\fP
        !            89: .      if "\\*(mN"Ar" .ds A\\n(aC \fR\\$1\fP
        !            90: .      if "\\*(mN"Fl" .ds A\\n(aC \fR\\$1\fP
        !            91: .      if "\\*(mN"Cm" .ds A\\n(aC \fR\\$1\fP
        !            92: .      if "\\*(mN"It" .ds A\\n(aC \fR\\$1\fP
        !            93: .\}
        !            94: .el .ds A\\n(aC \\$1
        !            95: .aU \\n(aC
        !            96: .nr C\\n(aC \\n(aT
        !            97: .s\\n(aT
        !            98: .if \\n(Db \{\
        !            99: .      if \\n(aT==1 .ds yU Executable
        !           100: .      if \\n(aT==2 .ds yU String
        !           101: .      if \\n(aT==3 .ds yU Closing Punctuation or suffix
        !           102: .      if \\n(aT==4 .ds yU Opening Punctuation or prefix
        !           103: .      if \\n(iN==1 \{\
        !           104: .              br
        !           105: .              nr iI \\n(.iu
        !           106: .              in -\\n(iIu
        !           107: .              if \\n(aC==1 \{\
        !           108: \&\fBDEBUG(argv) MACRO:\fP `.\\*(mN'  \fBLine #:\fP \\n(.c
        !           109: .              \}
        !           110: \&\t\fBArgc:\fP \\n(aC  \fBArgv:\fP `\\*(A\\n(aC'  \fBLength:\fP \\n(sW
        !           111: \&\t\fBSpace:\fP `\\*(S\\n(aC'  \fBClass:\fP \\*(yU
        !           112: .      \}
        !           113: .      if \\n(iN==0 \{\
        !           114: .              if \\n(aC==1 \{\
        !           115: .                      tm DEBUG(argv) MACRO: `.\\*(mN'  Line #: \\n(.c
        !           116: .              \}
        !           117: .              tm \tArgc: \\n(aC  Argv: `\\*(A\\n(aC'  Length: \\n(sW
        !           118: .              tm \tSpace: `\\*(S\\n(aC'  Class: \\*(yU
        !           119: .      \}
        !           120: .\}
        !           121: .ie \\n(.$==1 \{\
        !           122: .      nr aP 0
        !           123: .      ie \\n(dZ==1 \{\
        !           124: .              if \\n(oM>1 .as b1 \\*(S0
        !           125: .      \}
        !           126: .      el \{\
        !           127: .              if \\n(oM>0 \{\
        !           128: .                      if \\n(fC==0 .as b1 \\*(S0
        !           129: .              \}
        !           130: .      \}
        !           131: .      ds S0 \\*(S\\n(aC
        !           132: .      if \\n(Db \{\
        !           133: .              if \\n(iN==1 \{\
        !           134: \&MACRO REQUEST: \t.\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
        !           135: .                      br
        !           136: .                      in \\n(iIu
        !           137: .              \}
        !           138: .              if \\n(iN==0 \{\
        !           139: .tm \tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
        !           140: .              \}
        !           141: .      \}
        !           142: .\}
        !           143: .el .aV \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           144: ..
        !           145: .de fV
        !           146: .nr aC \\n(aC+1
        !           147: .if "\\*(A\\n(aC"|" \{\
        !           148: .      if "\\*(mN"Op" .ds A\\n(aC \fR\\*(A\\n(aC\fP
        !           149: .      if "\\*(mN"Ar" .ds A\\n(aC \fR\\*(A\\n(aC\fP
        !           150: .      if "\\*(mN"Fl" .ds A\\n(aC \fR\&\\*(A\\n(aC\fP
        !           151: .      if "\\*(mN"Cm" .ds A\\n(aC \fR\\*(A\\n(aC\fP
        !           152: .      if "\\*(mN"It" .ds A\\n(aC \fR\\*(A\\n(aC\fP
        !           153: .\}
        !           154: .aU \\n(aC
        !           155: .nr C\\n(aC \\n(aT
        !           156: .s\\n(aT
        !           157: .if \\n(Db \{\
        !           158: .      if \\n(aT==1 .ds yU Executable
        !           159: .      if \\n(aT==2 .ds yU String
        !           160: .      if \\n(aT==3 .ds yU Closing Punctuation or suffix
        !           161: .      if \\n(aT==4 .ds yU Opening Punctuation or prefix
        !           162: .      if \\n(iN==1 \{\
        !           163: .              br
        !           164: .              nr iI \\n(.iu
        !           165: .              in -\\n(iIu
        !           166: .              if \\n(aC==1 \{\
        !           167: \&\fBDEBUG(fargv) MACRO:\fP `.\\*(mN'  \fBLine #:\fP \\n(.c
        !           168: .              \}
        !           169: \&\t\fBArgc:\fP \\n(aC  \fBArgv:\fP `\\*(A\\n(aC'  \fBLength:\fP \\n(sW
        !           170: \&\t\fBSpace:\fP `\\*(S\\n(aC'  \fBClass:\fP \\*(yU
        !           171: .      \}
        !           172: .      if \\n(iN==0 \{\
        !           173: .              if \\n(aC==1 \{\
        !           174: .                      tm DEBUG(fargv) MACRO: `.\\*(mN'  Line #: \\n(.c
        !           175: .              \}
        !           176: .              tm \tArgc: \\n(aC  Argv: `\\*(A\\n(aC'  Length: \\n(sW
        !           177: .              tm \tSpace: `\\*(S\\n(aC'  Class: \\*(yU
        !           178: .      \}
        !           179: .\}
        !           180: .ie \\n(fV==1 \{\
        !           181: .      nr aP 0
        !           182: .      ie \\n(dZ==1 \{\
        !           183: .              if \\n(oM>1 .as b1 \\*(S0
        !           184: .      \}
        !           185: .      el \{\
        !           186: .              if \\n(oM>0 \{\
        !           187: .                      if \\n(fC==0 .as b1 \\*(S0
        !           188: .              \}
        !           189: .      \}
        !           190: .      ds S0 \\*(S\\n(aC
        !           191: .      nr fV 0
        !           192: .      if \\n(Db \{\
        !           193: .              ie \\n(iN \{\
        !           194: \&\tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
        !           195: .                      br
        !           196: .                      in \\n(iIu
        !           197: .              \}
        !           198: .              el \{\
        !           199: .tm \tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
        !           200: .              \}
        !           201: .      \}
        !           202: .\}
        !           203: .el \{\
        !           204: .      nr fV \\n(fV-1
        !           205: .      fV
        !           206: .\}
        !           207: ..
        !           208: .\" NS aX macro - stuff saved strings into `b1' (used by -diag list)
        !           209: .de aX
        !           210: .nr aP \\n(aP+1
        !           211: .as b1 \&\\*(A\\n(aP
        !           212: .ie \\n(fV==1 \{\
        !           213: .      nr aP 0
        !           214: .      nr fV 0
        !           215: .\}
        !           216: .el \{\
        !           217: .      as b1 \&\\*(sV
        !           218: .      nr fV \\n(fV-1
        !           219: .      aX
        !           220: .\}
        !           221: ..
        !           222: .\" NS aI macro - append arg to arg vector: .aI [arg] [type] (used by .En only)
        !           223: .de aI
        !           224: .ie \\n(aC<9 \{\
        !           225: .      nr aC \\n(aC+1
        !           226: .      ds A\\n(aC \\$1
        !           227: .      nr C\\n(aC \\$2
        !           228: .      s\\$2
        !           229: .      ds xV S\\n(aC
        !           230: .\}
        !           231: .el \{\
        !           232: .      tm Usage: Too many arguments (maximum of 8 accepted) (#\\n(.c)
        !           233: .      tm \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9
        !           234: .\}
        !           235: ..
        !           236: .\"
        !           237: .\" NS aZ macro - print buffer (pB) and clean up arg vectors (aY)
        !           238: .de aZ
        !           239: .pB
        !           240: .aY
        !           241: ..
        !           242: .\" NS aY macro - clean up arg vector
        !           243: .de aY
        !           244: .rm C0 C1 C2 C3 C4 C5 C6 C7 C8 C9
        !           245: .rm A0 A1 A2 A3 A4 A5 A6 A7 A8 A9
        !           246: .rm S1 S2 S3 S4 S5 S6 S7 S8 S9
        !           247: .nr aC 0
        !           248: .nr aP 0
        !           249: ..
        !           250: .\" NS pB macro - test for end of vector (eol) (print b1 buffer or divert)
        !           251: .de pB
        !           252: .ie \\n(dZ==1 \{\
        !           253: .      if \\n(oM==1 \{\&\\*(b1
        !           254: .              rm S0
        !           255: .              ds b1
        !           256: .      \}
        !           257: .      if \\n(oM==0 \{\
        !           258: .              x2
        !           259: .      \}
        !           260: .\}
        !           261: .el \{\
        !           262: .      ie \\n(oM==0 \{\&\\*(b1
        !           263: .              rm S0
        !           264: .              ds b1
        !           265: .      \}
        !           266: .      el \{\
        !           267: .              if ((\\n(sM==1)&(\\n(tP==0)) \{\
        !           268: .                      x1
        !           269: .              \}
        !           270: .      \}
        !           271: .\}
        !           272: .hy
        !           273: ..
        !           274: .\" NS x1 macro - save buffer and divert if tP flag set
        !           275: .\" NS eB diversion string
        !           276: .\" NS b2 string save of buffer
        !           277: .\" NS lK register count of lines read from input file
        !           278: .de x1
        !           279: .nr dZ \\n(dZ+1
        !           280: .ds b2 \\*(b1
        !           281: .ds b1
        !           282: .nr lK \\n(.c
        !           283: .ev 2
        !           284: .fi
        !           285: .di eB
        !           286: ..
        !           287: .\"
        !           288: .\" NS x2 macro - end diversion and print
        !           289: .\" NS b0 string local temporary
        !           290: .de x2
        !           291: .br
        !           292: .di
        !           293: .ev
        !           294: .ie (\\n(.c-\\n(lK>1) \{\
        !           295: .      ds b0 \&\\*(eB\\
        !           296: .      ds b1 \\*(b2\\*(b0\\*(b1
        !           297: .\}
        !           298: .el .ds b1 \\*(b2\\*(b1
        !           299: \&\\*(b1
        !           300: .rm eB b2 b0 b1
        !           301: .nr dZ \\n(dZ-1
        !           302: ..
        !           303: .\" NS Fl macro - flags (appends - and prints flags)
        !           304: .\" NS cF register save current font
        !           305: .\" NS cZ register save current font size
        !           306: .de Fl
        !           307: .as b1 \&\\*(fL
        !           308: .if \\n(aC==0 \{\
        !           309: .      ie \\n(.$==0 \{\
        !           310: .              as b1 \&\|\-\|\fP\s0
        !           311: .              pB
        !           312: .      \}
        !           313: .      el \{\
        !           314: .              ds mN Fl
        !           315: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           316: .      \}
        !           317: .\}
        !           318: .if \\n(aC>0 \{\
        !           319: .      ie (\\n(aC-\\n(aP)==0 \{\
        !           320: .              as b1 \&\|\-\fP\s0
        !           321: .              aZ
        !           322: .      \}
        !           323: .      el \{\
        !           324: .              nr aP \\n(aP+1
        !           325: .              ie \\n(C\\n(aP==1 \{\
        !           326: .                      as b1 \&\|\-\fP\s0
        !           327: .                      \\*(A\\n(aP
        !           328: .              \}
        !           329: .              el \{\
        !           330: .                      nr cF \\n(.f
        !           331: .                      nr cZ \\n(.s
        !           332: .                      if \\n(C\\n(aP==3 \{\
        !           333: .                              as b1 \&\|\-\|
        !           334: .                      \}
        !           335: .                      fR
        !           336: .              \}
        !           337: .      \}
        !           338: .\}
        !           339: ..
        !           340: .\"
        !           341: .\" NS fR macro - Fl flag recursion routine (special handling)
        !           342: .\" NS jM local register
        !           343: .\" NS jN local register
        !           344: .\"
        !           345: .de fR
        !           346: .hy 0
        !           347: .nr jM \\n(C\\n(aP
        !           348: .ie \\n(jM==1 \{\
        !           349: .      as b1 \&\fP\s0
        !           350: .      \\*(A\\n(aP
        !           351: .\}
        !           352: .el \{\
        !           353: .      nr jN \\n(aP
        !           354: .      ie \\n(jM==2 \{\
        !           355: .              ie !"\\*(A\\n(aP"\\*(Ba" \{\
        !           356: .                      ie !"\\*(A\\n(aP"\fR|\fP" \{\
        !           357: .                             ie "\\*(A\\n(aP"-" .as b1 \&\|\-\^\-\|
        !           358: .                             el .as b1 \&\|\-\\*(A\\n(aP
        !           359: .                      \}
        !           360: .                      el .as b1 \&\\*(A\\n(aP
        !           361: .              \}
        !           362: .              el .as b1 \&\\*(A\\n(aP
        !           363: .      \}
        !           364: .      el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0
        !           365: .      ie \\n(aC==\\n(aP \{\
        !           366: .              if \\n(jM==4 .as b1 \&\|\-
        !           367: .              as b1 \&\fP\s0
        !           368: .              aZ
        !           369: .      \}
        !           370: .      el \{\
        !           371: .              nr aP \\n(aP+1
        !           372: .              ie ((\\n(C\\n(aP==3)&(\\n(C\\n(jN==4)) .as b1 \&\|\-
        !           373: .              el .as b1 \&\\*(S\\n(jN
        !           374: .              fR \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           375: .      \}
        !           376: .\}
        !           377: .rr jM jN
        !           378: ..
        !           379: .\"
        !           380: .\" NS nR macro - general name recursion routine
        !           381: .\" NS jM local register
        !           382: .\" NS jN local register
        !           383: .de nR
        !           384: .hy 0
        !           385: .nr jM \\n(C\\n(aP
        !           386: .ie \\n(jM==1 \{\
        !           387: .      as b1 \&\f\\n(cF\s\\n(cZ
        !           388: .      \\*(A\\n(aP
        !           389: .\}
        !           390: .el \{\
        !           391: .      nr jN \\n(aP
        !           392: .      ie \\n(jM==2 .as b1 \&\\*(A\\n(aP
        !           393: .      el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0
        !           394: .      ie \\n(aC==\\n(aP \{\
        !           395: .              as b1 \&\f\\n(cF\s\\n(cZ
        !           396: .              aZ
        !           397: .      \}
        !           398: .      el \{\
        !           399: .              nr aP \\n(aP+1
        !           400: .              as b1 \&\\*(S\\n(jN
        !           401: .              nR
        !           402: .      \}
        !           403: .\}
        !           404: .rr jM jN
        !           405: ..
        !           406: .\" NS Ar macro - command line `argument' macro
        !           407: .\"
        !           408: .de Ar
        !           409: .as b1 \\*(aR
        !           410: .if \\n(aC==0 \{\
        !           411: .       ie \\n(.$==0 \{\
        !           412: .              as b1 file\ ...\fP\s0
        !           413: .              pB
        !           414: .      \}
        !           415: .      el \{\
        !           416: .              ds mN Ar
        !           417: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           418: .      \}
        !           419: .\}
        !           420: .if \\n(aC>0 \{\
        !           421: .      ie (\\n(aC-\\n(aP)==0 \{\
        !           422: .              as b1 \&file\ ...\fP\s0
        !           423: .              aZ
        !           424: .      \}
        !           425: .      el \{\
        !           426: .              nr aP \\n(aP+1
        !           427: .              ie \\n(C\\n(aP==1 \{\
        !           428: .                      as b1 \&file\ ...\fP\s0
        !           429: .                      \\*(A\\n(aP
        !           430: .               \}
        !           431: .               el \{\
        !           432: .                       nr cF \\n(.f
        !           433: .                      nr cZ \\n(.s
        !           434: .                      if \\n(C\\n(aP==3 \{\
        !           435: .                              as b1 \&file\ ...
        !           436: .                      \}
        !           437: .                       nR
        !           438: .              \}
        !           439: .       \}
        !           440: .\}
        !           441: ..
        !           442: .\" NS Ad macro - Addresses
        !           443: .de Ad
        !           444: .if \\n(aC==0 \{\
        !           445: .       ie \\n(.$==0 .tm Usage: .Ad address ... \\*(Pu (#\\n(.c)
        !           446: .      el \{\
        !           447: .              ds mN Ad
        !           448: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           449: .      \}
        !           450: .\}
        !           451: .if \\n(aC>\\n(aP \{\
        !           452: .      as b1 \\*(aD
        !           453: .      nr aP \\n(aP+1
        !           454: .       nr cF \\n(.f
        !           455: .      nr cZ \\n(.s
        !           456: .       nR
        !           457: .\}
        !           458: ..
        !           459: .\" NS Cd macro - Config declaration (for section 4 SYNOPSIS) (not callable)
        !           460: .\" needs work - not very translatable
        !           461: .de Cd
        !           462: .if \\n(aC==0 \{\
        !           463: .       ie \\n(.$==0 .tm Usage: .Cd Configuration file declaration (#\\n(.c)
        !           464: .      el \{\
        !           465: .              ds mN Cd
        !           466: .               ds A1 \\$1
        !           467: .               ds A2 \\$2
        !           468: .               ds A3 \\$3
        !           469: .               ds A4 \\$4
        !           470: .               ds A5 \\$5
        !           471: .               ds A6 \\$6
        !           472: .               ds A7 \\$7
        !           473: .               ds A8 \\$8
        !           474: .               ds A9 \\$9
        !           475: .              nr fV \\n(.$
        !           476: .              fV
        !           477: .      \}
        !           478: .\}
        !           479: .br
        !           480: .if \\n(aC>\\n(aP \{\
        !           481: .      as b1 \\*(nM
        !           482: .      nr aP \\n(aP+1
        !           483: .       nr cF \\n(.f
        !           484: .      nr cZ \\n(.s
        !           485: .      ie \\n(nS \{\
        !           486: .              if "\\*(mN"Cd" \{\
        !           487: .                      rs
        !           488: .                      ie \\n(nS>1 .br
        !           489: .                      el \{\
        !           490: .                              if \\n(iS==0 .nr iS \\n(Dsu
        !           491: .                      \}
        !           492: .                      in +\\n(iSu
        !           493: .                      ti -\\n(iSu
        !           494: .                      nr nS \\n(nS+1
        !           495: .              \}
        !           496: .      nR
        !           497: .      in -\\n(iSu
        !           498: .      \}
        !           499: .      el .nR
        !           500: .\}
        !           501: ..
        !           502: .\" NS Cm macro - Interactive command modifier (flag)
        !           503: .de Cm
        !           504: .if \\n(aC==0 \{\
        !           505: .       ie \\n(.$==0 .tm Usage: .Cm Interactive command modifier ... \\*(Pu (#\\n(.c)
        !           506: .      el \{\
        !           507: .              ds mN Cm
        !           508: .               ds A1 \\$1
        !           509: .               ds A2 \\$2
        !           510: .               ds A3 \\$3
        !           511: .               ds A4 \\$4
        !           512: .               ds A5 \\$5
        !           513: .               ds A6 \\$6
        !           514: .               ds A7 \\$7
        !           515: .               ds A8 \\$8
        !           516: .               ds A9 \\$9
        !           517: .              nr fV \\n(.$
        !           518: .              fV
        !           519: .      \}
        !           520: .\}
        !           521: .if \\n(aC>\\n(aP \{\
        !           522: .      as b1 \\*(cM
        !           523: .      nr aP \\n(aP+1
        !           524: .       nr cF \\n(.f
        !           525: .      nr cZ \\n(.s
        !           526: .       nR
        !           527: .\}
        !           528: ..
        !           529: .\" NS Dv macro - define variable
        !           530: .de Dv
        !           531: .if \\n(aC==0 \{\
        !           532: .       ie \\n(.$==0 .tm Usage: .Dv define_variable ... \\*(Pu (#\\n(.c)
        !           533: .      el \{\
        !           534: .              ds mN Dv
        !           535: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           536: .      \}
        !           537: .\}
        !           538: .if \\n(aC>\\n(aP \{\
        !           539: .      as b1 \\*(eR
        !           540: .      nr aP \\n(aP+1
        !           541: .       nr cF \\n(.f
        !           542: .      nr cZ \\n(.s
        !           543: .       nR
        !           544: .\}
        !           545: ..
        !           546: .\" NS Em macro - Emphasis
        !           547: .de Em
        !           548: .if \\n(aC==0 \{\
        !           549: .       ie \\n(.$==0 \{\
        !           550: .              tm Usage: .Em text ... \\*(Pu (#\\n(.c)
        !           551: .      \}
        !           552: .      el \{\
        !           553: .              ds mN Em
        !           554: .               ds A1 \\$1
        !           555: .               ds A2 \\$2
        !           556: .               ds A3 \\$3
        !           557: .               ds A4 \\$4
        !           558: .               ds A5 \\$5
        !           559: .               ds A6 \\$6
        !           560: .               ds A7 \\$7
        !           561: .               ds A8 \\$8
        !           562: .               ds A9 \\$9
        !           563: .              nr fV \\n(.$
        !           564: .              fV
        !           565: .      \}
        !           566: .\}
        !           567: .if \\n(aC>\\n(aP \{\
        !           568: .      as b1 \\*(eM
        !           569: .      nr aP \\n(aP+1
        !           570: .       nr cF \\n(.f
        !           571: .      nr cZ \\n(.s
        !           572: .       nR
        !           573: .\}
        !           574: ..
        !           575: .\" NS Er macro - Errnotype
        !           576: .de Er
        !           577: .if \\n(aC==0 \{\
        !           578: .       ie \\n(.$==0 .tm Usage: .Er ERRNOTYPE ... \\*(Pu (#\\n(.c)
        !           579: .      el \{\
        !           580: .              ds mN Er
        !           581: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           582: .      \}
        !           583: .\}
        !           584: .if \\n(aC>\\n(aP \{\
        !           585: .      as b1 \\*(eR
        !           586: .      nr aP \\n(aP+1
        !           587: .       nr cF \\n(.f
        !           588: .      nr cZ \\n(.s
        !           589: .       nR
        !           590: .\}
        !           591: ..
        !           592: .\" NS Ev macro - Environment variable
        !           593: .de Ev
        !           594: .if \\n(aC==0 \{\
        !           595: .       ie \\n(.$==0 .tm Usage: .Ev ENVIRONMENT_VARIABLE ... \\*(Pu (#\\n(.c)
        !           596: .      el \{\
        !           597: .              ds mN Ev
        !           598: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           599: .      \}
        !           600: .\}
        !           601: .if \\n(aC>\\n(aP \{\
        !           602: .      as b1 \\*(eV
        !           603: .      nr aP \\n(aP+1
        !           604: .       nr cF \\n(.f
        !           605: .      nr cZ \\n(.s
        !           606: .       nR
        !           607: .\}
        !           608: ..
        !           609: .\" NS Fd macro - function declaration - not callable (& no err check)
        !           610: .\" NS fD register subroutine test (in synopsis only)
        !           611: .\" NS fY register subroutine count (in synopsis only) (fortran only)
        !           612: .\" NS fZ register also subroutine count (in synopsis only)
        !           613: .de Fd
        !           614: .ds mN Fd
        !           615: .if \\n(nS>0 \{\
        !           616: .\"    if a variable type was the last thing given, want vertical space
        !           617: .      if \\n(fX>0 \{\
        !           618: .              Pp
        !           619: .              nr fX 0
        !           620: .      \}
        !           621: .\"    if a subroutine was the last thing given, want vertical space
        !           622: .      if \\n(fZ>0 \{\
        !           623: .              ie \\n(fD==0 \{\
        !           624: .                      Pp
        !           625: .                      rs
        !           626: .              \}
        !           627: .              el .br
        !           628: .      \}
        !           629: .      nr fD \\n(fD+1
        !           630: .\}
        !           631: .nr cF \\n(.f
        !           632: .nr cZ \\n(.s
        !           633: \&\\*(fD\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           634: .br
        !           635: .ft \\n(cF
        !           636: .fs \\n(cZ
        !           637: ..
        !           638: .\" NS Fr macro - function return value - not callable (at the moment)
        !           639: .de Fr
        !           640: .if \\n(aC==0 \{\
        !           641: .       ie \\n(.$==0 .tm Usage: .Fr Function_return_value... \\*(Pu (#\\n(.c)
        !           642: .      el \{\
        !           643: .              ds mN Fr
        !           644: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           645: .      \}
        !           646: .\}
        !           647: .if \\n(aC>\\n(aP \{\
        !           648: .      as b1 \\*(aR
        !           649: .      nr aP \\n(aP+1
        !           650: .       nr cF \\n(.f
        !           651: .      nr cZ \\n(.s
        !           652: .       nR
        !           653: .\}
        !           654: ..
        !           655: .\" NS Ic macro - Interactive command
        !           656: .de Ic
        !           657: .if \\n(aC==0 \{\
        !           658: .       ie \\n(.$==0 .tm Usage: .Ic Interactive command ... \\*(Pu (#\\n(.c)
        !           659: .      el \{\
        !           660: .              ds mN Ic
        !           661: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           662: .      \}
        !           663: .\}
        !           664: .if \\n(aC>\\n(aP \{\
        !           665: .      as b1 \\*(iC
        !           666: .      nr aP \\n(aP+1
        !           667: .       nr cF \\n(.f
        !           668: .      nr cZ \\n(.s
        !           669: .       nR
        !           670: .\}
        !           671: ..
        !           672: .\" NS Li macro - literals
        !           673: .de Li
        !           674: .if \\n(aC==0 \{\
        !           675: .       ie \\n(.$==0 .tm Usage .Li argument ... \\*(Pu (#\\n(.c)
        !           676: .       el \{\
        !           677: .              ds mN Li
        !           678: .               ds A1 \\$1
        !           679: .               ds A2 \\$2
        !           680: .               ds A3 \\$3
        !           681: .               ds A4 \\$4
        !           682: .               ds A5 \\$5
        !           683: .               ds A6 \\$6
        !           684: .               ds A7 \\$7
        !           685: .               ds A8 \\$8
        !           686: .               ds A9 \\$9
        !           687: .               nr fV \\n(.$
        !           688: .               fV
        !           689: .       \}
        !           690: .\}
        !           691: .if \\n(aC>\\n(aP \{\
        !           692: .      as b1 \\*(lI
        !           693: .      nr aP \\n(aP+1
        !           694: .       nr cF \\n(.f
        !           695: .      nr cZ \\n(.s
        !           696: .       nR
        !           697: .\}
        !           698: ..
        !           699: .\" NS Or macro - Pipe symbol (OR)
        !           700: .de Or
        !           701: .if \\n(aC==0 \{\
        !           702: .       ie \\n(.$==0 .tm Usage: .Or ... \\*(Pu (#\\n(.c)
        !           703: .      el \{\
        !           704: .              ds mN Or
        !           705: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           706: .      \}
        !           707: .\}
        !           708: .if \\n(aC>\\n(aP \{\
        !           709: .      as b1 \\*(iC
        !           710: .      nr aP \\n(aP+1
        !           711: .       nr cF \\n(.f
        !           712: .      nr cZ \\n(.s
        !           713: .       nR
        !           714: .\}
        !           715: ..
        !           716: .\" NS Ms macro - Math symbol
        !           717: .de Ms
        !           718: .if \\n(aC==0 \{\
        !           719: .       ie \\n(.$==0 .tm Usage: .Ms Math symbol ... \\*(Pu (#\\n(.c)
        !           720: .      el \{\
        !           721: .              ds mN Ms
        !           722: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           723: .      \}
        !           724: .\}
        !           725: .if \\n(aC>\\n(aP \{\
        !           726: .      as b1 \\*(sY
        !           727: .      nr aP \\n(aP+1
        !           728: .       nr cF \\n(.f
        !           729: .      nr cZ \\n(.s
        !           730: .       nR
        !           731: .\}
        !           732: ..
        !           733: .\" NS Nm macro - Name of command or page topic
        !           734: .\" NS n1 string - save first invocation of .Nm
        !           735: .\" NS iS register - indent second command line in a synopsis
        !           736: .de Nm
        !           737: .if \\n(aC==0 \{\
        !           738: .      ie \\n(.$==0 \{\
        !           739: .              ie "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu (#\\n(.c)
        !           740: .              el \&\\*(nM\\*(n1\fP\s0
        !           741: .      \}
        !           742: .      el \{\
        !           743: .              ds mN Nm
        !           744: .               ds A1 \\$1
        !           745: .               ds A2 \\$2
        !           746: .               ds A3 \\$3
        !           747: .               ds A4 \\$4
        !           748: .               ds A5 \\$5
        !           749: .               ds A6 \\$6
        !           750: .               ds A7 \\$7
        !           751: .               ds A8 \\$8
        !           752: .               ds A9 \\$9
        !           753: .               nr fV \\n(.$
        !           754: .               fV
        !           755: .       \}
        !           756: .\}
        !           757: .if \\n(aC>0 \{\
        !           758: .      ie \\n(aC==\\n(aP \{\
        !           759: .              as b1 \&\\*(nM\\*(n1\fP\s0
        !           760: .              aZ
        !           761: .      \}
        !           762: .      el \{\
        !           763: .              as b1 \\*(nM
        !           764: .              nr aP \\n(aP+1
        !           765: .              ie \\n(C\\n(aP==1 \{\
        !           766: .                      as b1 \&\\*(n1\fP\s0
        !           767: .                      \\*(A\\n(aP
        !           768: .              \}
        !           769: .              el \{\
        !           770: .                      nr cF \\n(.f
        !           771: .                      nr cZ \\n(.s
        !           772: .                      if \\n(nS \{\
        !           773: .                              if "\\*(mN"Nm" \{\
        !           774: .                                      rs
        !           775: .                                      in -\\n(iSu
        !           776: .                                      ie \\n(nS>1 .br
        !           777: .                                      el \{\
        !           778: .                                              if \\n(iS==0 \{\
        !           779: .                                                      sw \\$1
        !           780: .                                      nr iS ((\\n(sWu+1)*\\n(fW)u
        !           781: .                                              \}
        !           782: .                                      \}
        !           783: .                                      in +\\n(iSu
        !           784: .                                      ti -\\n(iSu
        !           785: .                                      nr nS \\n(nS+1
        !           786: .                              \}
        !           787: .                      \}
        !           788: .                      if "\\*(n1"" .ds n1 \\*(A\\n(aP
        !           789: .                      nR
        !           790: .              \}
        !           791: .      \}
        !           792: .\}
        !           793: ..
        !           794: .\" NS Pa macro - Pathname
        !           795: .de Pa
        !           796: .if \\n(aC==0 \{\
        !           797: .       ie \\n(.$==0 \&\\*(pA~\fP\s0
        !           798: .      el \{\
        !           799: .              ds mN Pa
        !           800: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           801: .      \}
        !           802: .\}
        !           803: .if \\n(aC>\\n(aP \{\
        !           804: .      as b1 \\*(pA
        !           805: .      nr aP \\n(aP+1
        !           806: .       nr cF \\n(.f
        !           807: .      nr cZ \\n(.s
        !           808: .       nR
        !           809: .\}
        !           810: ..
        !           811: .\" NS Sy macro - Symbolics
        !           812: .de Sy
        !           813: .if \\n(aC==0 \{\
        !           814: .       ie \\n(.$==0 .tm Usage: .Sy symbolic_text ... \\*(Pu (#\\n(.c)
        !           815: .      el \{\
        !           816: .              ds mN Sy
        !           817: .               ds A1 \\$1
        !           818: .               ds A2 \\$2
        !           819: .               ds A3 \\$3
        !           820: .               ds A4 \\$4
        !           821: .               ds A5 \\$5
        !           822: .               ds A6 \\$6
        !           823: .               ds A7 \\$7
        !           824: .               ds A8 \\$8
        !           825: .               ds A9 \\$9
        !           826: .              nr fV \\n(.$
        !           827: .              fV
        !           828: .      \}
        !           829: .\}
        !           830: .if \\n(aC>\\n(aP \{\
        !           831: .      as b1 \\*(sY
        !           832: .      nr aP \\n(aP+1
        !           833: .       nr cF \\n(.f
        !           834: .      nr cZ \\n(.s
        !           835: .       nR
        !           836: .\}
        !           837: ..
        !           838: .\" NS Tn macro - Trade Name Macro
        !           839: .de Tn
        !           840: .if \\n(aC==0 \{\
        !           841: .       ie \\n(.$==0 .tm Usage: .Tn Trade_name(s) ... \\*(Pu (#\\n(.c)
        !           842: .      el \{\
        !           843: .              ds mN Tn
        !           844: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           845: .      \}
        !           846: .\}
        !           847: .if \\n(aC>\\n(aP \{\
        !           848: .      as b1 \\*(tN\\*(tF
        !           849: .      nr aP \\n(aP+1
        !           850: .       nr cF \\n(.f
        !           851: .      nr cZ \\n(.s
        !           852: .       nR
        !           853: .\}
        !           854: ..
        !           855: .\" NS nN macro - Trade Name Macro for inside of reference
        !           856: .de nN
        !           857: .if \\n(aC==0 \{\
        !           858: .       ie \\n(.$==0 .tm Usage: .Tn Trade_name(s) ... \\*(Pu (#\\n(.c)
        !           859: .      el \{\
        !           860: .              ds mN Tn
        !           861: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           862: .      \}
        !           863: .\}
        !           864: .if \\n(aC>\\n(aP \{\
        !           865: .      as b1 \\*(tN
        !           866: .      nr aP \\n(aP+1
        !           867: .       nr cF \\n(.f
        !           868: .      nr cZ \\n(.s
        !           869: .       rR
        !           870: .\}
        !           871: ..
        !           872: .\" NS Va macro - variable name macro
        !           873: .de Va
        !           874: .if \\n(aC==0 \{\
        !           875: .       ie \\n(.$==0 .tm Usage: .Va variable_name(s) ... \\*(Pu (#\\n(.c)
        !           876: .      el \{\
        !           877: .              ds mN Va
        !           878: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           879: .      \}
        !           880: .\}
        !           881: .if \\n(aC>\\n(aP \{\
        !           882: .      as b1 \\*(vA
        !           883: .      nr aP \\n(aP+1
        !           884: .       nr cF \\n(.f
        !           885: .      nr cZ \\n(.s
        !           886: .       nR
        !           887: .\}
        !           888: ..
        !           889: .\"
        !           890: .\" NS No macro - Normal text macro (default text style if mess up)
        !           891: .de No
        !           892: .as b1 \\*(nO
        !           893: .if \\n(aC==0 \{\
        !           894: .      ie \\n(.$==0 .tm Usage: .No must be called with arguments (#\\n(.c)
        !           895: .      el \{\
        !           896: .              ds mN No
        !           897: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           898: .      \}
        !           899: .\}
        !           900: .if \\n(aC>\\n(aP \{\
        !           901: .      nr aP \\n(aP+1
        !           902: .       ie \\n(C\\n(aP==1 \{\
        !           903: .              \\*(A\\n(aP
        !           904: .       \}
        !           905: .       el \{\
        !           906: .              nr cF \\n(.f
        !           907: .              nr cZ \\n(.s
        !           908: .              nR
        !           909: .       \}
        !           910: .\}
        !           911: ..
        !           912: .\"------------------------------------------------------------------------
        !           913: .\" NS Op macro - Option Expression
        !           914: .de Op
        !           915: .if \\n(aC==0 \{\
        !           916: .      ds mN Op
        !           917: .\}
        !           918: .\" .ds qL \&\\*(lO
        !           919: .\" .ds qR \&\\*(rO
        !           920: .ds qL \&\\*(lB
        !           921: .ds qR \&\\*(rB
        !           922: .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
        !           923: ..
        !           924: .\" NS Aq macro - Enclose string in angle brackets
        !           925: .de Aq
        !           926: .if \\n(aC==0 .ds mN Aq
        !           927: .ds qL \&<
        !           928: .ds qR \&>
        !           929: .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           930: ..
        !           931: .\" NS Bq macro - Enclose string in square brackets
        !           932: .de Bq
        !           933: .if \\n(aC==0 .ds mN Bq
        !           934: .ds qL \&\\*(lB
        !           935: .ds qR \&\\*(rB
        !           936: .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           937: ..
        !           938: .\" NS Dq macro - Enclose string in double quotes
        !           939: .de Dq
        !           940: .if \\n(aC==0 .ds mN Dq
        !           941: .ds qL \&\\*(Lq
        !           942: .ds qR \&\\*(Rq
        !           943: .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           944: ..
        !           945: .\" NS Eq macro - Enclose string in double quotes
        !           946: .de Eq
        !           947: .if \\n(aC==0 .ds mN Eq
        !           948: .ds qL \\$1
        !           949: .ds qR \\$2
        !           950: .En \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           951: ..
        !           952: .\" NS Pq macro - Enclose string in parenthesis
        !           953: .de Pq
        !           954: .if \\n(aC==0 .ds mN Pq
        !           955: .ds qL \&\\*(lP
        !           956: .ds qR \&\\*(rP
        !           957: .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           958: ..
        !           959: .\" NS Ql macro - Quoted literal is in file mdoc-[dit|n|g]roff (too large
        !           960: .\" an if-else to carry along recursively for `if n ...')
        !           961: .\"
        !           962: .\" NS Sq macro - Enclose string in single quotes
        !           963: .de Qq
        !           964: .if \\n(aC==0 .ds mN Qq
        !           965: .ds qL \&\\*q
        !           966: .ds qR \&\\*q
        !           967: .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           968: ..
        !           969: .\" NS Sq macro - Enclose string in single quotes
        !           970: .de Sq
        !           971: .if \\n(aC==0 .ds mN Sq
        !           972: .ds qL \&\\*(sL
        !           973: .ds qR \&\\*(sR
        !           974: .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           975: ..
        !           976: .\"
        !           977: .\" NS Es macro - Set up strings for .En call
        !           978: .de Es
        !           979: .if \\n(aC==0 \{\
        !           980: .      ie \\n(.$>2 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !           981: .      el \{\
        !           982: .              ds qL \\$1
        !           983: .              ds qR \\$2
        !           984: .      \}
        !           985: .\}
        !           986: .if \\n(aC>\\n(aP \{\
        !           987: .      nr aP \\n(aP+1
        !           988: .      ds qL \\*(A\\n(aP
        !           989: .      nr aP \\n(aP+1
        !           990: .      ds qR \\*(A\\n(aP
        !           991: .      ie \\n(aC>\\n(aP .c\\n(C\\n(aP
        !           992: .      el .aZ
        !           993: .\}
        !           994: ..
        !           995: .\" .tm En beg arg(A[\\n(aP])==\\*(A\\n(aP;
        !           996: .\" .tm En oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC
        !           997: .\" NS En macro - Enclose string with given args (eg [ and ] etc)
        !           998: .\" NS qL string variable set by calling macro
        !           999: .\" NS qR string variable set by calling macro
        !          1000: .\" NS aJ register (for vR)
        !          1001: .de En
        !          1002: .ie \\n(aC==0 \{\
        !          1003: .      ie \\n(.$==0 \{\
        !          1004: .              as b1 \&\\*(qL\\*(qR
        !          1005: .              pB
        !          1006: .      \}
        !          1007: .      el \{\
        !          1008: .\".           as mN (En)
        !          1009: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1010: .              as b1 \&\\*(qL
        !          1011: .      \}
        !          1012: .\}
        !          1013: .el \{\
        !          1014: .      as b1 \&\\*(qL
        !          1015: .\}
        !          1016: .if \\n(aC>0 \{\
        !          1017: .      ie (\\n(aC-\\n(aP)==0 \{\
        !          1018: .              as b1 \&\\*(qR
        !          1019: .              aZ
        !          1020: .      \}
        !          1021: .      el \{\
        !          1022: .              ie \\n(C\\n(aC==3 \{\
        !          1023: .                      nr aJ \\n(aC-1
        !          1024: .                      vR
        !          1025: .                      nr aJ \\n(aJ+1
        !          1026: .                      ds A\\n(aJ \&\\*(qR\\*(A\\n(aJ
        !          1027: .                      nr aJ 0
        !          1028: .              \}
        !          1029: .              el .aI \&\\*(qR 3
        !          1030: .              nr aP \\n(aP+1
        !          1031: .              if \\n(C\\n(aP==1 .\\*(A\\n(aP
        !          1032: .              if \\n(C\\n(aP>1 \{\
        !          1033: .                      nr aP \\n(aP-1
        !          1034: .                      No
        !          1035: .              \}
        !          1036: .      \}
        !          1037: .\}
        !          1038: ..
        !          1039: .\" NS vR macro - vector routine (for En, trace backwards past trail punct)
        !          1040: .de vR
        !          1041: .if \\n(C\\n(aJ==3 \{\
        !          1042: .      nr aJ \\n(aJ-1
        !          1043: .      vR
        !          1044: .\}
        !          1045: ..
        !          1046: .\"------------------------------------------------------------------------
        !          1047: .\" NS Ao macro - Angle open
        !          1048: .de Ao
        !          1049: .if \\n(aC==0 .ds mN Ao
        !          1050: .ds qL \&<
        !          1051: .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1052: ..
        !          1053: .\" NS Ac macro - Angle close
        !          1054: .de Ac
        !          1055: .if \\n(aC==0 .ds mN Ac
        !          1056: .ds qR \&>
        !          1057: .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1058: ..
        !          1059: .\" NS Bo macro - Bracket open
        !          1060: .de Bo
        !          1061: .if \\n(aC==0 .ds mN Bo
        !          1062: .ds qL \&[
        !          1063: .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1064: ..
        !          1065: .\" NS Bc macro - Bracket close
        !          1066: .de Bc
        !          1067: .if \\n(aC==0 .ds mN Bc
        !          1068: .ds qR \&]
        !          1069: .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1070: ..
        !          1071: .\" NS Do macro - Double Quote open
        !          1072: .de Do
        !          1073: .if \\n(aC==0 .ds mN Do
        !          1074: .ds qL \&\\*(Lq
        !          1075: .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1076: ..
        !          1077: .\" NS Dc macro - Double Quote close
        !          1078: .de Dc
        !          1079: .if \\n(aC==0 .ds mN Dc
        !          1080: .ds qR \&\\*(Rq
        !          1081: .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1082: ..
        !          1083: .\" NS Eo macro - Enclose open
        !          1084: .de Eo
        !          1085: .if \\n(aC==0 .ds mN Eo
        !          1086: .ds qL \\$1
        !          1087: .eO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1088: ..
        !          1089: .\" NS Ec macro - Enclose close
        !          1090: .de Ec
        !          1091: .if \\n(aC==0 .ds mN Ec
        !          1092: .ds qR \\$1
        !          1093: .eC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1094: ..
        !          1095: .\" NS Oo macro - Option open
        !          1096: .de Oo
        !          1097: .if \\n(aC==0 .ds mN Oo
        !          1098: .ds qL \&[
        !          1099: .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1100: ..
        !          1101: .\" NS Oc macro - Option close
        !          1102: .de Oc
        !          1103: .if \\n(aC==0 .ds mN Oc
        !          1104: .ds qR \&]
        !          1105: .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1106: ..
        !          1107: .\" NS Po macro - Parenthesis open
        !          1108: .de Po
        !          1109: .if \\n(aC==0 .ds mN Po
        !          1110: .ds qL \&(
        !          1111: .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1112: ..
        !          1113: .\" NS Pc macro - Parenthesis close
        !          1114: .de Pc
        !          1115: .if \\n(aC==0 .ds mN Pc
        !          1116: .ds qR \&)
        !          1117: .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1118: ..
        !          1119: .\" NS Qo macro - Straight Double Quote open
        !          1120: .de Qo
        !          1121: .if \\n(aC==0 .ds mN Qo
        !          1122: .ds qL \&\\*q
        !          1123: .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1124: ..
        !          1125: .\" NS Qc macro - Straight Double Quote close
        !          1126: .de Qc
        !          1127: .if \\n(aC==0 .ds mN Qc
        !          1128: .ds qR \&\\*q
        !          1129: .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1130: ..
        !          1131: .\" NS So macro - Single Quote open
        !          1132: .de So
        !          1133: .if \\n(aC==0 .ds mN So
        !          1134: .ds qL \&\\*(sL
        !          1135: .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1136: ..
        !          1137: .\" NS Sc macro - Single Quote close
        !          1138: .de Sc
        !          1139: .if \\n(aC==0 .ds mN Sc
        !          1140: .ds qR \&\\*(sR
        !          1141: .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1142: ..
        !          1143: .\" NS Xo macro - Extend open (continue)
        !          1144: .de Xo
        !          1145: .if \\n(aC==0 .ds mN Xo
        !          1146: .\" .nr mN 1
        !          1147: .ds qL
        !          1148: .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1149: ..
        !          1150: .\" NS Xe macro - Extend close (end)
        !          1151: .de Xc
        !          1152: .\" .nr mN 0
        !          1153: .if \\n(aC==0 .ds mN Xc
        !          1154: .ds qR
        !          1155: .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1156: ..
        !          1157: .\" NS eO macro - enclose string open
        !          1158: .\" NS oM register (extension possible)
        !          1159: .de eO
        !          1160: .nr oM \\n(oM+1
        !          1161: .\" .tm eO last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ;
        !          1162: .ie \\n(aC==0 \{\
        !          1163: .       ie \\n(.$>0 \{\
        !          1164: .               aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1165: .              as b1 \\*(qL
        !          1166: .       \}
        !          1167: .      el \{\
        !          1168: .              as b1 \\*(qL
        !          1169: .              if (\\n(dZ==0)&(\\n(sM==1) \{\
        !          1170: .                      nr dZ \\n(dZ+1
        !          1171: .                      ds b2 \\*(b1
        !          1172: .                      ds b1
        !          1173: .                      nr lK \\n(.c
        !          1174: .                      ev 2
        !          1175: .                      fi
        !          1176: .                      di eB
        !          1177: .              \}
        !          1178: .      \}
        !          1179: .\}
        !          1180: .el \{\
        !          1181: .      as b1 \\*(qL
        !          1182: .\}
        !          1183: .ie \\n(aC>0 \{\
        !          1184: .      if \\n(aC>\\n(aP \{\
        !          1185: .              nr aP \\n(aP+1
        !          1186: .              ie \\n(C\\n(aP==1 .\\*(A\\n(aP
        !          1187: .              el  \{\
        !          1188: .                      nr aP \\n(aP-1
        !          1189: .                      No
        !          1190: .              \}
        !          1191: .      \}
        !          1192: .      if \\n(aC==\\n(aP \{\
        !          1193: .              if \\n(tP==1 \{\
        !          1194: .\" .tm SETTING Xt!!!
        !          1195: .                      nr Xt 1
        !          1196: .              \}
        !          1197: .\".\" .               ds S0
        !          1198: .\"CHANGED             ds S0 \\*(iV
        !          1199: .              aY
        !          1200: .      \}
        !          1201: .\}
        !          1202: .el \{\
        !          1203: .      if \\n(oM>1 .as b1 \\*(sV
        !          1204: .\}
        !          1205: ..
        !          1206: .\"
        !          1207: .\" NS eC macro - enclose string close
        !          1208: .\" NS aa local register
        !          1209: .de eC
        !          1210: .nr oM \\n(oM-1
        !          1211: .\" tm eC last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ;
        !          1212: .as b1 \\*(qR
        !          1213: .if \\n(aC==0 \{\
        !          1214: .       ie \\n(.$>0 \{\
        !          1215: .               aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1216: .       \}
        !          1217: .      el \{\
        !          1218: .              ie "\\*(xB"" \{\
        !          1219: .                      pB
        !          1220: .              \}
        !          1221: .              el \{\
        !          1222: .                      pB
        !          1223: .\\*(L\\n(lC
        !          1224: .                      nr Xt 0
        !          1225: .                      ds xB
        !          1226: .              \}
        !          1227: .      \}
        !          1228: .\}
        !          1229: .if \\n(aC>0 \{\
        !          1230: .      ie \\n(aC==\\n(aP \{\
        !          1231: .              ie \\n(oM==0 \{\
        !          1232: .                      aZ
        !          1233: .              \}
        !          1234: .              el .aY
        !          1235: .      \}
        !          1236: .      el \{\
        !          1237: .              nr aa \\n(aP+1
        !          1238: .              if \\n(C\\n(aa==2 .as b1 \\*(S\\n(aC
        !          1239: .\" tm CURRENT arg (aP==\\*(A\\n(aP and ap+1==\\*(A\\n(aa) tP==\\n(tP Xt==\\n(Xt
        !          1240: .              rr aa
        !          1241: .              if \\n(tP>0 \{\
        !          1242: .\" tm UNSETTING Xt==\\n(Xt!!!!
        !          1243: .                      if \\n(Xt>0 .nr Xt \\n(Xt-1
        !          1244: .\" tm NOW Xt==\\n(Xt!!!!
        !          1245: .              \}
        !          1246: .              No
        !          1247: .      \}
        !          1248: .\}
        !          1249: ..
        !          1250: .\"------------------------------------------------------------------------
        !          1251: .\" NS Pf macro - Prefix (calls .pF)
        !          1252: .de Pf
        !          1253: .if \\n(aC==0 .ds mN Pf
        !          1254: .ds qL \&\\$1
        !          1255: .pF \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1256: ..
        !          1257: .\" NS pF macro - Prefix (for prefixing open quotes, brackets etc)
        !          1258: .de pF
        !          1259: .ie \\n(aC==0 \{\
        !          1260: .      as b1 \&\\*(qL
        !          1261: .      ie \\n(.$<2 \{\
        !          1262: .              tm Warning: Missing arguments - prefix .Pf)
        !          1263: .              pB
        !          1264: .      \}
        !          1265: .      el .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1266: .\}
        !          1267: .el \{\
        !          1268: .      ie (\\n(aC-\\n(aP)>1 \{\
        !          1269: .              nr aP \\n(aP+1
        !          1270: .              as b1 \&\\*(A\\n(aP
        !          1271: .      \}
        !          1272: .      el .tm Warning: .Pf: trailing prefix (#\\n(.c)
        !          1273: .\}
        !          1274: .if \\n(aC>0 \{\
        !          1275: .      ie (\\n(aC-\\n(aP)==0 .aZ
        !          1276: .      el \{\
        !          1277: .              nr aP \\n(aP+1
        !          1278: .              c\\n(C\\n(aP
        !          1279: .      \}
        !          1280: .\}
        !          1281: ..
        !          1282: .\" NS Ns macro - remove space (space remove done by .aV or .fV)
        !          1283: .de Ns
        !          1284: .if \\n(aC==0 \{\
        !          1285: .      ds mN Ns
        !          1286: .      ie \\n(.$>0 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1287: .      el .tm Usage: .Ns must be called with arguments (#\\n(.c)
        !          1288: .\}
        !          1289: .No
        !          1290: ..
        !          1291: .de Ap
        !          1292: .if \\n(aC==0 \{\
        !          1293: .      ds mN Ap
        !          1294: .      tm Usage: Ap "cannot be first request on a line (no .Ap)" (#\\n(.c)
        !          1295: .\}
        !          1296: .as b1 \&'
        !          1297: .No
        !          1298: ..
        !          1299: .\" NS Hv macro - Hard (unpaddable) Space vector
        !          1300: .\" NS iV string inter-vector space
        !          1301: .\" NS sV string inter-argument space
        !          1302: .de Hv
        !          1303: .ds iV \\*(sV
        !          1304: .ds sV \\*(hV
        !          1305: ..
        !          1306: .\" NS Sv macro - Soft Space vector (troff limitation)
        !          1307: .de Sv
        !          1308: .ds sV \\*(iV
        !          1309: ..
        !          1310: .\" NS Tv macro - Tab Space vector
        !          1311: .de Tv
        !          1312: .ds sV \\*(tV
        !          1313: ..
        !          1314: .\" NS Sm macro - Space mode
        !          1315: .\" NS sM register - default is one (space mode on)
        !          1316: .nr sM 1
        !          1317: .de Sm
        !          1318: .if \\n(aC==0 \{\
        !          1319: .      ie \\n(.$==0 .tm "Usage: .Sm [off | on]" (#\\n(.c)
        !          1320: .      el \{\
        !          1321: .              ds mN Sm
        !          1322: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1323: .      \}
        !          1324: .\}
        !          1325: .if \\n(aC>0 \{\
        !          1326: .      nr aP \\n(aP+1
        !          1327: .      if "\\*(A\\n(aP"on" \{\
        !          1328: .              ds sV \\*(iV
        !          1329: .              nr sM 1
        !          1330: .      \}
        !          1331: .      if "\\*(A\\n(aP"off" \{\
        !          1332: .              ds sV
        !          1333: .              rm S0 S1 S2 S3 S4 S5 S6 S7 S8 S9
        !          1334: .              nr sM 0
        !          1335: .      \}
        !          1336: .      ie \\n(aC>\\n(aP \{\
        !          1337: .              No
        !          1338: .      \}
        !          1339: .      el .aY
        !          1340: .\}
        !          1341: ..
        !          1342: .\"------------------------------------------------------------------------
        !          1343: .\" Size and Argument type macros
        !          1344: .\" NS aT macro - argument type
        !          1345: .\" NS aU macro - argument type (same as .aT but uses A[1-9] strings
        !          1346: .\" NS aT register argument type
        !          1347: .if \n(.g \{\
        !          1348: .de aT
        !          1349: .nr aT 0
        !          1350: .ie \\n(sW>2:(\A'\\$1'==0) \{\
        !          1351: .      nr aT 2
        !          1352: .\}
        !          1353: .el \{\
        !          1354: .      if \\n(sW==1 \{\
        !          1355: .              ie \\n(z\\$1>2 \{\
        !          1356: .                      nr aT \\n(z\\$1
        !          1357: .              \}
        !          1358: .              el .nr aT 2
        !          1359: .      \}
        !          1360: .      if \\n(sW==2 \{\
        !          1361: .              ie \\n(\\$1 \{\
        !          1362: .                      nr aT 1
        !          1363: .              \}
        !          1364: .              el .nr aT 2
        !          1365: .      \}
        !          1366: .\}
        !          1367: ..
        !          1368: .de aU
        !          1369: .nr aT 0
        !          1370: .aW \\$1
        !          1371: .ie \\n(sW>2:(\A'\\*(A\\$1'==0) .nr aT 2
        !          1372: .el \{\
        !          1373: .      if \\n(sW==1 \{\
        !          1374: .              ie \\n(z\\*(A\\$1>2 \{\
        !          1375: .                      nr aT \\n(z\\*(A\\$1
        !          1376: .              \}
        !          1377: .              el .nr aT 2
        !          1378: .      \}
        !          1379: .      if \\n(sW==2 \{\
        !          1380: .              ie (\\n(\\*(A\\$1) \{\
        !          1381: .                      nr aT 1
        !          1382: .              \}
        !          1383: .              el .nr aT 2
        !          1384: .      \}
        !          1385: .\}
        !          1386: ..
        !          1387: .\}
        !          1388: .if !\n(.g \{\
        !          1389: .de aT
        !          1390: .nr aT 0
        !          1391: .ie \\n(sW>2 \{\
        !          1392: .      nr aT 2
        !          1393: .\}
        !          1394: .el \{\
        !          1395: .      if \\n(sW==1 \{\
        !          1396: .              ie \\n(z\\$1>2 \{\
        !          1397: .                      nr aT \\n(z\\$1
        !          1398: .              \}
        !          1399: .              el .nr aT 2
        !          1400: .      \}
        !          1401: .      if \\n(sW==2 \{\
        !          1402: .              ie \\n(\\$1 \{\
        !          1403: .                      nr aT 1
        !          1404: .              \}
        !          1405: .              el .nr aT 2
        !          1406: .      \}
        !          1407: .\}
        !          1408: ..
        !          1409: .de aU
        !          1410: .nr aT 0
        !          1411: .aW \\$1
        !          1412: .ie \\n(sW>2 .nr aT 2
        !          1413: .el \{\
        !          1414: .      if \\n(sW==1 \{\
        !          1415: .              ie \\n(z\\*(A\\$1>2 \{\
        !          1416: .                      nr aT \\n(z\\*(A\\$1
        !          1417: .              \}
        !          1418: .              el .nr aT 2
        !          1419: .      \}
        !          1420: .      if \\n(sW==2 \{\
        !          1421: .              ie (\\n(\\*(A\\$1) \{\
        !          1422: .                      nr aT 1
        !          1423: .              \}
        !          1424: .              el .nr aT 2
        !          1425: .      \}
        !          1426: .\}
        !          1427: ..
        !          1428: .\}
        !          1429: .\" NS s1 macro - set spacing for class type 1
        !          1430: .\" NS s2 macro - set spacing for class type 2
        !          1431: .\" NS s3 macro - set spacing for class type 3
        !          1432: .\" NS s1 macro - set spacing for class type 1
        !          1433: .\" NS s2 macro - set spacing for class type 2
        !          1434: .\" NS s3 macro - set spacing for class type 3
        !          1435: .\" NS s4 macro - set spacing for class type 4
        !          1436: .\" NS S[0-9] string spacing
        !          1437: .\" NS xX local register
        !          1438: .\" NS aa local register
        !          1439: .de s0
        !          1440: .tm MDOC-ERROR: bogus type 0 (can't set space '\\*(A\\n(aC') (#\\n(.c)
        !          1441: ..
        !          1442: .de s1
        !          1443: .if \\n(\\*(A\\n(aC==3 \{\
        !          1444: .      nr xX \\n(aC-1
        !          1445: .      rm S\\n(xX
        !          1446: .      ds S\\n(aC \\*(sV
        !          1447: .\}
        !          1448: .if \\n(\\*(A\\n(aC==2 \{\
        !          1449: .      nr xX \\n(aC-1
        !          1450: .\" this kludge can probably go away, but need to double check first
        !          1451: .      ie "\\*(A\\n(aC"Nb" .ds S\\n(xX \\*(hV
        !          1452: .      el .rm S\\n(xX
        !          1453: .\}
        !          1454: ..
        !          1455: .de s2
        !          1456: .ds S\\n(aC \\*(sV
        !          1457: ..
        !          1458: .de s3
        !          1459: .if \\n(aC>1 \{\
        !          1460: .      nr xX \\n(aC-1
        !          1461: .      rm S\\n(xX
        !          1462: .\}
        !          1463: .ds S\\n(aC \\*(sV
        !          1464: ..
        !          1465: .de s4
        !          1466: .nr aa 0
        !          1467: ..
        !          1468: .\" Class switches (on current argument aP)
        !          1469: .\" NS c0 macro - catch errors (non-existent class type 0)
        !          1470: .\" NS c1 macro - call request if type 1
        !          1471: .\" NS c2 macro - call .No if type 2
        !          1472: .\" NS c3 macro - call .No if type 3
        !          1473: .\" NS c4 macro - call .No if type 4
        !          1474: .de c0
        !          1475: .tm MDOC-ERROR: bogus class 0 (can't determine '\\*(A\\n(aC') (#\\n(.c)
        !          1476: ..
        !          1477: .de c1
        !          1478: .\\*(A\\n(aP
        !          1479: ..
        !          1480: .de c2
        !          1481: .nr aP \\n(aP-1
        !          1482: .No
        !          1483: ..
        !          1484: .de c3
        !          1485: .nr aP \\n(aP-1
        !          1486: .No
        !          1487: ..
        !          1488: .de c4
        !          1489: .nr aP \\n(aP-1
        !          1490: .No
        !          1491: ..
        !          1492: .\" NS y1 macro - ignore if class 1
        !          1493: .\" NS y2 macro - ignore if class 2
        !          1494: .\" NS y3 macro - append if type 3
        !          1495: .\" NS y4 macro - append if type 4
        !          1496: .de y1
        !          1497: .nr aa 1
        !          1498: ..
        !          1499: .de y2
        !          1500: .nr aa 1
        !          1501: ..
        !          1502: .de y3
        !          1503: .as b1 \\*(A\\n(aP
        !          1504: .nr aP \\n(aP+1
        !          1505: .n\\C\\n(aP
        !          1506: ..
        !          1507: .de y4
        !          1508: .as b1 \\*(A\\n(aP
        !          1509: .nr aP \\n(aP+1
        !          1510: .n\\C\\n(aP
        !          1511: ..
        !          1512: .\"--------------------------------------------------------------------------
        !          1513: .\" Ns Bf macro - Begin Font Mode (will be begin-mode/end-mode in groff & TeX)
        !          1514: .\" Ns Ef macro - End Font Mode
        !          1515: .de Bf
        !          1516: .ds mN Bf
        !          1517: .ie \\n(.$>0 \{\
        !          1518: .      nr bF \\n(.f
        !          1519: .      nr bZ \\n(.s
        !          1520: .      if "\\$1"Em" \&\\*(eM\c
        !          1521: .      if "\\$1"Li" \&\\*(lI\c
        !          1522: .      if "\\$1"Sy" \&\\*(sY\c
        !          1523: .      if "\\$1"-emphasis" \&\\*(eM\c
        !          1524: .      if "\\$1"-literal" \&\\*(lI\c
        !          1525: .      if "\\$1"-symbolic" \&\\*(sY\c
        !          1526: .\}
        !          1527: .el .tm Usage .Bf [Em | emphasis | Li | literal | Sy | symbolic] (#\\n(.c)
        !          1528: ..
        !          1529: .de Ef
        !          1530: .ds mN Ef
        !          1531: .ie \\n(.$>0 .tm Usage .Ef (does not take arguments) (#\\n(.c)
        !          1532: .el \&\f\\n(bF\s\\n(bZ
        !          1533: ..
        !          1534: .\" Ns Bk macro - Begin Keep
        !          1535: .\" Ns Ek macro - End Keep
        !          1536: .\" Ns kS string - keep type
        !          1537: .de Bk
        !          1538: .ds mN Bk
        !          1539: .ie \\n(.$==0 \{\
        !          1540: .tm Usage: .Bk [-lines | -words] (#\\n(.c)
        !          1541: .\}
        !          1542: .el \{\
        !          1543: .      if !"\\*(kS"" .tm .Bk: nesting keeps not implemented yet. (#\\n(.c)
        !          1544: .      if "\\$1"-lines" .tm .Bd -lines: Not implemented yet. (#\\n(.c)
        !          1545: .      if "\\$1"-words" .Hv
        !          1546: .      ds kS \\$1
        !          1547: .\}
        !          1548: ..
        !          1549: .de Ek
        !          1550: .ds mN Ek
        !          1551: .ie \\n(.$>0 .tm Usage .Ek (does not take arguments) (#\\n(.c)
        !          1552: .el \{\
        !          1553: .      if "\\*(kS"-lines" .tm .Bd -lines: Not implemented yet. (#\\n(.c)
        !          1554: .      if "\\*(kS"-words" .Sv
        !          1555: .      rm kS
        !          1556: .\}
        !          1557: ..
        !          1558: .\" NS Bd macro - Begin Display display-type [offset string]
        !          1559: .\" NS Ed macro - end Display
        !          1560: .\" NS O[0-9] registers - stack of indent
        !          1561: .\" NS d[0-9] registers - display-type stack
        !          1562: .de Bd
        !          1563: .ds mN Bd
        !          1564: .ie \\n(.$==0 \{\
        !          1565: .tm Usage: .Bd [-literal | -filled | -ragged | -unfilled] [-offset [string]] [-compact] (#\\n(.c)
        !          1566: .\}
        !          1567: .el \{\
        !          1568: .      ds aa
        !          1569: .      nr bV 0
        !          1570: .       nr iD 0
        !          1571: .      nr dP \\n(dP+1
        !          1572: .       if "\\$1"-literal" \{\
        !          1573: .              nr iD \\n(iD+1
        !          1574: .               ds d\\n(dP dL
        !          1575: .              nr cF \\n(.f
        !          1576: .              nr cZ \\n(.s
        !          1577: .              ie t \{\&\\*(lI
        !          1578: '                      ta 9n 18n 27n 36n 45n 54n 63n 72n
        !          1579: .              \}
        !          1580: .              el \{\
        !          1581: '                      ta 8n 16n 24n 32n 40n 48n 56n 64n 72n
        !          1582: .              \}
        !          1583: .              nf
        !          1584: .       \}
        !          1585: .       if "\\$1"-filled" \{\
        !          1586: .              nr iD \\n(iD+1
        !          1587: .               ds d\\n(dP dF
        !          1588: .              br
        !          1589: .       \}
        !          1590: .       if "\\$1"-ragged" \{\
        !          1591: .              nr iD \\n(iD+1
        !          1592: .               ds d\\n(dP dR
        !          1593: .              na
        !          1594: .       \}
        !          1595: .       if "\\$1"-unfilled" \{\
        !          1596: .              nr iD \\n(iD+1
        !          1597: .               ds d\\n(dP dU
        !          1598: .              nf
        !          1599: .       \}
        !          1600: .\" .tm Here is argc: \\n(.$ and here is iD \\n(iD
        !          1601: .       if ((\\n(iD>=1)&(\\n(.$>\\n(iD)) \{\
        !          1602: .              bV \\$2 \\$3 \\$4
        !          1603: .      \}
        !          1604: .      if \\n(O\\n(dP>0 'in \\n(.iu+\\n(O\\n(dPu
        !          1605: .      if (\\n(bV==0) \{\
        !          1606: .              if (\\n(nS==0) \{\
        !          1607: .                      ie "\\*(d\\n(dP"dR" .sp \\n(dVu
        !          1608: .                      el 'sp \\n(dVu
        !          1609: .              \}
        !          1610: .      \}
        !          1611: .      if \\n(cR==0 .ne 2v
        !          1612: .      nr bV 0
        !          1613: .      nr iD 0
        !          1614: .\}
        !          1615: ..
        !          1616: .\" NS bV macro - resolve remaining .Bd arguments
        !          1617: .de bV
        !          1618: .\" .tm in bV with args: \\$1 \\$2 \\$3
        !          1619: .nr iD 1
        !          1620: .ds bY
        !          1621: .if "\\$1"-offset" \{\
        !          1622: .      ds bY \\$2
        !          1623: .      if "\\*(bY"left" \{\
        !          1624: .              nr iD \\n(iD+1
        !          1625: .              nr O\\n(dP 0
        !          1626: .      \}
        !          1627: .      if "\\*(bY"right" \{\
        !          1628: .              nr iD \\n(iD+1
        !          1629: .              nr O\\n(dP (\\n(.l/3)u
        !          1630: .      \}
        !          1631: .      if "\\*(bY"center" \{\
        !          1632: .              nr iD \\n(iD+1
        !          1633: .              nr O\\n(dP (\\n(.l-\\n(.i)/4u
        !          1634: .      \}
        !          1635: .      if "\\*(bY"indent" \{\
        !          1636: .              nr iD \\n(iD+1
        !          1637: .              nr O\\n(dP \\n(dIu
        !          1638: .      \}
        !          1639: .      if "\\*(bY"indent-two" \{\
        !          1640: .              nr iD \\n(iD+1
        !          1641: .              nr O\\n(dP \\n(dIu+\\n(dIu
        !          1642: .      \}
        !          1643: .      if \\n(iD==1 \{\
        !          1644: .              nr iD \\n(iD+1
        !          1645: .              sW "\\*(bY"
        !          1646: .              ie \\n(sW>2 \{\
        !          1647: .                      ie ((\\*(bY>9n)&(\\*(bY<100n)) \{\
        !          1648: .                              nr O\\n(dP \\*(bY
        !          1649: .                      \}
        !          1650: .                      el .nr O\\n(dP (\\n(sW)*\\n(fWu
        !          1651: .              \}
        !          1652: .              el \{\
        !          1653: .                      if \\n(sW==2 .aT \\*(bY
        !          1654: .                      ie \\n(aT==1 \{\
        !          1655: .                              nr O\\n(dP \\n(\\*(bY
        !          1656: .                      \}
        !          1657: .                      el .nr O\\n(dP \\*(bY
        !          1658: .              \}
        !          1659: .      \}
        !          1660: .\}
        !          1661: .if "\\$1"-compact" \{\
        !          1662: .      nr bV 1
        !          1663: .\}
        !          1664: .if \\n(iD<\\n(.$ \{\
        !          1665: .      ie "\\*(bY"" \{\
        !          1666: .              bV \\$2 \\$3
        !          1667: .      \}
        !          1668: .      el \{\
        !          1669: .              bV \\$3
        !          1670: .      \}
        !          1671: .\}
        !          1672: ..
        !          1673: .\" NS Ed macro - end display
        !          1674: .de Ed
        !          1675: .ds mN Ed
        !          1676: .br
        !          1677: .if \\n(dP==0 .tm mdoc: Extraneous .Ed
        !          1678: .if "\\*(d\\n(dP"dL" \{\
        !          1679: .      ft \\n(cF
        !          1680: .      fz \\n(cZ
        !          1681: .\}
        !          1682: .in \\n(.iu-\\n(O\\n(dPu
        !          1683: .rr O\\n(dP
        !          1684: .rm d\\n(dP
        !          1685: .nr dP \\n(dP-1
        !          1686: .fi
        !          1687: .if t .ad
        !          1688: ..
        !          1689: .\"--------------------------------------------------------------------------
        !          1690: .\" NS Bl macro - begin list (.Bl list-type)
        !          1691: .\" NS L[0-9] registers - stack of list types
        !          1692: .de Bl
        !          1693: .ie \\n(.$==0 \{\
        !          1694: .tm Usage: .Bl [[-hang | -tag] [-width]] [ -item | -enum | -bullet | -diag] (#\\n(.c)
        !          1695: .\}
        !          1696: .el \{\
        !          1697: .      ds mN Bl
        !          1698: .      nr aP 0
        !          1699: .      nr lC \\n(lC+1
        !          1700: .      ds A1 \\$2
        !          1701: .      ds A2 \\$3
        !          1702: .      ds A3 \\$4
        !          1703: .      ds A4 \\$5
        !          1704: .      ds A5 \\$6
        !          1705: .      ds A6 \\$7
        !          1706: .      ds A7 \\$8
        !          1707: .      ds A8 \\$9
        !          1708: .      nr fV \\n(.$-1
        !          1709: .      if "\\$1"-hang" \{\
        !          1710: .              nr aP \\n(aP+1
        !          1711: .              ds L\\n(lC hL
        !          1712: .              nr w\\n(lC 6n
        !          1713: .              nr tC  1
        !          1714: .      \}
        !          1715: .      if "\\$1"-tag" \{\
        !          1716: .              nr aP \\n(aP+1
        !          1717: .              ds L\\n(lC tL
        !          1718: .              nr tC  1
        !          1719: .      \}
        !          1720: .      if "\\$1"-item" \{\
        !          1721: .              nr aP \\n(aP+1
        !          1722: .              ds L\\n(lC iT
        !          1723: .              nr tC  1
        !          1724: .      \}
        !          1725: .      if "\\$1"-enum" \{\
        !          1726: .              nr aP \\n(aP+1
        !          1727: .              ds L\\n(lC nU
        !          1728: .              nr w\\n(lC 3n
        !          1729: .              nr tC  1
        !          1730: .      \}
        !          1731: .      if "\\$1"-bullet" \{\
        !          1732: .              nr aP \\n(aP+1
        !          1733: .              ds L\\n(lC bU
        !          1734: .              nr w\\n(lC 2n
        !          1735: .              nr tC  1
        !          1736: .      \}
        !          1737: .      if "\\$1"-dash" \{\
        !          1738: .              nr aP \\n(aP+1
        !          1739: .              ds L\\n(lC hU
        !          1740: .              nr w\\n(lC 2n
        !          1741: .              nr tC  1
        !          1742: .      \}
        !          1743: .      if "\\$1"-hyphen" \{\
        !          1744: .              nr aP \\n(aP+1
        !          1745: .              ds L\\n(lC hU
        !          1746: .              nr w\\n(lC 2n
        !          1747: .              nr tC  1
        !          1748: .      \}
        !          1749: .      if "\\$1"-inset" \{\
        !          1750: .              nr aP \\n(aP+1
        !          1751: .              ds L\\n(lC lL
        !          1752: .              nr tC  1
        !          1753: .      \}
        !          1754: .      if "\\$1"-diag" \{\
        !          1755: .              nr aP \\n(aP+1
        !          1756: .              ds L\\n(lC mL
        !          1757: .              nr mL 1
        !          1758: .      \}
        !          1759: .      if "\\$1"-ohang" \{\
        !          1760: .              nr aP \\n(aP+1
        !          1761: .              ds L\\n(lC oL
        !          1762: .              nr tC 1
        !          1763: .      \}
        !          1764: .      if "\\$1"-column" \{\
        !          1765: .              nr aP \\n(aP+1
        !          1766: .              ds L\\n(lC cL
        !          1767: .      \}
        !          1768: .      ie \\n(aP==0 \{\
        !          1769: .      tm \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          1770: .      tm Usage: .Bl [[-inset|-tag] -width] [-item|-enum|-bullet|-diag] (#\\n(.c)
        !          1771: .      \}
        !          1772: .      el \{\
        !          1773: .              tY
        !          1774: .              if (\\n(aP==1)&(\\n(aP<\\n(.$) \{\
        !          1775: .                      nr aP 0
        !          1776: .                      lV
        !          1777: .                      if "\\*(L\\n(lC"cL" \{\
        !          1778: .                              W\\n(wV
        !          1779: .                              nr w\\n(lC 0
        !          1780: '                              in -\\n(eWu
        !          1781: .                              ie \\n(v\\n(lC==1 \{\
        !          1782: .                                     nr aa 0
        !          1783: .                              \}
        !          1784: .                              el \{\
        !          1785: .                                      sp \\n(dVu
        !          1786: .                              \}
        !          1787: .                              nf
        !          1788: .                              nr wV 0
        !          1789: .                      \}
        !          1790: .              \}
        !          1791: .      \}
        !          1792: .      nr aP 0
        !          1793: .\" .  ds b1
        !          1794: .      aY
        !          1795: .\" .tm Here is L[\\n(lC]==\\*(L\\n(lC
        !          1796: .\}
        !          1797: ..
        !          1798: .if \n(.g \{\
        !          1799: .      nr i 10
        !          1800: .      while \ni<100 \{\
        !          1801: .           nr num!\nin 1
        !          1802: .           nr i +1
        !          1803: .      \}
        !          1804: .\}
        !          1805: .\" NS lV macro - resolve remaining .Bl arguments
        !          1806: .de lV
        !          1807: .nr aP \\n(aP+1
        !          1808: .if \\n(fV>=\\n(aP \{\
        !          1809: .      nr iD 0
        !          1810: .      if "\\*(A\\n(aP"-compact" \{\
        !          1811: .              nr iD 1
        !          1812: .              nr v\\n(lC 1
        !          1813: .      \}
        !          1814: .      if "\\*(A\\n(aP"-width" \{\
        !          1815: .              nr iD 1
        !          1816: .              nr aP \\n(aP+1
        !          1817: .              nr tW 1
        !          1818: .              ds t\\n(lC TagwidtH
        !          1819: .              ds tS \\*(A\\n(aP
        !          1820: .              aW \\n(aP
        !          1821: .              ie \\n(sW>2 \{\
        !          1822: .                      nr w\\n(lC (\\n(sW)*\\n(fWu
        !          1823: .                      if \\n(sW==3 \{\
        !          1824: .                              ie \\n(.g \{\
        !          1825: .                                      if \A'\\*(tS' .if r num!\\*(tS \{\
        !          1826: .                                              nr w\\n(lC \\*(tS
        !          1827: .                                      \}
        !          1828: .                              \}
        !          1829: .                              el \{\
        !          1830: .                                      if (\\*(tS>9n)&(\\*(tS<99n) \{\
        !          1831: .                                              nr w\\n(lC \\*(tSu
        !          1832: .                                      \}
        !          1833: .                              \}
        !          1834: .                      \}
        !          1835: .              \}
        !          1836: .              el \{\
        !          1837: .                      aT \\*(tS
        !          1838: .                      ie \\n(aT==1 \{\
        !          1839: .                              nr w\\n(lC \\n(\\*(tS
        !          1840: .                      \}
        !          1841: .                      el \{\
        !          1842: .                              nr w\\n(lC \\*(tSu
        !          1843: .                      \}
        !          1844: .              \}
        !          1845: .      \}
        !          1846: .      if "\\*(A\\n(aP"-offset" \{\
        !          1847: .              nr iD 1
        !          1848: .              nr aP \\n(aP+1
        !          1849: .              ie "\\*(A\\n(aP"indent" \{\
        !          1850: .                      nr o\\n(lC \\n(Dsu
        !          1851: .              \}
        !          1852: .              el \{\
        !          1853: .                      ds tS \\*(A\\n(aP
        !          1854: .                      aW \\n(aP
        !          1855: .                      ie \\n(sW>2 \{\
        !          1856: .                              nr o\\n(lC (\\n(sW)*\\n(fWu
        !          1857: .                              ie \\n(.g \{\
        !          1858: .                                      if \A'\\*(tS' .if r num!\\*(tS \{\
        !          1859: .                                              nr o\\n(lC \\*(tS
        !          1860: .                                      \}
        !          1861: .                              \}
        !          1862: .                              el \{\
        !          1863: .                                      if (\\*(tS>9n)&(\\*(tS<100n) \{\
        !          1864: .                                              nr o\\n(lC \\*(tS
        !          1865: .                                      \}
        !          1866: .                              \}
        !          1867: .                      \}
        !          1868: .                      el \{\
        !          1869: .                              ie \\n(C\\n(aP==1 .nr o\\n(lC \\n(\\*(tS
        !          1870: .                              el .nr o\\n(lC \\*(tS
        !          1871: .                      \}
        !          1872: .              \}
        !          1873: .      \}
        !          1874: .      if \\n(iD==0 \{\
        !          1875: .              if "\\*(L\\n(lC"cL" \{\
        !          1876: .                      nr wV \\n(wV+1
        !          1877: .                      ds A\\n(wV \\*(A\\n(aP
        !          1878: .              \}
        !          1879: .      \}
        !          1880: .      if \\n(fV>\\n(aP .lV
        !          1881: .\}
        !          1882: ..
        !          1883: .\" NS El macro - end list
        !          1884: .\" NS iD local register
        !          1885: .de El
        !          1886: .ie \\n(.$>0 \{\
        !          1887: .      tm Usage: .El (#\\n(.c)
        !          1888: .\}
        !          1889: .el \{\
        !          1890: .      ds mN El
        !          1891: .      nr iD 0
        !          1892: .      if "\\*(L\\n(lC"cL" \{\
        !          1893: .              nr iD 1
        !          1894: .              cC
        !          1895: .      \}
        !          1896: .      if "\\*(L\\n(lC"nU" \{\
        !          1897: .              nr nU 0
        !          1898: .      \}
        !          1899: .      if \\n(mL>0 \{\
        !          1900: .              nr iD 1
        !          1901: .              nr mL 0
        !          1902: .              tZ
        !          1903: .              nr lC \\n(lC-1
        !          1904: .              tY
        !          1905: .      \}
        !          1906: .      if "\\*(L\\n(lC"iT" \{\
        !          1907: '              in \\n(.iu-\\n(o\\n(lCu
        !          1908: .              tZ
        !          1909: .              nr lC \\n(lC-1
        !          1910: .              tY
        !          1911: .              nr iD 1
        !          1912: .      \}
        !          1913: .      if "\\*(L\\n(lC"oL" \{\
        !          1914: '              in \\n(.iu-\\n(o\\n(lCu
        !          1915: .              tZ
        !          1916: .              nr lC \\n(lC-1
        !          1917: .              tY
        !          1918: .              nr iD 1
        !          1919: .      \}
        !          1920: .      if "\\*(L\\n(lC"lL" \{\
        !          1921: '              in \\n(.iu-\\n(o\\n(lCu
        !          1922: .              tZ
        !          1923: .              nr lC \\n(lC-1
        !          1924: .              tY
        !          1925: .              nr iD 1
        !          1926: .      \}
        !          1927: .      if \\n(iD==0 \{\
        !          1928: .              lE
        !          1929: .      \}
        !          1930: .      br
        !          1931: .      nr iD 0
        !          1932: .\}
        !          1933: ..
        !          1934: .\" NS It macro - list item
        !          1935: .\" NS iD local register
        !          1936: .\" NS aA save pA font string for section FILES (no underline if nroff)
        !          1937: .de It
        !          1938: .if "\\*(L\\n(lC"" \{\
        !          1939: .      tm Usage .Bl -list-type [-width [string] | -compact | -offset [string]] (#\\n(.c)
        !          1940: .      tm .It \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
        !          1941: .\}
        !          1942: .\" .tm Here is L[\\n(lC]==\\*(L\\n(lC
        !          1943: .ne 3v
        !          1944: .ie \\n(.$>0 \{\
        !          1945: .      ds mN It
        !          1946: .      ds b1
        !          1947: .      nr iD 0
        !          1948: .      ds A1 \\$1
        !          1949: .      ds A2 \\$2
        !          1950: .      ds A3 \\$3
        !          1951: .      ds A4 \\$4
        !          1952: .      ds A5 \\$5
        !          1953: .      ds A6 \\$6
        !          1954: .      ds A7 \\$7
        !          1955: .      ds A8 \\$8
        !          1956: .      ds A9 \\$9
        !          1957: .      nr fV \\n(.$
        !          1958: .      if "\\*(L\\n(lC"mL" \{\
        !          1959: .              nr iD 1
        !          1960: .              nr aP 0
        !          1961: .              aX
        !          1962: .              \\*(L\\n(lC
        !          1963: .      \}
        !          1964: .      if "\\*(L\\n(lC"cL" \{\
        !          1965: .              ds b1
        !          1966: .              nr aP 0
        !          1967: .              nr iD 1
        !          1968: .              \\*(L\\n(lC
        !          1969: .      \}
        !          1970: .      if "\\*(L\\n(lC"iT" \{\
        !          1971: .              nr aP 0
        !          1972: .              nr iD 1
        !          1973: .              \\*(L\\n(lC
        !          1974: .      \}
        !          1975: .      if \\n(iD==0 \{\
        !          1976: .              fV
        !          1977: .\" tm ------------------------------------------------------------------------
        !          1978: .\" tm It list-type==\\*(L\\n(lC, aP==\\n(aP
        !          1979: .\" tm It beg arg(A[1])==\\*(A1; oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC
        !          1980: .              nr oM \\n(oM+1
        !          1981: .              nr tP 1
        !          1982: .              nr aP \\n(aP+1
        !          1983: .              nr tX \\n(C\\n(aP
        !          1984: .              ds tX \\*(A\\n(aP
        !          1985: .              if \\n(nF==1 \{\
        !          1986: .                      ds aA \\*(pA
        !          1987: .                      if n .ds pA \\*(nO
        !          1988: .              \}
        !          1989: .              ie \\n(C\\n(aP==1 \{\
        !          1990: .                      \\*(A\\n(aP
        !          1991: .              \}
        !          1992: .              el \{\
        !          1993: .                      nr aP \\n(aP-1
        !          1994: .                      No
        !          1995: .              \}
        !          1996: .\" tm in It here is b1==\\*(b1
        !          1997: .\" tm It mid arg(A[1])==\\*(A1; oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC
        !          1998: .              ie \\n(Xt==1 .ds xB \&\\*(L\\n(lC
        !          1999: .              el .\\*(L\\n(lC
        !          2000: .      \}
        !          2001: .      nr iD 0
        !          2002: .\}
        !          2003: .el .\\*(L\\n(lC
        !          2004: ..
        !          2005: .\" NS lL macro - .It item of list-type inset
        !          2006: .de lL
        !          2007: .lY
        !          2008: .br
        !          2009: \&\\*(b1
        !          2010: .nr oM \\n(oM-1
        !          2011: .nr tP 0
        !          2012: .ds b1
        !          2013: .aY
        !          2014: 'fi
        !          2015: ..
        !          2016: .\" NS hL macro - .It item of list-type hanging label (as opposed to tagged)
        !          2017: .de hL
        !          2018: .lX
        !          2019: .nr bb \\n(w\\n(lCu+\\n(lSu
        !          2020: .ti -\\n(bbu
        !          2021: .ie \w\\*(b1u>=(\\n(w\\n(lCu) \&\\*(b1
        !          2022: .el \&\\*(b1\h'|\\n(bbu'\c
        !          2023: .nr oM \\n(oM-1
        !          2024: .ds b1
        !          2025: .nr tP 0
        !          2026: .aY
        !          2027: 'fi
        !          2028: ..
        !          2029: .\" NS oL macro - .It item of list-type overhanging label
        !          2030: .de oL
        !          2031: .lY
        !          2032: \&\\*(b1
        !          2033: .br
        !          2034: .nr oM \\n(oM-1
        !          2035: .ds b1
        !          2036: .nr tP 0
        !          2037: .aY
        !          2038: 'fi
        !          2039: ..
        !          2040: .\" NS iT macro - .It item of list-type [empty label]
        !          2041: .de iT
        !          2042: .lY
        !          2043: .br
        !          2044: .\" .ds b1
        !          2045: .aY
        !          2046: 'fi
        !          2047: ..
        !          2048: .\" NS nU macro - Enumerated list
        !          2049: .\" NS nU register count
        !          2050: .\" NS hU macro - Hyphen paragraph list (sub bullet list)
        !          2051: .\" NS bU macro - Bullet paragraph list
        !          2052: .de nU
        !          2053: .nr oM \\n(oM+1
        !          2054: .nr nU \\n(nU+1
        !          2055: .ds b1 \&\\n(nU.
        !          2056: .uL
        !          2057: ..
        !          2058: .de bU
        !          2059: .nr oM \\n(oM+1
        !          2060: .nr bU \\n(bU+1
        !          2061: .ds b1 \&\\*(sY\&\(bu\fP
        !          2062: .uL
        !          2063: ..
        !          2064: .de hU
        !          2065: .nr oM \\n(oM+1
        !          2066: .nr bU \\n(bU+1
        !          2067: .ds b1 \&\\*(sY\&\-\fP
        !          2068: .uL
        !          2069: ..
        !          2070: .\" NS uL macro - .It item of list-type enum/bullet/hyphen
        !          2071: .de uL
        !          2072: .lX
        !          2073: .nr bb \\n(w\\n(lCu+\\n(lSu
        !          2074: .ti -\\n(bbu
        !          2075: .ie \w\\*(b1u>=(\\n(w\\n(lCu) \&\\*(b1
        !          2076: .el \&\\*(b1\h'|\\n(bbu'\c
        !          2077: .nr oM \\n(oM-1
        !          2078: .\" .nr dZ \\n(dZ+1
        !          2079: .ds b1
        !          2080: .nr tP 0
        !          2081: .aY
        !          2082: 'fi
        !          2083: ..
        !          2084: .\" NS mL macro - .It item of list-type diagnostic-message
        !          2085: .de mL
        !          2086: .nr cF \\n(.f
        !          2087: .nr cZ \\n(.s
        !          2088: .ie \\n(mL==1 \{\
        !          2089: .      nr zB \\n(.c
        !          2090: .      ie (\\n(zB-\\n(zA)>1 .Pp
        !          2091: .      el .br
        !          2092: .      nr zA \\n(zB
        !          2093: .      nr zB 0
        !          2094: .\}
        !          2095: .el \{\
        !          2096: .      nr zA \\n(.c
        !          2097: .      br
        !          2098: .\}
        !          2099: \&\\*(sY\\*(b1\f\\n(cF\s\\n(cZ\\*(lS\c
        !          2100: .aY
        !          2101: .ds b1
        !          2102: 'fi
        !          2103: ..
        !          2104: .\" NS tL macro - .It item of list-type "tag"
        !          2105: .de tL
        !          2106: .\" tm in tL here is b1==\\*(b1
        !          2107: .if \\n(tW==0 .lW
        !          2108: .lX
        !          2109: .nr bb \\n(w\\n(lCu+\\n(lSu
        !          2110: .ti -\\n(bbu
        !          2111: .ie (\w\\*(b1u)>(\\n(w\\n(lCu) \{\&\\*(b1
        !          2112: .       br
        !          2113: .\}
        !          2114: .el \&\\*(b1\h'|\\n(bbu'\c
        !          2115: .if \\n(nF==1 \{\
        !          2116: .      if n .ds pA \\*(aA
        !          2117: .\}
        !          2118: .nr oM \\n(oM-1
        !          2119: .nr tP 0
        !          2120: .\" .nr dZ \\n(dZ+1
        !          2121: .ds b1
        !          2122: .aY
        !          2123: 'fi
        !          2124: ..
        !          2125: .\" NS lW macro - resolve unknown label/tag width (if .Bl [inset | tag] only)
        !          2126: .de lW
        !          2127: .if !"TagwidtH"\\*(t\\n(lC" \{\
        !          2128: .       ie \\n(tX==1 \{\
        !          2129: .               ds t\\n(lN \\*(tX
        !          2130: .               nr w\\n(lN \\n(\\*(tX
        !          2131: .       \}
        !          2132: .       el \{\
        !          2133: .               ds t\\n(lN No
        !          2134: .               nr w\\n(lN \\n(No
        !          2135: .       \}
        !          2136: .       if !"\\*(t\\n(lC"\\*(t\\n(lN" .nr tC 1
        !          2137: .\}
        !          2138: ..
        !          2139: .\" NS lX macro - set up vertical spacing (if compact) and offset+indent (all)
        !          2140: .de lX
        !          2141: .ie \\n(tC \{\
        !          2142: .       nr tC 0
        !          2143: .       nr tW 0
        !          2144: .       if \\n(v\\n(lC==0 .sp \\n(dVu
        !          2145: .       in \\n(.iu+\\n(w\\n(lCu+\\n(o\\n(lCu+\\n(lSu
        !          2146: .\}
        !          2147: .el \{\
        !          2148: .      ie \\n(v\\n(lC==1 \{\
        !          2149: .             nr aa 0
        !          2150: .      \}
        !          2151: .      el \{\
        !          2152: .              sp \\n(dVu
        !          2153: .      \}
        !          2154: .\}
        !          2155: .if !\\n(cR .ne 2v
        !          2156: ..
        !          2157: .\" NS lY macro - set up vertical spacing (if compact) and offset+indent (all)
        !          2158: .de lY
        !          2159: .ie \\n(tC \{\
        !          2160: .       nr tC 0
        !          2161: .       nr tW 0
        !          2162: .       if \\n(v\\n(lC==0 .sp \\n(dVu
        !          2163: .       in \\n(.iu+\\n(o\\n(lCu
        !          2164: .\}
        !          2165: .el \{\
        !          2166: .      ie \\n(v\\n(lC==1 \{\
        !          2167: .             nr aa 0
        !          2168: .      \}
        !          2169: .      el \{\
        !          2170: .              sp \\n(dVu
        !          2171: .      \}
        !          2172: .\}
        !          2173: .if !\\n(cR .ne 2v
        !          2174: ..
        !          2175: .\" NS tS temporary string
        !          2176: .\" NS hL macro - hanging list function
        !          2177: .\" NS tS temporary string
        !          2178: .\" NS hL macro - hanging list function
        !          2179: .\" NS lT macro - tagged list function
        !          2180: .\" NS lE macro - list end function
        !          2181: .\" NS tX string (initial string)
        !          2182: .\" NS tX register (initial class)
        !          2183: .\" NS tC parameter change flag
        !          2184: .\" NS Xt save current list-type flag
        !          2185: .\" NS lC register - list type stack counter
        !          2186: .\" NS tP register tag flag (for diversions)
        !          2187: .\" NS w[0-9] register tag stack (nested tags)
        !          2188: .\" NS t[0-9] register tag string stack (nested tags)
        !          2189: .\" NS o[0-9] register offset stack (nested tags)
        !          2190: .\" NS v[0-9] register vertical tag break stack
        !          2191: .\" NS h[0-9] register horizontal tag stack (continuous if 1, break if 0)
        !          2192: .nr lC 0
        !          2193: .nr wV 0
        !          2194: .nr w1 0
        !          2195: .nr o1 0
        !          2196: .nr v1 0
        !          2197: .nr h1 0
        !          2198: .ds t\n(lC
        !          2199: .de lE
        !          2200: .\" IN lC o[\\n(lC]==\\n(o\\n(lC, w[\\n(lC]==\\n(w\\n(lC,
        !          2201: .ie \\n(o\\n(lC>0 \{\
        !          2202: '      in \\n(.iu-(\\n(w\\n(lCu)-(\\n(o\\n(lCu)-\\n(lSu
        !          2203: .      rr o\\n(lC
        !          2204: .\}
        !          2205: .el 'in \\n(.iu-\\n(w\\n(lCu-\\n(lSu
        !          2206: .if \\n(lC<=0 .tm Extraneous .El call (#\\n(.c)
        !          2207: .tZ
        !          2208: .nr lC \\n(lC-1
        !          2209: .tY
        !          2210: ..
        !          2211: .\" NS tY macro - set up next block for list
        !          2212: .\" NS tZ macro - decrement stack
        !          2213: .\" NS tY register (next possible lC value)
        !          2214: .de tY
        !          2215: .nr tY (\\n(lC+1)
        !          2216: .nr w\\n(tY 0
        !          2217: .nr h\\n(tY 0
        !          2218: .nr o\\n(tY 0
        !          2219: .ds t\\n(tY \\*(t\\n(lC
        !          2220: .ds L\\n(tY
        !          2221: .nr v\\n(tY 0
        !          2222: ..
        !          2223: .de tZ
        !          2224: .rm L\\n(tY
        !          2225: .rr w\\n(tY
        !          2226: .rr h\\n(tY
        !          2227: .rr o\\n(tY
        !          2228: .rm t\\n(tY
        !          2229: .rr v\\n(tY
        !          2230: .nr tY \\n(tY-1
        !          2231: ..
        !          2232: .\" initial values
        !          2233: .nr w1 0
        !          2234: .nr o1 0
        !          2235: .nr h1 0
        !          2236: .ds t1
        !          2237: .nr v1 0
        !          2238: .nr tY 1
        !          2239: .\" NS Xr macro - cross reference (man page only)
        !          2240: .de Xr
        !          2241: .if \\n(aC==0 \{\
        !          2242: .      ie \\n(.$==0 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c)
        !          2243: .      el \{\
        !          2244: .              ds mN Xr
        !          2245: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          2246: .      \}
        !          2247: .\}
        !          2248: .if \\n(aC>\\n(aP \{\
        !          2249: .      nr aP \\n(aP+1
        !          2250: .      ie \\n(C\\n(aP==1 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c)
        !          2251: .      el \{\
        !          2252: .              ie \\n(C\\n(aP>2 .y\\n(C\\n(aP
        !          2253: .              el \{\
        !          2254: .                      as b1 \&\\*(xR\\*(A\\n(aP\fP\s0
        !          2255: .                      if \\n(aC>\\n(aP \{\
        !          2256: .                              nr aP \\n(aP+1
        !          2257: .                              if \\n(C\\n(aP==2 \{\
        !          2258: .                                      as b1 \&(\\*(A\\n(aP)
        !          2259: .                                      nr aP \\n(aP+1
        !          2260: .                              \}
        !          2261: .                              if \\n(aC>=\\n(aP \{\
        !          2262: .                                      c\\n(C\\n(aP
        !          2263: .                              \}
        !          2264: .                      \}
        !          2265: .              \}
        !          2266: .              aZ
        !          2267: .       \}
        !          2268: .\}
        !          2269: ..
        !          2270: .\" NS Sx macro - cross section reference
        !          2271: .de Sx
        !          2272: .if \\n(aC==0 \{\
        !          2273: .      ie \\n(.$==0 .tm Sx Usage: .Sx Section Header \\*(Pu (#\\n(.c)
        !          2274: .      el \{\
        !          2275: .              ds mN Sx
        !          2276: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          2277: .      \}
        !          2278: .\}
        !          2279: .\}
        !          2280: .if \\n(aC>\\n(aP \{\
        !          2281: .      nr aP \\n(aP+1
        !          2282: .      as b1 \\*(sX
        !          2283: .      nr cF \\n(.f
        !          2284: .      nr cZ \\n(.s
        !          2285: .      nR
        !          2286: .\}
        !          2287: ..
        !          2288: .\" NS cC macro - column-list end-list
        !          2289: .\" NS eW macro - column indent width
        !          2290: .\" NS cI register - column indent width
        !          2291: .\" NS W[1-5] macro - establish tabs for list-type column
        !          2292: .de cC
        !          2293: 'in \\n(.iu-\\n(o\\n(lCu-\\n(w\\n(lCu
        !          2294: .ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
        !          2295: .fi
        !          2296: .tZ
        !          2297: .nr lC \\n(lC-1
        !          2298: .tY
        !          2299: ..
        !          2300: .de W1
        !          2301: .ta \w\\*(A1    u
        !          2302: .nr eW \w\\*(A1    u
        !          2303: 'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
        !          2304: ..
        !          2305: .de W2
        !          2306: .ta \w\\*(A1    u +\w\\*(A2    u
        !          2307: .nr eW \w\\*(A1    u+\w\\*(A2    u
        !          2308: 'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
        !          2309: ..
        !          2310: .de W3
        !          2311: .ta \w\\*(A1    u +\w\\*(A2    u +\w\\*(A3    u
        !          2312: .nr eW \w\\*(A1    u+\w\\*(A2    u+\w\\*(A3    u
        !          2313: 'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
        !          2314: ..
        !          2315: .de W4
        !          2316: .ta \w\\*(A1    u +\w\\*(A2    u +\w\\*(A3    u +\w\\*(A4    u
        !          2317: .nr eW \w\\*(A1    u+\w\\*(A2    u +\w\\*(A3    u +\w\\*(A4    u
        !          2318: 'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
        !          2319: ..
        !          2320: .de W5
        !          2321: .ta \w\\*(A1   u +\w\\*(A2   u +\w\\*(A3   u +\w\\*(A4   u +\w\\*(A5   u
        !          2322: .nr eW \w\\*(A1   u +\w\\*(A2   u +\w\\*(A3   u +\w\\*(A4   u +\w\\*(A5   u
        !          2323: '      in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
        !          2324: ..
        !          2325: .\" This is packed abnormally close, intercol width should be an option
        !          2326: .de W6
        !          2327: .ta \w\\*(A1 u +\w\\*(A2 u +\w\\*(A3 u +\w\\*(A4 u +\w\\*(A5 u +\w\\*(A6
        !          2328: .nr eW \w\\*(A1 u +\w\\*(A2 u +\w\\*(A3 u +\w\\*(A4 u +\w\\*(A5 u +\w\\*(A6
        !          2329: '      in \\n(.iu+\\n(eWu+\\n(o\\n(lCu
        !          2330: ..
        !          2331: .\" NS cL macro - column items
        !          2332: .de cL
        !          2333: .if \\n(w\\n(lC==0 .nr w\\n(lC \\n(eWu
        !          2334: .if \\n(.u==0 \{\
        !          2335: .      fi
        !          2336: '      in \\n(.iu+\\n(eWu
        !          2337: .\}
        !          2338: .ti -\\n(eWu
        !          2339: .fV
        !          2340: .nr aP \\n(aP+1
        !          2341: .ie \\n(aC>=\\n(aP  \{\
        !          2342: .      if "\\*(A\\n(aP"Ta" \{\
        !          2343: .              nr jJ \\n(aP-1
        !          2344: .              rm S\\n(jJ
        !          2345: .              rr jJ
        !          2346: .      \}
        !          2347: .      c\\n(C\\n(aP
        !          2348: .\}
        !          2349: .el .tm Usage: .It column_string [Ta [column_string ...] ] (#\\n(.c)
        !          2350: ..
        !          2351: .\" NS Ta macro - append tab (\t)
        !          2352: .de Ta
        !          2353: .ie \\n(aC>0 \{\
        !          2354: .      nr aP \\n(aP+1
        !          2355: .      ie \\n(aC>=\\n(aP \{\
        !          2356: .              if "\\*(A\\n(aP"Ta" \{\
        !          2357: .                      nr jJ \\n(aP-1
        !          2358: .                      rm S\\n(jJ
        !          2359: .                      rr jJ
        !          2360: .              \}
        !          2361: .              as b1 \\t
        !          2362: .              c\\n(C\\n(aP
        !          2363: .      \}
        !          2364: .      el \{\
        !          2365: .              as b1 \\t\\c
        !          2366: .              rm S\\n(aP
        !          2367: .              pB
        !          2368: .              aY
        !          2369: .\" .          ds b1
        !          2370: .      \}
        !          2371: .\}
        !          2372: .el \{\
        !          2373: .      tm Usage: Ta must follow column entry: e.g. (#\\n(.c)
        !          2374: .      tm .It column_string [Ta [column_string ...] ]
        !          2375: .\}
        !          2376: ..
        !          2377: .\"
        !          2378: .\" NS Dl macro - display (one line) literal
        !          2379: .de Dl
        !          2380: 'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
        !          2381: .in \\n(.iu+\\n(Dsu
        !          2382: .ie \\n(aC==0 \{\
        !          2383: .      ie \\n(.$==0 \{\
        !          2384: .              tm Usage: .Dl argument ... (#\\n(.c)
        !          2385: .      \}
        !          2386: .      el \{\
        !          2387: .              ds mN Dl
        !          2388: .               ds A1 \\$1
        !          2389: .               ds A2 \\$2
        !          2390: .               ds A3 \\$3
        !          2391: .               ds A4 \\$4
        !          2392: .               ds A5 \\$5
        !          2393: .               ds A6 \\$6
        !          2394: .               ds A7 \\$7
        !          2395: .               ds A8 \\$8
        !          2396: .               ds A9 \\$9
        !          2397: .              nr fV \\n(.$
        !          2398: .              fV
        !          2399: .              Li
        !          2400: .      \}
        !          2401: .\}
        !          2402: .el \{\
        !          2403: .      tm Usage: .Dl not callable by other macros (#\\n(.c)
        !          2404: .\}
        !          2405: .in \\n(.iu-\\n(Dsu
        !          2406: ..
        !          2407: .\"
        !          2408: .\" NS D1 macro - display (one line)
        !          2409: .de D1
        !          2410: 'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
        !          2411: .in \\n(.iu+\\n(Dsu
        !          2412: .ie \\n(aC==0 \{\
        !          2413: .      ie \\n(.$==0 \{\
        !          2414: .              tm Usage: .D1 argument ... (#\\n(.c)
        !          2415: .      \}
        !          2416: .      el \{\
        !          2417: .              ds mN D1
        !          2418: .               ds A1 \\$1
        !          2419: .               ds A2 \\$2
        !          2420: .               ds A3 \\$3
        !          2421: .               ds A4 \\$4
        !          2422: .               ds A5 \\$5
        !          2423: .               ds A6 \\$6
        !          2424: .               ds A7 \\$7
        !          2425: .               ds A8 \\$8
        !          2426: .               ds A9 \\$9
        !          2427: .              nr fV \\n(.$
        !          2428: .              fV
        !          2429: .              nr aP \\n(aP+1
        !          2430: .              ie \\n(C\\n(aP==1 .\\*(A\\n(aP
        !          2431: .              el .No
        !          2432: .      \}
        !          2433: .\}
        !          2434: .el \{\
        !          2435: .      tm Usage: .D1 not callable by other macros (#\\n(.c)
        !          2436: .\}
        !          2437: .in \\n(.iu-\\n(Dsu
        !          2438: ..
        !          2439: .\" NS Ex macro - DEFUNCT
        !          2440: .de Ex
        !          2441: .tm Ex defunct, Use .D1: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          2442: ..
        !          2443: .\"
        !          2444: .\" NS Ex macro - DEFUNCT
        !          2445: .de Ex
        !          2446: .tm Ex defunct, Use .D1: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          2447: ..
        !          2448: .\"
        !          2449: .\" NS Vt macro - Variable type (for forcing old style variable declarations)
        !          2450: .\" this is not done in the same manner as .Ot for fortrash - clean up later
        !          2451: .de Vt
        !          2452: .\" if a function declaration was the last thing given, want vertical space
        !          2453: .if \\n(fD>0 \{\
        !          2454: .      Pp
        !          2455: .      nr fD 0
        !          2456: .\}
        !          2457: .\"    if a subroutine was the last thing given, want vertical space
        !          2458: .if \\n(fZ>0 \{\
        !          2459: .      ie \\n(fX==0 \{\
        !          2460: .              Pp
        !          2461: .              rs
        !          2462: .      \}
        !          2463: .      el .br
        !          2464: .\}
        !          2465: .nr fX \\n(fX+1
        !          2466: .nr cF \\n(.f
        !          2467: .nr cZ \\n(.s
        !          2468: \\*(fT\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          2469: .ie \\n(oT==0 .br
        !          2470: .el \&\ \&
        !          2471: .ft \\n(cF
        !          2472: .fs \\n(cZ
        !          2473: ..
        !          2474: .\"
        !          2475: .\" NS Ft macro - Function type
        !          2476: .nr fZ 0
        !          2477: .de Ft
        !          2478: .if \\n(nS>0 \{\
        !          2479: .      if \\n(fZ>0 \{\
        !          2480: .              Pp
        !          2481: .              nr fD 0
        !          2482: .              nr fX 0
        !          2483: .      \}
        !          2484: .      if \\n(fD>0 \{\
        !          2485: .              Pp
        !          2486: .              nr fD 0
        !          2487: .              nr fX 0
        !          2488: .      \}
        !          2489: .      if \\n(fX>0 \{\
        !          2490: .              Pp
        !          2491: .              nr fX 0
        !          2492: .      \}
        !          2493: .      nr fY 1
        !          2494: .\}
        !          2495: .nr cF \\n(.f
        !          2496: .nr cZ \\n(.s
        !          2497: \&\\*(fT\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          2498: .ft \\n(cF
        !          2499: .fs \\n(cZ
        !          2500: .\" .br
        !          2501: ..
        !          2502: .\"
        !          2503: .\" NS Ot macro - Old Function type (fortran - no newline)
        !          2504: .\" Ns oT register
        !          2505: .nr oT 0
        !          2506: .de Ot
        !          2507: .nr oT 1
        !          2508: .if \\n(nS>0 \{\
        !          2509: .      if \\n(fZ>0 \{\
        !          2510: .              Pp
        !          2511: .              nr fD 0
        !          2512: .              nr fX 0
        !          2513: .      \}
        !          2514: .      if \\n(fD>0 \{\
        !          2515: .              Pp
        !          2516: .              nr fD 0
        !          2517: .              nr fX 0
        !          2518: .      \}
        !          2519: .      if \\n(fX>0 \{\
        !          2520: .              Pp
        !          2521: .              nr fX 0
        !          2522: .      \}
        !          2523: .      nr fY 1
        !          2524: .\}
        !          2525: .if \\n(.$==4 .as b1 \&\\*(fT\&\\$1 \\$2 \\$3 \\$4
        !          2526: .if \\n(.$==3 .as b1 \&\\*(fT\&\\$1 \\$2 \\$3
        !          2527: .if \\n(.$==2 .as b1 \&\\*(fT\&\\$1 \\$2
        !          2528: .if \\n(.$==1 .as b1 \&\\*(fT\&\\$1
        !          2529: .as b1 \&\ \fP
        !          2530: ..
        !          2531: .\"
        !          2532: .\" NS Fa macro - Function arguments
        !          2533: .de Fa
        !          2534: .if \\n(aC==0 \{\
        !          2535: .       ie \\n(.$==0 .tm Usage: .Fa Function Arguments ... \\*(Pu (#\\n(.c)
        !          2536: .       el \{\
        !          2537: .              ds mN Fa
        !          2538: .               ds A1 \\$1
        !          2539: .               ds A2 \\$2
        !          2540: .               ds A3 \\$3
        !          2541: .               ds A4 \\$4
        !          2542: .               ds A5 \\$5
        !          2543: .               ds A6 \\$6
        !          2544: .               ds A7 \\$7
        !          2545: .               ds A8 \\$8
        !          2546: .               ds A9 \\$9
        !          2547: .              nr fV \\n(.$
        !          2548: .              fV
        !          2549: .      \}
        !          2550: .\}
        !          2551: .ie \\n(fC>0 \{\
        !          2552: .      fC
        !          2553: .\}
        !          2554: .el \{\
        !          2555: .      if \\n(aC>\\n(aP \{\
        !          2556: .              as b1 \\*(fA
        !          2557: .              nr aP \\n(aP+1
        !          2558: .              nr cF \\n(.f
        !          2559: .              nr cZ \\n(.s
        !          2560: .              nR
        !          2561: .              if \\n(nS>0 \{\
        !          2562: .                      if \\n(fZ>0 .br
        !          2563: .              \}
        !          2564: .      \}
        !          2565: .\}
        !          2566: ..
        !          2567: .\" NS fC macro - interal .Fa for .FO and .Fc
        !          2568: .de fC
        !          2569: .ie \\n(aC>\\n(aP \{\
        !          2570: .      nr aP \\n(aP+1
        !          2571: .\" .  nr aa \\n(aP
        !          2572: .\" .  if \\n(nS>0 \{\
        !          2573: .              ds Fb
        !          2574: .              nr fB 0
        !          2575: .              nr Fb 0
        !          2576: .              fB \\*(A\\n(aP
        !          2577: .              if \\n(fB>1 \{\
        !          2578: .                      rm A\\n(aP
        !          2579: .                      rn Fb A\\n(aP
        !          2580: .              \}
        !          2581: .\" .  \}
        !          2582: .      if \\n(fC>1 \{\
        !          2583: .              as b1 \&\f\\n(cF\s\\n(cZ,\\*(S\\n(aP\\*(fA\\*(A\\n(aP\fP\s0
        !          2584: .\" .          as b1 \&\\,\\*(S\\n(aP\fP\s0\\*(fA\\*(A\\n(aP\fP\s0
        !          2585: .      \}
        !          2586: .      if \\n(fC==1 \{\
        !          2587: .              as b1 \&\|\\*(fA\\*(A\\n(aP\fP\s0
        !          2588: .      \}
        !          2589: .      nr fC \\n(fC+1
        !          2590: .      fC
        !          2591: .\}
        !          2592: .el  \{\
        !          2593: .      aY
        !          2594: .\}
        !          2595: ..
        !          2596: .\" NS Fn macro - functions
        !          2597: .\" NS fY register - dick with old style function declarations (fortran)
        !          2598: .\" NS fZ register - break a line when more than one function in a synopsis
        !          2599: .\"
        !          2600: .de Fn
        !          2601: .if \\n(aC==0 \{\
        !          2602: .      ie \\n(.$==0 .tm Usage: .Fn function_name function_arg(s) ... \\*(Pu (#\\n(.c)
        !          2603: .      el \{\
        !          2604: .              ds mN Fn
        !          2605: .               ds A1 \\$1
        !          2606: .               ds A2 \\$2
        !          2607: .               ds A3 \\$3
        !          2608: .               ds A4 \\$4
        !          2609: .               ds A5 \\$5
        !          2610: .               ds A6 \\$6
        !          2611: .               ds A7 \\$7
        !          2612: .               ds A8 \\$8
        !          2613: .               ds A9 \\$9
        !          2614: .              nr fV \\n(.$
        !          2615: .              fV
        !          2616: .      \}
        !          2617: .\}
        !          2618: .if \\n(nS>0 \{\
        !          2619: .\" if there is/has been more than one subroutine declaration
        !          2620: .      if \\n(fY==0 \{\
        !          2621: .              if \\n(fZ>0 \{\
        !          2622: .                      Pp
        !          2623: .                      nr fX 0
        !          2624: .                      nr fD 0
        !          2625: .              \}
        !          2626: .      \}
        !          2627: .      if \\n(fY==1 \{\
        !          2628: .              br
        !          2629: .              nr fX 0
        !          2630: .              nr fD 0
        !          2631: .              nr fY 0
        !          2632: .      \}
        !          2633: .      if \\n(fD>0 \{\
        !          2634: .              Pp
        !          2635: .              nr fX 0
        !          2636: .      \}
        !          2637: .      if \\n(fX>0 \{\
        !          2638: .              Pp
        !          2639: .              nr fD 0
        !          2640: .      \}
        !          2641: .      nr fZ \\n(fZ+1
        !          2642: .      nr fY 0
        !          2643: .      rs
        !          2644: .      ie \\n(nS>1 .br
        !          2645: .      el \{\
        !          2646: .              if \\n(iS==0 \{\
        !          2647: .                      nr iS ((8)*\\n(fW)u
        !          2648: .              \}
        !          2649: .      \}
        !          2650: .      in +\\n(iSu
        !          2651: .      ti -\\n(iSu
        !          2652: .      nr nS \\n(nS+1
        !          2653: .\}
        !          2654: .if \\n(aC>\\n(aP \{\
        !          2655: .      nr aP \\n(aP+1
        !          2656: .      nr cF \\n(.f
        !          2657: .      nr cZ \\n(.s
        !          2658: .      as b1 \\*(fN\\*(A\\n(aP\fP\s0\\*(lp
        !          2659: .      ie \\n(aC>\\n(aP \{\
        !          2660: .              as b1 \\*(fA
        !          2661: .              nr aP \\n(aP+1
        !          2662: .              f\\n(C\\n(aP
        !          2663: .      \}
        !          2664: .      el \{\
        !          2665: .              as b1 \|\\*(rp
        !          2666: .              aZ
        !          2667: .      \}
        !          2668: .      if \\n(nS>0 \{\
        !          2669: .              in -\\n(iSu
        !          2670: .      \}
        !          2671: .\}
        !          2672: ..
        !          2673: .\"
        !          2674: .\" NS f1 macro - class switch
        !          2675: .\" NS f2 macro - handle function arguments
        !          2676: .\" NS f3 macro - punctuation
        !          2677: .\" NS f4 macro - write out function
        !          2678: .de f1
        !          2679: .as b1 \\*(rp\f\\n(cF\s\\n(cZ
        !          2680: .\\*(A\\n(aP
        !          2681: ..
        !          2682: .de f2
        !          2683: .if \\n(nS>0 \{\
        !          2684: .      ds Fb
        !          2685: .      nr fB 0
        !          2686: .      nr Fb 0
        !          2687: .      fB \\*(A\\n(aP
        !          2688: .      if \\n(fB>1 \{\
        !          2689: .              rm A\\n(aP
        !          2690: .              rn Fb A\\n(aP
        !          2691: .      \}
        !          2692: .\}
        !          2693: .as b1 \\*(A\\n(aP
        !          2694: .ie \\n(aC>\\n(aP \{\
        !          2695: .      nr aa \\n(aP
        !          2696: .      nr aP \\n(aP+1
        !          2697: .      if \\n(C\\n(aP==2 \{\
        !          2698: .              as b1 \&\|\f\\n(cF\s\\n(cZ,\\*(S\\n(aa\fP\s0\|
        !          2699: .      \}
        !          2700: .      f\\n(C\\n(aP
        !          2701: .\}
        !          2702: .el  \{\
        !          2703: .      as b1 \\*(rp\f\\n(cF\s\\n(cZ
        !          2704: .      aZ
        !          2705: .\}
        !          2706: ..
        !          2707: .de f3
        !          2708: .as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*(A\\n(aP
        !          2709: .ie \\n(aC>\\n(aP \{\
        !          2710: .      No
        !          2711: .\}
        !          2712: .el .aZ
        !          2713: ..
        !          2714: .de f4
        !          2715: .as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*(S\\n(aP\\*(A\\n(aP
        !          2716: .ie \\n(aC>\\n(aP \{\
        !          2717: .      nr aP \\n(aP+1
        !          2718: .      No
        !          2719: .\}
        !          2720: .el .aZ
        !          2721: ..
        !          2722: .de Fo
        !          2723: .hy 0
        !          2724: .if \\n(aC==0 \{\
        !          2725: .      ie \\n(.$==0 .tm Usage: .Fo function_name
        !          2726: .      el \{\
        !          2727: .              ds mN Fo
        !          2728: .               ds A1 \\$1
        !          2729: .               ds A2 \\$2
        !          2730: .               ds A3 \\$3
        !          2731: .               ds A4 \\$4
        !          2732: .               ds A5 \\$5
        !          2733: .               ds A6 \\$6
        !          2734: .               ds A7 \\$7
        !          2735: .               ds A8 \\$8
        !          2736: .               ds A9 \\$9
        !          2737: .              nr fV \\n(.$
        !          2738: .              fV
        !          2739: .      \}
        !          2740: .\}
        !          2741: .if \\n(nS>0 \{\
        !          2742: .\" if there is/has been more than one subroutine declaration
        !          2743: .      if \\n(fY==0 \{\
        !          2744: .              if \\n(fZ>0 \{\
        !          2745: .                      Pp
        !          2746: .                      nr fX 0
        !          2747: .                      nr fD 0
        !          2748: .              \}
        !          2749: .      \}
        !          2750: .      if \\n(fY==1 \{\
        !          2751: .              br
        !          2752: .              nr fX 0
        !          2753: .              nr fD 0
        !          2754: .              nr fY 0
        !          2755: .      \}
        !          2756: .      if \\n(fD>0 \{\
        !          2757: .              Pp
        !          2758: .              nr fX 0
        !          2759: .      \}
        !          2760: .      if \\n(fX>0 \{\
        !          2761: .              Pp
        !          2762: .              nr fD 0
        !          2763: .      \}
        !          2764: .      nr fZ \\n(fZ+1
        !          2765: .      nr fY 0
        !          2766: .      rs
        !          2767: .      ie \\n(nS>1 .br
        !          2768: .      el \{\
        !          2769: .              if \\n(iS==0 \{\
        !          2770: .                      nr iS ((8)*\\n(fW)u
        !          2771: .              \}
        !          2772: .      \}
        !          2773: .      in +\\n(iSu
        !          2774: .      ti -\\n(iSu
        !          2775: .      nr nS \\n(nS+1
        !          2776: .\}
        !          2777: .if \\n(aC>\\n(aP \{\
        !          2778: .      nr oM \\n(oM+1
        !          2779: .      nr fC 1
        !          2780: .      nr aP \\n(aP+1
        !          2781: .      nr cF \\n(.f
        !          2782: .      nr cZ \\n(.s
        !          2783: .      as b1 \\*(fN\\*(A\\n(aP\fP\s0\\*(lp
        !          2784: .      aY
        !          2785: .\}
        !          2786: ..
        !          2787: .de Fc
        !          2788: .if \\n(aC==0 \{\
        !          2789: .      if \\n(.$>0 \{\
        !          2790: .              ds mN Fo
        !          2791: .               ds A1 \\$1
        !          2792: .               ds A2 \\$2
        !          2793: .               ds A3 \\$3
        !          2794: .               ds A4 \\$4
        !          2795: .               ds A5 \\$5
        !          2796: .               ds A6 \\$6
        !          2797: .               ds A7 \\$7
        !          2798: .               ds A8 \\$8
        !          2799: .               ds A9 \\$9
        !          2800: .              nr fV \\n(.$
        !          2801: .              fV
        !          2802: .      \}
        !          2803: .\}
        !          2804: .nr fC 0
        !          2805: .nr oM \\n(oM-1
        !          2806: .as b1 \|\\*(rp
        !          2807: .ie \\n(aC>\\n(aP \{\
        !          2808: .      nr aP \\n(aP+1
        !          2809: .      \\*(A\\n(aP
        !          2810: .\}
        !          2811: .el \{\
        !          2812: .      aZ
        !          2813: .\}
        !          2814: .if \\n(nS>0 \{\
        !          2815: .      in -\\n(iSu
        !          2816: .\}
        !          2817: .hy
        !          2818: ..
        !          2819: .\" NS fb macro - if SYNOPSIS, set hard space inbetween function args
        !          2820: .\" NS fb register - count of words in a function argument
        !          2821: .\" NS Fb register - counter
        !          2822: .\" NS Fb string - temporary string
        !          2823: .de fB
        !          2824: .\" .tm fB==\\n(fB, Fb==\\n(Fb, 1==\\$1 2==\\$2 3==\\$3 4==\\$4 5==\\$5 6==\\$6
        !          2825: .if \\n(fB==0 \{\
        !          2826: .      nr fB \\n(.$
        !          2827: .      nr Fb 0
        !          2828: .      ds Fb
        !          2829: .\}
        !          2830: .nr Fb \\n(Fb+1
        !          2831: .as Fb \&\\$1
        !          2832: .if \\n(Fb<\\n(fB \{\
        !          2833: .      as Fb \&\\*(hV
        !          2834: .      fB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          2835: .\}
        !          2836: ..
        !          2837: .\" NS Fc - Function close - not implemented yet
        !          2838: .\" NS Fo - Function open - not implemented yet
        !          2839: .\"
        !          2840: .\" Very crude references, stash all reference info into strings (usual
        !          2841: .\" use of b1 buffer, then b1 contents copied to string of retrievable
        !          2842: .\" naming convention), print out reference on .Re request and clean up.
        !          2843: .\" Ordering very limited, no fancy citations, but can do articles, journals
        !          2844: .\" and books - need to add several missing options (like city etc).
        !          2845: .\" should be able to grab a refer entry, massage it a wee bit (prefix
        !          2846: .\" a `.' to the %[A-Z]) and not worry (ha!)
        !          2847: .\"
        !          2848: .\" NS Rs macro - Reference Start
        !          2849: .\" NS rS register - Reference Start flag
        !          2850: .\" NS rS string - Reference Start buffer name for next save (of b1 buffer)
        !          2851: .de Rs
        !          2852: .nr rS 1
        !          2853: .rC
        !          2854: .if \\n(nA==1 .Pp
        !          2855: .nr Kl 0
        !          2856: ..
        !          2857: .\" NS Re macro - Reference End
        !          2858: .de Re
        !          2859: .rZ
        !          2860: .rC
        !          2861: .nr rS 0
        !          2862: ..
        !          2863: .\" NS rC macro - reference cleanup
        !          2864: .de rC
        !          2865: .nr uK 0
        !          2866: .nr jK 0
        !          2867: .nr nK 0
        !          2868: .nr oK 0
        !          2869: .nr qK 0
        !          2870: .nr rK 0
        !          2871: .nr tK 0
        !          2872: .nr vK 0
        !          2873: .nr dK 0
        !          2874: .nr pK 0
        !          2875: .nr bK 0
        !          2876: .ds rS
        !          2877: .rm U1 U2 U3 U4 U5 U6 U7 U8
        !          2878: .rm uK jK nK oK rK qK tK vK dK pK bK
        !          2879: ..
        !          2880: .\" NS rZ macro - reference print
        !          2881: .de rZ
        !          2882: .if \\n(uK \{\&\\*(U1,
        !          2883: .      nr aK 1
        !          2884: .      if (\\n(uK>1 \{\
        !          2885: .              aK
        !          2886: .      \}
        !          2887: .      nr Kl -\\n(uK
        !          2888: .\}
        !          2889: .if \\n(tK \{\
        !          2890: .      nr Kl \\n(Kl-1
        !          2891: .      if \\n(Kl==0 \{\
        !          2892: .              ie (\\n(jK==1):(\\n(bK==1) \{\&\\*q\\*(tK\\*q.
        !          2893: .              \}
        !          2894: .              el \{\&\\*(eM\\*(tK\\*(nO.
        !          2895: .              \}
        !          2896: .      \}
        !          2897: .      if \\n(Kl>0 \{\
        !          2898: .              ie (\\n(jK==1):(\\n(bK==1) \{\&\\*q\\*(tK\\*q,
        !          2899: .              \}
        !          2900: .              el \{\&\\*(eM\\*(tK\\*(nO,
        !          2901: .              \}
        !          2902: .      \}
        !          2903: .\}
        !          2904: .if \\n(bK \{\
        !          2905: .      nr Kl \\n(Kl-1
        !          2906: .      if \\n(Kl==0 \&\\*(eM\\*(bK\\*(nO.
        !          2907: .      if \\n(Kl>0 \&\\*(eM\\*(bK\\*(nO,
        !          2908: .\}
        !          2909: .if \\n(jK \{\
        !          2910: .      nr Kl \\n(Kl-1
        !          2911: .      if \\n(Kl==0 \&\\*(eM\\*(jK\\*(nO.
        !          2912: .      if \\n(Kl>0 \&\\*(eM\\*(jK\\*(nO,
        !          2913: .\}
        !          2914: .if \\n(rK \{\
        !          2915: .      nr Kl \\n(Kl-1
        !          2916: .      if \\n(Kl==0 \&\\*(rK.
        !          2917: .      if \\n(Kl>0 \&\\*(rK,
        !          2918: .\}
        !          2919: .if \\n(nK \{\
        !          2920: .      nr Kl \\n(Kl-1
        !          2921: .      if \\n(Kl==0 \&\\*(nK.
        !          2922: .      if \\n(Kl>0 \&\\*(nK,
        !          2923: .\}
        !          2924: .if \\n(vK \{\
        !          2925: .      nr Kl \\n(Kl-1
        !          2926: .      if \\n(Kl==0 \&\\*(vK.
        !          2927: .      if \\n(Kl>0 \&\\*(vK,
        !          2928: .\}
        !          2929: .if \\n(pK \{\
        !          2930: .      nr Kl \\n(Kl-1
        !          2931: .      if \\n(Kl==0 \&\\*(pK.
        !          2932: .      if \\n(Kl>0 \&\\*(pK,
        !          2933: .\}
        !          2934: .if \\n(qK \{\
        !          2935: .      nr Kl \\n(Kl-1
        !          2936: .      if \\n(Kl==0 \&\\*(qK.
        !          2937: .      if \\n(Kl>0 \&\\*(qK,
        !          2938: .\}
        !          2939: .if \\n(dK \{\
        !          2940: .      nr Kl \\n(Kl-1
        !          2941: .      if \\n(Kl==0 \&\\*(dK.
        !          2942: .      if \\n(Kl>0 \&\\*(dK,
        !          2943: .\}
        !          2944: .if \\n(oK \{\
        !          2945: .      nr Kl \\n(Kl-1
        !          2946: .      if \\n(Kl==0 \&\\*(oK.
        !          2947: .      if \\n(Kl>0 \&\\*(oK,
        !          2948: .\}
        !          2949: .if \\n(Kl>0 .tm unresolved reference problem
        !          2950: ..
        !          2951: .\" NS aK macro - print out reference authors
        !          2952: .de aK
        !          2953: .nr aK \\n(aK+1
        !          2954: .ie (\\n(uK-\\n(aK)==0 \{\&and \\*(U\\n(aK,
        !          2955: .\}
        !          2956: .el \{\&\\*(U\\n(aK,
        !          2957: .      aK
        !          2958: .\}
        !          2959: ..
        !          2960: .\" NS %A macro - reference author(s)
        !          2961: .\" NS uK register - reference author(s) counter
        !          2962: .\" NS U[1-9] strings - reference author(s) names
        !          2963: .de %A
        !          2964: .if \\n(aC==0 \{\
        !          2965: .       ie \\n(.$==0 .tm Usage: .%A Author_name (#\\n(.c)
        !          2966: .      el \{\
        !          2967: .              nr uK \\n(uK+1
        !          2968: .              nr Kl \\n(Kl+1
        !          2969: .              ds rS U\\n(uK
        !          2970: .              ds mN %A
        !          2971: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          2972: .      \}
        !          2973: .\}
        !          2974: .if \\n(aC>\\n(aP \{\
        !          2975: .      nr aP \\n(aP+1
        !          2976: .       nr cF \\n(.f
        !          2977: .      nr cZ \\n(.s
        !          2978: .       rR
        !          2979: .\}
        !          2980: ..
        !          2981: .\" NS %B macro - [reference] Book Name
        !          2982: .\" NS bK string - Book Name
        !          2983: .\" NS bK register - Book Name flag
        !          2984: .de %B
        !          2985: .if \\n(aC==0 \{\
        !          2986: .       ie \\n(.$==0 .tm Usage: .%B Book Name (#\\n(.c)
        !          2987: .       el \{\
        !          2988: .              ds mN %B
        !          2989: .              if \\n(rS>0 \{\
        !          2990: .                      nr bK \\n(bK+1
        !          2991: .                      nr Kl \\n(Kl+1
        !          2992: .                      ds rS bK
        !          2993: .              \}
        !          2994: .               ds A1 \\$1
        !          2995: .               ds A2 \\$2
        !          2996: .               ds A3 \\$3
        !          2997: .               ds A4 \\$4
        !          2998: .               ds A5 \\$5
        !          2999: .               ds A6 \\$6
        !          3000: .               ds A7 \\$7
        !          3001: .               ds A8 \\$8
        !          3002: .               ds A9 \\$9
        !          3003: .              nr fV \\n(.$
        !          3004: .              fV
        !          3005: .      \}
        !          3006: .\}
        !          3007: .if \\n(aC>\\n(aP \{\
        !          3008: .      nr aP \\n(aP+1
        !          3009: .       nr cF \\n(.f
        !          3010: .      nr cZ \\n(.s
        !          3011: .      ie \\n(rS==0 \{\
        !          3012: .              as b1 \&\\*(eM
        !          3013: .              nR
        !          3014: .      \}
        !          3015: .      el .rR
        !          3016: .\}
        !          3017: ..
        !          3018: .\" NS %D macro - [reference] Date
        !          3019: .\" NS dK string - Date String
        !          3020: .\" NS dK register - Date flag
        !          3021: .de %D
        !          3022: .if \\n(aC==0 \{\
        !          3023: .       ie \\n(.$==0 .tm Usage: .%D Date (#\\n(.c)
        !          3024: .       el \{\
        !          3025: .              ds mN %D
        !          3026: .              nr dK \\n(dK+1
        !          3027: .              nr Kl \\n(Kl+1
        !          3028: .              ds rS dK
        !          3029: .               ds A1 \\$1
        !          3030: .               ds A2 \\$2
        !          3031: .               ds A3 \\$3
        !          3032: .               ds A4 \\$4
        !          3033: .               ds A5 \\$5
        !          3034: .               ds A6 \\$6
        !          3035: .               ds A7 \\$7
        !          3036: .               ds A8 \\$8
        !          3037: .               ds A9 \\$9
        !          3038: .              nr fV \\n(.$
        !          3039: .              fV
        !          3040: .      \}
        !          3041: .\}
        !          3042: .if \\n(aC>\\n(aP \{\
        !          3043: .      nr aP \\n(aP+1
        !          3044: .       nr cF \\n(.f
        !          3045: .      nr cZ \\n(.s
        !          3046: .       rR
        !          3047: .\}
        !          3048: ..
        !          3049: .\" NS %J macro - [reference] Journal Name
        !          3050: .\" NS jK register - [reference] Journal Name flag
        !          3051: .\" NS jK string - [reference] Journal Name
        !          3052: .de %J
        !          3053: .if \\n(aC==0 \{\
        !          3054: .       ie \\n(.$==0 .tm Usage: .%J Journal Name (#\\n(.c)
        !          3055: .       el \{\
        !          3056: .              ds mN %J
        !          3057: .              nr jK \\n(jK+1
        !          3058: .              ds rS jK
        !          3059: .              nr Kl \\n(Kl+1
        !          3060: .               ds A1 \\$1
        !          3061: .               ds A2 \\$2
        !          3062: .               ds A3 \\$3
        !          3063: .               ds A4 \\$4
        !          3064: .               ds A5 \\$5
        !          3065: .               ds A6 \\$6
        !          3066: .               ds A7 \\$7
        !          3067: .               ds A8 \\$8
        !          3068: .               ds A9 \\$9
        !          3069: .              nr fV \\n(.$
        !          3070: .              fV
        !          3071: .      \}
        !          3072: .\}
        !          3073: .if \\n(aC>\\n(aP \{\
        !          3074: .      nr aP \\n(aP+1
        !          3075: .       nr cF \\n(.f
        !          3076: .      nr cZ \\n(.s
        !          3077: .       rR
        !          3078: .\}
        !          3079: ..
        !          3080: .\" NS %N macro - [reference] issue number
        !          3081: .\" NS nK register - [reference] issue number flag
        !          3082: .\" NS nK string - [reference] issue number
        !          3083: .de %N
        !          3084: .if \\n(aC==0 \{\
        !          3085: .       ie \\n(.$==0 .tm Usage: .%N issue number (#\\n(.c)
        !          3086: .      el \{\
        !          3087: .              nr nK \\n(nK+1
        !          3088: .              nr Kl \\n(Kl+1
        !          3089: .              ds rS nK
        !          3090: .              ds mN %N
        !          3091: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          3092: .      \}
        !          3093: .\}
        !          3094: .if \\n(aC>\\n(aP \{\
        !          3095: .      nr aP \\n(aP+1
        !          3096: .       nr cF \\n(.f
        !          3097: .      nr cZ \\n(.s
        !          3098: .       rR
        !          3099: .\}
        !          3100: ..
        !          3101: .\" NS %O macro - [reference] optional information
        !          3102: .\" NS oK register - [reference] optional information flag
        !          3103: .\" NS oK string - [reference] optional information
        !          3104: .de %O
        !          3105: .if \\n(aC==0 \{\
        !          3106: .       ie \\n(.$==0 .tm Usage: .%O optional information ... \\*(Pu (#\\n(.c)
        !          3107: .       el \{\
        !          3108: .              ds mN %O
        !          3109: .              nr oK \\n(oK+1
        !          3110: .              nr Kl \\n(Kl+1
        !          3111: .              ds rS oK
        !          3112: .               ds A1 \\$1
        !          3113: .               ds A2 \\$2
        !          3114: .               ds A3 \\$3
        !          3115: .               ds A4 \\$4
        !          3116: .               ds A5 \\$5
        !          3117: .               ds A6 \\$6
        !          3118: .               ds A7 \\$7
        !          3119: .               ds A8 \\$8
        !          3120: .               ds A9 \\$9
        !          3121: .              nr fV \\n(.$
        !          3122: .              fV
        !          3123: .      \}
        !          3124: .\}
        !          3125: .if \\n(aC>\\n(aP \{\
        !          3126: .      nr aP \\n(aP+1
        !          3127: .       nr cF \\n(.f
        !          3128: .      nr cZ \\n(.s
        !          3129: .       rR
        !          3130: .\}
        !          3131: ..
        !          3132: .\" NS %P macro - [reference] page numbers
        !          3133: .\" NS pK register - [reference] page number flag
        !          3134: .\" NS pK string - [reference] page number
        !          3135: .de %P
        !          3136: .if \\n(aC==0 \{\
        !          3137: .       ie \\n(.$==0 .tm Usage: .%P page numbers ... \\*(Pu (#\\n(.c)
        !          3138: .       el \{\
        !          3139: .              ds mN %P
        !          3140: .              nr pK \\n(pK+1
        !          3141: .              nr Kl \\n(Kl+1
        !          3142: .              ds rS pK
        !          3143: .               ds A1 \\$1
        !          3144: .               ds A2 \\$2
        !          3145: .               ds A3 \\$3
        !          3146: .               ds A4 \\$4
        !          3147: .               ds A5 \\$5
        !          3148: .               ds A6 \\$6
        !          3149: .               ds A7 \\$7
        !          3150: .               ds A8 \\$8
        !          3151: .               ds A9 \\$9
        !          3152: .              nr fV \\n(.$
        !          3153: .              fV
        !          3154: .      \}
        !          3155: .\}
        !          3156: .if \\n(aC>\\n(aP \{\
        !          3157: .      nr aP \\n(aP+1
        !          3158: .       nr cF \\n(.f
        !          3159: .      nr cZ \\n(.s
        !          3160: .       rR
        !          3161: .\}
        !          3162: ..
        !          3163: .\" NS %Q macro - Corporate or Foreign Author
        !          3164: .\" NS qK string - Corporate or Foreign Author
        !          3165: .\" NS qK register - Corporate or Foreign Author flag
        !          3166: .de %Q
        !          3167: .if \\n(aC==0 \{\
        !          3168: .       ie \\n(.$==0 .tm Usage: .%Q Corporate or Foreign Author (#\\n(.c)
        !          3169: .       el \{\
        !          3170: .              ds mN %Q
        !          3171: .              nr qK \\n(qK+1
        !          3172: .              nr Kl \\n(Kl+1
        !          3173: .              ds rS qK
        !          3174: .               ds A1 \\$1
        !          3175: .               ds A2 \\$2
        !          3176: .               ds A3 \\$3
        !          3177: .               ds A4 \\$4
        !          3178: .               ds A5 \\$5
        !          3179: .               ds A6 \\$6
        !          3180: .               ds A7 \\$7
        !          3181: .               ds A8 \\$8
        !          3182: .               ds A9 \\$9
        !          3183: .              nr fV \\n(.$
        !          3184: .              fV
        !          3185: .      \}
        !          3186: .\}
        !          3187: .if \\n(aC>\\n(aP \{\
        !          3188: .      nr aP \\n(aP+1
        !          3189: .       nr cF \\n(.f
        !          3190: .      nr cZ \\n(.s
        !          3191: .       rR
        !          3192: .\}
        !          3193: ..
        !          3194: .\" NS %R macro - [reference] report name
        !          3195: .\" NS rK string - [reference] report name
        !          3196: .\" NS rK register - [reference] report flag
        !          3197: .de %R
        !          3198: .if \\n(aC==0 \{\
        !          3199: .       ie \\n(.$==0 .tm Usage: .%R reference report (#\\n(.c)
        !          3200: .       el \{\
        !          3201: .              ds mN %R
        !          3202: .              nr rK \\n(rK+1
        !          3203: .              nr Kl \\n(Kl+1
        !          3204: .              ds rS rK
        !          3205: .               ds A1 \\$1
        !          3206: .               ds A2 \\$2
        !          3207: .               ds A3 \\$3
        !          3208: .               ds A4 \\$4
        !          3209: .               ds A5 \\$5
        !          3210: .               ds A6 \\$6
        !          3211: .               ds A7 \\$7
        !          3212: .               ds A8 \\$8
        !          3213: .               ds A9 \\$9
        !          3214: .              nr fV \\n(.$
        !          3215: .              fV
        !          3216: .      \}
        !          3217: .\}
        !          3218: .if \\n(aC>\\n(aP \{\
        !          3219: .      nr aP \\n(aP+1
        !          3220: .       nr cF \\n(.f
        !          3221: .      nr cZ \\n(.s
        !          3222: .       rR
        !          3223: .\}
        !          3224: ..
        !          3225: .\" NS %T macro - reference title
        !          3226: .\" NS tK string - reference title
        !          3227: .\" NS tK register - reference title flag
        !          3228: .de %T
        !          3229: .if \\n(aC==0 \{\
        !          3230: .       ie \\n(.$==0 .tm Usage: .%T (#\\n(.c)
        !          3231: .       el \{\
        !          3232: .              ds mN %T
        !          3233: .              if \\n(rS>0 \{\
        !          3234: .                      nr tK \\n(tK+1
        !          3235: .                      nr Kl \\n(Kl+1
        !          3236: .                      ds rS tK
        !          3237: .              \}
        !          3238: .               ds A1 \\$1
        !          3239: .               ds A2 \\$2
        !          3240: .               ds A3 \\$3
        !          3241: .               ds A4 \\$4
        !          3242: .               ds A5 \\$5
        !          3243: .               ds A6 \\$6
        !          3244: .               ds A7 \\$7
        !          3245: .               ds A8 \\$8
        !          3246: .               ds A9 \\$9
        !          3247: .              nr fV \\n(.$
        !          3248: .              fV
        !          3249: .      \}
        !          3250: .\}
        !          3251: .if \\n(aC>\\n(aP \{\
        !          3252: .\" .  ie \\n(jS==1 \{\
        !          3253: .\" .          nr cF \\n(.f
        !          3254: .\" .          nr cZ \\n(.s
        !          3255: .\" .          ds qL \&\\*(Lq\\*(rA
        !          3256: .\" .          ds qR \&\\*(Rq\f\\n(cF\s\\n(cZ
        !          3257: .\" .          En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          3258: .\" .  \}
        !          3259: .\" .  el \{\
        !          3260: .              nr aP \\n(aP+1
        !          3261: .              nr cF \\n(.f
        !          3262: .              nr cZ \\n(.s
        !          3263: .              ie \\n(rS==0 \{\
        !          3264: .                      as b1 \&\\*(eM
        !          3265: .                      nR
        !          3266: .              \}
        !          3267: .              el .rR
        !          3268: .\" .  \}
        !          3269: .\}
        !          3270: ..
        !          3271: .\" NS %V macro - reference volume
        !          3272: .\" NS vK string - reference volume
        !          3273: .\" NS vK register - reference volume flag
        !          3274: .de %V
        !          3275: .if \\n(aC==0 \{\
        !          3276: .       ie \\n(.$==0 .tm Usage: .%V Volume , ... \\*(Pu (#\\n(.c)
        !          3277: .      el \{\
        !          3278: .              ds mN %V
        !          3279: .              nr vK \\n(vK+1
        !          3280: .              nr Kl \\n(Kl+1
        !          3281: .              ds rS vK
        !          3282: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          3283: .      \}
        !          3284: .\}
        !          3285: .if \\n(aC>\\n(aP \{\
        !          3286: .      nr aP \\n(aP+1
        !          3287: .       nr cF \\n(.f
        !          3288: .      nr cZ \\n(.s
        !          3289: .       rR
        !          3290: .\}
        !          3291: ..
        !          3292: .\" NS rR macro - reference recursion routine
        !          3293: .\" NS jM local register
        !          3294: .\" NS jN local register
        !          3295: .de rR
        !          3296: .hy 0
        !          3297: .nr jM \\n(C\\n(aP
        !          3298: .ie \\n(jM==1 \{\
        !          3299: .\" .  as b1 \&\f\\n(cF\s\\n(cZ
        !          3300: .      ie "\\*(A\\n(aP"Tn" \{\
        !          3301: .              nN
        !          3302: .      \}
        !          3303: .      el \{\
        !          3304: .              if \\n(aC>8 .tm Usage: \\*(mN - maximum 8 arguments (#\\n(.c)
        !          3305: .              aI rR 1
        !          3306: .              \\*(A\\n(aP
        !          3307: .      \}
        !          3308: .\}
        !          3309: .el \{\
        !          3310: .      nr jN \\n(aP
        !          3311: .      ie \\n(jM==2 .as b1 \&\\*(A\\n(aP
        !          3312: .      el .as b1 \&\\*(A\\n(aP
        !          3313: .\" .  el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0
        !          3314: .      ie \\n(aC==\\n(aP \{\
        !          3315: .\" .          as b1 \&\f\\n(cF\s\\n(cZ
        !          3316: .              rD
        !          3317: .      \}
        !          3318: .      el \{\
        !          3319: .              nr aP \\n(aP+1
        !          3320: .              as b1 \&\\*(S\\n(jN
        !          3321: .              rR
        !          3322: .      \}
        !          3323: .\}
        !          3324: .rr jM jN
        !          3325: ..
        !          3326: .\" NS rD macro - save b1 buffer in to appropriate name
        !          3327: .de rD
        !          3328: .as \\*(rS \\*(b1
        !          3329: .ds b1
        !          3330: .ds rS
        !          3331: .aY
        !          3332: ..
        !          3333: .\" NS Hf macro - source include header files.
        !          3334: .de Hf
        !          3335: .Pp
        !          3336: File:
        !          3337: .Pa \\$1
        !          3338: .Pp
        !          3339: .nr cF \\n(.f
        !          3340: .nr cZ \\n(.s
        !          3341: .ie t \{\
        !          3342: \&\\*(lI
        !          3343: .br
        !          3344: .ta +9n 18n 27n 36n 45n 54n 63n 72n
        !          3345: .\}
        !          3346: .el \{\
        !          3347: .ta +8n 16n 24n 32n 40n 48n 56n 64n 72n
        !          3348: .\}
        !          3349: .nf
        !          3350: .so  \\$1
        !          3351: .fi
        !          3352: .ft \\n(cF
        !          3353: .fz \\n(cZ
        !          3354: .Pp
        !          3355: ..
        !          3356: .\" NS An macro - author name
        !          3357: .\" NS aN register
        !          3358: .nr aN 0
        !          3359: .de An
        !          3360: .if \\n(nY==1 \{\
        !          3361: .      ie \\n(aN==1 \{\
        !          3362: .              br
        !          3363: .      \}
        !          3364: .      el \{\
        !          3365: .              nr aN 1
        !          3366: .      \}
        !          3367: .\}
        !          3368: .if \\n(aC==0 \{\
        !          3369: .       ie \\n(.$==0 .tm Usage: .An author_name ... \\*(Pu (#\\n(.c)
        !          3370: .      el \{\
        !          3371: .              ds mN An
        !          3372: .              aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
        !          3373: .      \}
        !          3374: .\}
        !          3375: .if \\n(aC>\\n(aP \{\
        !          3376: .      nr aP \\n(aP+1
        !          3377: .       nr cF \\n(.f
        !          3378: .      nr cZ \\n(.s
        !          3379: .       nR
        !          3380: .\}
        !          3381: ..
        !          3382: .\" NS Sf macro -defunct
        !          3383: .de Sf
        !          3384: .tm .Sf defunct, use prefix or Ns
        !          3385: ..
        !          3386: .ds rV "function returns the value 0 if successful; otherwise the value -1 is returned and the global variable \\*(vAerrno\fP is set to indicate the error.
        !          3387: .\" Ns Rv macro - return values
        !          3388: .\" Ns rV string - standard return message
        !          3389: .de Rv
        !          3390: .ie \\n(.$==0 \{\
        !          3391: .tm Usage: .Rv [-std] (#\\n(.c)
        !          3392: .\}
        !          3393: .el \{\
        !          3394: .      ds mN Rv
        !          3395: .\" .  nr aP 0
        !          3396: .\" .  nr lR \\n(lR+1
        !          3397: .\" .  ds A1 \\$2
        !          3398: .\" .  ds A2 \\$3
        !          3399: .\" .  ds A3 \\$4
        !          3400: .\" .  ds A4 \\$5
        !          3401: .\" .  ds A5 \\$6
        !          3402: .\" .  ds A6 \\$7
        !          3403: .\" .  ds A7 \\$8
        !          3404: .\" .  ds A8 \\$9
        !          3405: .\" .  nr fV \\n(.$-1
        !          3406: .      if "\\$1"-std" \{\
        !          3407: .      nr cH \\*(cH
        !          3408: .      if (\\n(cH<2):(\\n(cH>3) .tm Usage: .Rv -std sections 2 and 3 only
        !          3409: .              br
        !          3410: \&The
        !          3411: .Fn \\$2
        !          3412: \&\\*(rV
        !          3413: .      \}
        !          3414: .\}
        !          3415: ..