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: ..