.\" Copyright (c) 1991 The Regents of the University of California. .\" All rights reserved. .\" .\" %sccs.include.redist.man% .\" .\" @(#)doc 1.1 (Berkeley) %G% .\" .\" mdoc-parse - attempt to parse troff request arguments .\" %beginstrip% .if t \{\ . so /usr/share/tmac/tmac.doc-ditroff .\} .if n \{\ . so /usr/share/tmac/tmac.doc-nroff .\} .so /usr/share/tmac/tmac.doc-common .so /usr/share/tmac/tmac.doc-syms .\" .if t \{\ .\" . so /usr/u0/cael/man/tmac.doc-ditroff .\" .\} .\" .if n \{\ .\" . so /usr/u0/cael/man/tmac.doc-nroff .\" .\} .\" .so /usr/u0/cael/man/tmac.doc-common .\" .so /usr/u0/cael/man/tmac.doc-syms .\" .\" NS Db macro - start/stop DEBUG MODE .\" NS Db register DEBUG MODE .\" NS iN register DEBUG MODE (inline if 1, to stderr if 0 (default)) .nr Db 0 .de Db .ie \\n(.$==0 \{\ . ie \\n(Db==0 \{\ .tm DEBUGGING ON . nr Db 1 . \} . el \{\ .tm DEBUGGING OFF . nr Db 0 . \} .\} .el \{\ . if "\\$1"on" \{\ .tm DEBUGGING ON . nr Db 1 . \} . if "\\$1"off" \{\ .tm DEBUGGING OFF . nr Db 0 . \} .\} .. .\" NS aV macro - parse argument vector (recursive) (.aV arg ... ) .\" NS fV macro - parse argument vector (recursive) (.fV) .\" NS aC register argument counter (aV/fV) .\" NS fV register argument counter (must set to \\n(.$ prior to reuqest) (fV) .\" NS A[0-9] argument vector (aV/fV) .\" NS C[0-9] reg. arg type(1=macro, 2=arg, 3=punct-suf, 4=punct-pre) (aV/fV) .\" NS S[0-9] space vector (sV) .\" NS aP register argument pointer (aV) .\" NS yU local string used for debugging .\" NS iI local register (indent for inline debug mode) .\" NS mN name of calling request (set in each user requestable macro) .de aV .nr aC+1 .ds A\\n(aC \\$1 .aU \\n(aC .nr C\\n(aC \\n(aT .s\\n(aT .if \\n(Db \{\ . if \\n(aT==1 .ds yU Executable . if \\n(aT==2 .ds yU String . if \\n(aT==3 .ds yU Closing Punctuation or suffix . if \\n(aT==4 .ds yU Opening Punctuation or prefix . if \\n(iN==1 \{\ . br . nr iI \\n(.iu . in -\\n(iIu . if \\n(aC==1 \{\ \&\fBDEBUG(argv) MACRO:\fP `.\\*(mN' \fBLine #:\fP \\n(.c . \} \&\t\fBArgc:\fP \\n(aC \fBArgv:\fP `\\*(A\\n(aC' \fBLength:\fP \\n(sW \&\t\fBSpace:\fP `\\*(S\\n(aC' \fBClass:\fP \\*(yU . \} . if \\n(iN==0 \{\ . if \\n(aC==1 \{\ . tm DEBUG(argv) MACRO: `.\\*(mN' Line #: \\n(.c . \} . tm \tArgc: \\n(aC Argv: `\\*(A\\n(aC' Length: \\n(sW . tm \tSpace: `\\*(S\\n(aC' Class: \\*(yU . \} .\} .ie \\n(.$==1 \{\ . nr aP 0 . ie \\n(dZ==1 \{\ . if \\n(oM>1 .as b1 \\*(S0 . \} . el \{\ . if \\n(oM>0 .as b1 \\*(S0 . \} . ds S0 \\*(S\\n(aC . if \\n(Db \{\ . if \\n(iN==1 \{\ \&MACRO REQUEST: \t.\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9 . br . in \\n(iIu . \} . if \\n(iN==0 \{\ .tm \tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9 . \} . \} .\} .el .aV \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .de fV .nr aC+1 .aU \\n(aC .nr C\\n(aC \\n(aT .s\\n(aT .if \\n(Db \{\ . if \\n(aT==1 .ds yU Executable . if \\n(aT==2 .ds yU String . if \\n(aT==3 .ds yU Closing Punctuation or suffix . if \\n(aT==4 .ds yU Opening Punctuation or prefix . if \\n(iN==1 \{\ . br . nr iI \\n(.iu . in -\\n(iIu . if \\n(aC==1 \{\ \&\fBDEBUG(fargv) MACRO:\fP `.\\*(mN' \fBLine #:\fP \\n(.c . \} \&\t\fBArgc:\fP \\n(aC \fBArgv:\fP `\\*(A\\n(aC' \fBLength:\fP \\n(sW \&\t\fBSpace:\fP `\\*(S\\n(aC' \fBClass:\fP \\*(yU . \} . if \\n(iN==0 \{\ . if \\n(aC==1 \{\ . tm DEBUG(fargv) MACRO: `.\\*(mN' Line #: \\n(.c . \} . tm \tArgc: \\n(aC Argv: `\\*(A\\n(aC' Length: \\n(sW . tm \tSpace: `\\*(S\\n(aC' Class: \\*(yU . \} .\} .ie \\n(fV==1 \{\ . nr aP 0 . ie \\n(dZ==1 \{\ . if \\n(oM>1 .as b1 \\*(S0 . \} . el \{\ . if \\n(oM>0 .as b1 \\*(S0 . \} . ds S0 \\*(S\\n(aC . nr fV 0 . if \\n(Db \{\ . ie \\n(iN \{\ \&\tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9 . br . in \\n(iIu . \} . el \{\ .tm \tMACRO REQUEST: .\\*(mN \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9 . \} . \} .\} .el \{\ . nr fV-1 . fV .\} .. .\" NS aX macro - stuff saved strings into `b1' (used by -diag list) .de aX .nr aP+1 .as b1 \&\\*(A\\n(aP .ie \\n(fV==1 \{\ . nr aP 0 . nr fV 0 .\} .el \{\ . nr fV-1 . aX .\} .. .\" NS aI macro - append arg to arg vector: .aI [arg] [type] (used by .En only) .de aI .ie \\n(aC<9 \{\ . nr aC+1 . ds A\\n(aC \\$1 . nr C\\n(aC \\$2 . s\\$2 . ds xV S\\n(aC .\} .el \{\ . tm Usage: Too many arguments (maximum of 8 accepted) (#\\n(.c) . tm \\*(A1 \\*(A2 \\*(A3 \\*(A4 \\*(A5 \\*(A6 \\*(A7 \\*(A8 \\*(A9 .\} .. .\" .\" NS aZ macro - print buffer (pB) and clean up arg vectors (aY) .de aZ .pB .aY .. .\" NS aY macro - clean up arg vector .de aY .rm C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 .rm A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 .rm S1 S2 S3 S4 S5 S6 S7 S8 S9 .nr aC 0 .nr aP 0 .. .\" NS pB macro - test for end of vector (eol) (print b1 buffer or divert) .de pB .ie \\n(dZ==1 \{\ . if \\n(oM==1 \{\&\\*(b1 . rm S0 . ds b1 . \} . if \\n(oM==0 \{\ . x2 . \} .\} .el \{\ . ie \\n(oM==0 \{\&\\*(b1 . rm S0 . ds b1 . \} . el \{\ . if ((\\n(sM==1)&(\\n(tP==0)) \{\ . x1 . \} . \} .\} .hy .. .\" NS x1 macro - save buffer and divert if tP flag set .\" NS eB diversion string .\" NS b2 string save of buffer .\" NS lK register count of lines read from input file .de x1 .nr dZ+1 .ds b2 \\*(b1 .ds b1 .nr lK \\n(.c .ev 2 .fi .di eB .. .\" .\" NS x2 macro - end diversion and print .\" NS b0 string local temporary .de x2 .br .di .ev .ie (\\n(.c-\\n(lK>1) \{\ . ds b0 \&\\*(eB\\ . ds b1 \\*(b2\\*(b0\\*(b1 .\} .el .ds b1 \\*(b2\\*(b1 \&\\*(b1 .rm eB b2 b0 b1 .nr dZ-1 .. .\" NS Fl macro - flags (appends - and prints flags) .\" NS cF register save current font .\" NS cZ register save current font size .de Fl .as b1 \&\\*(fL .if \\n(aC==0 \{\ . ie \\n(.$==0 \{\ . as b1 \&\|\-\|\fP\s0 . pB . \} . el \{\ . ds mN Fl . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>0 \{\ . ie (\\n(aC-\\n(aP)==0 \{\ . as b1 \&\|\-\fP\s0 . aZ . \} . el \{\ . nr aP+1 . ie \\n(C\\n(aP==1 \{\ . as b1 \&\|\-\fP\s0 . \\*(A\\n(aP . \} . el \{\ . nr cF \\n(.f . nr cZ \\n(.s . if \\n(C\\n(aP==3 \{\ . as b1 \&\|\-\| . \} . fR . \} . \} .\} .. .\" .\" NS fR macro - Fl flag recursion routine (special handling) .\" NS jM local register .\" NS jN local register .\" .de fR .hy 0 .nr jM \\n(C\\n(aP .ie \\n(jM==1 \{\ . as b1 \&\fP\s0 . \\*(A\\n(aP .\} .el \{\ . nr jN \\n(aP . ie \\n(jM==2 \{\ . ie "\\*(A\\n(aP"-" .as b1 \&\|\-\-\| . el .as b1 \&\|\-\\*(A\\n(aP . \} . el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0 . ie \\n(aC==\\n(aP \{\ . if \\n(jM==4 .as b1 \&\|\- . as b1 \&\fP\s0 . aZ . \} . el \{\ . nr aP+1 . ie ((\\n(C\\n(aP==3)&(\\n(C\\n(jN==4)) .as b1 \&\|\- . el .as b1 \&\\*(S\\n(jN . fR \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .rr jM jN .. .\" .\" NS nR macro - general name recursion routine .\" NS jM local register .\" NS jN local register .de nR .hy 0 .nr jM \\n(C\\n(aP .ie \\n(jM==1 \{\ . as b1 \&\f\\n(cF\s\\n(cZ . \\*(A\\n(aP .\} .el \{\ . nr jN \\n(aP . ie \\n(jM==2 .as b1 \&\\*(A\\n(aP . el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0 . ie \\n(aC==\\n(aP \{\ . as b1 \&\f\\n(cF\s\\n(cZ . aZ . \} . el \{\ . nr aP+1 . as b1 \&\\*(S\\n(jN . nR . \} .\} .rr jM jN .. .\" NS Ar macro - command line `argument' macro .\" .de Ar .as b1 \\*(aR .if \\n(aC==0 \{\ . ie \\n(.$==0 \{\ . as b1 file\ ...\fP\s0 . pB . \} . el \{\ . ds mN Ar . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>0 \{\ . ie (\\n(aC-\\n(aP)==0 \{\ . as b1 \&file\ ...\fP\s0 . aZ . \} . el \{\ . nr aP+1 . ie \\n(C\\n(aP==1 \{\ . as b1 \&file\ ...\fP\s0 . \\*(A\\n(aP . \} . el \{\ . nr cF \\n(.f . nr cZ \\n(.s . if \\n(C\\n(aP==3 \{\ . as b1 \&file\ ... . \} . nR . \} . \} .\} .. .\" NS Ad macro - Addresses .de Ad .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Ad address ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Ad . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(aD . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Cd macro - Config declaration (for section 4 SYNOPSIS) (not callable) .\" needs work - not very translatable .de Cd .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Cd Configuration file declaration (#\\n(.c) . el \{\ . ds mN Cd . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .br .if \\n(aC>\\n(aP \{\ . as b1 \\*(nM . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . if \\n(nS \{\ . if "\\*(mN"Cd" \{\ . rs . in -\\n(iSu . ie \\n(nS>1 .br . el \{\ . if \\n(iS==0 .nr iS Dsu . \} . in +\\n(iSu . ti -\\n(iSu . nr nS \\n(nS+1 . \} . \} . nR .\} .. .\" NS Cm macro - Interactive command modifier (flag) .de Cm .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Cm Interactive command modifier ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Cm . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(cM . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Dv macro - define variable .de Dv .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Dv define_variable ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Dv . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(eR . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Em macro - Emphasis .de Em .if \\n(aC==0 \{\ . ie \\n(.$==0 \{\ . tm Usage: .Em text ... \\*(Pu (#\\n(.c) . \} . el \{\ . ds mN Em . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(eM . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Er macro - Errnotype .de Er .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Er ERRNOTYPE ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Er . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(eR . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Ev macro - Environment variable .de Ev .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Ev ENVIRONMENT_VARIABLE ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Ev . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(eV . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Fd macro - function declaration - not callable (& no err check) .\" NS fD register subroutine test (in synopsis only) .\" NS fY register subroutine count (in synopsis only) .\" NS fZ register also subroutine count (in synopsis only) .de Fd .ds mN Fd .if \\n(nS>0 \{\ . if \\n(fZ>0 \{\ . ie \\n(fD==0 .Pp . el .br . \} . nr fD+1 . nr fZ+1 . nr fY+1 .\} .nr cF \\n(.f .nr cZ \\n(.s \&\\*(fD\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .br .ft \\n(cF .fs \\n(cZ .. .\" NS Fr macro - function return value - not callable (at the moment) .de Fr .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Fr Function_return_value... \\*(Pu (#\\n(.c) . el \{\ . ds mN Fr . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(aR . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Ic macro - Interactive command .de Ic .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Ic Interactive command ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Ic . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(iC . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Li macro - literals .de Li .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage .Li argument ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Li . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(lI . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Ms macro - Math symbol .de Ms .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Ms Math symbol ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Ms . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(sY . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Nm macro - Name of command or page topic .\" NS n1 string - save first invocation of .Nm .\" NS iS register - indent second command line in a synopsis .de Nm .as b1 \\*(nM .if \\n(aC==0 \{\ . ie \\n(.$==0 \{\ . ie "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu (#\\n(.c) . el \&\\*(nM\\*(n1\fP\s0 . \} . el \{\ . ds mN Nm . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>0 \{\ . ie \\n(aC==\\n(aP \{\ . as b1 \&\\*(nM\\*(n1\fP\s0 . aZ . \} . el \{\ . nr aP+1 . ie \\n(C\\n(aP==1 \{\ . as b1 \&\\*(n1\fP\s0 . \\*(A\\n(aP . \} . el \{\ . nr cF \\n(.f . nr cZ \\n(.s . if \\n(nS \{\ . if "\\*(mN"Nm" \{\ . rs . in -\\n(iSu . ie \\n(nS>1 .br . el \{\ . if \\n(iS==0 \{\ . sw \\$1 . nr iS (\\n(sWu*\\n(fW)u . \} . \} . in +\\n(iSu . ti -\\n(iSu . nr nS \\n(nS+1 . \} . \} . if "\\*(n1"" .ds n1 \\*(A\\n(aP . nR . \} . \} .\} .. .\" NS Pa macro - Pathname .de Pa .if \\n(aC==0 \{\ . ie \\n(.$==0 \&\\*(pA~\fP\s0 . el \{\ . ds mN Pa . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(pA . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Sy macro - Symbolics .de Sy .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Sy symbolic_text ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Sy . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(sY . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS Tn macro - Trade Name Macro .de Tn .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Tn Trade_name(s) ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Tn . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(tN . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS nN macro - Trade Name Macro for inside of reference .de nN .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Tn Trade_name(s) ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Tn . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(tN . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . rR .\} .. .\" NS Va macro - variable name macro .de Va .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Va variable_name(s) ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Va . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(vA . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" .\" NS No macro - Normal text macro (default text style if mess up) .de No .as b1 \\*(nO .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .No must be called with arguments (#\\n(.c) . el \{\ . ds mN No . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . nr aP+1 . ie \\n(C\\n(aP==1 \{\ . \\*(A\\n(aP . \} . el \{\ . nr cF \\n(.f . nr cZ \\n(.s . nR . \} .\} .. .\"------------------------------------------------------------------------ .\" NS Op macro - Option Expression .de Op .if \\n(aC==0 \{\ . ds mN Op .\} .\" .ds qL \&\\*(lO .\" .ds qR \&\\*(rO .ds qL \&\\*(lB .ds qR \&\\*(rB .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 .. .\" NS Aq macro - Enclose string in angle brackets .de Aq .if \\n(aC==0 .ds mN Aq .ds qL \&< .ds qR \&> .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Bq macro - Enclose string in square brackets .de Bq .if \\n(aC==0 .ds mN Bq .ds qL \&\\*(lB .ds qR \&\\*(rB .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Dq macro - Enclose string in double quotes .de Dq .if \\n(aC==0 .ds mN Dq .ds qL \&\\*(Lq .ds qR \&\\*(Rq .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Eq macro - Enclose string in double quotes .de Eq .if \\n(aC==0 .ds mN Eq .ds qL \\$1 .ds qR \\$2 .En \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Pq macro - Enclose string in parenthesis .de Pq .if \\n(aC==0 .ds mN Pq .ds qL \&\\*(lP .ds qR \&\\*(rP .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Ql macro - Quoted literal is in file mdoc-[dit|n|g]roff (too large .\" an if-else to carry along recursively for `if n ...') .\" .\" NS Sq macro - Enclose string in single quotes .de Sq .if \\n(aC==0 .ds mN Sq .ds qL \&\\*(sL .ds qR \&\\*(sR .En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" .\" NS Es macro - Set up strings for .En call .de Es .if \\n(aC==0 \{\ . ie \\n(.$>2 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . el \{\ . ds qL \\$1 . ds qR \\$2 . \} .\} .if \\n(aC>\\n(aP \{\ . nr aP+1 . ds qL \\*(A\\n(aP . nr aP+1 . ds qR \\*(A\\n(aP . ie \\n(aC>\\n(aP .c\\n(C\\n(aP . el .aZ .\} .. .\" .tm En beg arg(A[\\n(aP])==\\*(A\\n(aP; .\" .tm En oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC .\" NS En macro - Enclose string with given args (eg [ and ] etc) .\" NS qL string variable set by calling macro .\" NS qR string variable set by calling macro .\" NS aJ register (for vR) .de En .as b1 \&\\*(qL .if \\n(aC==0 \{\ . ie \\n(.$==0 \{\ . as b1 \&\\*(qR . pB . \} . el \{\ . as mN (En) . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>0 \{\ . ie (\\n(aC-\\n(aP)==0 \{\ . as b1 \&\\*(qR . aZ . \} . el \{\ . ie \\n(C\\n(aC==3 \{\ . nr aJ \\n(aC-1 . vR . nr aJ+1 . ds A\\n(aJ \&\\*(qR\\*(A\\n(aJ . \} . el .aI \&\\*(qR 3 . nr aP+1 . if \\n(C\\n(aP==1 .\\*(A\\n(aP . if \\n(C\\n(aP>1 \{\ . nr aP-1 . No . \} . \} .\} .. .\" NS vR macro - vector routine (for En, trace backwards past trail punct) .de vR .if \\n(C\\n(aJ==3 \{\ . nr aJ-1 . vR .\} .. .\"------------------------------------------------------------------------ .\" NS Ao macro - Angle open .de Ao .if \\n(aC==0 .ds mN Ao .ds qL \&< .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Ac macro - Angle close .de Ac .if \\n(aC==0 .ds mN Ac .ds qR \&> .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Bo macro - Bracket open .de Bo .if \\n(aC==0 .ds mN Bo .ds qL \&[ .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Bc macro - Bracket close .de Bc .if \\n(aC==0 .ds mN Bc .ds qR \&] .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Do macro - Double Quote open .de Do .if \\n(aC==0 .ds mN Do .ds qL \&\\*(Lq .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Dc macro - Double Quote close .de Dc .if \\n(aC==0 .ds mN Dc .ds qR \&\\*(Rq .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Eo macro - Enclose open .de Eo .if \\n(aC==0 .ds mN Eo .ds qL \\$1 .eO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Ec macro - Enclose close .de Ec .if \\n(aC==0 .ds mN Ec .ds qR \\$1 .eC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Oo macro - Option open .de Oo .if \\n(aC==0 .ds mN Oo .ds qL \&[ .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Oc macro - Option close .de Oc .if \\n(aC==0 .ds mN Oc .ds qR \&] .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Po macro - Parenthesis open .de Po .if \\n(aC==0 .ds mN Po .ds qL \&( .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Pc macro - Parenthesis close .de Pc .if \\n(aC==0 .ds mN Pc .ds qR \&) .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Xo macro - Extend open (continue) .de Xo .if \\n(aC==0 .ds mN Xo .ds qL .eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Xe macro - Extend close (end) .de Xc .if \\n(aC==0 .ds mN Xc .ds qR .eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS eO macro - enclose string open .\" NS oM register (extension possible) .nr oM 0 .de eO .as b1 \\*(qL .nr oM+1 .\" .tm eO last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ; .if \\n(aC==0 \{\ . ie \\n(.$>0 \{\ . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} . el \{\ . if (\\n(dZ==0)&(\\n(sM==1) \{\ . nr dZ+1 . ds b2 \\*(b1 . ds b1 . nr lK \\n(.c . ev 2 . fi . di eB . \} . \} .\} .ie \\n(aC>0 \{\ . if \\n(aC>\\n(aP \{\ . nr aP +1 . ie \\n(C\\n(aP==1 .\\*(A\\n(aP . el \{\ . nr aP-1 . No . \} . \} . if \\n(aC==\\n(aP \{\ . if \\n(tP==1 \{\ . nr Xt 1 . \} . aY . \} .\} .el \{\ . if \\n(oM>1 .as b1 \\*(sV .\} .. .\" .\" NS eC macro - enclose string close .\" NS aa local register .de eC .nr oM-1 .\" .tm eO last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ; .as b1 \\*(qR .if \\n(aC==0 \{\ . ie \\n(.$>0 \{\ . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} . el \{\ . ie "\\*(xB"" \{\ . pB . \} . el \{\ . pB .\\*(L\\n(lC . nr Xt 0 . ds xB . \} . \} .\} .if \\n(aC>0 \{\ . ie \\n(aC==\\n(aP \{\ . ie \\n(oM==0 \{\ . aZ . \} . el .aY . \} . el \{\ . nr aa \\n(aP+1 . if \\n(C\\n(aa==2 .as b1 \\*(S\\n(aC . rr aa . No . \} .\} .. .\"------------------------------------------------------------------------ .\" NS Pf macro - Prefix (calls .pF) .de Pf .if \\n(aC==0 .ds mN Pf .ds qL \&\\$1 .pF \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS pF macro - Prefix (for prefixing open quotes, brackets etc) .de pF .ie \\n(aC==0 \{\ . as b1 \&\\*(qL . ie \\n(.$<2 \{\ . tm Warning: Missing arguments - prefix .Pf) . pB . \} . el .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .\} .el \{\ . ie (\\n(aC-\\n(aP)>1 \{\ . nr aP+1 . as b1 \&\\*(A\\n(aP . \} . el .tm Warning: trailing prefix Pf) .\} .if \\n(aC>0 \{\ . ie (\\n(aC-\\n(aP)==0 .aZ . el \{\ . nr aP+1 . c\\n(C\\n(aP . \} .\} .. .\" NS Ns macro - remove space (space remove done by .aV or .fV) .de Ns .if \\n(aC==0 \{\ . ds mN Ns . ie \\n(.$>0 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . el .tm Usage: .Ns must be called with arguments (#\\n(.c) .\} .No .. .de Ap .if \\n(aC==0 \{\ . ds mN Ap . tm Usage: Ap "cannot be first request on a line (no .Ap)" (#\\n(.c) .\} .as b1 \&' .No .. .\" NS Hv macro - Hard (unpaddable) Space vector .\" NS iV string inter-vector space .\" NS sV string inter-argument space .de Hv .ds iV \\*(sV .ds sV \\*(hV .. .\" NS Sv macro - Soft Space vector (troff limitation) .de Sv .ds sV \\*(iV .. .\" NS Tv macro - Tab Space vector .de Tv .ds sV \\*(tV .. .\" NS Sm macro - Space mode .\" NS sM register - default is one (space mode on) .nr sM 1 .de Sm .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm "Usage: .Sm [off | on]" (#\\n(.c) . el \{\ . ds mN Sm . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>0 \{\ . nr aP+1 . if "\\*(A\\n(aP"on" \{\ . ds sV \\*(iV . nr sM 1 . \} . if "\\*(A\\n(aP"off" \{\ . ds sV . rm S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 . nr sM 0 . \} . ie \\n(aC>\\n(aP \{\ . No . \} . el .aY .\} .. .\"------------------------------------------------------------------------ .\" Size and Argument type macros .\" NS aT macro - argument type .\" NS aU macro - argument type (same as .aT but uses A[1-9] strings .\" NS aT register argument type .de aT .nr aT 0 .ie \\n(sW>2 \{\ . nr aT 2 .\} .el \{\ . if \\n(sW==1 \{\ . ie \\n(z\\$1>2 \{\ . nr aT \\n(z\\$1 . \} . el .nr aT 2 . \} . if \\n(sW==2 \{\ . ie \\n(\\$1 \{\ . nr aT 1 . \} . el .nr aT 2 . \} .\} .. .de aU .nr aT 0 .aW \\$1 .ie \\n(sW>2 .nr aT 2 .el \{\ . if \\n(sW==1 \{\ . ie \\n(z\\*(A\\$1>2 \{\ . nr aT \\n(z\\*(A\\$1 . \} . el .nr aT 2 . \} . if \\n(sW==2 \{\ . ie (\\n(\\*(A\\$1) \{\ . nr aT 1 . \} . el .nr aT 2 . \} .\} .. .\" NS s0 macro - catch errors (spacing for non-existent class type 0) .\" NS s1 macro - set spacing for class type 1 .\" NS s1 macro - set spacing for class type 1 .\" NS s2 macro - set spacing for class type 2 .\" NS s3 macro - set spacing for class type 3 .\" NS s4 macro - set spacing for class type 4 .\" NS S[0-9] string spacing .\" NS xX local register .\" NS aa local register .de s0 .tm MDOC-ERROR: bogus type 0 (can't set space \\*(A\\n(aC) (#\\n(.c) .. .de s1 .if \\n(\\*(A\\n(aC==3 \{\ . nr xX \\n(aC-1 . rm S\\n(xX . ds S\\n(aC \\*(sV .\} .if \\n(\\*(A\\n(aC==2 \{\ . nr xX \\n(aC-1 . rm S\\n(xX .\} .. .de s2 .ds S\\n(aC \\*(sV .. .de s3 .if \\n(aC>1 \{\ . nr xX \\n(aC-1 . rm S\\n(xX .\} .ds S\\n(aC \\*(sV .. .de s4 .nr aa 0 .. .\" Class switches (on current argument aP) .\" NS c0 macro - catch errors (non-existent class type 0) .\" NS c1 macro - call request if type 1 .\" NS c2 macro - call .No if type 2 .\" NS c3 macro - call .No if type 3 .\" NS c4 macro - call .No if type 4 .de c0 .tm MDOC-ERROR: bogus class 0 (can't determine \\*(A\\n(aC) (#\\n(.c) .. .de c1 .\\*(A\\n(aP .. .de c2 .nr aP-1 .No .. .de c3 .nr aP-1 .No .. .de c4 .nr aP-1 .No .. .\" NS y1 macro - ignore if class 1 .\" NS y2 macro - ignore if class 2 .\" NS y3 macro - append if type 3 .\" NS y4 macro - append if type 4 .de y1 .nr aa 1 .. .de y2 .nr aa 1 .. .de y3 .as b1 \\*(A\\n(aP .nr aP+1 .n\\C\\n(aP .. .de y4 .as b1 \\*(A\\n(aP .nr aP+1 .n\\C\\n(aP .. .\"-------------------------------------------------------------------------- .\" Ns Bf macro - Begin Font Mode (will be begin-mode/end-mode in groff & TeX) .\" Ns Ef macro - End Font Mode .de Bf .ds mN Bf .ie \\n(.$>0 \{\ . nr bF \\n(.f . nr bZ \\n(.s . if "\\$1"Em" \&\\*(eM . if "\\$1"Li" \&\\*(lI . if "\\$1"Sy" \&\\*(sY . if "\\$1"-emphasis" \&\\*(eM . if "\\$1"-literal" \&\\*(lI . if "\\$1"-symbolic" \&\\*(sY .\} .el .tm Usage .Bf [Em | emphasis | Li | literal | Sy | symbolic] (#\\n(.c) .. .de Ef .ds mN Ef .ie \\n(.$>0 .tm Usage .Ef (#\\n(.c) .el \&\f\\n(bF\s\\n(bZ .. .\" NS Bd macro - Begin Display display-type [offset string] .\" NS Ed macro - end Display .\" NS O[0-9] registers - stack of indent .\" NS d[0-9] registers - display-type stack .de Bd .ds mN Bd .ie \\n(.$==0 \{\ .tm Usage: .Bd [-literal | -filled | -ragged ] [-offset [string]] [-compact] (#\\n(.c) .\} .el \{\ . ds aa . nr bV 0 . nr iD 0 . nr dP+1 . if "\\$1"-literal" \{\ . nr iD+1 . ds d\\n(dP dL . nr cF \\n(.f . nr cZ \\n(.s . ie t \{\&\\*(lI ' ta 9n 18n 27n 36n 45n 54n 63n 72n . \} . el \{\ ' ta 8n 16n 24n 32n 40n 48n 56n 64n 72n . \} . nf . \} . if "\\$1"-filled" \{\ . nr iD+1 . ds d\\n(dP dF . br . \} . if "\\$1"-ragged" \{\ . nr iD+1 . ds d\\n(dP dR . nf . \} .\" .tm Here is argc: \\n(.$ and here is iD \\n(iD . if ((\\n(iD>=1)&(\\n(.$>\\n(iD)) \{\ . bV \\$2 \\$3 \\$4 . \} . if \\n(O\\n(dP>0 'in \\n(.iu+\\n(O\\n(dPu . if (\\n(bV==0)&(\\n(nS==0) \{\ ' sp \\n(dVu . \} . if \\n(cR==0 .ne 2v . nr bV 0 . nr iD 0 .\} .. .\" NS bV macro - resolve remaining .Bd arguments .de bV .\" .tm in bV with args: \\$1 \\$2 \\$3 .nr iD 1 .ds bY .if "\\$1"-offset" \{\ . ds bY \\$2 . if "\\*(bY"left" \{\ . nr iD+1 . nr O\\n(dP 0 . \} . if "\\*(bY"right" \{\ . nr iD+1 . nr O\\n(dP (\\n(.l/3)u . \} . if "\\*(bY"center" \{\ . nr iD+1 . nr O\\n(dP (\\n(.l-\\n(.i)/4u . \} . if "\\*(bY"indent" \{\ . nr iD+1 . nr O\\n(dP \\n(dIu . \} . if "\\*(bY"indent-two" \{\ . nr iD+1 . nr O\\n(dP \\n(dIu+\\n(dIu . \} . if \\n(iD==1 \{\ . nr iD+1 . sW "\\*(bY" . ie \\n(sW>2 \{\ . ie ((\\*(bY>9n)&(\\$3<100n)) \{\ . nr O\\n(dP \\*(bY . \} . el .nr O\\n(dP (\\n(sW)*\\n(fWu . \} . el \{\ . if \\n(sW==2 .aT \\*(bY . ie \\n(aT==1 \{\ . nr O\\n(dP \\n(\\*(bY . \} . el .nr O\\n(dP \\*(bY . \} . \} .\} .if "\\$1"-compact" \{\ . nr bV 1 .\} .if \\n(iD<\\n(.$ \{\ . ie "\\*(bY"" \{\ . bV \\$2 \\$3 . \} . el \{\ . bV \\$3 . \} .\} .. .\" NS Ed macro - end display .de Ed .ds mN Ed .br .if "\\*(d\\n(dP"dL" \{\ . ft \\n(cF . fz \\n(cZ .\} .in \\n(.iu-\\n(O\\n(dPu .rr O\\n(dP .rm d\\n(dP .nr dP \\n(dP-1 .fi .. .\"-------------------------------------------------------------------------- .\" NS Bl macro - begin list (.Bl list-type) .\" NS L[0-9] registers - stack of list types .de Bl .ie \\n(.$==0 \{\ .tm Usage: .Bl [[-hang | -tag] [-width]] [ -item | -enum | -bullet | -diag] (#\\n(.c) .\} .el \{\ . ds mN Bl . nr aP 0 . nr lC+1 . ds A1 \\$2 . ds A2 \\$3 . ds A3 \\$4 . ds A4 \\$5 . ds A5 \\$6 . ds A6 \\$7 . ds A7 \\$8 . ds A8 \\$9 . nr fV \\n(.$-1 . if "\\$1"-hang" \{\ . nr aP+1 . ds L\\n(lC hL . nr w\\n(lC 6n . nr tC 1 . \} . if "\\$1"-tag" \{\ . nr aP+1 . ds L\\n(lC tL . nr tC 1 . \} . if "\\$1"-item" \{\ . nr aP+1 . ds L\\n(lC iT . nr tC 1 . \} . if "\\$1"-enum" \{\ . nr aP+1 . ds L\\n(lC nU . nr w\\n(lC 2n . nr tC 1 . \} . if "\\$1"-bullet" \{\ . nr aP+1 . ds L\\n(lC bU . nr w\\n(lC 2n . nr tC 1 . \} . if "\\$1"-dash" \{\ . nr aP+1 . ds L\\n(lC hU . nr w\\n(lC 2n . nr tC 1 . \} . if "\\$1"-inset" \{\ . nr aP+1 . ds L\\n(lC lL . nr tC 1 . \} . if "\\$1"-diag" \{\ . nr aP+1 . ds L\\n(lC mL . nr mL 1 . \} . if "\\$1"-ohang" \{\ . nr aP+1 . ds L\\n(lC oL . nr tC 1 . \} . if "\\$1"-column" \{\ . nr aP+1 . ds L\\n(lC cL . \} . ie \\n(aP==0 \{\ . tm \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . tm Usage: .Bl [[-inset|-tag] -width] [-item|-enum|-bullet|-diag] (#\\n(.c) . \} . el \{\ . tY . if (\\n(aP==1)&(\\n(aP<\\n(.$) \{\ . nr aP 0 . lV . if "\\*(L\\n(lC"cL" \{\ . W\\n(wV . nr w\\n(lC 0 ' in -\\n(eWu . ie \\n(v\\n(lC==1 \{\ . nr aa 0 . \} . el \{\ . sp \\n(dVu . \} . nf . nr wV 0 . \} . \} . \} . nr aP 0 . aY .\" .tm Here is L[\\n(lC]==\\*(L\\n(lC .\} .. .\" NS lV macro - resolve remaining .Bl arguments .de lV .nr aP+1 .if \\n(fV>=\\n(aP \{\ . nr iD 0 . if "\\*(A\\n(aP"-compact" \{\ . nr iD 1 . nr v\\n(lC 1 . \} . if "\\*(A\\n(aP"-width" \{\ . nr iD 1 . nr aP+1 . nr tW 1 . ds t\\n(lC TagwidtH . ds tS \\*(A\\n(aP . aW \\n(aP . ie \\n(sW>2 \{\ . ie \\n(sW==3 \{\ . ie (\\*(tS>9n)&(\\*(tS<99n) \{\ . nr w\\n(lC \\*(tSu . \} . el .nr w\\n(lC (\\n(sW)*\\n(fWu . \} . el .nr w\\n(lC (\\n(sW)*\\n(fWu . \} . el \{\ . aT \\*(tS . ie \\n(aT==1 \{\ . nr w\\n(lC \\n(\\*(tS . \} . el \{\ . nr w\\n(lC \\*(tSu . \} . \} . \} . if "\\*(A\\n(aP"-offset" \{\ . nr iD 1 . nr aP+1 . ie "\\*(A\\n(aP"indent" \{\ . nr o\\n(lC \\n(Dsu . \} . el \{\ . ds tS \\*(A\\n(aP . aW \\n(aP . ie \\n(sW>2 \{\ . ie (\\*(tS>9n)&(\\*(tS<100n) \{\ . nr o\\n(lC \\*(tS . \} . el .nr o\\n(lC (\\n(sW)*\\n(fWu . \} . el \{\ . ie \\n(C\\n(aP==1 .nr o\\n(lC \\n(\\*(tS . el .nr o\\n(lC \\*(tS . \} . \} . \} . if \\n(iD==0 \{\ . if "\\*(L\\n(lC"cL" \{\ . nr wV+1 . ds A\\n(wV \\*(A\\n(aP . \} . \} . if \\n(fV>\\n(aP .lV .\} .. .\" NS El macro - end list .\" NS iD local register .de El .ie \\n(.$>0 \{\ . tm Usage: .El (#\\n(.c) .\} .el \{\ . ds mN El . nr iD 0 . if "\\*(L\\n(lC"cL" \{\ . nr iD 1 . cC . \} . if "\\*(L\\n(lC"nU" \{\ . nr nU 0 . \} . if \\n(mL>0 \{\ . nr iD 1 . nr mL 0 . \} . if "\\*(L\\n(lC"iT" \{\ ' in \\n(.iu-\\n(o\\n(lCu . tZ . nr lC-1 . tY . nr iD 1 . \} . if "\\*(L\\n(lC"oL" \{\ ' in \\n(.iu-\\n(o\\n(lCu . tZ . nr lC-1 . tY . nr iD 1 . \} . if "\\*(L\\n(lC"lL" \{\ ' in \\n(.iu-\\n(o\\n(lCu . tZ . nr lC-1 . tY . nr iD 1 . \} . if \\n(iD==0 \{\ . lE . \} . br . nr iD 0 .\} .. .\" NS It macro - list item .\" NS iD local register .\" NS aA save pA font string for section FILES (no underline if nroff) .de It .if "\\*(L\\n(lC"" \{\ . tm Usage .Bl -list-type [-width [string] | -compact | -offset [string]] (#\\n(.c) . tm .It \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 .\} .\" .tm Here is L[\\n(lC]==\\*(L\\n(lC .ne 2v .ie \\n(.$>0 \{\ . ds mN It . ds b1 . nr iD 0 . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . if "\\*(L\\n(lC"mL" \{\ . nr iD 1 . nr aP 0 . aX . \\*(L\\n(lC . \} . if "\\*(L\\n(lC"cL" \{\ . ds b1 . nr aP 0 . nr iD 1 . \\*(L\\n(lC . \} . if "\\*(L\\n(lC"iT" \{\ . nr aP 0 . nr iD 1 . \\*(L\\n(lC . \} . if \\n(iD==0 \{\ . fV .\" .tm It list-type==\\*(L\\n(lC, aP==\\n(aP .\" .tm It beg arg(A[1])==\\*(A1; oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC . nr oM+1 . nr tP 1 . nr aP+1 . nr tX \\n(C\\n(aP . ds tX \\*(A\\n(aP . if \\n(nF==1 \{\ . ds aA \\*(pA . if n .ds pA \\*(nO . \} . ie \\n(C\\n(aP==1 \{\ . \\*(A\\n(aP . \} . el \{\ . nr aP-1 . No . \} . ie \\n(Xt==1 .ds xB \&\\*(L\\n(lC . el .\\*(L\\n(lC . \} . nr iD 0 .\} .el .\\*(L\\n(lC .. .\" NS lL macro - .It item of list-type inset .de lL .lY .br \&\\*(b1 .nr oM-1 .nr tP 0 .dZ+1 .ds b1 .aY 'fi .. .\" NS hL macro - .It item of list-type hanging label (as opposed to tagged) .de hL .lX .nr bb \\n(w\\n(lCu+\\n(lSu .ti -\\n(bbu .\" .ie \w'\\*(b1'u>=(\\n(w\\n(lCu) \&\\*(b1\\*(lS .ie \w'\\*(b1'u>=(\\n(w\\n(lCu) \&\\*(b1 .el \&\\*(b1\h'|\\n(bbu'\c .nr oM-1 .dZ+1 .ds b1 .nr tP 0 .aY 'fi .. .\" NS oL macro - .It item of list-type overhanging label .de oL .lY \&\\*(b1 .br .nr oM-1 .dZ+1 .ds b1 .nr tP 0 .aY 'fi .. .\" NS iT macro - .It item of list-type [empty label] .de iT .lY .br .aY 'fi .. .\" NS nU macro - Enumerated list .\" NS nU register count .\" NS hU macro - Hyphen paragraph list (sub bullet list) .\" NS bU macro - Bullet paragraph list .de nU .nr oM+1 .nr nU+1 .ds b1 \&\\n(nU .uL .. .de bU .nr oM+1 .nr bU+1 .ds b1 \&\\*(sY\&\(bu\fP .uL .. .de hU .nr oM+1 .nr bU+1 .ds b1 \&\\*(sY\&\-\fP .uL .. .\" NS uL macro - .It item of list-type enum/bullet/hyphen .de uL .lX .nr bb \\n(w\\n(lCu+\\n(lSu .ti -\\n(bbu .ie \w'\\*(b1'u>=(\\n(w\\n(lCu) \&\\*(b1 .\" .ie \w'\\*(b1'u>=(\\n(w\\n(lCu) \&\\*(b1\0 .el \&\\*(b1\h'|\\n(bbu'\c .nr oM-1 .dZ+1 .ds b1 .nr tP 0 .aY 'fi .. .\" NS mL macro - .It item of list-type diagnostic-message .de mL .nr cF \\n(.f .nr cZ \\n(.s .ie \\n(mL==1 \{\ . nr zB \\n(.c . ie (\\n(zB-\\n(zA)>1 .Pp . el .br . nr zA \\n(zB . nr zB 0 .\} .el \{\ . nr zA \\n(.c . br .\} \&\\*(sY\\*(b1\f\\n(cF\s\\n(cZ\\*(lS\c .aY .ds b1 'fi .. .\" NS tL macro - .It item of list-type "tag" .de tL .if \\n(tW==0 .lW .lX .if "\\*(A1"Ql" .tm -mdoc limitation: Cannot create item of type `Ql' .\" . nr bb \\n(w\\n(lCu+\\n(lSu+2n .\" . ti -\\n(bbu .\" . ie (\w'\\*(b1'u)>(\\n(w\\n(lCu) \{\\&\\*(sL\\*(b1\\*(sR .\" . br .\" . \} .\" . el \&\\*(sL\\*(b1\\*(sR\h'|\\n(bbu'\c .\" .\} .\" .el \{\ .\" 'nf .nr bb \\n(w\\n(lCu+\\n(lSu .ti -\\n(bbu .ie (\w'\\*(b1'u)>(\\n(w\\n(lCu) \{\&\\*(b1 . br .\} .el \&\\*(b1\h'|\\n(bbu'\c .if \\n(nF==1 \{\ . if n .ds pA \\*(aA .\} .nr oM-1 .nr tP 0 .dZ+1 .ds b1 .aY 'fi .. .\" NS lW macro - resolve unknown label/tag width (if .Bl [inset | tag] only) .de lW .if !"TagwidtH"\\*(t\\n(lC" \{\ . ie \\n(tX==1 \{\ . ds t\\n(lN \\*(tX . nr w\\n(lN \\n(\\*(tX . \} . el \{\ . ds t\\n(lN No . nr w\\n(lN \\n(No . \} . if !"\\*(t\\n(lC"\\*(t\\n(lN" .nr tC 1 .\} .. .\" NS lX macro - set up vertical spacing (if compact) and offset+indent (all) .de lX .ie \\n(tC \{\ . nr tC 0 . nr tW 0 . if \\n(v\\n(lC==0 .sp \\n(dVu . in \\n(.iu+\\n(w\\n(lCu+\\n(o\\n(lCu+\\n(lSu .\} .el \{\ . ie \\n(v\\n(lC==1 \{\ . nr aa 0 . \} . el \{\ . sp \\n(dVu . \} .\} .if !\\n(cR .ne 2v .. .\" NS lY macro - set up vertical spacing (if compact) and offset+indent (all) .de lY .ie \\n(tC \{\ . nr tC 0 . nr tW 0 . if \\n(v\\n(lC==0 .sp \\n(dVu . in \\n(.iu+\\n(o\\n(lCu .\} .el \{\ . ie \\n(v\\n(lC==1 \{\ . nr aa 0 . \} . el \{\ . sp \\n(dVu . \} .\} .if !\\n(cR .ne 2v .. .\" NS tS temporary string .\" NS hL macro - hanging list function .\" NS tS temporary string .\" NS hL macro - hanging list function .\" NS lT macro - tagged list function .\" NS lE macro - list end function .\" NS tX string (initial string) .\" NS tX register (initial class) .\" NS tC parameter change flag .\" NS Xt something to do with diversions... .\" NS lC register - list type stack counter .\" NS tP register tag flag (for diversions) .\" NS w[0-9] register tag stack (nested tags) .\" NS t[0-9] register tag string stack (nested tags) .\" NS o[0-9] register offset stack (nested tags) .\" NS v[0-9] register vertical tag break stack .\" NS h[0-9] register horizontal tag stack (continuous if 1, break if 0) .nr lC 0 .nr wV 0 .nr w1 0 .nr o1 0 .nr v1 0 .nr h1 0 .ds t\n(lC .de lE .\" IN lC o[\\n(lC]==\\n(o\\n(lC, w[\\n(lC]==\\n(w\\n(lC, .ie \\n(o\\n(lC>0 \{\ ' in \\n(.iu-(\\n(w\\n(lCu)-(\\n(o\\n(lCu)-\\n(lSu . rr o\\n(lC .\} .el 'in \\n(.iu-\\n(w\\n(lCu-\\n(lSu .if \\n(lC<=0 .tm Extraneous .Bl or .El call (#\\n(.c) .tZ .nr lC-1 .tY .. .\" NS tY macro - set up next block for list .\" NS tZ macro - decrement stack .\" NS tY register (next possible lC value) .de tY .nr tY (\\n(lC+1) .nr w\\n(tY 0 .nr h\\n(tY 0 .nr o\\n(tY 0 .ds t\\n(tY \\*(t\\n(lC .ds L\\n(tY .nr v\\n(tY 0 .. .de tZ .rm L\\n(tY .rr w\\n(tY .rr h\\n(tY .rr o\\n(tY .rm t\\n(tY .rr v\\n(tY .nr tY-1 .. .\" initial values .nr w1 0 .nr o1 0 .nr h1 0 .ds t1 .nr v1 0 .nr tY 1 .\" NS Xr macro - cross reference (man page only) .de Xr .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c) . el \{\ . ds mN Xr . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . nr aP+1 . ie \\n(C\\n(aP==1 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c) . el \{\ . ie \\n(C\\n(aP>2 .y\\n(C\\n(aP . el \{\ . as b1 \&\\*(xR\\*(A\\n(aP\fP\s0 . if \\n(aC>\\n(aP \{\ . nr aP+1 . if \\n(C\\n(aP==2 \{\ . as b1 \&(\\*(A\\n(aP) . nr aP+1 . \} . if \\n(aC>=\\n(aP \{\ . c\\n(C\\n(aP . \} . \} . \} . aZ . \} .\} .. .\" NS Sx macro - cross section reference .de Sx .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Sx Usage: .Sx Section Header \\*(Pu (#\\n(.c) . el \{\ . ds mN Sx . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .\} .if \\n(aC>\\n(aP \{\ . nr aP+1 . as b1 \\*(sX . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS cC macro - column-list end-list .\" NS eW macro - column indent width .\" NS cI register - column indent width .\" NS W[1-5] macro - establish tabs for list-type column .de cC 'in \\n(.iu-\\n(o\\n(lCu-\\n(w\\n(lCu .ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i .fi .tZ .nr lC-1 .tY .. .de W1 .ta \w'\\*(A1 'u .nr eW \w'\\*(A1 'u 'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu .. .de W2 .\" ARGS2 Here is offset == \\n(o\\n(lCu .ta \w'\\*(A1 'u +\w'\\*(A2 'u .nr eW \w'\\*(A1 'u+\w'\\*(A2 'u 'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu .. .de W3 .ta \w'\\*(A1 'u +\w'\\*(A2 'u +\w'\\*(A3 'u .nr eW \w'\\*(A1 'u+\w'\\*(A2 'u+\w'\\*(A3 'u 'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu .. .de W4 .\" ARGS4Here is o[\\n(lC] == \\n(o\\n(lCu, .\" A1==\\*(A1 .\" A2==\\*(A2 .\" A3==\\*(A3 .\" A4==\\*(A4 .ta \w'\\*(A1 'u +\w'\\*(A2 'u +\w'\\*(A3 'u +\w'\\*(A4 'u .nr eW \w'\\*(A1 'u+\w'\\*(A2 'u+\w'\\*(A3 'u +\w'\\*(A4 'u 'in \\n(.iu+\\n(eWu+\\n(o\\n(lCu .. .de W5 .ta \w'\\*(A1 'u +\w'\\*(A2 'u +\w'\\*(A3 'u +\w'\\*(A4 'u +\w'\\*(A5 'u .nr eW \w'\\*(A1 'u +\w'\\*(A2 'u +\w'\\*(A3 'u +\w'\\*(A4 'u +\w'\\*(A5 'u ' in \\n(.iu+\\n(eWu+\\n(o\\n(lCu .. .\" NS cL macro - column items .de cL .if \\n(w\\n(lC==0 .nr w\\n(lC \\n(eWu .if \\n(.u==0 \{\ . fi ' in \\n(.iu+\\n(eWu .\} .ti -\\n(eWu .fV .nr aP+1 .ie \\n(aC>=\\n(aP \{\ . if "\\*(A\\n(aP"Ta" \{\ . nr jJ \\n(aP-1 . rm S\\n(jJ . rr jJ . \} . c\\n(C\\n(aP .\} .el .tm Usage: .It column_string [Ta [column_string ...] ] (#\\n(.c) .. .\" NS Ta macro - append tab (\t) .de Ta .ie \\n(aC>0 \{\ . nr aP+1 . ie \\n(aC>=\\n(aP \{\ . if "\\*(A\\n(aP"Ta" \{\ . nr jJ \\n(aP-1 . rm S\\n(jJ . rr jJ . \} . as b1 \\t . c\\n(C\\n(aP . \} . el \{\ . as b1 \\t\\c . rm S\\n(aP . pB . aY . \} .\} .el \{\ . tm Usage: Ta must follow column entry: e.g. (#\\n(.c) . tm .It column_string [Ta [column_string ...] ] .\} .. .\" .\" NS Dl macro - display (one line) literal .de Dl 'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i .in \\n(.iu+\\n(Dsu .ie \\n(aC==0 \{\ . ie \\n(.$==0 \{\ . tm Usage: .Dl argument ... (#\\n(.c) . \} . el \{\ . ds mN Dl . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . Li . \} .\} .el \{\ . tm Usage: .Dl not callable by other macros (#\\n(.c) .\} .in \\n(.iu-\\n(Dsu .. .\" .\" NS D1 macro - display (one line) .de D1 'ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i .in \\n(.iu+\\n(Dsu .ie \\n(aC==0 \{\ . ie \\n(.$==0 \{\ . tm Usage: .D1 argument ... (#\\n(.c) . \} . el \{\ . ds mN D1 . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . nr aP+1 . ie \\n(C\\n(aP==1 .\\*(A\\n(aP . el .No . \} .\} .el \{\ . tm Usage: .D1 not callable by other macros (#\\n(.c) .\} .in \\n(.iu-\\n(Dsu .. .\" NS Ex macro - DEFUNCT .de Ex .tm Ex defunct, Use .D1: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" .\" NS Ex macro - DEFUNCT .de Ex .tm Ex defunct, Use .D1: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" .\" NS Vt macro - Variable type (for forcing old style variable declarations) .de Vt .nr cF \\n(.f .ft \\n(vT \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .ft \\n(cF .. .\" .\" NS Ft macro - Function type .nr fZ 0 .de Ft .if \\n(nS>0 \{\ . if \\n(fZ>0 .Pp . nr fZ+1 . nr fY+1 .\} .nr cF \\n(.f .nr cZ \\n(.s .\" .ft \\n(fT \&\\*(fT\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .ft \\n(cF .fs \\n(cZ .br .. .\" .\" NS Ot macro - Old Function type (fortran - no newline) .de Ot .if \\n(nS>0 \{\ . if \\n(fZ>0 .Pp . nr fZ+1 . nr fY+1 .\} .nr cF \\n(.f .ft \\n(fT \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .ft \\n(cF .. .\" .\" NS Fa macro - Function arguments .de Fa .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Fa Function Arguments ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Fa . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(fA . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR . if \\n(nS>0 \{\ . if \\n(fZ>0 .br . \} .\} .. .\" NS Fn macro - functions .\" NS fY register - dick with old style function declarations (fortran) .\" NS fZ register - break a line when more than one function in a synopsis .\" .de Fn .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .Fn function_name function_arg(s) ... \\*(Pu (#\\n(.c) . el \{\ . ds mN Fn . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .if \\n(nS>0 \{\ . if (\\n(fY==0) \{\ . if \\n(fZ>0 .Pp . nr fZ+1 . \} . nr fD 0 .\} .if \\n(aC>\\n(aP \{\ . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . as b1 \\*(fN\\*(A\\n(aP\fP\s0\\*(lp . ie \\n(aC>\\n(aP \{\ . as b1 \\*(fA . nr aP+1 . f\\n(C\\n(aP . \} . el \{\ . as b1 \\*(rp . aZ . \} . if \\n(nS>0 .br .\} .. .\" .\" NS f1 macro - class switch .\" NS f2 macro - handle function arguments .\" NS f3 macro - punctuation .\" NS f4 macro - write out function .de f1 .as b1 \\*(rp\f\\n(cF\s\\n(cZ .\\*(A\\n(aP .. .de f2 .as b1 \\*(A\\n(aP .ie \\n(aC>\\n(aP \{\ . nr aa \\n(aP . nr aP+1 . if \\n(C\\n(aP==2 \{\ . as b1 \&\|\f\\n(cF\s\\n(cZ,\\*(S\\n(aa\fP\s0\| . \} . f\\n(C\\n(aP .\} .el \{\ . as b1 \\*(rp\f\\n(cF\s\\n(cZ . aZ .\} .. .de f3 .as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*(A\\n(aP .ie \\n(aC>\\n(aP \{\ . No .\} .el .aZ .. .de f4 .as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*(S\\n(aP\\*(A\\n(aP .ie \\n(aC>\\n(aP \{\ . nr aP+1 . No .\} .el .aZ .. .\" NS Fc - Function close - not implemented yet .\" NS Fo - Function open - not implemented yet .\" .\" Very crude references, stash all reference info into strings (usual .\" use of b1 buffer, then b1 contents copied to string of retrievable .\" naming convention), print out reference on .Re request and clean up. .\" Ordering very limited, no fancy citations, but can do articles, journals .\" and books - need to add several missing options (like date, city etc). .\" should be able to grab a refer entry, massage it a wee bit (prefix .\" a `.' to the %[A-Z]) and not worry (ha!) .\" .\" NS Rs macro - Reference Start .\" NS rS register - Reference Start flag .\" NS rS string - Reference Start buffer name for next save (of b1 buffer) .de Rs .nr rS 1 .rC .if \\n(nA==1 .br .nr Kl 0 .. .\" NS Re macro - Reference End .de Re .rZ .rC .nr rS 0 .. .\" NS Js macro - Journal Citation Start .\" .de Js .\" .ds rS .\" .if \\n(nA==1 .br .\" .rC .\" .nr jS 1 .\" .. .\" .\" .\" NS Je macro - Journal Citation End .\" .de Je .\" .jZ .\" .rC .\" .nr jS 0 .\" .. .\" NS rC macro - reference cleanup .de rC .nr uK 0 .nr jK 0 .nr nK 0 .nr oK 0 .nr qK 0 .nr rK 0 .nr tK 0 .nr vK 0 .ds rS .rm U1 U2 U3 U4 U5 U6 U7 U8 .rm uK jK nK oK rK qK tK vK .. .\" NS rZ macro - reference print .de rZ .tm here is Kl==\\n(Kl .tm Here is tK==\\n(tK %T \\*(tK .tm here is oK==\\n(oK %O \\*(oK .if \\n(uK \{\&\\*(U1, . nr aK 1 . if (\\n(uK>1 \{\ . aK . \} . nr Kl-\\n(uK .\} .if \\n(tK \{\ . nr Kl-1 . if \\n(Kl==0 \{\ . ie (\\n(jK:\\n(bK) \&\\*(tK. . el \&\\*(eM\\*(tK\\*(nO. . \} . if \\n(Kl>0 \{\ . ie (\\n(jK:\\n(bK) \&\\*(tK . el \&\\*(eM\\*(tK\\*(nO, . \} .\} .if \\n(bK \{\ . nr Kl-1 . if \\n(Kl==0 \&\\*(eM\\*(bK\\*(nO. . if \\n(Kl>0 \&\\*(eM\\*(bK\\*(nO, .\} .if \\n(jK \{\ . nr Kl-1 . if \\n(Kl==0 \&\\*(eM\\*(jK\\*(nO. . if \\n(Kl>0 \&\\*(eM\\*(jK\\*(nO, .\} .if \\n(rK \{\ . nr Kl-1 . if \\n(Kl==0 \&\\*(rK. . if \\n(Kl>0 \&\\*(rK, .\} .if \\n(nK \{\ . nr Kl-1 . if \\n(Kl==0 \&\\*(nK. . if \\n(Kl>0 \&\\*(nK, .\} .if \\n(vK \{\ . nr Kl-1 . if \\n(Kl==0 \&\\*(vK. . if \\n(Kl>0 \&\\*(vK, .\} .if \\n(oK \{\ . nr Kl-1 . if \\n(Kl==0 \&\\*(oK. . if \\n(Kl>0 \&\\*(oK, .\} .if \\n(Kl>0 .tm unresolved reference problem .. .\" NS aK macro - print out reference authors .de aK .nr aK+1 .ie (\\n(uK-\\n(aK)==0 \{\&and \\*(U\\n(aK, .el \{\&\\*(U\\n(aK, . aK .\} .. .\" NS %A macro - reference author(s) .\" NS uK register - reference author(s) counter .\" NS U[1-9] strings - reference author(s) names .de %A .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .%A Author_name (#\\n(.c) . el \{\ . nr uK+1 . nr Kl+1 . ds rS U\\n(uK . ds mN %A . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(rA . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . rR .\} .. .\" NS %B macro - [reference] Book Name .\" NS bK string - Book Name .\" NS bK register - Book Name flag .de %B .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .%B Book Name (#\\n(.c) . el \{\ . ds mN %B . nr bK+1 . nr Kl+1 . ds rS bK . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(rA . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . rR .\} .. .\" NS %J macro - [reference] Journal Name .\" NS jK register - [reference] Journal Name flag .\" NS jK string - [reference] Journal Name .de %J .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .%J Journal Name (#\\n(.c) . el \{\ . ds mN %J . nr jK+1 . ds rS jK . nr Kl+1 . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(eM . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . rR .\} .. .\" NS %N macro - [reference] issue number .\" NS nK register - [reference] issue number flag .\" NS nK string - [reference] issue number .de %N .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .%N issue number (#\\n(.c) . el \{\ . nr nK+1 . nr Kl+1 . ds rS nK . ds mN %N . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(rA . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . rR .\} .. .\" NS %O macro - [reference] optional information .\" NS oK register - [reference] optional information flag .\" NS oK string - [reference] optional information .de %O .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .%O optional information ... \\*(Pu (#\\n(.c) . el \{\ . ds mN %O . nr oK+1 . nr Kl+1 . ds rS oK . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(rA . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . rR .\} .. .\" NS %Q macro - Corporate or Foreign Author .\" NS qK string - Corporate or Foreign Author .\" NS qK register - Corporate or Foreign Author flag .de %Q .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .%Q Corporate or Foreign Author (#\\n(.c) . el \{\ . ds mN %Q . nr qK+1 . nr Kl+1 . ds rS qK . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(rA . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . rR .\} .. .\" NS %R macro - [reference] report name .\" NS rK string - [reference] report name .\" NS rK register - [reference] report flag .de %R .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .%R reference report (#\\n(.c) . el \{\ . ds mN %R . nr rK+1 . nr Kl+1 . ds rS rK . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(rA . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . rR .\} .. .\" NS %T macro - reference title .\" NS tK string - reference title .\" NS tK register - reference title flag .de %T .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .%T (#\\n(.c) . el \{\ . ds mN %T . nr tK+1 . nr Kl+1 . ds rS tK . ds A1 \\$1 . ds A2 \\$2 . ds A3 \\$3 . ds A4 \\$4 . ds A5 \\$5 . ds A6 \\$6 . ds A7 \\$7 . ds A8 \\$8 . ds A9 \\$9 . nr fV \\n(.$ . fV . \} .\} .if \\n(aC>\\n(aP \{\ . ie \\n(jS==1 \{\ . nr cF \\n(.f . nr cZ \\n(.s . ds qL \&\\*(Lq\\*(rA . ds qR \&\\*(Rq\f\\n(cF\s\\n(cZ . En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} . el \{\ . as b1 \\*(eM . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . rR . \} .\} .. .\" NS %V macro - reference volume .\" NS vK string - reference volume .\" NS vK register - reference volume flag .de %V .if \\n(aC==0 \{\ . ie \\n(.$==0 .tm Usage: .%V Volume , ... \\*(Pu (#\\n(.c) . el \{\ . ds mN %V . nr vK+1 . nr Kl+1 . ds rS vK . aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 . \} .\} .if \\n(aC>\\n(aP \{\ . as b1 \\*(rA . nr aP+1 . nr cF \\n(.f . nr cZ \\n(.s . nR .\} .. .\" NS rR macro - reference recursion routine .\" NS jM local register .\" NS jN local register .de rR .hy 0 .nr jM \\n(C\\n(aP .ie \\n(jM==1 \{\ . as b1 \&\f\\n(cF\s\\n(cZ . ie "\\*(A\\n(aP"Tn" \{\ . .nN . \} . el \{\ . if \\n(aC>8 .tm Usage: \\*(mN - maximum 8 arguments (#\\n(.c) . aI rR 1 . \\*(A\\n(aP . \} .\} .el \{\ . nr jN \\n(aP . ie \\n(jM==2 .as b1 \&\\*(A\\n(aP . el .as b1 \&\f\\n(cF\s\\n(cZ\\*(A\\n(aP\fP\s0 . ie \\n(aC==\\n(aP \{\ . as b1 \&\f\\n(cF\s\\n(cZ . rD . \} . el \{\ . nr aP+1 . as b1 \&\\*(S\\n(jN . rR . \} .\} .rr jM jN .. .\" NS rD macro - save b1 buffer in to appropriate name .de rD .as \\*(rS \\*(b1 .ds b1 .ds rS .aY .. .\" NS Hf macro - source include header files. .de Hf .Pp File: .Pa \\$1 .Pp .nr cF \\n(.f .nr cZ \\n(.s .ie t \{\ \&\\*(lI .br .ta +9n 18n 27n 36n 45n 54n 63n 72n .\} .el \{\ .ta +8n 16n 24n 32n 40n 48n 56n 64n 72n .\} .nf .so \\$1 .fi .ft \\n(cF .fz \\n(cZ .Pp .. .\" NS An macro - author name (for AUTHOR section only) .\" NS aN register .nr aN 0 .de An .ie \\n(aN==1 \{\ . br .\} .el \{\ . nr aN 1 .\} \&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 .. .\" NS Sf macro -defunct .de Sf .tm .Sf defunct, use prefix or Ns ..