summaryrefslogtreecommitdiff
path: root/troff/troff.d/tmac.d/doc.in
diff options
context:
space:
mode:
Diffstat (limited to 'troff/troff.d/tmac.d/doc.in')
-rw-r--r--troff/troff.d/tmac.d/doc.in4264
1 files changed, 4264 insertions, 0 deletions
diff --git a/troff/troff.d/tmac.d/doc.in b/troff/troff.d/tmac.d/doc.in
new file mode 100644
index 0000000000000..68f6d05932b03
--- /dev/null
+++ b/troff/troff.d/tmac.d/doc.in
@@ -0,0 +1,4264 @@
+.\" Copyright (c) 1991, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by the University of
+.\" California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" from 4.4BSD doc 8.1 (Berkeley) 6/8/93
+.\"
+.\" Portions Copyright (c) 2005 Gunnar Ritter, Freiburg i. Br., Germany
+.\" Portions Copyright (c) 2014, 2015 Carsten Kunze <carsten.kunze@arcor.de>
+.\"
+.\" Sccsid @(#)doc.in 1.2 (gritter) 8/13/05
+.\"
+.\" .mdoc-parse - attempt to parse troff request arguments
+.\" %beginstrip%
+.do xflag 3
+.escoff ; @
+.if t \{\
+. so @MACDIR@/doc-ditroff
+.\}
+.if n \{\
+. so @MACDIR@/doc-nroff
+.\}
+.nr .g 1
+.ds <= \(<=
+.ds >= \(>=
+.ds Lq \(lq
+.ds lq \(lq
+.ds Rq \(rq
+.ds rq \(rq
+.ds ua \(ua
+.ds aa \(aa
+.ds ga \(ga
+.ds sL \(oq
+.ds sR \(cq
+.ds q \(dq
+.ds Am &
+.ds R \(rg
+.ds Tm \(tm
+.ds va \(va
+.\" Math stuff
+.ds Pi \(*p
+.ds Ne \(!=
+.ds Le \(<=
+.ds Ge \(>=
+.ds Lt <
+.ds Gt >
+.ds Pm \(+-
+.ds If \(if
+.ds Na \fINaN\fP
+.ds Ba \fR\&|\fP
+.\"
+.so @MACDIR@/doc-common
+.so @MACDIR@/doc-syms
+.\" NS Sh macro - Section Headers
+.\" NS nS register - Section Header SYNOPSIS flag
+.\" NS nF register - Section Header FILES flag
+.\" NS nA register - Section Header SEE ALSO flag
+.\" NS nT register - Section Header STANDARDS flag
+.de Sh
+. if \\n(aC=0&\\n(.$ \{\
+. nr nS 0
+. nr sE 0
+. nr iS 0
+. nr nA 0
+. nr nF 0
+. nr nT 0
+. nr nY 0
+. nr aN 0
+. nr oT 0
+. nr Sh.a 1
+. ad
+. ie \\$1NAME .hK
+. el .ie \\$1SYNOPSIS \{\
+. nr nS 1
+. na
+. \}
+. el .ie \\$1DESCRIPTION \{\
+. rr fB
+. rr Fb
+. ds Fb
+. nr fY 0
+. nr fZ 0
+. \}
+. el .ie \\$1FILES .nr nF 1
+. el .ie \\$1SEE \{\
+. nr sE 1
+. nr nA 1
+. na
+. \}
+. el .ie \\$1STANDARDS .nr nT 1
+. el .if \\$1AUTHORS .nr nY 1
+. in 0
+. pL
+. sp
+. ns
+. ta T .5i
+. if !\\n(cR .ne 3
+. fi
+. ds b1 \&\\*(sH
+. ds mN Sh
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+. lds T
+. lds A
+. while \\n(aC&(\\n(aC>\\n(aP) \{\
+. nr aP +1
+. ie \\n[C\\n(aP]=1 \{\
+. \\*[A\\n(aP]
+. \}
+. el \{\
+. as b1 \\*[A\\n(aP]\\*(sV
+. as T \\*[A\\n(aP]\\*(sV
+. ie \\n(aP=1 .ds A \\*[A\\n(aP]
+. el .as A " \\*[A\\n(aP]
+. \}
+. \}
+. if !\\*(b1 \{\
+. as b1 \&\fR\s10\&
+. ie \\n[Toc] \{\
+\XPDFMark: BookmarkClosed 0 \\*A\A\\*A\\*(b1
+. if \\n[Toc]>1 \{\
+. ie \\*(.Thtml \{\
+. tm Toc:\T\\*A\\*T\T
+. \}
+. el \{\
+. lnr Tab \\n(.l-\\n(.i-\\n(Tiu
+. tm Toc:.ta \\n[Tab]uR
+. tm Toc:\T\\*A\\*T\T\a\\n%
+. \}
+. \}
+. \}
+. el \\*(b1
+. ds b1
+. aY
+. \}
+. if \\n[Sh.a] \{\
+. nr Sh.a 0
+. in +\\n(Tiu
+. ns
+. \}
+..
+.\" 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)
+.\" jM local register
+.de fV
+.nr aC \\n(aC+1
+.lnr _l_ 0
+.length _l_ "\\*[A\\n(aC]
+.ie \\n[_l_]=2 \{\
+. lnr _i_ 0
+. index _i_ A\\n(aC \@
+. ie \\n[_i_]=0 .ds A\\n(aC @
+. el \{\
+. index _i_ A\\n(aC \;
+. if \\n[_i_]=0 .ds A\\n(aC \&;\&
+. \}
+.\}
+.el \{\
+. lnr _i_ 0
+. if \\*[A\\n(aC]| \{\
+. ie \\*(mNOp .nr _i_ 1
+. el .ie \\*(mNAr .nr _i_ 1
+. el .ie \\*(mNFl .nr _i_ 1
+. el .ie \\*(mNCm .nr _i_ 1
+. el .if \\*(mNIt .nr _i_ 1
+. \}
+. if \\n[_i_] .ds A\\n(aC \fR\\*[A\\n(aC]\fP
+.\}
+.aT "\\*[A\\n(aC]
+.nr C\\n(aC \\n(aT
+.s\\n(aT
+.ie \\n(fV==1 \{\
+. nr aP 0
+. ie \\n(dZ==1 \{\
+. if \\n(oM .as b1 \\*(S0
+. \}
+. el \{\
+. if \\n(oM>0 \{\
+. if \\n(fC==0 .as b1 \\*(S0
+. \}
+. \}
+. ds S0 \\*[S\\n(aC]
+. nr fV 0
+.\}
+.el \{\
+. nr fV -1
+. fV
+.\}
+..
+.\" NS aX macro - stuff saved strings into `b1' (used by -diag list)
+.de aX
+.nr aP \\n(aP+1
+.as b1 \&\\*[A\\n(aP]
+.ie \\n(fV==1 \{\
+. nr aP 0
+. nr fV 0
+.\}
+.el \{\
+. as b1 \&\\*(sV
+. nr fV \\n(fV-1
+. aX
+.\}
+..
+.\" NS aI macro - append arg to arg vector: .aI [arg] [type] (used by .En only)
+.de aI
+. if !\\n[__aI_ini_aC] .nr __aI_ini_aC \\n(aC
+. nr aC \\n(aC+1
+. ds A\\n(aC \\$1
+. nr C\\n(aC \\$2
+. s\\$2
+..
+.de __if_aI_aC
+. if \\n[__aI_ini_aC] \{\
+. lnr _aP_ \\n(aP
+. nr aP \\n[__aI_ini_aC]
+. while \\n(aP<\\n(aC \{\
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]=1 .\\*[A\\n(aP]
+. el .as b1 \\*[A\\n(aP]
+. \}
+. nr aP \\n[_aP_]
+. nr aC \\n[__aI_ini_aC]
+. rr __aI_ini_aC
+. \}
+..
+.\"
+.\" 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 __aI_ini_aC 0
+.nr aP 0
+.rm mN __inline_mN
+..
+.\" NS pB macro - test for end of vector (eol) (print b1 buffer or divert)
+.de pB
+.lnr _sM_ 0
+.if \\n(sM .if !\\*[A\\n(aC]Ns .nr _sM_ 1
+.ie \\n(dZ==1 \{\
+. ie \\n(oM=1 \{\
+. if !\\*(b1 \{\
+. ie \\n[_sM_] \&\\*(b1
+. el \&\\*(b1\c
+. \}
+. rm S0
+. ds b1
+. \}
+. el .if \\n(oM=0 \{\
+. x2
+. \}
+.\}
+.el \{\
+. ie \\n(oM==0 \{\
+. if !\\*(b1 \{\
+. ie \\n[_sM_] \&\\*(b1
+. el \&\\*(b1\c
+. \}
+. rm S0
+. ds b1
+. \}
+. el \{\
+. if ((\\n(sM==1)&(\\n(tP==0)) \{\
+. as b1 \\*[S\\n(aC]
+. ds S0
+. 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
+. box eB\\n(dZ
+. ev 2
+. evc 0
+. in 0
+. nf
+..
+.de x2.1
+. br
+. ev
+. box
+..
+.de x2.2
+. ie \\n(dl:\\n(dn \{\
+. chop eB\\n(dZ
+. unformat eB\\n(dZ
+. if 1 \\*(b2\\*[eB\\n(dZ]\\*(b1
+. \}
+. el \\*(b2\\*(b1
+. rm b2 eB\\n(dZ b1
+. nr dZ -1
+..
+.\" NS x2 macro - end diversion and print
+.\" NS b0 string local temporary
+.de x2
+. x2.1
+. x2.2
+..
+.\" 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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>0 \{\
+. lnr f 0
+. if \\*[A\\n(aP]Fl .nr f 1
+. lnr a \\n(aP+1
+. lnr b 0
+. if \\*[A\\na]| .nr b 1
+. ie (\\n(aC-\\n(aP)==0 \{\
+. as b1 \&\|\-\fP\s0
+. aZ
+. \}
+. el \{\
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]==1 \{\
+. as b1 \&\|\-\fP\s0
+. \\*[A\\n(aP]
+. \}
+. el \{\
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. ie \\n(aP=1:\\nf&\\nb .as b1 \&\|\-\ \&
+. el .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 \&\fR\s10
+. \\*[A\\n(aP]
+.\}
+.el \{\
+. as b1 \&\\*(fL
+. nr jN \\n(aP
+. ie \\n(jM==2 \{\
+. ie \\*[A\\n(aP]\\*(Ba .as b1 \&\\*[A\\n(aP]
+. el .ie \\*[A\\n(aP]| .as b1 \&\fR\\*[A\\n(aP]
+. el .ie \\*[A\\n(aP]- .as b1 \&\|\-\^\-\|
+. el .as b1 \&\|\-\\*[A\\n(aP]
+. \}
+. el .as b1 \&\f\\n(cF\s\\n(cZ\\*[A\\n(aP]
+. ie \\n(aC==\\n(aP \{\
+. if \\n(jM==4 .as b1 \&\|\-
+. if !\\n(jM=3 .as b1 \&\fR\s10
+. aZ
+. \}
+. el \{\
+. nr aP \\n(aP+1
+. ie ((\\n[C\\n(aP]==3)&(\\n[C\\n(jN]==4)) .as b1 \&\|\-
+. el .as b1 \&\\*[S\\n(jN]
+. shift
+. fR \\$*
+. \}
+.\}
+.rr jM jN
+..
+.\"
+.\" NS nR macro - general name recursion routine
+.\" NS jM local register
+.\" NS jN local register
+.\" NS xX local register
+.de nR
+.hy 0
+.ie \\n[C\\n(aP]=1 \{\
+. as b1 \&\f\\n(cF\s\\n(cZ
+. ds __inline_mN \\*[A\\n(aP]
+. \\*[A\\n(aP]
+.\}
+.el \{\
+. lnr _l_ 0
+. length _l_ "\\*[A\\n(aP]
+. lds _lc_
+. lds _slc_
+. if \\n[_l_] \{\
+. ds _lc_ \\*[A\\n(aP]
+. substring _lc_ -1
+. if \\n[_l_]>1 \{\
+. ds _slc_ \\*[A\\n(aP]
+. substring _slc_ -2 -2
+. \}
+. \}
+. lnr _sec_ 0
+. ie \\*[_lc_]. .if !\\*[_slc_]. .nr _sec_ 1
+. el .ie \\*[_lc_]? .nr _sec_ 1
+. el .if \\*[_lc_]! .nr _sec_ 1
+. ie \\n[_sec_] .as b1 \f\\n(cF\s\\n(cZ\\*[A\\n(aP]
+. el .ie \\n[C\\n(aP]=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 \{\
+. if !\\n[_sec_] .as b1 \&\f\\n(cF\s\\n(cZ
+. aZ
+. \}
+. el \{\
+. as b1 \&\\*[S\\n(aP]
+. nr aP \\n(aP+1
+. nR
+. \}
+.\}
+..
+.\" 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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>0 \{\
+. ie (\\n(aC-\\n(aP)==0 \{\
+. as b1 \&file\ ...\fP\s0\&
+. aZ
+. \}
+. el \{\
+. nr aP \\n(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
+. \}
+. \}
+. if \\n(aC=\\n(aP .aY
+.\}
+..
+.\" NS Ad macro - Addresses
+.de Ad
+.if \\n(aC==0 \{\
+. ie \\n(.$==0 .tm Usage: .Ad address ... \\*(Pu (#\\n(.c)
+. el \{\
+. ds mN Ad
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(aD
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(nM
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. ie \\n(nS \{\
+. if \\*(mNCd \{\
+. rs
+. ie \\n(nS>1 .br
+. el \{\
+. if \\n(iS==0 .nr iS \\n(Dsu
+. \}
+. in +\\n(iSu
+. ti -\\n(iSu
+. nr nS \\n(nS+1
+. \}
+. nR
+. in -\\n(iSu
+. \}
+. el .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
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(cM
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(eR
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(eM
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(eR
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(eV
+. nr aP \\n(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) (fortran only)
+.\" NS fZ register also subroutine count (in synopsis only)
+.de Fd
+.ds mN Fd
+.if \\n(nS>0 \{\
+.\" if a variable type was the last thing given, want vertical space
+. if \\n(fX>0 \{\
+. Pp
+. nr fX 0
+. \}
+.\" if a subroutine was the last thing given, want vertical space
+. if \\n(fZ>0 \{\
+. ie \\n(fD==0 \{\
+. Pp
+. rs
+. \}
+. el .br
+. \}
+. nr fD \\n(fD+1
+.\}
+.nr cF \\n(.f
+.nr cZ \\n(.s
+\&\\*(fD\\$*
+.br
+.ft \\n(cF
+.fs \\n(cZ
+..
+.\" NS In macro - print include file
+.de In
+. if !\\n(aC \{\
+. ie !\\n(.$ .tm Usage: .In <include_filename> (#\\n(.c)
+. \" For displaying groff_mdoc.7
+. el .ie \\n(nS:\\n[in-synopsis-section] \{\
+. sp
+. ft B
+. if 1 #include <\\$1>
+. ft
+. sp
+. ns
+. \}
+. el \{\
+. ds mN In
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+. \}
+. if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]>2 \{\
+. nR
+. \}
+. el .ie !\\n[C\\n(aP]=2 \{\
+. tm .In: Unexpected type for argument \\n(aP (#\\n(.c)
+. \}
+. el \{\
+. as b1 <\fI\\*[A\\n(aP]\fP>
+. In
+. \}
+. \}
+. aZ
+..
+.\" 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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(aR
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. if \\n(dZ&\\n(dP .if \\*[d\\n(dP]dU \{\
+. x2
+. pB
+. x1
+. \}
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(iC
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(lI
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. nR
+.\}
+..
+.\" NS Or macro - Pipe symbol (OR)
+.de Or
+.if \\n(aC==0 \{\
+. ie \\n(.$==0 .tm Usage: .Or ... \\*(Pu (#\\n(.c)
+. el \{\
+. ds mN Or
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(iC
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(sY
+. nr aP \\n(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
+.if \\n(aC==0 \{\
+. if \\n(nS .in -\\n(iSu
+. ie \\n(.$==0 \{\
+. ie \\*(n1 .tm Usage: .Nm Name(s) ... \\*(Pu (#\\n(.c)
+. el \{\
+. as b1 \&\\*(nM\\*(n1\fP\s0
+. if \\n[Xo.depth] .as b1 \\*(sV
+. pB
+. \}
+. \}
+. el \{\
+. ds mN Nm
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+. if \\n(nS \{\
+. ie \\*(A1 .nr iS \w\\*(n10
+. el .nr iS \w\\*(A10
+' in +\\n(iSu
+. if \\n(aC .ti -\\n(iSu
+. \}
+.\}
+.if \\n(aC>0 \{\
+. ie \\n(aC==\\n(aP \{\
+. as b1 \&\\*(nM\\*(n1\fP\s0
+. aZ
+. \}
+. el \{\
+. as b1 \\*(nM
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]==1 \{\
+. as b1 \&\\*(n1\fP\s0
+. if \\n(sM .if !\\*[A\\n(aP]Ns .as b1 \\*(sV
+. \\*[A\\n(aP]
+. \}
+. el \{\
+. ie \\n[C\\n(aP]=2 .if \\*(n1 .ds n1 \\*[A\\n(aP]
+. el .if \\n[C\\n(aP]=3 .as b1 \&\\*(n1\fP\s0
+. ie \\n[C\\n(aP]=4&(\\n(aC=1) \{\
+. as b1 \\*[A\\n(aP]\\*(n1\fP\s0
+. aZ
+. \}
+. el \{\
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. nR
+. \}
+. \}
+. \}
+.\}
+..
+.de Mt
+. Pa \\$*
+..
+.\" NS Pa macro - Pathname
+.de Pa
+.if \\n(aC==0 \{\
+. ie \\n(.$==0 \&\\*(pA~\fP\s0
+. el \{\
+. ds mN Pa
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ie \\n(aC>\\n(aP \{\
+. as b1 \\*(pA
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. nR
+.\}
+.el .if \\n(aC \{\
+. as b1 \&\\*(pA~\fP\s0
+. aZ
+.\}
+..
+.\" 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
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(sY
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(tN\\*(tF
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(tN
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. as b1 \\*(vA
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ie \\n(aC>\\n(aP \{\
+. lnr aP-1 \\n(aP
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]==1 \{\
+. if \\n(sM \{\
+. lnr S 0
+. ie \\*[A\\n(aP]Fn .nr S 1
+. el .if \\*[__inline_mN]Oc \{\
+. if \\*[A\\n(aP]Cm .nr S 1
+. \}
+. if \\nS .as b1 \\*[S\\n[aP-1]]
+. \}
+. \\*[A\\n(aP]
+. \}
+. el \{\
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. nR
+. \}
+.\}
+.el .aZ
+..
+.\"------------------------------------------------------------------------
+.\" NS Op macro - Option Expression
+.de Op
+.if \\n(aC==0 \{\
+. ds mN Op
+.\}
+.ds qL \&\\*(lB
+.ds qR \&\\*(rB
+.En \\$*
+..
+.\" NS Aq macro - Enclose string in angle brackets
+.de Aq
+. if \\n(aC==0 .ds mN Aq
+. ie \\*(mNAn \{\
+. ds qL <
+. ds qR >
+. \}
+. el \{\
+. ds qL \(la
+. ds qR \(ra
+. \}
+. En \\$*
+..
+.\" NS Bq macro - Enclose string in square brackets
+.de Bq
+.if \\n(aC==0 .ds mN Bq
+.ds qL \&\\*(lB
+.ds qR \&\\*(rB
+.En \\$*
+..
+.\" NS Brq macro - Enclose string in curly brackets
+.de Brq
+.if \\n(aC==0 .ds mN Brq
+.ds qL \&{
+.ds qR \&}
+.En \\$*
+..
+.de Bro
+. if !\\n(aC \{\
+. ie !\\n(.$ \{\
+. as b1 {
+. pB
+. \}
+. el \{\
+. ds mN Bro
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+. \}
+. if \\n(aC \{\
+. as b1 {
+. ie \\n(aP=\\n(aC .aZ
+. el \{\
+. nr aP +1
+. nR
+. \}
+. \}
+..
+.de Brc
+. if !\\n(aC \{\
+. ie !\\n(.$ \{\
+. as b1 }
+. pB
+. \}
+. el \{\
+. ds mN Bro
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+. \}
+. if \\n(aC \{\
+. as b1 }
+. ie \\n(aP=\\n(aC .aZ
+. el \{\
+. nr aP +1
+. nR
+. \}
+. \}
+..
+.\" NS Dq macro - Enclose string in double quotes
+.de Dq
+.if !\\n(aC \{\
+. ds mN Dq
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL \&\\*(Lq
+.ds qR \&\\*(Rq
+.En
+..
+.\" NS Eq macro - Enclose string in double quotes
+.de Eq
+.if !\\n(aC \{\
+. ds mN Eq
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL "\\$1
+.shift
+.ds qR "\\$1
+.shift
+.En
+..
+.\" NS Pq macro - Enclose string in parenthesis
+.de Pq
+.if !\\n(aC \{\
+. ds mN Pq
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL \&\\*(lP
+.ds qR \&\\*(rP
+.En
+..
+.\" 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 Qq
+.if !\\n(aC \{\
+. ds mN Qq
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL \&\\*q
+.ds qR \&\\*q
+.En
+..
+.\" NS Sq macro - Enclose string in single quotes
+.de Sq
+.if !\\n(aC \{\
+. ds mN Sq
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL \&\\*(sL
+.ds qR \&\\*(sR
+.En
+..
+.\"
+.\" NS Es macro - Set up strings for .En call
+.de Es
+.if \\n(aC==0 \{\
+. ds mN Es
+. ie \\n(.$>2 \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+. el \{\
+. ds qL \\$1
+. ds qR \\$2
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. ds qL \\*[A\\n(aP]
+. nr aP \\n(aP+1
+. ds qR \\*[A\\n(aP]
+. ie \\n(aC>\\n(aP .c\\n[C\\n(aP]
+. el .aZ
+.\}
+..
+.\" 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
+.if \\n(aC==0 \{\
+. ds mN En
+. ie \\n(.$==0 \{\
+. as b1 \&\\*(qL\\*(qR
+. pB
+. \}
+. el \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC \{\
+. nr aP +1
+. while \\n[C\\n(aP]=4&(\\n(aP<=\\n(aC) \{\
+. as b1 \\*[A\\n(aP]
+. if \\n(aP=\\n(aC .aZ
+. nr aP +1
+. \}
+. nr aP -1
+.\}
+.if \\n(aC \{\
+. as b1 \&\\*(qL
+.\}
+.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 \\n(aJ+1
+. ds A\\n(aJ \&\\*(qR\\*[A\\n(aJ]
+. nr aJ 0
+. \}
+. el \{\
+. aI \&\\*(qR 3
+. \}
+. nr aP \\n(aP+1
+. if \\n[C\\n(aP]==1 \{\
+. \\*[A\\n(aP]
+. \}
+. if \\n[C\\n(aP]>1 \{\
+. nr aP \\n(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 \\n(aJ-1
+. vR
+.\}
+..
+.\"------------------------------------------------------------------------
+.\" NS Ao macro - Angle open
+.de Ao
+.if !\\n(aC \{\
+. ds mN Ao
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL \(la
+.eO
+..
+.\" NS Ac macro - Angle close
+.de Ac
+.if !\\n(aC \{\
+. ds mN Ac
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qR \(ra
+.eC
+..
+.\" NS Bo macro - Bracket open
+.de Bo
+.if !\\n(aC \{\
+. ds mN Bo
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL \&[
+.eO
+..
+.\" NS Bc macro - Bracket close
+.de Bc
+.if !\\n(aC \{\
+. ds mN Bc
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qR \&]
+.eC
+..
+.\" NS Do macro - Double Quote open
+.de Do
+.if !\\n(aC \{\
+. ds mN Do
+. ie \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+. el .ds S0
+.\}
+.ds qL \&\\*(Lq
+.eO
+..
+.\" NS Dc macro - Double Quote close
+.de Dc
+.if !\\n(aC \{\
+. ds mN Dc
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qR \&\\*(Rq
+.eC
+..
+.\" NS Eo macro - Enclose open
+.de Eo
+.if !\\n(aC \{\
+. ds mN Eo
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL \\$1
+.shift
+.eO
+..
+.\" NS Ec macro - Enclose close
+.de Ec
+.if !\\n(aC \{\
+. ds mN Ec
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qR \\$1
+.shift
+.eC
+..
+.\" NS Oo macro - Option open
+.de Oo
+.if !\\n(aC \{\
+. ds mN Oo
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL \&[
+.eO
+..
+.\" NS Oc macro - Option close
+.de Oc
+.if !\\n(aC \{\
+. ds mN Oc
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qR \&]
+.eC
+..
+.\" NS Po macro - Parenthesis open
+.de Po
+.if !\\n(aC \{\
+. ds mN Po
+. ie \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+. el .ds S0
+.\}
+.ds qL \&(
+.eO
+..
+.\" NS Pc macro - Parenthesis close
+.de Pc
+.if !\\n(aC \{\
+. ds mN Pc
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. ds S0
+. fV
+. \}
+.\}
+.ds qR \&)
+.eC
+..
+.\" NS Qo macro - Straight Double Quote open
+.de Qo
+.if !\\n(aC \{\
+. ds mN Qo
+. ie \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+. el .ds S0
+.\}
+.ds qL \&\\*q
+.eO
+..
+.\" NS Qc macro - Straight Double Quote close
+.de Qc
+.if !\\n(aC \{\
+. ds mN Qc
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qR \&\\*q
+.eC
+..
+.\" NS So macro - Single Quote open
+.de So
+.if !\\n(aC \{\
+. ds mN So
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL \&\\*(sL
+.eO
+..
+.\" NS Sc macro - Single Quote close
+.de Sc
+.if !\\n(aC \{\
+. ds mN Sc
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qR \&\\*(sR
+.eC
+..
+.\" NS Xo macro - Extend open (continue)
+.de Xo
+.nr Xo.depth +1
+.if !\\n(aC \{\
+. ds mN Xo
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qL
+.eO
+..
+.\" NS Xe macro - Extend close (end)
+.de Xc
+.nr Xo.depth -1
+.if !\\n(aC \{\
+. ds mN Xc
+. if \\n(.$ \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ds qR
+.eC
+..
+.\" NS eO macro - enclose string open
+.\" NS oM register (extension possible)
+.de eO
+.nr Xt +1
+.nr oM \\n(oM+1
+.ie \\n(aC==0 \{\
+. ie \\n(.$>0 \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. as b1 \\*(qL
+. \}
+. el \{\
+. as b1 \\*(qL
+. if (\\n(dZ==0)&(\\n(sM==1) .x1
+. \}
+.\}
+.el \{\
+. as b1 \\*(qL
+.\". if \\n(dZ=0&\\n(tP .x1
+.\}
+.ie \\n(aC>0 \{\
+. if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]==1 \{\
+. \\*[A\\n(aP]
+. \}
+. el \{\
+. nr aP \\n(aP-1
+. No
+. \}
+. \}
+. if \\n(aC==\\n(aP \{\
+. aY
+. \}
+.\}
+.el \{\
+. if \\n(oM>1 .as b1 \\*(sV
+.\}
+..
+.\"
+.\" NS eC macro - enclose string close
+.\" NS aa local register
+.de eC
+.nr oM \\n(oM-1
+.nr Xt -1
+.as b1 \\*(qR
+.if \\n(aC==0 \{\
+. ie \\n(.$>0 \{\
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. \}
+. el .ie \\*(xB \{\
+. pB
+. \}
+. el .if !\\n(Xt \{\
+. pB
+. \\*[L\\n(lC]
+. ds xB
+. \}
+.\}
+.if \\n(aC>0 \{\
+. ie \\n(aC==\\n(aP \{\
+. ie \\n(oM==0 \{\
+. aZ
+. \}
+. el \{\
+. aY
+. \}
+. \}
+. el \{\
+. if \\n(aP .as b1 \\*[S\\n(aP]
+. No
+. \}
+. if !\\n(Xt .if !\\*(xB \{\
+. pB
+. \\*[L\\n(lC]
+. ds xB
+. \}
+.\}
+.\".nr Xt -1
+..
+.\"------------------------------------------------------------------------
+.\" NS Pf macro - Prefix (calls .pF)
+.de Pf
+.if \\n(aC==0 .ds mN Pf
+.ds qL \&\\$1
+.shift
+.pF \\$*
+..
+.\" NS pF macro - Prefix (for prefixing open quotes, brackets etc)
+.de pF
+.ie \\n(aC==0 \{\
+. as b1 \&\\*(qL
+. ie \\n(.$<1 \{\
+. tm Warning: Missing arguments - prefix .Pf)
+. pB
+. \}
+. el \{\
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.el \{\
+. ie (\\n(aC-\\n(aP)>1 \{\
+. nr aP \\n(aP+1
+. as b1 \&\\*[A\\n(aP]
+. \}
+. el .tm Warning: .Pf: trailing prefix (#\\n(.c)
+.\}
+.if \\n(aC>0 \{\
+. ie (\\n(aC-\\n(aP)==0 .aZ
+. el \{\
+. nr aP \\n(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 \{\
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+. 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
+..
+.de setSpaceMode
+. ie \\$1 \{\
+. ds sV \\*(iV
+. if !\\n(sM \{\
+. ie \\*(b1 \& \"
+. el .as b1 \\*(sV
+. \}
+. nr sM 1
+. \}
+. el \{\
+. ds sV
+. rm S0 S1 S2 S3 S4 S5 S6 S7 S8 S9
+. nr sM 0
+. \}
+..
+.\" 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(.$ \{\
+. setSpaceMode \\n(sM<1
+. \}
+. el \{\
+. ds mN Sm
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>0 \{\
+. nr aP \\n(aP+1
+. ie \\*[A\\n(aP]on .setSpaceMode 1
+. el .ie \\*[A\\n(aP]off .setSpaceMode 0
+. el .setSpaceMode \\n(sM<1
+. 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
+.\" NS b0 string local temporary
+.de aT
+. nr aT 2
+. lnr _l_ 0
+. length _l_ "\\$1
+. ie \\n[_l_]>1&(\\n[_l_]<4) \{\
+. ie !\I\\$1 .nr aT 2
+. el .ie d mdoc.cm.\\$1 .nr aT 1
+. el .nr aT 2
+. \}
+. el .ie \\n[_l_]=1 \{\
+. ie !\I\\$1 .nr aT 2
+. el .ie d z\\$1 .nr aT \\*(z\\$1
+. el .nr aT 2
+. \}
+..
+.\" 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
+.ie \\n[\\*[A\\n(aC]]==3 \{\
+. nr xX \\n(aC-1
+. rm S\\n(xX
+. ds S\\n(aC \\*(sV
+.\}
+.el .ie \\n[\\*[A\\n(aC]]==2 \{\
+. nr xX \\n(aC-1
+. rm S\\n(xX
+.\}
+.el .if \\n[\\*[A\\n(aC]]=4 .s2
+..
+.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
+..
+.\" 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
+. c2
+..
+.de c4
+. c2
+..
+.\"--------------------------------------------------------------------------
+.\" 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 \\$1Em \&\\*(eM\c
+. if \\$1Li \&\\*(lI\c
+. if \\$1Sy \&\\*(sY\c
+. if \\$1-emphasis \&\\*(eM\c
+. if \\$1-literal \&\\*(lI\c
+. if \\$1-symbolic \&\\*(sY\c
+.\}
+.el .tm Usage .Bf [Em | emphasis | Li | literal | Sy | symbolic] (#\\n(.c)
+..
+.de Ef
+.ds mN Ef
+.ie \\n(.$>0 .tm Usage .Ef (does not take arguments) (#\\n(.c)
+.el \&\f\\n(bF\s\\n(bZ
+..
+.\" Ns Bk macro - Begin Keep
+.\" Ns Ek macro - End Keep
+.\" Ns kS string - keep type
+.de Bk
+.ds mN Bk
+.ie \\n(.$==0 \{\
+.tm Usage: .Bk [-lines | -words] (#\\n(.c)
+.\}
+.el \{\
+. if !\\*(kS .tm .Bk: nesting keeps not implemented yet. (#\\n(.c)
+. if \\$1-lines .tm .Bd -lines: Not implemented yet. (#\\n(.c)
+. if \\$1-words .Hv
+. ds kS \\$1
+.\}
+..
+.de Ek
+.ds mN Ek
+.ie \\n(.$>0 .tm Usage .Ek (does not take arguments) (#\\n(.c)
+.el \{\
+. if \\*(kS-lines .tm .Bd -lines: Not implemented yet. (#\\n(.c)
+. if \\*(kS-words .Sv
+. rm kS
+.\}
+..
+.\" 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 | -unfilled] [-offset [string]] [-compact] (#\\n(.c)
+.\}
+.el \{\
+. ds __aa
+. nr bV 0
+. nr iD 0
+. nr dP \\n(dP+1
+. ie \\$1-literal \{\
+. nr iD \\n(iD+1
+. ds d\\n(dP dL
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. ie t \{\&\\*(lI
+' ta T 9n
+. \}
+. el \{\
+' ta T 8n
+. \}
+. nf
+. \}
+. el .ie \\$1-filled \{\
+. nr iD \\n(iD+1
+. ds d\\n(dP dF
+. br
+. \}
+. el .ie \\$1-ragged \{\
+. nr iD \\n(iD+1
+. ds d\\n(dP dR
+. na
+. \}
+. el .if \\$1-unfilled \{\
+. nr iD \\n(iD+1
+. ds d\\n(dP dU
+. nf
+. \}
+. if ((\\n(iD>=1)&(\\n(.$>\\n(iD)) \{\
+. bV \\$2 \\$3 \\$4
+. \}
+. if \\n[O\\n(dP]>0 'in +\\n[O\\n(dP]u
+. if (\\n(bV==0) \{\
+. if (\\n(nS==0) \{\
+. ie \\*[d\\n(dP]dR .sp \\n(dVu
+. el 'sp \\n(dVu
+. \}
+. \}
+. if \\n(cR==0 .ne 2v
+. nr bV 0
+. nr iD 0
+.\}
+..
+.\" NS bV macro - resolve remaining .Bd arguments
+.de bV
+.nr iD 1
+.ds bY
+.if \\$1-offset \{\
+. ds bY \\$2
+. if \\*(bYleft \{\
+. nr iD \\n(iD+1
+. nr O\\n(dP 0
+. \}
+. if \\*(bYright \{\
+. nr iD \\n(iD+1
+. nr O\\n(dP (\\n(.l/3)u
+. \}
+. if \\*(bYcenter \{\
+. nr iD \\n(iD+1
+. nr O\\n(dP (\\n(.l-\\n(.i)/4u
+. \}
+. if \\*(bYindent \{\
+. nr iD \\n(iD+1
+. nr O\\n(dP \\n[__dI]u
+. \}
+. if \\*(bYindent-two \{\
+. nr iD \\n(iD+1
+. nr O\\n(dP \\n[__dI]u+\\n[__dI]u
+. \}
+. if \\n(iD==1 \{\
+. nr iD \\n(iD+1
+. lnr _sw_ 0
+. length _sw_ "\\*(bY
+. ie \\n[_sw_]>2 \{\
+. nr O\\n(dP \w\\*(bY
+. lnr _B_ \B\\*(bY
+. if \\n[_B_] \{\
+. if (\\*(bY>9n)&(\\*(bY<100n) \{\
+. nr O\\n(dP \\*(bY
+. \}
+. \}
+. \}
+. 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 \\n(dP==0 .tm mdoc: Extraneous .Ed
+.if \\*[d\\n(dP]dL \{\
+. ft \\n(cF
+. fz \\n(cZ
+.\}
+.in -\\n[O\\n(dP]u
+.rr O\\n(dP
+.rm d\\n(dP
+.nr dP \\n(dP-1
+.fi
+.if t .ad
+..
+.\"--------------------------------------------------------------------------
+.\" 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 | -ohang | -tag] [-width]] [-item | -enum [-nested] |
+.tm -bullet | -diag] (#\\n(.c)
+.\}
+.el \{\
+. ds mN Bl
+. nr aP 0
+. nr lC \\n(lC+1
+. lnr _.$_ \\n(.$
+. lds _$1_ \\$1
+. shift
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. ie \\*[_$1_]-hang \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC hL
+. nr w\\n(lC 6n
+. nr tC 1
+. \}
+. el .ie \\*[_$1_]-tag \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC tL
+. nr tC 1
+. \}
+. el .ie \\*[_$1_]-item \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC iT
+. nr tC 1
+. \}
+. el .ie \\*[_$1_]-enum \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC nU
+. nr w\\n(lC 3n
+. nr tC 1
+. ds nU\\n(lC.tag
+. nr nU\\n(lC.nested 0
+. \}
+. el .ie \\*[_$1_]-bullet \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC bU
+. nr w\\n(lC 2n
+. nr tC 1
+. \}
+. el .ie \\*[_$1_]-dash \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC hU
+. nr w\\n(lC 2n
+. nr tC 1
+. \}
+. el .ie \\*[_$1_]-hyphen \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC hU
+. nr w\\n(lC 2n
+. nr tC 1
+. \}
+. el .ie \\*[_$1_]-inset \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC lL
+. nr tC 1
+. \}
+. el .ie \\*[_$1_]-diag \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC mL
+. nr mL 1
+. \}
+. el .ie \\*[_$1_]-ohang \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC oL
+. nr tC 1
+. \}
+. el .if \\*[_$1_]-column \{\
+. nr aP \\n(aP+1
+. ds L\\n(lC cL
+. \}
+. ie \\n(aP==0 \{\
+. 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
+. if !\\n[v\\n(lC] .sp \\n(dVu
+. nf
+. nr wV 0
+. \}
+. \}
+. \}
+. nr aP 0
+. aY
+.\}
+.ns
+..
+.\" $1 Global ref String
+.\" $2 Global ref Valid
+.\" $3 Global ref Width
+.de __NopDl
+. lnr _x_ 0
+. index _x_ \\$1 " \"
+. if \\n[_x_]>2 \{\
+. lds _tS_ \\*(\\$1
+. substring _tS_ 0 0
+. if \\*[_tS_]. \{\
+. lds _tS_ \\*(\\$1
+. substring _tS_ 1 \\n[_x_]-1
+. lnr _m_ 0
+. if \I\\*[_tS_] \{\
+. if d mdoc.cm.\\*[_tS_] .nr _m_ 1
+. if d mdoc.ncm.\\*[_tS_] .nr _m_ 1
+. \}
+. if \\n[_m_] \{\
+. ds _tS_ \\*(\\$1
+. box lV.box
+. ev lV.ev
+. evc 0
+. in 0
+. saveState
+. nop \\*[_tS_]
+. restoreState
+. br
+. ev
+. box
+. nr \\$2 1
+. nr \\$3 \\n(dl
+. \}
+. \}
+. \}
+..
+.\" NS lV macro - resolve remaining .Bl arguments
+.de lV
+.nr aP \\n(aP+1
+.if \\n(fV>=\\n(aP \{\
+. nr iD 0
+. ie \\*[A\\n(aP]-compact \{\
+. nr iD 1
+. nr v\\n(lC 1
+. \}
+. el .ie \\*[A\\n(aP]-width \{\
+. nr iD 1
+. nr aP \\n(aP+1
+. nr tW 0
+. ds t\\n(lC TagwidtH
+. ds tS \\*[A\\n(aP]
+. __NopDl tS tW w\\n(lC
+. if !\\n(tW \{\
+. lnr _x_ \B\\*(tS
+. if \\n[_x_] \{\
+. lds _tS_ \\*(tS
+. substring _tS_ -1 -1
+. if !d mdoc.d.\\*[_tS_] \
+. if !\\*[_tS_]u \{\
+. nr w\\n(lC \\*(tS
+. nr tW 1
+. \}
+. \}
+. \}
+. if !\\n(tW \{\
+. lnr _x_ 0
+. index _x_ tS " \"
+. lnr m 0
+. ie \\n[_x_]>=0 .
+. el .ie !\I\\*(tS .
+. el .if d mdoc.cm.\\*(tS .nr m 1
+. ie \\nm .nr w\\n(lC \\n[\\*(tS]
+. el .nr w\\n(lC \w\\*(tS
+. nr tW 1
+. \}
+. \}
+. el .ie \\*[A\\n(aP]-offset \{\
+. nr iD 1
+. nr aP \\n(aP+1
+. ie \\*[A\\n(aP]indent \{\
+. nr o\\n(lC \\n(Dsu
+. \}
+. el \{\
+. ds tS \\*[A\\n(aP]
+. lnr _l_ 0
+. length _l_ "\\*(tS
+. ie \\n[_l_]>2 \{\
+. nr o\\n(lC \w\\*(tS
+. lnr _B_ \B\\*(tS
+. if \\n[_B_] \{\
+. if (\\*(tS>9n)&(\\*(tS<100n) \{\
+. nr o\\n(lC \\*(tS
+. \}
+. \}
+. \}
+. el \{\
+. ie \\n[C\\n(aP]==1 .nr o\\n(lC \\n(\\*(tS
+. el .nr o\\n(lC \\*(tS
+. \}
+. \}
+. \}
+. el .if \\*[A\\n(aP]-nested \{\
+. nr iD 1
+. nr nU\\n(lC.nested 1
+. nr w\\n(lC +2n
+. \}
+. if \\n(iD==0 \{\
+. if \\*[L\\n(lC]cL \{\
+. nr wV \\n(wV+1
+. ds tS \\*[A\\n(aP]
+. __NopDl tS iD iD
+. if \\n(iD .ds tS \h'\\n(iDu'
+. nr iD 0
+. ds A\\n(wV \\*(tS
+. \}
+. \}
+. 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
+. ds t\\n(lC
+. ie \\*[L\\n(lC]cL \{\
+. nr iD 1
+. cC
+. \}
+. el .ie \\*[L\\n(lC]nU \{\
+. nr nU\\n(lC 0
+. \}
+. el .ie \\n(mL>0 \{\
+. nr iD 1
+. nr mL 0
+. tZ
+. nr lC \\n(lC-1
+. tY
+. \}
+. el .ie \\*[L\\n(lC]iT \{\
+' in -\\n[o\\n(lC]u
+. tZ
+. nr lC \\n(lC-1
+. tY
+. nr iD 1
+. \}
+. el .ie \\*[L\\n(lC]oL \{\
+' in -\\n[o\\n(lC]u
+. tZ
+. nr lC \\n(lC-1
+. tY
+. nr iD 1
+. \}
+. el .if \\*[L\\n(lC]lL \{\
+' in -\\n[o\\n(lC]u
+. tZ
+. nr lC \\n(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 \\$*
+.\}
+.if !\\n(cR .ne 3v
+.ie \\n(.$>0 \{\
+. ds mN It
+. ds b1
+. aY
+. nr iD 0
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. ie \\*[L\\n(lC]mL \{\
+. nr iD 1
+. aX
+. \\*[L\\n(lC]
+. \}
+. el .ie \\*[L\\n(lC]cL \{\
+. nr iD 1
+. \\*[L\\n(lC]
+. \}
+. el .if \\*[L\\n(lC]iT \{\
+. nr iD 1
+. \\*[L\\n(lC]
+. \}
+. if \\n(iD==0 \{\
+. fV
+. nr oM \\n(oM+1
+. nr tP 1
+. nr aP \\n(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 \\n(aP-1
+. No
+. \}
+. ie \\n(Xt .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 \\n(oM-1
+.nr tP 0
+.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(lC]u+\\n(lSu
+.ti -\\n(bbu
+.ie \w\\*(b1u>=(\\n[w\\n(lC]u) \&\\*(b1
+.el \&\\*(b1\h'|\\n(bbu'\c
+.nr oM \\n(oM-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 \\n(oM-1
+.ds b1
+.nr tP 0
+.aY
+'fi
+..
+.\" NS iT macro - .It item of list-type [empty label]
+.de iT
+.lY
+.br
+.\" .ds b1
+.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\\n(lC +1
+. ds b1
+. if \\n[nU\\n(lC.nested] \{\
+. lnr i \\n(lC-1
+. as b1 \\*[nU\\ni.tag]
+. \}
+. as b1 \&\\n[nU\\n(lC].
+. ds nU\\n(lC.tag \\*(b1
+. uL
+..
+.de bU
+.nr oM \\n(oM+1
+.nr bU \\n(bU+1
+.ds b1 \&\\*(sY\&\(bu\fP
+.uL
+..
+.de hU
+.nr oM \\n(oM+1
+.nr bU \\n(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(lC]u+\\n(lSu
+.ti -\\n(bbu
+.ie \w\\*(b1u>=(\\n[w\\n(lC]u) \&\\*(b1
+.el \&\\*(b1\h'|\\n(bbu'\c
+.nr oM \\n(oM-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(dZ .x2.1
+. box tL.di
+. ev 2
+. evc 0
+. in 0
+. fi
+. ie \\n(dZ .x2.2
+. el \&\\*(b1
+. br
+. ev
+. box
+. chop tL.di
+. unformat tL.di
+. if \\n(tW==0 .lW
+. lX
+. nr bb \\n[w\\n(lC]+\\n(lS
+. ti -\\n(bbu
+. ie \\n(dl>\\n[w\\n(lC] \{\
+. if 1 \&\\*[tL.di]
+. br
+. \}
+. el \&\\*[tL.di]\h'|\\n(bbu'\c
+. if \\n(nF==1 \{\
+. if n .ds pA \\*(aA
+. \}
+. ie \\n(oM .nr oM -1
+. el .tm .BL -tag: Argument expected after .It (#\\n(.c)
+. nr tP 0
+. 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 .nr w\\n(lC \\n[\\*(tX]
+. el .nr w\\n(lC \\n(Ds
+. nr tC 1
+. ds t\\n(lC TagwidtH
+.\}
+..
+.\" NS lX macro - set up vertical spacing (if compact) and offset+indent (all)
+.de lX
+. if !\\n[v\\n(lC] .sp \\n(dVu
+. if \\n(tC \{\
+. nr tC 0
+. nr tW 0
+. in +\\n[w\\n(lC]u+\\n[o\\n(lC]u+\\n(lSu
+. \}
+. if !\\n(cR .ne 2v
+..
+.\" NS lY macro - set up vertical spacing (if compact) and offset+indent (all)
+.de lY
+. if !\\n[v\\n(lC] .sp \\n(dVu
+. if \\n(tC \{\
+. nr tC 0
+. nr tW 0
+. in +\\n[o\\n(lC]u
+. \}
+. 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 save current list-type flag
+.\" 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
+.ie \\n[o\\n(lC]>0 \{\
+' in -\\n[w\\n(lC]u+\\n[o\\n(lC]u+\\n(lSu
+. rr o\\n(lC
+.\}
+.el 'in -\\n[w\\n(lC]u+\\n(lSu
+.if \\n(lC<=0 .tm Extraneous .El call (#\\n(.c)
+.tZ
+.nr lC \\n(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 \\n(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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]==1 .tm Usage: .Xr manpage_name [section#] \\*(Pu (#\\n(.c)
+. el \{\
+. ie \\n[C\\n(aP]>2 \{\
+. as b1 \\*[A\\n(aP]
+. Xr
+. \}
+. el \{\
+. as b1 \&\\*(xR\\*[A\\n(aP]\fP\s0
+. if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. if \\n[C\\n(aP]==2 \{\
+. as b1 \&(\\*[A\\n(aP])
+. if \\n(aP<\\n(aC .as b1 \\*[S\\n(aP]
+. nr aP \\n(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
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(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[o\\n(lC]u+\\n[w\\n(lC]u
+.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
+.fi
+.tZ
+.nr lC \\n(lC-1
+.tY
+..
+.de W1
+.ta \w\\*(A1 u
+.nr eW \w\\*(A1 u
+'in +\\n(eWu+\\n[o\\n(lC]u
+..
+.de W2
+.ta \w\\*(A1 u +\w\\*(A2 u
+.nr eW \w\\*(A1 u+\w\\*(A2 u
+'in +\\n(eWu+\\n[o\\n(lC]u
+..
+.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(eWu+\\n[o\\n(lC]u
+..
+.de W4
+.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(eWu+\\n[o\\n(lC]u
+..
+.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(eWu+\\n[o\\n(lC]u
+..
+.\" This is packed abnormally close, intercol width should be an option
+.de W6
+.ta \w\\*(A1 u +\w\\*(A2 u +\w\\*(A3 u +\w\\*(A4 u +\w\\*(A5 u +\w\\*(A6 u
+.nr eW \w\\*(A1 u+\w\\*(A2 u+\w\\*(A3 u+\w\\*(A4 u+\w\\*(A5 u+\w\\*(A6 u
+' in +\\n(eWu+\\n[o\\n(lC]u
+..
+.\" 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(eWu
+.\}
+.ti -\\n(eWu
+.if \\n(fV \{\
+. fV
+. nr aP \\n(aP+1
+. ie \\n(aC>=\\n(aP \{\
+. 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 \{\
+. __if_aI_aC
+. nr aP \\n(aP+1
+. ie \\n(aC>=\\n(aP \{\
+. as b1 \\t
+. c\\n[C\\n(aP]
+. \}
+. el \{\
+. as b1 \\t\\c
+. aZ
+. \}
+.\}
+.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 T .5i
+.in +\\n(Dsu
+.ie \\n(aC==0 \{\
+. ie \\n(.$==0 \{\
+. tm Usage: .Dl argument ... (#\\n(.c)
+. \}
+. el \{\
+. ds mN Dl
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] "\\$1
+. shift
+. \}
+. fV
+. Li
+. \}
+.\}
+.el \{\
+. tm Usage: .Dl not callable by other macros (#\\n(.c)
+.\}
+.in -\\n(Dsu
+..
+.\"
+.\" NS D1 macro - display (one line)
+.de D1
+.ta T .5i
+.in +\\n(Dsu
+.ie \\n(aC==0 \{\
+. ie \\n(.$==0 \{\
+. tm Usage: .D1 argument ... (#\\n(.c)
+. \}
+. el \{\
+. ds mN D1
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]==1 .\\*[A\\n(aP]
+. el \{\
+. nr aP \\n(aP-1
+. No
+. \}
+. \}
+.\}
+.el \{\
+. tm Usage: .D1 not callable by other macros (#\\n(.c)
+.\}
+.in -\\n(Dsu
+..
+.\" NS Ex macro - exit status
+.\" 0 arguments: \*(n1 is used (error if unset)
+.\" 2 arguments: Output "\$1 and \$2"
+.\" n arguments (n > 2): Output "\$1, ..., \$<n-1>, and \$n"
+.de Ex
+. if !\\n(aC \{\
+. as b1 The
+. ie !\\n(.$ .tm .Ex: "-std" expected as first argument (#\\n(.c)
+. el \{\
+. if !\\$1-std \
+. tm .Ex: "-std" expected as first argument (#\\n(.c)
+. ie \\n(.$=1 \{\
+. as b1 " \\*(nM\\*(n1\fP\s0
+. \}
+. el \{\
+. ds mN Ex
+. shift
+. nr aC \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. nr aP 0
+. \}
+. \}
+. \}
+. if !\\n(aP=\\n(aC \{\
+. nr aP \\n(aP+1
+. if \\n(aP=\\n(aC .if \\n(aC>1 .as b1 " and
+. as b1 " \\*(nM\\*[A\\n(aP]\fP\s0
+. if !\\n(aP=\\n(aC .if \\n(aC>2 .as b1 ,
+. Ex
+. \}
+. if !\\*(b1 \{\
+. ie \\n(aC>1 .as b1 " utilities exit
+. el .as b1 " utility exits
+. as b1 " 0 on success, and >0 if an error occurs.
+. aZ
+. \}
+..
+.\"
+.\" NS Vt macro - Variable type (for forcing old style variable declarations)
+.\" this is not done in the same manner as .Ot for fortrash - clean up later
+.de Vt
+. if !\\n(aC \{\
+. \" if a function declaration was the last thing given, want vertical space
+. if \\n(fD>0 \{\
+. Pp
+. nr fD 0
+. \}
+. \" if a subroutine was the last thing given, want vertical space
+. if \\n(fZ>0 \{\
+. ie \\n(fX==0 \{\
+. Pp
+. rs
+. \}
+. el .br
+. \}
+. nr fX 1
+. ds mN Vt
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+. if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]=1 .\\*[A\\n(aP]
+. el \{\
+. ie \\n[C\\n(aP]=2 \{\
+. as b1 \&\\*(fT\\*[A\\n(aP]\fR\s10
+. \}
+. el .as b1 \\*[A\\n(aP]
+. if \\n(aP<\\n(aC .as b1 \\*[S\\n(aP]
+. Vt
+. \}
+. \}
+. aZ
+. if \\n(nS .br
+..
+.\"
+.\" NS Ft macro - Function type
+.nr fZ 0
+.de Ft
+. ie !\\n(aC \{\
+. if \\n(nS>0 \{\
+. ie \\n(fZ>0 \{\
+. Pp
+. nr fD 0
+. nr fX 0
+. \}
+. el .ie \\n(fD>0 \{\
+. Pp
+. nr fD 0
+. nr fX 0
+. \}
+. el .if \\n(fX>0 \{\
+. Pp
+. nr fX 0
+. \}
+. nr fY 1
+. \}
+. ds mN Ft
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+. if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]=1 .\\*[A\\n(aP]
+. el \{\
+. as b1 \&\\*(fT\\*[A\\n(aP]\fR\s10
+. if \\n(aP<\\n(aC .as b1 \\*[S\\n(aP]
+. Ft
+. \}
+. \}
+. aZ
+..
+.\"
+.\" NS Ot macro - Old Function type (fortran - no newline)
+.\" Ns oT register
+.nr oT 0
+.de Ot
+.nr oT 1
+.if \\n(nS>0 \{\
+. if \\n(fZ>0 \{\
+. Pp
+. nr fD 0
+. nr fX 0
+. \}
+. if \\n(fD>0 \{\
+. Pp
+. nr fD 0
+. nr fX 0
+. \}
+. if \\n(fX>0 \{\
+. Pp
+. nr fX 0
+. \}
+. nr fY 1
+.\}
+.if \\n(.$==4 .as b1 \&\\*(fT\&\\$1 \\$2 \\$3 \\$4
+.if \\n(.$==3 .as b1 \&\\*(fT\&\\$1 \\$2 \\$3
+.if \\n(.$==2 .as b1 \&\\*(fT\&\\$1 \\$2
+.if \\n(.$==1 .as b1 \&\\*(fT\&\\$1
+.as b1 \&\ \fP
+..
+.\"
+.\" 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
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.ie \\n(fC>0 \{\
+. fC
+.\}
+.el \{\
+. if \\n(aC>\\n(aP \{\
+. as b1 \\*(fA
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. nR
+. if \\n(nS>0 \{\
+. if \\n(fZ>0 .br
+. \}
+. \}
+.\}
+..
+.\" NS fC macro - interal .Fa for .FO and .Fc
+.de fC
+.ie \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. ds Fb
+. nr fB 0
+. nr Fb 0
+. fB \\*[A\\n(aP]
+. if \\n(fB>1 \{\
+. rm A\\n(aP
+. rn Fb A\\n(aP
+. \}
+. if \\n(fC>1 \{\
+. as b1 \&\f\\n(cF\s\\n(cZ\|,\\*(fA\\*[S\\n(aP]\\*[A\\n(aP]\fP\s0
+. \}
+. if \\n(fC==1 \{\
+. as b1 \&\|\\*(fA\\*[A\\n(aP]\fP\s0
+. \}
+. nr fC \\n(fC+1
+. fC
+.\}
+.el \{\
+. aY
+.\}
+..
+.\" 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
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(nS>0 \{\
+.\" if there is/has been more than one subroutine declaration
+. if \\n(fY==0 \{\
+. if \\n(fZ>0 \{\
+. Pp
+. nr fX 0
+. nr fD 0
+. \}
+. \}
+. if \\n(fY==1 \{\
+. br
+. nr fX 0
+. nr fD 0
+. nr fY 0
+. \}
+. if \\n(fD>0 \{\
+. Pp
+. nr fX 0
+. \}
+. if \\n(fX>0 \{\
+. Pp
+. nr fD 0
+. \}
+. nr fZ \\n(fZ+1
+. nr fY 0
+. rs
+. ie \\n(nS>1 .br
+. el \{\
+. if \\n(iS==0 \{\
+. nr iS 4n
+. \}
+. \}
+. in +\\n(iSu
+. ti -\\n(iSu
+. nr nS \\n(nS+1
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. while \\n[C\\n(aP]=4 \{\
+. as b1 \\*[A\\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 \\n(aP+1
+. f\\n[C\\n(aP]
+. \}
+. el \{\
+. ie \\n(nS>0 .as b1 \|\\*(rp\fR;\fP
+. el .as b1 \|\\*(rp
+. aZ
+. \}
+. if \\n(nS>0 \{\
+. in -\\n(iSu
+. \}
+.\}
+..
+.\"
+.\" NS f1 macro - class switch
+.\" NS f2 macro - handle function arguments
+.\" NS f3 macro - punctuation
+.\" NS f4 macro - write out function
+.de f1
+.ie \\n(nS>0 .as b1 \\*(rp\fR;\fP\f\\n(cF\s\\n(cZ
+.el .as b1 \\*(rp\f\\n(cF\s\\n(cZ
+.\\*[A\\n(aP]
+..
+.de f2
+.if \\n(nS>0 \{\
+. ds Fb
+. nr fB 0
+. nr Fb 0
+. fB \\*[A\\n(aP]
+. if \\n(fB>1 \{\
+. rm A\\n(aP
+. rn Fb A\\n(aP
+. \}
+.\}
+.as b1 \\*[A\\n(aP]
+.ie \\n(aC>\\n(aP \{\
+. nr aa \\n(aP
+. nr aP \\n(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 \{\
+. ie \\n(nS .as b1 \\*(rp\fR;\fP\f\\n(cF\s\\n(cZ
+. 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
+.ie \\n(nS .as b1 \\*(rp\fR;\fP\f\\n(cF\s\\n(cZ\\*[S\\n(aP]\\*[A\\n(aP]
+.el .as b1 \\*(rp\f\\n(cF\s\\n(cZ\\*[S\\n(aP]\\*[A\\n(aP]
+.ie \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. No
+.\}
+.el .aZ
+..
+.de Fo
+.hy 0
+.if \\n(aC==0 \{\
+. ie \\n(.$==0 .tm Usage: .Fo function_name
+. el \{\
+. ds mN Fo
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(nS>0 \{\
+.\" if there is/has been more than one subroutine declaration
+. if \\n(fY==0 \{\
+. if \\n(fZ>0 \{\
+. Pp
+. nr fX 0
+. nr fD 0
+. \}
+. \}
+. if \\n(fY==1 \{\
+. br
+. nr fX 0
+. nr fD 0
+. nr fY 0
+. \}
+. if \\n(fD>0 \{\
+. Pp
+. nr fX 0
+. \}
+. if \\n(fX>0 \{\
+. Pp
+. nr fD 0
+. \}
+. nr fZ \\n(fZ+1
+. nr fY 0
+. rs
+. ie \\n(nS>1 .br
+. el \{\
+. if \\n(iS==0 \{\
+. nr iS 4n
+. \}
+. \}
+. in +\\n(iSu
+. ti -\\n(iSu
+. nr nS \\n(nS+1
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr oM \\n(oM+1
+. nr fC 1
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. as b1 \\*(fN\\*[A\\n(aP]\fP\s0\\*(lp
+. aY
+.\}
+..
+.de Fc
+.if \\n(aC==0 \{\
+. if \\n(.$>0 \{\
+. ds mN Fo
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.nr fC 0
+.nr oM \\n(oM-1
+.ie \\n(nS>0 .as b1 \|\\*(rp\fR;\fP
+.el .as b1 \|\\*(rp
+.ie \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. \\*[A\\n(aP]
+.\}
+.el \{\
+. aZ
+.\}
+.if \\n(nS>0 \{\
+. in -\\n(iSu
+.\}
+.hy
+..
+.\" NS fb macro - if SYNOPSIS, set hard space inbetween function args
+.\" NS fb register - count of words in a function argument
+.\" NS Fb register - counter
+.\" NS Fb string - temporary string
+.de fB
+.\" .tm fB==\\n(fB, Fb==\\n(Fb, 1==\\$1 2==\\$2 3==\\$3 4==\\$4 5==\\$5 6==\\$6
+.if \\n(fB==0 \{\
+. nr fB \\n(.$
+. nr Fb 0
+. ds Fb
+.\}
+.nr Fb \\n(Fb+1
+.as Fb \&\\$1
+.if \\n(Fb<\\n(fB \{\
+. as Fb \&\\*(hV
+. shift
+. fB \\$*
+.\}
+..
+.\" 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 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 .Pp
+.nr Kl 0
+..
+.\" NS Re macro - Reference End
+.de Re
+.rZ
+.rC
+.nr rS 0
+.sp
+..
+.\" NS rC macro - reference cleanup
+.de rC
+.nr uK 0
+.nr jK 0
+.nr iK 0
+.nr nK 0
+.nr oK 0
+.nr qK 0
+.nr rK 0
+.nr tK 0
+.nr __uK 0
+.nr vK 0
+.nr dK 0
+.nr pK 0
+.nr bK 0
+.nr cK 0
+.ds rS
+.rm U1 U2 U3 U4 U5 U6 U7 U8
+.rm uK jK iK nK oK rK qK tK vK dK pK bK cK
+..
+.\" NS rZ macro - reference print
+.de rZ
+.if \\n(uK \{\
+. nr aK 1
+. aK
+. nr Kl -\\n(uK
+.\}
+.if \\n(tK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \{\
+. ie (\\n(jK==1):(\\n(bK==1) \{\&\\*(Lq\\*(tK\\*(Rq.
+. \}
+. el \{\&\\*(eM\\*(tK\\*(nO.
+. \}
+. \}
+. if \\n(Kl>0 \{\
+. ie (\\n(jK==1):(\\n(bK==1) \{\&\\*(Lq\\*(tK\\*(Rq,
+. \}
+. el \{\&\\*(eM\\*(tK\\*(nO,
+. \}
+. \}
+.\}
+.if \\n[__uK] \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(eM\\*(uK\\*(nO.
+. if \\n(Kl>0 \&\\*(eM\\*(uK\\*(nO,
+.\}
+.if \\n(bK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(eM\\*(bK\\*(nO.
+. if \\n(Kl>0 \&\\*(eM\\*(bK\\*(nO,
+.\}
+.if \\n(iK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(eM\\*(iK\\*(nO.
+. if \\n(Kl>0 \&\\*(eM\\*(iK\\*(nO,
+.\}
+.if \\n(jK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(eM\\*(jK\\*(nO.
+. if \\n(Kl>0 \&\\*(eM\\*(jK\\*(nO,
+.\}
+.if \\n(rK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(rK.
+. if \\n(Kl>0 \&\\*(rK,
+.\}
+.if \\n(nK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(nK.
+. if \\n(Kl>0 \&\\*(nK,
+.\}
+.if \\n(vK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(vK.
+. if \\n(Kl>0 \&\\*(vK,
+.\}
+.if \\n(pK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(pK.
+. if \\n(Kl>0 \&\\*(pK,
+.\}
+.if \\n(qK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(qK.
+. if \\n(Kl>0 \&\\*(qK,
+.\}
+.if \\n(cK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(cK.
+. if \\n(Kl>0 \&\\*(cK,
+.\}
+.if \\n(dK \{\
+. nr Kl \\n(Kl-1
+. if \\n(Kl==0 \&\\*(dK.
+. if \\n(Kl>0 \&\\*(dK,
+.\}
+.if \\n(oK \{\
+. nr Kl \\n(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
+.lds _n_ \\*[U\\n(aK]
+.ie \\n(aK=\\n(uK \{\
+. if \\n(uK>1 and
+. if 1 \\*[_n_],
+.\}
+.el \{\
+. ie \\n(uK>2 \\*[_n_],
+. el \\*[_n_]
+. nr aK +1
+. 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 \\n(uK+1
+. nr Kl \\n(Kl+1
+. ds rS U\\n(uK
+. ds mN %A
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(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
+. if \\n(rS>0 \{\
+. nr bK \\n(bK+1
+. nr Kl \\n(Kl+1
+. ds rS bK
+. \}
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. ie \\n(rS==0 \{\
+. as b1 \&\\*(eM
+. nR
+. \}
+. el .rR
+.\}
+..
+.de %C
+.if \\n(aC==0 \{\
+. ie \\n(.$==0 .tm Usage: .%C city_name (#\\n(.c)
+. el \{\
+. nr cK \\n(cK+1
+. nr Kl \\n(Kl+1
+. ds rS cK
+. ds mN %C
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. rR
+.\}
+..
+.\" NS %D macro - [reference] Date
+.\" NS dK string - Date String
+.\" NS dK register - Date flag
+.de %D
+.if \\n(aC==0 \{\
+. ie \\n(.$==0 .tm Usage: .%D Date (#\\n(.c)
+. el \{\
+. ds mN %D
+. nr dK \\n(dK+1
+. nr Kl \\n(Kl+1
+. ds rS dK
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. rR
+.\}
+..
+.\" NS %I macro - [reference] Issuer/Publisher Name
+.\" NS jK register - [reference] Issuer/Publisher Name flag
+.\" NS jK string - [reference] Issuer/Publisher Name
+.de %I
+.if \\n(aC==0 \{\
+. ie \\n(.$==0 .tm Usage: .%I Issuer/Publisher Name (#\\n(.c)
+. el \{\
+. ds mN %I
+. nr iK \\n(iK+1
+. ds rS iK
+. nr Kl \\n(Kl+1
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(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 \\n(jK+1
+. ds rS jK
+. nr Kl \\n(Kl+1
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(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 \\n(nK+1
+. nr Kl \\n(Kl+1
+. ds rS nK
+. ds mN %N
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(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 \\n(oK+1
+. nr Kl \\n(Kl+1
+. ds rS oK
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. rR
+.\}
+..
+.\" NS %P macro - [reference] page numbers
+.\" NS pK register - [reference] page number flag
+.\" NS pK string - [reference] page number
+.de %P
+.if \\n(aC==0 \{\
+. ie \\n(.$==0 .tm Usage: .%P page numbers ... \\*(Pu (#\\n(.c)
+. el \{\
+. ds mN %P
+. nr pK \\n(pK+1
+. nr Kl \\n(Kl+1
+. ds rS pK
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(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 \\n(qK+1
+. nr Kl \\n(Kl+1
+. ds rS qK
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(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 \\n(rK+1
+. nr Kl \\n(Kl+1
+. ds rS rK
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(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
+. if \\n(rS>0 \{\
+. nr tK \\n(tK+1
+. nr Kl \\n(Kl+1
+. ds rS tK
+. \}
+. nr fV \\n(.$
+. lnr _i_ 0 1
+. while \\n(.$ \{\
+. ds A\\n+[_i_] \\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. ie \\n(rS==0 \{\
+. as b1 \&\\*(eM
+. nR
+. \}
+. el .rR
+.\}
+..
+.\" NS %U macro - URL
+.de %U
+. if !\\n(aC \{\
+. ie !\\n(.$ .tm Usage: .%U <URL> (#\\n(.c)
+. el \{\
+. ds mN %U
+. nr __uK \\n[__uK]+1
+. nr Kl \\n(Kl+1
+. ds rS uK
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+. \}
+. if \\n(aC>\\naP \{\
+. nr aP \\n(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 \\n(vK+1
+. nr Kl \\n(Kl+1
+. ds rS vK
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. rR
+.\}
+..
+.\" NS rR macro - reference recursion routine
+.de rR
+.hy 0
+.ie \\n[C\\n(aP]=1 \{\
+. ie \\*[A\\n(aP]Tn \{\
+. nN
+. \}
+. el \{\
+. aI rR 1
+. \\*[A\\n(aP]
+. \}
+.\}
+.el \{\
+. as b1 \&\\*[A\\n(aP]
+. ie \\n(aC==\\n(aP \{\
+. rD
+. \}
+. el \{\
+. as b1 \&\\*[S\\n(aP]
+. nr aP +1
+. rR
+. \}
+.\}
+..
+.\" 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
+.\" NS aN register
+.\" xX local register
+.nr aN 0
+.de An
+.if \\n(nY==1 \{\
+. ie \\n(aN==1 \{\
+. br
+. \}
+. el \{\
+. nr aN 1
+. \}
+.\}
+.if \\n(aC==0 \{\
+. ie \\$1-nosplit \{\
+. nr xX 1
+. nr nY 0
+. \}
+. el .ie \\$1-split \{\
+. nr xX 1
+. nr nY 1
+. \}
+. el .nr xX 0
+. ie \\n(.$==0 .tm Usage: .An author_name ... \\*(Pu (#\\n(.c)
+. el .if !\\n(.$=1&\\n(xX \{\
+. ds mN An
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+.\}
+.if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. nr cF \\n(.f
+. nr cZ \\n(.s
+. nR
+.\}
+..
+.\" NS Sf macro -defunct
+.de Sf
+.tm .Sf defunct, use prefix or Ns
+..
+.ds __rV1.1 Upon successful completion, the value\~0 is returned
+.ds __rV1.2 the value 0 if successful
+.ds __rV2 ; otherwise the value\~-1 is returned and the global variable \\*(vA
+.as __rV2 errno\fP is set to indicate the error.
+.\" Ns Rv macro - return values
+.\" Ns rV string - standard return message
+.de Rv
+.ie \\n(.$==0 \{\
+.tm Usage: .Rv [-std] (#\\n(.c)
+.\}
+.el \{\
+. ds mN Rv
+. if \\$1-std \{\
+. if \B\\*(cH .if (\\*(cH<2):(\\*(cH>3) \
+. tm Usage: .Rv -std sections 2 and 3 only
+. br
+. ie \\$2 \\*[__rV1.1]\\*[__rV2]
+. el \{\
+. nop The
+. ie \\$3 \\$2() function returns
+. el \{\
+. lnr i 2
+. while \\ni<=\\n(.$ \{\
+. ie \\n(.$>3&(\\ni<\\n(.$) .lds c ,
+. el .lds c
+. nop \\$[\\ni]()\\*c
+. nr i +1
+. if \\ni=\\n(.$ and
+. \}
+. nop functions return
+. \}
+. nop \\*[__rV1.2]\\*[__rV2]
+. \}
+. \}
+.\}
+..
+.\" NS Lk macro
+.de Lk
+. if !\\n(aC \{\
+. ie !\\n(.$ .tm Usage: .Lk <URL> (#\\n(.c)
+. el \{\
+. ds mN Lk
+. nr fV \\n(.$
+. lnr i 0 1
+. while \\n(.$ \{\
+. ds A\\n+i "\\$1
+. shift
+. \}
+. fV
+. \}
+. \}
+. if \\n(aC>\\n(aP \{\
+. nr aP \\n(aP+1
+. ie \\n[C\\n(aP]>2 \{\
+. as b1 \\*[Lk.t]
+. ds Lk.t
+. nR
+. \}
+. el .ie \\n[C\\n(aP]=1 \{\
+. as b1 \\*[Lk.t]
+. ds Lk.t
+. \\*[A\\n(aP]
+. \}
+. el .ie !\\n[C\\n(aP]=2 \{\
+. tm .Lk: \\*[A\\n(aP]: Unexpected argument type \\n[C\\n(aP] (#\\n(.c)
+. \}
+. el \{\
+. ie \\*[Lk.t] .ds Lk.t \fB\\*[A\\n(aP]\fP
+. el .ds Lk.t \fI\\*[A\\n(aP]\fP: \\*[Lk.t]
+. Lk
+. \}
+. \}
+. as b1 \\*[Lk.t]
+. ds Lk.t
+. aZ
+..
+.de saveState
+. ie \\n(fV .lnr _i_ \\n(fV
+. el .ie \\n(aC .lnr _i_ \\n(aC
+. el .tm saveState: aC and fV are zero in \\n(.F line \\n(.c
+. nr _i_ +1
+. while \\n[_i_] \{\
+. nr _i_ -1
+. ds A\\n[_i_].saved "\\*[A\\n[_i_]]
+. ds A\\n[_i_]
+. ds C\\n[_i_].saved "\\*[C\\n[_i_]]
+. ds C\\n[_i_]
+. ds S\\n[_i_].saved "\\*[S\\n[_i_]]
+. ds S\\n[_i_]
+. \}
+. lnr _i_ 10
+. while \\n[_i_] \{\
+. nr _i_ -1
+. nr nU\\n[_i_].saved \\n[nU\\n[_i_]]
+. nr nU\\n[_i_] 0
+. nr o\\n[_i_].saved \\n[o\\n[_i_]]
+. nr o\\n[_i_] 0
+. nr v\\n[_i_].saved \\n[v\\n[_i_]]
+. nr v\\n[_i_] 0
+. nr w\\n[_i_].saved \\n[w\\n[_i_]]
+. nr w\\n[_i_] 0
+. ds L\\n[_i_].saved "\\*[L\\n[_i_]]
+. ds t\\n[_i_].saved "\\*[t\\n[_i_]]
+. \}
+. nr Xt.saved \\n[Xt]
+. nr Xt 0
+. nr aC.saved \\n[aC]
+. nr aC 0
+. nr aJ.saved \\n[aJ]
+. nr aJ 0
+. nr aP.saved \\n[aP]
+. nr aP 0
+. nr bF.saved \\n[bF]
+. nr bF 0
+. nr bV.saved \\n[bV]
+. nr bV 0
+. nr bZ.saved \\n[bZ]
+. nr bZ 0
+. nr cF.saved \\n[cF]
+. nr cF 0
+. nr cZ.saved \\n[cZ]
+. nr cZ 0
+. nr dV.saved \\n[dV]
+. nr dV 0
+. nr dZ.saved \\n[dZ]
+. nr fC.saved \\n[fC]
+. nr fC 0
+. nr fD.saved \\n[fD]
+. nr fD 0
+. nr fV.saved \\n[fV]
+. nr fV 0
+. nr fX.saved \\n[fX]
+. nr fX 0
+. nr fZ.saved \\n[fZ]
+. nr fZ 0
+. nr iD.saved \\n[iD]
+. nr iD 0
+. nr iS.saved \\n[iS]
+. nr iS 0
+. nr lC.saved \\n[lC]
+. nr nS.saved \\n[nS]
+. nr nS 0
+. nr oM.saved \\n[oM]
+. nr oM 0
+. nr sM.saved \\n[sM]
+. nr tC.saved \\n[tC]
+. nr tC 0
+. nr tP.saved \\n[tP]
+. nr tP 0
+. nr tW.saved \\n[tW]
+. nr tW 0
+. nr tX.saved \\n[tX]
+. nr tX 0
+. ds aA.saved "\\*[aA]
+. ds aA
+. ds b1.saved "\\*[b1]
+. ds b1
+. ds b2.saved "\\*[b2]
+. ds b2
+. ds iV.saved "\\*[iV]
+. ds iV
+. ds kS.saved "\\*[kS]
+. ds kS
+. ds mN.saved "\\*[mN]
+. ds mN
+. ds n1.saved "\\*[n1]
+. ds n1
+. ds pA.saved "\\*[pA]
+. ds pA
+. ds qL.saved "\\*[qL]
+. ds qL
+. ds qR.saved "\\*[qR]
+. ds qR
+. ds sV.saved "\\*[sV]
+. ds tX.saved "\\*[tX]
+. ds tX
+. ds xB.saved "\\*[xB]
+. ds xB
+..
+.de restoreState
+. nr Xt \\n[Xt.saved]
+. nr aC \\n[aC.saved]
+. nr aJ \\n[aJ.saved]
+. nr aP \\n[aP.saved]
+. nr bF \\n[bF.saved]
+. nr bV \\n[bV.saved]
+. nr bZ \\n[bZ.saved]
+. nr cF \\n[cF.saved]
+. nr cZ \\n[cZ.saved]
+. nr dV \\n[dV.saved]
+. nr dZ \\n[dZ.saved]
+. nr fC \\n[fC.saved]
+. nr fD \\n[fD.saved]
+. nr fV \\n[fV.saved]
+. nr fX \\n[fX.saved]
+. nr fZ \\n[fZ.saved]
+. nr iD \\n[iD.saved]
+. nr iS \\n[iS.saved]
+. nr lC \\n[lC.saved]
+. nr nS \\n[nS.saved]
+. nr oM \\n[oM.saved]
+. nr sM \\n[sM.saved]
+. nr tC \\n[tC.saved]
+. nr tP \\n[tP.saved]
+. nr tW \\n[tW.saved]
+. nr tX \\n[tX.saved]
+. ds aA "\\*[aA.saved]
+. ds b1 "\\*[b1.saved]
+. ds b2 "\\*[b2.saved]
+. ds iV "\\*[iV.saved]
+. ds kS "\\*[kS.saved]
+. ds mN "\\*[mN.saved]
+. ds n1 "\\*[n1.saved]
+. ds pA "\\*[pA.saved]
+. ds qL "\\*[qL.saved]
+. ds qR "\\*[qR.saved]
+. ds sV "\\*[sV.saved]
+. ds tX "\\*[tX.saved]
+. ds xB "\\*[xB.saved]
+. ie \\n(fV .lnr _i_ \\n(fV
+. el .ie \\n(aC .lnr _i_ \\n(aC
+. el .tm restoreState: aC and fV are zero in \\n(.F line \\n(.c
+. nr _i_ +1
+. while \\n[_i_] \{\
+. nr _i_ -1
+. ds A\\n[_i_] "\\*[A\\n[_i_].saved]
+. ds C\\n[_i_] "\\*[C\\n[_i_].saved]
+. ds S\\n[_i_] "\\*[S\\n[_i_].saved]
+. \}
+. lnr _i_ 10
+. while \\n[_i_] \{\
+. nr _i_ -1
+. nr nU\\n[_i_] \\n[nU\\n[_i_].saved]
+. nr o\\n[_i_] \\n[o\\n[_i_].saved]
+. nr v\\n[_i_] \\n[v\\n[_i_].saved]
+. nr w\\n[_i_] \\n[w\\n[_i_].saved]
+. ds L\\n[_i_] "\\*[L\\n[_i_].saved]
+. ds t\\n[_i_] "\\*[t\\n[_i_].saved]
+. \}
+..
+.\" vim:set syntax=groff: