diff options
author | pst <pst@FreeBSD.org> | 1996-09-07 16:18:32 +0000 |
---|---|---|
committer | pst <pst@FreeBSD.org> | 1996-09-07 16:18:32 +0000 |
commit | 7fdf49473c970aa96ee1bae16928d1db23643228 (patch) | |
tree | 0abcbad9804fcf7a7157983937cadcf61449b840 /contrib/groff/tmac | |
download | FreeBSD-src-7fdf49473c970aa96ee1bae16928d1db23643228.zip FreeBSD-src-7fdf49473c970aa96ee1bae16928d1db23643228.tar.gz |
Virgin import of FSF groff v1.10
Diffstat (limited to 'contrib/groff/tmac')
38 files changed, 10399 insertions, 0 deletions
diff --git a/contrib/groff/tmac/Makefile.sub b/contrib/groff/tmac/Makefile.sub new file mode 100644 index 0000000..b07cee7 --- /dev/null +++ b/contrib/groff/tmac/Makefile.sub @@ -0,0 +1,75 @@ +MAN7=groff_ms.n me.n msafer.n + +NORMALFILES=tmac.andoc tmac.pic tmac.ps tmac.psnew tmac.psold tmac.pspic \ + tmac.psatk tmac.dvi tmac.tty tmac.tty-char tmac.X tmac.Xps tmac.latin1 \ + tmac.lj4 eqnrc troffrc tmac.safer +SPECIALFILES=tmac.an tmac.s +STRIPFILES=tmac.e tmac.doc tmac.doc.old +MDOCFILES=doc-common doc-ditroff doc-nroff doc-syms +mdocdir=$(tmacdir)/mdoc +CLEANADD=stamp-strip stamp-wrap tmac.e-s tmac.doc-s tmac.doc.old-s \ + doc-common-s doc-ditroff-s doc-nroff-s doc-syms-s *-wrap +tmac_s_prefix= +tmac_an_prefix= +tmac_wrap= +sys_tmac_prefix= + +all: stamp-strip stamp-wrap + +install_data: $(NORMALFILES) $(SPECIALFILES) stamp-wrap stamp-strip man.local + -test -d $(tmacdir) || mkdir $(tmacdir) + if test -n "$(tmac_wrap)"; then \ + for m in $(tmac_wrap); do \ + $(INSTALL_DATA) $$m-wrap $(tmacdir)/tmac.$$m; \ + done; \ + fi + for f in $(NORMALFILES); do \ + rm -f $(tmacdir)/$$f; \ + $(INSTALL_DATA) $(srcdir)/$$f $(tmacdir)/$$f; \ + done + -rm -f $(tmacdir)/tmac.$(tmac_s_prefix)s + $(INSTALL_DATA) $(srcdir)/tmac.s $(tmacdir)/tmac.$(tmac_s_prefix)s + -rm -f $(tmacdir)/tmac.$(tmac_an_prefix)an + $(INSTALL_DATA) $(srcdir)/tmac.an $(tmacdir)/tmac.$(tmac_an_prefix)an + for f in $(STRIPFILES); do \ + rm -f $(tmacdir)/$$f; \ + $(INSTALL_DATA) $$f-s $(tmacdir)/$$f; \ + done + -test -d $(mdocdir) || mkdir $(mdocdir) + for f in $(MDOCFILES); do \ + rm -f $(mdocdir)/$$f; \ + $(INSTALL_DATA) $$f-s $(mdocdir)/$$f; \ + done + -test -f $(tmacdir)/man.local || \ + $(INSTALL_DATA) $(srcdir)/man.local $(tmacdir)/man.local + -rm -f temp + +stamp-strip: $(STRIPFILES) $(MDOCFILES) + for f in $(STRIPFILES) $(MDOCFILES); do \ + rm -f $$f-s; \ + sed -f $(srcdir)/strip.sed $(srcdir)/$$f >$$f-s; \ + done + touch $@ + +stamp-wrap: + if test -n "$(tmac_wrap)"; then \ + for m in $(tmac_wrap); do \ + rm -f $$m-wrap; \ + echo .cp 1 >$$m-wrap; \ + echo .so $(sys_tmac_prefix)$$m >>$$m-wrap; \ + done; \ + fi + touch $@ + +uninstall_sub: + -if test -n "$(tmac_wrap)"; then \ + for m in $(tmac_wrap); do rm -f $(tmacdir)/tmac.$$m; done; \ + fi + -for f in $(NORMALFILES) $(STRIPFILES); do rm -f $(tmacdir)/$$f; done + -rm -f $(tmacdir)/tmac.$(tmac_s_prefix)s + -rm -f $(tmacdir)/tmac.$(tmac_an_prefix)an + -if cmp -s $(tmacdir)/man.local $(srcdir)/man.local; then \ + rm -f $(tmacdir)/man.local; \ + fi + -for f in $(MDOCFILES); do rm -f $(mdocdir)/$$f; done + -rmdir $(mdocdir) diff --git a/contrib/groff/tmac/TODO b/contrib/groff/tmac/TODO new file mode 100644 index 0000000..5213fc2 --- /dev/null +++ b/contrib/groff/tmac/TODO @@ -0,0 +1,38 @@ +Support multiple line-spacing. + +Improve the device independence of the character definitions. + +If we have footnotes in the abstract in RP format, then the footnote +will appear on the cover sheet, which it should, but also on the first +page, which it should not. + +Should we allow multi-page cover-sheets? + +Warn about automatically numbered footnotes in floating keeps. + +When we bring back the footnote overflow at the top of page, it would +be more efficient to avoid diverting it again. (Need to keep track of +footnote height.) + +Possibly have a place above which the footnote trap must not be +placed. + +Improved indexing, not using tm, controlled by string variable (eg +-dIDX=file.idx). + +When changing from multi-column to narrower columns, we could avoid +doing a @super-eject. (This might not be a good idea.) + +Think about cutmarks. Possibly implement CM. + +Implement thesis Mode (TM, CT). + +Implement more V10 features. + +Should this + +.LP +.rs +.sp \n(.tu + +print two pages? diff --git a/contrib/groff/tmac/doc-common b/contrib/groff/tmac/doc-common new file mode 100644 index 0000000..2d25d0b --- /dev/null +++ b/contrib/groff/tmac/doc-common @@ -0,0 +1,449 @@ +.\" Copyright (c) 1991 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. +.\" +.\" @(#)doc-common 5.7 (Berkeley) 8/5/91 +.\" +.\" %beginstrip% +.nr %A 1 +.nr %J 1 +.nr %N 1 +.nr %O 1 +.nr %R 1 +.nr %T 1 +.nr %V 1 +.nr Ad 12n +.nr Ac 3 +.nr Ao 12n +.nr Ap 2 +.nr An 12n +.nr Aq 12n +.nr Ar 12n +.nr Bc 3 +.nr Bl 1 +.nr Bo 12n +.nr Bq 12n +.nr Bx 12n +.nr Cd 12n +.nr Cm 10n +.nr Co 15n +.nr Cx 20n +.nr Dc 3 +.nr Do 10n +.nr Dq 12n +.nr Ds 6n +.nr Dq 12n +.nr Dv 12n +.nr tI \n(Dsu +.nr Ec 3 +.nr El 1 +.nr Eo 12n +.nr Eq 12n +.nr Em 10n +.nr Er 12n +.nr Ev 15n +.nr Ex 10n +.nr Fa 12n +.nr Fl 10n +.nr Fc 3 +.nr Fo 16n +.nr Fn 16n +.nr Hl 1 +.nr I1 6n +.nr I2 12n +.nr I3 18n +.nr Ic 10n +.nr Li 16n +.nr Ms 6n +.nr Nm 10n +.nr No 12n +.nr Ns 2 +.nr Oo 10n +.nr Oc 3 +.nr Op 14n +.nr Pa 32n +.nr Pf 12n +.nr Pc 3 +.nr Po 12n +.nr Pq 12n +.nr Ql 16n +.nr Qc 3 +.nr Qo 12n +.nr Qq 12n +.nr Sc 3 +.nr So 12n +.nr Sq 12n +.nr Sy 6n +.nr Sx 16n +.nr Ra 1 +.nr Rj 1 +.nr Rn 1 +.nr Ro 1 +.nr Rr 1 +.nr Rt 1 +.nr Rv 1 +.nr Tn 10n +.nr Ta 1 +.nr Tv 1 +.nr Tx 22n +.nr Ux 10n +.nr Va 12n +.nr Xc 3 +.nr Xo 1 +.nr Xr 10n +.ds sV \& \& +.ds hV \&\ \& +.ds iV \& \& +.ds tV \&\\t\& +.\" Punctuation values (3 = closing punctuation, 4 = opening) +.nr z. 3 +.nr z, 3 +.nr z: 3 +.nr z; 3 +.nr z( 4 +.nr z) 3 +.nr z[ 4 +.nr z] 3 +.\" Matching pairs +.ds z( z) +.ds z[ z] +.ds z< z> +.\" This is disgusting, troff not parse ``if'' stmt properly +.nr z0 0 +.nr z1 0 +.nr z2 0 +.nr z3 0 +.nr z4 0 +.nr z5 0 +.nr z6 0 +.nr z7 0 +.nr z8 0 +.nr z9 0 +.nr z# 0 +.\" Header assembly macros +.de Dt +.ds dT UNTITLED +.ds vT LOCAL +.ds cH Null +.if !"\\$1"" .ds dT \\$1 +.if !"\\$2"" \{\ +. ds cH \\$2 +.\" . if "\\$3"" \{\ +. if \\$2>=1 .if \\$2<=8 \{\ +. ds vT UNIX Reference Manual +. if \\$2>1 .if \\$2<6 .ds vT UNIX Programmer's Manual +. if "\\$2"8" .ds vT UNIX System Manager's Manual +. nr sN \\$2 +. \} +. if "\\$2"unass" .ds vT DRAFT +. if "\\$2"draft" .ds vT DRAFT +. if "\\$2"paper" .ds vT UNTITLED +.\" . \} +.\} +.if !"\\$3"" \{\ +. if "\\$3"USD" .ds vT UNIX User's Supplementary Documents +. if "\\$3"PS1" .ds vT UNIX Programmers's Supplementary Documents +. if "\\$3"AMD" .ds vT UNIX Ancestral Manual Documents +. if "\\$3"SMM" .ds vT UNIX System Manager's Manual +. if "\\$3"URM" .ds vT UNIX Reference Manual +. if "\\$3"PRM" .ds vT UNIX Programmers's Manual +. if "\\$3"IND" .ds vT UNIX Manual Master Index +.\" . if "\\$3"CON" .ds vT UNIX Contributed Software Manual +.\" . if "\\$3"IMP" .ds vT UNIX Implementation Notes +.\" . if "\\$3"HOW" .ds vT UNIX How Pocket Manual +. if "\\$3"LOCAL" .ds vT UNIX Local Manual +. if "\\$3"tahoe" .as vT \ (Tahoe Architecture) +. if "\\$3"vax" .as vT \ (VAX Architecture) +. if "\\$3"hp300" .as vT \ (HP300 Architecture) +. if "\\*(vT"LOCAL" .ds vT \\$3 +.\} +.. +.\" NS Os macro - Operating System (behaviour changes after first call) +.\" . ds vT \f(CODRAFT\fP\ \ \-\-\ \ \\*(vT\ \ \-\-\ \ \f(CODRAFT +.\" . ds dD \f(CODRAFT\fP\ \ \-\-\ \ \\*(dD\ \ \-\-\ \ \f(CODRAFT +.\" .ds vT \s+4\f(CODRAFT\fP\s-4\ \ \-\-\ \ \\*(vT\ \ \-\-\ \ \s+4\f(CODRAFT\s-4 +.\" .ds dD \s+4\f(CODRAFT\fP\s-4\ \ \-\-\ \ \\*(dD\ \ \-\-\ \ \s+4\f(CODRAFT\s-4 +.de Os +.ds oS Null +.if "\\$1"" \{\ +. ds oS BSD Experimental +.\} +.if "\\$2"" \{\ +. ds aa Non-Null +.\} +.if "\\$1"ATT" \{\ +. ds oS AT&T +. if "\\$2"" .as oS \0UNIX +. if "\\$2"7th" .as oS \07th Edition +. if "\\$2"7" .as oS \07th Edition +. if "\\$2"III" .as oS \0System III +. if "\\$2"3" .as oS \0System III +. if "\\$2"V" .as oS \0System V +. if "\\$2"V.2" .as oS \0System V Release 2 +. if "\\$2"V.3" .as oS \0System V Release 3 +. if "\\$2"V.4" .as oS \0System V Release 4 +.\} +.if "\\$1"BSD" \{\ +. if "\\$2"3" .ds oS 3rd Berkeley Distribution +. if "\\$2"4" .ds oS 4th Berkeley Distribution +. if "\\$2"4.1" .ds oS 4.1 Berkeley Distribution +. if "\\$2"4.2" .ds oS 4.2 Berkeley Distribution +. if "\\$2"4.3" .ds oS 4.3 Berkeley Distribution +. if "\\$2"4.3T" .ds oS 4.3-Tahoe Berkeley Distribution +. if "\\$2"4.3R" .ds oS 4.3-Reno Berkeley Distribution +. if "\\$2"4.3t" .ds oS 4.3-Tahoe Berkeley Distribution +. if "\\$2"4.3r" .ds oS 4.3-Reno Berkeley Distribution +. if "\\$2"4.4" .ds oS BSD Experimental +.\} +.if "\\*(oS"Null" .ds oS \0\\$1 +.if "\\*(aa"Non-Null" .as oS \0\\$2 +.rm aa +.. +.de Dd +.if !"\\*(dD"" .nr gX 1 +.ie \\n(.$>0 \{\ +. ie \\n(.$==3 \{\ +. ds dD \\$1 \\$2 \\$3 +. \} +. el \{\ +. if "\\n(mo"1" .ds dD January +. if "\\n(mo"2" .ds dD February +. if "\\n(mo"3" .ds dD March +. if "\\n(mo"4" .ds dD April +. if "\\n(mo"5" .ds dD May +. if "\\n(mo"6" .ds dD June +. if "\\n(mo"7" .ds dD July +. if "\\n(mo"8" .ds dD August +. if "\\n(mo"9" .ds dD September +. if "\\n(mo"10" .ds dD October +. if "\\n(mo"11" .ds dD November +. if "\\n(mo"12" .ds dD December +. as dD \&\ \\n(dy, 19\\n(yr +. \} +.\} +.el \{\ +. ds dD Epoch +.\} +.. +.de hM +.ev 1 +.pL +.if !\\n(cR 'sp \\n(Hmu +.tl @\\*(Hs\\*(hT\fP@\\*(Vs\\*(vT\fP@\\*(Hs\\*(hT\fP@ +'sp \\n(Hmu +.ev +.. +.de fM +.ie \\n(cR 'br +.el \{\ +. ev 1 +. pL +. if !\\n(cR \{\ +' sp \\n(Fmu +. tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@ +' bp +. \} +. ev +.\} +.\" .tm IN 444 fM .k == \\n(.k and nl == \\n(nl +.. +.de lM +.fl +.if \\n(cR \{\ +' sp +. tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@ +. pl \\n(nlu +.\} +.. +.de Pp +.sp \\n(Ppu +.ne 2 +.ns +.. +.de Lp +.Pp +.. +.de LP +.tm Not a \-mdoc command: .LP +.. +.de PP +.tm Not a \-mdoc command: .PP +.. +.de pp +.tm Not a \-mdoc command: .pp +.. +.de Nd +\&\-\& \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.. +.de Ss +.sp +.ne 2 +.ti -.25i +\&\\*(sH\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9 +\&\fP\s0 +.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i +.if !\\n(cR .ne 2 +.br +.. +.de Rd +.tm MDOC REGISTER DUMP +.tm Db==\\n(Db register DEBUG MODE +.tm L[0-9] registers - stack of list types +.tm L0==\\n(L0 +.tm L1==\\n(L1 +.tm L2==\\n(L2 +.tm L3==\\n(L3 +.tm L4==\\n(L4 +.tm L5==\\n(L5 +.tm L6==\\n(L6 +.tm L7==\\n(L7 +.tm L8==\\n(L8 +.tm L9==\\n(L9 +.tm O[0-9] registers - stack of indent +.tm O0==\\n(O0 +.tm O1==\\n(O1 +.tm O2==\\n(O2 +.tm O3==\\n(O3 +.tm O4==\\n(O4 +.tm O5==\\n(O5 +.tm O6==\\n(O6 +.tm O7==\\n(O7 +.tm O8==\\n(O8 +.tm O9==\\n(O9 +.tm aC==\\n(aC register argument counter (aV/fV) +.tm aJ==\\n(aJ register (for vR) +.tm aN==\\n(aN register +.tm aP==\\n(aP register argument pointer (aV) +.tm aT==\\n(aT register argument type +.tm aa==\\n(aa local register +.tm bK==\\n(bK register - Book Name flag +.tm cF==\\n(cF register save current font +.tm cI==\\n(cI register - column indent width +.tm cZ==\\n(cZ register save current font size +.tm dK==\\n(dK register - Date flag +.tm d[0-9] registers - display-type stack +.tm d0==\\n(d0 +.tm d1==\\n(d1 +.tm d2==\\n(d2 +.tm d3==\\n(d3 +.tm d4==\\n(d4 +.tm d5==\\n(d5 +.tm d6==\\n(d6 +.tm d7==\\n(d7 +.tm d8==\\n(d8 +.tm d9==\\n(d9 +.tm dZ==\\n(dZ register diversion count +.tm fD==\\n(fD register subroutine test (in synopsis only) +.tm fV==\\n(fV register argument counter (must set to \\n(.$ prior to +.tm fY==\\n(fY register - dick with old style function declarations (fortran) +.tm fZ==\\n(fZ register also subroutine count (in synopsis only) +.tm h[0-9] register horizontal tag stack (continuous if 1, break if +.tm h0==\\n(h0 +.tm h1==\\n(h1 +.tm h2==\\n(h2 +.tm h3==\\n(h3 +.tm h4==\\n(h4 +.tm h5==\\n(h5 +.tm h6==\\n(h6 +.tm h7==\\n(h7 +.tm h8==\\n(h8 +.tm h9==\\n(h9 +.tm iD==\\n(iD local register +.tm iI==\\n(iI local register (indent for inline debug mode) +.tm iN==\\n(iN register DEBUG MODE (inline if 1, to stderr if +.tm iS==\\n(iS register - indent second command line in a synopsis +.tm jK==\\n(jK register - [reference] Journal Name flag +.tm jM==\\n(jM local register +.tm jN==\\n(jN local register +.tm lC==\\n(lC register - list type stack counter +.tm lK==\\n(lK register count of lines read from input file +.tm nK==\\n(nK register - [reference] issue number flag +.tm nU==\\n(nU register count +.tm oK==\\n(oK register - [reference] optional information flag +.tm oM==\\n(oM register (extension possible) +.tm o[0-9] register offset stack (nested tags) +.tm o0==\\n(o0 +.tm o1==\\n(o1 +.tm o2==\\n(o2 +.tm o3==\\n(o3 +.tm o4==\\n(o4 +.tm o5==\\n(o5 +.tm o6==\\n(o6 +.tm o7==\\n(o7 +.tm o8==\\n(o8 +.tm o9==\\n(o9 +.tm oM==\\n(oM register open ended line flag +.tm pK==\\n(pK register - [reference] page number flag +.tm qK==\\n(qK register - Corporate or Foreign Author flag +.tm rK==\\n(rK register - [reference] report flag +.tm rS==\\n(rS register - Reference Start flag +.tm sM==\\n(sM register - default is one (space mode on) +.tm tK==\\n(tK register - reference title flag +.tm tP==\\n(tP register tag flag (for diversions) +.tm tX==\\n(tX register (initial class) +.tm tY==\\n(tY register (next possible lC value) +.tm t[0-9] register tag string stack (nested tags) +.tm t0==\\n(t0 +.tm t1==\\n(t1 +.tm t2==\\n(t2 +.tm t3==\\n(t3 +.tm t4==\\n(t4 +.tm t5==\\n(t5 +.tm t6==\\n(t6 +.tm t7==\\n(t7 +.tm t8==\\n(t8 +.tm t9==\\n(t9 +.tm uK==\\n(uK register - reference author(s) counter +.tm vK==\\n(vK register - reference volume flag +.tm v[0-9] register vertical tag break stack +.tm v0==\\n(v0 +.tm v1==\\n(v1 +.tm v2==\\n(v2 +.tm v3==\\n(v3 +.tm v4==\\n(v4 +.tm v5==\\n(v5 +.tm v6==\\n(v6 +.tm v7==\\n(v7 +.tm v8==\\n(v8 +.tm v9==\\n(v9 +.tm w[0-9] register tag stack (nested tags) +.tm w0==\\n(w0 +.tm w1==\\n(w1 +.tm w2==\\n(w2 +.tm w3==\\n(w3 +.tm w4==\\n(w4 +.tm w5==\\n(w5 +.tm w6==\\n(w6 +.tm w7==\\n(w7 +.tm w8==\\n(w8 +.tm w9==\\n(w9 +.tm xX==\\n(xX local register +.tm END OF REGISTER DUMP +.. diff --git a/contrib/groff/tmac/doc-ditroff b/contrib/groff/tmac/doc-ditroff new file mode 100644 index 0000000..039db7d --- /dev/null +++ b/contrib/groff/tmac/doc-ditroff @@ -0,0 +1,281 @@ +.\" Copyright (c) 1991 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. +.\" +.\" @(#)doc-ditroff 5.8 (Berkeley) 8/5/91 +.\" +.\" tmac.mdoc-ditroff +.\" %beginstrip% +.\" +.\" -rC1 numbers pages continuously; initialize to avoid warnings +.if \n(.g .if !rC .nr C 0 +.ds aD \fI\s10 +.ds aR \f(CO\s10 +.ds cM \f(CB\s10 +.ds dF \fR\s10 +.ds eM \fI\s10 +.ds eR \fC\s10 +.ds eV \fC\s10 +.ds fA \f(CO\s10 +.ds fD \f(CB\s10 +.ds fL \f(CB\s10 +.ds fN \f(CB\s10 +.ds fP \fP\s0 +.ds fS \s0 +.ds fT \f(CO\s10 +.ds Hs \fR\s10 +.ds iC \f(CB\s10 +.ds lI \fC +.ds lP \fR\|(\|\fP\s10 +.ds lp \fR(\fP\s10 +.ds rP \fR\|)\|\fP\s10 +.ds rp \fR)\fP\s10 +.ds lB \fR\^[\^\fP\s10 +.ds rB \fR\^]\fP\s10 +.ds mL \fB\s10 +.ds nM \f(CB\s10 +.ds nO \fR\s10 +.ds nT \s0 +.ds pA \fC\s10 +.ds Pu \fR{\ .\ ,\ :\ ;\ (\ )\ [\ ]\ \fR} +.ds rA \fR\s10 +.ds rT \f(CO\s10 +.ds sH \fB\s10 +.ds sP \s0 +.ds sY \fB\s10 +.ds sX \fR\s10 +.ds tF \fR +.ds tN \s9 +.ds vA \fI\s10 +.ds Vs \fR\s10 +.ds vT \f(CB\s10 +.ds xR \fC\s10 +.tr *\(** +.nr sI \w\fC,u*5 +.nr Ti \n(sIu +.nr Pp .5v +.ds lS \0 +.nr lS \w'\0'u +.nr dI 6n +.de pL +.nr Hm .5i +.nr Fm .5i +.nr ll 6.5i +.ll 6.5i +.nr lt 6.5i +.lt 6.5i +.nr po 1i +.po 1.i +.nr dV .5v +.. +.ds <= \(<= +.ds >= \(>= +.ie \n(.g \{\ +. ds Lq \(lq +. ds Rq \(rq +.\} +.el \{\ +. ds Lq \&`` +. ds Rq \&'' +.\} +.ds ua \(ua +.ds aa \(aa +.ds ga \(ga +.ds sR \&' +.ds sL \&` +.ds q \&" +.\" 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 +.\" +.nr gX 0 +.de hK +.ds hT \\*(dT +.if !"\\*(cH"Null" \{\ +. ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|) +. el .as hT \\|(\\|\\*(cH\\|) +.\} +.if "\\*(cH"Null" \{\ +. if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|) +.\} +.wh 0 hM +.wh -1.25i fM +.nr nL \\n(nl +.ie \\n(gX==1 \{\ +. rm n1 +. bp +.\} +.el \{\ +' bp +.\} +.\" Don't set the page number if this is the first page, +.\" in case the user has used -n. +.if \\n(nL>0 \{\ +. if !\\nC \{\ +. nr % 1 +. \} +.\} +.nr gX 0 +.em lM +.. +.\" +.nr fW \w\fC0 +.de sW +.nr sW \w\fC\\$1 +.ie \\n(sW>=\\n(fW \{\ +. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1 +. el .nr sW \\n(sW/\\n(fW +.\} +.el \{\ +. ie \\n(sW>0 .nr sW 1 +. el .nr sW 0 +.\} +.. +.\" +.de aW +.nr sW \w\fC\\*(A\\$1 +.ie \\n(sW>=\\n(fW \{\ +. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1 +. el .nr sW \\n(sW/\\n(fW +.\} +.el \{\ +. ie \\n(sW>0 .nr sW 1 +. el .nr sW 0 +.\} +.. +.\" NS Ql macro - Quoted literal define +.de Ql +.if \\n(aC==0 \{\ +. ds mN Ql +. ds A1 \\$1 +. ds A2 \\$2 +. ds A3 \\$3 +. ds A4 \\$4 +. ds A5 \\$5 +. ds A6 \\$6 +. ds A7 \\$7 +. ds A8 \\$8 +. nr fV \\n(.$ +. fV +.\} +.nr aP \\n(aP+1 +.aW \\n(aP +.nr aP \\n(aP-1 +.if \\n(sW>2 .Li +.if \\n(sW<=2 \{\ +.\" Db on +. if (\\n(aP>0) \{\ +. ds A\\n(aP Li +. nr aP \\n(aP -1 +. \} +. if (\\n(aP==0) \{\ +. rm C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 +. rm S1 S2 S3 S4 S5 S6 S7 S8 S9 +. rn A8 A9 +. rn A7 A8 +. rn A6 A7 +. rn A5 A6 +. rn A4 A5 +. rn A3 A4 +. rn A2 A3 +. rn A1 A2 +. ds A1 Li +. nr fV \\n(aC+1 +. nr aC 0 +. fV +. \} +. ds qL \&\\*(sL +. ds qR \&\\*(sR +. En +.\" Db off +.\} +.. +.\" 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 +.nr nS 0 +.nr sE 0 +.nr iS 0 +'ad +.ie "\\$1"NAME" \{\ +. hK +' in 0 +.\} +.el \{\ +. nr nS 0 +. nr nA 0 +. nr nF 0 +. nr nT 0 +. nr nY 0 +. nr oT 0 +. if "\\$1"SYNOPSIS" \{\ +. na +. nr nS 1 +. \} +. if "\\$1"DESCRIPTION" \{\ +. nr fY 0 +. nr fZ 0 +. nr fB 0 +. nr Fb 0 +. ds Fb +. \} +. if "\\$1"SEE" \{\ +. nr nA 1 +. na +. \} +. if "\\$1"FILES" .nr nF 1 +. if "\\$1"STANDARDS" .nr nT 1 +. if "\\$1"AUTHORS" .nr nY 1 +. if "\\$1"SEE" .nr sE 1 +. in 0 +. nr aN 0 +.\} +.pL +'sp +.ns +.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i +.if !\\n(cR .ne 3 +'fi +\&\\*(sH\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9 +\&\fP\s0\& +.in \\n(.iu+\\n(Tiu +.ns +.. diff --git a/contrib/groff/tmac/doc-nroff b/contrib/groff/tmac/doc-nroff new file mode 100644 index 0000000..c036f21 --- /dev/null +++ b/contrib/groff/tmac/doc-nroff @@ -0,0 +1,225 @@ +.\" Copyright (c) 1991 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. +.\" +.\" @(#)doc-nroff 5.6 (Berkeley) 8/5/91 +.\" +.\" tmac.mdoc-nroff +.\" %beginstrip% +.\" +.ds aD \fI +.ds aR \fI +.ds cM \fB +.ds dF \fR +.ds eM \fI +.ds eR \fR +.ds eV \fR +.ds fA \fI +.ds fD \fB +.ds fL \fB +.ds fN \fB +.ds fP \fP +.ds fS +.ds fT \fI +.ds Hs \fR +.ds iC \fB +.ds lI \fR +.ds lP \fR\|(\fP +.ds rP \fR\|)\fP +.ds lp \fR\|(\fP +.ds rp \fR\|)\fP +.ds lB \fR\|[\|\fP +.ds rB \fR\|]\fP +.ds mL \fB +.ds nM \fB +.ds nO \fR +.ds pA \fI +.ds Pu {\ .\ ,\ ;\ :\ (\ )\ [\ ]} +.ds rA \fR +.ds rT \fI +.ds sH \fB +.ds sP +.ds sY \fB +.ds sX \fI +.ds tF \fR +.ds tN +.ds vA \fI +.ds Vs \fR +.ds vT \fB +.ds xR \fR +.\" MISCELLANEOUS +.nr sI .5i +.nr Ti .5i +.nr cR 1 +.nr Pp 1v +.ds lS \0\0 +.nr lS \w'\0\0'u +.nr dI 6n +.\" +.de pL +.ie \\n(cR .nr Hm 0 +.el .nr Hm .5i +.nr Fm .5i +.nr ll 78n +.ll 78n +.nr lt 78n +.lt 78n +.nr po 0i +.po 0i +.nr dV 1v +.ad l +.na +.. +.ds <= \&<\&= +.ds >= \&>\&= +.ds Rq '' +.ds Lq `` +.ds ua ^ +.ds aa \' +.ds ga \` +.ds sL ` +.ds sR ' +.ds q \&" +.\" Math stuff +.ds Pi pi +.ds Ne != +.ds Le <= +.ds Ge >= +.ds Lt < +.ds Gt > +.ds Pm +- +.ds If infinity +.ds Na \fINaN\fP +.ds Ba \fR\&|\fP + +.\" +.de hK +.nr % 1 +.ds hT \\*(dT +.if !"\\*(cH"Null" \{\ +. ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|) +. el .as hT \\|(\\|\\*(cH\\|) +.\} +.if "\\*(cH"Null" .if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|) +.ie \\n(cR \{\ +. hM +. wh -1v fM +.\} +.el \{\ +. wh 0 hM +. wh -1.167i fM +.\} +.if \\n(nl==0:\\n(nl==-1 'bp +.em lM +.. +.nr fW \w'0' +.de sW +.nr sW \w\\$1 +.ie \\n(sW>=\\n(fW \{\ +. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1 +. el .nr sW \\n(sW/\\n(fW +.\} +.el .nr sW 0 +.. +.de aW +.nr sW \w\\*(A\\$1 +.ie \\n(sW>=\\n(fW \{\ +. ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1 +. el .nr sW \\n(sW/\\n(fW +.\} +.el .nr sW 0 +.. +.\" NS Ql macro - Quoted literal define +.de Ql +.if \\n(aC==0 \{\ +. ds mN Ql +. 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 +.\} +.ds qL \&\\*(sL +.ds qR \&\\*(sR +.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.. +.\" 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 +.nr nS 0 +.nr sE 0 +.nr iS 0 +.ie "\\$1"NAME" \{\ +. hK +' in 0 +.\} +.el \{\ +. nr nS 0 +. nr nA 0 +. nr nF 0 +. nr nT 0 +. nr nY 0 +. nr aN 0 +. nr oT 0 +. if "\\$1"SEE" .nr nA 1 +. if "\\$1"FILES" .nr nF 1 +. if "\\$1"STANDARDS" .nr nT 1 +. if "\\$1"SYNOPSIS" .nr nS 1 +. if "\\$1"DESCRIPTION" \{\ +. rr fB +. rr Fb +. ds Fb +. nr fY 0 +. nr fZ 0 +. \} +. if "\\$1"AUTHORS" .nr nY 1 +. in 0 +.\} +.pL +'sp +.ns +.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i +.if !\\n(cR .ne 3 +'fi +\&\\*(sH\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9 +\&\fP\s0\& +.in \\n(.iu+\\n(Tiu +.if "\\$1"SEE" .nr sE 1 +.ns +.. diff --git a/contrib/groff/tmac/doc-syms b/contrib/groff/tmac/doc-syms new file mode 100644 index 0000000..a9504e9 --- /dev/null +++ b/contrib/groff/tmac/doc-syms @@ -0,0 +1,234 @@ +.\" Copyright (c) 1991 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. +.\" +.\" @(#)doc-syms 5.6 (Berkeley) 8/5/91 +.\" +.\" %beginstrip% +.\" NS Ux macro - UNIX +.de Ux +.nr cF \\n(.f +.nr cZ \\n(.s +.ds aa \&\f\\n(cF\s\\n(cZ +.as b1 \&\\*(tNUNIX\\*(aa +.rm aa +.if \\n(aC==0 \{\ +. if \\n(.$>0 .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.\} +.ie \\n(aC>\\n(aP \{\ +. nr aP \\n(aP+1 +. ie \\n(C\\n(aP==1 \{\ +. \\*(A\\n(aP +. \} +. el .nR +.\} +.el .aZ +.. +.\" NS Bx macro -BSD UNIX (fix smaller nroff version) +.de Bx +.nr cF \\n(.f +.nr cZ \\n(.s +.ds aa \&\f\\n(cF\s\\n(cZ +.if \\n(aC==0 \{\ +. ie \\n(.$==0 \&\\*(tNBSD\\*(aa \\*(tNUNIX\\*(aa +. el .aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.\} +.if "\\$1"-alpha" \{\ +\¤tly in alpha test. +. aY +.\} +.if "\\$1"-beta" \{\ +\¤tly in beta test. +. aY +.\} +.if "\\$1"-devel" \{\ +\¤tly under development. +. aY +.\} +.if \\n(aC>\\n(aP \{\ +. nr aP \\n(aP+1 +. ie \\n(C\\n(aP==2 \{\ +. as b1 \&\\*(A\\n(aP\&\\*(tNBSD\\*(aa +. ie \\n(aC>\\n(aP \{\ +. nr jj \\n(aP+1 +. ie \\n(C\\n(jj==2 \{\ +. if "\\*(A\\n(jj"Reno" \{\ +. nr aP \\n(aP+1 +. as b1 \&\-\\*(A\\n(jj +. \} +. if "\\*(A\\n(jj"reno" \{\ +. nr aP \\n(aP+1 +. as b1 \&\-Reno +. \} +. if "\\*(A\\n(jj"Tahoe" \{\ +. nr aP \\n(aP+1 +. as b1 \&\-\\*(A\\n(jj +. \} +. if "\\*(A\\n(jj"tahoe" \{\ +. nr aP \\n(aP+1 +. as b1 \&\-Tahoe +. \} +. ie \\n(aC>\\n(aP \{\ +. nr aP \\n(aP+1 +. nR +. \} +. el .aZ +. \} +. el \{\ +. nr aP \\n(aP+1 +. nR +. \} +. rr jj +. \} +. el .aZ +. \} +. el \{\ +. as b1 \&\\*(tNBSD\\*(aa U\\*(tNNIX\\*(aa +. nR +. \} +.\} +.. +.\" Ns Ud macro - prints "currently under development" (HISTORY section) +.de Ud +\¤tly under development. +.. +.\" Ns At macro - AT&T UNIX +.de At +.nr cF \\n(.f +.nr cZ \\n(.s +.ds aa \&\f\\n(cF\s\\n(cZ +.if \\n(.$==2 \{\ +. if "\\$1"32v" \&Version 32V \\*(tNAT&T UNIX\\*(aa\\$2 +. if "\\$1"v6" \&Version 6 \\*(tNAT&T UNIX\\*(aa\\$2 +. if "\\$1"v7" \&Version 7 \\*(tNAT&T UNIX\\*(aa\\$2 +. if "\\$1"V" \&\\*(tNAT&T\\*(aa System V \\*(tNUNIX\\*(aa\\$2 +. if "\\$1"V.1" \&\\*(tNAT&T\\*(aa System V.1 \\*(tNUNIX\\*(aa\\$2 +. if "\\$1"V.4" \&\\*(tNAT&T\\*(aa System V.4 \\*(tNUNIX\\*(aa\\$2 +.\} +.if \\n(.$==1 \{\ +. if "\\$1"32v" \&Version 32V \\*(tNAT&T UNIX\\*(aa +. if "\\$1"v6" \&Version 6 \\*(tNAT&T UNIX\\*(aa +. if "\\$1"v7" \&Version 7 \\*(tNAT&T UNIX\\*(aa +. if "\\$1"V" \&\\*(tNAT&T\\*(aa System V \\*(tNUNIX\\*(aa +. if "\\$1"V.1" \&\\*(tNAT&T\\*(aa System V.1 \\*(tNUNIX\\*(aa +. if "\\$1"V.4" \&\\*(tNAT&T\\*(aa System V.4 \\*(tNUNIX\\*(aa +.\} +.. +.\" The Bt macro should go away now +.\" Ns Bt macro - prints "is currently in beta test." (HISTORY section) +.de Bt +\&is currently in beta test. +.. +.\" NS St macro - standards (posix, ansi - formal standard names) +.ds Px \\*(tNPOSIX +.ds Ai \\*(tNANSI +.de St +.if \\n(aC==0 \{\ +. ie \\n(.$==0 \{\ +.tm Usage: .St [-p1003.1-88 | -p1003.2 | -ansiC-89 | -iso ] \\*(Pu ... (#\\n(.c) +. \} +. el \{\ +. ds mN St +. nr aP 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(.$ +. fV +. \} +.\} +.if \\n(aC>\\n(aP \{\ +. nr cF \\n(.f +. nr cZ \\n(.s +. ds aa \&\f\\n(cF\s\\n(cZ +. nr aP \\n(aP+1 +. if "\\*(A\\n(aP"-p1003.1-88" \{\ +. ie \\n(sT==1 \{\ +. ds b1 \&\\*(tNIEEE Std\\*(aa1003.1-1988\\*(sV +. as b1 (``\\*(tN\\*(Px\\*(aa'') +. \} +. el \{\ +. ds b1 \&\\*(tNIEEE Std\\*(aa1003.1-1988\\*(sV +. as b1 (``\\*(tN\\*(Px\\*(aa'') +. \} +. \} +. if "\\*(A\\n(aP"-p1003.2" \{\ +. ie \\n(sT==1 \{\ +. ds b1 \&\\*(tNIEEE Std\\*(aa1003.2 +. as b1 (``\\*(tN\\*(Px\\*(aa'') +. \} +. el \{\ +. ds b1 \&\\*(tNIEEE Std\\*(aa1003.2\\*(sV +. as b1 (``\\*(tN\\*(Px\\*(aa'') +. \} +. \} +. if "\\*(A\\n(aP"-ansiC" \{\ +. ie \\n(sT==1 \{\ +. ds b1 \&\\*(tNANSI C\\*(aa3.159-1989\\*(sV +. as b1 (``\\*(tNANSI C\\*(aa'') +. \} +. el \{\ +. ds b1 \&\\*(tNANSI C\\*(aa3.159-1989\\*(sV +. as b1 (``\\*(tNANSI C\\*(aa'') +. \} +. \} +. if "\\*(A\\n(aP"-ansiC-89" \{\ +. ie \\n(sT==1 \{\ +. ds b1 \&\\*(tNANSI C\\*(aa3.159-1989\\*(sV +. as b1 (``\\*(tNANSI C\\*(aa'') +. \} +. el \{\ +. ds b1 \&\\*(tNANSI C\\*(aa3.159-1989\\*(sV +. as b1 (``\\*(tNANSI C\\*(aa'') +. \} +. \} +. if "\\*(A\\n(aP"-iso8802-3" \{\ +. ie \\n(sT==1 \{\ +. ds b1 \&\\*(tNISO \\*(aa8802-3: 1989\\*(sV +.\" . as b1 (``\\*(tNANSI C\\*(aa'') +. \} +. el \{\ +. ds b1 \&\\*(tNISO \\*(aa8802-3: 1989\\*(sV +.\" . as b1 (``\\*(tNANSI C\\*(aa'') +. \} +. \} +. ie \\n(aC>\\n(aP \{\ +. nr aP \\n(aP+1 +. nR +. \} +. el .aZ +.\} +.. diff --git a/contrib/groff/tmac/eqnrc b/contrib/groff/tmac/eqnrc new file mode 100644 index 0000000..eab720c --- /dev/null +++ b/contrib/groff/tmac/eqnrc @@ -0,0 +1,60 @@ +.\" Startup file for eqn. +.EQ +sdefine << %{ < back 20 < }% +sdefine >> %{ > back 20 > }% + +sdefine dot %accent "\fR\(a.\fP"% +sdefine dotdot %accent "\fR\(ad\fP"% +sdefine vec %accent {up 52 "\s[\En[.s]/2u]\(->\s0"}% +sdefine dyad %accent {up 52 "\s[\En[.s]/2u]\(<>\s0"}% + +sdefine cdot %type "binary" \(md% + +ifdef X75 ! define X %1% ! +ifdef X100 ! define X %1% ! +ifdef X75-12 ! define X %1% ! +ifdef X100-12 ! define X %1% ! + +ifdef ps ! define ps|X %1% ! +ifdef X ! define ps|X %1% ! + +ifdef ps|X ! sdefine inf %"\s[\En[.s]*13u/10u]\v'12M'\(if\v'-12M'\s0"% ! + +ifdef dvi ! +sdefine int %{type "operator" vcenter \(is}% +sdefine sum %{type "operator" vcenter \[sum]}% +sdefine prod %{type "operator" vcenter \[product]}% +sdefine coprod %{type "operator" vcenter \[coproduct]}% +set num1 68 +set num2 39 +set denom1 69 +set denom2 34 +set sup1 41 +set sup2 36 +set sup3 29 +set sup_drop 39 +set sub_drop 5 +set axis_height 25 +set x_height 43 +set default_rule_thickness 4 +set big_op_spacing1 11 +set big_op_spacing2 16 +set big_op_spacing3 20 +set big_op_spacing4 60 +set big_op_spacing5 10 +! + +ifdef X ! set axis_height 32 ! + +ifdef ps|X ! set draw_lines 1 ! + +ifdef ascii ! define n %1% ! +ifdef latin1 ! define n %1% ! +ifdef n ! +set nroff 1 +! + +undef X +undef ps|X +undef n +.EN diff --git a/contrib/groff/tmac/fixmacros.sed b/contrib/groff/tmac/fixmacros.sed new file mode 100644 index 0000000..63cce22 --- /dev/null +++ b/contrib/groff/tmac/fixmacros.sed @@ -0,0 +1,6 @@ +s/^\([.'][ ]*[^\\ ][^ \\]\)\([^ ]\)/\1 \2/ +s/^\(\\![.'][ ]*[^\\ ][^ \\]\)\([^ ]\)/\1 \2/ +s/\([.'][ ]*i[ef] *[^ ]* [.'][ ]*[^\\0-9 ][^ \\]\)\([^ ]\)/\1 \2/ +s/\([.'][ ]*i[ef] *[^ ]* \\{[.'][ ]*[^\\0-9 ][^ \\]\)\([^ ]\)/\1 \2/ +s/\([.'][ ]*[da]s *[^ \\][^ \\]\)\([^ ]\)/\1 \2/ +s/\\\*\[/\\*[[]/ diff --git a/contrib/groff/tmac/groff_ms.man b/contrib/groff/tmac/groff_ms.man new file mode 100644 index 0000000..0e1f64c --- /dev/null +++ b/contrib/groff/tmac/groff_ms.man @@ -0,0 +1,235 @@ +.ig \"-*- nroff -*- +Copyright (C) 1989-1995 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. +.. +.TH GROFF_MS @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +.SH NAME +groff_ms \- groff ms macros +.SH SYNOPSIS +.B groff +.B \-m@TMAC_S_PREFIX@s +[ +.IR options .\|.\|. +] +[ +.IR files .\|.\|. +] +.SH DESCRIPTION +This manual page describes the GNU version of the ms macros, +which is part of the groff document formatting system. +The groff ms macros are intended to be compatible with the +documented behaviour of the 4.3 +.SM BSD +Unix ms macros subject to the following limitations: +.IP \(bu +the internals of groff ms are not similar to the internals of Unix ms +and so documents that depend upon implementation details of Unix ms +may well not work with groff ms; +.IP \(bu +there is no support for typewriter-like devices; +.IP \(bu +Berkeley localisms, in particular the +.B TM +and +.B CT +macros, are not implemented; +.IP \(bu +groff ms +does not provide cut marks; +.IP \(bu +multiple line spacing is not allowed +(use a larger vertical spacing instead); +.IP \(bu +groff ms does not work in compatibility mode (eg with the +.B \-C +option); +.IP \(bu +the error-handling policy of groff ms +is to detect and report errors, +rather than silently to ignore them. +.LP +The groff ms macros make use of many features of GNU troff +and therefore cannot be used with any other troff. +.LP +Bell Labs localisms are not implemented in either the +.SM BSD +ms macros or in the groff ms macros. +.LP +Some Unix ms documentation says that the +.B CW +and +.B GW +number registers can be used to control the column width and +gutter width respectively. +This is not the case. +These number registers are not used in groff ms. +.LP +Macros that cause a reset set the indent. +Macros that change the indent do not increment or decrement +the indent, but rather set it absolutely. +This can cause problems for documents that define +additional macros of their own. +The solution is to use not the +.B in +request but instead the +.B RS +and +.B RE +macros. +.LP +The number register +.B GS +is set to 1 by the groff ms macros, +but is not used by the Unix ms macros. +It is intended that documents that need to determine whether +they are being formatted with Unix ms or groff ms make use of this +number register. +.LP +Footnotes are implemented so that they can safely be used within +keeps and displays. +Automatically numbered footnotes within floating keeps are +not recommended. +It is safe to have another +.B \e** +between a +.B \e** +and the corresponding +.BR .FS ; +it is required only that each +.B .FS +occur after the corresponding +.B \e** +and that the occurrences of +.B .FS +are in the same order as the corresponding occurrences of +.BR \e** . +.LP +The strings +.B \e*{ +and +.B \e*} +can be used to begin and end a superscript. +.LP +Some Unix V10 ms features are implemented. +The +.BR B , +.BR I +and +.B BI +macros can have an optional third argument which will be printed +in the current font before the first argument. +There is a macro +.B CW +like +.B B +that changes to a constant-width font. +.LP +The following strings can be redefined to adapt the groff ms macros +to languages other than English: +.LP +.nf +.ta \w'REFERENCES'u+2n +String Default Value +.sp .3v +REFERENCES References +ABSTRACT ABSTRACT +TOC Table of Contents +MONTH1 January +MONTH2 February +MONTH3 March +MONTH4 April +MONTH5 May +MONTH6 June +MONTH7 July +MONTH8 August +MONTH9 September +MONTH10 October +MONTH11 November +MONTH12 December +.fi +.LP +The font family is reset from the string +.BR FAM ; +at initialization if this string is undefined it is set to the current +font family. +The point size, vertical spacing, and inter-paragraph spacing for footnotes +are taken from the number registers +.BR FPS , +.BR FVS , +and +.BR FPD ; +at initialization these are set to +.BR \en(PS-2 , +.BR \en[FPS]+2 , +and +.B \en(PD/2 +respectively; however, if any of these registers has been defined +before initialization, it will not be set. +The hyphenation flags (as set by the +.B .hy +request) are set from the +.B HY +register; +if this has not been defined at initialization, +it will be set to 14. +.LP +Right-aligned displays are available with +.B ".DS R" +and +.BR .RD . +.LP +The following conventions are used for names of macros, strings and +number registers. +External names available to documents that use the groff ms +macros contain only uppercase letters and digits. +Internally the macros are divided into modules. +Names used only within one module are of the form +.IB module * name\fR. +Names used outside the module in which they are defined are of the form +.IB module @ name\fR. +Names associated with a particular environment are of the form +.IB environment : name; +these are used only within the +.B par +module, +and +.I name +does not have a module prefix. +Constructed names used to implement arrays are of the form +.IB array ! index\fR. +Thus the groff ms macros reserve the following names: +.IP \(bu +names containing +.BR * ; +.IP \(bu +names containing +.BR @ ; +.IP \(bu +names containing +.BR : ; +.IP \(bu +names containing only uppercase letters and digits. +.SH FILES +.B @MACRODIR@/tmac.@TMAC_S_PREFIX@s +.SH "SEE ALSO" +.BR groff (@MAN1EXT@), +.BR @g@troff (@MAN1EXT@), +.BR @g@tbl (@MAN1EXT@), +.BR @g@pic (@MAN1EXT@), +.BR @g@eqn (@MAN1EXT@) +.br +.BR ms (@MAN7EXT@) diff --git a/contrib/groff/tmac/man.local b/contrib/groff/tmac/man.local new file mode 100644 index 0000000..7bb8f50 --- /dev/null +++ b/contrib/groff/tmac/man.local @@ -0,0 +1,2 @@ +.\" This file is loaded after tmac.an. +.\" Put any local modifications to tmac.an here. diff --git a/contrib/groff/tmac/man.ultrix b/contrib/groff/tmac/man.ultrix new file mode 100644 index 0000000..49d7b25 --- /dev/null +++ b/contrib/groff/tmac/man.ultrix @@ -0,0 +1,103 @@ +.\" Install this as man.local if you're using Ultrix. +.\" Ultrix specific additions to groff -man macros. +.\" Written by James Clark from a specification by Martyn.Johnson@cl.cam.ac.uk. +.\" +.\" I1 and I2 are unimplemented. +.de CT +<CTRL/\\$1> +.. +.de CW +.ft CR +.. +.de Ds +.br +.nf +.ft R +.. +.de De +.ce 0 +.fi +.. +.de EX +.br +.if \\n[.$] .in +(n;\\$1) +.ft CR +.nf +.. +.de EE +.fi +.ft R +.in \\n[an-margin]u +.. +.de G +.it 1 an-trap +.ft H +.if \\n[.$] \&\\$* +.. +.de GL +.it 1 an-trap +.ft HI +.if \\n[.$] \&\\$* +.. +.if n .ig +.de HB +.ie \\n[.$] .ft HB +.el \f[HB]\\$*\fP +.. +.if t .ig +.de HB +.ie \\n[.$] .ul 999 +.el .ul +\\$* +.. +.als TB HB +.de MS +\&\f[CR]\\$1\fR(\\$2)\\$3 +.. +.de NT +.br +.ds an-note Note +.ce 1 +.if \\n[.$] \{\ +. ie '\\$1'C' \{\ +. ce 99 +. if \\n[.$]>1 .ds an-note \\$2 +. \} +. el \{\ +. ds an-note \\$1 +. if '\\$2'C' .ce 99 +. \} +.\} +.in \\n[an-margin]u+5n +.ll \\n[LL]u-5n +.sp .5v>?\n[.V]u +\&\\*[an-note] +.sp .5v>?\n[.V]u +. +.. +.de NE +.ll \\n[LL]u +.in \\n[an-margin]u +.ce 0 +.sp .5v>?\n[.V]u +.. +.de PN +\&\f[CR]\\$1\fP\\$2 +.. +.de Pn +.ie \\n(.$>1 \&\\$1\f[CR]\\$2\fP\\$3 +.el \&\f[CR]\\$1\fP\\$2 +.. +.de R +.ft R +.ul 0 +.. +.de RN +<RETURN> +.. +.de VS +.if '\\$1'4' .mc \[br] +.. +.de VE +.mc +.. diff --git a/contrib/groff/tmac/me.man b/contrib/groff/tmac/me.man new file mode 100644 index 0000000..4919621 --- /dev/null +++ b/contrib/groff/tmac/me.man @@ -0,0 +1,274 @@ +.\" Copyright (c) 1980 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms are permitted +.\" provided that the above copyright notice and this paragraph are +.\" duplicated in all such forms and that any documentation, +.\" advertising materials, and other materials related to such +.\" distribution and use acknowledge that the software was developed +.\" by the University of California, Berkeley. The name of the +.\" University may not be used to endorse or promote products derived +.\" from this software without specific prior written permission. +.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +.\" +.\" @(#)me.7 6.4 (Berkeley) 4/13/90 +.\" +.\" Modified for groff by jjc@jclark.com +.hc % +.TH GROFF_ME @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +.UC 3 +.SH NAME +groff_me \- troff macros for formatting papers +.SH SYNOPSIS +.B "groff \-me" +[ options ] +file ... +.br +.B "troff \-me" +[ options ] +file ... +.SH DESCRIPTION +This manual page describes the GNU version of the \-me macros, +which is part of the groff document formatting system. +This version can be used with both GNU troff and Unix troff. +This package of +.I troff +macro definitions provides a canned formatting +facility for tech%nical papers in various formats. +.PP +The macro requests are defined below. +Many +.I troff +requests are unsafe in conjunction with +this package, however, these requests may be used with +impunity after the first .pp: +.nf +.IP +.ta \w'.sz +n 'u +\&.bp begin new page +\&.br break output line here +\&.sp n insert n spacing lines +\&.ls n (line spacing) n=1 single, n=2 double space +\&.na no alignment of right margin +\&.ce n center next n lines +\&.ul n underline next n lines +.fi +.PP +Output of the +.I pic, +.I eqn, +.I refer, +and +.I tbl +preprocessors +is acceptable as input. +.SH FILES +@MACRODIR@/tmac.e +.SH "SEE ALSO" +.BR groff (@MAN1EXT@), +.BR @g@troff (@MAN1EXT@) +.br +\-me Reference Manual, Eric P. Allman +.br +Writing Papers with Groff Using \-me +.tr &. +.SH REQUESTS +This list is incomplete; +see +.I "The \-me Reference Manual" +for interesting details. +.PP +.ta \w'.eh \'x\'y\'z\' 'u +\w'Initial 'u +\w'Cause 'u +.br +.di x + \ka +.br +.di +.in \nau +.ti 0 +Request Initial Cause Explanation +.ti 0 + Value Break +.br +.in \nau +.ti 0 +\&.(c - yes Begin centered block +.ti 0 +\&.(d - no Begin delayed text +.ti 0 +\&.(f - no Begin footnote +.ti 0 +\&.(l - yes Begin list +.ti 0 +\&.(q - yes Begin major quote +.ti 0 +\&.(x \fIx\fR - no Begin indexed item in index +.I x +.ti 0 +\&.(z - no Begin floating keep +.ti 0 +\&.)c - yes End centered block +.ti 0 +\&.)d - yes End delayed text +.ti 0 +\&.)f - yes End footnote +.ti 0 +\&.)l - yes End list +.ti 0 +\&.)q - yes End major quote +.ti 0 +\&.)x - yes End index item +.ti 0 +\&.)z - yes End floating keep +.ti 0 +\&.++ \fIm H\fR - no Define paper section. +.I m +defines the part of the paper, and can be +.B C +(chapter), +.B A +(appendix), +.B P +(preliminary, e.g., abstract, table of contents, etc.), +.B B +(bibliography), +.B RC +(chapters renumbered from page one each chapter), +or +.B RA +(appendix renumbered from page one). +.ti 0 +\&.+c \fIT\fR - yes Begin chapter (or appendix, etc., as +set by .++). +.I T +is the chapter title. +.ti 0 +\&.1c 1 yes One column format on a new page. +.ti 0 +\&.2c 1 yes Two column format. +.ti 0 +\&.EN - yes Space after equation +produced by +.I eqn +or +.IR neqn . +.ti 0 +\&.EQ \fIx y\fR - yes Precede equation; break out and +add space. +Equation number is +.IR y . +The optional argument \fIx\fR +may be +.I I +to indent equation (default), +.I L +to left-adjust the equation, or +.I C +to center the equation. +.ti 0 +\&.GE - yes End \fIgremlin\fP picture. +.ti 0 +\&.GS - yes Begin \fIgremlin\fP picture. +.ti 0 +\&.PE - yes End \fIpic\fP picture. +.ti 0 +\&.PS - yes Begin \fIpic\fP picture. +.ti 0 +\&.TE - yes End table. +.ti 0 +\&.TH - yes End heading section of table. +.ti 0 +\&.TS \fIx\fR - yes Begin table; if \fIx\fR is +.I H +table has repeated heading. +.ti 0 +\&.b \fIx\fR no no Print +.I x +in boldface; if no argument switch to boldface. +.ti 0 +\&.ba \fI+n\fR 0 yes Augments the base indent by +.I n. +This indent is used to set the indent on regular text +(like paragraphs). +.ti 0 +\&.bc no yes Begin new column +.ti 0 +\&.bi \fIx\fR no no Print +.I x +in bold italics (nofill only) +.ti 0 +\&.bu - yes Begin bulleted paragraph +.ti 0 +\&.bx \fIx\fR no no Print \fIx\fR in a box (nofill only). +.ti 0 +\&.ef \fI\'x\'y\'z\'\fR \'\'\'\' no Set even footer to x y z +.ti 0 +\&.eh \fI\'x\'y\'z\'\fR \'\'\'\' no Set even header to x y z +.ti 0 +\&.fo \fI\'x\'y\'z\'\fR \'\'\'\' no Set footer to x y z +.ti 0 +\&.hx - no Suppress headers and footers on next page. +.ti 0 +\&.he \fI\'x\'y\'z\'\fR \'\'\'\' no Set header to x y z +.ti 0 +\&.hl - yes Draw a horizontal line +.ti 0 +\&.i \fIx\fR no no Italicize +.I x; +if +.I x +missing, italic text follows. +.ti 0 +\&.ip \fIx y\fR no yes Start indented paragraph, +with hanging tag +.IR x . +Indentation is +.I y +ens (default 5). +.ti 0 +\&.lp yes yes Start left-blocked paragraph. +.ti 0 +\&.np 1 yes Start numbered paragraph. +.ti 0 +\&.of \fI\'x\'y\'z\'\fR \'\'\'\' no Set odd footer to x y z +.ti 0 +\&.oh \fI\'x\'y\'z\'\fR \'\'\'\' no Set odd header to x y z +.ti 0 +\&.pd - yes Print delayed text. +.ti 0 +\&.pp no yes Begin paragraph. +First line indented. +.ti 0 +\&.r yes no Roman text follows. +.ti 0 +\&.re - no Reset tabs to default values. +.ti 0 +\&.sh \fIn x\fR - yes Section head follows, +font automatically bold. +.I n +is level of section, +.I x +is title of section. +.ti 0 +\&.sk no no Leave the next page blank. +Only one page is remembered ahead. +.ti 0 +\&.sm \fIx\fR - no Set +.I x +in a smaller pointsize. +.ti 0 +\&.sz \fI+n\fR 10p no Augment the point size by +.I n +points. +.ti 0 +\&.tp no yes Begin title page. +.ti 0 +\&.u \fIx\fR - no Underline argument (even in \fItroff\fR). +(Nofill only). +.ti 0 +\&.uh - yes Like .sh but unnumbered. +.ti 0 +\&.xp \fIx\fR - no Print index +.I x. diff --git a/contrib/groff/tmac/mm.diff b/contrib/groff/tmac/mm.diff new file mode 100644 index 0000000..d6694aa --- /dev/null +++ b/contrib/groff/tmac/mm.diff @@ -0,0 +1,70 @@ +*** tmac.m- Thu Aug 2 14:49:57 1990 +--- tmac.m Thu Aug 2 14:55:40 1990 +*************** +*** 744,749 **** + .fi + .di >A +! \!.cs 3 48 +! .if !0\\$1-\\n(:d .if !\\n(:f \\*(}y\\$4\\\\f3\\a\\\\fP\\*(}3 + .if !0\\$1-\\n(:d .if \\n(:f \\*(}y\\$4\\t\\*(}3 + .if 0\\$1-\\n(:d \\*(}y\\$4\\*(}3 +--- 744,749 ---- + .fi + .di >A +! .cs 3 48 +! .if !0\\$1-\\n(:d .if !\\n(:f \\*(}y\\$4\?\f3\?\\a\?\fP\?\\*(}3 + .if !0\\$1-\\n(:d .if \\n(:f \\*(}y\\$4\\t\\*(}3 + .if 0\\$1-\\n(:d \\*(}y\\$4\\*(}3 +*************** +*** 750,754 **** + .br + \!.br +! \!.cs 3 + .di + .br +--- 750,754 ---- + .br + \!.br +! .cs 3 + .di + .br +*************** +*** 1397,1406 **** + .tr ,+ + .tr |. +- .ie \\nE \{\ +- |ds\ >8\ \f3\\\\$1+\\\\$2+\\\\$3+\\\\$4+\\\\$5+\\\\$6+\\\\$7+\\\\$8+\\\\$9\fP +- 'br \} +- .el \{\ + |ds\ >8\ \\\\$1+\\\\$2+\\\\$3+\\\\$4+\\\\$5+\\\\$6+\\\\$7+\\\\$8+\\\\$9 +- 'br \} + .br + \!.br +--- 1397,1401 ---- +*************** +*** 1407,1410 **** +--- 1402,1406 ---- + .tr ,,++|| + .di ++ .asciify >A + \\.. + .>7 \\*(>1 +*************** +*** 1424,1429 **** +--- 1420,1427 ---- + .tr ||++ + .di ++ .asciify >7 + .de >A + .de >T ++ .if \\nE .ft 3 + .if \\\\n(.$ \\\\$1 + .if \\\\n(.$-1 \\\\$2 +*************** +*** 1435,1438 **** +--- 1433,1437 ---- + .if \\\\n(.$-7 \\\\$8 + .if \\\\n(.$-8 \\\\$9 ++ .if \\nE .ft + \\\\.. + \\.. diff --git a/contrib/groff/tmac/msafer.man b/contrib/groff/tmac/msafer.man new file mode 100644 index 0000000..0571285 --- /dev/null +++ b/contrib/groff/tmac/msafer.man @@ -0,0 +1,56 @@ +.ig \"-*- nroff -*- +Copyright (C) 1989-1995 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. +.. +.TH MSAFER @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +.SH NAME +msafer \- groff -msafer macros +.SH SYNOPSIS +.B groff +.B \-msafer +[ +.IR options .\|.\|. +] +[ +.IR files .\|.\|. +] +.SH DESCRIPTION +The -msafer macros remove the +.BR open , +.BR opena , +.BR pso , +.B sy +and +.B pi +requests. +These macros should be used when processing input from +an untrustworthy source. +For maximum safety, +they should be the first -m option on the command-line. +Normally they are invoked using the +.B \-S +option of groff, which will also pass +.B @g@pic +the +.B \-S +flag. +.SH FILES +.B @MACRODIR@/tmac.safer +.SH "SEE ALSO" +.BR groff (@MAN1EXT@), +.BR @g@troff (@MAN1EXT@), +.BR @g@pic (@MAN1EXT@) diff --git a/contrib/groff/tmac/strip.sed b/contrib/groff/tmac/strip.sed new file mode 100644 index 0000000..b309e86 --- /dev/null +++ b/contrib/groff/tmac/strip.sed @@ -0,0 +1,2 @@ +/%beginstrip%/,$s/[ ]*\\".*// +/^\.$/d diff --git a/contrib/groff/tmac/tmac.X b/contrib/groff/tmac/tmac.X new file mode 100644 index 0000000..53dd596 --- /dev/null +++ b/contrib/groff/tmac/tmac.X @@ -0,0 +1,46 @@ +.nr _C \n(.C +.cp 0 +.ftr CW CR +.ftr C CR +.ftr CO CI +.ftr CX CBI +.ftr H HR +.ftr HO HI +.ftr HX HBI +.ftr NX NBI +.char \(ru \D'l .5m 0' +.char \(ul \v'.25m'\D'l .5m 0'\v'-.25m' +.char \(br \v'.25m'\D'l 0 -1m'\v'.75m' +.char \(rn \v'-.75m'\D'l .5m 0'\v'.75m' +.char ~ \v'-.55m'\\s[\\n(.s/2u]\v'.2m'\(ti\v'-.2m'\s0\v'.55m' +.char ^ \v'-.55m'\\s[\\n(.s/2u]\v'.3m'\(ha\v'-.3m'\s0\v'.55m' +.if !c\(va .char \(va \o'\(ua\(da' +.if !c\(em .char \(em -- +.if !c\(en .char \(en \- +.if !c\(fi .char \(fi fi +.if !c\(fl .char \(fl fl +.if !c\(ff .char \(ff ff +.if !c\(Fi .char \(Fi ffi +.if !c\(Fl .char \(Fl ffl +.if !c\(ci .char \(ci \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m' +.if !c\(sq .char \(sq \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m' +.if !c\(ga .char \(ga \Z'\v'-.7m'\D'l .22m .18m''\h'.33m' +.if !c\(dg .char \(dg \Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\ +\D'l .39m 0''\h'.5m' +.if !c\(dd .char \(dd \Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\ +\D'l .39m 0'\v'.4m'\D'l -.39m 0''\h'.5m' +.if !c\(lq .char \(lq `` +.if !c\(rq .char \(rq '' +.if !c\(Bq .char \(bq ,, +.if !c\(OE .char \(OE O\h'-.25m'E +.if !c\(oe .char \(oe o\h'-.14m'e +.if !c\(ah .char \(ah \v'-.55m'\s[\En[.s]/2u]v\s0\v'.55m' +.if !c\(ao .char \(ao \v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s0\v'.55m' +.if !c\(ho .char \(ho \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0 +.if !c\(lh .tr \(lh\(lA +.if !c\(rh .tr \(rh\(rA +.if !c\(bq .tr \(bq, +.if !c\(aq .tr \(aq' +.if '\*(.T'X100' .char \[radicalex] \h'-\w'\(sr'u'\[radicalex]\h'\w'\(sr'u' +.if !\n(_C .mso tmac.pspic +.cp \n(_C diff --git a/contrib/groff/tmac/tmac.Xps b/contrib/groff/tmac/tmac.Xps new file mode 100644 index 0000000..92471ab --- /dev/null +++ b/contrib/groff/tmac/tmac.Xps @@ -0,0 +1,44 @@ +.do mso tmac.ps +.nr _C \n(.C +.cp 0 +.de Xps-char +.char \\$1 \Z"\X'ps: invis'\\$2\X'ps: endinvis'"\\$1 +.. +.Xps-char \(bu \fS\(bu\fP +.Xps-char \(em "\v'-.25m'\h'.05m'\D'l .9m 0'\h'.05m'" +.Xps-char \(aq ' +.Xps-char \(bq , +.Xps-char \(Bq ,, +.Xps-char \(lq `` +.Xps-char \(rq '' +.Xps-char \(OE OE +.Xps-char \(oe oe +.Xps-char \(Fn \fS\(Fn\fP +.Xps-char \(vS \o'\(ahS' +.Xps-char \(vs \o'\(ahs' +.Xps-char \(vZ \o'\(ahZ' +.Xps-char \(vz \o'\(ahz' +.Xps-char \(/L \o'/L' +.Xps-char \(/l \o'/l' +.Xps-char \(:Y \o'\(adY' +.Xps-char \(a" \(sd +.Xps-char \(a. \v'-.6m'. +.Xps-char \(ga "\Z'\v'-.7m'\D'l .22m .18m''\h'.33m'" +.Xps-char \(ab \v'-.55m'\s'\\\\n(.s*6u/10u'u\s0 +.Xps-char \(ah \v'-.55m'\s[\En[.s]/2u]v\s0\v'.55m' +.Xps-char \(ao "\v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s0\v'.55m'" +.Xps-char \(ho \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0 +.Xps-char \(.i i +.Xps-char \(fo < +.Xps-char \(fc > +.Xps-char \(OK \s'\\\\n(.s*6u/10u'\e\s0/ +.Xps-char \(tm \v'-.3m'\s'\\\\n(.s*6u/10u'TM\s0\v'.3m' +.Xps-char \(dd "\Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\ +\D'l .39m 0'\v'.4m'\D'l -.39m 0''\h'.5m'" +.Xps-char \(dg "\Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\ +\D'l .39m 0''\h'.5m'" +.Xps-char \(en \- +.Xps-char \(%0 %\s'\\\\n(.s*6u/10u'\fI0\fP\s0 +.Xps-char \(lh \(-> +.Xps-char \(rh \(<- +.cp \n(_C diff --git a/contrib/groff/tmac/tmac.a4 b/contrib/groff/tmac/tmac.a4 new file mode 100644 index 0000000..14a0b4c --- /dev/null +++ b/contrib/groff/tmac/tmac.a4 @@ -0,0 +1,3 @@ +.\" Set up groff for A4 paper. +.pl 29.7c +.ll 21c-2i diff --git a/contrib/groff/tmac/tmac.an b/contrib/groff/tmac/tmac.an new file mode 100644 index 0000000..9f1dba7 --- /dev/null +++ b/contrib/groff/tmac/tmac.an @@ -0,0 +1,327 @@ +.\"Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +.\" Written by James Clark (jjc@jclark.com) +.\" +.\"This file is part of groff. +.\" +.\"groff is free software; you can redistribute it and/or modify it under +.\"the terms of the GNU General Public License as published by the Free +.\"Software Foundation; either version 2, or (at your option) any later +.\"version. +.\" +.\"groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\"WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\"for more details. +.\" +.\"You should have received a copy of the GNU General Public License along +.\"with groff; see the file COPYING. If not, write to the Free Software +.\"Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.\" +.\" -rC1 => number pages continuously, rather than start each at 1 +.\" -rD1 => double-sided printing, ie different odd and even page footers +.\" -rPnnn => number first page nnn +.\" -rXnnn => number pages after nnn as nnna, nnnb, nnnc, ... +.\" +.\" The file man.local is loaded at the end. Put local additions there. +.\" If you need to add things to TH, use `.am TH'. +.\" +.if !\n(.g .ab These man macros work only with groff. +.nr _C \n(.C +.cp 0 +.if !rD .nr D 0 +.if !rC .nr C 0 +.if rP .pn 0\nP +.\" .TH title section extra1 extra2 extra3 +.de TH +.cp 0 +.de an-init \" We have to do it like this to get multiple man pages right. +.ds an-title "\\$1 +.ds an-section "\\$2 +.ds an-extra1 "\\$3 +.ie \\n[.$]>3 .ds an-extra2 "\\$4 +.el .ds an-extra2 \"Sun Release 4.0 +.ie \\n[.$]>4 .ds an-extra3 "\\$5 +.el .ds an-extra3 \"UNIX Programmer's Manual +.ds an-init +\\.. +.DT +.nr IN 7.2n +.nr LL 6.5i +.PD +.nr PS 10 \" normal point-size +.nr SN 3n \" the indentation of sub-sub-headings relative to sub-headings +.nr an-level 1 +.nr an-margin \\n[IN] +.nr an-prevailing-indent \\n[IN] +.nr an-tag-sep 1n +.nr an-no-space-flag 0 +.nr an-break-flag 0 +.nr an-div? 0 +.wh 0 an-header +.wh -1i an-footer +.wh -.5i an-p-footer +.if \\n[nl]>0 \{\ +. ie \\nC .bp \\n%+1 +. el .bp 1 +.\} +.. +.de DT +.ta T .5i \" This sets tabs every .5 inches +.. +.de PD +.ie \\n[.$] .nr PD (v;\\$1) +.el .nr PD .4v>?\n[.V] +.. +.de an-header +.an-init +.ev 1 +.sp .5i +.tl '\\*[an-title](\\*[an-section])'\\*[an-extra3]'\\*[an-title](\\*[an-section])' +.sp |1i +.ev +.ns +.. +.de an-footer +'bp +.. +.af an-page-letter a +.de an-p-footer +.ev 1 +.ds an-page-string \\n% +.if rX \{\ +. if \\n%>\\nX \{\ +. nr an-page-letter \\n%-\\nX +. ds an-page-string \\nX\\n[an-page-letter] +.\}\} +.ie \\nD \{\ +. if o .tl '\\*[an-extra2]'\\*[an-extra1]'\\*[an-page-string]' +. if e .tl '\\*[an-page-string]'\\*[an-extra1]'\\*[an-extra2]' +.\} +.el .tl '\\*[an-extra2]'\\*[an-extra1]'\\*[an-page-string]' +.ev +.. +.de SH +.sp \\n[PD]u +.nr an-level 1 +.nr an-margin \\n[IN] +.nr an-prevailing-indent \\n[IN] +.fi +.in \\n[IN]u +.ti 0 +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.ps \\n[PS]-1 +.ft B +.ne 2v+1u +.if \\n[.$] \&\\$* +.. +.de SS +.sp \\n[PD]u +.nr an-level 1 +.nr an-margin \\n[IN] +.nr an-prevailing-indent \\n[IN] +.fi +.in \\n[IN]u +.ti \\n[SN]u +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.ps \\n[PS] +.ft B +.ne 2v+1u +.if \\n[.$] \&\\$* +.. +.de B +.it 1 an-trap +.ft B +.if \\n[.$] \&\\$* +.. +.de I +.it 1 an-trap +.ft I +.if \\n[.$] \&\\$* +.. +.de SM +.it 1 an-trap +.ps -1 +.if \\n[.$] \&\\$* +.. +.de SB +.it 1 an-trap +.ps -1 +.ft B +.if \\n[.$] \&\\$* +.. +.de TP +.sp \\n[PD]u +.if \\n[.$] .nr an-prevailing-indent (n;\\$1) +.it 1 an-trap +.if !\\n[an-div?] .di an-div +.in 0 +.nr an-div? 1 +.. +.de an-trap +.ft R +.ps \\n[PS] +.if \\n[an-break-flag] \{\ +. br +. nr an-break-flag 0 +.\} +.if \\n[an-no-space-flag] \{\ +. ns +. nr an-no-space-flag 0 +.\} +.if \\n[an-div?] .an-do-tag +.. +.de an-do-tag +.nr an-div? 0 +.br +.di +.in \\n[an-margin]u+\\n[an-prevailing-indent]u +.ti -\\n[an-prevailing-indent]u +.ie \\n[dl]+\\n[an-tag-sep]>\\n[an-prevailing-indent] \{\ +. ne 2v+1u +. an-div +. br +.\} +.el \{\ +. chop an-div +. ne 1v+1u +\\*[an-div]\\h'|\\n[an-prevailing-indent]u'\c +.\} +.. +.de LP +.br +.sp \\n[PD]u +.ps \\n[PS] +.ft R +.in \\n[an-margin]u +.nr an-prevailing-indent \\n[IN] +.. +.als PP LP +.als P LP +.de IP +.ie !\\n[.$] \{\ +. ps \\n[PS] +. ft R +. sp \\n[PD]u +. ne 1v+1u +. in \\n[an-margin]u+\\n[an-prevailing-indent]u +.\} +.el \{\ +. ie \\n[.$]-1 .TP "\\$2" +. el .TP +\&\\$1 +.\} +.. +.de HP +.ps \\n[PS] +.ft R +.sp \\n[PD]u +.ne 1v+1u +.if \\n[.$] .nr an-prevailing-indent (n;\\$1) +.in \\n[an-margin]u+\\n[an-prevailing-indent]u +.ti \\n[an-margin]u +.. +.ds an-empty \" this is referenced to avoid looping on eg .RB ( \\ ) +.de RI +.if \\n[.$] \{\ +. ds an-result \&\\$1 +. shift +. while \\n[.$]>=2 \{\ +. as an-result \,\fI\\$1\fR\/\\$2\\*[an-empty] +. shift 2 +. \} +. if \\n[.$] .as an-result \,\fI\\$1\fR +\\*[an-result] +.\} +.. +.de IR +.if \\n[.$] \{\ +. ds an-result \&\fI\\$1\fR +. shift +. while \\n[.$]>=2 \{\ +. as an-result \/\\$1\fI\,\\$2\fR +. shift 2 +. \} +. if \\n[.$] .as an-result \/\\$1 +\\*[an-result] +.\} +.. +.de IB +.if \\n[.$] \{\ +. ds an-result \&\fI\\$1 +. shift +. while \\n[.$]>=2 \{\ +. as an-result \/\\fB\\$1\fI\,\\$2\\*[an-empty] +. shift 2 +. \} +. if \\n[.$] .as an-result \/\\fB\\$1 +\\*[an-result] +. ft R +.\} +.. +.de BI +.if \\n[.$] \{\ +. ds an-result \&\fB\\$1 +. shift +. while \\n[.$]>=2 \{\ +. as an-result \,\fI\\$1\fB\/\\$2\\*[an-empty] +. shift 2 +. \} +. if \\n[.$] .as an-result \,\fI\\$1 +\\*[an-result] +. ft R +.\} +.. +.de RB +.ds an-result \& +.while \\n[.$]>=2 \{\ +. as an-result \fR\\$1\fB\\$2\\*[an-empty] +. shift 2 +.\} +.if \\n[.$] .as an-result \fR\\$1 +\\*[an-result] +.ft R +.. +.de BR +.ds an-result \& +.while \\n[.$]>=2 \{\ +. as an-result \fB\\$1\fR\\$2\\*[an-empty] +. shift 2 +.\} +.if \\n[.$] .as an-result \fB\\$1 +\\*[an-result] +.ft R +.. +.de RS +.br +.nr an-saved-margin\\n[an-level] \\n[an-margin] +.nr an-saved-prevailing-indent\\n[an-level] \\n[an-prevailing-indent] +.ie \\n[.$] .nr an-margin +(n;\\$1) +.el .nr an-margin +\\n[an-prevailing-indent] +.in \\n[an-margin]u +.nr an-prevailing-indent \\n[IN] +.nr an-level +1 +.. +.de RE +.br +.ie \\n[.$] .nr an-level (;\\$1)<?\\n[an-level] +.el .nr an-level -1 +.nr an-level 1>?\\n[an-level] +.nr an-margin \\n[an-saved-margin\\n[an-level]] +.nr an-prevailing-indent \\n[an-saved-prevailing-indent\\n[an-level]] +.in \\n[an-margin]u +.. +.ds S \s[\\n[PS]] +.ie c\[rg] .ds R \[rg] +.el .ds R (Reg.) +.ie c\[tm] .ds Tm \[tm] +.el .ds Tm (TM) +.ds lq \(lq +.ds rq \(rq +.hy 14 +.\" Load local modifications. +.mso man.local +.cp \n(_C diff --git a/contrib/groff/tmac/tmac.andoc b/contrib/groff/tmac/tmac.andoc new file mode 100644 index 0000000..8cf989c --- /dev/null +++ b/contrib/groff/tmac/tmac.andoc @@ -0,0 +1,12 @@ +.\" Load either tmac.an or tmac.doc. +.if !\n(.g .ab These macros require groff. +.de Dd +.rm Dd +.do mso tmac.doc +\\*(Dd\\ +.. +.de TH +.rm TH +.do mso tmac.an +\\*(TH\\ +.. diff --git a/contrib/groff/tmac/tmac.doc b/contrib/groff/tmac/tmac.doc new file mode 100644 index 0000000..e575df7 --- /dev/null +++ b/contrib/groff/tmac/tmac.doc @@ -0,0 +1,3427 @@ +.\" Copyright (c) 1991 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. +.\" +.\" @(#)doc 5.8 (Berkeley) 8/5/91 +.\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be +.\" installed as mdoc/doc-* rather than tmac.doc-* (the filename +.\" `tmac.doc-common' would be too long); when using groff, the doc-* files +.\" are loaded using the `mso' request. +.\" +.\" .mdoc-parse - attempt to parse troff request arguments +.\" %beginstrip% +.if \n(.g \{\ +.cp 0 +.ftr C CR +.\} +.if \n(.g .ig +.de sO +.so /usr/share/tmac/\\$1 +.. +.if !\n(.g .ig +.de sO +.mso mdoc/\\$1 +.. +.if t \{\ +. sO doc-ditroff +.\} +.if n \{\ +. sO doc-nroff +.\} +.sO doc-common +.sO 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 \\n(aC+1 +.ie "\\$1"|" \{\ +. if "\\*(mN"Op" .ds A\\n(aC \fR\\$1\fP +. if "\\*(mN"Ar" .ds A\\n(aC \fR\\$1\fP +. if "\\*(mN"Fl" .ds A\\n(aC \fR\\$1\fP +. if "\\*(mN"Cm" .ds A\\n(aC \fR\\$1\fP +. if "\\*(mN"It" .ds A\\n(aC \fR\\$1\fP +.\} +.el .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 \{\ +. if \\n(fC==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 \\n(aC+1 +.if "\\*(A\\n(aC"|" \{\ +. if "\\*(mN"Op" .ds A\\n(aC \fR\\*(A\\n(aC\fP +. if "\\*(mN"Ar" .ds A\\n(aC \fR\\*(A\\n(aC\fP +. if "\\*(mN"Fl" .ds A\\n(aC \fR\&\\*(A\\n(aC\fP +. if "\\*(mN"Cm" .ds A\\n(aC \fR\\*(A\\n(aC\fP +. if "\\*(mN"It" .ds A\\n(aC \fR\\*(A\\n(aC\fP +.\} +.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 \{\ +. if \\n(fC==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 \\n(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 +.ie \\n(aC<9 \{\ +. nr aC \\n(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 \\n(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 \\n(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 \\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 +. 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"\\*(Ba" \{\ +. ie !"\\*(A\\n(aP"\fR|\fP" \{\ +. ie "\\*(A\\n(aP"-" .as b1 \&\|\-\^\-\| +. el .as b1 \&\|\-\\*(A\\n(aP +. \} +. el .as b1 \&\\*(A\\n(aP +. \} +. 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 \\n(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 \\n(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 \\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 +. \} +. \} +.\} +.. +.\" 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 \\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 +. 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 \\n(aP+1 +. nr cF \\n(.f +. nr cZ \\n(.s +. ie \\n(nS \{\ +. if "\\*(mN"Cd" \{\ +. 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 +. 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 \\*(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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 +. 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 \\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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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\\$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 \\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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 +. 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 \\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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 \{\ +. ie \\n(.$==0 \{\ +. ie "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu (#\\n(.c) +. el \&\\*(nM\\*(n1\fP\s0 +. \} +. el \{\ +. ds mN Nm +. 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>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 +. \\*(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+1)*\\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 \\n(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 \\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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.if \\n(aC>\\n(aP \{\ +. nr aP \\n(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 Qq +.if \\n(aC==0 .ds mN Qq +.ds qL \&\\*q +.ds qR \&\\*q +.En \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.. +.\" 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 \\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 +.\} +.. +.\" .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 +.ie \\n(aC==0 \{\ +. ie \\n(.$==0 \{\ +. as b1 \&\\*(qL\\*(qR +. pB +. \} +. el \{\ +.\". as mN (En) +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. as b1 \&\\*(qL +. \} +.\} +.el \{\ +. 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==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 Qo macro - Straight Double Quote open +.de Qo +.if \\n(aC==0 .ds mN Qo +.ds qL \&\\*q +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.. +.\" NS Qc macro - Straight Double Quote close +.de Qc +.if \\n(aC==0 .ds mN Qc +.ds qR \&\\*q +.eC \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.. +.\" NS So macro - Single Quote open +.de So +.if \\n(aC==0 .ds mN So +.ds qL \&\\*(sL +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.. +.\" NS Sc macro - Single Quote close +.de Sc +.if \\n(aC==0 .ds mN Sc +.ds qR \&\\*(sR +.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 +.\" .nr mN 1 +.ds qL +.eO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.. +.\" NS Xe macro - Extend close (end) +.de Xc +.\" .nr mN 0 +.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) +.de eO +.nr oM \\n(oM+1 +.\" .tm eO last arg==A[\\n(aC]==\\*(A\\n(aC; aP==\\n(aP; oM==\\n(oM; dZ==\\n(dZ; +.ie \\n(aC==0 \{\ +. ie \\n(.$>0 \{\ +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. as b1 \\*(qL +. \} +. el \{\ +. as b1 \\*(qL +. if (\\n(dZ==0)&(\\n(sM==1) \{\ +. nr dZ \\n(dZ+1 +. ds b2 \\*(b1 +. ds b1 +. nr lK \\n(.c +. ev 2 +. fi +. di eB +. \} +. \} +.\} +.el \{\ +. as b1 \\*(qL +.\} +.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 \{\ +. if \\n(tP==1 \{\ +.\" .tm SETTING Xt!!! +. nr Xt 1 +. \} +.\".\" . ds S0 +.\"CHANGED ds S0 \\*(iV +. 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 +.\" tm eC 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 +.\" tm CURRENT arg (aP==\\*(A\\n(aP and ap+1==\\*(A\\n(aa) tP==\\n(tP Xt==\\n(Xt +. rr aa +. if \\n(tP>0 \{\ +.\" tm UNSETTING Xt==\\n(Xt!!!! +. if \\n(Xt>0 .nr Xt \\n(Xt-1 +.\" tm NOW Xt==\\n(Xt!!!! +. \} +. 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 \\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 .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 \\n(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 +.if \n(.g \{\ +.de aT +.nr aT 0 +.ie \\n(sW>2:(\A'\\$1'==0) \{\ +. 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:(\A'\\*(A\\$1'==0) .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 +. \} +.\} +.. +.\} +.if !\n(.g \{\ +.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 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 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 +.\" this kludge can probably go away, but need to double check first +. ie "\\*(A\\n(aC"Nb" .ds S\\n(xX \\*(hV +. el .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 \\n(aP-1 +.No +.. +.de c3 +.nr aP \\n(aP-1 +.No +.. +.de c4 +.nr aP \\n(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 \\n(aP+1 +.n\\C\\n(aP +.. +.de y4 +.as b1 \\*(A\\n(aP +.nr aP \\n(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\c +. if "\\$1"Li" \&\\*(lI\c +. if "\\$1"Sy" \&\\*(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 +. if "\\$1"-literal" \{\ +. nr iD \\n(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 \\n(iD+1 +. ds d\\n(dP dF +. br +. \} +. if "\\$1"-ragged" \{\ +. nr iD \\n(iD+1 +. ds d\\n(dP dR +. na +. \} +. if "\\$1"-unfilled" \{\ +. nr iD \\n(iD+1 +. ds d\\n(dP dU +. 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) \{\ +. 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 +.\" .tm in bV with args: \\$1 \\$2 \\$3 +.nr iD 1 +.ds bY +.if "\\$1"-offset" \{\ +. ds bY \\$2 +. if "\\*(bY"left" \{\ +. nr iD \\n(iD+1 +. nr O\\n(dP 0 +. \} +. if "\\*(bY"right" \{\ +. nr iD \\n(iD+1 +. nr O\\n(dP (\\n(.l/3)u +. \} +. if "\\*(bY"center" \{\ +. nr iD \\n(iD+1 +. nr O\\n(dP (\\n(.l-\\n(.i)/4u +. \} +. if "\\*(bY"indent" \{\ +. nr iD \\n(iD+1 +. nr O\\n(dP \\n(dIu +. \} +. if "\\*(bY"indent-two" \{\ +. nr iD \\n(iD+1 +. nr O\\n(dP \\n(dIu+\\n(dIu +. \} +. if \\n(iD==1 \{\ +. nr iD \\n(iD+1 +. sW "\\*(bY" +. ie \\n(sW>2 \{\ +. ie ((\\*(bY>9n)&(\\*(bY<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 \\n(dP==0 .tm mdoc: Extraneous .Ed +.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 +.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 | -tag] [-width]] [ -item | -enum | -bullet | -diag] (#\\n(.c) +.\} +.el \{\ +. ds mN Bl +. nr aP 0 +. nr lC \\n(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 \\n(aP+1 +. ds L\\n(lC hL +. nr w\\n(lC 6n +. nr tC 1 +. \} +. if "\\$1"-tag" \{\ +. nr aP \\n(aP+1 +. ds L\\n(lC tL +. nr tC 1 +. \} +. if "\\$1"-item" \{\ +. nr aP \\n(aP+1 +. ds L\\n(lC iT +. nr tC 1 +. \} +. if "\\$1"-enum" \{\ +. nr aP \\n(aP+1 +. ds L\\n(lC nU +. nr w\\n(lC 3n +. nr tC 1 +. \} +. if "\\$1"-bullet" \{\ +. nr aP \\n(aP+1 +. ds L\\n(lC bU +. nr w\\n(lC 2n +. nr tC 1 +. \} +. if "\\$1"-dash" \{\ +. nr aP \\n(aP+1 +. ds L\\n(lC hU +. nr w\\n(lC 2n +. nr tC 1 +. \} +. if "\\$1"-hyphen" \{\ +. nr aP \\n(aP+1 +. ds L\\n(lC hU +. nr w\\n(lC 2n +. nr tC 1 +. \} +. if "\\$1"-inset" \{\ +. nr aP \\n(aP+1 +. ds L\\n(lC lL +. nr tC 1 +. \} +. if "\\$1"-diag" \{\ +. nr aP \\n(aP+1 +. ds L\\n(lC mL +. nr mL 1 +. \} +. if "\\$1"-ohang" \{\ +. nr aP \\n(aP+1 +. ds L\\n(lC oL +. nr tC 1 +. \} +. if "\\$1"-column" \{\ +. nr aP \\n(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 +.\" . ds b1 +. aY +.\" .tm Here is L[\\n(lC]==\\*(L\\n(lC +.\} +.. +.if \n(.g \{\ +. nr i 10 +. while \ni<100 \{\ +. nr num!\nin 1 +. nr i +1 +. \} +.\} +.\" NS lV macro - resolve remaining .Bl arguments +.de lV +.nr aP \\n(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 \\n(aP+1 +. nr tW 1 +. ds t\\n(lC TagwidtH +. ds tS \\*(A\\n(aP +. aW \\n(aP +. ie \\n(sW>2 \{\ +. nr w\\n(lC (\\n(sW)*\\n(fWu +. if \\n(sW==3 \{\ +. ie \\n(.g \{\ +. if \A'\\*(tS' .if r num!\\*(tS \{\ +. nr w\\n(lC \\*(tS +. \} +. \} +. el \{\ +. if (\\*(tS>9n)&(\\*(tS<99n) \{\ +. nr w\\n(lC \\*(tSu +. \} +. \} +. \} +. \} +. 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 \\n(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 \{\ +. nr o\\n(lC (\\n(sW)*\\n(fWu +. ie \\n(.g \{\ +. if \A'\\*(tS' .if r num!\\*(tS \{\ +. nr o\\n(lC \\*(tS +. \} +. \} +. el \{\ +. 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 +. \} +. \} +. \} +. if \\n(iD==0 \{\ +. if "\\*(L\\n(lC"cL" \{\ +. nr wV \\n(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 +. tZ +. nr lC \\n(lC-1 +. tY +. \} +. if "\\*(L\\n(lC"iT" \{\ +' in \\n(.iu-\\n(o\\n(lCu +. tZ +. nr lC \\n(lC-1 +. tY +. nr iD 1 +. \} +. if "\\*(L\\n(lC"oL" \{\ +' in \\n(.iu-\\n(o\\n(lCu +. tZ +. nr lC \\n(lC-1 +. tY +. nr iD 1 +. \} +. if "\\*(L\\n(lC"lL" \{\ +' in \\n(.iu-\\n(o\\n(lCu +. 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 \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 +.\} +.\" .tm Here is L[\\n(lC]==\\*(L\\n(lC +.ne 3v +.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 ------------------------------------------------------------------------ +.\" 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 \\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 +. \} +.\" tm in It here is b1==\\*(b1 +.\" tm It mid arg(A[1])==\\*(A1; oM==\\n(oM; dZ==\\n(dZ; Xt==\\n(Xt; aC==\\n(aC +. 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 \\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(lCu+\\n(lSu +.ti -\\n(bbu +.ie \w\\*(b1u>=(\\n(w\\n(lCu) \&\\*(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 \\n(oM+1 +.nr nU \\n(nU+1 +.ds b1 \&\\n(nU. +.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(lCu+\\n(lSu +.ti -\\n(bbu +.ie \w\\*(b1u>=(\\n(w\\n(lCu) \&\\*(b1 +.el \&\\*(b1\h'|\\n(bbu'\c +.nr oM \\n(oM-1 +.\" .nr dZ \\n(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 +.\" tm in tL here is b1==\\*(b1 +.if \\n(tW==0 .lW +.lX +.nr bb \\n(w\\n(lCu+\\n(lSu +.ti -\\n(bbu +.ie (\w\\*(b1u)>(\\n(w\\n(lCu) \{\&\\*(b1 +. br +.\} +.el \&\\*(b1\h'|\\n(bbu'\c +.if \\n(nF==1 \{\ +. if n .ds pA \\*(aA +.\} +.nr oM \\n(oM-1 +.nr tP 0 +.\" .nr dZ \\n(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 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 +.\" 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 .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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 .y\\n(C\\n(aP +. 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) +. 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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.\} +.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(.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 \\n(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 +.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 +.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 +.. +.\" 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 +.nr eW \w\\*(A1 u +\w\\*(A2 u +\w\\*(A3 u +\w\\*(A4 u +\w\\*(A5 u +\w\\*(A6 +' 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 \\n(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 \\n(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 +.\" . ds b1 +. \} +.\} +.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 \\n(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) +.\" this is not done in the same manner as .Ot for fortrash - clean up later +.de Vt +.\" 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 \\n(fX+1 +.nr cF \\n(.f +.nr cZ \\n(.s +\\*(fT\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.ie \\n(oT==0 .br +.el \&\ \& +.ft \\n(cF +.fs \\n(cZ +.. +.\" +.\" NS Ft macro - Function type +.nr fZ 0 +.de Ft +.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 +.\} +.nr cF \\n(.f +.nr cZ \\n(.s +\&\\*(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) +.\" 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 +. 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 +. \} +.\} +.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 +.\" . nr aa \\n(aP +.\" . 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 +. \} +.\" . \} +. if \\n(fC>1 \{\ +. as b1 \&\f\\n(cF\s\\n(cZ,\\*(S\\n(aP\\*(fA\\*(A\\n(aP\fP\s0 +.\" . as b1 \&\\,\\*(S\\n(aP\fP\s0\\*(fA\\*(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 +. 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 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 ((8)*\\n(fW)u +. \} +. \} +. in +\\n(iSu +. ti -\\n(iSu +. nr nS \\n(nS+1 +.\} +.if \\n(aC>\\n(aP \{\ +. nr aP \\n(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 \{\ +. 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 +.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 \{\ +. 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 \\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 +. 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 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 ((8)*\\n(fW)u +. \} +. \} +. 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 +. 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 fC 0 +.nr oM \\n(oM-1 +.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 +. fB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +.\} +.. +.\" 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 +.. +.\" 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 +.nr dK 0 +.nr pK 0 +.nr bK 0 +.ds rS +.rm U1 U2 U3 U4 U5 U6 U7 U8 +.rm uK jK nK oK rK qK tK vK dK pK bK +.. +.\" NS rZ macro - reference print +.de rZ +.if \\n(uK \{\&\\*(U1, +. nr aK 1 +. if (\\n(uK>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) \{\&\\*q\\*(tK\\*q. +. \} +. el \{\&\\*(eM\\*(tK\\*(nO. +. \} +. \} +. if \\n(Kl>0 \{\ +. ie (\\n(jK==1):(\\n(bK==1) \{\&\\*q\\*(tK\\*q, +. \} +. el \{\&\\*(eM\\*(tK\\*(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(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(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 +.nr aK \\n(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 \\n(uK+1 +. nr Kl \\n(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 \{\ +. 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 +. \} +. 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 \{\ +. nr aP \\n(aP+1 +. nr cF \\n(.f +. nr cZ \\n(.s +. ie \\n(rS==0 \{\ +. as b1 \&\\*(eM +. nR +. \} +. el .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 +. 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 \{\ +. 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 +. 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 \{\ +. 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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 +. 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 \{\ +. 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 +. 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 \{\ +. 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 +. 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 \{\ +. 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 +. 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 \{\ +. 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 +. \} +. 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 \{\ +. nr aP \\n(aP+1 +. nr cF \\n(.f +. nr cZ \\n(.s +. ie \\n(rS==0 \{\ +. as b1 \&\\*(eM +. nR +. \} +. el .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 +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 +.\" 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 \&\\*(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 \\n(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 +.\" NS aN register +.nr aN 0 +.de An +.if \\n(nY==1 \{\ +. ie \\n(aN==1 \{\ +. br +. \} +. el \{\ +. nr aN 1 +. \} +.\} +.if \\n(aC==0 \{\ +. ie \\n(.$==0 .tm Usage: .An author_name ... \\*(Pu (#\\n(.c) +. el \{\ +. ds mN An +. aV \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 +. \} +.\} +.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 rV "function returns the value 0 if successful; otherwise the value -1 is returned and the global variable \\*(vAerrno\fP is set to indicate the error. +.\" 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 +.\" . nr aP 0 +.\" . nr lR \\n(lR+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"-std" \{\ +. nr cH \\*(cH +. if (\\n(cH<2):(\\n(cH>3) .tm Usage: .Rv -std sections 2 and 3 only +. br +\&The +.Fn \\$2 +\&\\*(rV +. \} +.\} +.. diff --git a/contrib/groff/tmac/tmac.dvi b/contrib/groff/tmac/tmac.dvi new file mode 100644 index 0000000..59c6df5 --- /dev/null +++ b/contrib/groff/tmac/tmac.dvi @@ -0,0 +1,135 @@ +.nr _C \n(.C +.cp 0 +.ftr CR CW +.ftr C CW +.ftr TT CW +.ftr HR H +.\" This uses the dvi-char_1 string in font CW, dvi-char_0 otherwise. +.char _ \R'dvi-char_ \\n(.f=\f(CW\\n(.f\fP'\\*[dvi-char_\\n[dvi-char_]] +.char \[ul] \R'dvi-char_ \w'M'=\w'i''\\*[dvi-char_\\n[dvi-char_]] +.\" Normally use a rule. +.\" This is designed so that \(ul, \(rn and \(br form corners. +.ds dvi-char_0 \Z'\v'.23m'\D'R .54m .04m''\h'.5m' +.\" In font CW use a real _ character. +.ds dvi-char_1 _ +.if !c\[radicalex] .char \[radicalex] \D'R .5m -.04m'\v'.04m' +.if !c\[br] .char \[br] \Z'\v'.25m'\D'R .04m -1m'' +.if !c\[ru] .char \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m' +.if !c\[rn] .char \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m' +.if !c\[co] .char \[co] \z\(ci\h'\w'\(ci'u-\w'c'u/2u'c\h'\w'\(ci'u-\w'c'u/2u' +.if !c\[rg] .char \[rg] \z\(ci\h'\w'\(ci'u-\w'r'u/2u'r\h'\w'\(ci'u-\w'r'u/2u' +.if !c\[fm] .char \[fm] \v'-.35m'\s[\\n(.s*7u/10u]\[prime]\s0\v'.35m' +.if !c\[de] .char \[de] \h'.05m'\v'-.54m'\D'c .3m'\v'.54m'\h'.05m' +.if !c\[ct] .char \[ct] \o'c/' +.if !c\[sq] .char \[sq] \Z'\h'.05m'\D'R .4m -.04m'\v'.04m'\h'-.04m'\ +\D'R .04m -.4m'\v'.04m'\D'R -.4m -.04m'\D'R .04m .4m''\h'.5m' +.\"char \[sq] \h'.05m'\D'l .4m 0'\D'l 0 -.4m'\D'l -.4m 0'\D'l 0 .4m'\h'.45m' +.if !c\[!=] .char \[!=] \[slashnot]\(eq +.if !c\[tm] .char \[tm] \v'-.3m'\s[\\n(.s/2u]TM\s0\v'.3m' +.if !c\[aq] .char \[aq] ' +.if !c\[bq] .char \[bq] , +.if !c\[Bq] .char \[Bq] ,\h'\w'\(rq'u-(2u*\w"'"u)', +.if !c\[ho] .char \[ho] \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0 +.if !c\[-D] .char \[-D] \Z'\v'-.1m'\h'.05m'-'D +.if !c\[Sd] .char \[Sd] \Z'\v'-.3m'\h'.35m'-'\(pd +.if !c\[TP] .char \[TP] I\h'-.25m'\v'-.33m'\s[\En[.s]*6u/10u]\v'.33m'D\ +\v'-.33m'\s0\v'.33m' +.if !c\[Tp] .char \[Tp] \zlp +.if !c\[nb] .char \[nb] \[slashnot]\(sb +.cflags 8 \(an +.if !c\[an] .char \[an] \h'-.167m'\(mi\h'-.167m' +.\" Define some fractions. +.de dvi-frac +.if !c\[\\$1\\$2] .char \[\\$1\\$2] \ +\v'-.25m'\s[\\\\n(.s*7u/10u]\\$1\s0\v'.25m'\h'-.2m'\ +/\h'-.2m'\v'.25m'\s[\\\\n(.s*7u/10u]\\$2\s0\v'-.25m' +.. +.dvi-frac 1 2 +.dvi-frac 3 4 +.dvi-frac 1 4 +.dvi-frac 1 8 +.dvi-frac 3 8 +.dvi-frac 5 8 +.dvi-frac 7 8 +.\" support for ISO Latin-1 +.if !c\[S1] .char \[S1] \v'-.2m'\s-31\s+3\v'+.2m' +.if !c\[S2] .char \[S2] \v'-.2m'\s-32\s+3\v'+.2m' +.if !c\[S3] .char \[S3] \v'-.2m'\s-33\s+3\v'+.2m' +.if !c\[Of] .char \[Of] \v'-.2m'\s'\En(.s*6u/10u'\o'_a'\s0\v'.2m' +.if !c\[Om] .char \[Om] \v'-.2m'\s'\En(.s*6u/10u'\o'_o'\s0\v'.2m' +.if !c\[Fo] .char \[Fo] << +.if !c\[Fc] .char \[Fc] >> +.if !c\[bb] .char \[bb] | +.if !c\[Ye] .char \[Ye] \o'-Y' +.if !c\[Cs] .char \[Cs] \o'\[mu]o' +.de dvi-achar +.\" Note that character definitions are always interpreted with +.\" compatibility mode off. +.if !c\\$1 \{\ +.char \\$1 \\$3\ +\k[acc]\ +\h'(u;-\w'\\$2'-\w'\\$3'/2+\\\\n[skw]+(\w'x'*0)-\\\\n[skw])'\ +\v'(u;\w'x'*0+\\\\n[rst]+(\w'\\$3'*0)-\\\\n[rst])'\ +\\$2\ +\v'(u;\w'x'*0-\\\\n[rst]+(\w'\\$3'*0)+\\\\n[rst])'\ +\h'|\\\\n[acc]u' +.\} +.hcode \\$1\\$4 +.. +.dvi-achar \(`A \` A a +.dvi-achar \('A \' A a +.dvi-achar \(^A ^ A a +.dvi-achar \(~A ~ A a +.dvi-achar \(:A \(ad A a +.dvi-achar \(oA \(ao A a +.dvi-achar \(`E \` E e +.dvi-achar \('E \' E e +.dvi-achar \(^E ^ E e +.dvi-achar \(:E \(ad E e +.dvi-achar \(`I \` I i +.dvi-achar \('I \' I i +.dvi-achar \(^I ^ I i +.dvi-achar \(:I \(ad I i +.dvi-achar \(~N ~ N n +.dvi-achar \(`O \` O o +.dvi-achar \('O \' O o +.dvi-achar \(^O ^ O o +.dvi-achar \(~O ~ O o +.dvi-achar \(:O \(ad O o +.dvi-achar \(`U \` U u +.dvi-achar \('U \' U u +.dvi-achar \(^U ^ U u +.dvi-achar \(:U \(ad U u +.dvi-achar \('Y \' Y y +.dvi-achar \(`a \` a a +.dvi-achar \('a \' a a +.dvi-achar \(^a ^ a a +.dvi-achar \(~a ~ a a +.dvi-achar \(:a \(ad a a +.dvi-achar \(oa \(ao a a +.dvi-achar \(`e \` e e +.dvi-achar \('e \' e e +.dvi-achar \(^e ^ e e +.dvi-achar \(:e \(ad e e +.dvi-achar \(`i \` \(.i i +.dvi-achar \('i \' \(.i i +.dvi-achar \(^i ^ \(.i i +.dvi-achar \(:i \(ad \(.i i +.dvi-achar \(~n ~ n n +.dvi-achar \(`o \` o o +.dvi-achar \('o \' o o +.dvi-achar \(^o ^ o o +.dvi-achar \(~o ~ o o +.dvi-achar \(:o \(ad o o +.dvi-achar \(`u \` u u +.dvi-achar \('u \' u u +.dvi-achar \(^u ^ u u +.dvi-achar \(:u \(ad u u +.dvi-achar \('y \' y y +.dvi-achar \(:y \(ad y y +.if !c\(,C .char \(,C \o'\(acC' +.hcode \(,Cc +.if !c\(,c .char \(,c \o'\(acc' +.hcode \(,cc +.cp \n(_C +.do mso tmac.latin1 diff --git a/contrib/groff/tmac/tmac.e b/contrib/groff/tmac/tmac.e new file mode 100644 index 0000000..a7abb0a --- /dev/null +++ b/contrib/groff/tmac/tmac.e @@ -0,0 +1,1658 @@ +.\" @(#)tmac.e 2.31 (Berkeley) 5/21/88 +.\" Modified by James Clark for use with groff. +.\" +.\" Copyright (c) 1988 Regents of the University of California. +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms are permitted +.\" provided that this notice is preserved and that due credit is given +.\" to the University of California at Berkeley. The name of the University +.\" may not be used to endorse or promote products derived from this +.\" software without specific prior written permission. This software +.\" is provided ``as is'' without express or implied warranty. +.\" %beginstrip% +.\" +.\"********************************************************************** +.\"* * +.\"* ****** - M E N R O F F / T R O F F M A C R O S ****** * +.\"* * +.\"* Produced for your edification and enjoyment by: * +.\"* Eric Allman * +.\"* Electronics Research Laboratory * +.\"* U.C. Berkeley. * +.\"* current address: * +.\"* Britton-Lee, Inc. * +.\"* 1919 Addison Street Suite 105 * +.\"* Berkeley, California 94704 * +.\"* * +.\"* VERSION 2.31 First Release: 11 Sept 1978 * +.\"* * +.\"* Documentation is available. * +.\"* * +.\"********************************************************************** +.\" +.\" Code on .de commands: +.\" *** a user interface macro. +.\" &&& a user interface macro which is redefined +.\" when used to be the real thing. +.\" $$$ a macro which may be redefined by the user +.\" to provide variant functions. +.\" --- an internal macro. +.\" +.if !\n(.g .ig +.de @R \" --- initialize number register to 0, if undefined +.if !r\\$1 .nr \\$1 0 +.. +.@R pf +.if \n(pf .nx +.if !\n(.g .ig +.de @S \" --- initialize string/macro to empty, if undefined +.if !d\\$1 .ds \\$1 \" empty +.. +.@R @\" \" debugging level +.\" *** INTERNAL GP MACROS *** +.de @C \" --- change ev's, taking info with us +.nr _S \\n(.s +.nr _V \\n(.v +.nr _F \\n(.f +.do ds _A \\n[.fam] +.nr _I \\n(.i +.ev \\$1 +.ps \\n(_S +.vs \\n(_Vu +.ft \\n(_F +.do @fam \\*(_A +'in \\n(_Iu +.xl \\n($lu +.lt \\n($lu +.rr _S +.rr _V +.rr _F +.rr _I +.ls 1 +'ce 0 +.. +.de @D \" --- determine display type (Indent, Left, Center) +.ds |p "\\$3 +.nr _d 0 +.if "\\$2"C" \ +. nr _d 1 +.if "\\$2"L" \ +. nr _d 2 +.if "\\$2"I" \ +. nr _d 3 +.if "\\$2"M" \ +. nr _d 4 +.if !\\n(_d \{\ +. nr _d \\$1 +. ds |p "\\$2 +.\} +.. +.de @z \" --- end macro +.if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a +.if !"\\n(.z"" \ +\{\ +. tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z) +. di +. ex +.\} +.if \\n(?a \ +. bp \" force out final table +.ds bp +.ds @b\" \" don't start another page +.br +.if \n@>1 .tm << @z +.. +.\" *** STANDARD HEADERS AND FOOTERS *** +.ie \n(.g .ds $* \\\\$* +.el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9 +.de he \" *** define header +.ie !\\n(.$ \ +\{\ +. rm |4 +. rm |5 +.\} +.el \ +\{\ +. ds |4 "\*($* +. ds |5 "\*($* +.\} +.. +.de eh \" *** define even header +.ie !\\n(.$ \ +. rm |4 +.el \ +. ds |4 "\*($* +.. +.de oh \" *** define odd header +.ie !\\n(.$ \ +. rm |5 +.el \ +. ds |5 "\*($* +.. +.de fo \" *** define footer +.ie !\\n(.$ \ +\{\ +. rm |6 +. rm |7 +.\} +.el \ +\{\ +. ds |6 "\*($* +. ds |7 "\*($* +.\} +.. +.de ef \" *** define even foot +.ie !\\n(.$ \ +. rm |6 +.el \ +. ds |6 "\*($* +.. +.de of \" *** define odd footer +.ie !\\n(.$ \ +. rm |7 +.el \ +. ds |7 "\*($* +.. +.de ep \" *** end page (must always be followed by a .bp) +.if \\n(nl>0 \ +\{\ +. wh 0 +. rs +. @b +.\} +.. +.\" *** INTERNAL HEADER AND FOOTER MACROS *** +.de @h \" --- header +.if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w +.if (\\n(.i+\\n(.o)>=\\n(.l \ +. tm Line \\n(c. -- Offset + indent exceeds line length +.\" initialize a pile of junk +.nr ?h \\n(?H \" transfer "next page" to "this page" +.nr ?H 0 +.nr ?c \\n(?C +.nr ?C 0 +.rn |4 |0 +.rn |5 |1 +.rn |6 |2 +.rn |7 |3 +.nr _w 0 \" reset max footnote width +.nr ?W 0 \" no wide floats this page (yet) +.nr ?I 1 +.\" begin actual header stuff +.ev 2 +.rs +.if \\n(hm>0 \ +. sp |\\n(hmu \" move to header position +.@t $h \" output header title +.if \\n(tm<=0 \ +. nr tm \n(.Vu +.sp |\\n(tmu \" move to top of text +.ev +.mk _k \" for columned output +.if \\n(?n .nm 1 \" restore line numbering if n1 mode +.nr $c 1 \" set first column +.if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm +.ie \\n(?s \ +\{\ +. nr ?s 0 +. rs +' @b +.\} +.el \ +. @n \" begin the column +.if \n@>2 .tm << @h +.. +.de @n \" --- new column or page +.if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o +.if \\n(bm<=0 \ +. nr bm \\n(.Vu +.if (\\n(_w<=\\n($l)&(\\n(?W=0) \ +\{\ +. nr _b (\\n(ppp*\\n($vu)/200u \" compute fudge factor (must be < 1P) +. if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \ +. nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu +. nr _b +\\n(bmu +.\} +.nr _B \\n(_bu +.ch @f +.wh -\\n(_bu @f +.nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case of sweep past +.if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B +.nr ?f 0 \" reset footnote flag +.if \\n(?o \ +\{\ +. (f _ \" reprocess footnotes which run off page +. nf +. |o +. fi +. )f +. rm |o +.\} +.nr ?o 0 +.if \\n(?T \ +\{\ +. nr _i \\n(.i +. in 0 +. |h \" output the table header +. in \\n(_iu +. rr _i +. mk #T \" for tbl commands +. ns +.\} +.if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \ +\{\ +. nr ?a 0 \" output floating keep +. @k |t +. if \\n(?w \ +. mk _k \" don't overstrike wide keeps +. nr ?w 0 +.\} +.os +.$H \" special column header macro +.ns +.. +.de @f \" --- footer +.if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f +.if \n@>2 .nr VL \\n(.pu-\\n(nlu +.if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL +.ec +.if \\n(?T \ +\{\ +. nr T. 1 \" for tbl commands (to output bottom line) +. T# 1 \" output the sides and bottom lines +. br +.\} +.ev 2 +.ce 0 +.if \\n(?b \ +\{\ +. nr ?b 0 +. @k |b\" \" output bottom of page tables +.\} +.if \\n(?f \ +. @o \" output footnote if present +.ie \\n($c<\\n($m \ +. @c \" handle new column +.el \ +. @e \" new page +.ev +.if \n@>2 .tm << @f +.. +.de @o \" --- output footnote +.nf +.ls 1 +.in 0 +.if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B +.wh -\\n(_Bu @r +.|f +.fi +.if \n@>2 .tm @o triggered @r (?o) = \\n(?o +.if \\n(?o \ +\{\ +. di \" just in case triggered @r +. if \\n(dn=0 \ +\{\ +. rm |o +. nr ?o 0 +. \} +. nr dn \\n(_D +. rr _D +.\} +.rm |f +.ch @r +.. +.de @c \" --- new column +.if \n@>2 .tm >> @c %=\\n% +.rs +.sp |\\n(_ku +.@O +\\n($lu+\\n($su +.nr $c +1 +.@n +.. +.de @e \" --- end page +.if \n@>2 .tm >> @e +.@O \\n(_ou +.rs +.sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u) \" move to footer position +.@t $f \" output footer title +.nr ?h 0 +.bp +.. +.de @t \" --- output header or footer title +.if !\\n(?h \ +\{\ +. sz \\n(tp \" set header/footer type fonts, etc. +. @F \\n(tf +. lt \\n(_Lu \" make title span entire page +. nf +. \\$1 +. br +.\} +.. +.de $h \" $$$ print header +.ds |z +.if !\\n(?c \ +\{\ +. if e .ds |z "\\*(|0 +. if o .ds |z "\\*(|1 +.\} +.if !\(ts\\*(|z\(ts\(ts \ +' tl \\*(|z +.rm |z +.. +.de $f \" $$$ print footer +.ds |z +.if \\n(?c \ +\{\ +. if e .ds |z "\\*(|0 +. if o .ds |z "\\*(|1 +.\} +.if \(ts\\*(|z\(ts\(ts \ +\{\ +. if e .ds |z "\\*(|2 +. if o .ds |z "\\*(|3 +.\} +.if !\(ts\\*(|z\(ts\(ts \ +' tl \\*(|z +.rm |z +.. +.de @r \" --- reprocess overflow footnotes +.if \n@>3 .tm >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b +.di |o \" save overflow footnote +.nr ?o 1 +.nr _D \\n(dn +.ns +.. +.\" *** COMMANDS WITH VARIANT DEFINITIONS *** +.rn bp @b \" --- begin page +.de bp \" *** begin new page (overrides columns) +.nr $c \\n($m \" force new page, not new column +.ie \\n(nl>0 \ +. @b \\$1 +.el \ +\{\ +. if \\n(.$>0 \ +. pn \\$1 +. if \\n(?I \ +. @h \" 'spring' the header trap +.\} +.br +.wh 0 @h \" reset header +.. +.rn ll xl \" *** special line length (local) +.de ll \" *** line length (global to environments) +.xl \\$1 +.lt \\$1 +.nr $l \\n(.l +.if (\\n($m<=1):(\\n($l>\\n(_L) \ +. nr _L \\n(.l +.. +.rn po @O \" --- local page offset +.de po \" *** page offset +.@O \\$1 +.nr _o \\n(.o +.. +.\" Redefine the fam request to set the family in +.\" environment 2 as well as the current environment. +.if !\n(.g .ig +.do rn fam @fam \" --- set family in current environment +.do de fam \" *** set font family in ev 2 and current ev +.do @fam \\$1 +.ev 2 +.do @fam \\$1 +.ev +.. +.\" *** MISCELLANEOUS ROFF COMMANDS *** +.de hx \" *** suppress headers and footers next page +.nr ?H 1 +.. +.de ix \" *** indent, no break +'in \\$1 +.. +.de bl \" *** contiguous blank lines +.br +.ne \\$1 +.rs +.sp \\$1 +.. +.de n1 \" *** line numbering 1 +.nm 1 +.xl -\w'0000'u +.nr ?n 1 +.. +.de n2 \" *** line numbering 2 +.nm \\$1 +.ie \\n(.$ \ +. xl -\w'0000'u +.el \ +. xl \\n($lu +.. +.de pa \" *** new page +.bp \\$1 +.. +.de ro \" *** roman page numbers +.af % i +.. +.de ar \" *** arabic page numbers +.af % 1 +.. +.de m1 \" *** position one space +.nr _0 \\n(hmu +.nr hm \\$1v +.nr tm +\\n(hmu-\\n(_0u +.rr _0 +.. +.de m2 \" *** position two space +.nr tm \\n(hmu+\\n(tpp+\\$1v +.. +.de m3 \" *** position three space +.nr bm \\n(fmu+\\n(tpp+\\$1v +.. +.de m4 \" *** position four space +.nr _0 \\n(fmu +.nr fm \\$1v +.nr bm +\\n(fmu-\\n(_0u +.. +.de sk \" *** leave a blank page (next page) +.if \\n(.$>0 \ +. tm Line \\n(c. -- I cannot skip multiple pages +.nr ?s 1 +.. +.\" *** MISCELLANEOUS USER SUPPORT COMMANDS *** +.if !\n(.g .ig +.de re \" *** reset tabs (TROFF defines 15 stops default) +.ta T 0.5i +.. +.if \n(.g .ig +.de re +.ta 0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +.. +.de ba \" *** set base indent +.ie \\n(.$ \ +. nr $i \\$1n +.el \ +. nr $i \\n(siu*\\n($0u +.. +.de hl \" *** draw horizontal line +.br +.ie \n(.g .do nr _I \\n[.in] +.el .nr _I \\n(.i +\l'\\n(.lu-\\n(_Iu' +.sp +.. +.\" *** PARAGRAPHING *** +.de pp \" *** paragraph +.lp \\n(piu +.. +.de lp \" *** left aligned paragraph +.@p +.if \\n(.$ \ +. ti +\\$1 +.nr $p 0 1 +.. +.de ip \" *** indented paragraph w/ optional tag +.if (\\n(ii>0)&(\\n(ii<1n) \ +. nr ii \\n(iin +.nr _0 \\n(ii +.if \\n(.$>1 \ +. nr _0 \\$2n +.@p \\n(_0u +.nr _I \\n(.iu +.in 0 +.di |i +\&\\$1 +.br +.di +.in \\n(_Iu +.ds |j \\*(|i\\ +.if \\w"\\*(|j" \ +\{\ +. ti -\\n(_0u +. ie \\w"\\*(|j">=\\n(_0 \ +\{\ +\\*(|j +. br +. \} +. el \\*(|j\h'|\\n(_0u'\c +.\} +.rr _0 +.rm |i |j +.. +.de np \" *** numbered paragraph +.\" use string comparison in case user has changed format of $p +.if '\\n($p'-1' \ +. nr $p 0 \" reset number after .bu +.nr $p +1 \" increment paragraph number +.@p \w'\0(000)\0'u +.ti -\w'\0(000)\0'u +\0(\\n($p)\h'|\w'\0(000)\0'u'\c +.. +.de bu \" *** bulleted paragraph +.br +.\" use string comparison in case user has changed format of $p +.if '\\n($p'-1' \ +. ns \" don't space between .bu paragraphs +.nr $p 0-1 \" mark "bulleted paragraph" mode +.@p \w'\0\(bu\0'u +.ti -\w'\0\(bu\0'u +\0\(bu\0\c +.. +.de @p \" --- initialize for paragraph +.if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation +.in \\n($iu+\\n(pou +.if \\n(.$ \ +. in +\\$1n +.ce 0 +.fi +.@F \\n(pf +.sz \\n(pp +.sp \\n(psu +.ne \\n(.Lv+\\n(.Vu +.ns +.. +.\" *** SECTION HEADINGS *** +.de sh \" *** section heading +.fi +.if (\\n(si>0)&(\\n(si<1n) \ +. nr si \\n(sin +.ce 0 +.@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 +.if !"\\$2"_" \ +\{\ +. ds |n \&\\$2 +. $p "\\*(|n" "\\*($n" \\n($0 +. $0 "\\*(|n" "\\*($n" \\n($0 +. rm |n +.\} +.nr $p 0 1 \" reset .np count +.. +.de @d \" --- change section depth +.if !""\\$1" \ +. nr $0 \\$1 +.if \\n($0&(\\n(.$>1) \ +. nr $\\n($0 \\$2 +.ds $n \&\" +.ie \\n($0>=1 \ +\{\ +. if '\\n($1'0' \ +. nr $1 1 +. if (\\n(.$>=3) .if !"\\$3"-" \ +. nr $1 \\$3 +. as $n \\n($1 +.\} +.el \ +. nr $1 0 +.ie \\n($0>=2 \ +\{\ +. if '\\n($2'0' \ +. nr $2 1 +. if (\\n(.$>=4) .if !"\\$4"-" \ +. nr $2 \\$4 +. as $n .\\n($2 +.\} +.el \ +. nr $2 0 +.ie \\n($0>=3 \ +\{\ +. if '\\n($3'0' \ +. nr $3 1 +. if (\\n(.$>=5) .if !"\\$5"-" \ +. nr $3 \\$5 +. as $n .\\n($3 +.\} +.el \ +. nr $3 0 +.ie \\n($0>=4 \ +\{\ +. if '\\n($4'0' \ +. nr $4 1 +. if (\\n(.$>=6) .if !"\\$6"-" \ +. nr $4 \\$6 +. as $n .\\n($4 +.\} +.el \ +. nr $4 0 +.ie \\n($0>=5 \ +\{\ +. if '\\n($5'0' \ +. nr $5 1 +. if (\\n(.$>=7) .if !"\\$7"-" \ +. nr $5 \\$7 +. as $n .\\n($5 +.\} +.el \ +. nr $5 0 +.ie \\n($0>=6 \ +\{\ +. if '\\n($6'0' \ +. nr $6 1 +. if (\\n(.$>=8) .if !"\\$8"-" \ +. nr $6 \\$8 +. as $n .\\n($6 +.\} +.el \ +. nr $6 0 +.. +.de sx \" *** heading up, no increment (2.1.1 -> 2.1) +.ce 0 +.ul 0 +.nr _0 \\n($0-1 +.if \\n(.$ .nr _0 +1 +.if \\n(.$ .nr _0 \\$1 +.@d \\n(_0 +.rr _0 +.$p "" "" \\n($0 +.nr $p 0 1 \" reset .np count +.. +.de uh \" *** unnumbered section heading +.$p "\\$1" +.$0 "\\$1" +.. +.de $p \" $$$ print section heading +.if (\\n(si>0)&(\\n(.$>2) \ +. nr $i \\$3*\\n(si +.in \\n($iu +.ie !"\\$1\\$2"" \ +\{\ +. sp \\n(ssu \" one of them is non-null +. ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u) +. \" exdent if \\$3 > 0 +. ie 0\\$3 \ +. ti -(\\n(siu-\\n(sou) +. el \ +. ti +\\n(sou +. @F \\n(sf +. sz \\n(sp +. if 0\\$3 \ +. $\\$3 +. if \w"\\$2">0 \\$2. +. if \w"\\$1">0 \\$1\f1\ \ \& +.\} +.el \ +. sp \\n(psu +.@F \\n(pf +.sz \\n(pp +.. +.\" *** COLUMNNED OUTPUT *** +.de 2c \" *** double columned output +.br +.if \\n($m>1 \ +. 1c \" revert to 1c if already 2c +.nr $c 1 +.nr $m 2 +.if \\n(.$>1 \ +. nr $m \\$2 +.if \\n(.$>0 \ +. nr $s \\$1n \" param 1: column seperation +.nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m +.xl \\n($lu +.mk _k +.ns +.. +.de 1c \" *** single columned output +.br +.nr $c 1 +.nr $m 1 +.ll \\n(_Lu \" return to normal output +.sp |\\n(.hu +.@O \\n(_ou +.. +.de bc \" *** begin column +.sp 24i +.. +.\" *** FLOATING TABLES AND NONFLOATING BLOCKS *** +.de (z \" *** begin floating keep +.if \n@>4 .tm >> (z, .z=\n(.z +.@D 4 \\$1 \\$2 +.@( +.. +.de )z \" *** end floating keep +.if \n@>4 .tm >> )z, .z=\n(.z +.sp \\n(zsu +.@) +.if \n@>4 .tm -- )z << @), .z=\n(.z +.rr _0 +.if !\\n(?b \ +. nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu +.nr dl -\n(.H \" fudge factor necessary to make it work +.ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \ +\{\ +. nr ?a 1 +. if (\\n(dl>\\n($l)&(\\n($m>1) \ +. nr ?w 1 \" mark wider than one column (top) +. ds |x |t +.\} +.el \ +\{\ +. nr ?b 1 +. if (\\n(dl>\\n($l)&(\\n($m>1) \ +. nr ?W 1 \" mark wider than one column (bottom) +. nr _b +\\n(dnu +. \" avoid moving @f back past the current position +. if \\n(.p-\\n(nl-\n(.V<\\n(_b \ +. nr _b \\n(.p-\\n(nl-\n(.V +. ch @f -\\n(_bu +. ds |x |b +.\} +.da \\*(|x \" copy to save macro +.nf +.ls 1 +.nr ?k 1 +.if \n@>4 .tm -- )z >> \\*(|x +\!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu +.|k\" \" and the body +.ec +.if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z +.nr ?k 0 +.rm |k\" \" remove the temp macro +.da +.in 0 +.ls 1 +.xl \\n($lu +.ev +.if \n@>4 .tm << )z, .z=\\n(.z +.. +.de @k \" --- output floating keep +.if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z +.ev 1 +.nf +.ls 1 +.in 0 +.sp \\n(zsu +.\\$1 +.ec +.br +.rm \\$1 +.ev +.. +.de (t \" XXX temp ref to (z +.(z \\$1 \\$2 +.. +.de )t \" XXX temp ref to )t +.)z \\$1 \\$2 +.. +.de (b \" *** begin block +.br +.@D 3 \\$1 \\$2 +.sp \\n(bsu +.@( +.. +.de )b \" *** end block +.br +.@) +.if (\\n(bt=0):(\\n(.t<\\n(bt) \ +. ne \\n(dnu \" make it all on one page +.ls 1 +.nf +.|k +.ec +.fi +.in 0 +.xl \\n($lu +.ev +.rm |k +.sp \\n(bsu+\\n(.Lv-1v +.. +.de @( \" --- begin keep +.if !"\\n(.z"" .tm Line \\n(c. -- Illegal nested keep \\n(.z +.@M +.di |k +\!'rs +.. +.de @M \" --- set modes for display +.nr ?k 1 +.@C 1 +.@F \\n(df +.if \\n($R .@V +.vs \\n(.sp*\\n($Vu/100u +.nf +.if "\\*(|p"F" \ +. fi \" set fill mode if "F" parameter +.if \\n(_d=4 \ +. in 0 +.if \\n(_d=3 \ +\{\ +. in +\\n(biu +. xl -\\n(biu +.\} +.if \\n(_d=1 \ +. ce 10000 +.. +.de @) \" --- end keep +.br +.if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened +.nr ?k 0 +.di +.in 0 +.ce 0 +.. +.de (c \" *** begin block centered text +.if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests +.di |c +.. +.de )c \" *** end block centered text +.if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c +.br \" force out final line +.di +.if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl +.ev 1 +.ls 1 +.in (\\n(.lu-\\n(.iu-\\n(dlu)/2u +.if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl +.nf +.|c +.ec +.in +.ls +.ev +.rm |c +.. +.\" *** BLOCK QUOTES (OR WHATEVER) AND LISTS *** +.de (q \" *** begin block quote +.br +.@C 1 +.fi +.sp \\n(qsu +.in +\\n(qiu +.xl -\\n(qiu +.sz \\n(qp +.. +.de )q \" *** end block quote +.br +.ev +.sp \\n(qsu+\\n(.Lv-1v +.nr ?k 0 +.. +.de (l \" *** begin list +.br +.sp \\n(bsu +.@D 3 \\$1 \\$2 +.@M +.. +.de )l \" *** end list +.br +.ev +.sp \\n(bsu+\\n(.Lv-1v +.nr ?k 0 +.. +.\" *** PREPROCESSOR SUPPORT *** +.\" +.\" EQN +.\" +.de EQ \" *** equation start +.ec +.if !\\n(?e \ +\{\ +. if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request +. @D 1 "\\$1" "\\$2" +. @C 2 +. di |e +.\} +.ls 1 +.in 0 +.nf +.. +.de EN \" *** equation end +.br +.ie "\\$1"C" \ +\{\ +. nr ?e 1 +. sp \\n(esu +.\} +.el \ +\{\ +. nr ?e 0 +. di +. if \\n(dn \ +. @q \" actual equation output +. rm |e +. ev +.\} +.. +.de @q \" --- equation output +.nr _Q \\n(dnu +.ev +.sp \\n(esu \" output rest of preceeding text +.if !"\\n(.z"" \!.ne \\n(_Qu +.ne \\n(_Qu+\n(.Vu \" keep it on one page +.@C 2 \" .ev 2 may be jumbled from header +.if \\n(_d=1 \ +. in (\\n(.lu+\\n($iu-\\n(dlu)/2u +.if \\n(_d=2 \ +. in \\n($iu +.if \\n(_d=3 \ +. in \\n(biu+\\n($iu +.if \\n(_d=4 \ +. in 0 +.mk _q +.if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p +.if !"\\*(|p"" \ +\{\ +. rs +. sp (\\n(_Qu-\\n(.vu)/2u +. tl """\\*(|p" +. rt \\n(_qu +.\} +.|e +.sp |\\n(_qu+\\n(_Qu +.sp \\n(esu+\\n(.Lv-1v +.rr _q +.rr _Q +.. +.\" +.\" TBL +.\" +.de TS \" *** table start +.sp \\n(bsu +.@C 1 +.fi \" drop into fill mode for text boxes +.if "\\$1"H" \ +\{\ +. di |h \" save header part +. nr ?T 1 +.\} +.ls 1 +.ch @f -(\\n(_bu+1v) \" set pseudo-trap for bottom line +.if \\n(.p-\\n(_b-1v<=\\n(nl \ +. ch @f \\n(nlu+\n(.Vu +.. +.de TH \" *** end header part of table +.nr T. 0 +.T# 0 +.di +.nr _T \\n(?T +.nr ?T 0 +.ne \\n(dnu+1v +.nr ?T \\n(_T +.nr _i \\n(.i +.in 0 +.|h \" put in the initial header +.in \\n(_iu +.rr _i +.mk #T +.. +.de TE \" *** table end +.nr ?T 0 +.ch @f -\\n(_bu \" reset pseudo-trap +.if \\n(.p-\\n(_b<=\\n(nl \ +. ch @f \\n(nlu+\n(.Vu +.ev +.sp \\n(bsu+\\n(.Lv-1v +.re +.. +.\" +.\" REFER +.\" +.de ][ \" *** refer output +.if \\$1>5 .tm Bad arg to [] +.[\\$1 +.. +.de [0 \" --- other +.(f +.ip "\\*([F.\0" +.if !"\\*([A"" \\*([A, +.if !"\\*([T"" \\f2\\*([T\\f1\c +.if !"\\*([T"" .if !"\\*([O"" ,\ +.ie !"\\*([O"" \\*([O +.el .if !"\\*([T"" \&. +.if !"\\*([D"" \\*([D. +.@p +.)f +.. +.de [1 \" --- journal article +.(f +.ip "\\*([F.\0" +\\*([A, +.if !"\\*([T"" \\*(lq\\*([T,\\*(rq +.if "\\*([V"" \\f2\\*([J\\f1, +.if !"\\*([V"" \\f2\\*([J\\f1 +.if !"\\*([V"" \\f3\\*([V\\f1\c +.if !"\\*([N"" (\\*([N)\c +.if !"\\*([P"" \ +\{\ +. ie \\n([P>0 \ pp.\& +. el \ p.\& +\\*([P +.\} +.if !"\\*([I"" .if "\\*([R"" \\*([I, +(\\*([D). +.if !"\\*([O"" \\*([O +.)f +.. +.de [2 \" --- book +.(f +.ip "\\*([F.\0" +\\*([A, \\f2\\*([T,\\f1 +\\*([I\c +.if !"\\*([C"" , \\*([C\c + (\\*([D). +.if !"\\*([G"" Gov't. ordering no. \\*([G +.if !"\\*([O"" \\*([O +.)f +.. +.de [3 \" --- article in book +.(f +.ip "\\*([F.\0" +\\*([A, \\*(lq\\*([T,\\*(rq +.if !"\\*([P"" pp. \\*([P +in \\f2\\*([B\\f1, \c +.if !"\\*([E"" ed. \\*([E, \c +.if !"\\*([I"" \\*([I\c +.if !"\\*([C"" , \\*([C\c + (\\*([D). +.if !"\\*([O"" \\*([O +.)f +.. +.de [4 \" --- report +.(f +.ip "\\*([F.\0" +\\*([A, \\*(lq\\*([T,\\*(rq +\\*([R\c +.if !"\\*([G"" \& (\\*([G)\c +.if !"\\*([I"" , \\*([I\c +.if !"\\*([C"" , \\*([C\c + (\\*([D). +.if !"\\*([O"" \\*([O +.)f +.. +.de [5 \" --- tm style +.(f +.ip "\\*([F.\0" +\\*([A, \\f2\\*([T\\f1, +.ie \\n(TN \\*([M. +.el Bell Laboratories internal memorandum (\\*([D). +.)f +.. +.de ]< +.$p References +.lp +.rm (f )f +.. +.de ]> +.sp +.. +.de ]- +.rm [V [P [A [T [N [C [B [O [R [I [E [D +.. +.ie \n(.V<1v \ +\{\ +. ds [. \s-2\v'-.4m'\f1 +. ds .] \v'.4m'\s+2\fP +.\} +.el \ +\{\ +. ds [. " [ +. ds .] ] +.\} +.\" +.\" IDEAL +.\" +.de IS \" *** start ideal picture +.nr g7 \\n(.u +.ls 1 +.. +.de IF +.if \\n(g7 .fi +.ls +.. +.de IE \" *** end ideal picture +.if \\n(g7 .fi +.ls +.. +.\" +.\" PIC +.\" +.de PS \" *** start picture: $1=height, $2=width in units or inches +.sp 0.3 +.nr g7 \\$2 +.in (\\n(.lu-\\n(g7u)/2u +.ne \\$1u +.nr g7 \\n(.u +.ls 1 +.. +.de PE \" *** end picture +.ls +.in +.if \\n(g7 .fi +.sp .6 +.. +.\" +.\" GREMLIN +.\" +.de GS \" *** start gremlin picture +.nr g7 (\\n(.lu-\\n(g1u)/2u +.if "\\$1"L" .nr g7 \\n(.iu +.if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u +.in \\n(g7u +.nr g7 \\n(.u +.ls 1 +.nf +.ne \\n(g2u +.. +.de GE \" *** end gremlin picture +.GF +.sp .6 +.. +.de GF \" *** finish gremlin picture; stay at top +.ls +.in +.if \\n(g7 .fi +.. +.\" *** FONT AIDS *** +.de sz \" *** set point size and vertical spacing +.ps \\$1 +.if \\n($r .@v +.vs \\n(.sp*\\n($vu/100u \" default vs at pointsize + 20% +.. +.de @v \" --- possibly set $v from $r +.if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p +.. +.de @V \" --- possibly set $V from $R +.if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p +.. +.de @E \" --- store in _F argument to \f for restoring font +.ie \\n(.f<10 \ +. ds _F \\n(.f +.el \ +\{\ +. ie \\n(.f<100&\n(.g \ +. ds _F (\\n(.f +. el \ +. ds _F P +.\} +.. +.de r \" *** enter roman font +.@E +.ft 1 +.if \\n(.$ \&\\$1\f\\*(_F\\$2 +.. +.de i \" *** enter italic +.@E +.ft 2 +.if \\n(.$ \&\\$1\f\\*(_F\\$2 +.. +.de b \" *** enter boldface +.@E +.ft 3 +.if \\n(.$ \&\\$1\f\\*(_F\\$2 +.. +.de rb \" *** enter real boldface +.@E +.ft 3 +.if \\n(.$ \&\\$1\f\\*(_F\\$2 +.. +.de bi \" *** enter bold italic +.@E +.ft 4 +.if \\n(.$ \&\\$1\f\\*(_F\\$2 +.. +.de u \" *** enter underlined word +\&\\$1\l'|0\(ul'\\$2 +.. +.\" a better version of u +.if !\n(.g .ig +.de u +\Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2 +.. +.de q \" *** enter quoted word +\&\\*(lq\\$1\\*(rq\\$2 +.. +.de bx \" *** enter boxed word +\k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2 +.. +.de sm \" *** print in smaller font +\s-1\\$1\\s0\\$2 +.. +.de @F \" --- change font (0 -> no change) +.nr ~ \\$1 +.if \\n~>0 \ +. ft \\n~ +.rr ~ +.. +.\" *** FOOTNOTING *** +.de (f \" *** begin footnote +.ec +.if "\\n(.z"|f" .tm Line \\n(c. -- Illegal footnote nesting +.ie "\\n(.z"" \ +\{\ +. nr _D \\n(dn +. nr _0 1v+\\n(nlu +. ev 2 +. da |f +. in 0 +. xl \\n($lu-\\n(fuu +. @F \\n(ff +. sz \\n(fp +. vs \\n(.sp*\\n($Vu/100u +. if !\\n(?f \ +\{\ +. nr _b +1v \" allow space for $s +. $s +. \} +. br +. if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \ +\{\ +. da\" \" won't fit on page at all +. bc +. if !\\n(?f \ +. rm |f +. da |f +.\" next five lines could be dropped if headers had their own environment +. in 0 \" reset everything from .bc +. xl \\n($lu-\\n(fuu +. @F \\n(ff +. sz \\n(fp +. vs \\n(.sp*\\n($Vu/100u +. if !\\n(?f \ +. $s +. br +. \} +. rr _0 +. sp \\n(fsu +. nr ?f 1 +. fi +. if !"\\$1"_" \ +. ti \\n(fiu +. if \n@>2 .tm << (f $f=\\n($f +.\} +.el \ +\{\ +. ev 2 +. in 0 +. xl \\n($lu-\\n(fuu +. @F \\n(ff +. sz \\n(fp +. vs \\n(.sp*\\n($Vu/100u +. fi +\!.(f \\$1 +\!.@N +.\} +.. +.de @N \" --- set no fill mode in the top-level diversion +.ie "\\n(.z"" .nf +.el \!.@N +.. +.de )f \" *** end footnote +.ie "\\n(.z"|f" \ +\{\ +. if \\n* \ +. nr $f +1 +. ds * \\*{\\n($f\\*}\k* +. nr * 0 +. in 0 +. da +. ev +. if \\n(_w<\\n(dl \ +. nr _w \\n(dl \" compute maximum fn width +. nr _b +\\n(dn +. ch @f -\\n(_bu +. if \\n(.p-\\n(_b<=\\n(nl \ +. ch @f \\n(nlu+\n(.Vu +. nr dn \\n(_D +. rr _D +.\} +.el \ +\{\ +. br +\!.)f +. ev +.\} +.. +.@R ff +.if \n(ff<=0 \ +. nr ff 1 \" footnote font: Times Roman +.@R fp +.if \n(fp<=0 \ +. nr fp 8 \" footnote pointsize +.de $s \" $$$ footnote separator +\l'2i' +.. +.\" *** DELAYED TEXT *** +.de (d \" *** begin delayed text +.am |d )d +.sp \\n(bsu +.. +.de )d \" *** end delayed text +.if \\n# \ +. nr $d +1 +.ds # [\\n($d]\k# +.rr # +.. +.de pd \" *** print delayed text +.|d +.rm |d +.nr $d 1 1 +.ds # [1]\k# +.. +.\" *** INDEXES (TABLE OF CONTENTS) *** +.nr _x 0 1 +.af _x a +.de (x \" *** begin index entry +.if \n@>4 .tm >> (x, .z=\\n(.z +.ds |X x +.if \\n(.$>0 \ +. ds |X \\$1 +.ie "\\n(.z"" \ +. nr _z 0 +.el \ +. nr _z 1 +.@\\n(_z +.. +.de @0 \" --- finish (x if no current diversion +.am %\\*(|X )x +.sp \\n(xsu +.ti -\\n(piu +.. +.de @1 \" --- finish (x if current diversion +.if "\\n(_x"z" .nr _x 0 +.de =\\n+(_x )x +.. +.de )x \" *** end index entry +.if \n@>4 .tm >> )x, .z=\\n(.z +.ie "\\n(.z"" \ +\{\ +. ds |x \\n% +. if \\n(.$>0 \ +. ds |x \\$1 +. if "\\*(|x"_" \ +. ig .. +. am %\\*(|X .. +. if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \ +. ti +\\n(xuu +\\\\a\\\\t\\$2\\*(|x +... +. rm |x +. rm |X +.\} +.el \ +\{\ +\!.(x \\*(|X +\!\\\\*(=\\n(_x\\\\ +\!.)x \\$1 \\$2 +\!.rm =\\n(_x +.\} +.. +.de xp \" *** print the index +.br +.@C 2 +.ls 1 +.vs \\n(.sp*\\n($Vu/100u +.fi +.in +\\n(piu +.ds |X x +.if \\n(.$>0 \ +. ds |X \\$1 +.xl -(\\n(xuu+\w'...'u) +.di |x +.%\\*(|X +.br +.di +.rm %\\*(|X +.xl \\n($lu +.rm |X +.ev +.nf +.in 0 +.ta \\n(.lu-\\n(xuuR \\n(.luR +.|x +.fi +.in +.rm |x +.. +.de +c \" *** begin chapter +.ep \" force out footnotes +.if \\n(?o:\\n(?a \ +\{\ +. bp \" force out a table or more footnote +. rs +. ep +.\} +.nr ?C 1 +.nr $f 1 1 +.ds * \\*{1\\*}\k* +.if \\n(?R \ +. pn 1 +.bp +.in \\n($iu \" reset the indent +.rs +.ie \\n(.$ \ +. $c "\\$1" +.el \ +. sp 3 +.. +.de ++ \" *** declare chapter type +.nr _0 0 +.if "\\$1"C" \ +. nr _0 1 \" chapter +.if "\\$1"RC" \ +. nr _0 11 \" renumbered chapter +.if "\\$1"A" \ +. nr _0 2 \" appendix +.if "\\$1"RA" \ +. nr _0 12 \" renumbered appendix +.if "\\$1"P" \ +. nr _0 3 \" preliminary material +.if "\\$1"B" \ +. nr _0 4 \" bibliographic material +.if "\\$1"AB" \ +. nr _0 5 \" abstract +.if \\n(_0=0 \ +. tm Line \\n(c. -- Bad mode to .++ +.nr ?R 0 +.if \\n(_0>10 \ +.\{ +. nr ?R 1 +. nr _0 -10 +.\} +.nr ch 0 1 +.if (\\n(_0=3):(\\n(_0=5) \ +. pn 1 \" must do before .ep +.if !\\n(_0=\\n(_M .if \\n(_M=3 \ +. pn 1 \" must do before .ep +.ep \" end page for correct page number types +.if \\n(_0=1 \ +\{\ +. af ch 1 +. af % 1 +.\} +.if \\n(_0=2 \ +\{\ +. af ch A +. af % 1 +.\} +.if \\n(_0=3 \ +. af % i +.if \\n(_0=4 \ +. af % 1 +.if \\n(_0=5 \ +. af % 1 +.if \\n(.$>1 \ +. he \\$2 +.nr _M \\n(_0 +.rr _0 +.. +.de $c \" $$$ print chapter title +.sz 12 +.ft 3 +.ce 1000 +.if \\n(_M<3 \ +. nr ch +1 +.ie \\n(_M=1 CHAPTER\ \ \\n(ch +.el .if \\n(_M=2 APPENDIX\ \ \\n(ch +.if \w"\\$1" .sp 3-\\n(.L +.if \w"\\$1" \\$1 +.if (\\n(_M<3):(\w"\\$1") \ +. sp 4-\\n(.L +.ce 0 +.ft +.sz +.ie \\n(_M=1 \ +. $C Chapter \\n(ch "\\$1" +.el .if \\n(_M=2 \ +. $C Appendix \\n(ch "\\$1" +.. +.de tp \" *** title page +.hx +.bp +.br +.rs +.pn \\n% +.. +.\" *** DATES *** +.if \n(mo=1 .ds mo January +.if \n(mo=2 .ds mo February +.if \n(mo=3 .ds mo March +.if \n(mo=4 .ds mo April +.if \n(mo=5 .ds mo May +.if \n(mo=6 .ds mo June +.if \n(mo=7 .ds mo July +.if \n(mo=8 .ds mo August +.if \n(mo=9 .ds mo September +.if \n(mo=10 .ds mo October +.if \n(mo=11 .ds mo November +.if \n(mo=12 .ds mo December +.if \n(dw=1 .ds dw Sunday +.if \n(dw=2 .ds dw Monday +.if \n(dw=3 .ds dw Tuesday +.if \n(dw=4 .ds dw Wednesday +.if \n(dw=5 .ds dw Thursday +.if \n(dw=6 .ds dw Friday +.if \n(dw=7 .ds dw Saturday +.ds td \*(mo \n(dy, 19\n(yr +.\" *** PARAMETRIC INITIALIZATIONS *** +.rr x +.nr $v \n(.v00+\n(.sp-1/\n(.sp \" vs as percentage of ps for .sz request +.nr $V \n($v \" same for displays & footnotes +.nr hm 4v \" header margin +.nr tm 7v \" top margin +.nr bm 6v \" bottom margin +.nr fm 3v \" footer margin +.nr tf 3 \" title font: (real) Times Bold +.nr tp 10 \" title point size +.hy 14 +.nr bi 4m \" indent for blocks +.nr pi 5n \" indent for paragraphs +.nr pf 1 \" normal text font +.nr pp 10 \" normal text point size +.nr qi 4n \" indent for quotes +.nr qp -1 \" down one point +.nr ii 5n \" indent for .ip's and .np's +.nr $m 1 \" max number of columns +.nr $s 4n \" column separation +.nr sf 3 \" section font -- Times Bold +.nr sp 10 \" section title pointsize +.nr ss 12p \" section prespacing +.nr si 0 \" section indent +.\" *** OTHER INITIALIZATION *** +.\" GNU pic sets this register to 1, to indicate that \x should not be used. +.@R 0x +.ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3 +.ds } \s0\v'0.4m' +.\" for compatibility with traditional -me +.\" (the first will work only in compatibility mode) +.ds [ \*{ +.ds ] \*} +.ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3 +.ds > \s0\v'-0.4m' +.ds - \(em +.\" Avoid warnings from groff -ww. +.@S |0 +.@S |1 +.@S |2 +.@S |3 +.@S $H +.@S $0 +.@S $1 +.@S $2 +.@S $3 +.@S $4 +.@S $5 +.@S $6 +.@S $7 +.@S $8 +.@S $9 +.@S .. +.@R po\" \" simulated page offset +.@R $0\" \" section depth +.@R $i\" \" paragraph base indent +.@R $p\" \" numbered paragraph number +.@R $r\" \" ratio of vs to ps (may override $v) +.@R $R\" \" same for displays (may override $V) +.@R df\" \" display font: same as surrounding text +.@R so\" \" additional section title offset +.@R fu\" \" footnote undent +.@R bt\" \" block keep threshold +.@R *\" \" has \** been referenced? +.@R ?a\" \" pending floating keep at page top? +.@R ?b\" \" pending floating keep at page bottom? +.@R ?C\" \" at chapter header? +.@R ?e\" \" in equation? +.@R ?H\" \" suppress headers and footers next page? +.@R ?I\" \" has the header trap been sprung? +.@R ?n\" \" n1 mode? +.@R ?o\" \" footnote overflow? +.@R ?R\" \" renumbered chapter? +.@R ?s\" \" skip next page? +.@R ?T\" \" inside .TS H? +.@R ?W\" \" wide floating keep at page bottom? +.@R ?w\" \" wide floating keep at page top? +.nr fi 0.3i +.nr _o \n(.o +.nr $b 3 \" bold +.nr ps 0.35v +.if \n(ps<\n(.V .nr ps \n(.V +.nr bs \n(ps \" block pre/post spacing +.nr qs \n(ps \" quote pre/post spacing +.nr zs 1v \" float-block pre/postspacing +.nr xs 0.2v \" index prespacing +.nr xu 0.5i \" index undent +.nr fs 0.2v \" footnote prespacing +.nr es 0.5v \" equation pre/postspacing +.if \n(es<\n(.V .nr es \n(.V +.wh 0 @h \" set header +.nr $l \n(.lu \" line length +.nr _L \n(.lu \" line length of page +.nr $c 1 \" current column number +.nr $f 1 1 \" footnote number +.ds * \*{1\*}\k*\" \" footnote "name" +.nr $d 1 1 \" delayed text number +.ds # [1]\k#\" \" delayed text "name" +.nr _M 1 \" chapter mode is chapter +.ds lq \(lq\" \" left quote +.ds rq \(rq\" \" right quote +.em @z +.\" *** FOREIGN LETTERS AND SPECIAL CHARACTERS *** +.ds #h ((1u-(\\\\n(.fu%2u))*0.13m) +.ds #v 0.6m +.\" \" accents +.ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u' +.ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u' +.\" \" umlaut +.ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v' +.\" \" circumflex and tilde +.ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u' +.ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u' +.\" \" cedilla and czech +.ds , \k_\h'-(\\n(.wu)',\h'|\\n_u' +.ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u' +.\" \" Norwegian A or angstrom +.ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u' +.\" \" there exists, for all +.ds qe \s-2\v'0.45m'\z\(em\v'-0.625m'\z\(em\v'-0.625m'\(em\v'0.8m'\s0\h'-0.1m'\v'-0.05m'\(br\v'0.05m'\h'0.1m' +.ds qa \z\e\h'0.35m'\z\(sl\h'-0.33m'\v'-0.3m'\s-4\(em\s0\v'0.3m'\h'0.15m' +.rm #h #v +.ll 6.0i +.lt 6.0i +.de @U +.tm The \\$1 macro has been removed from this version of the -me macros. +.. +.de lo +.@U lo +.. +.de th +.@U th +.. +.de ac +.@U ac +.. diff --git a/contrib/groff/tmac/tmac.latin1 b/contrib/groff/tmac/tmac.latin1 new file mode 100644 index 0000000..f33ea21 --- /dev/null +++ b/contrib/groff/tmac/tmac.latin1 @@ -0,0 +1,101 @@ +.nr _C \n(.C +.cp 0 +.de latin1-tr +.if c\\$2 .if !c\\$1 .tr \\$1\\$2 +.. +.latin1-tr \[char161] \(r! +.latin1-tr \[char162] \(ct +.latin1-tr \[char163] \(Po +.latin1-tr \[char164] \(Cs +.latin1-tr \[char165] \(Ye +.latin1-tr \[char166] \(bb +.latin1-tr \[char167] \(sc +.latin1-tr \[char168] \(ad +.latin1-tr \[char169] \(co +.latin1-tr \[char170] \(Of +.latin1-tr \[char171] \(Fo +.latin1-tr \[char172] \(no +.latin1-tr \[char173] \(hy +.latin1-tr \[char174] \(rg +.latin1-tr \[char175] \(a- +.latin1-tr \[char176] \(de +.latin1-tr \[char177] \(+- +.latin1-tr \[char178] \(S2 +.latin1-tr \[char179] \(S3 +.latin1-tr \[char180] \(aa +.latin1-tr \[char181] \(*m +.latin1-tr \[char182] \(ps +.latin1-tr \[char183] \(md +.latin1-tr \[char184] \(ac +.latin1-tr \[char185] \(S1 +.latin1-tr \[char186] \(Om +.latin1-tr \[char187] \(Fc +.latin1-tr \[char188] \(14 +.latin1-tr \[char189] \(12 +.latin1-tr \[char190] \(34 +.latin1-tr \[char191] \(r? +.latin1-tr \[char192] \(`A +.latin1-tr \[char193] \('A +.latin1-tr \[char194] \(^A +.latin1-tr \[char195] \(~A +.latin1-tr \[char196] \(:A +.latin1-tr \[char197] \(oA +.latin1-tr \[char198] \(AE +.latin1-tr \[char199] \(,C +.latin1-tr \[char200] \(`E +.latin1-tr \[char201] \('E +.latin1-tr \[char202] \(^E +.latin1-tr \[char203] \(:E +.latin1-tr \[char204] \(`I +.latin1-tr \[char205] \('I +.latin1-tr \[char206] \(^I +.latin1-tr \[char207] \(:I +.latin1-tr \[char208] \(-D +.latin1-tr \[char209] \(~N +.latin1-tr \[char210] \(`O +.latin1-tr \[char211] \('O +.latin1-tr \[char212] \(^O +.latin1-tr \[char213] \(~O +.latin1-tr \[char214] \(:O +.latin1-tr \[char215] \(mu +.latin1-tr \[char216] \(/O +.latin1-tr \[char217] \(`U +.latin1-tr \[char218] \('U +.latin1-tr \[char219] \(^U +.latin1-tr \[char220] \(:U +.latin1-tr \[char221] \('Y +.latin1-tr \[char222] \(TP +.latin1-tr \[char223] \(ss +.latin1-tr \[char224] \(`a +.latin1-tr \[char225] \('a +.latin1-tr \[char226] \(^a +.latin1-tr \[char227] \(~a +.latin1-tr \[char228] \(:a +.latin1-tr \[char229] \(oa +.latin1-tr \[char230] \(ae +.latin1-tr \[char231] \(,c +.latin1-tr \[char232] \(`e +.latin1-tr \[char233] \('e +.latin1-tr \[char234] \(^e +.latin1-tr \[char235] \(:e +.latin1-tr \[char236] \(`i +.latin1-tr \[char237] \('i +.latin1-tr \[char238] \(^i +.latin1-tr \[char239] \(:i +.latin1-tr \[char240] \(Sd +.latin1-tr \[char241] \(~n +.latin1-tr \[char242] \(`o +.latin1-tr \[char243] \('o +.latin1-tr \[char244] \(^o +.latin1-tr \[char245] \(~o +.latin1-tr \[char246] \(:o +.latin1-tr \[char247] \(di +.latin1-tr \[char248] \(/o +.latin1-tr \[char249] \(`u +.latin1-tr \[char250] \('u +.latin1-tr \[char251] \(^u +.latin1-tr \[char252] \(:u +.latin1-tr \[char253] \('y +.latin1-tr \[char254] \(Tp +.latin1-tr \[char255] \(:y +.cp \n(_C diff --git a/contrib/groff/tmac/tmac.lj4 b/contrib/groff/tmac/tmac.lj4 new file mode 100644 index 0000000..658b9a7 --- /dev/null +++ b/contrib/groff/tmac/tmac.lj4 @@ -0,0 +1,18 @@ +.nr _C \n(.C +.cp 0 +.ftr CW CR +.ftr C CR +.ftr CX CBI +.ftr H UR +.ftr HR UR +.ftr HB UB +.ftr HBI UBI +.ftr HI UI +.ftr HO UI +.ftr HX UBI +.\" This is designed so that \(ul, \(rn and \(br form corners. +.if !c\[br] .char \[br] \Z'\v'.25m'\D'R .04m -1m'' +.if !c\[ru] .char \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m' +.if !c\[rn] .char \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m' +.if !c\[ul] .char \[ul] \Z'\v'.23m'\D'R .54m .04m''\h'.5m' +.cp \n(_C diff --git a/contrib/groff/tmac/tmac.pic b/contrib/groff/tmac/tmac.pic new file mode 100644 index 0000000..1177fc0 --- /dev/null +++ b/contrib/groff/tmac/tmac.pic @@ -0,0 +1,10 @@ +.de PS +.br +.sp .3v +.ne 0\\$1+1v+\n(.Vu +.in \\n(.lu-\\n(.iu-0\\$2/2u>?0 +.. +.de PE +.in +.sp .3v+.5m +.. diff --git a/contrib/groff/tmac/tmac.ps b/contrib/groff/tmac/tmac.ps new file mode 100644 index 0000000..4d954f4 --- /dev/null +++ b/contrib/groff/tmac/tmac.ps @@ -0,0 +1,53 @@ +.nr _C \n(.C +.cp 0 +.ftr AX ABI +.ftr KR BMR +.ftr KI BMI +.ftr KB BMB +.ftr KX BMBI +.ftr CW CR +.ftr CO CI +.ftr CX CBI +.ftr H HR +.ftr HO HI +.ftr HX HBI +.ftr Hr HNR +.ftr Hi HNI +.ftr Hb HNB +.ftr Hx HNBI +.ftr NX NBI +.ftr PA PR +.ftr PX PBI +.ftr ZI ZCMI +.ftr C CR +.cflags 8 \(an +.char \[radicalex] \h'-\w'\(sr'u'\[radicalex]\h'\w'\(sr'u' +.char \(mo \h'.08m'\(mo\h'-.08m' +.char \(nm \h'.08m'\(nm\h'-.08m' +.char \[parenlefttp] \[parenlefttp]\h'.016m' +.char \[parenleftbt] \[parenleftbt]\h'.016m' +.char \[parenleftex] \[parenleftex]\h'.016m' +.char \[parenrighttp] \[parenrighttp]\h'.016m' +.char \[parenrightbt] \[parenrightbt]\h'.016m' +.char \[parenrightex] \[parenrightex]\h'.016m' +.if !c\[va] .char \[va] \o'\[ua]\[da]' +.if !c\[ci] \ +.char \[ci] \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m' +.if !c\[sq] \ +.char \[sq] \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m' +.if !c\[ru] .char \[ru] \D'l .5m 0' +.if !c\[ul] .char \[ul] \v'.25m'\D'l .5m 0'\v'-.25m' +.if !c\[br] .char \[br] \Z'\v'.25m'\D'l 0 -1m'' +.if !c\[rn] .char \[rn] \v'-.75m'\D'l .5m 0'\v'.75m' +.if !c\[or] .char \[or] \h'.1m'\Z'\D'l 0 -.675m''\h'.1m' +.if !c\[Fi] .char \[Fi] ffi +.if !c\[Fl] .char \[Fl] ffl +.if !c\[ff] .char \[ff] ff +.if !c\[ij] .char \[ij] ij +.if !c\[IJ] .char \[IJ] IJ +.if !c\[tm] .char \[tm] \s-3\v'-.3m'TM\v'+.3m'\s+3 +.\" pic tests this register to see whether it should use \X'ps:...' +.nr 0p 1 +.cp \n(_C +.if !\n(.C .mso tmac.pspic +.do mso tmac.psold diff --git a/contrib/groff/tmac/tmac.psatk b/contrib/groff/tmac/tmac.psatk new file mode 100644 index 0000000..b59d23a --- /dev/null +++ b/contrib/groff/tmac/tmac.psatk @@ -0,0 +1,61 @@ +.\" Implementation of the ATK PB and PE macros for use with groff and grops. +.\" Load this after tmac.atk. +.nr zT 0 +.if '\*(.T'ps' .nr zT 1 +.nr psatk-unit 1p +.de psatk-defs +ps: mdef 5 +/PB { + /saved save def + currentpoint translate + \n[psatk-unit] u -\n[psatk-unit] u scale + userdict begin + /showpage {} def +} bind def +/PE { + end + saved restore +} bind def +/troffadjust { + pop 0 +} bind def +.. +.de PB +.ne \\$1p +.nr zT \\n(zT>0 +\\*[PB\\n(zT]\\ +.. +.de PE +\\*[PE\\n(zT]\\ +.. +.ds PB0 +.\" The last line before the "'PE" is "\}" rather than ".\}". This +.\" would cause a spurious space to be introduced before any picture +.\" that was the first thing on a line. So we have to catch that and +.\" remove it. +.de PB1 +.ev psatk +.fi +.di psatk-mac +\!ps: exec PB +.. +.de PE0 +\v'-.75m'\ +\D'l \\$1p 0'\D'l 0 \\$2p'\D'l -\\$1p 0'\D'l 0 -\\$2p'\ +\h'\\$1p'\v'.75m'\x'\\$2p-1m>?0'\c +.. +.ds psatk-init \Y[psatk-defs] +.de PE1 +\!PE +.di +.di null +.br +.di +.rm null +.ev +\v'-.75m'\ +\\*[psatk-init]\Y[psatk-mac]\ +\h'\\$1p'\v'.75m'\x'\\$2p-1m>?0'\c +.rm psatk-mac +.if \\n(.P .ds psatk-init +.. diff --git a/contrib/groff/tmac/tmac.psfig b/contrib/groff/tmac/tmac.psfig new file mode 100644 index 0000000..5f4111c --- /dev/null +++ b/contrib/groff/tmac/tmac.psfig @@ -0,0 +1,87 @@ +.\" These are macros to make psfig work with groff. +.\" They require that psfig be patched as described in ../grops/psfig.diff. +.de psfig-defs +ps: mdef 100 + +% wid ht llx lly urx ury psfigstart - + +/psfigstart { + /level1 save def + /ury exch def + /urx exch def + /lly exch def + /llx exch def + /ht exch u def + /wid exch u def + currentpoint ht add translate + wid urx llx sub div ht ury lly sub div neg scale + llx neg lly neg translate + + % set the graphics state to default values + 0 setgray + 0 setlinecap + 1 setlinewidth + 0 setlinejoin + 10 setmiterlimit + [] 0 setdash + newpath + /showpage {} def +} bind def + +% psfigclip - + +/psfigclip { + currentpoint newpath + llx lly moveto + urx lly lineto + urx ury lineto + llx ury lineto + closepath clip + newpath moveto +} bind def + +% psfigend - + +/psfigend { + level1 restore +} bind def + +% globalstart - + +/globalstart { + % save the current space code on the stack + SC + level0 restore +} bind def + +% globalend - + +/globalend { + end + BP + /SC exch def + DEFS begin +} bind def +.. +.de psfig-init +.if \\n[.P] \{\ +\Y[psfig-defs] +. br +. sp -1 +. ds psfig-init\" empty +. rm psfig-defs +.\} +.. +.de F+ +.br +.psfig-init +.nr psfig-fill \\n[.u] +.nf +.sp -.5 +.if !\\n[.$] .ce 9999 +.. +.de F- +.br +.ce 0 +.if \\n[psfig-fill] .fi +.. diff --git a/contrib/groff/tmac/tmac.psnew b/contrib/groff/tmac/tmac.psnew new file mode 100644 index 0000000..e13bdb8 --- /dev/null +++ b/contrib/groff/tmac/tmac.psnew @@ -0,0 +1,26 @@ +.\" Undo the effect of tmac.psold. This gives access to the additional +.\" characters that are present in the text fonts of newer PostScript +.\" printers. It is a bad idea to use this if you are going to +.\" distribute the resulting PostScript output to others. +.nr _C \n(.C +.cp 0 +.rchar \('y\('Y\(12\(14\(34\(S1\(S2\(S3\(bb\(de\(Tp\(TP\(-D\(Sd +.tr \[char166]\[char166] +.tr \[char176]\[char176] +.tr \[char177]\[char177] +.tr \[char178]\[char178] +.tr \[char179]\[char179] +.tr \[char181]\[char181] +.tr \[char185]\[char185] +.tr \[char188]\[char188] +.tr \[char189]\[char189] +.tr \[char190]\[char190] +.tr \[char208]\[char208] +.tr \[char215]\[char215] +.tr \[char221]\[char221] +.tr \[char222]\[char222] +.tr \[char240]\[char240] +.tr \[char247]\[char247] +.tr \[char253]\[char253] +.tr \[char254]\[char254] +.cp \n(_C diff --git a/contrib/groff/tmac/tmac.psold b/contrib/groff/tmac/tmac.psold new file mode 100644 index 0000000..04a5f6d --- /dev/null +++ b/contrib/groff/tmac/tmac.psold @@ -0,0 +1,60 @@ +.\" In the newer PostScript printers, the text fonts contain all ISO Latin-1 +.\" characters. The font description files that comes with groff match +.\" these fonts. The text fonts in older PostScript printers are missing +.\" some of these characters. This file prevents those characters from +.\" being used. This will allow the PostScript output to be printed on both +.\" old and new printers. The effect of this file can be undone by +.\" tmac.psnew. +.nr _C \n(.C +.cp 0 +.\" Define an accented character. +.de ps-achar +.\" Note that character definitions are always interpreted with +.\" compatibility mode off. +.char \\$1 \\$3\ +\k[acc]\ +\h'(u;-\w'\\$2'-\w'\\$3'/2+\\\\n[skw]+(\w'x'*0)-\\\\n[skw])'\ +\v'(u;\w'x'*0+\\\\n[rst]+(\w'\\$3'*0)-\\\\n[rst])'\ +\\$2\ +\v'(u;\w'x'*0-\\\\n[rst]+(\w'\\$3'*0)+\\\\n[rst])'\ +\h'|\\\\n[acc]u' +.ie '\\$3'\(.i' .hcode \\$1i +.el .hcode \\$1\\$3 +.. +.ps-achar \['y] \(aa y +.ps-achar \['Y] \(aa Y +.char \[12] \v'-.7m\s[\\n(.s*6u/10u]+.7m'1\v'-.7m\s0+.7m'\ +\(f/\s[\\n(.s*6u/10u]2\s0 +.char \[14] \v'-.7m\s[\\n(.s*6u/10u]+.7m'1\v'-.7m\s0+.7m'\ +\(f/\s[\\n(.s*6u/10u]4\s0 +.char \[34] \v'-.7m\s[\\n(.s*6u/10u]+.7m'3\v'-.7m\s0+.7m'\ +\(f/\s[\\n(.s*6u/10u]4\s0 +.char \[S1] \v'-.2m'\s-31\s+3\v'+.2m' +.char \[S2] \v'-.2m'\s-32\s+3\v'+.2m' +.char \[S3] \v'-.2m'\s-33\s+3\v'+.2m' +.char \[bb] | +.char \[de] \fS\(de +.char \[-D] \Z'\v'-.1m'-'D +.char \[TP] \ +I\h'-.25m'\v'-.33m'\s'\En(.s*6u/10u'\v'.33m'D\v'-.33m'\s0\v'.33m' +.char \[Sd] \Z'\v'-.3m'\h'.2m'-'\(pd +.char \[Tp] \zlp +.tr \[char166]\[bb] +.tr \[char176]\[de] +.tr \[char177]\[+-] +.tr \[char178]\[S2] +.tr \[char179]\[S3] +.tr \[char181]\[*m] +.tr \[char185]\[S1] +.tr \[char188]\[14] +.tr \[char189]\[12] +.tr \[char190]\[34] +.tr \[char208]\[-D] +.tr \[char215]\[mu] +.tr \[char221]\['Y] +.tr \[char222]\[TP] +.tr \[char240]\[Sd] +.tr \[char247]\[di] +.tr \[char253]\['y] +.tr \[char254]\[Tp] +.cp \n(_C diff --git a/contrib/groff/tmac/tmac.pspic b/contrib/groff/tmac/tmac.pspic new file mode 100644 index 0000000..b47e4fa --- /dev/null +++ b/contrib/groff/tmac/tmac.pspic @@ -0,0 +1,61 @@ +.\" Define the PSPIC macro. +.\" When used other than with -Tps, it will draw a box around where +.\" the picture would go. +.de ps-bb +.nr ps-nargs \\n[.$] +.if \\n[ps-nargs]=4 \{\ +. nr ps-llx 0\\$1 +. nr ps-lly 0\\$2 +. nr ps-urx 0\\$3 +. nr ps-ury 0\\$4 +.\} +.. +.de PSPIC +.nr ps-offset-mode 0 +.if '\\$1'-L' \{\ +. nr ps-offset-mode 1 +. shift +.\} +.if '\\$1'-R' \{\ +. nr ps-offset-mode 2 +. shift +.\} +.if '\\$1'-I' \{\ +. nr ps-offset-mode 3 +. nr ps-offset (m;\\$2) +. shift 2 +.\} +.br +.sy echo .ps-bb `psbb \\$1` >/tmp/psbb\\n[$$] +.so /tmp/psbb\\n[$$] +.sy rm /tmp/psbb\\n[$$] +.if \\n[ps-nargs]=4 \{\ +. nr ps-wid (\\n[ps-urx]-\\n[ps-llx]) +. nr ps-ht (\\n[ps-ury]-\\n[ps-lly]) +. if \\n[ps-wid]<0 .nr ps-wid 0-\\n[ps-wid] +. if \\n[ps-ht]<0 .nr ps-ht 0-\\n[ps-ht] +. ie \\n[.$]>=2 .nr ps-deswid (i;\\$2) +. el .nr ps-deswid \\n[.l]-\\n[.i]<?\\n[ps-wid]p +. nr ps-desht \\n[ps-deswid]*1000+(\\n[ps-wid]/2)/\\n[ps-wid]\ +*\\n[ps-ht]+500/1000 +. if \\n[.$]>=3&(\\n[ps-desht]>(i;0\\$3)) \{\ +. nr ps-desht (i;\\$3) +. nr ps-deswid \\n[ps-desht]*1000+(\\n[ps-ht]/2)/\\n[ps-ht]\ +*\\n[ps-wid]+500/1000 +. \} +. ne \\n[ps-desht]u+1v +. if \\n[ps-offset-mode]=0 .nr ps-offset \\n[.l]-\\n[.i]-\\n[ps-deswid]/2 +. if \\n[ps-offset-mode]=1 .nr ps-offset 0 +. if \\n[ps-offset-mode]=2 .nr ps-offset \\n[.l]-\\n[.i]-\\n[ps-deswid] +. ie \\n[.$]>=3 .ds ps-desht \\n[ps-desht] +. el .ds ps-desht \" empty +\h'\\n[ps-offset]u'\ +\X'ps: invis'\ +\Z'\D'p 0 \\n[ps-desht]u \\n[ps-deswid]u 0 0 -\\n[ps-desht]u''\ +\X'ps: endinvis'\ +\v'\\n[ps-desht]u'\X'ps: import \\$1 \ +\\n[ps-llx] \\n[ps-lly] \\n[ps-urx] \\n[ps-ury] \\n[ps-deswid] \\*[ps-desht]' +. br +. sp \\n[ps-desht]u +.\} +.. diff --git a/contrib/groff/tmac/tmac.s b/contrib/groff/tmac/tmac.s new file mode 100644 index 0000000..547f862 --- /dev/null +++ b/contrib/groff/tmac/tmac.s @@ -0,0 +1,1870 @@ +.\" -*- nroff -*- +.ig +Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +.. +.if !\n(.g .ab These ms macros require groff. +.if \n(.C \ +. ab The groff ms macros do not work in compatibility mode. +.\" Enable warnings. You can delete this if you want. +.warn +.\" See if already loaded. +.if r GS .nx +.nr GS 1 +.de @error +.tm \\n(.F:\\n(.c: macro error: \\$* +.. +.de @warning +.tm \\n(.F:\\n(.c: macro warning: \\$* +.. +.de @fatal +.ab \\n(.F:\\n(.c: fatal macro error: \\$* +.. +.de @not-implemented +.@error sorry, \\$0 not implemented +.als \\$0 @nop +.. +.als TM @not-implemented +.als CT @not-implemented +.de @nop +.. +.de @init +.nr PO \\n(.o +.\" a non-empty environment +.ev ne +\c +.ev +.ev nf +'nf +.ev +.. +.ds REFERENCES References +.ds ABSTRACT ABSTRACT +.ds TOC Table of Contents +.ds MONTH1 January +.ds MONTH2 February +.ds MONTH3 March +.ds MONTH4 April +.ds MONTH5 May +.ds MONTH6 June +.ds MONTH7 July +.ds MONTH8 August +.ds MONTH9 September +.ds MONTH10 October +.ds MONTH11 November +.ds MONTH12 December +.ds MO \\*[MONTH\n[mo]] +.nr *year \n[yr]+1900 +.ds DY \n[dy] \*[MO] \n[*year] +.de ND +.if \\n[.$] .ds DY "\\$* +.. +.de DA +.if \\n[.$] .ds DY "\\$* +.ds CF \\*[DY] +.. +.\" indexing +.de IX +.tm \\$1\t\\$2\t\\$3\t\\$4 ... \\n[PN] +.. +.\" print an error message and then try to recover +.de @error-recover +.@error \\$@ (recovering) +.nr *pop-count 0 +.while !'\\n(.z'' \{\ +. \"@warning automatically terminating diversion \\n(.z +. ie d @div-end!\\n(.z .@div-end!\\n(.z +. el .*div-end-default +. nr *pop-count +1 +. \" ensure that we don't loop forever +. if \\n[*pop-count]>20 .@fatal recovery failed +.\} +.while !'\\n[.ev]'0' .ev +.par@reset-env +.par@reset +.. +.de *div-end-default +.ds *last-div \\n(.z +.br +.di +.ev nf +.\\*[*last-div] +.ev +.. +.\" **************************** +.\" ******** module cov ******** +.\" **************************** +.\" Cover sheet and first page. +.de cov*err-not-after-first-page +.@error \\$0 is not allowed after the first page has started +.. +.de cov*err-not-before-tl +.@error \\$0 is not allowed before TL +.. +.de cov*err-not-again +.@error \\$0 is not allowed more than once +.. +.de cov*err-not-after-ab +.@error \\$0 is not allowed after first AB, LP, PP, IP, SH or NH +.. +.als AU cov*err-not-before-tl +.als AI cov*err-not-before-tl +.als AB cov*err-not-before-tl +.de cov*first-page-init +.rm cov*first-page-init +.par@init +.als RP cov*err-not-after-first-page +.@init +.ie \\n[cov*rp-format] \{\ +. pg@cs-top +. als FS cov*FS +. als FE cov*FE +.\} +.el \{\ +. pg@top +. als FS @FS +. als FE @FE +.\} +.wh 0 pg@top +.. +.wh 0 cov*first-page-init +.\" This handles the case where FS occurs before TL or LP. +.de FS +.br +\\*[FS]\\ +.. +.nr cov*rp-format 0 +.nr cov*rp-no 0 +.\" released paper format +.de RP +.nr cov*rp-format 1 +.if \\n[.$] .if '\\$1'no' .nr cov*rp-no 1 +.pn 0 +.. +.de TL +.br +.als TL cov*err-not-again +.rn @AB AB +.rn @AU AU +.rn @AI AI +.di cov*tl-div +.par@reset +.ft B +.ps +2 +.vs +3p +.ll (u;\\n[LL]*5/6) +.nr cov*n-au 0 +.. +.de @AU +.par@reset +.if !'\\n(.z'' \{\ +. br +. di +.\} +.nr cov*n-au +1 +.di cov*au-div!\\n[cov*n-au] +.nf +.ft I +.ps \\n[PS] +.. +.de @AI +.par@reset +.if !'\\n(.z'' \{\ +. br +. di +.\} +.ie !\\n[cov*n-au] .@error AI before AU +.el \{\ +. di cov*ai-div!\\n[cov*n-au] +. nf +. ft R +. ps \\n[PS] +.\} +.. +.de LP +.if !'\\n[.z]'' \{\ +. br +. di +.\} +.br +.cov*ab-init +.cov*print +\\*[\\$0]\\ +.. +.als IP LP +.als PP LP +.als XP LP +.als QP LP +.als RS LP +.als NH LP +.als SH LP +.als MC LP +.als RT LP +.als XS LP +.de cov*ab-init +.als cov*ab-init @nop +.als LP @LP +.als IP @IP +.als PP @PP +.als XP @XP +.als RT @RT +.als XS @XS +.als SH @SH +.als NH @NH +.als QP @QP +.als RS @RS +.als RE @RE +.als QS @QS +.als QE @QE +.als MC @MC +.als EQ @EQ +.als EN @EN +.als TS @TS +.als AB cov*err-not-after-ab +.als AU par@AU +.als AI par@AI +.als TL par@TL +.. +.de @AB +.if !'\\n(.z'' \{\ +. br +. di +.\} +.cov*ab-init +.di cov*ab-div +.par@ab-indent +.par@reset +.if !'\\$1'no' \{\ +. ft I +. ce 1 +\\*[ABSTRACT] +. sp +. ft R +.\} +.ns +.@PP +.. +.de AE +.ie '\\n(.z'cov*ab-div' \{\ +. als AE cov*err-not-again +. br +. di +.\" nr cov*ab-height \\n[dn] +. par@reset-env +. par@reset +. cov*print +.\} +.el .@error AE without AB +.. +.de @div-end!cov*ab-div +.AE +.. +.de cov*print +.als cov*print @nop +.ie d cov*tl-div \{\ +. ie \\n[cov*rp-format] .cov*rp-print +. el .cov*draft-print +.\} +.el \{\ +. if \\n[cov*rp-format] \{\ +. @warning RP format but no TL +. bp 1 +. als FS @FS +. als FE @FE +. \} +. br +.\} +.. +.de cov*rp-print +.nr cov*page-length \\n[.p] +.pl 1000i +.cov*tl-au-print +.sp 3 +.if d cov*ab-div \{\ +. nf +. cov*ab-div +.\} +.sp 3 +.par@reset +\\*[DY] +.br +.if \\n[cov*fn-height] \{\ +. sp |(u;\\n[cov*page-length]-\\n[FM]\ +-\\n[cov*fn-height]-\\n[fn@sep-dist]>?\\n[nl]) +. fn@print-sep +. ev nf +. cov*fn-div +. ev +. ie \\n[cov*rp-no] .rm cov*fn-div +. el \{\ +. rn cov*fn-div fn@overflow-div +. nr fn@have-overflow 1 +. \} +.\} +.als FS @FS +.als FE @FE +.\" If anything was printed below where the footer line is normally printed, +.\" then that's an overflow. +.if -\\n[FM]/2+1v+\\n[cov*page-length]<\\n[nl] .@error cover sheet overflow +.pl \\n[cov*page-length]u +.bp 1 +.if !\\n[cov*rp-no] .cov*tl-au-print +.rs +.sp 1 +.. +.de cov*draft-print +.cov*tl-au-print +.if d cov*ab-div \{\ +. nf +. sp 2 +. cov*ab-div +.\} +.sp 1 +.. +.de cov*tl-au-print +.par@reset +.nf +.rs +.sp 3 +.ce 9999 +.cov*tl-div +.nr cov*i 1 +.nr cov*sp 1v +.while \\n[cov*i]<=\\n[cov*n-au] \{\ +. sp \\n[cov*sp]u +. cov*au-div!\\n[cov*i] +. ie d cov*ai-div!\\n[cov*i] \{\ +. sp .5v +. cov*ai-div!\\n[cov*i] +. nr cov*sp 1v +. \} +. el .nr cov*sp .5v +. nr cov*i +1 +.\} +.ce 0 +.. +.nr cov*fn-height 0 +.nr cov*in-fn 0 +.\" start of footnote on cover +.de cov*FS +.if \\n[cov*in-fn] \{\ +. @error nested FS +. FE +.\} +.nr cov*in-fn 1 +.ev fn +.par@reset-env +.da cov*fn-div +.if !\\n[cov*fn-height] .ns +.ie \\n[.$] .FP "\\$1" no +.el .@LP +.. +.de @div-end!cov*fn-div +.cov*FE +.. +.\" end of footnote on cover +.de cov*FE +.ie '\\n(.z'cov*fn-div' \{\ +. br +. ev +. di +. nr cov*in-fn 0 +. nr cov*fn-height +\\n[dn] +.\} +.el .@error FE without matching FS +.. +.\" *************************** +.\" ******** module pg ******** +.\" *************************** +.\" Page-level formatting. +.\" > 0 if we have a footnote on the current page +.nr pg@fn-flag 0 +.nr pg@colw 0 +.nr pg@fn-colw 0 +.nr HM 1i +.nr FM 1i +.ds LF +.ds CF +.ds RF +.ds LH +.ds CH -\\n[PN]- +.ds RH +.ds pg*OH '\\*[LH]'\\*[CH]'\\*[RH]' +.ds pg*EH '\\*[LH]'\\*[CH]'\\*[RH]' +.ds pg*OF '\\*[LF]'\\*[CF]'\\*[RF]' +.ds pg*EF '\\*[LF]'\\*[CF]'\\*[RF]' +.de OH +.ds pg*\\$0 "\\$* +.. +.als EH OH +.als OF OH +.als EF OH +.de PT +.ie \\n%=1 .if \\n[pg*P1] .tl \\*[pg*OH] +.el \{\ +. ie o .tl \\*[pg*OH] +. el .tl \\*[pg*EH] +.\} +.. +.de BT +.ie o .tl \\*[pg*OF] +.el .tl \\*[pg*EF] +.. +.nr pg*P1 0 +.de P1 +.nr pg*P1 1 +.. +.wh -\n[FM]u pg@bottom +.wh -\n[FM]u/2u pg*footer +.nr MINGW 2n +.nr pg@ncols 1 +.de @MC +.if !'\\n(.z'' .error-recover MC while diversion open +.br +.ie \\n[pg@ncols]>1 .pg@super-eject +.el \{\ +. \" flush out any floating keeps +. while \\n[kp@tail]>\\n[kp@head] \{\ +. rs +. bp +. \} +.\} +.ie !\\n(.$ \{\ +. nr pg@colw \\n[LL]*7/15 +. nr pg*gutw \\n[LL]-(2*\\n[pg@colw]) +. nr pg@ncols 2 +.\} +.el \{\ +. nr pg@colw (n;\\$1)<?\\n[LL] +. ie \\n[.$]<2 .nr pg*gutw \\n[MINGW] +. el .nr pg*gutw (n;\\$2) +. nr pg@ncols \\n[LL]-\\n[pg@colw]/(\\n[pg@colw]+\\n[pg*gutw])+1 +. ie \\n[pg@ncols]>1 \ +. nr pg*gutw \\n[LL]-(\\n[pg@ncols]*\\n[pg@colw])/(\\n[pg@ncols]-1) +. el .nr pg*gutw 0 +.\} +.mk pg*col-top +.ns +.nr pg*col-num 0 +.nr pg@fn-colw \\n[pg@colw]*5/6 +.par@reset +.. +.de 2C +.MC +.. +.de 1C +.MC \\n[LL]u +.. +.\" top of page macro +.de pg@top +.ch pg*footer -\\n[FM]u/2u +.nr PN \\n% +.nr pg*col-num 0 +.nr pg@fn-bottom-margin 0 +.nr pg*saved-po \\n[PO] +.po \\n[PO]u +.ev h +.par@reset +.sp (u;\\n[HM]/2) +.PT +.sp |\\n[HM]u +.if d HD .HD +.mk pg@header-bottom +.ev +.mk pg*col-top +.pg*start-col +.. +.de pg*start-col +.\" Handle footnote overflow before floating keeps, because the keep +.\" might contain an embedded footnote. +.fn@top-hook +.kp@top-hook +.tbl@top-hook +.ns +.. +.de pg@cs-top +.sp \\n[HM]u +.\" move pg@bottom and pg*footer out of the way +.ch pg@bottom \\n[.p]u*2u +.ch pg*footer \\n[.p]u*2u +.ns +.. +.de pg@bottom +.tbl@bottom-hook +.if \\n[pg@fn-flag] .fn@bottom-hook +.nr pg*col-num +1 +.ie \\n[pg*col-num]<\\n[pg@ncols] .pg*end-col +.el .pg*end-page +.. +.de pg*end-col +'sp |\\n[pg*col-top]u +.po (u;\\n[pg*saved-po]+(\\n[pg@colw]+\\n[pg*gutw]*\\n[pg*col-num])) +.\"po +(u;\\n[pg@colw]+\\n[pg*gutw]) +.pg*start-col +.. +.de pg*end-page +.po \\n[pg*saved-po]u +.\" Make sure we don't exit if there are still floats or footnotes left-over. +.ie \\n[kp@head]<\\n[kp@tail]:\\n[fn@have-overflow] \{\ +. \" Switching environments ensures that we don't get an unnecessary +. \" blank line at the top of the page. +. ev ne +' bp +. ev +.\} +.el \{\ +. \" If the text has ended and there are no more footnotes or keeps, exit. +. if \\n[pg@text-ended] .ex +. if r pg*next-number \{\ +. pn \\n[pg*next-number] +. rr pg*next-number +. if d pg*next-format \{\ +. af PN \\*[pg*next-format] +. rm pg*next-format +. \} +. \} +' bp +.\} +.. +.\" pg@begin number format +.de pg@begin +.ie \\n[.$]>0 \{\ +. nr pg*next-number (;\\$1) +. ie \\n[.$]>1 .ds pg*next-format \\$2 +. el .rm pg*next-format +.\} +.el .rr pg*next-number +.pg@super-eject +.. +.\" print the footer line +.de pg*footer +.ev h +.par@reset +.BT +.ev +.. +.\" flush out any keeps or footnotes +.de pg@super-eject +.br +.if !'\\n(.z'' .@error-recover diversion open while ejecting page +.\" Make sure we stay in the end macro while there is still footnote overflow +.\" left, or floating keeps. +.while \\n[kp@tail]>\\n[kp@head]:\\n[pg@fn-flag] \{\ +. rs +. bp +.\} +.bp +.. +.nr pg@text-ended 0 +.de pg@end-text +.br +.nr pg@text-ended 1 +.pg@super-eject +.. +.em pg@end-text +.\" *************************** +.\" ******** module fn ******** +.\" *************************** +.\" Footnotes. +.nr fn@sep-dist 8p +.ev fn +.\" Round it vertically +.vs \n[fn@sep-dist]u +.nr fn@sep-dist \n[.v] +.ev +.nr fn*text-num 0 1 +.nr fn*note-num 0 1 +.ds * \\*[par@sup-start]\En+[fn*text-num]\\*[par@sup-end] +.nr fn*open 0 +.\" normal FS +.de @FS +.ie \\n[.$] .fn*do-FS "\\$1" no +.el \{\ +. ie \\n[fn*text-num]>\\n[fn*note-num] .fn*do-FS \\n+[fn*note-num] +. el .fn*do-FS +.\} +.. +.\" Second argument of `no' means don't embellish the first argument. +.de fn*do-FS +.if \\n[fn*open] .@error-recover nested FS +.nr fn*open 1 +.if \\n[.u] \{\ +. \" Ensure that the first line of the footnote is on the same page +. \" as the reference. I think this is minimal. +. ev fn +. nr fn*need 1v +. ev +. ie \\n[pg@fn-flag] .nr fn*need +\\n[fn:PD] +. el .nr fn*need +\\n[fn@sep-dist] +. ne \\n[fn*need]u+\\n[.V]u>?0 +.\} +.ev fn +.par@reset-env +.fn*start-div +.par@reset +.ie \\n[.$] .FP \\$@ +.el .@LP +.. +.de @FE +.ie !\\n[fn*open] .@error FE without FS +.el \{\ +. nr fn*open 0 +. br +. ev +. fn*end-div +.\} +.. +.nr fn@have-overflow 0 +.\" called at the top of each column +.de fn@top-hook +.nr fn*max-width 0 +.nr fn*page-bottom-pos 0-\\n[FM]-\\n[pg@fn-bottom-margin] +.ch pg@bottom \\n[fn*page-bottom-pos]u +.if \\n[fn@have-overflow] \{\ +. nr fn@have-overflow 0 +. fn*start-div +. ev nf +. fn@overflow-div +. ev +. fn*end-div +.\} +.. +.\" This is called at the bottom of the column if pg@fn-flag is set. +.de fn@bottom-hook +.nr pg@fn-flag 0 +.nr fn@have-overflow 0 +.nr fn@bottom-pos \\n[.p]-\\n[FM]-\\n[pg@fn-bottom-margin]+\\n[.v] +.ev fn +.nr fn@bottom-pos -\\n[.v] +.ev +.ie \\n[nl]+\\n[fn@sep-dist]+\n[.V]>\\n[fn@bottom-pos] \{\ +. rn fn@div fn@overflow-div +. nr fn@have-overflow 1 +.\} +.el \{\ +. if \\n[pg@ncols]>1 \ +. if \\n[fn*max-width]>\\n[pg@fn-colw] \ +. nr pg@fn-bottom-margin \\n[.p]-\\n[FM]-\\n[nl]+1v +. wh \\n[fn@bottom-pos]u fn*catch-overflow +. fn@print-sep +. ev nf +. fn@div +. rm fn@div +. ev +. if '\\n(.z'fn@overflow-div' \{\ +. di +. nr fn@have-overflow \\n[dn]>0 +. \} +. ch fn*catch-overflow +.\} +.. +.de fn*catch-overflow +.di fn@overflow-div +.. +.nr fn*embed-count 0 +.de @div-end!fn@div +.br +.if '\\n[.ev]'fn' .ev +.fn*end-div +.nr fn*open 0 +.. +.als @div-end!fn*embed-div @div-end!fn@div +.de fn*start-div +.ie '\\n(.z'' \{\ +. da fn@div +. if !\\n[pg@fn-flag] .ns +.\} +.el .di fn*embed-div +.. +.de fn*end-div +.ie '\\n(.z'fn@div' \{\ +. di +. nr fn*page-bottom-pos -\\n[dn] +. nr fn*max-width \\n[fn*max-width]>?\\n[dl] +. if !\\n[pg@fn-flag] .nr fn*page-bottom-pos -\\n[fn@sep-dist] +. nr pg@fn-flag 1 +. nr fn*page-bottom-pos \\n[nl]-\\n[.p]+\n[.V]>?\\n[fn*page-bottom-pos] +. ch pg@bottom \\n[fn*page-bottom-pos]u +.\} +.el \{\ +. ie '\\n(.z'fn*embed-div' \{\ +. di +. rn fn*embed-div fn*embed-div!\\n[fn*embed-count] +\!. fn*embed-start \\n[fn*embed-count] +. rs +' sp (u;\\n[dn]+\\n[fn@sep-dist]+\\n[.V]) +\!. fn*embed-end +. nr fn*embed-count +1 +. \} +. el \{\ +. ev fn +. @error-recover unclosed diversion within footnote +. \} +.\} +.. +.de fn*embed-start +.ie '\\n(.z'' \{\ +. fn*start-div +. ev nf +. fn*embed-div!\\$1 +. rm fn*embed-div!\\$1 +. ev +. fn*end-div +. di fn*null +.\} +.el \{\ +\!. fn*embed-start \\$1 +. rs +.\} +.. +.de fn*embed-end +.ie '\\n(.z'fn*null' \{\ +. di +. rm fn*null +.\} +.el \!.fn*embed-end +.. +.\" It's important that fn@print-sep use up exactly fn@sep-dist vertical space. +.de fn@print-sep +.ev fn +.in 0 +.vs \\n[fn@sep-dist]u +\D'l 1i 0' +.br +.ev +.. +.\" *************************** +.\" ******** module kp ******** +.\" *************************** +.\" Keeps. +.de KS +.br +.di kp*div +.. +.de KF +.if !'\\n(.z'' .@error-recover KF while open diversion +.di kp*fdiv +.ev k +.par@reset-env +.par@reset +.. +.de KE +.ie '\\n(.z'kp*div' .kp*end +.el \{\ +. ie '\\n(.z'kp*fdiv' .kp*fend +. el .@error KE without KS or KF +.\} +.. +.de @div-end!kp*div +.kp*end +.. +.de @div-end!kp*fdiv +.kp*fend +.. +.de kp*need +.ie '\\n(.z'' .ds@need \\$1 +.el \!.kp*need \\$1 +.. +.\" end non-floating keep +.de kp*end +.br +.di +.kp*need \\n[dn] +.ev nf +.kp*div +.ev +.rm kp*div +.. +.\" Floating keeps. +.nr kp@head 0 +.nr kp@tail 0 +.\" end floating keep +.de kp*fend +.br +.ev +.di +.ie \\n[.t]-(\\n[.k]>0*1v)>\\n[dn] \{\ +. br +. ev nf +. kp*fdiv +. rm kp*fdiv +. ev +.\} +.el \{\ +. rn kp*fdiv kp*div!\\n[kp@tail] +. nr kp*ht!\\n[kp@tail] 0\\n[dn] +. nr kp@tail +1 +.\} +.. +.\" top of page processing for KF +.nr kp*doing-top 0 +.de kp@top-hook +.if !\\n[kp*doing-top] \{\ +. nr kp*doing-top 1 +. kp*do-top +. nr kp*doing-top 0 +.\} +.. +.de kp*do-top +.\" If the first keep won't fit, only force it out if we haven't had a footnote +.\" and we're at the top of the page. +.nr kp*force \\n[pg@fn-flag]=0&(\\n[nl]<=\\n[pg@header-bottom]) +.nr kp*fits 1 +.while \\n[kp@tail]>\\n[kp@head]&\\n[kp*fits] \{\ +. ie \\n[.t]>\\n[kp*ht!\\n[kp@head]]:\\n[kp*force] \{\ +. nr kp*force 0 +. \" It's important to advance kp@head before bringing +. \" back the keep, so that if the last line of the +. \" last keep springs the bottom of page trap, a new +. \" page will not be started unnecessarily. +. rn kp*div!\\n[kp@head] kp*temp +. nr kp@head +1 +. ev nf +. kp*temp +. ev +. rm kp*temp +. \} +. el .nr kp*fits 0 +.\} +.. +.\" *************************** +.\" ******** module ds ******** +.\" *************************** +.\" Displays and non-floating keeps. +.de DE +.ds*end!\\n[\\n[.ev]:ds-type] +.nr \\n[.ev]:ds-type 0 +.. +.de ds@auto-end +.if \\n[\\n[.ev]:ds-type] \{\ +. @error automatically terminating display +. DE +.\} +.. +.de @div-end!ds*div +.ie \\n[\\n[.ev]:ds-type] .DE +.el .ds*end!2 +.. +.de ds*end!0 +.@error DE without DS, ID, CD, LD or BD +.. +.de LD +.br +.nr \\n[.ev]:ds-type 1 +.par@reset +.nf +.sp \\n[DD]u +.. +.de ID +.LD +.ie \\n[.$] .in +(n;\\$1) +.el .in +\\n[DI]u +.. +.de CD +.LD +.ce 9999 +.. +.de RD +.LD +.rj 9999 +.. +.de ds*common-end +.par@reset +.sp \\n[DD]u +.. +.als ds*end!1 ds*common-end +.de BD +.LD +.nr \\n[.ev]:ds-type 2 +.di ds*div +.. +.de ds*end!2 +.br +.ie '\\n(.z'ds*div' \{\ +. di +. nf +. in (u;\\n[.l]-\\n[dl]/2) +. ds*div +. rm ds*div +. ds*common-end +.\} +.el .@error-recover mismatched DE +.. +.de DS +.br +.di ds*div +.ie '\\$1'B' \{\ +. LD +. nr \\n[.ev]:ds-type 4 +.\} +.el \{\ +. ie '\\$1'L' .LD +. el \{\ +. ie '\\$1'C' .CD +. el \{\ +. ie '\\$1'R' .RD +. el \{\ +. ie '\\$1'I' .ID \\$2 +. el .ID \\$1 +. \} +. \} +. \} +. nr \\n[.ev]:ds-type 3 +.\} +.. +.de ds@need +.if '\\n(.z'' \{\ +. while \\n[.t]<=(\\$1)&(\\n[nl]>\\n[pg@header-bottom]) \{\ +. rs +' sp \\n[.t]u +. \} +.\} +.. +.de ds*end!3 +.br +.ie '\\n(.z'ds*div' \{\ +. di +. ds@need \\n[dn] +. ev nf +. ds*div +. ev +. rm ds*div +. ds*common-end +.\} +.el .@error-recover mismatched DE +.. +.de ds*end!4 +.ie '\\n(.z'ds*div' \{\ +. br +. di +. nf +. in (u;\\n[.l]-\\n[dl]/2) +. ds@need \\n[dn] +. ds*div +. rm ds*div +. ds*common-end +.\} +.el .@error-recover mismatched DE +.. +.\" **************************** +.\" ******** module par ******** +.\" **************************** +.\" Paragraph-level formatting. +.\" Load time initialization. +.de par@load-init +.\" PS and VS might have been set on the command-line +.if !rPS .nr PS 10 +.if !rLL .nr LL 6i +.ll \\n[LL]u +.\" don't set LT so that it can be defaulted from LL +.ie rLT .lt \\n[LT]u +.el .lt \\n[LL]u +.ps \\n[PS] +.\" don't set VS so that it can be defaulted from PS +.ie rVS .par*vs \\n[VS] +.el .par*vs \\n[PS]+2 +.if dFAM .fam \\*[FAM] +.if !rHY .nr HY 14 +.hy \\n[HY] +.TA +.. +.de par*vs +.\" If it's too big to be in points, treat it as units. +.ie (p;\\$1)>=40p .vs (u;\\$1) +.el .vs (p;\\$1) +.. +.de par@ab-indent +.nr 0:li (u;\\n[LL]/12) +.nr 0:ri \\n[0:li] +.. +.de par*env-init +.aln \\n[.ev]:PS PS +.aln \\n[.ev]:VS VS +.aln \\n[.ev]:LL LL +.aln \\n[.ev]:MCLL LL +.aln \\n[.ev]:LT LT +.aln \\n[.ev]:MCLT LT +.aln \\n[.ev]:PI PI +.aln \\n[.ev]:PD PD +.ad \\n[par*adj] +.par@reset-env +.. +.\" happens when the first page begins +.de par@init +.if !rLT .nr LT \\n[LL] +.if !rFL .nr FL \\n[LL]*5/6 +.if !rVS .nr VS \\n[PS]+2 +.if !rDI .nr DI .5i +.if !rFPS .nr FPS \\n[PS]-2 +.if !rFVS .nr FVS \\n[FPS]+2 +.\" don't change environment 0 +.ev h +.ps \\n[PS] +.if !rQI .nr QI 5n +.if !rPI .nr PI 5n +.par*vs \\n[VS] +.if !rPD .nr PD .3v>?\n(.V +.if !rDD .nr DD .5v>?\n(.V +.if !rFI .nr FI 2n +.if !rFPD .nr FPD \\n[PD]/2 +.ev +.if !dFAM .ds FAM \\n[.fam] +.nr par*adj \\n[.j] +.par*env-init +.ev h +.par*env-init +.ev +.ev fn +.par*env-init +.ev +.ev k +.par*env-init +.ev +.aln 0:MCLL pg@colw +.aln 0:MCLT pg@colw +.aln k:MCLL pg@colw +.aln k:MCLT pg@colw +.aln fn:PS FPS +.aln fn:VS FVS +.aln fn:LL FL +.aln fn:LT FL +.aln fn:PI FI +.aln fn:PD FPD +.aln fn:MCLL pg@fn-colw +.aln fn:MCLT pg@fn-colw +.. +.de par@reset-env +.nr \\n[.ev]:il 0 +.nr \\n[.ev]:li 0 +.nr \\n[.ev]:ri 0 +.nr \\n[.ev]:ai \\n[\\n[.ev]:PI] +.nr \\n[.ev]:pli 0 +.nr \\n[.ev]:pri 0 +.nr \\n[.ev]:ds-type 0 +.. +.\" par@reset +.de par@reset +.br +.ce 0 +.rj 0 +.ul 0 +.fi +.ie \\n[pg@ncols]>1 \{\ +. ll (u;\\n[\\n[.ev]:MCLL]-\\n[\\n[.ev]:ri]-\\n[\\n[.ev]:pri]) +. lt \\n[\\n[.ev]:MCLT]u +.\} +.el \{\ +. ll (u;\\n[\\n[.ev]:LL]-\\n[\\n[.ev]:ri]-\\n[\\n[.ev]:pri]) +. lt \\n[\\n[.ev]:LT]u +.\} +.in (u;\\n[\\n[.ev]:li]+\\n[\\n[.ev]:pli]) +.ft 1 +.fam \\*[FAM] +.ps \\n[\\n[.ev]:PS] +.par*vs \\n[\\n[.ev]:VS] +.ls 1 +.TA +.hy \\n[HY] +.. +.de @RT +.nr \\n[.ev]:pli 0 +.nr \\n[.ev]:pri 0 +.par@reset +.. +.\" This can be redefined by the user. +.de TA +.ta T 5n +.. +.de par*start +.ds@auto-end +.nr \\n[.ev]:pli \\$1 +.nr \\n[.ev]:pri \\$2 +.par@reset +.sp \\n[\\n[.ev]:PD]u +.ne 1v+\\n(.Vu +.. +.de par@finish +.nr \\n[.ev]:pli 0 +.nr \\n[.ev]:pri 0 +.par@reset +.. +.\" normal LP +.de @LP +.par*start 0 0 +.nr \\n[.ev]:ai \\n[\\n[.ev]:PI] +.. +.de @PP +.par*start 0 0 +.nr \\n[.ev]:ai \\n[\\n[.ev]:PI] +.ti +\\n[\\n[.ev]:ai]u +.. +.de @QP +.nr \\n[.ev]:ai \\n[\\n[.ev]:PI] +.par*start \\n[QI] \\n[QI] +.. +.de @XP +.par*start \\n[\\n[.ev]:PI] 0 +.ti -\\n[\\n[.ev]:PI]u +.. +.de @IP +.if \\n[.$]>1 .nr \\n[.ev]:ai (n;\\$2) +.par*start \\n[\\n[.ev]:ai] 0 +.if !'\\$1'' \{\ +. \" Divert the label so as to freeze any spaces. +. di par*label +. par*push-tag-env +\&\\$1 +. par*pop-tag-env +. di +. chop par*label +. ti -\\n[\\n[.ev]:ai]u +. ie \\n[dl]+1n<=\\n[\\n[.ev]:ai] \\*[par*label]\h'|\\n[\\n[.ev]:ai]u'\c +. el \{\ +\\*[par*label] +. br +. \} +. rm par*label +.\} +.. +.\" We don't want margin characters to be attached when we divert +.\" the tag. Since there's no way to save and restore the current +.\" margin character, we have to switch to a new environment, taking +.\" what we need of the old environment with us. +.de par*push-tag-env +.nr par*saved-font \\n[.f] +.nr par*saved-size \\n[.s]z +.nr par*saved-ss \\n[.ss] +.ds par*saved-fam \\n[.fam] +.ev par +.nf +.TA +.ft \\n[par*saved-font] +.ps \\n[par*saved-size]u +.ss \\n[par*saved-ss] +.fam \\*[par*saved-fam] +.. +.de par*pop-tag-env +.ev +.. +.de @RS +.br +.nr \\n[.ev]:li!\\n[\\n[.ev]:il] \\n[\\n[.ev]:li] +.nr \\n[.ev]:ri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ri] +.nr \\n[.ev]:ai!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ai] +.nr \\n[.ev]:pli!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pli] +.nr \\n[.ev]:pri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pri] +.nr \\n[.ev]:il +1 +.nr \\n[.ev]:li +\\n[\\n[.ev]:ai] +.nr \\n[.ev]:ai \\n[\\n[.ev]:PI] +.par@reset +.. +.de @RE +.br +.ie \\n[\\n[.ev]:il] \{\ +. nr \\n[.ev]:il -1 +. nr \\n[.ev]:ai \\n[\\n[.ev]:ai!\\n[\\n[.ev]:il]] +. nr \\n[.ev]:li \\n[\\n[.ev]:li!\\n[\\n[.ev]:il]] +. nr \\n[.ev]:ri \\n[\\n[.ev]:ri!\\n[\\n[.ev]:il]] +. nr \\n[.ev]:pli \\n[\\n[.ev]:pli!\\n[\\n[.ev]:il]] +. nr \\n[.ev]:pri \\n[\\n[.ev]:pri!\\n[\\n[.ev]:il]] +.\} +.el .@error unbalanced \\$0 +.par@reset +.. +.de @QS +.br +.nr \\n[.ev]:li!\\n[\\n[.ev]:il] \\n[\\n[.ev]:li] +.nr \\n[.ev]:ri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ri] +.nr \\n[.ev]:ai!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ai] +.nr \\n[.ev]:pli!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pli] +.nr \\n[.ev]:pri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pri] +.nr \\n[.ev]:il +1 +.nr \\n[.ev]:li +\\n[QI] +.nr \\n[.ev]:ri +\\n[QI] +.nr \\n[.ev]:ai \\n[\\n[.ev]:PI] +.par@reset +.. +.als @QE @RE +.\" start boxed text +.de B1 +.br +.di par*box-div +.nr \\n[.ev]:li +1n +.nr \\n[.ev]:ri +1n +.nr par*box-in \\n[.in] +.\" remember what 1n is, just in case the point size changes +.nr par*box-n 1n +.in +1n +.ll -1n +.lt -1n +.ti \\n[par*box-in]u+1n +.. +.de @div-end!par*box-div +.B2 +.. +.\" end boxed text +.\" Postpone the drawing of the box until we're in the top-level diversion, +.\" in case there's a footnote inside the box. +.de B2 +.ie '\\n(.z'par*box-div' \{\ +. br +. if \n[.V]>.25m .sp +. di +. if \n[.V]>.25m .sp +. ds@need \\n[dn] +. par*box-mark-top +. ev nf +. par*box-div +. ev +. nr \\n[.ev]:ri -\\n[par*box-n] +. nr \\n[.ev]:li -\\n[par*box-n] +. in -\\n[par*box-n]u +. ll +\\n[par*box-n]u +. lt +\\n[par*box-n]u +. par*box-draw \\n[.i]u \\n[.l]u-(\\n[.H]u==1n*1n) +.\} +.el .@error B2 without B1 +.. +.de par*box-mark-top +.ie '\\n[.z]'' \{\ +. rs +. mk par*box-top +.\} +.el \!.par*box-mark-top +.. +.de par*box-draw +.ie '\\n[.z]'' \{\ +. nr par*box-in \\n[.i] +. nr par*box-ll \\n[.l] +. nr par*box-vpt \\n[.vpt] +. nr par*box-ad \\n[.j] +. ad l +. vpt 0 +. in \\$1 +. ll \\$2 +\v'-1v+.25m'\ +\D'l (u;\\n[.l]-\\n[.i]) 0'\ +\D'l 0 |\\n[par*box-top]u'\ +\D'l -(u;\\n[.l]-\\n[.i]) 0'\ +\D'l 0 -|\\n[par*box-top]u' +. br +. sp -1 +. in \\n[par*box-in]u +. ll \\n[par*box-ll]u +. vpt \\n[par*box-vpt] +. ad \\n[par*box-ad] +.\} +.el \!.par*box-draw \\$1 \\$2 +.. +.de @SH +.par@finish +.\" Keep together the heading and the first two lines of the next paragraph. +.ne 3v+\\n[\\n[.ev]:PD]u+\\n(.Vu +.sp 1 +.ft B +.. +.\" TL, AU, and AI are aliased to these in cov*ab-init. +.de par@TL +.par@finish +.sp 1 +.ft B +.ps +2 +.vs +3p +.ce 9999 +.. +.de par@AU +.par@finish +.sp 1 +.ft I +.ce 9999 +.. +.de par@AI +.par@finish +.sp .5 +.ce 9999 +.. +.\" In paragraph macros. +.de NL +.ps \\n[\\n[.ev]:PS] +.. +.de SM +.ps -2 +.. +.de LG +.ps +2 +.. +.de R +.ft R +.. +.\" par*define-font-macro macro font +.de par*define-font-macro +.de \\$1 +.ie \\\\n[.$] \{\ +. nr par*prev-font \\\\n[.f] +\&\\\\$3\f[\\$2]\\\\$1\f[\\\\n[par*prev-font]]\\\\$2 +.\} +.el .ft \\$2 +\\.. +.. +.par*define-font-macro B B +.par*define-font-macro I I +.par*define-font-macro BI BI +.par*define-font-macro CW CR +.\" underline a word +.de UL +\Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2 +.. +.\" box a word +.de BX +.nr par*bxw \w'\\$1'+.4m +\Z'\v'.25m'\D'l 0 -1m'\D'l \\n[par*bxw]u 0'\D'l 0 1m'\D'l -\\n[par*bxw]u 0''\ +\Z'\h'.2m'\\$1'\ +\h'\\n[par*bxw]u' +.. +.\" The first time UX is used, put a registered mark after it. +.ds par*ux-rg \(rg +.de UX +\s[\\n[.s]*8u/10u]UNIX\s0\\$1\\*[par*ux-rg] +.ds par*ux-rg +.. +.ds par@sup-start \v'-.9m\s'\En[.s]*7u/10u'+.7m' +.als { par@sup-start +.ds par@sup-end \v'-.7m\s0+.9m' +.als } par@sup-end +.\" footnote paragraphs +.\" FF is the footnote format +.nr FF 0 +.\" This can be redefined. It gets a second argument of `no' if the first +.\" argument was supplied by the user, rather than automatically. +.de FP +.br +.if !d par*fp!\\n[FF] \{\ +. @error unknown footnote format `\\n[FF]' +. nr FF 0 +.\} +.ie '\\$2'no' .par*fp!\\n[FF]-no "\\$1" +.el .par*fp!\\n[FF] "\\$1" +.. +.de par*fp!0 +.@PP +\&\\*[par@sup-start]\\$1\\*[par@sup-end]\ \c +.. +.de par*fp!0-no +.@PP +\&\\$1\ \c +.. +.de par*fp!1 +.@PP +\&\\$1.\ \c +.. +.de par*fp!1-no +.@PP +\&\\$1\ \c +.. +.de par*fp!2 +.@LP +\&\\$1.\ \c +.. +.de par*fp!2-no +.@LP +\&\\$1\ \c +.. +.de par*fp!3 +.@IP "\\$1." (u;\\n[\\n[.ev]:PI]*2) +.. +.de par*fp!3-no +.@IP "\\$1" (u;\\n[\\n[.ev]:PI]*2) +.. +.\" *************************** +.\" ******** module nh ******** +.\" *************************** +.\" Numbered headings. +.\" nh*hl is the level of the last heading +.nr nh*hl 0 +.\" numbered heading +.de @NH +.ie '\\$1'S' \{\ +. shift +. nr nh*hl 0 +. while \\n[.$] \{\ +. nr nh*hl +1 +. nr H\\n[nh*hl] 0\\$1 +. shift +. \} +. if !\\n[nh*hl] \{\ +. nr H1 1 +. nr nh*hl 1 +. @error missing arguments to .NH S +. \} +.\} +.el \{\ +. nr nh*ohl \\n[nh*hl] +. ie \\n[.$] \{\ +. nr nh*hl 0\\$1 +. ie \\n[nh*hl]<=0 \{\ +. nr nh*ohl 0 +. nr nh*hl 1 +. \} +. el \{\ +. if \\n[nh*hl]-\\n[nh*ohl]>1 \ +. @warning .NH \\n[nh*ohl] followed by .NH \\n[nh*hl] +. \} +. \} +. el .nr nh*hl 1 +. while \\n[nh*hl]>\\n[nh*ohl] \{\ +. nr nh*ohl +1 +. nr H\\n[nh*ohl] 0 +. \} +. nr H\\n[nh*hl] +1 +.\} +.ds SN +.nr nh*i 0 +.while \\n[nh*i]<\\n[nh*hl] \{\ +. nr nh*i +1 +. as SN \\n[H\\n[nh*i]]. +.\} +.SH +\\*[SN] +.. +.\" **************************** +.\" ******** module toc ******** +.\" **************************** +.\" Table of contents generation. +.de @XS +.da toc*div +.ev h +.ie \\n[.$] .XA "\\$1" +.el .XA +.. +.de @div-end!toc*div +.XE +.. +.de XA +.ie '\\n(.z'toc*div' \{\ +. if d toc*num .toc*end-entry +. ie \\n[.$] \{\ +. ie '\\$1'no' .ds toc*num +. el .ds toc*num "\\$1 +. \} +. el .ds toc*num \\n[PN] +. br +. par@reset +. na +. ll -8n +. in (n;0\\$2) +.\} +.el .@error XA without XS +.. +.de XE +.ie '\\n(.z'toc*div' \{\ +. if d toc*num .toc*end-entry +. ev +. di +.\} +.el .@error XS without XE +.. +.de toc*end-entry +\\a\\t\\*[toc*num] +.br +.rm toc*num +.. +.de PX +.1C +.if !'\\$1'no' \{\ +. ce 1 +. ps \\n[PS]+2 +. ft B +\\*[TOC] +. ft +. ps +.\} +.nf +.char \[toc*leader-char] .\h'1m' +.lc \[toc*leader-char] +.ta (u;\\n[.l]-\\n[.i]-\w'000') (u;\\n[.l]-\\n[.i])R +.sp 2 +.toc*div +.par@reset +.. +.\" print the table of contents on page i +.de TC +.P1 +.pg@begin 1 i +.PX \\$1 +.. +.\" **************************** +.\" ******** module eqn ******** +.\" **************************** +.\" Eqn support. +.de EQ +.. +.de EN +.. +.de @EQ +.br +.ds eqn*num "\\$2 +.ie '\\$1'L' .nr eqn*type 0 +.el \{\ +. ie '\\$1'I' .nr eqn*type 1 +. el \{\ +. nr eqn*type 2 +. if !'\\$1'C' .ds eqn*num "\\$1 +. \} +.\} +.di eqn*div +.in 0 +.nf +.. +.de @div-end!eqn*div +.@EN +.. +.\" Note that geqn mark and lineup work correctly in centered equations. +.de @EN +.ie !'\\n(.z'eqn*div' .@error-recover mismatched EN +.el \{\ +. br +. di +. nr eqn*have-num 0 +. if !'\\*[eqn*num]'' .nr eqn*have-num 1 +. if \\n[dl]:\\n[eqn*have-num] \{\ +. sp \\n[DD]u +. par@reset +. ds eqn*tabs \\n[.tabs] +. nf +. ie \\n[dl] \{\ +. ds@need \\n[dn]u-1v+\n[.V]u +. chop eqn*div +. ie \\n[eqn*type]=0 \{\ +. ta (u;\\n[.l]-\\n[.i])R +\\*[eqn*div]\t\\*[eqn*num] +. \} +. el \{\ +. ie \\n[eqn*type]=1 .ta \\n[DI]u \ +(u;\\n[.l]-\\n[.i])R +. el .ta (u;\\n[.l]-\\n[.i]/2)C \ +(u;\\n[.l]-\\n[.i])R +\t\\*[eqn*div]\t\\*[eqn*num] +. \} +. \} +. el \{\ +. ta (u;\\n[.l]-\\n[.i])R +\t\\*[eqn*num] +. \} +. sp \\n[DD]u +. ta \\*[eqn*tabs] +. \} +. fi +.\} +.. +.\" **************************** +.\" ******** module tbl ******** +.\" **************************** +.\" Tbl support. +.nr tbl*have-header 0 +.\" This gets called if TS occurs before the first paragraph. +.de TS +.LP +.\" cov*ab-init aliases TS to @TS +\\*[TS]\\ +.. +.de @TS +.sp \\n[DD]u +.if '\\$1'H' .di tbl*header-div +.. +.de tbl@top-hook +.if \\n[tbl*have-header] \{\ +. ie \\n[.t]-\\n[tbl*header-ht]-1v .tbl*print-header +. el .sp \\n[.t]u +.\} +.. +.de tbl*print-header +.ev nf +.tbl*header-div +.ev +.mk #T +.. +.de TH +.ie '\\n[.z]'tbl*header-div' \{\ +. nr T. 0 +. T# +. br +. di +. ie \\n[dn]+\\n[FM]+\\n[HM]+2v>=\\n[.p] \{\ +. @error ridiculously long table header +. ds@need \\n[dn] +. tbl*print-header +. \} +. el \{\ +. nr tbl*header-ht \\n[dn] +. ds@need \\n[dn]u+1v +. tbl*print-header +. nr tbl*have-header 1 +. \} +.\} +.el .@error-recover .TH without .TS H +.. +.de @div-end!tbl*header-div +.TH +.TE +.. +.de TE +.ie '\\n(.z'tbl*header-div' .@error-recover .TS H but no .TH before .TE +.el \{\ +. nr tbl*have-header 0 +. sp \\n[DD]u +.\} +.\" reset tabs +.TA +.. +.de tbl@bottom-hook +.if \\n[tbl*have-header] \{\ +. nr T. 1 +. T# +.\} +.. +.de T& +.. +.\" **************************** +.\" ******** module pic ******** +.\" **************************** +.\" Pic support. +.\" PS height width +.de PS +.br +.sp \\n[DD]u +.ie \\n[.$]<2 .@error bad arguments to PS (not preprocessed with pic?) +.el \{\ +. ds@need (u;\\$1)+1v +. in +(u;\\n[.l]-\\n[.i]-\\$2/2>?0) +.\} +.. +.de PE +.par@reset +.sp \\n[DD]u+.5m +.. +.\" **************************** +.\" ******** module ref ******** +.\" **************************** +.\" Refer support. +.de ]- +.rm [A [B [C [D [E [G [I [J [N [O [P [Q [R [S [T [V +.rm ref*string +.. +.\" Other +.ds ref*spec!0 Q A T1 S V N P I C D O +.\" Journal article +.ds ref*spec!1 Q A T2 J S V N P I C D O +.\" Book +.ds ref*spec!2 Q A T1 S V P I C D O +.\" Article within book +.ds ref*spec!3 Q A T2 B E S V P I C D O +.\" Tech report +.ds ref*spec!4 Q A T2 R G P I C D O +.\" ][ type +.de ][ +.if r [T \{\ +. als [T1 [T +. als [T2 [T +.\} +.ie d ref*spec!\\$1 .ref*build \\*[ref*spec!\\$1] +.el \{\ +. @error unknown reference type `\\$1' +. ref*build \\*[ref*spec!0] +.\} +.ref*print +.rm ref*string +.rm [F [T1 [T2 +.. +.\" start of reference number +.ds [. \\*[par@sup-start] +.\" end of reference number +.ds .] \\*[par@sup-end] +.\" period before reference +.ds <. . +.\" period after reference +.ds >. \" empty +.\" comma before reference +.ds <, , +.\" comma after reference +.ds >, \" empty +.\" start collected references +.de ]< +.als ref*print ref*end-print +.SH +\&\\*[REFERENCES] +.par@reset +.. +.\" end collected references +.de ]> +.par@finish +.als ref*print ref*normal-print +.. +.de ref*normal-print +.ie d [F .FS "\\*([.\\*([F\\*(.]" +.el .FS \& +\\*[ref*string] +.FE +.. +.de ref*end-print +.ie d [F .IP "\\*([F." +.el .XP +\\*[ref*string] +.. +.als ref*print ref*normal-print +.de ref*build +.rm ref*string ref*post-punct +.nr ref*suppress-period 1 +.while \\n[.$] \{\ +. if d [\\$1 \{\ +. ie d ref*add-\\$1 .ref*add-\\$1 +. el .ref*add-dflt \\$1 +. \} +. shift +.\} +.\" now add a final period +.ie d ref*string \{\ +. if !\\n[ref*suppress-period] .as ref*string . +. if d ref*post-punct \{\ +. as ref*string "\\*[ref*post-punct] +. rm ref*post-punct +. \} +.\} +.el .ds ref*string +.. +.de ref*add-T1 +.ref*field T , "\fI" "" "\fP" +.if r [T .nr ref*suppress-period \\n([T +.. +.de ref*add-T2 +.ref*field T , "\\*Q" "" "\\*U" +.if r [T .nr ref*suppress-period \\n([T +.. +.de ref*add-P +.ie \\n([P>0 .ref*field P , "pp. " +.el .ref*field P , "p. " +.. +.de ref*add-J +.ref*field J , \fI "" \fP +.. +.de ref*add-D +.ref*field D "" ( ) +.. +.de ref*add-E +.ref*field E , "ed. " +.. +.de ref*add-G +.ref*field G "" ( ) +.. +.de ref*add-B +.ref*field B "" "in \fI" "" \fP +.. +.de ref*add-O +.ref*field O . +.ie r [O .nr ref*suppress-period \\n([O +.el .nr ref*suppress-period 1 +.. +.de ref*add-A +.ref*field A , +.if r [A .nr ref*suppress-period \\n([A +.. +.de ref*add-dflt +.ref*field \\$1 , +.. +.\" First argument is the field letter. +.\" Second argument is the punctuation character to use to separate this field +.\" from the previous field. +.\" Third argument is a string with which to prefix this field. +.\" Fourth argument is a string with which to postfix this field. +.\" Fifth argument is a string to add after the punctuation character supplied +.\" by the next field. +.de ref*field +.if d ref*string \{\ +. ie d ref*post-punct \{\ +. as ref*string "\\$2\\*[ref*post-punct] \" +. rm ref*post-punct +. \} +. el .as ref*string "\\$2 \" +.\} +.as ref*string "\\$3\\*([\\$1\\$4 +.if \\n[.$]>4 .ds ref*post-punct "\\$5 +.nr ref*suppress-period 0 +.. +.\" **************************** +.\" ******** module acc ******** +.\" **************************** +.\" Accents and special characters. +.ds Q \(lq +.ds U \(rq +.ds - \(em +.\" Characters +.\" The idea of this definition is for the top of the 3 to be at the x-height. +.if !c\[yogh] .char \[yogh] \Z'\v'\w'x'*0-\En[rst]u'\s[\En[.s]*8u/10u]\ +\v'\w'3'*0+\En[rst]u'3\s0'\h'\w'\s[\En[.s]*8u/10u]3'u' +.\" Accents +.de acc*over-def +.ds \\$1 \Z'\v'(u;\w'x'*0+\En[rst]-\En[.cht])'\ +\h'(u;-\En[skw]+(-\En[.w]-\w'\\$2'/2)+\En[.csk])'\\$2' +.. +.de acc*under-def +.ds \\$1 \Z'\v'\En[.cdp]u'\h'(u;-\En[.w]-\w'\\$2'/2)'\\$2' +.. +.de acc*slash-def +.ds \\$1 \Z'\h'(u;-\En[.w]-\w'\\$2'/2)'\ +\v'(u;\En[.cdp]-\En[.cht]+\En[rst]+\En[rsb]/2)'\\$2' +.. +.de acc*prefix-def +.ds \\$1 \Z'\h'(u;\w'x'-\w'\\$2'/2)'\\$2' +.. +.acc*prefix-def ' \' +.acc*prefix-def ` \` +.acc*prefix-def ^ ^ +.acc*prefix-def , \(ac +.acc*prefix-def : \(ad +.acc*prefix-def ~ ~ +.\" improved accent marks +.de AM +.acc*over-def ' \' +.acc*over-def ` \` +.acc*over-def ^ ^ +.acc*over-def ~ ~ +.acc*over-def : \(ad +.acc*over-def v \(ah +.acc*over-def _ \(a- +.acc*over-def o \(ao +.acc*under-def , \(ac +.acc*under-def . \s[\En[.s]*8u/10u]\v'.2m'.\v'-.2m'\s0 +.acc*under-def hook \(ho +.acc*slash-def / / +.char \[hooko] o\\\\*[hook] +.ds q \[hooko] +.ds 3 \[yogh] +.ds D- \(-D\" Icelandic uppercase eth +.ds d- \(Sd\" Icelandic lowercase eth +.ds Th \(TP\" Icelandic uppercase thorn +.ds th \(Tp\" Icelandic lowercase thorn +.ds 8 \(ss\" German double s +.ds Ae \(AE\" AE ligature +.ds ae \(ae\" ae ligature +.ds Oe \(OE\" OE ligature +.ds oe \(oe\" oe ligature +.ds ? \(r?\" upside down ? +.ds ! \(r!\" upside down ! +.. +.par@load-init +.\" Make sure that no blank lines creep in at the end of this file. diff --git a/contrib/groff/tmac/tmac.safer b/contrib/groff/tmac/tmac.safer new file mode 100644 index 0000000..be348d5 --- /dev/null +++ b/contrib/groff/tmac/tmac.safer @@ -0,0 +1,10 @@ +.\" remove unsafe requests +.rm open opena pso sy pi +.de unsafe +.tm \\n(.F:\\n(.c: unsafe to execute request `\\$1' +.. +.als open unsafe +.als opena unsafe +.als pso unsafe +.als sy unsafe +.als pi unsafe diff --git a/contrib/groff/tmac/tmac.trace b/contrib/groff/tmac/tmac.trace new file mode 100644 index 0000000..2691c46 --- /dev/null +++ b/contrib/groff/tmac/tmac.trace @@ -0,0 +1,10 @@ +.\" Load this before a macro package that you want to trace. +.rn de !!de +.!!de de +.!!de \\$1 +.tm *** trace enter \\$1: \\\\$0 \\\\$@ +\\\\*[!!\\$1]\\\\ +.tm *** trace exit \\$1: \\\\$0 \\\\$@ +\\.. +.!!de !!\\$1 \\$2 +.. diff --git a/contrib/groff/tmac/tmac.tty b/contrib/groff/tmac/tmac.tty new file mode 100644 index 0000000..419a685 --- /dev/null +++ b/contrib/groff/tmac/tmac.tty @@ -0,0 +1,47 @@ +.nr _C \n(.C +.cp 0 +.nroff +.\" Don't warn about non-existent fonts. +.warn \n[.warn]-(\n[.warn]/131072%2*131072) +.po 0 +.if c\[char173] .shc \[char173] +.de tty-char +.if !c\\$1 .char \\$1 "\\$2 +.. +.if c\(md .tr \(bu\(md +.tty-char \(bu \z+o +.tty-char \(14 1/4 +.tty-char \(12 1/2 +.tty-char \(34 3/4 +.tty-char \(ff ff +.tty-char \(fi fi +.tty-char \(fl fl +.tty-char \(Fi ffi +.tty-char \(Fl ffl +.tty-char \(<- <- +.tty-char \(-> -> +.tty-char \(<> <-> +.tty-char \(em -- +.tty-char \(+- +- +.tty-char \(co (C) +.tty-char \(<= <= +.tty-char \(>= >= +.tty-char \(!= != +.tty-char \(== == +.tty-char \(~= ~= +.tty-char \(sq [] +.tty-char \(lh <= +.tty-char \(rh => +.tty-char \(lA <= +.tty-char \(rA => +.tty-char \(hA <=> +.tty-char \(rg (R) +.tty-char \(OE OE +.tty-char \(oe oe +.tty-char \(AE AE +.tty-char \(ae ae +.tty-char \(an - +.cp \n(_C +.\" If you want the character definitions in tmac.tty-char to be loaded +.\" automatically, remove the `\"' from the next line. +.\"do mso tmac.tty-char diff --git a/contrib/groff/tmac/tmac.tty-char b/contrib/groff/tmac/tmac.tty-char new file mode 100644 index 0000000..f66d7a8 --- /dev/null +++ b/contrib/groff/tmac/tmac.tty-char @@ -0,0 +1,198 @@ +.\" This file defines standard troff characters and some groff characters for +.\" use with -Tascii and -Tlatin1. +.\" +.\" These definitions are chosen so that, as far as possible, they: +.\" - work with both -Tascii and -Tlatin1. +.\" - work on devices that display only the last overstruck character +.\" as well as on devices that support overstriking +.\" - represent the character's graphical shape (not its meaning) +.\" +.nr _C \n(.C +.cp 0 +.de tty-char +.if !c\\$1 .char \\$1 "\\$2 +.. +.ie c\(a- .ds tty-rn \(a- +.el .ds tty-rn \v'-1m'_\v'+1m' +.tty-char \(tm tm +.tty-char \(rn \*[tty-rn] +.tty-char \(ua \z|^ +.tty-char \(da \z|v +.tty-char \(sc S +.tty-char \(ct \z/c +.tty-char \(dg \z|- +.tty-char \(dd \z|= +.tty-char \(ib (\z=_ +.tty-char \(ip \z=_) +.tty-char \(sb (= +.tty-char \(sp =) +.tty-char \(if oo +.tty-char \(pt oc +.tty-char \(es {} +.tty-char \(ca (^) +.tty-char \(cu U +.tty-char \(de o +.tty-char \(di -:- +.tty-char \(no ~ +.tty-char \(gr \Z'\*[tty-rn]'V +.tty-char \(is \z'\z,I +.tty-char \(mo E +.tty-char \(pd a +.tty-char \(sr \e/ +.tty-char \(*C \z_H +.tty-char \(*D \z_/\z_\e +.tty-char \(*F \zIO +.tty-char \(*G |\*[tty-rn] +.tty-char \(*H \z-O +.tty-char \(*L /\e +.tty-char \(*P TT +.tty-char \(*Q \zIY +.tty-char \(*S \z_\Z'\*[tty-rn]'> +.tty-char \(*W \z_O +.if c\(ss .tty-char \(*b \(ss +.tty-char \(*b B +.tty-char \(*a a +.tty-char \(*c \z,E +.tty-char \(*d d +.tty-char \(*e e +.tty-char \(*f \z|o +.tty-char \(+f \z|o +.tty-char \(*g y +.tty-char \(*h \z-0 +.tty-char \(+h \z-0 +.tty-char \(*i i +.tty-char \(*k k +.tty-char \(*l \z>\e +.tty-char \(*m \z,u +.tty-char \(*n v +.tty-char \(*p \z-n +.tty-char \(+p \z-w +.tty-char \(*q \z|u +.tty-char \(*r p +.tty-char \(*s \z-o +.tty-char \(*t \z~t +.tty-char \(*u u +.tty-char \(*w w +.tty-char \(*x x +.tty-char \(*y n +.tty-char \(*z \z,C +.tty-char \(ts s +.\" Definition of \(ss should follow that of \(*b. +.tty-char \(ss B +.tty-char \(c* \zO\(mu +.tty-char \(c+ \zO+ +.tty-char \(AN ^ +.tty-char \(OR v +.tty-char \(uA \z=^ +.tty-char \(dA \z=v +.if c\(md .tty-char \(a. \(md +.tty-char \(Im I +.tty-char \(Re R +.tty-char \(/L \z/L +.tty-char \(/l \z/l +.tty-char \(%0 %o +.tty-char \(ao o +.tty-char \(a" """" +.tty-char \(ab \z'` +.tty-char \(ah v +.tty-char \(ho \(ac +.tty-char \(/_ \z_/ +.tty-char \(=~ =~ +.tty-char \(Ah N +.tty-char \(CR _| +.tty-char \(fa \z-V +.tty-char \(nm \z/E +.tty-char \(pp \z_| +.tty-char \(sd '' +.tty-char \(st -) +.tty-char \(te 3 +.if c\(md .tty-char \(tf .\(md. +.tty-char \(tf .:. +.tty-char \(wp p +.tty-char \(~~ ~~ +.tty-char \(Fn \z,f +.tty-char \(Bq ,, +.tty-char \(bq , +.tty-char \(lz <> +.\" Latin-1 characters +.tty-char \(r! \z,i +.tty-char \(Po \z-L +.tty-char \(Cs \zox +.tty-char \(Ye \z=Y +.tty-char \(bb | +.tty-char \(ad """" +.tty-char \(Of \z_a +.tty-char \(Fo << +.tty-char \(a- \*[tty-rn] +.tty-char \(S2 2 +.tty-char \(S3 3 +.tty-char \(ps 9| +.tty-char \(md . +.tty-char \(ac , +.tty-char \(S1 1 +.tty-char \(Om \z_o +.tty-char \(Fc >> +.tty-char \(r? \z'c +.tty-char \(`A \z`A +.tty-char \('A \z'A +.tty-char \(^A \z^A +.tty-char \(~A \z~A +.tty-char \(:A \z"A +.tty-char \(oA \zoA +.tty-char \(,C \z,C +.tty-char \(`E \z`E +.tty-char \('E \z'E +.tty-char \(^E \z^E +.tty-char \(:E \z"E +.tty-char \(`I \z`I +.tty-char \('I \z'I +.tty-char \(^I \z^I +.tty-char \(:I \z"I +.tty-char \(-D \z-D +.tty-char \(~N \z~N +.tty-char \(`O \z`O +.tty-char \('O \z'O +.tty-char \(^O \z^O +.tty-char \(~O \z~O +.tty-char \(:O \z"O +.tty-char \(/O \z/O +.tty-char \(`U \z`U +.tty-char \('U \z'U +.tty-char \(^U \z^U +.tty-char \(:U \z"U +.tty-char \('Y \z'Y +.tty-char \(TP \zIb +.tty-char \(`a \z`a +.tty-char \('a \z'a +.tty-char \(^a \z^a +.tty-char \(~a \z~a +.tty-char \(:a \z"a +.tty-char \(oa \zoa +.tty-char \(,c \z,c +.tty-char \(`e \z`e +.tty-char \('e \z'e +.tty-char \(^e \z^e +.tty-char \(:e \z"e +.tty-char \(`i \z`i +.tty-char \('i \z'i +.tty-char \(^i \z^i +.tty-char \(:i \z"i +.tty-char \(Sd \z`\z'o +.tty-char \(~n \z~n +.tty-char \(`o \z`o +.tty-char \('o \z'o +.tty-char \(^o \z^o +.tty-char \(~o \z~o +.tty-char \(:o \z"o +.tty-char \(/o \z/o +.tty-char \(`u \z`u +.tty-char \('u \z'u +.tty-char \(^u \z^u +.tty-char \(:u \z"u +.tty-char \('y \z'y +.tty-char \(Tp \zpb +.tty-char \(:y \z"y +.\"tty-char \(:y \ij +.tty-char \[arrowvertex] | +.cp \n(_C +.do mso tmac.latin1 diff --git a/contrib/groff/tmac/troffrc b/contrib/groff/tmac/troffrc new file mode 100644 index 0000000..c8d7092 --- /dev/null +++ b/contrib/groff/tmac/troffrc @@ -0,0 +1,25 @@ +.\" Startup file for troff. +.\" This is tested by pic. +.nr 0p 0 +.\" Use .do here, so that it works with -C. +.\" The groff command defines the .X string if the -X option was given. +.ie r.X .do ds troffrc!ps tmac.Xps +.el .do ds troffrc!ps tmac.ps +.do ds troffrc!dvi tmac.dvi +.do ds troffrc!X75 tmac.X +.do ds troffrc!X75-12 tmac.X +.do ds troffrc!X100 tmac.X +.do ds troffrc!X100-12 tmac.X +.do ds troffrc!ascii tmac.tty +.do ds troffrc!latin1 tmac.tty +.do ds troffrc!lj4 tmac.lj4 +.do if d troffrc!\*[.T] \ +. do mso \*[troffrc!\*[.T]] +.do rm troffrc!ps troffrc!Xps troffrc!dvi troffrc!X75 troffrc!X75-12 \ +troffrc!X100 troffrc!X100-12 troffrc!lj4 +.do tr \[char160] +.\" Set the hyphenation language to `us'. +.do hla us +.\" Load hyphenation patterns from `hyphen.us' (in the tmac directory). +.do hpf hyphen.us +.\" Don't let blank lines creep in here. |