diff options
author | wlemb <wlemb> | 2000-02-06 09:34:01 +0000 |
---|---|---|
committer | wlemb <wlemb> | 2000-02-06 09:34:01 +0000 |
commit | 653c6faab591f3c5f290a18a7f58c29cb1a3b0a7 (patch) | |
tree | 633fec7ba17c3da901e7725d1907a103a17e4532 /tmac | |
download | groff-653c6faab591f3c5f290a18a7f58c29cb1a3b0a7.tar.gz |
Initial revision
Diffstat (limited to 'tmac')
45 files changed, 14500 insertions, 0 deletions
diff --git a/tmac/Makefile.sub b/tmac/Makefile.sub new file mode 100644 index 00000000..48db39c0 --- /dev/null +++ b/tmac/Makefile.sub @@ -0,0 +1,87 @@ +MAN7=\ + groff_ms.n \ + groff_man.n \ + groff_me.n \ + groff_msafer.n \ + groff_mdoc.n \ + groff_mdoc.samples.n \ + groff_markup.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 troffrc-end tmac.safer tmac.html tmac.arkup \ + tmac.a4 tmac.trace +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) || $(mkinstalldirs) $(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) || $(mkinstalldirs) $(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/tmac/TODO b/tmac/TODO new file mode 100644 index 00000000..5213fc27 --- /dev/null +++ b/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/tmac/doc-common b/tmac/doc-common new file mode 100644 index 00000000..1be19597 --- /dev/null +++ b/tmac/doc-common @@ -0,0 +1,450 @@ +.\" 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 +.nr Yr \n(yr+1900 +.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 System Reference Manual +. if \\$2>1 .if \\$2<6 .ds vT System Programmer's Manual +. if "\\$2"8" .ds vT 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 User's Supplementary Documents +. if "\\$3"PS1" .ds vT Programmers's Supplementary Documents +. if "\\$3"AMD" .ds vT Ancestral Manual Documents +. if "\\$3"SMM" .ds vT System Manager's Manual +. if "\\$3"URM" .ds vT Reference Manual +. if "\\$3"PRM" .ds vT Programmers's Manual +. if "\\$3"IND" .ds vT Manual Master Index +.\" . if "\\$3"CON" .ds vT Contributed Software Manual +.\" . if "\\$3"IMP" .ds vT Implementation Notes +.\" . if "\\$3"HOW" .ds vT How Pocket Manual +. if "\\$3"LOCAL" .ds vT 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, \\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/tmac/doc-ditroff b/tmac/doc-ditroff new file mode 100644 index 00000000..039db7dd --- /dev/null +++ b/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/tmac/doc-nroff b/tmac/doc-nroff new file mode 100644 index 00000000..c036f218 --- /dev/null +++ b/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/tmac/doc-syms b/tmac/doc-syms new file mode 100644 index 00000000..57e682aa --- /dev/null +++ b/tmac/doc-syms @@ -0,0 +1,236 @@ +.\" 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 +.\" . ds b1 \&\\*(tNISO \\*(aa8802-3: 1989\\*(sV +.\" . as b1 (``\\*(tNANSI C\\*(aa'') +. \} +. el \{\ +. ds b1 \&\\*(tNISO \\*(aa8802-3: 1989 +.\" . 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/tmac/eqnrc b/tmac/eqnrc new file mode 100644 index 00000000..a8bc8365 --- /dev/null +++ b/tmac/eqnrc @@ -0,0 +1,63 @@ +.\" 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|html %1% ! +ifdef X ! define ps|X|html %1% ! +ifdef html ! define ps|X|html %1% ! + +ifdef ps|X|html ! 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|html ! set draw_lines 1 ! + +ifdef ascii ! define n %1% ! +ifdef latin1 ! define n %1% ! +ifdef utf8 ! define n %1% ! +ifdef n ! +set nroff 1 +! + +undef X +undef ps|X +undef n +undef html +.EN diff --git a/tmac/fixmacros.sed b/tmac/fixmacros.sed new file mode 100644 index 00000000..63cce22a --- /dev/null +++ b/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/tmac/groff_man.man b/tmac/groff_man.man new file mode 100644 index 00000000..57eb9ec4 --- /dev/null +++ b/tmac/groff_man.man @@ -0,0 +1,171 @@ +.TH GROFF_MAN @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +. +.SH NAME +. +groff_man \- groff `an' macros to support generation of man pages +.SH SYNOPSIS +.B groff +.B \-m@TMAC_AN_PREFIX@an +[ +.IR options .\|.\|. +] +[ +.IR files .\|.\|. +] +. +.SH DESCRIPTION +. +The +.B tmac.an +macros used to generate man pages with +.I groff +were written by James Clark. +This document provides a brief summary of the use of each macro in that +package. +.TP +.BI .TP " title section " [ extra1 "] [" extra2 "] [" extra3 ] +Sets the title of the man page to +.I title +and the section to +.IR section , +which must take on a value between 1 and\ 8. +The value +.I section +may also have a string appended, e.g. `.pm', to indicate a specific +subsection of the man pages. +.TP +.BI .SH " text for a heading" +Sets up an unindented and unnumbered section heading. +Prints out all the text following `.SH' up to the end of the line in bold +face, with a size slightly smaller than that for indented section headings. +.TP +.BI .SS " text for a heading" +Sets up an indented section heading. +Prints out all the text following `.SS' up to the end of the line in bold +face, with a size slightly larger than that for unindented section headings. +.TP +.BI ".TP [" nnn ] +Sets up an indented paragraph. +The indentation is set to +.I nnn +if that argument is supplied. +The first line of text following this macro is interpreted as a string to be +printed flush-left, as it is appropriate for a label. +It is not interpreted as part of a paragraph, so there is no attempt to fill +the first line with text from the following input lines. +Nevertheless, if the label is not as wide as the indentation, then the +paragraph starts at the same line (but indented), continuing on the +following lines. +If the label is wider than the indentation, then the descriptive part of the +paragraph begins on the line following the label, entirely indented. +The `.TP' macro is the macro used for the explanations you are just reading. +.TP +.BR ".LP " or " .PP " or " .P" +These macros are mutual aliases. +Any of them causes a line break at the current position, followed by a +vertical space downwards by the amount that is set in the `PD' counter. +.TP +.BI ".IP [" designator "] [" nnn ] +Sets up an indented paragraph, using +.I designator +as a tag to mark its beginning. +The indentation is permanently set to +.I nnn +if that argument is supplied. +To set the indentation back to the previous level, one must call some other +macro that uses indented paragraphs, and explicitly provide it with the +value of the previous indentation. +.IP +For example, the following paragraphs were all set up with bullets as the +designator, using `.IP \\(bu 4': +.IP \(bu 4 +`IP' is one of the three macros used in +.B tmac.an +to format lists. +.IP \(bu 4 +`HP' is another. +This macro produces a paragraph with a left hanging indentation. +.IP \(bu 4 +`TP' is another. +This macro produces an unindented label (given by the text on the first line +following `TP'), followed by an indented paragraph with appropriately +descriptive text. +.TP +.BI ".HP [" nnn ] +Sets up paragraphs with hanging left indentation. +The indentation is set to +.I nnn +if that argument is supplied. +The following pargraph illustrates the effect of this macro with the hanging +indentation set to\ 2: +.HP 2 +This is a pagraph following an invocation of the `.HP' macro. +As you can see, it produces a paragraph where all lines but the first are +flushed right and are shorter than the preceding lines. +. +.SH "MACROS TO SET FONTS" +. +.TP +.BI .SM +Causes the text on the same line or the text on the next line to appear in a +font that is one point size smaller than the default font. +.TP +.BI .SB +Causes the text on the same line or the text on the next line to appear in +small boldface font. +.TP +.BI ".BI " text +Causes text on the same line to appear alternately in bold face and italic. +The text must be on the same line as the macro call. +Thus `.BI this word and that' would cause `this' and `and' to appear in bold +face, while `word' and `that' appear in italics. +.TP +.BI ".IB " text +Causes text to appear alternately in italic and bold face. +The text must be on the same line as the macro call. +.TP +.BI ".BR " text +Causes text on the same line to appear alternately in bold face and roman. +The text must be on the same line as the macro call. +.TP +.BI ".RB " text +Causes text on the same line to appear alternately in roman and bold face. +The text must be on the same line as the macro call. +.TP +.BI ".R " text +Causes text to appear in roman font. +If no text is present on the line where the macro is called, then the text +of the next line appears in roman. +This is the default font to which text is returned at the end of processing +of the other macros. +.TP +.BI ".B " text +Causes text to appear in bold face. +If no text is present on the line where the macro is called, then the text +of the next line appears in bold face. +.TP +.BI ".I " text +Causes text to appear in italic. +If no text is present on the line where the macro is called, then the text +of the next line appears in italic. +. +.SH "SEE ALSO" +. +Since the +.B tmac.an +macros consist of groups of +.I groff +requests, one can, in principle, supplement the functionality of the +.B tmac.an +macros with individual +.I groff +requests where necessary. +A complete list of these requests is available on the WWW at +.ce 1 +http://www.cs.pdx.edu/~trent/gnu/groff/groff_toc.html +. +.SH AUTHOR +. +This manual page was originally written for the Debian GNU/Linux system by +Susan G. Kleinmann <sgk@debian.org>, corrected by Werner Lemberg +<wl@gnu.org>, and is now part of the GNU troff distribution. diff --git a/tmac/groff_markup.man b/tmac/groff_markup.man new file mode 100755 index 00000000..46233cea --- /dev/null +++ b/tmac/groff_markup.man @@ -0,0 +1,319 @@ +.TH GROFF_MARKUP @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +.\" Copyright (C) 2000 Free Software Foundation, Inc. +.\" Written by Gaius Mulley (gaius@glam.ac.uk) +.\" +.\" 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. +.\" +.\" user level guide to using the -markup macroset +.\" +.do mso tmac.arkup +.LINE +.SH NAME +groff_markup \- groff macros for authoring web pages +.LINE +.SH SYNOPSIS +.B "groff \-markup" +[ options ] +file ... +.SH DESCRIPTION +This manual page describes the GNU \-markup macros, which is part of the +groff document formatting system. +The manual page is very a basic guide, and the html device driver +.RB ( grohtml ) +is still very alpha. +It has been included into the distribution so that a lot of people have a +chance to test it. +Note that this macro file will be automatically called (via the +\fCtroffrc\fP file) if you use \fC-Thtml\fP. +.PP +To see the hyperlinks in action, please format this man page with the +.B grohtml +device. +.PP +Here is a summary of the functions found in this macro set. +.SH SYNPOSIS +.ta 2iL +\&.HTMLINDEX determine automatic link cut off +.br + point for sections/headers +.br +\&.BODYCOLOR specify colours on a web page +.br +\&.BACKGROUND specify background image +.br +\&.URL create a url using two parameters +.br +\&.MAILTO create a html email address +.br +\&.FTP create an ftp reference +.br +\&.IMAGE include an image file +.br +\&.HTML pass an html raw request to the +.br + device driver +.br +\&.TAG generate an html name tag from $1 +.br +.\"\&.CDFTP optionally create two different links +.\".br +.\" depending on hostname +.\".br +\&.LINE create a full width horizontal rule +.br +.PP +Output of the +.IR pic , +.IR eqn , +.IR refer , +and +.I tbl +preprocessors is acceptable as input. +.SH REQUESTS +.TP +.B HTMLINDEX +determines the cut off point for automatic link generation to headings. +By default all headings found in a troff document have links created to them +at the top of the html web page. +It maybe that many of the lower heading levels do not require links. +Alternatively some web pages may not need any heading links at all, in which +case: +.sp +.nf +\fC\&.HTMLINDEX 0\fP +.fi +.sp +will tell +.B grohtml +not to generate links. +An \fCHTMLINDEX\fP of 2 will mean that a heading +.sp +.B "1.1.1 Some Title" +.sp +will not be included in the links either as it is said to have a heading +level of three. +.TP +.B BODYCOLOR +takes five parameters: foreground, background, active hypertext link, +hypertext link not yet visited, and visited hypertext link colour. +.TP +.B BACKGROUND +the only parameter to this macro is the background image file. +.TP +.B URL +generates +.TAG URL +a URL using either two or three arguments. +$1 is the name of the link, $2 is the actual URL, and $3 is optional stuff +to be printed immediately after $2. +Here is how to encode +.URL "homepage for groff" http://groff.ffii.org/ : +.sp +.nf +\s-2\fC\&.URL "homepage for groff" http://groff.ffii.org/ :\fP\s+2 +.fi +.sp +If this is processed by a device other than \fC-Thtml\fP +it appears as: +homepage for groff \(lahttp://groff.ffii.org\(ra. +The URL macro can be of any type; for example we can reference +.URL "Eric Raymond's pic guide" pic.html +by: +.sp +.nf +\s-2\fC\&.URL "Eric Raymond's pic guide" pic.html\fP\s+2 +.fi +.sp +.TP +.B MAILTO +generates an email html reference. +The first argument is mandatory as the email address. +The optional second argument is the text you see in your browser, and +an optional third argument is stuff printed immediately after the +second argument. +For example, the groff maintainers are +.MAILTO wl@gnu.org "Werner Lemberg" +and +.MAILTO Ted.Harding@nessie.mcc.ac.uk "Ted Harding" . +This is achieved by the following macros: +.sp +.nf +\s-2\fC\&.MAILTO wl@gnu.org "Werner Lemberg"\fP +.sp +\fC\&.MAILTO Ted.Harding@nessie.mcc.ac.uk \\ +.br +"Ted Harding" .\s+2\fP +.fi +.sp +Note that all the urls actually are treated as consuming no textual space +in groff. +This could be considered as a bug since it causes some problems. +To circumvent this, \fCtmac.arkup\fP inserts a zero-width character which +expands to a harmless space (only if in HTML mode) +.TP +.B FTP +indicates that data can be obtained via ftp. +The first argument is the browser text and the second is the url. +A third argument, similar to the macros above, is intended for stuff printed +immediately after the second argument. +The second and the third parameter are optional. +As an example, here the location of the +.FTP "current groff development distribution" \ +ftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz . +The macro example above was specified by: +.sp +\s-2\fC\&.FTP "current groff development distribution" \\ +.br +ftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz .\fP\s+2 +.sp +.TP +.B IMAGE +allows the document to include pictures. +The first argument is the image file. +The next two arguments are optional: +Argument two is the width in pixels (default is 400 pixels if absent). +The third argument is the height in pixels (default is the width value if +absent). +.sp +.TP +.B HTML +all text after this macro is treated as raw html. +If the document is processed \fIwithout\fP \fC-Thtml\fP then +the macro is ignored. +This macro is a building block for other higher level macros. +.sp +For example, the \fCBACKGROUND\fP macro is defined as: +.nf +\fC\&.de BACKGROUND +\&. HTML <body background=\\$1> +\&.. +\fP +.fi +.TP +.B TAG +generates an html name tag from its argument. +This can then be referenced using the +.URL URL #URL +macro. +As you can see, you must precede the tag name with `\fC#\fP' since it is +a local reference. +This link was achieved via placing a TAG in the URL description above; +the source looks like this: +.sp +\s-2\fC\&.TP +.br +\&.B URL +.br +generates +.br +\&.TAG URL +.br +a URL using either two or three +.br +arguments. +.br +$1 is the name of the link, $2 is the actual URL +.br +\fP\s+2etc. +.sp +.\".TP +.\".B CDFTP +.\"takes four arguments. +.\"Basically it is the FTP macro with optional local reference. +.\"It was designed to allow the same groff source to be built on two different +.\"machines and access the ftp data differently. +.\"For example, on a web server you might wish for the web page to reference +.\"a web site. +.\"However, if you were producing a CDROM of your information you might wish +.\"for the ftp data to be also stored on your CDROM and referenced as a file. +.\"An example to get the current groff development distribution +.\".CDFTP merlin "click here." \ +.\"ftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz \ +.\"../../groff.tar.gz +.\"The source for this CDFTP invocation is +.\".sp +.\"\fC\s-2\&.CDFTP merlin "click here." \ +.\"ftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz \ +.\"../../groff.tar.gz\fP\s+2 +.\".sp +.\"which means if the html is generated on machine \fCmerlin\fP +.\"then generate a URL to \fC../../groff.tar.gz\fP. +.\"Otherwise construct an FTP URL to +.\"\fCftp://ftp.ffii.org/pub/groff/devel/groff-current.tar.gz\fP. +.TP +.B LINE +generates a full width horizontal rule. +Example: +.sp +\fC\s-2\&.LINE\fP\s+2 +.sp +.SH +SECTION HEADING LINKS +.LP +By default +.B grohtml +generates links to all section headings and places these at the top of the +html document. +.B Grohtml +has to guess what a section heading looks like \(em remember that all +.B grohtml +actually sees is a device independent language telling it where to place +text, draw lines, change font sizes and faces etc. +It believes a section heading to be a line of bold text which starts at the +left most margin. +Consequently it may misinterpret. +Users can turn off all heading and title guessing by giving invoking groff +with \fCgroff -P-g\fP. +.SH +LIMITATIONS OF GROHTML +.LP +Although basic text can be translated in a straightforward fashion there are +some areas where +.B grohtml +has to try and guess text relationship. +In particular, whenever +.B grohtml +encounters text tables and indented paragraphs or two column mode it will +try and utilize the html table construct to preserve columns. +.B Grohtml +also attempts to work out which lines should be automatically formatted by +the browser. +Ultimately in trying to make reasonable guesses most of the time it will +make mistakes. +Hopefully these mistakes will happen less and less as we get bug reports +and patches :-). +.PP +Tbl, pic, eqn's are also generated using images which may be +considered a limitation. +.SH FILES +@MACRODIR@/tmac.arkup +.SH "SEE ALSO" +.BR groff (@MAN1EXT@), +.BR @g@troff (@MAN1EXT@) +.BR grohtml (@MAN1EXT@), +.LP +.SH AUTHOR +.B Grohtml +is written by +.MAILTO gaius@glam.ac.uk "Gaius Mulley" +.LINE +.SH BUGS +Report bugs to the +.MAILTO bug-groff@gnu.org "Groff Bug Mailing List" . +Include a complete, self-contained example that will allow the bug to be +reproduced, and say which version of groff you are using. +.LINE diff --git a/tmac/groff_mdoc.man b/tmac/groff_mdoc.man new file mode 100644 index 00000000..2112eba4 --- /dev/null +++ b/tmac/groff_mdoc.man @@ -0,0 +1,422 @@ +.\" $NetBSD: mdoc.7,v 1.14 1999/08/30 00:41:28 ross Exp $ +.\" +.\" Copyright (c) 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)mdoc.7 8.2 (Berkeley) 12/30/93 +.\" +.Dd November 24, 1997 +.Os +.Dt MDOC 7 +.Sh NAME +.Nm mdoc +.Nd quick reference guide for the +.Nm \-mdoc +macro package +.Sh SYNOPSIS +.Nm groff +.Fl m Ns Ar doc +.Ar files ... +.Sh DESCRIPTION +The +.Nm \-mdoc +package is a set of content-based and domain-based macros +used to format the +.Bx +man pages. +The macro names and their meanings are +listed below for quick reference; for +a detailed explanation on using the package, +see the tutorial sampler +.Xr mdoc.samples 7 . +.Pp +The macros are described in two groups, the first +includes the structural and physical page layout macros. +The second contains the manual and general text domain +macros which differentiate the +.Nm -\mdoc +package from other +.Xr troff +formatting packages. +.Sh PAGE STRUCTURE DOMAIN +.Ss Title Macros +To create a valid manual page, these three macros, in this order, +are required: +.Bl -tag -width "xxxx.Os OPERATINGxSYSTEM [version/release]" -compact +.It Li "\&.Dd " Ar "Month day, year" +Document date. +.It Li "\&.Dt " Ar "DOCUMENT_TITLE [section] [volume]" +Title, in upper case. +.It Li "\&.Os " Ar "OPERATING_SYSTEM [version/release]" +Operating system +.Pq Tn BSD . +.El +.Ss Page Layout Macros +Section headers, paragraph breaks, lists and displays. +.Bl -tag -width flag -compact +.It Li \&.Sh +Section Headers. +Valid headers, in the order of presentation: +.Bl -tag -width "RETURN VALUES" -compact +.It Ar NAME +Name section, should include the +.Ql \&.Nm +or +.Ql \&.Fn +and the +.Ql \&.Nd +macros. +.It Ar SYNOPSIS +Usage. +.It Ar DESCRIPTION +General description, should include +options and parameters. +.It Ar RETURN VALUES +Sections two and three function calls. +.It Ar ENVIRONMENT +Describe environment variables. +.It Ar FILES +Files associated with the subject. +.It Ar EXAMPLES +Examples and suggestions. +.It Ar DIAGNOSTICS +Normally used for section four device interface diagnostics. +.It Ar ERRORS +Sections two and three error and signal +handling. +.It Ar SEE ALSO +Cross references and citations. +.It Ar STANDARDS +Conformance to standards if applicable. +.It Ar HISTORY +If a standard is not applicable, the history +of the subject should be given. +.It Ar BUGS +Gotchas and caveats. +.It Ar SECURITY CONSIDERATIONS +Security issues to be aware of. +.It Ar other +Customized headers may be added at +the authors discretion. +.El +.It Li \&.Ss +Subsection Headers. +.It Li \&.Pp +Paragraph Break. +Vertical space (one line). +.It Li \&.D1 +(D-one) Display-one +Indent and display one text line. +.It Li \&.Dl +(D-ell) Display-one literal. +Indent and display one line of literal text. +.It Li \&.Bd +Begin-display block. +Display options: +.Bl -tag -width "xoffset string " -compact +.It Fl ragged +Unjustified (ragged edges). +.It Fl filled +Filled, and if +.Xr troff 1 , +also justified. +.It Fl unfilled +Unfilled, unjustified. +.It Fl literal +Literal text or code. +.It Fl file Ar name +Read in named +.Ar file +and display. +.It Fl offset Ar string +Offset display. +Acceptable +.Ar string +values: +.Bl -tag -width indent-two -compact +.It Ar left +Align block on left (default). +.It Ar center +Approximate center margin. +.It Ar indent +Six constant width spaces (a tab). +.It Ar indent-two +Two tabs. +.It Ar right +Left aligns block 2 inches from +right. +.It Ar xx Ns Cm n +Where +.Ar xx +is a number from +.No \&4 Ns Cm n +to +.No \&9\&9 Ns Cm n . +.It Ar Aa +Where +.Ar Aa +is a callable macro name. +.It Ar string +The width of +.Ar string +is used. +.El +.El +.It Li \&.Ed +End-display (matches \&.Bd). +.It Li \&.Bl +Begin-list. +Create lists or columns. Options: +.Bl -tag -width flag -compact +.It Em List-types +.Bl -column "xbullet " -compact +.It Fl bullet Ta "Bullet Item List" +.It Fl dash Ta "Dash Item List" +.It Fl hyphen Ta "(as per" Fl dash ")" +.It Fl item Ta "Unlabeled List" +.It Fl enum Ta "Enumerated List" +.It Fl tag Ta "Tag Labeled List" +.It Fl diag Ta "Diagnostic List" +.It Fl hang Ta "Hanging Labeled List" +.It Fl ohang Ta "Overhanging Labeled List" +.It Fl inset Ta "Inset or Run-on Labeled List" +.It Fl column Ta "Multiple Columns" +.El +.It Em List-parameters +.Bl -tag -width "xcompact " -compact +.It Fl offset +(All lists.) See +.Ql \&.Bd +begin-display above. +.It Fl width +.Pf ( Fl tag +and +.Fl hang +lists only.) +See +.Ql \&.Bd . +This parameter is effectively required for +.Fl tag +lists. +.It Fl compact +(All lists.) +Suppresses blank lines. +.El +.El +.It Li \&.El +End-list. +.It Li \&.It +List item. +.El +.Sh MANUAL AND GENERAL TEXT DOMAIN MACROS +The manual and general text domain macros are special in that +most of them are parsed for callable macros +for example: +.Bl -tag -width ".Op Fl s Ar filex" -offset indent +.It Li "\&.Op Fl s Ar file" +Produces +.Op Fl s Ar file +.El +.Pp +In this example, the option enclosure macro +.Ql \&.Op +is parsed, and calls the callable content macro +.Ql \&Fl +which operates on the argument +.Ql s +and then calls the callable content macro +.Ql \&Ar +which operates on the argument +.Ql file . +Some macros may be callable, but are not parsed and vice versa. +These macros are indicated in the +.Em parsed +and +.Em callable +columns below. +.Pp +Unless stated, manual domain macros share a common syntax: +.Pp +.Dl \&.Va argument [\ .\ ,\ ;\ :\ (\ )\ [\ ]\ argument \...\ ] +.Pp +.Sy Note : +Opening and closing +punctuation characters are only recognized as such if they are presented +one at a time. +The string +.Ql ")," +is not recognized as punctuation and will be output with a leading white +space and in what ever font the calling macro uses. +The +argument list +.Ql "] ) ," +is recognized as three sequential closing punctuation characters +and a leading white space is not output between the characters +and the previous argument (if any). +The special meaning of a punctuation character may be escaped +with the string +.Ql \e& . +For example the following string, +.Bl -tag -width "&.Ar file1\ , file2\ , file3\ )\ ." -offset indent +.It Li "\&.Ar file1\ , file2\ , file3\ )\ ." +Produces +.Ar file1 , file2 , file3 ) . +.El +.ne 1i +.Ss Manual Domain Macros +.Bl -column "Name" "Parsed" "Callable" -compact +.It Em Name Parsed Callable Description +.It Li \&Ad Ta Yes Ta Yes Ta Address. "(This macro may be deprecated.)" +.It Li \&Ar Ta Yes Ta Yes Ta "Command line argument." +.It Li \&Cd Ta \&No Ta \&No Ta "Configuration declaration (section four only)." +.It Li \&Cm Ta Yes Ta Yes Ta "Command line argument modifier." +.It Li \&Dv Ta Yes Ta Yes Ta "Defined variable (source code)." +.It Li \&Er Ta Yes Ta Yes Ta "Error number (source code)." +.It Li \&Ev Ta Yes Ta Yes Ta "Environment variable." +.It Li \&Fa Ta Yes Ta Yes Ta "Function argument." +.It Li \&Fd Ta \&No Ta \&No Ta "Function declaration." +.It Li \&Fl Ta Yes Ta Yes Ta "Command line flag." +.It Li \&Fn Ta Yes Ta Yes Ta "Function call (also .Fo and .Fc)." +.It Li \&Ic Ta Yes Ta Yes Ta "Interactive command." +.It Li \&Li Ta Yes Ta Yes Ta "Literal text." +.It Li \&Nm Ta Yes Ta Yes Ta "Command name." +.It Li \&Op Ta Yes Ta Yes Ta "Option (also .Oo and .Oc)." +.It Li \&Ot Ta Yes Ta Yes Ta "Old style function type (Fortran only)." +.It Li \&Pa Ta Yes Ta Yes Ta "Pathname or file name." +.It Li \&St Ta Yes Ta Yes Ta "Standards (-p1003.2, -p1003.1 or -ansiC)" +.It Li \&Va Ta Yes Ta Yes Ta "Variable name." +.It Li \&Vt Ta Yes Ta Yes Ta "Variable type (Fortran only)." +.It Li \&Xr Ta Yes Ta Yes Ta "Manual Page Cross Reference." +.El +.Ss General Text Domain Macros +.Bl -column "Name" "Parsed" "Callable" -compact +.It Em "Name Parsed Callable Description" +.It Li \&%A Ta Yes Ta \&No Ta "Reference author." +.It Li \&%B Ta Yes Ta Yes Ta "Reference book title." +.It Li \&%\&C Ta \&No Ta \&No Ta "Reference place of publishing (city)." +.It Li \&%\&D Ta \&No Ta \&No Ta "Reference date." +.It Li \&%J Ta Yes Ta Yes Ta "Reference journal title." +.It Li \&%N Ta \&No Ta \&No Ta "Reference issue number." +.It Li \&%\&O Ta \&No Ta \&No Ta "Reference optional information." +.It Li \&%P Ta \&No Ta \&No Ta "Reference page number(s)." +.It Li \&%R Ta \&No Ta \&No Ta "Reference report Name." +.It Li \&%T Ta Yes Ta Yes Ta "Reference article title." +.It Li \&%V Ta \&No Ta \&No Ta "Reference volume." +.It Li \&Ac Ta Yes Ta Yes Ta "Angle close quote." +.It Li \&Ao Ta Yes Ta Yes Ta "Angle open quote." +.It Li \&Ap Ta Yes Ta Yes Ta "Insert apostrophe; switch to .No mode " +.It Li \&Aq Ta Yes Ta Yes Ta "Angle quote." +.It Li \&At Ta \&No Ta \&No Ta Tn "AT&T UNIX." +.It Li \&Bc Ta Yes Ta Yes Ta "Bracket close quote." +.It Li \&Bf Ta \&No Ta \&No Ta "Begin font mode." +.It Li \&Bo Ta Yes Ta Yes Ta "Bracket open quote." +.It Li \&Bq Ta Yes Ta Yes Ta "Bracket quote." +.It Li \&Bx Ta Yes Ta Yes Ta "BSD" . +.It Li \&Db Ta \&No Ta \&No Ta "Debug (default is \\*qoff\\*q)." +.It Li \&Dc Ta Yes Ta Yes Ta "Double close quote." +.It Li \&Do Ta Yes Ta Yes Ta "Double open quote." +.It Li \&Dq Ta Yes Ta Yes Ta "Double quote." +.It Li \&Ec Ta Yes Ta Yes Ta "Enclose string close quote." +.It Li \&Ef Ta \&No Ta \&No Ta "End font mode." +.It Li \&Em Ta Yes Ta Yes Ta "Emphasis (traditional English)." +.It Li \&Eo Ta Yes Ta Yes Ta "Enclose string open quote." +.It Li \&Fx Ta \&No Ta \&No Ta "FreeBSD." +.It Li \&No Ta Yes Ta Yes Ta "Normal text (no-op)." +.It Li \&Ns Ta Yes Ta Yes Ta "No space." +.It Li \&Nx Ta \&No Ta \&No Ta "NetBSD." +.It Li \&Pc Ta Yes Ta Yes Ta "Parenthesis close quote." +.It Li \&Pf Ta Yes Ta \&No Ta "Prefix string." +.It Li \&Po Ta Yes Ta Yes Ta "Parenthesis open quote." +.It Li \&Pq Ta Yes Ta Yes Ta "Parentheses quote." +.It Li \&Qc Ta Yes Ta Yes Ta "Strait Double close quote." +.It Li \&Ql Ta Yes Ta Yes Ta "Quoted literal." +.It Li \&Qo Ta Yes Ta Yes Ta "Strait Double open quote." +.It Li \&Qq Ta Yes Ta Yes Ta "Strait Double quote." +.It Li \&Re Ta \&No Ta \&No Ta "Reference end." +.It Li \&Rs Ta \&No Ta \&No Ta "Reference start." +.It Li \&Sc Ta Yes Ta Yes Ta "Single close quote." +.It Li \&So Ta Yes Ta Yes Ta "Single open quote." +.It Li \&Sq Ta Yes Ta Yes Ta "Single quote." +.It Li \&Sm Ta \&No Ta \&No Ta "Space mode (default is \\*qon\\*q)." +.It Li \&Sx Ta Yes Ta Yes Ta "Section Cross Reference." +.It Li \&Sy Ta Yes Ta Yes Ta "Symbolic (traditional English)." +.It Li \&Tn Ta Yes Ta Yes Ta "Trade or type name (small Caps)." +.It Li \&Ux Ta Yes Ta Yes Ta "UNIX." +.It Li \&Xc Ta Yes Ta Yes Ta "Extend argument list close." +.It Li \&Xo Ta Yes Ta Yes Ta "Extend argument list open." +.El +.\" .It Sy \&Hf Ta \&No Ta \&No Ta "Include file with header" +.Pp +Macro names ending in +.Ql q +quote remaining items on the argument list. +Macro names ending in +.Ql o +begin a quote which may span more than one line of input and +are close quoted with the matching macro name ending in +.Ql c . +Enclosure macros may be nested and are limited to +eight arguments. +.Pp +Note: the extended argument list macros +.Pf ( Ql \&.Xo , +.Ql \&.Xc ) +and the function enclosure macros +.Pf ( Ql \&.Fo , +.Ql \&.Fc ) +are irregular. +The extended list macros are used when the number of macro arguments +would exceed the +.Xr troff +limitation of nine arguments. +.Sh CONFIGURATION +For site specific configuration of the macro package, +see the file +.Pa /usr/src/share/tmac/README . +.Sh FILES +.Bl -tag -width "tmac.doc-ditroff" -compact +.It Pa tmac.doc +Manual and general text domain macros. +.It Pa tmac.doc-common +Common structural macros and definitions. +.It Pa tmac.doc-nroff +Site dependent +.Xr nroff +style file. +.It Pa tmac.doc-ditroff +Site dependent +.Xr troff +style file. +.It Pa tmac.doc-syms +Special defines (such as the standards macro). +.El +.Sh SEE ALSO +.Xr mdoc.samples 7 diff --git a/tmac/groff_mdoc.samples.man b/tmac/groff_mdoc.samples.man new file mode 100755 index 00000000..cdbbc21c --- /dev/null +++ b/tmac/groff_mdoc.samples.man @@ -0,0 +1,2925 @@ +.\" $NetBSD: mdoc.samples.7,v 1.21 1999/08/23 21:54:20 ross Exp $ +.\" +.\" Copyright (c) 1990, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)mdoc.samples.7 8.2 (Berkeley) 12/30/93 +.\" +.\" This tutorial sampler invokes every macro in the package several +.\" times and is guaranteed to give a worst case performance +.\" for an already extremely slow package. +.\" +.Dd November 24, 1997 +.Os +.Dt MDOC.SAMPLES 7 +.Sh NAME +.Nm mdoc.samples +.Nd tutorial sampler for writing +.Bx +manuals with +.Nm \-mdoc +.Sh SYNOPSIS +.Nm man mdoc.samples +.Sh DESCRIPTION +A tutorial sampler for writing +.Bx +manual pages with the +.Nm \-mdoc +macro package, a +.Em content Ns \-based +and +.Em domain Ns \-based +formatting +package for +.Xr troff 1 . +Its predecessor, the +.Xr \-man 7 +package, +addressed page layout leaving the +manipulation of fonts and other +typesetting details to the individual author. +In +.Nm \-mdoc , +page layout macros +make up the +.Em "page structure domain" +which consists of macros for titles, section headers, displays +and lists. Essentially items which affect the physical position +of text on a formatted page. +In addition to the page structure domain, there are two more domains, +the manual domain and the general text domain. +The general text domain is defined as macros which +perform tasks such as quoting or emphasizing pieces of text. +The manual domain is defined as macros that are a subset of the +day to day informal language used to describe commands, routines +and related +.Bx +files. +Macros in the manual domain handle +command names, command line arguments and options, function names, +function parameters, pathnames, variables, cross +references to other manual pages, and so on. +These domain +items have value +for both the author and the future user of the manual page. +It is hoped the consistency gained +across the manual set will provide easier +translation to future documentation tools. +.Pp +Throughout the +.Ux +manual pages, a manual entry +is simply referred +to as a man page, regardless of actual length and without +sexist intention. +.Sh GETTING STARTED +Since a tutorial document is normally read when a person +desires to use the material immediately, the assumption has +been made that the user of this document may be impatient. +The material presented in the remained of this document is +outlined as follows: +.Bl -enum -offset indent +.It +.Tn "TROFF IDIOSYNCRASIES" +.Bl -tag -width flag -compact -offset indent +.It "Macro Usage" . +.It "Passing Space Characters in an Argument" . +.It "Trailing Blank Space Characters (a warning)" . +.It "Escaping Special Characters" . +.El +.It +.Tn "THE ANATOMY OF A MAN PAGE" +.Bl -tag -width flag -compact -offset indent +.It "A manual page template" . +.El +.It +.Tn "INTRODUCTION OF TITLE MACROS" . +.It +.Tn "INTRODUCTION OF MANUAL AND GENERAL TEXT DOMAINS" . +.Bl -tag -width flag -compact -offset indent +.It "What's in a name..." . +.It "General Syntax" . +.El +.It +.Tn "MANUAL DOMAIN" +.Bl -tag -width flag -compact -offset indent +.It "Addresses" . +.It "Arguments" . +.It "Configuration Declarations (section four only)" . +.It "Command Modifier" . +.It "Defined Variables" . +.It "Errno's (Section two only)" . +.It "Environment Variables" . +.It "Function Argument" . +.It "Function Declaration" . +.It "Flags" . +.It "Functions (library routines)" . +.It "Function Types" . +.\" .It "Header File (including source code)" . +.It "Interactive Commands" . +.It "Literals" . +.It "Names" . +.It "Options" . +.It "Pathnames" . +.It "Variables" . +.It "Cross References" . +.El +.It +.Tn "GENERAL TEXT DOMAIN" +.Bl -tag -width flag -compact -offset indent +.It "AT&T Macro" . +.It "BSD Macro" . +.It "UNIX Macro" . +.It "Emphasis Macro" . +.It "Enclosure/Quoting Macros" +.Bl -tag -width flag -compact -offset indent +.It "Angle Bracket Quote/Enclosure" . +.It "Bracket Quotes/Enclosure" . +.It "Double Quote macro/Enclosure" . +.It "Parenthesis Quote/Enclosure" . +.It "Single Quotes/Enclosure" . +.It "Prefix Macro" . +.El +.It "Extended Arguments" . +.It "No\-Op or Normal Text Macro" . +.It "No Space Macro" . +.It "Section Cross References" . +.It "Symbolic Macro" . +.It "References and Citations" . +.It "Trade Names (Acronyms and Type Names)" . +.El +.It +.Tn "PAGE STRUCTURE DOMAIN" +.Bl -tag -width flag -compact -offset indent +.It "Section Headers" . +.It "Paragraphs and Line Spacing" . +.It "Keeps" . +.It "Displays" . +.It "Lists and Columns" . +.El +.It +.Tn "PREDEFINED STRINGS" +.It +.Tn "DIAGNOSTICS" +.It +.Tn "FORMATTING WITH GROFF, TROFF AND NROFF" +.It +.Tn "BUGS" +.El +.ne 7 +.Sh TROFF IDIOSYNCRASIES +The +.Nm \-mdoc +package attempts to simplify the process of writing a man page. +Theoretically, one should not have to learn the dirty details of +.Xr troff 1 +to use +.Nm \-mdoc ; +however, there are a few +limitations which are unavoidable and best gotten out +of the way. +And, too, be forewarned, this package is +.Em not +fast. +.Ss Macro Usage +As in +.Xr troff 1 , +a macro is called by placing a +.Ql \&\. +(dot character) +at the beginning of +a line followed by the two character name for the macro. +Arguments may follow the macro separated by spaces. +It is the dot character at the beginning of the line which causes +.Xr troff 1 +to interpret the next two characters as a macro name. +To place a +.Ql \&\. +(dot character) +at the beginning of a line in some context other than +a macro invocation, precede the +.Ql \&\. +(dot) with the +.Ql \e& +escape sequence. +The +.Ql \e& +translates literally to a zero width space, and is never displayed in the +output. +.Pp +In general, +.Xr troff 1 +macros accept up to nine arguments, any +extra arguments are ignored. +Most macros in +.Nm \-mdoc +accept nine arguments and, +in limited cases, arguments may be continued or extended +on the +next line (See +.Sx Extended Arguments ) . +A few macros handle quoted arguments (see +.Sx Passing Space Characters in an Argument +below). +.Pp +Most of the +.Nm \-mdoc +general text domain and manual domain macros are special +in that their argument lists are +.Em parsed +for callable macro names. +This means an argument on the argument list which matches +a general text or manual domain macro name and is determined +to be callable will be executed +or called when it is processed. +In this case +the argument, although the name of a macro, +is not preceded by a +.Ql \&\. +(dot). +It is in this manner that many macros are nested; for +example +the option macro, +.Ql \&.Op , +may +.Em call +the flag and argument macros, +.Ql \&Fl +and +.Ql \&Ar , +to specify an optional flag with an argument: +.Bl -tag -width "\&.Op \&Fl s \&Ar bytes" -offset indent +.It Op Fl s Ar bytes +is produced by +.Li \&.Op \&Fl s \&Ar bytes +.El +.Pp +To prevent a two character +string from being interpreted as a macro name, precede +the string with the +escape sequence +.Ql \e& : +.Bl -tag -width "\&.Op \&Fl s \&Ar bytes" -offset indent +.It Op \&Fl s \&Ar bytes +is produced by +.Li \&.Op \e&Fl s \e&Ar bytes +.El +.Pp +Here the strings +.Ql \&Fl +and +.Ql \&Ar +are not interpreted as macros. +Macros whose argument lists are parsed for callable arguments +are referred to +as parsed and macros which may be called from an argument +list are referred to as callable +throughout this document and in the companion quick reference +manual +.Xr mdoc 7 . +This is a technical +.Em faux pas +as almost all of the macros in +.Nm \-mdoc +are parsed, but as it was cumbersome to constantly refer to macros +as being callable and being able to call other macros, +the term parsed has been used. +.Ss Passing Space Characters in an Argument +Sometimes it is desirable to give as one argument a string +containing one or more blank space characters. +This may be necessary +to defeat the nine argument limit or to specify arguments to macros +which expect particular arrangement of items in the argument list. +For example, +the function macro +.Ql \&.Fn +expects the first argument to be the name of a function and any +remaining arguments to be function parameters. +As +.Tn "ANSI C" +stipulates the declaration of function parameters in the +parenthesized parameter list, each parameter is guaranteed +to be at minimum a two word string. +For example, +.Fa int foo . +.Pp +There are two possible ways to pass an argument which contains +an embedded space. +.Em Implementation note : +Unfortunately, the most convenient way +of passing spaces in between quotes by reassigning individual +arguments before parsing was fairly expensive speed wise +and space wise to implement in all the macros for +.Tn AT&T +.Xr troff . +It is not expensive for +.Xr groff +but for the sake of portability, has been limited +to the following macros which need +it the most: +.Pp +.Bl -tag -width 4n -offset indent -compact +.It Li \&Cd +Configuration declaration (section 4 +.Sx SYNOPSIS ) +.It Li \&Bl +Begin list (for the width specifier). +.It Li \&Em +Emphasized text. +.It Li \&Fn +Functions (sections two and four). +.It Li \&It +List items. +.It Li \&Li +Literal text. +.It Li \&Sy +Symbolic text. +.It Li \&%B +Book titles. +.It Li \&%J +Journal names. +.It Li \&%O +Optional notes for a reference. +.It Li \&%R +Report title (in a reference). +.It Li \&%T +Title of article in a book or journal. +.El +.Pp +One way of passing a string +containing blank spaces is to use the hard or unpaddable space character +.Ql \e\ , +that is, a blank space preceded by the escape character +.Ql \e . +This method may be used with any macro but has the side effect +of interfering with the adjustment of text +over the length of a line. +.Xr Troff +sees the hard space as if it were any other printable character and +cannot split the string into blank or newline separated pieces as one +would expect. +The method is useful for strings which are not expected +to overlap a line boundary. +For example: +.Bl -tag -width "fetch(char *str)" -offset indent +.It Fn fetch char\ *str +is created by +.Ql \&.Fn fetch char\e *str +.It Fn fetch "char *str" +can also be created by +.Ql \&.Fn fetch "\\*q*char *str\\*q" +.El +.Pp +If the +.Ql \e +or quotes +were omitted, +.Ql \&.Fn +would see three arguments and +the result would be: +.Pp +.Dl Fn fetch char *str +.Pp +For an example of what happens when the parameter list overlaps +a newline boundary, see the +.Sx BUGS +section. +.Ss Trailing Blank Space Characters +.Xr Troff +can be confused by blank space characters at the end of a line. +It +is a wise preventive measure to globally remove all blank spaces +from <blank-space><end-of-line> character sequences. +Should the need +arise to force a blank character at the end of a line, +it may be forced with an unpaddable space and the +.Ql \e& +escape character. +For example, +.Ql string\e\ \e& . +.Ss Escaping Special Characters +Special characters +like the newline character +.Ql \en , +are handled by replacing the +.Ql \e +with +.Ql \ee +(e.g. +.Ql \een ) +to preserve +the backslash. +.Sh THE ANATOMY OF A MAN PAGE +The body of a man page is easily constructed from a basic +template found in the file: +.Bd -literal -offset indent +\&.\e" /usr/share/misc/mdoc.template: +\&.\e" The following six lines are required. +\&.Dd Month day, year +\&.Os OPERATING_SYSTEM [version/release] +\&.Dt DOCUMENT_TITLE [section number] [volume] +\&.Sh NAME +\&.Sh SYNOPSIS +\&.Sh DESCRIPTION +\&.\e" The following requests should be uncommented and +\&.\e" used where appropriate. This next request is +\&.\e" for sections 2 and 3 function return values only. +\&.\e" .Sh RETURN VALUES +\&.\e" This next request is for sections 1, 6, 7 & 8 only +\&.\e" .Sh ENVIRONMENT +\&.\e" .Sh FILES +\&.\e" .Sh EXAMPLES +\&.\e" This next request is for sections 1, 6, 7 & 8 only +\&.\e" (command return values (to shell) and +\&.\e" fprintf/stderr type diagnostics) +\&.\e" .Sh DIAGNOSTICS +\&.\e" The next request is for sections 2 and 3 error +\&.\e" and signal handling only. +\&.\e" .Sh ERRORS +\&.\e" .Sh SEE ALSO +\&.\e" .Sh STANDARDS +\&.\e" .Sh HISTORY +\&.\e" .Sh AUTHORS +\&.\e" .Sh BUGS +.Ed +.Pp +The first items in the template are the macros +.Pq Li \&.Dd , \&.Os , \&.Dt ; +the document date, +the operating system the man page or subject source is developed +or modified for, +and the man page title +.Pq Em in upper case +along with the section of the manual the page +belongs in. +These macros identify the page, +and are discussed below in +.Sx TITLE MACROS . +.Pp +The remaining items in the template are section headers +.Pq Li \&.Sh ; +of which +.Sx NAME , +.Sx SYNOPSIS +and +.Sx DESCRIPTION +are mandatory. +The +headers are +discussed in +.Sx PAGE STRUCTURE DOMAIN , +after +presentation of +.Sx MANUAL DOMAIN . +Several content macros are used to demonstrate page layout macros; +reading about content macros before page layout macros is +recommended. +.Sh TITLE MACROS +The title macros are the first portion of the page structure +domain, but are presented first and separate for someone who +wishes to start writing a man page yesterday. +Three header macros designate the document title or manual page title, +the operating system, +and the date of authorship. +These macros are one called once at the very beginning of the document +and are used to construct the headers and footers only. +.Bl -tag -width 6n +.It Li \&.Dt DOCUMENT_TITLE section# [volume] +The document title is the +subject of the man page and must be in +.Tn CAPITALS +due to troff +limitations. +The section number may be 1,\ ...,\ 9, +and if it is specified, +the volume title may be omitted. +A volume title may be arbitrary or one of the following: +.\" .Cl +.\" USD UNIX User's Supplementary Documents +.\" .Cl +.\" PS1 UNIX Programmer's Supplementary Documents +.Pp +.Bl -column SMM -offset indent -compact +.It Li AMD NetBSD Ancestral Manual Documents +.It Li SMM NetBSD System Manager's Manual +.It Li URM NetBSD Reference Manual +.It Li PRM NetBSD Programmer's Manual +.It Li KM NetBSD Kernel Manual +.El +.Pp +The default volume labeling is +.Li URM +for sections 1, 6, and 7; +.Li SMM +for section 8; +.Li PRM +for sections 2, 3, 4, and 5; +.Li KM +for section 9. +.\" .Cl +.\" MMI UNIX Manual Master Index +.\" .Cl +.\" CON UNIX Contributed Software Manual +.\" .Cl +.\" LOC UNIX Local Manual +.It Li \&.Os operating_system release# +The name of the operating system +should be the common acronym, e.g. +.Tn BSD +or +.Tn ATT . +The release should be the standard release +nomenclature for the system specified, e.g. 4.3, 4.3+Tahoe, V.3, +V.4. +Unrecognized arguments are displayed as given in the page footer. +For instance, a typical footer might be: +.Pp +.Dl \&.Os BSD 4.3 +.Pp +or for a locally produced set +.Pp +.Dl \&.Os CS Department +.Pp +The Berkeley default, +.Ql \&.Os +without an argument, has been defined as +.Nx 1.4 +in the site specific file +.Pa /usr/share/tmac/tmac.doc-common . +Note, if the +.Ql \&.Os +macro is not present, the bottom left corner of the page +will be ugly. +.It Li \&.Dd month day, year +The date should be written formally: +.Pp +.ne 5 +.Dl January 25, 1989 +.sp +Note that the date must not be placed in quotes! +.El +.Sh MANUAL DOMAIN +.Ss What's in a name... +The manual domain macro names are derived from the day to day +informal language used to describe commands, subroutines and related +files. +Slightly +different variations of this language are used to describe +the three different aspects of writing a man page. +First, there is the description of +.Nm \-mdoc +macro request usage. +Second is the description of a +.Ux +command +.Em with +.Nm \-mdoc +macros and third, +the +description of a command to a user in the verbal sense; +that is, discussion of a command in the text of a man page. +.Pp +In the first case, +.Xr troff 1 +macros are themselves a type of command; +the general syntax for a troff command is: +.Bd -filled -offset indent +\&.Va argument1 argument2 ... argument9 +.Ed +.Pp +The +.Ql \&.Va +is a macro command or request, and anything following it is an argument to +be processed. +In the second case, +the description of a +.Ux +command using the content macros is a +bit more involved; +a typical +.Sx SYNOPSIS +command line might be displayed as: +.Bd -filled -offset indent +.Nm filter +.Op Fl flag +.Ar infile outfile +.Ed +.Pp +Here, +.Nm filter +is the command name and the +bracketed string +.Fl flag +is a +.Em flag +argument designated as optional by the option brackets. +In +.Nm \-mdoc +terms, +.Ar infile +and +.Ar outfile +are +called +.Em arguments . +The macros which formatted the above example: +.Bd -literal -offset indent +\&.Nm filter +\&.Op \&Fl flag +\&.Ar infile outfile +.Ed +.Pp +In the third case, discussion of commands and command syntax +includes both examples above, but may add more detail. +The +arguments +.Ar infile +and +.Ar outfile +from the example above might be referred to as +.Em operands +or +.Em file arguments . +Some command line argument lists are quite long: +.Bl -tag -width make -offset indent +.It Nm make +.Op Fl eiknqrstv +.Op Fl D Ar variable +.Op Fl d Ar flags +.Op Fl f Ar makefile +.Bk -words +.Op Fl I Ar directory +.Ek +.Op Fl j Ar max_jobs +.Op Ar variable=value +.Bk -words +.Op Ar target ... +.Ek +.El +.Pp +Here one might talk about the command +.Nm make +and qualify the argument +.Ar makefile , +as an argument to the flag, +.Fl f , +or discuss the optional +file +operand +.Ar target . +In the verbal context, such detail can prevent confusion, +however the +.Nm \-mdoc +package +does not have a macro for an argument +.Em to +a flag. +Instead the +.Ql \&Ar +argument macro is used for an operand or file argument like +.Ar target +as well as an argument to a flag like +.Ar variable . +The make command line was produced from: +.Bd -literal -offset indent +\&.Nm make +\&.Op Fl eiknqrstv +\&.Op Fl D Ar variable +\&.Op Fl d Ar flags +\&.Op Fl f Ar makefile +\&.Op Fl I Ar directory +\&.Op Fl j Ar max_jobs +\&.Op Ar variable=value +\&.Bk -words +\&.Op Ar target ... +\&.Ek +.Ed +.Pp +The +.Ql \&.Bk +and +.Ql \&.Ek +macros are explained in +.Sx Keeps . +.Ss General Syntax +The manual domain and general text domain macros share a similar +syntax with a few minor deviations: +.Ql \&.Ar , +.Ql \&.Fl , +.Ql \&.Nm , +and +.Ql \&.Pa +differ only when called without arguments; +.Ql \&.Fn +and +.Ql \&.Xr +impose an order on their argument lists +and the +.Ql \&.Op +and +.Ql \&.Fn +macros +have nesting limitations. +All content macros +are capable of recognizing and properly handling punctuation, +provided each punctuation character is separated by a leading space. +If an request is given: +.Pp +.Dl \&.Li sptr, ptr), +.Pp +The result is: +.Pp +.Dl Li sptr, ptr), +.Pp +The punctuation is not recognized and all is output in the +literal font. If the punctuation is separated by a leading +white space: +.Pp +.Dl \&.Li "sptr , ptr ) ," +.Pp +The result is: +.Pp +.Dl Li sptr , ptr ) , +.Pp +The punctuation is now recognized and is output in the +default font distinguishing it from the strings in literal font. +.Pp +To remove the special meaning from a punctuation character +escape it with +.Ql \e& . +.Xr Troff +is limited as a macro language, and has difficulty +when presented with a string containing +a member of the mathematical, logical or +quotation set: +.Bd -literal -offset indent-two +\&{+,\-,/,*,\&%,<,>,<=,>=,=,==,&,`,',"} +.Ed +.Pp +The problem is that +.Xr troff +may assume it is supposed to actually perform the operation +or evaluation suggested by the characters. To prevent +the accidental evaluation of these characters, +escape them with +.Ql \e& . +Typical syntax is shown in the first content macro displayed +below, +.Ql \&.Ad . +.Ss Address Macro +The address macro identifies an address construct +of the form addr1[,addr2[,addr3]]. +.Pp +.Dl Usage: .Ad address ... \*(Pu +.Bl -tag -width ".Ad f1 , f2 , f3 :" -compact -offset 14n +.It Li \&.Ad addr1 +.Ad addr1 +.It Li \&.Ad addr1\ . +.Ad addr1 . +.It Li \&.Ad addr1\ , file2 +.Ad addr1 , file2 +.It Li \&.Ad f1\ , f2\ , f3\ : +.Ad f1 , f2 , f3 : +.It Li \&.Ad addr\ )\ )\ , +.Ad addr ) ) , +.El +.Pp +It is an error to call +.Li \&.Ad +without arguments. +.Li \&.Ad +is callable by other macros and is parsed. +.Ss Argument Macro +The +.Li \&.Ar +argument macro may be used whenever +a command line argument is referenced. +.Pp +.Dl Usage: .Ar argument ... \*(Pu +.Bl -tag -width ".Ar file1 file2" -compact -offset 15n +.It Li \&.Ar +.Ar +.It Li \&.Ar file1 +.Ar file1 +.It Li \&.Ar file1\ . +.Ar file1 . +.It Li \&.Ar file1 file2 +.Ar file1 file2 +.It Li \&.Ar f1 f2 f3\ : +.Ar f1 f2 f3 : +.It Li \&.Ar file\ )\ )\ , +.Ar file ) ) , +.El +.Pp +If +.Li \&.Ar +is called without arguments +.Ql Ar +is assumed. +The +.Li \&.Ar +macro is parsed and is callable. +.Ss Configuration Declaration (section four only) +The +.Ql \&.Cd +macro is used to demonstrate a +.Xr config 8 +declaration for a device interface in a section four manual. +This macro accepts quoted arguments (double quotes only). +.Pp +.Bl -tag -width "device le0 at scode?" -offset indent +.It Cd "device le0 at scode?" +produced by: +.Ql ".Cd device le0 at scode?" . +.El +.Ss Command Modifier +The command modifier is identical to the +.Ql \&.Fl +(flag) command with the exception +the +.Ql \&.Cm +macro does not assert a dash +in front of every argument. +Traditionally flags are marked by the +preceding dash, some commands or subsets of commands do not use them. +Command modifiers may also be specified in conjunction with interactive +commands such as editor commands. +See +.Sx Flags . +.Ss Defined Variables +A variable which is defined in an include file is specified +by the macro +.Ql \&.Dv . +.Pp +.Dl Usage: .Dv defined_variable ... \*(Pu +.Bl -tag -width ".Dv MAXHOSTNAMELEN" -compact -offset 14n +.It Li ".Dv MAXHOSTNAMELEN" +.Dv MAXHOSTNAMELEN +.It Li ".Dv TIOCGPGRP )" +.Dv TIOCGPGRP ) +.El +.Pp +It is an error to call +.Ql \&.Dv +without arguments. +.Ql \&.Dv +is parsed and is callable. +.Ss Errno's (Section two only) +The +.Ql \&.Er +errno macro specifies the error return value +for section two library routines. +The second example +below shows +.Ql \&.Er +used with the +.Ql \&.Bq +general text domain macro, as it would be used in +a section two manual page. +.Pp +.Dl Usage: .Er ERRNOTYPE ... \*(Pu +.Bl -tag -width ".Bq Er ENOTDIR" -compact -offset 14n +.It Li \&.Er ENOENT +.Er ENOENT +.It Li \&.Er ENOENT\ )\ ; +.Er ENOENT ) ; +.It Li \&.Bq \&Er ENOTDIR +.Bq Er ENOTDIR +.El +.Pp +It is an error to call +.Ql \&.Er +without arguments. +The +.Ql \&.Er +macro is parsed and is callable. +.Ss Environment Variables +The +.Ql \&.Ev +macro specifies an environment variable. +.Pp +.Dl Usage: .Ev argument ... \*(Pu +.Bl -tag -width ".Ev PRINTER ) ) ," -compact -offset 14n +.It Li \&.Ev DISPLAY +.Ev DISPLAY +.It Li \&.Ev PATH\ . +.Ev PATH . +.It Li \&.Ev PRINTER\ )\ )\ , +.Ev PRINTER ) ) , +.El +.Pp +It is an error to call +.Ql \&.Ev +without arguments. +The +.Ql \&.Ev +macro is parsed and is callable. +.Ss Function Argument +The +.Ql \&.Fa +macro is used to refer to function arguments (parameters) +outside of the +.Sx SYNOPSIS +section of the manual or inside +the +.Sx SYNOPSIS +section should a parameter list be too +long for the +.Ql \&.Fn +macro and the enclosure macros +.Ql \&.Fo +and +.Ql \&.Fc +must be used. +.Ql \&.Fa +may also be used to refer to structure members. +.Pp +.Dl Usage: .Fa function_argument ... \*(Pu +.Bl -tag -width ".Fa d_namlen\ )\ )\ ," -compact -offset 14n +.It Li \&.Fa d_namlen\ )\ )\ , +.Fa d_namlen ) ) , +.It Li \&.Fa iov_len +.Fa iov_len +.El +.Pp +It is an error to call +.Ql \&.Fa +without arguments. +.Ql \&.Fa +is parsed and is callable. +.Ss Function Declaration +The +.Ql \&.Fd +macro is used in the +.Sx SYNOPSIS +section with section two or three +functions. +The +.Ql \&.Fd +macro does not call other macros and is not callable by other +macros. +.Pp +.Dl Usage: .Fd include_file (or defined variable) +.Pp +In the +.Sx SYNOPSIS +section a +.Ql \&.Fd +request causes a line break if a function has already been presented +and a break has not occurred. +This leaves a nice vertical space +in between the previous function call and the declaration for the +next function. +.Ss Flags +The +.Ql \&.Fl +macro handles command line flags. +It prepends +a dash, +.Ql \- , +to the flag. +For interactive command flags, which +are not prepended with a dash, the +.Ql \&.Cm +(command modifier) +macro is identical, but without the dash. +.Pp +.Dl Usage: .Fl argument ... \*(Pu +.Bl -tag -width ".Fl \-s \-t \-v" -compact -offset 14n +.It Li \&.Fl +.Fl +.It Li \&.Fl cfv +.Fl cfv +.It Li \&.Fl cfv\ . +.Fl cfv . +.It Li \&.Fl s v t +.Fl s v t +.It Li \&.Fl -\ , +.Fl - , +.It Li \&.Fl xyz\ )\ , +.Fl xyz ) , +.El +.Pp +The +.Ql \&.Fl +macro without any arguments results +in a dash representing stdin/stdout. +Note that giving +.Ql \&.Fl +a single dash, will result in two dashes. +The +.Ql \&.Fl +macro is parsed and is callable. +.Ss Functions (library routines) +The .Fn macro is modeled on ANSI C conventions. +.Bd -literal +Usage: .Fn [type] function [[type] parameters ... \*(Pu] +.Ed +.Bl -tag -width ".Fn .int align. .const * char *sptrsxx" -compact +.It Li "\&.Fn getchar" +.Fn getchar +.It Li "\&.Fn strlen ) ," +.Fn strlen ) , +.It Li \&.Fn "\\*qint align\\*q" "\\*qconst * char *sptrs\\*q" , +.Fn "int align" "const * char *sptrs" , +.El +.Pp +It is an error to call +.Ql \&.Fn +without any arguments. +The +.Ql \&.Fn +macro +is parsed and is callable, +note that any call to another macro signals the end of +the +.Ql \&.Fn +call (it will close-parenthesis at that point). +.Pp +For functions that have more than eight parameters (and this +is rare), the +macros +.Ql \&.Fo +(function open) +and +.Ql \&.Fc +(function close) +may be used with +.Ql \&.Fa +(function argument) +to get around the limitation. For example: +.Bd -literal -offset indent +\&.Fo "int res_mkquery" +\&.Fa "int op" +\&.Fa "char *dname" +\&.Fa "int class" +\&.Fa "int type" +\&.Fa "char *data" +\&.Fa "int datalen" +\&.Fa "struct rrec *newrr" +\&.Fa "char *buf" +\&.Fa "int buflen" +\&.Fc +.Ed +.Pp +Produces: +.Bd -filled -offset indent +.Fo "int res_mkquery" +.Fa "int op" +.Fa "char *dname" +.Fa "int class" +.Fa "int type" +.Fa "char *data" +.Fa "int datalen" +.Fa "struct rrec *newrr" +.Fa "char *buf" +.Fa "int buflen" +.Fc +.Ed +.Pp +The +.Ql \&.Fo +and +.Ql \&.Fc +macros are parsed and are callable. +In the +.Sx SYNOPSIS +section, the function will always begin at +the beginning of line. +If there is more than one function +presented in the +.Sx SYNOPSIS +section and a function type has not been +given, a line break will occur, leaving a nice vertical space +between the current function name and the one prior. +At the moment, +.Ql \&.Fn +does not check its word boundaries +against troff line lengths and may split across a newline +ungracefully. +This will be fixed in the near future. +.Ss Function Type +This macro is intended for the +.Sx SYNOPSIS +section. +It may be used +anywhere else in the man page without problems, but its main purpose +is to present the function type in kernel normal form for the +.Sx SYNOPSIS +of sections two and three +(it causes a page break allowing the function name to appear +on the next line). +.Pp +.Dl Usage: .Ft type ... \*(Pu +.Bl -tag -width "\&.Ft struct stat" -offset 14n -compact +.It Li \&.Ft struct stat +.Ft struct stat +.El +.Pp +The +.Ql \&.Ft +request is not callable by other macros. +.Ss Interactive Commands +The +.Ql \&.Ic +macro designates an interactive or internal command. +.Pp +.Dl Usage: .Li argument ... \*(Pu +.Bl -tag -width ".Ic setenv , unsetenvxx" -compact -offset 14n +.It Li \&.Ic :wq +.Ic :wq +.It Li \&.Ic do while {...} +.Ic do while {...} +.It Li \&.Ic setenv\ , unsetenv +.Ic setenv , unsetenv +.El +.Pp +It is an error to call +.Ql \&.Ic +without arguments. +The +.Ql \&.Ic +macro is parsed and is callable. +.Ss Literals +The +.Ql \&.Li +literal macro may be used for special characters, +variable constants, anything which should be displayed as it +would be typed. +.Pp +.Dl Usage: .Li argument ... \*(Pu +.Bl -tag -width ".Li cntrl-D ) ," -compact -offset 14n +.It Li \&.Li \een +.Li \en +.It Li \&.Li M1 M2 M3\ ; +.Li M1 M2 M3 ; +.It Li \&.Li cntrl-D\ )\ , +.Li cntrl-D ) , +.It Li \&.Li 1024\ ... +.Li 1024 ... +.El +.Pp +The +.Ql \&.Li +macro is parsed and is callable. +.Ss Name Macro +The +.Ql \&.Nm +macro is used for the document title or subject name. +It has the peculiarity of remembering the first +argument it was called with, which should +always be the subject name of the page. +When called without +arguments, +.Ql \&.Nm +regurgitates this initial name for the sole purpose +of making less work for the author. +If trailing punctuation is required with this feature, +use +.Qq +as a first argument to +.Ql \&.Nm . +Note: +a section two +or three document function name is addressed with the +.Ql \&.Nm +in the +.Sx NAME +section, and with +.Ql \&.Fn +in the +.Sx SYNOPSIS +and remaining sections. +For interactive commands, such as the +.Ql while +command keyword in +.Xr csh 1 , +the +.Ql \&.Ic +macro should be used. +While the +.Ql \&.Ic +is nearly identical +to +.Ql \&.Nm , +it can not recall the first argument it was invoked with. +.Pp +.Dl Usage: .Nm argument ... \*(Pu +.Bl -tag -width ".Nm mdoc.samples" -compact -offset 14n +.It Li \&.Nm mdoc.samples +.Nm mdoc.samples +.It Li \&.Nm \e-mdoc +.Nm \-mdoc +.It Li \&.Nm foo\ )\ )\ , +.Nm foo ) ) , +.It Li \&.Nm +.Nm +.It Li \&.Nm \&"\&"\ : +.Nm "" : +.El +.Pp +The +.Ql \&.Nm +macro is parsed and is callable. +.Ss Options +The +.Ql \&.Op +macro +places option brackets around the any remaining arguments on the command +line, and places any +trailing punctuation outside the brackets. +The macros +.Ql \&.Oc +and +.Ql \&.Oo +may be used across one or more lines. +.Pp +.Dl Usage: .Op options ... \*(Pu +.Bl -tag -width ".Op Fl c Ar objfil Op Ar corfil ," -compact -offset indent +.It Li \&.Op +.Op +.It Li ".Op Fl k" +.Op Fl k +.It Li ".Op Fl k ) ." +.Op Fl k ) . +.It Li ".Op Fl k Ar kookfile" +.Op Fl k Ar kookfile +.It Li ".Op Fl k Ar kookfile ," +.Op Fl k Ar kookfile , +.It Li ".Op Ar objfil Op Ar corfil" +.Op Ar objfil Op Ar corfil +.It Li ".Op Fl c Ar objfil Op Ar corfil ," +.Op Fl c Ar objfil Op Ar corfil , +.It Li \&.Op word1 word2 +.Op word1 word2 +.El +.Pp +The +.Ql \&.Oc +and +.Ql \&.Oo +macros: +.Bd -literal -offset indent +\&.Oo +\&.Op \&Fl k \&Ar kilobytes +\&.Op \&Fl i \&Ar interval +\&.Op \&Fl c \&Ar count +\&.Oc +.Ed +.Pp +Produce: +.Oo +.Op Fl k Ar kilobytes +.Op Fl i Ar interval +.Op Fl c Ar count +.Oc +.Pp +The macros +.Ql \&.Op , +.Ql \&.Oc +and +.Ql \&.Oo +are parsed and are callable. +.Ss Pathnames +The +.Ql \&.Pa +macro formats path or file names. +.Pp +.Dl Usage: .Pa pathname \*(Pu +.Bl -tag -width ".Pa /tmp/fooXXXXX ) ." -compact -offset 14n +.It Li \&.Pa /usr/share +.Pa /usr/share +.It Li \&.Pa /tmp/fooXXXXX\ )\ . +.Pa /tmp/fooXXXXX ) . +.El +.Pp +The +.Ql \&.Pa +macro is parsed and is callable. +.Ss Variables +Generic variable reference: +.Pp +.Dl Usage: .Va variable ... \*(Pu +.Bl -tag -width ".Va char s ] ) ) ," -compact -offset 14n +.It Li \&.Va count +.Va count +.It Li \&.Va settimer , +.Va settimer , +.It Li \&.Va int\ *prt\ )\ : +.Va int\ *prt ) : +.It Li \&.Va char\ s\ ]\ )\ )\ , +.Va char\ s ] ) ) , +.El +.Pp +It is an error to call +.Ql \&.Va +without any arguments. +The +.Ql \&.Va +macro is parsed and is callable. +.Ss Manual Page Cross References +The +.Ql \&.Xr +macro expects the first argument to be +a manual page name, and the second argument, if it exists, +to be either a section page number or punctuation. +Any +remaining arguments are assumed to be punctuation. +.Pp +.Dl Usage: .Xr man_page [1,...,9] \*(Pu +.Bl -tag -width ".Xr mdoc 7 ) ) ," -compact -offset 14n +.It Li \&.Xr mdoc +.Xr mdoc +.It Li \&.Xr mdoc\ , +.Xr mdoc , +.It Li \&.Xr mdoc 7 +.Xr mdoc 7 +.It Li \&.Xr mdoc 7\ )\ )\ , +.Xr mdoc 7 ) ) , +.El +.Pp +The +.Ql \&.Xr +macro is parsed and is callable. +It is an error to call +.Ql \&.Xr +without +any arguments. +.Sh GENERAL TEXT DOMAIN +.Ss AT&T Macro +.Bd -literal -offset indent -compact +Usage: .At [v1 .. v7 | 32v | V.1 | V.4] ... \*(Pu +.Ed +.Bl -tag -width ".At v6 ) ," -compact -offset 14n +.It Li ".At" +.At +.It Li ".At v6 ." +.At v6 . +.El +.Pp +The +.Ql \&.At +macro is +.Em not +parsed and +.Em not +callable. It accepts at most two arguments. +.Ss BSD Macro +.Dl Usage: .Bx [Version/release] ... \*(Pu +.Bl -tag -width ".Bx 4.3 ) ," -compact -offset 14n +.It Li ".Bx" +.Bx +.It Li ".Bx 4.3 ." +.Bx 4.3 . +.El +.Pp +The +.Ql \&.Bx +macro is parsed and is callable. +.Ss NetBSD Macro +.Dl Usage: .Nx [Version/release] ... \*(Pu +.Bl -tag -width ".Nx 1.4 ) ," -compact -offset 14n +.It Li ".Nx" +.Nx +.It Li ".Nx 1.4 ." +.Nx 1.4 . +.El +.Pp +The +.Ql \&.Nx +macro is parsed and is callable. +.Ss FreeBSD Macro +.Dl Usage: .Fx [Version/release] ... \*(Pu +.Bl -tag -width ".Fx 2.2 ) ," -compact -offset 14n +.It Li ".Fx" +.Fx +.It Li ".Fx 2.2 ." +.Fx 2.2 . +.El +.Pp +The +.Ql \&.Fx +macro is parsed and is callable. +.Ss UNIX Macro +.Dl Usage: .Ux ... \*(Pu +.Bl -tag -width ".Ux 4.3 ) ," -compact -offset 14n +.It Li ".Ux" +.Ux +.El +.Pp +The +.Ql \&.Ux +macro is parsed and is callable. +.Ss Emphasis Macro +Text may be stressed or emphasized with the +.Ql \&.Em +macro. +The usual font for emphasis is italic. +.Pp +.Dl Usage: .Em argument ... \*(Pu +.Bl -tag -width ".Em vide infra ) ) ," -compact -offset 14n +.It Li ".Em does not" +.Em does not +.It Li ".Em exceed 1024 ." +.Em exceed 1024 . +.It Li ".Em vide infra ) ) ," +.Em vide infra ) ) , +.El +.\" .Pp +.\" The emphasis can be forced across several lines of text by using +.\" the +.\" .Ql \&.Bf +.\" macro discussed in +.\" .Sx Modes +.\" under +.\" .Sx PAGE STRUCTURE DOMAIN . +.\" .Pp +.\" .Bf -emphasis +.\" We are certain the reason most people desire a Harvard MBA +.\" so they can become to be successful philanthropists. Only +.\" mathematicians and physicists go to graduate school strictly +.\" to acquire infinite wealthy and fame. Its that inifinity +.\" word that does it to them. Ruins them. +.\" .Ef +.Pp +The +.Ql \&.Em +macro is parsed and is callable. +It is an error to call +.Ql \&.Em +without arguments. +.Ss Enclosure and Quoting Macros +The concept of enclosure is similar to quoting. +The object being to enclose one or more strings between +a pair of characters like quotes or parentheses. +The terms quoting and enclosure are used +interchangeably throughout this document. +Most of the +one line enclosure macros end +in small letter +.Ql q +to give a hint of quoting, but there are a few irregularities. +For each enclosure macro +there is also a pair of open and close macros which end +in small letters +.Ql o +and +.Ql c +respectively. +These can be used across one or more lines of text +and while they have nesting limitations, the one line quote macros +can be used inside +of them. +.Pp +.ne 5 +.Bd -filled -offset indent +.Bl -column "quote " "close " "open " "Enclose Stringx(in XX) " XXstringXX +.Em " Quote Close Open Function Result" +\&.Aq .Ac .Ao Angle Bracket Enclosure <string> +\&.Bq .Bc .Bo Bracket Enclosure [string] +\&.Dq .Dc .Do Double Quote ``string'' + .Ec .Eo Enclose String (in XX) XXstringXX +\&.Pq .Pc .Po Parenthesis Enclosure (string) +\&.Ql Quoted Literal `st' or string +\&.Qq .Qc .Qo Straight Double Quote "string" +\&.Sq .Sc .So Single Quote `string' +.El +.Ed +.Pp +Except for the irregular macros noted below, all +of the quoting macros are parsed and callable. +All handle punctuation properly, as long as it +is presented one character at a time and separated by spaces. +The quoting macros examine opening and closing punctuation +to determine whether it comes before or after the +enclosing string. This makes some nesting possible. +.Bl -tag -width xxx,xxxx +.It Li \&.Ec , \&.Eo +These macros expect the first argument to be the +opening and closing strings respectively. +.It Li \&.Ql +The quoted literal macro behaves differently for +.Xr troff +than +.Xr nroff . +If formatted with +.Xr nroff , +a quoted literal is always quoted. If formatted with +troff, an item is only quoted if the width +of the item is less than three constant width characters. +This is to make short strings more visible where the font change +to literal (constant width) is less noticeable. +.It Li \&.Pf +The prefix macro is not callable, but it is parsed: +.Bl -tag -width "(namexx" -offset indent +.It Li ".Pf ( Fa name2" +becomes +.Pf ( Fa name2 . +.El +.It Li \&.Ns +The +.Ql \&.Ns +(no space) macro, which +.Em is +callable, +performs the analogous suffix function. +.It Li ".Ap +The \&.Ap macro inserts an apostrophe and exits any special text modes, +continuing in +.Li \&.No +mode. +.El +.Pp +.ne 4 +Examples of quoting: +.Bl -tag -width ".Aq Pa ctype.h ) ,xxxxxxxx" -compact -offset indent +.It Li \&.Aq +.Aq +.It Li \&.Aq \&Ar ctype.h\ )\ , +.Aq Ar ctype.h ) , +.It Li \&.Bq +.Bq +.It Li \&.Bq \&Em Greek \&, French \&. +.Bq Em Greek , French . +.It Li \&.Dq +.Dq +.It Li ".Dq string abc ." +.Dq string abc . +.It Li ".Dq \'^[A-Z]\'" +.Dq \'^[A-Z]\' +.It Li "\&.Ql man mdoc" +.Ql man mdoc +.It Li \&.Qq +.Qq +.It Li "\&.Qq string ) ," +.Qq string ) , +.It Li "\&.Qq string Ns )," +.Qq string Ns ), +.It Li \&.Sq +.Sq +.It Li "\&.Sq string +.Sq string +.It Li "\&.Em or Ap ing +.Em or Ap ing +.El +.Pp +For a good example of nested enclosure macros, see the +.Ql \&.Op +option macro. +It was created from the same +underlying enclosure macros as those presented in the list +above. +The +.Ql \&.Xo +and +.Ql \&.Xc +extended argument list macros +were also built from the same underlying routines and are a good +example of +.Nm \-mdoc +macro usage at its worst. +.Ss No\-Op or Normal Text Macro +The macro +.Li \&.No +is +a hack for words in a macro command line which should +.Em not +be formatted and follows the conventional syntax +for content macros. +.Ss No Space Macro +The +.Ql \&.Ns +macro eliminates unwanted spaces in between macro requests. +It is useful for old style argument lists where there is no space +between the flag and argument: +.Bl -tag -width ".Op Fl I Ns Ar directoryxx" -offset indent +.It Li ".Op Fl I Ns Ar directory" +produces +.Op Fl I Ns Ar directory +.El +.Pp +Note: the +.Ql \&.Ns +macro always invokes the +.Ql \&.No +macro after eliminating the space unless another macro name +follows it. +The macro +.Ql \&.Ns +is parsed and is callable. +.Ss Section Cross References +The +.Ql \&.Sx +macro designates a reference to a section header +within the same document. +It is parsed and is callable. +.Pp +.Bl -tag -width "Li \&.Sx FILES" -offset 14n +.It Li \&.Sx FILES +.Sx FILES +.El +.Ss Symbolic +The symbolic emphasis macro is generally a boldface macro in +either the symbolic sense or the traditional English usage. +.Pp +.Dl Usage: .Sy symbol ... \*(Pu +.Bl -tag -width ".Sy Important Noticex" -compact -offset 14n +.It Li \&.Sy Important Notice +.Sy Important Notice +.El +.Pp +The +.Ql \&.Sy +macro is parsed and is callable. +Arguments to +.Ql \&.Sy +may be quoted. +.Ss References and Citations +The following macros make a modest attempt to handle references. +At best, the macros make it convenient to manually drop in a subset of +refer style references. +.Pp +.Bl -tag -width 6n -offset indent -compact +.It Li ".Rs" +Reference Start. +Causes a line break and begins collection +of reference information until the +reference end macro is read. +.It Li ".Re" +Reference End. +The reference is printed. +.It Li ".%A" +Reference author name, one name per invocation. +.It Li ".%B" +Book title. +.It Li ".\&%C" +City/place. +.It Li ".\&%D" +Date. +.It Li ".%J" +Journal name. +.It Li ".%N" +Issue number. +.It Li ".%O" +Optional information. +.It Li ".%P" +Page number. +.It Li ".%R" +Report name. +.It Li ".%T" +Title of article. +.It Li ".%V" +Volume(s). +.El +.Pp +The macros beginning with +.Ql % +are not callable, and are parsed only for the trade name macro which +returns to its caller. +(And not very predictably at the moment either.) +The purpose is to allow trade names +to be pretty printed in +.Xr troff Ns / Ns Xr ditroff +output. +.Ss Trade Names (or Acronyms and Type Names) +The trade name macro is generally a small caps macro for +all upper case words longer than two characters. +.Pp +.Dl Usage: .Tn symbol ... \*(Pu +.Bl -tag -width ".Tn ASCII" -compact -offset 14n +.It Li \&.Tn DEC +.Tn DEC +.It Li \&.Tn ASCII +.Tn ASCII +.El +.Pp +The +.Ql \&.Tn +macro +is parsed and is callable by other macros. +.Ss Extended Arguments +The +.Li \&.Xo +and +.Li \&.Xc +macros allow one to extend an argument list +on a macro boundary. +Argument lists cannot +be extended within a macro +which expects all of its arguments on one line such +as +.Ql \&.Op . +.Pp +Here is an example of +.Ql \&.Xo +using the space mode macro to turn spacing off: +.Bd -literal -offset indent +\&.Sm off +\&.It Xo Sy I Ar operation +\&.No \een Ar count No \een +\&.Xc +\&.Sm on +.Ed +.Pp +Produces +.Bd -filled -offset indent +.Bl -tag -width flag -compact +.Sm off +.It Xo Sy I Ar operation +.No \en Ar count No \en +.Xc +.Sm on +.El +.Ed +.Pp +Another one: +.Bd -literal -offset indent +\&.Sm off +\&.It Cm S No \&/ Ar old_pattern Xo +\&.No \&/ Ar new_pattern +\&.No \&/ Op Cm g +\&.Xc +\&.Sm on +.Ed +.Pp +Produces +.Bd -filled -offset indent +.Bl -tag -width flag -compact +.Sm off +.It Cm S No \&/ Ar old_pattern Xo +.No \&/ Ar new_pattern +.No \&/ Op Cm g +.Xc +.Sm on +.El +.Ed +.Pp +Another example of +.Ql \&.Xo +and using enclosure macros: +Test the value of an variable. +.Bd -literal -offset indent +\&.It Xo +\&.Ic .ifndef +\&.Oo \e&! Oc Ns Ar variable +\&.Op Ar operator variable ... +\&.Xc +.Ed +.Pp +Produces +.Bd -filled -offset indent +.Bl -tag -width flag -compact +.It Xo +.Ic .ifndef +.Oo \&! Oc Ns Ar variable +.Op Ar operator variable ... +.Xc +.El +.Ed +.Pp +All of the above examples have used the +.Ql \&.Xo +macro on the argument list of the +.Ql \&.It +(list-item) +macro. +The extend macros are not used very often, and when they are +it is usually to extend the list-item argument list. +Unfortunately, this is also where the extend macros are the +most finicky. +In the first two examples, spacing was turned off; +in the third, spacing was desired in part of the output but +not all of it. +To make these macros work in this situation make sure +the +.Ql \&.Xo +and +.Ql \&.Xc +macros are placed as shown in the third example. +If the +.Ql \&.Xo +macro is not alone on the +.Ql \&.It +argument list, spacing will be unpredictable. +The +.Ql \&.Ns +(no space macro) +must not occur as the first or last macro on a line +in this situation. +Out of 900 manual pages (about 1500 actual pages) +currently released with +.Bx +only fifteen use the +.Ql \&.Xo +macro. +.Sh PAGE STRUCTURE DOMAIN +.Ss Section Headers +The first three +.Ql \&.Sh +section header macros +list below are required in every +man page. +The remaining section headers +are recommended at the discretion of the author +writing the manual page. +The +.Ql \&.Sh +macro can take up to nine arguments. +It is parsed and but is not callable. +.Bl -tag -width ".Sh SYNOPSIS" +.It \&.Sh NAME +The +.Ql \&.Sh NAME +macro is mandatory. +If not specified, +the headers, footers and page layout defaults +will not be set and things will be rather unpleasant. +The +.Sx NAME +section consists of at least three items. +The first is the +.Ql \&.Nm +name macro naming the subject of the man page. +The second is the Name Description macro, +.Ql \&.Nd , +which separates the subject +name from the third item, which is the description. +The +description should be the most terse and lucid possible, +as the space available is small. +.It \&.Sh SYNOPSIS +The +.Sx SYNOPSIS +section describes the typical usage of the +subject of a man page. +The macros required +are either +.Ql ".Nm" , +.Ql ".Cd" , +.Ql ".Fn" , +(and possibly +.Ql ".Fo" , +.Ql ".Fc" , +.Ql ".Fd" , +.Ql ".Ft" +macros). +The function name +macro +.Ql ".Fn" +is required +for manual page sections 2 and 3, the command and general +name macro +.Ql \&.Nm +is required for sections 1, 5, 6, 7, 8. +Section 4 manuals require a +.Ql ".Nm" , ".Fd" +or a +.Ql ".Cd" +configuration device usage macro. +Several other macros may be necessary to produce +the synopsis line as shown below: +.Pp +.Bd -filled -offset indent +.Nm cat +.Op Fl benstuv +.Op Fl +.Ar +.Ed +.Pp +The following macros were used: +.Pp +.Dl \&.Nm cat +.Dl \&.Op \&Fl benstuv +.Dl \&.Op \&Fl +.Dl \&.Ar +.Pp +.Sy Note : +The macros +.Ql \&.Op , +.Ql \&.Fl , +and +.Ql \&.Ar +recognize the pipe bar character +.Ql \*(Ba , +so a command line such as: +.Pp +.Dl ".Op Fl a | Fl b" +.Pp +will not go orbital. +.Xr Troff +normally interprets a \*(Ba as a special operator. +See +.Sx PREDEFINED STRINGS +for a usable \*(Ba +character in other situations. +.It \&.Sh DESCRIPTION +In most cases the first text in the +.Sx DESCRIPTION +section +is a brief paragraph on the command, function or file, +followed by a lexical list of options and respective +explanations. +To create such a list, the +.Ql \&.Bl +begin-list, +.Ql \&.It +list-item and +.Ql \&.El +end-list +macros are used (see +.Sx Lists and Columns +below). +.El +.Pp +The following +.Ql \&.Sh +section headers are part of the +preferred manual page layout and must be used appropriately +to maintain consistency. +They are listed in the order +in which they would be used. +.Bl -tag -width SYNOPSIS +.It \&.Sh ENVIRONMENT +The +.Sx ENVIRONMENT +section should reveal any related +environment +variables and clues to their behavior and/or usage. +.It \&.Sh EXAMPLES +There are several ways to create examples. +See +the +.Sx EXAMPLES +section below +for details. +.It \&.Sh FILES +Files which are used or created by the man page subject +should be listed via the +.Ql \&.Pa +macro in the +.Sx FILES +section. +.It \&.Sh SEE ALSO +References to other material on the man page topic and +cross references to other relevant man pages should +be placed in the +.Sx SEE ALSO +section. +Cross references +are specified using the +.Ql \&.Xr +macro. +At this time +.Xr refer 1 +style references are not accommodated. +.Pp +It is recommended that the cross references are sorted on the section +number, and then alphabetically on the names within a section. +.It \&.Sh STANDARDS +If the command, library function or file adheres to a +specific implementation such as +.St -p1003.2 +or +.St -ansiC +this should be noted here. +If the +command does not adhere to any standard, its history +should be noted in the +.Sx HISTORY +section. +.It \&.Sh HISTORY +Any command which does not adhere to any specific standards +should be outlined historically in this section. +.It \&.Sh AUTHORS +Credits, if need be, should be placed here. +.It \&.Sh DIAGNOSTICS +Diagnostics from a command should be placed in this section. +.It \&.Sh ERRORS +Specific error handling, especially from library functions +(man page sections 2 and 3) should go here. +The +.Ql \&.Er +macro is used to specify an errno. +.It \&.Sh BUGS +Blatant problems with the topic go here... +.El +.Pp +User specified +.Ql \&.Sh +sections may be added, +for example, this section was set with: +.Bd -literal -offset 14n +\&.Sh PAGE LAYOUT MACROS +.Ed +.Ss Paragraphs and Line Spacing. +.Bl -tag -width 6n +.It \&.Pp +The \&.Pp paragraph command may +be used to specify a line space where necessary. +The macro is not necessary after a +.Ql \&.Sh +or +.Ql \&.Ss +macro or before +a +.Ql \&.Bl +macro. +(The +.Ql \&.Bl +macro asserts a vertical distance unless the -compact flag is given). +.El +.\" This worked with version one, need to redo for version three +.\" .Pp +.\" .Ds I +.\" .Cw (ax+bx+c) \ is\ produced\ by\ \& +.\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\& +.\" .Cl Cx \t\t +.\" .Li \&.Cx\ ( +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Va ax +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Sy \+ +.\" .Cx +.\" .Cl Cx \&(\& +.\" .Va ax +.\" .Cx + +.\" .Va by +.\" .Cx + +.\" .Va c ) +.\" .Cx \t +.\" .Em is produced by +.\" .Cx \t +.\" .Li \&.Va by +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Sy \+ +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Va c ) +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Cx +.\" .Cx +.\" .Cw +.\" .De +.\" .Pp +.\" This example shows the same equation in a different format. +.\" The spaces +.\" around the +.\" .Li \&+ +.\" signs were forced with +.\" .Li \e : +.\" .Pp +.\" .Ds I +.\" .Cw (ax\ +\ bx\ +\ c) \ is\ produced\ by\ \& +.\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\& +.\" .Cl Cx \t\t +.\" .Li \&.Cx\ ( +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Va a +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Sy x +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Cx \e\ +\e\ \e& +.\" .Cx +.\" .Cl Cx \&(\& +.\" .Va a +.\" .Sy x +.\" .Cx \ +\ \& +.\" .Va b +.\" .Sy y +.\" .Cx \ +\ \& +.\" .Va c ) +.\" .Cx \t +.\" .Em is produced by +.\" .Cl Cx \t\t +.\" .Li \&.Va b +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Sy y +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Cx \e\ +\e\ \e& +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Va c ) +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Cx +.\" .Cx +.\" .Cw +.\" .De +.\" .Pp +.\" The incantation below was +.\" lifted from the +.\" .Xr adb 1 +.\" manual page: +.\" .Pp +.\" .Ds I +.\" .Cw \&[?/]m_b1_e1_f1[?/]\& is\ produced\ by +.\" .Cl Cx \t\t +.\" .Li \&.Cx Op Sy ?/ +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Nm m +.\" .Cx +.\" .Cl Cx Op Sy ?/ +.\" .Nm m +.\" .Ad \ b1 e1 f1 +.\" .Op Sy ?/ +.\" .Cx \t +.\" .Em is produced by +.\" .Cx \t +.\" .Li \&.Ar \e\ b1 e1 f1 +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Op Sy ?/ +.\" .Cx +.\" .Cl Cx \t\t +.\" .Li \&.Cx +.\" .Cx +.\" .Cw +.\" .De +.\" .Pp +.Ss Keeps +The only keep that is implemented at this time is for words. +The macros are +.Ql \&.Bk +(begin-keep) +and +.Ql \&.Ek +(end-keep). +The only option that +.Ql \&.Bl +accepts is +.Fl words +and is useful for preventing line breaks in the middle of options. +In the example for the make command line arguments (see +.Sx What's in a name ) , +the keep prevented +.Xr nroff +from placing up the +flag and the argument +on separate lines. +(Actually, the option macro used to prevent this from occurring, +but was dropped when the decision (religious) was made to force +right justified margins in +.Xr troff +as options in general look atrocious when spread across a sparse +line. +More work needs to be done with the keep macros, a +.Fl line +option needs to be added.) +.Ss Examples and Displays +There are six types of displays, a quickie one line indented display +.Ql \&.D1 , +a quickie one line literal display +.Ql \&.Dl , +and block literal, block filled, block unfilled, and block ragged which use +the +.Ql \&.Bd +begin-display +and +.Ql \&.Ed +end-display macros. +.Pp +.Bl -tag -width \&.Dlxx +.It Li \&.D1 +(D-one) Display one line of indented text. +This macro is parsed, but it is not callable. +.Pp +.Dl Fl ldghfstru +.Pp +The above was produced by: +.Li \&.Dl Fl ldghfstru . +.It Li \&.Dl +(D-ell) +Display one line of indented +.Em literal +text. +The +.Ql \&.Dl +example macro has been used throughout this +file. +It allows +the indent (display) of one line of text. +Its default font is set to +constant width (literal) however +it is parsed and will recognized other macros. +It is not callable however. +.Pp +.Dl % ls -ldg /usr/local/bin +.Pp +The above was produced by +.Li \&.Dl % ls -ldg /usr/local/bin . +.It Li \&.Bd +Begin-display. +The +.Ql \&.Bd +display must be ended with the +.Ql \&.Ed +macro. +Displays may be nested within lists, but may +.Em not +contain other displays; this also prohibits nesting +of .D1 and .Dl one-line displays. +.Ql \&.Bd +has the following syntax: +.Pp +.Dl ".Bd display-type [-offset offset_value] [-compact]" +.Pp +The display-type must be one of the following four types and +may have an offset specifier for indentation: +.Ql \&.Bd . +.Pp +.Bl -tag -width "file file_name " -compact +.It Fl ragged +Fill, but do not adjust the right margin. +.It Fl unfilled +Do not fill: display a block of text as typed, the +right (and left) margin edges are left ragged. +.It Fl filled +Display a filled (formatted) block. +The block of text is formatted (the edges are filled \- +not left unjustified). +.It Fl literal +Display a literal block, useful for source code or +simple tabbed or spaced text. +.It Fl file Ar file_name +The file name following the +.Fl file +flag is read and displayed. +Literal mode is +asserted and tabs are set at 8 constant width character +intervals, however any +.Xr troff/ Ns Nm \-mdoc +commands in file will be processed. +.It Fl offset Ar string +If +.Fl offset +is specified with one of the following strings, the string +is interpreted to indicate the level of indentation for the +forthcoming block of text: +.Pp +.Bl -tag -width "indent-two" -compact +.It Ar left +Align block on the current left margin, +this is the default mode of +.Ql \&.Bd . +.It Ar center +Supposedly center the block. +At this time +unfortunately, the block merely gets +left aligned about an imaginary center margin. +.It Ar indent +Indents by one default indent value or tab. +The default +indent value is also used for the +.Ql \&.D1 +display so one is guaranteed the two types of displays +will line up. +This indent is normally set to 6n or about two +thirds of an inch (six constant width characters). +.It Ar indent-two +Indents two times the default indent value. +.It Ar right +This +.Em left +aligns the block about two inches from +the right side of the page. +This macro needs +work and perhaps may never do the right thing by +.Xr troff . +.El +.El +.It ".Ed" +End-display. +.El +.Ss Tagged Lists and Columns +There are several types of lists which may be initiated with the +.Ql ".Bl" +begin-list macro. +Items within the list +are specified with the +.Ql ".It" +item macro and +each list must end with the +.Ql ".El" +macro. +Lists other than +.Li \-enum +may be nested within themselves and within displays. +The use of columns inside of lists or lists inside of columns +is unproven. +.Pp +In addition, several list attributes may be specified such as +the width of a tag, the list offset, and compactness +(blank lines between items allowed or disallowed). +Most of this document has been formatted with a tag style list +.Pq Fl tag . +For a change of pace, the list-type used to present the list-types +is an over-hanging list +.Pq Fl ohang . +This type of list is quite popular with +.Tn TeX +users, but might look a bit funny after having read many pages of +tagged lists. +The following list types are accepted by +.Ql ".Bl" : +.Pp +.Bl -ohang -compact +.It Fl bullet +.It Fl dash +.It Fl enum +.It Fl hyphen +.It Fl item +These five are the simplest types of lists. +Once the +.Ql ".Bl" +macro has been given, items in the list are merely +indicated by a line consisting solely of the +.Ql ".It" +macro. +For example, the source text for a simple enumerated list +would look like: +.Bd -literal -offset indent-two +\&.Bl -enum -compact +\&.It +\&Item one goes here. +\&.It +\&And item two here. +\&.It +\&Lastly item three goes here. +\&.El +.Ed +.Pp +The results: +.Pp +.Bl -enum -offset indent-two -compact +.It +Item one goes here. +.It +And item two here. +.It +Lastly item three goes here. +.El +.Pp +A simple bullet list construction: +.Bd -literal -offset indent-two +\&.Bl -bullet -compact +\&.It +\&Bullet one goes here. +\&.It +\&Bullet two here. +\&.El +.Ed +.Pp +Produces: +.Bl -bullet -offset indent-two -compact +.It +Bullet one goes here. +.It +Bullet two here. +.El +.Pp +.It Fl tag +.It Fl diag +.It Fl hang +.It Fl ohang +.It Fl inset +These list-types collect arguments specified with the +.Ql \&.It +macro and create a label which may be +.Em inset +into the forthcoming text, +.Em hanged +from the forthcoming text, +.Em overhanged +from above and not indented or +.Em tagged . +This +list was constructed with the +.Ql Fl ohang +list-type. +The +.Ql \&.It +macro is parsed only for the inset, hang +and tag list-types and is not callable. +Here is an example of inset labels: +.Bl -inset -offset indent +.It Em Tag +The tagged list (also called a tagged paragraph) is the +most common type of list used in the Berkeley manuals. Use a +.Fl width +attribute as described below. +.It Em Diag +Diag lists create section four diagnostic lists +and are similar to inset lists except callable +macros are ignored. +.It Em Hang +Hanged labels are a matter of taste. +.It Em Ohang +Overhanging labels are nice when space is constrained. +.It Em Inset +Inset labels are useful for controlling blocks of +paragraphs and are valuable for converting +.Nm \-mdoc +manuals to other formats. +.El +.Pp +Here is the source text which produced the above example: +.Bd -literal -offset indent +\&.Bl -inset -offset indent +\&.It Em Tag +\&The tagged list (also called a tagged paragraph) is the +\&most common type of list used in the Berkeley manuals. +\&.It Em Diag +\&Diag lists create section four diagnostic lists +\&and are similar to inset lists except callable +\¯os are ignored. +\&.It Em Hang +\&Hanged labels are a matter of taste. +\&.It Em Ohang +\&Overhanging labels are nice when space is constrained. +\&.It Em Inset +\&Inset labels are useful for controlling blocks of +\¶graphs and are valuable for converting +\&.Nm \-mdoc +\&manuals to other formats. +\&.El +.Ed +.Pp +Here is a hanged list with just one item: +.Bl -hang -offset indent +.It Em Hanged +labels appear similar to tagged lists when the +label is smaller than the label width. +.It Em Longer hanged list labels +blend in to the paragraph unlike +tagged paragraph labels. +.El +.Pp +And the unformatted text which created it: +.Bd -literal -offset indent +\&.Bl -hang -offset indent +\&.It Em Hanged +\&labels appear similar to tagged lists when the +\&label is smaller than the label width. +\&.It Em Longer hanged list labels +\&blend in to the paragraph unlike +\&tagged paragraph labels. +\&.El +.Ed +.Pp +The tagged list which follows uses a width specifier to control +the width of the tag. +.Pp +.Bl -tag -width "PAGEIN" -compact -offset indent +.It SL +sleep time of the process (seconds blocked) +.It PAGEIN +number of disk +.Tn I/O Ns 's +resulting from references +by the process to pages not loaded in core. +.It UID +numerical user-id of process owner +.It PPID +numerical id of parent of process process priority +(non-positive when in non-interruptible wait) +.El +.Pp +The raw text: +.Bd -literal -offset indent +\&.Bl -tag -width "PAGEIN" -compact -offset indent +\&.It SL +\&sleep time of the process (seconds blocked) +\&.It PAGEIN +\&number of disk +\&.Tn I/O Ns 's +\&resulting from references +\&by the process to pages not loaded in core. +\&.It UID +\&numerical user-id of process owner +\&.It PPID +\&numerical id of parent of process process priority +\&(non-positive when in non-interruptible wait) +\&.El +.Ed +.Pp +Acceptable width specifiers: +.Bl -tag -width Ar -offset indent +.It Fl width Ar "\&Fl" +sets the width to the default width for a flag. +All callable +macros have a default width value. +The +.Ql \&.Fl , +value is presently +set to ten constant width characters or about five sixth of +an inch. +.It Fl width Ar "24n" +sets the width to 24 constant width characters or about two +inches. +The +.Ql n +is absolutely necessary for the scaling to work correctly. +.It Fl width Ar "ENAMETOOLONG" +sets width to the constant width length of the +string given. +.It Fl width Ar "\\*qint mkfifo\\*q" +again, the width is set to the constant width of the string +given. +.El +.Pp +If a width is not specified for the tag list type, the first +time +.Ql \&.It +is invoked, an attempt is made to determine an appropriate +width. +If the first argument to +.Ql ".It" +is a callable macro, the default width for that macro will be used +as if the macro name had been supplied as the width. +However, +if another item in the list is given with a different callable +macro name, a new and nested list is assumed. This effectively +means that +.Fl width +is required for the tag list type. +.Pp +.It Fl column +This list type generates multiple columns. +The number of columns and the width of each column is determined by +the arguments to the +.Fl column +list. +Each +.Ql ".It" +argument is parsed to make a row, each column within the +row is a separate argument separated by a tab or the +.Ql ".Ta" +macro. +.El +The table: +.Bl -column "String" "Nroff" "Troff" -offset indent +.It Sy "String" Ta Sy "Nroff" Ta Sy "Troff" +.It Li "<=" Ta \&<\&= Ta \*(<= +.It Li ">=" Ta \&>\&= Ta \*(>= +.El +.Pp +was produced by: +.Bd -literal -offset indent +\&.Bl -column "String" "Nroff" "Troff" -offset indent +\&.It Sy "String" Ta Sy "Nroff" Ta Sy "Troff" +\&.It Li "<=" Ta \&<\&= Ta \*(<= +\&.It Li ">=" Ta \&>\&= Ta \*(>= +\&.El +.Ed +.Sh PREDEFINED STRINGS +The following strings are predefined as may be used by +preceding with the troff string interpreting sequence +.Ql \&\e*(xx +where +.Em xx +is the name of the defined string or as +.Ql \&\e*x +where +.Em x +is the name of the string. +The interpreting sequence may be used any where in the text. +.Pp +.Bl -column "String " "Nroff " "Troff " -offset indent +.It Sy "String Nroff Troff" +.It Li "<=" Ta \&<\&= Ta \*(<= +.It Li ">=" Ta \&>\&= Ta \*(>= +.It Li "Rq" Ta "''" Ta \*(Rq +.It Li "Lq" Ta "``" Ta \*(Lq +.It Li "ua" Ta ^ Ta \*(ua +.It Li "aa" Ta ' Ta \*(aa +.It Li "ga" Ta \` Ta \*(ga +.\" .It Li "sL" Ta ` Ta \*(sL +.\" .It Li "sR" Ta ' Ta \*(sR +.It Li "q" Ta \&" Ta \*q +.It Li "Pi" Ta pi Ta \*(Pi +.It Li "Ne" Ta != Ta \*(Ne +.It Li "Le" Ta <= Ta \*(Le +.It Li "Ge" Ta >= Ta \*(Ge +.It Li "Lt" Ta < Ta \*(Gt +.It Li "Gt" Ta > Ta \*(Lt +.It Li "Pm" Ta +- Ta \*(Pm +.It Li "If" Ta infinity Ta \*(If +.It Li "Na" Ta \fINaN\fP Ta \*(Na +.It Li "Ba" Ta \fR\&|\fP Ta \*(Ba +.El +.Pp +.Sy Note : +The string named +.Ql q +should be written as +.Ql \e*q +since it is only one char. +.Sh DIAGNOSTICS +The debugging facilities for +.Nm \-mdoc +are limited, but can help detect subtle errors such +as the collision of an argument name with an internal +register or macro name. +(A what?) +A register is an arithmetic storage class for +.Xr troff +with a one or two character name. +All registers internal to +.Nm \-mdoc +for +.Xr troff +and +.Xr ditroff +are two characters and +of the form <upper_case><lower_case> such as +.Ql \&Ar , +<lower_case><upper_case> as +.Ql \&aR +or +<upper or lower letter><digit> as +.Ql \&C\&1 . +And adding to the muddle, +.Xr troff +has its own internal registers all of which are either +two lower case characters or a dot plus a letter or meta-character +character. +In one of the introduction examples, it was shown how to +prevent the interpretation of a macro name with the escape sequence +.Ql \e& . +This is sufficient for the internal register names also. +.Pp +.\" Every callable macro name has a corresponding register +.\" of the same name (<upper_case><lower_case>). +.\" There are also specific registers which have +.\" been used for stacks and arrays and are listed in the +.\" .Sx Appendix . +.\" .Bd -ragged -offset 4n +.\" [A-Z][a-z] registers corresponding to macro names (example ``Ar'') +.\" [a-z][A-Z] registers corresponding to macro names (example ``aR'') +.\" C[0-9] argument types (example C1) +.\" O[0-9] offset stack (displays) +.\" h[0-9] horizontal spacing stack (lists) +.\" o[0-9] offset (stack) (lists) +.\" t[0-9] tag stack (lists) +.\" v[0-9] vertical spacing stack (lists) +.\" w[0-9] width tag/label stack +.\" .Ed +.\" .Pp +If a non-escaped register name is given in the argument list of a request +unpredictable behavior will occur. +In general, any time huge portions +of text do not appear where expected in the output, or small strings +such as list tags disappear, chances are there is a misunderstanding +about an argument type in the argument list. +Your mother never intended for you to remember this evil stuff - so here +is a way to find out whether or not your arguments are valid: The +.Ql \&.Db +(debug) +macro displays the interpretation of the argument list for most +macros. +Macros such as the +.Ql \&.Pp +(paragraph) +macro do not contain debugging information. +All of the callable macros do, +and it is strongly advised whenever in doubt, +turn on the +.Ql \&.Db +macro. +.Pp +.Dl Usage: \&.Db [on | off] +.Pp +An example of a portion of text with +the debug macro placed above and below an +artificially created problem (a flag argument +.Ql \&aC +which should be +.Ql \e&aC +in order to work): +.Bd -literal -offset indent +\&.Db on +\&.Op Fl aC Ar file ) +\&.Db off +.Ed +.Pp +The resulting output: +.Bd -literal -offset indent +DEBUGGING ON +DEBUG(argv) MACRO: `.Op' Line #: 2 + Argc: 1 Argv: `Fl' Length: 2 + Space: `' Class: Executable + Argc: 2 Argv: `aC' Length: 2 + Space: `' Class: Executable + Argc: 3 Argv: `Ar' Length: 2 + Space: `' Class: Executable + Argc: 4 Argv: `file' Length: 4 + Space: ` ' Class: String + Argc: 5 Argv: `)' Length: 1 + Space: ` ' Class: Closing Punctuation or suffix + MACRO REQUEST: .Op Fl aC Ar file ) +DEBUGGING OFF +.Ed +.Pp +The first line of information tells the name of the calling +macro, here +.Ql \&.Op , +and the line number it appears on. +If one or more files are involved +(especially if text from another file is included) the line number +may be bogus. +If there is only one file, it should be accurate. +The second line gives the argument count, the argument +.Pq Ql \&Fl +and its length. +If the length of an argument is two characters, the +argument is tested to see if it is executable (unfortunately, any +register which contains a non-zero value appears executable). +The third line gives the space allotted for a class, and the +class type. +The problem here is the argument aC should not be +executable. +The four types of classes are string, executable, closing +punctuation and opening punctuation. +The last line shows the entire +argument list as it was read. +In this next example, the offending +.Ql \&aC +is escaped: +.Bd -literal -offset indent +\&.Db on +\&.Em An escaped \e&aC +\&.Db off +.Ed +.Bd -literal -offset indent +DEBUGGING ON +DEBUG(fargv) MACRO: `.Em' Line #: 2 + Argc: 1 Argv: `An' Length: 2 + Space: ` ' Class: String + Argc: 2 Argv: `escaped' Length: 7 + Space: ` ' Class: String + Argc: 3 Argv: `aC' Length: 2 + Space: ` ' Class: String + MACRO REQUEST: .Em An escaped &aC +DEBUGGING OFF +.Ed +.Pp +The argument +.Ql \e&aC +shows up with the same length of 2 as the +.Ql \e& +sequence produces a zero width, but a register +named +.Ql \e&aC +was not found and the type classified as string. +.Pp +Other diagnostics consist of usage statements and are self explanatory. +.Sh GROFF, TROFF AND NROFF +The +.Nm \-mdoc +package does not need compatibility mode with +.Xr groff . +.Pp +The package inhibits page breaks, and the headers and footers +which normally occur at those breaks with +.Xr nroff , +to make the manual more efficient for viewing on-line. +At the moment, +.Xr groff +with +.Fl T Ns Ar ascii +does eject the imaginary remainder of the page at end of file. +The inhibiting of the page breaks makes +.Xr nroff Ns 'd +files unsuitable for hardcopy. +There is a register named +.Ql \&cR +which can be set to zero in the site dependent style file +.Pa /usr/src/share/tmac/doc-nroff +to restore the old style behavior. +.Sh FILES +.Bl -tag -width /usr/share/misc/mdoc.template -compact +.It Pa /usr/share/tmac/tmac.doc +manual macro package +.It Pa /usr/share/misc/mdoc.template +template for writing a man page +.El +.Sh SEE ALSO +.Xr mdoc 7 , +.Xr man 1 , +.Xr troff 1 +.Sh BUGS +Undesirable hyphenation on the dash of a flag +argument is not yet resolved, and causes +occasional mishaps in the +.Sx DESCRIPTION +section. +(line break on the hyphen). +.Pp +Predefined strings are not declared in documentation. +.Pp +Section 3f has not been added to the header routines. +.Pp +.Ql \&.Nm +font should be changed in +.Sx NAME +section. +.Pp +.Ql \&.Fn +needs to have a check to prevent splitting up +if the line length is too short. +Occasionally it +separates the last parenthesis, and sometimes +looks ridiculous if a line is in fill mode. +.Pp +The method used to prevent header and footer page +breaks (other than the initial header and footer) when using +nroff occasionally places an unsightly partially filled line (blank) +at the would be bottom of the page. +.Pp +If the outer-most list definition doesn't have a +.Fl width +argument, the +.Ql ".It" +elements of inner lists may not work (producing a list where +each successive element +.Sq walks +to the right). +.Pp +The list and display macros to not do any keeps +and certainly should be able to. +.\" Note what happens if the parameter list overlaps a newline +.\" boundary. +.\" to make sure a line boundary is crossed: +.\" .Bd -literal +.\" \&.Fn struct\e\ dictionarytable\e\ *dictionarylookup struct\e\ dictionarytable\e\ *tab[] +.\" .Ed +.\" .Pp +.\" produces, nudge nudge, +.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] , +.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] , +.\" nudge +.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] . +.\" .Pp +.\" If double quotes are used, for example: +.\" .Bd -literal +.\" \&.Fn \*qstruct dictionarytable *dictionarylookup\*q \*qchar *h\*q \*qstruct dictionarytable *tab[]\*q +.\" .Ed +.\" .Pp +.\" produces, nudge nudge, +.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" , +.\" nudge +.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" , +.\" nudge +.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" . +.\" .Pp +.\" Not a pretty sight... +.\" In a paragraph, a long parameter containing unpaddable spaces as +.\" in the former example will cause +.\" .Xr troff +.\" to break the line and spread +.\" the remaining words out. +.\" The latter example will adjust nicely to +.\" justified margins, but may break in between an argument and its +.\" declaration. +.\" In +.\" .Xr nroff +.\" the right margin adjustment is normally ragged and the problem is +.\" not as severe. diff --git a/tmac/groff_me.man b/tmac/groff_me.man new file mode 100644 index 00000000..49196212 --- /dev/null +++ b/tmac/groff_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/tmac/groff_ms.man b/tmac/groff_ms.man new file mode 100644 index 00000000..0e1f64c7 --- /dev/null +++ b/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/tmac/groff_msafer.man b/tmac/groff_msafer.man new file mode 100755 index 00000000..0e0de775 --- /dev/null +++ b/tmac/groff_msafer.man @@ -0,0 +1,59 @@ +.ig \"-*- nroff -*- +Copyright (C) 1989-1999 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_MSAFER @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +.SH NAME +groff_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 , +.BR 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. +This is now the default; to get the old behaviour, use the +.B \-U +flag. +.SH FILES +.B @MACRODIR@/tmac.safer +.SH "SEE ALSO" +.BR groff (@MAN1EXT@), +.BR @g@troff (@MAN1EXT@), +.BR @g@pic (@MAN1EXT@) diff --git a/tmac/man.local b/tmac/man.local new file mode 100644 index 00000000..7bb8f503 --- /dev/null +++ b/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/tmac/man.ultrix b/tmac/man.ultrix new file mode 100644 index 00000000..49d7b256 --- /dev/null +++ b/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/tmac/mm.diff b/tmac/mm.diff new file mode 100755 index 00000000..d6694aa3 --- /dev/null +++ b/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/tmac/strip.sed b/tmac/strip.sed new file mode 100644 index 00000000..b309e86f --- /dev/null +++ b/tmac/strip.sed @@ -0,0 +1,2 @@ +/%beginstrip%/,$s/[ ]*\\".*// +/^\.$/d diff --git a/tmac/tmac.X b/tmac/tmac.X new file mode 100755 index 00000000..53dd5963 --- /dev/null +++ b/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/tmac/tmac.Xps b/tmac/tmac.Xps new file mode 100755 index 00000000..92471abb --- /dev/null +++ b/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/tmac/tmac.a4 b/tmac/tmac.a4 new file mode 100755 index 00000000..14a0b4c0 --- /dev/null +++ b/tmac/tmac.a4 @@ -0,0 +1,3 @@ +.\" Set up groff for A4 paper. +.pl 29.7c +.ll 21c-2i diff --git a/tmac/tmac.an b/tmac/tmac.an new file mode 100755 index 00000000..efd271eb --- /dev/null +++ b/tmac/tmac.an @@ -0,0 +1,350 @@ +.\"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 +.de set-an-margin +. nr an-margin \\n[IN] +.. +.\" .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 \"System Programmer's Manual +.ds an-init +\\.. +.DT +.ie '\*(.T'html' \{\ +. nr IN 1.2i +.\} +.el \{\ +. 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 +.set-an-margin +.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 +.ie '\*(.T'html' \{\ +. tl '''' +.\} +.el \{\ +. 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 +.ie '\*(.T'html' \{\ +. ds an-page-string " +. ds an-extra1 " +. ds an-extra2 " +.\} +.el .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]' +.if '\*(.T'html' \{\ +. tl '''' +.\} +.ev +.. +.de SH +.sp \\n[PD]u +.nr an-level 1 +.set-an-margin +.nr an-prevailing-indent \\n[IN] +.fi +.in \\n[an-margin]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 +.set-an-margin +.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 +.ie \\n[dl]+\\n[an-tag-sep]>\\n[an-prevailing-indent] \{\ +. in \\n[an-margin]u +. ne 2v+1u +. an-div +. br +. in \\n[an-margin]u+\\n[an-prevailing-indent]u +.\} +.el \{\ +. in \\n[an-margin]u+\\n[an-prevailing-indent]u +. ti -\\n[an-prevailing-indent]u +. 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/tmac/tmac.andoc b/tmac/tmac.andoc new file mode 100755 index 00000000..8cf989c0 --- /dev/null +++ b/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/tmac/tmac.arkup b/tmac/tmac.arkup new file mode 100755 index 00000000..ea3113d1 --- /dev/null +++ b/tmac/tmac.arkup @@ -0,0 +1,161 @@ +.\" +.\" A simple set of macros to provide HTML documents with basic +.\" www functionality. It will work with any macro set. +.\" +.de HTML +. if '\*(.T'html' \{\ +.\" the following line makes the vertical mode leave, so to say +\& +\X^html:\\$*^ +. \} +.. +.de HTMLINDEX +. if '\*(.T'html' \X^index:\\$*^ +.. +.\" +.\" BODYCOLOR - $1 is foreground color +.\" $2 is background color +.\" $3 is the color of an active hypertext link +.\" $4 is the color of a hypertext link not yet visited +.\" $5 is the color of a visited hypertext link +.\" +.de BODYCOLOR +. HTML <body text=\\$1 bgcolor=\\$2 link=\\$3 alink=\\$4 vlink=\\$5> +.. +.\" +.\" BACKGROUND - $1 is the background image file +.\" +.de BACKGROUND +. HTML <body background=\\$1> +.. +.\" +.\" URL - $1 is the classical underlined blue text +.\" $2 is the url +.\" $3 is optional stuff printed immediately after $3 +.\" +.de URL +. ie '\*(.T'html' \{\ +. HTML <a href="\\$2">\\$1</a>\\$3 +. \} +. el \{\ +\\$1 \(la\fC\\$2\fP\(ra\\$3 +. \} +.. +.\" +.\" FTP - $1 is the classical underlined blue text +.\" $2 is the ftp url +.\" $3 is optional stuff printed immediately after $2 +.de FTP +. ie '\*(.T'html' \{\ +. HTML <a href=\\$2>\\$1</a>\\$3 +. \} +. el \{\ +\\$1 \(la\fC\\$2\fP\(ra\\$3 +. \} +.. +.\" +.\" MAILTO - generate html email reference +.\" $1 is the email address (without the `mailto:' prefix) +.\" $2 is the optional name +.\" $3 is optional stuff printed immediately after $2 (resp. $1) +.\" +.\" example: +.\" +.\" Foobar has been written by +.\" .MAILTO fred@foo.bar "Fredrick Bloggs" . +.\" +.de MAILTO +.\" +.\" force reset after a potential heading by performing some motion.. +.\" how do we do this --fixme-- +.\" \h'\w' ''\h'-\w' '' doesn't work.. +. ie '\*(.T'html' \{\ +. ie '\\$2'' \{\ +. HTML "<a href=mailto:\\$1>\\$1</a>\\$3" +. \} +. el \{\ +. HTML "<a href=mailto:\\$1>\\$2</a>\\$3" +. \} +. \} +. el \{\ +. ie '\\$2'' \{\ +\fC\\$1\fP\\$3 +. \} +. el \{\ +\\$2 \(la\fC\\$1\fP\(ra\\$3 +. \} +. \} +.. +.\" +.\" TAG - generate an html name $1 +.\" +.de TAG +. HTML <a name="\\$1"></a> +.. +.\" +.\" IMAGE - reference an image +.\" $1 is the image file +.\" $2 is the x width (default if absent 400 pixels) +.\" $3 is the y width (default if absent is the x value) +.\" +.de IMAGE +. ie '\*(.T'html' \{\ +. nr HTMLWIDTH 400 +. if '\\$2'' \{\ +. nr HTMLWIDTH \\$2 +. \} +. nr HTMLHEIGHT \\n[HTMLWIDTH] +. if '\\$3'' \{\ +. nr HTMLHEIGHT \\$3 +. \} +. HTML <img src="\\$1" width=\\n[HTMLWIDTH height=\\n[HTMLHEIGHT]> +. \} +. el \{\ +. B1 +\(la\fC\\$1\fP\(ra +. B2 +. \} +.. +.\" +.\" CDFTP - if we are processing this on machine \\$1 then we create a +.\" FTP reference using \\$2 --> \\$3 +.\" +.\" otherwise we create a URL from \\$2 --> \\$4 +.\" +.\" example: +.\" +.\" .CDFTP "foobar" "somegnusoftware.tar.gz" \ +.\" "ftp://ftp.gnu.org/gnu/somegnusoftware.tar.gz" \ +.\" "../../../TARGZ/somegnusoftware.tar.gz" +.\" +.\" meaning if we are on machine foobar then generate an ftp url +.\" to the GNU anonymous ftp server otherwise generate a file url +.\" to a local copy (cdrom maybe) +.\" +.\" Useful when one machine is designated as a cdrom burner and another +.\" designated as an appache server. +.\" The same source for web pages can be burnt onto a CD and also +.\" served across the network. It doesn't solve the problem of one +.\" machine doing both though :-( +.\" +.\" +.\".de CDFTP +.\". sy /bin/rm -f /tmp/tmac.n +.\". sy /bin/echo ".ds HOSTNAME `hostname --short`" > /tmp/tmac.n +.\". so /tmp/tmac.n +.\". sy /bin/rm -f /tmp/tmac.n +.\". ie '\\*[HOSTNAME]'\\$1' \{\ +.\". FTP "\\$2" "\\$3" +.\". \} +.\". el \{\ +.\". URL "\\$2" "\\$4" +.\". \} +.\".. +.de LINE +. HTML <hr> +.. +.\" +.\" it doesn't make sense to use hyphenation with html, so we turn it off. +.\" +.hy 0 +.nr HY 0 diff --git a/tmac/tmac.doc b/tmac/tmac.doc new file mode 100755 index 00000000..e575df7c --- /dev/null +++ b/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/tmac/tmac.dvi b/tmac/tmac.dvi new file mode 100755 index 00000000..59c6df50 --- /dev/null +++ b/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/tmac/tmac.e b/tmac/tmac.e new file mode 100755 index 00000000..3a4eb86a --- /dev/null +++ b/tmac/tmac.e @@ -0,0 +1,1661 @@ +.\" @(#)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 +.nr y2 \n(yr%100 +.af y2 00 +.nr y4 \n(yr+1900 +.ds td \*(mo \n(dy, \n(y4 +.\" *** 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/tmac/tmac.html b/tmac/tmac.html new file mode 100755 index 00000000..991ced36 --- /dev/null +++ b/tmac/tmac.html @@ -0,0 +1,60 @@ +.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 .char \(lh <- +.if !c\(rh .char \(rh -> +.if !c\(bq .tr \(bq, +.if !c\(aq .tr \(aq' +.if '\*(.T'html' .char \[radicalex] \h'-\w'\(sr'u'\[radicalex]\h'\w'\(sr'u' +.if !\n(_C .mso tmac.pspic +.cp \n(_C +.\" now turn off all headers and footers for ms, me and mm macro sets +.if d EF .EF ''' +.if d EH .EH ''' +.if d OF .OF ''' +.if d OH .OH ''' +.if d ef .ef ''' +.if d of .of ''' +.if d oh .oh ''' +.if d eh .eh ''' +.\" it doesn't make sense to use hyphenation with html, so we turn it off. +.hy 0 +.nr HY 0 +.\" avoid line breaks after hyphen-like characters. +.cflags 0 -\(hy\(em\(en diff --git a/tmac/tmac.latin1 b/tmac/tmac.latin1 new file mode 100755 index 00000000..f33ea216 --- /dev/null +++ b/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/tmac/tmac.lj4 b/tmac/tmac.lj4 new file mode 100755 index 00000000..658b9a7a --- /dev/null +++ b/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/tmac/tmac.pic b/tmac/tmac.pic new file mode 100755 index 00000000..1177fc09 --- /dev/null +++ b/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/tmac/tmac.ps b/tmac/tmac.ps new file mode 100755 index 00000000..4d954f4a --- /dev/null +++ b/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/tmac/tmac.psatk b/tmac/tmac.psatk new file mode 100755 index 00000000..b59d23a2 --- /dev/null +++ b/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/tmac/tmac.psfig b/tmac/tmac.psfig new file mode 100755 index 00000000..5f4111ce --- /dev/null +++ b/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/tmac/tmac.psnew b/tmac/tmac.psnew new file mode 100755 index 00000000..e13bdb88 --- /dev/null +++ b/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/tmac/tmac.psold b/tmac/tmac.psold new file mode 100755 index 00000000..04a5f6df --- /dev/null +++ b/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/tmac/tmac.pspic b/tmac/tmac.pspic new file mode 100755 index 00000000..ef4186f6 --- /dev/null +++ b/tmac/tmac.pspic @@ -0,0 +1,50 @@ +.\" Define the PSPIC macro. +.\" When used other than with -Tps, it will draw a box around where +.\" the picture would go. +.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 +.psbb \\$1 +.if (\\n[llx] & \\n[lly] & \\n[urx] & \\n[ury]) \{\ +. nr ps-wid (\\n[urx]-\\n[llx]) +. nr ps-ht (\\n[ury]-\\n[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[llx] \\n[lly] \\n[urx] \\n[ury] \\n[ps-deswid] \\*[ps-desht]' +. br +. sp \\n[ps-desht]u +.\} +.. diff --git a/tmac/tmac.s b/tmac/tmac.s new file mode 100755 index 00000000..6770b0df --- /dev/null +++ b/tmac/tmac.s @@ -0,0 +1,1869 @@ +.\" -*- 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]] +.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/tmac/tmac.safer b/tmac/tmac.safer new file mode 100755 index 00000000..be348d5f --- /dev/null +++ b/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/tmac/tmac.trace b/tmac/tmac.trace new file mode 100755 index 00000000..2691c46e --- /dev/null +++ b/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/tmac/tmac.tty b/tmac/tmac.tty new file mode 100755 index 00000000..419a6853 --- /dev/null +++ b/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/tmac/tmac.tty-char b/tmac/tmac.tty-char new file mode 100755 index 00000000..8dc1aee7 --- /dev/null +++ b/tmac/tmac.tty-char @@ -0,0 +1,198 @@ +.\" This file defines standard troff characters and some groff characters for +.\" use with -Tascii, -Tlatin1 and -Tutf8. +.\" +.\" These definitions are chosen so that, as far as possible, they: +.\" - work with all of -Tascii, -Tlatin1 and -Tutf8. +.\" - 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/tmac/troffrc b/tmac/troffrc new file mode 100644 index 00000000..952c78f7 --- /dev/null +++ b/tmac/troffrc @@ -0,0 +1,27 @@ +.\" 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!utf8 tmac.tty +.do ds troffrc!lj4 tmac.lj4 +.do ds troffrc!html tmac.arkup +.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 troffrc!html +.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. diff --git a/tmac/troffrc-end b/tmac/troffrc-end new file mode 100644 index 00000000..edd23e4f --- /dev/null +++ b/tmac/troffrc-end @@ -0,0 +1,6 @@ +.\" +.\" final startup file for troff +.\" this file is parsed after all macro sets have been read +.\" +.if '\*(.T'html' .mso tmac.html +.\" Don't let blank lines creep in here.
\ No newline at end of file |