diff options
author | jhaegg <jhaegg> | 2000-11-17 04:26:02 +0000 |
---|---|---|
committer | jhaegg <jhaegg> | 2000-11-17 04:26:02 +0000 |
commit | cad77b59f4226226fe299ce386d496d31225bf87 (patch) | |
tree | f17ff563551cb7ae6b206aa05ad5b88b3e642307 /contrib | |
parent | 65ece94caf644bcb3cf7d483002605c80ab64f63 (diff) | |
download | groff-cad77b59f4226226fe299ce386d496d31225bf87.tar.gz |
* Renamed tmac.m and tmac.mse to m.tmac and mse.tmac
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/mm/Makefile.sim | 6 | ||||
-rw-r--r-- | contrib/mm/Makefile.sub | 12 | ||||
-rw-r--r-- | contrib/mm/m.tmac | 3477 | ||||
-rw-r--r-- | contrib/mm/mse.tmac | 184 |
4 files changed, 3671 insertions, 8 deletions
diff --git a/contrib/mm/Makefile.sim b/contrib/mm/Makefile.sim index 1051785e..e1d4a142 100644 --- a/contrib/mm/Makefile.sim +++ b/contrib/mm/Makefile.sim @@ -1,11 +1,11 @@ # -# $Id: Makefile.sim,v 2.0 2000/09/14 03:40:24 jhaegg Exp $ +# $Id: Makefile.sim,v 2.1 2000/11/17 04:26:02 jhaegg Exp $ # -# To install mgm separately as tmac.gm: +# To install mgm separately as gm.tmac: # make -f Makefile.sub tmacdir=/usr/local/lib/groff/tmac srcdir=. \ # INSTALL_DATA='install -m 644' tmac_m=gm install # -# or as tmac.m: +# or as m.tmac: # # tmacdir is the destination for your groff/tmac-directory, srcdir is # this directory and INSTALL_DATA is the command to install a file with. diff --git a/contrib/mm/Makefile.sub b/contrib/mm/Makefile.sub index 60e268ff..87cf0504 100644 --- a/contrib/mm/Makefile.sub +++ b/contrib/mm/Makefile.sub @@ -1,5 +1,5 @@ # -# $Id: Makefile.sub,v 2.0 2000/09/14 03:40:24 jhaegg Exp $ +# $Id: Makefile.sub,v 2.1 2000/11/17 04:26:02 jhaegg Exp $ # PROG=mmroff MAN7=\ @@ -28,9 +28,10 @@ install_mm: install_mmroff install_m install_m: -test -d $(tmacdir) || $(mkinstalldirs) $(tmacdir) -rm -f $(tmacdir)/tmac.$(tmac_m_prefix)m - $(INSTALL_DATA) $(srcdir)/tmac.m $(tmacdir)/tmac.$(tmac_m_prefix)m - @sed -e "s;^.mso tmac.m;.mso tmac.$(tmac_m_prefix)m;g" \ - $(srcdir)/tmac.mse > $(tmacdir)/tmac.$(tmac_m_prefix)mse + -rm -f $(tmacdir)/$(tmac_m_prefix)m.tmac + $(INSTALL_DATA) $(srcdir)/m.tmac $(tmacdir)/$(tmac_m_prefix)m.tmac + @sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \ + $(srcdir)/mse.tmac > $(tmacdir)/$(tmac_m_prefix)mse.tmac install_mmroff : mmroff -test -d $(bindir) || $(mkinstalldirs) $(bindir) -rm -f $(bindir)/mmroff @@ -48,6 +49,7 @@ uninstall_sub: test -s $(tmacdir)/mm/$$f || rm -f $(tmacdir)/mm/$$f; \ done -rm -f $(tmacdir)/tmac.$(tmac_m_prefix)m - -rm -f $(tmacdir)/tmac.$(tmac_m_prefix)mse + -rm -f $(tmacdir)/$(tmac_m_prefix)m.tmac + -rm -f $(tmacdir)/$(tmac_m_prefix)mse.tmac -rmdir $(tmacdir)/mm -rm -f $(bindir)/mmroff diff --git a/contrib/mm/m.tmac b/contrib/mm/m.tmac new file mode 100644 index 00000000..a38c4e4e --- /dev/null +++ b/contrib/mm/m.tmac @@ -0,0 +1,3477 @@ +.\" +.de @revision +.ds RE \\$2 +.. +.\" +.\" $Id: m.tmac,v 2.1 2000/11/17 04:26:02 jhaegg Exp $ +.@revision $Revision: 2.1 $ +.ig + +Copyright (C) 1991-2000 Free Software Foundation, Inc. +mgm is written by Jörgen Hägg <jh@axis.com> + +mgm 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. + +mgm 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, 675 Mass Ave, Cambridge, MA 02139, USA. + +Please send bugreports with examples to jh@axis.com. + +Naming convention stolen from mgs. +Local names module*name +Extern names module@name +Env.var environ:name +Index array!index +.. +.if !\n(.g .ab These mm macros require groff. +.if \n(.C .ab The groff mm macros do not work in compatibility mode. +.warn +.\" ######## init ####### +.\" Contents level [0:7], contents saved if heading level <= Cl +.nr Cl 2 +.\" Eject page between LIST OF XXXX if Cp == 0 +.nr Cp 0 +.\" Debugflag +.if !r D .nr D 0 +.\" Eject after floating display is output [0:1] +.nr De 0 +.\" Floating keep output [0;5] +.nr Df 5 +.\" space before and after display if == 1 [0:1] +.nr Ds 1 +.\" Eject page +.nr Ej 0 +.\" Equation label adjust 0=left, 1=right +.nr Eq 0 +.\" Em dash string +.ie n .ds EM " -- +.el .ds EM \(em +.\" Footnote spacing +.nr Fs 1 +.\" H1-H7 heading counters +.nr H1 0 1 +.nr H2 0 1 +.nr H3 0 1 +.nr H4 0 1 +.nr H5 0 1 +.nr H6 0 1 +.nr H7 0 1 +.\" Heading break level [0:7] +.nr Hb 2 +.\" heading centering level, [0:7] +.nr Hc 0 +.\" header format +.ds HF 2 2 2 2 2 2 2 +.\" heading temp. indent [0:2] +.\" 0 -> 0 indent, left margin +.\" 1 -> indent to right , like .P 1 +.\" 2 -> indent to line up with text part of preceding heading +.nr Hi 1 +.\" header pointsize +.ds HP 0 0 0 0 0 0 0 +.\" heading space level [0:7] +.nr Hs 2 +.\" heading numbering type +.\" 0 -> multiple (1.1.1 ...) +.\" 1 -> single +.nr Ht 0 +.\" Unnumbered heading level +.nr Hu 2 +.\" hyphenation in body +.\" 0 -> no hyphenation +.\" 1 -> hyphenation 14 on +.nr Hy 0 +.\" text for toc, selfexplanatory. Look in the new variable section +.ds Lf LIST OF FIGURES +.nr Lf 1 +.ds Lt LIST OF TABLES +.nr Lt 1 +.ds Lx LIST OF EXHIBITS +.nr Lx 1 +.ds Le LIST OF EQUATIONS +.nr Le 0 +.\" List indent, used by .AL +.nr Li 6 +.\" List space, if listlevel > Ls then no spacing will occur around lists. +.nr Ls 99 +.\" Numbering style [0:5] +.if !r N .nr N 0 +.\" numbered paragraphs +.\" 0 == not numbered +.\" 1 == numbered in first level headings. +.nr Np 0 +.\" Format of figure,table,exhibit,equation titles. +.\" 0= ". ", 1=" - " +.nr Of 0 +.\" Table of contents page numbering style +.nr Oc 0 +.\" Page-number, normally same as %. +.nr P 0 +.\" paragraph indent +.nr Pi 5 +.\" paragraph spacing +.nr Ps 1 +.\" paragraph type +.\" 0 == left-justified +.\" 1 == indented .P +.\" 2 == indented .P except after .H, .DE or .LE. +.nr Pt 0 +.\" Reference title +.ds Rp REFERENCES +.\" Display indent +.nr Si 5 +.\" +.\" Current state of TOC, empty outside TC, inside +.\" it will be set to co,fg,tb,ec,ex or ap. +.ds Tcst +.\" +.ds Tm \(tm +.\" +.\"--------------------------------------------- +.\" Internal global variables +.\" +.\" This is for cover macro .MT +.\" .ds @language +.\" +.nr @copy_type 0 +.if r C .nr @copy_type \n[C] +.\" >0 if Subject/Date/From should be bold, roman otherwise +.ie n .ds @sdf_font R +.el .ds @sdf_font B +.if \n[@copy_type]=4 \{\ +. ls 2 +. nr Pi 10 +. nr Pt 1 +.\} +.\" +.\" +.if r E \{\ +. ie \n[E] .ds @sdf_font B +. el .ds @sdf_font R +.\} +.\" +.\" Current pointsize and vertical space, always in points. +.if !r S .nr S 10 +.ps \n[S] +.vs \n[S]+2 +.\" +.nr @ps \n[.ps] +.nr @vs \n[.v] +.if \n[D]>1 .tm @ps=\n[@ps], @vs=\n[@vs] +.if \n[D]>3 .tm INIT: l:\n[.l] p:\n[.p] o:\n[.o] +.\" +.\" Page length +.if r L \{\ +. ie n .pl \n[L]u +. el .pl \n[L]u +.\} +.nr @pl \n[.p] +.\" +.\" page width +.ie r W \{\ +. ie n .ll \n[W]u +. el .ll \n[W]u +.\} +.el .ll 6i +.nr @ll \n[.l] +.nr @cur-ll \n[@ll] +.lt \n[@ll]u +.\" +.\" page offset +.ie r O .po \n[O] +.el \{\ +. ie n .po .75i +. el .po .963i +.\} +.\" +.nr @po \n[.o] +.\" +.\" non-zero if escape mechanism is turned off. Used by VERBON/OFF +.nr @verbose-flag 0 +.\"--------------------------------------------- +.\" New variables +.\" +.\" Appendix name +.ds App APPENDIX +.\" print appendixheader, 0 == don't +.nr Aph 1 +.\" +.\" Current appendix text +.ds Apptext +.\" Controls the space before and after static displays if defined. +.\" Lsp is used otherwise +.\" .nr Dsp 1v +.\" +.\" Add a dot after level one heading number if >0 +.nr H1dot 1 +.\" +.\" header prespace level. If level <= Hps, then two lines will be printed +.\" before the header instead of one. +.nr Hps 1 +.\" +.\" These variables controls the number of lines preceding .H. +.\" Hps1 is the number of lines when level > Hps +.nr Hps1 0.5 +.if n .nr Hps1 1 +.\" +.\" Hps2 is the number of lines when level <= Hps +.nr Hps2 1 +.if n .nr Hps2 2 +.\" +.\" Hss is the number of lines (Lsp) after the header. +.nr Hss 1 +.\" +.\" H1txt will be updated by .H and .HU, containing the heading text. +.\" Will also be updated in table of contents & friends +.\" +.ds H1txt +.\" +.\" header text for the index +.ds Index INDEX +.\" command to sort the index +.ds Indcmd sort +.\" +.\" flag for mkindex +.if !r Idxf .nr Idxf 0 +.\" Change these in the national configuration file +.ds Lifg Figure +.ds Litb TABLE +.ds Liex Exhibit +.ds Liec Equation +.ds Licon CONTENTS +.\" Flag for space between mark and prefix 1==space, 0==no space +.\" Can also be controlled by using '.LI mark 2' +.nr Limsp 1 +.\" +.\" Lsp controls the height of an empty line. Normally 0.5v +.\" Normally used for nroff compatibility. +.nr Lsp 0.5v +.if n .nr Lsp 1v +.ds MO1 January +.ds MO2 February +.ds MO3 March +.ds MO4 April +.ds MO5 May +.ds MO6 June +.ds MO7 July +.ds MO8 August +.ds MO9 September +.ds MO10 October +.ds MO11 November +.ds MO12 December +.\" for GETR +.ds Qrf See chapter \\*[Qrfh], page \\*[Qrfp]. +.\" +.\" header- and footer-size will only change to the current +.\" if Pgps is > 0. +.nr Pgps 1 +.\" +.\" section-page if Sectp > 0 +.nr Sectp 0 +.if (\n[N]=3):(\n[N]=5) \{\ +. nr Sectp 1 +. nr Ej 1 +.\} +.\" section-figure if Sectf > 0 +.nr Sectf 0 +.if \n[N]=5 .nr Sectf 1 +.\" +.\" argument to .nm in .VERBON. +.ds Verbnm "1 +.\" indent for VERBON +.nr Verbin 5n +.\" +.\" Letter section +.\" Formal closing (.FC) +.ds Letfc Yours very truly, +.\" +.\" Approval line +.ds Letapp APPROVED: +.\" Approval date-string +.ds Letdate Date +.\" +.ds LetCN CONFIDENTIAL\" Confidential default +.ds LetSA To Whom It May Concern:\" Salutation default +.ds LetAT ATTENTION:\" Attention string +.ds LetSJ SUBJECT:\" Subject string +.ds LetRN In reference to:\" Reference string +.\" +.\" Copy to (.NS) +.ds Letnsdef 0 +.ds Letns!copy Copy \" space! +.ds Letns!to " to +.ds Letns!0 Copy to +.ds Letns!1 Copy (with att.) to +.ds Letns!2 Copy (without att.) to +.ds Letns!3 Att. +.ds Letns!4 Atts. +.ds Letns!5 Enc. +.ds Letns!6 Encs. +.ds Letns!7 Under separate cover +.ds Letns!8 Letter to +.ds Letns!9 Memorandum to +.ds Letns!10 Copy (with atts.) to +.ds Letns!11 Copy (without atts.) to +.ds Letns!12 Abstract Only to +.ds Letns!13 Complete Memorandum to +.ds Letns!14 CC: +.\" +.\" Text printed below the footer. Controlled by @copy_type (C). +.ds Pg_type!0 +.ds Pg_type!1 OFFICIAL FILE COPY +.ds Pg_type!2 DATE FILE COPY +.ds Pg_type!3 D\ R\ A\ F\ T +.ds Pg_type!4 D\ R\ A\ F\ T +.\" Max lines in return address +.nr Letwam 14 +.\"-------------------------- +.\" test for mgm macro. This can be used if the text must test +.\" what macros is used. +.nr .mgm 1 +.\" +.\" Due to security problems with groff I had to rewrite +.\" the reference system. It's not as elegant as before, you +.\" have to run groff with '-z -rRef=1' and put stderr into the filename +.\" for .INITR +.\" +.\" Output references to stderr if non-zero +.ie !r Ref \{\ +. nr Ref 0 +.\} +.el .warn 0 +.\" +.\"--------------------------------------------- +.\" set local variables. +.ie d @language .mso mm/\*[@language]_locale +.el .mso mm/locale +.\"--------------------------------------------- +.if \n[D] .tm Groff mm, version \*[RE]. +.\" ####### module init ###### +.\" reset all things +.de init@reset +.ie \\n[misc@adjust] 'ad +.el 'na +.ie \\n[Hy] 'hy 14 +.el 'nh +'in 0 +'ti 0 +.ps \\n[@ps]u +.vs \\n[@vs]u +.. +.de @warning +'tm WARNING:(\\n[.F]) input line \\n[.c]:\\$* +.if \\n[D] .backtrace +.. +.de @error +'tm ****************** +'tm ERROR:(\\n[.F]) input line \\n[.c]:\\$* +.if \\n[D] .backtrace +'tm ****************** +.ab "Input aborted, syntax error" +.. +.de misc@toupper +.tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ +.br +\\$1 +.tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz +.br +.. +.\" ####### module debug ################################# +.de debug +'tm \\$1:\\n[.F]:\\n[c.] ll=\\n[.l] vs=\\n[.v] ps=\\n[.s],\\n[.ps] \ +in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] +.. +.de debug-all +.nr debug*n 1n +.nr debug*m 1m +'tm \\$1:\\n[.F]:\\n[c.] ll=\\n[.l] vs=\\n[.v] ps=\\n[.s] in=\\n[.i]\ + ad=\\n[.j] fi=\\n[.u] pl=\\n[.p] page=\\n[%] .o=\\n[.o] +'tm _______ .d=\\n[.d] .f=\\n[.f] .h=\\n[.h] .k=\\n[.k] .n=\\n[.n]\ + .p=\\n[.p] .t=\\n[.t] .z=\\n[.z] nl=\\n[nl] dn=\\n[dn] n=\\n[debug*n] +.. +.\" ####### module par ################################# +.nr par@ind-flag 1 \" indent on following P if Pt=2 +.nr hd*last-pos -1 +.nr hd*last-hpos -1 +.nr par*number 0 1 +.af par*number 01 +.nr par*number2 0 1 +.af par*number2 01 +.nr par*num-count 0 1 +.af par*num-count 01 +.\" reset numbered paragraphs, arg1 = headerlevel +.de par@reset-num +.if \\$1<3 .nr par*num-count 0 +.if (\\$1=1)&(\\n[Np]=1) .nr par*number 0 +.. +.\"------------ +.\" paragraph +.de P +.\" skip P if previous heading +.ie !((\\n[nl]=\\n[hd*last-pos]):(\\n[nl]=(\\n[hd*last-pos]-.5v))) \{\ +. if \\n[D]>2 .tm Paragraph nl=\\n[nl] +. par@doit \\$* +. if \\n[Np] \\n[H1].\\n+[par*number]\ \ \c +.\} +.el .if !(\\n[hd*last-hpos]=\\n[.k]) \{\ +. if \\n[D]>2 .tm Paragraph nl=\\n[nl] +. par@doit \\$* +. if \\n[Np] \\n[H1].\\n+[par*number]\ \ \c +.\} +.nr par@ind-flag 1 +.. +.\"------------ +.de nP +.\" skip P if previous heading +.ie !((\\n[nl]=\\n[hd*last-pos]):(\\n[nl]=(\\n[hd*last-pos]-.5v))) \{\ +. if \\n[D]>2 .tm Paragraph nl=\\n[nl] +. par@doit \\$* +\\n[H2].\\n+[par*number2]\ \ \c +.\} +.el .if !(\\n[hd*last-hpos]=\\n[.k]) \{\ +. if \\n[D]>2 .tm Paragraph nl=\\n[nl] +. par@doit \\$* +\\n[H2].\\n+[par*number2]\ \ \c +.\} +.nr par@ind-flag 1 +.. +.\"------------ +.de par@doit +.SP (u;\\n[Ps]*\\n[Lsp]) +.ie \\n[.$] \{\ +. if \\$1=1 .ti +\\n[Pi]n +.\} +.el \{\ +. if \\n[Pt]=1 .ti +\\n[Pi]n +. if (\\n[Pt]=2)&\\n[par@ind-flag] .ti +\\n[Pi]n +.\} +.. +.\" ####### module line ####################################### +.de SP +.br +.if !r line*lp\\n[.z] .nr line*lp\\n[.z] 0 +.if !r line*ac\\n[.z] .nr line*ac\\n[.z] 0 +.ie \\n[.$] .nr line*temp (v;\\$1) +.el .nr line*temp 1v +.\" +.ie \\n[line*lp\\n[.z]]=\\n[.d] \{\ +. \" go here if no output since the last .SP +. nr line*output \\n[line*temp]-\\n[line*ac\\n[.z]] +. if \\n[line*output]<0 .nr line*output 0 +. nr line*ac\\n[.z] +\\n[line*output] +.\} +.el \{\ +. nr line*ac\\n[.z] \\n[line*temp] +. nr line*output \\n[line*temp] +. \" no extra space in the beginning of a page +. if (\\n[.d]<0):(\\n[pg*head-mark]=\\n[.d]) .nr line*output 0 +.\} +.if \\n[line*output] .sp \\n[line*output]u +.nr line*lp\\n[.z] \\n[.d] +.. +.\" ######## module misc ############### +.nr misc@adjust 14 +.de SA +.if \\n[.$] \{\ +. if \\$1-1 .@error "SA: bad arg: \\$1" +. nr misc@adjust 0\\$1 +.\} +.ie \\n[misc@adjust] 'ad +.el 'na +.. +.\"------------- +.\" switch environment, keep all important settings. +.de misc@ev-keep +.nr misc*ll \\n[.l] +.ev \\$1 +.ll \\n[misc*ll]u +.lt \\n[misc*ll]u +.. +.\"------------- +.\" .misc@push stackname value +.de misc@push +.ie d misc*st-\\$1 .ds misc*st-\\$1 \\$2 \\*[misc*st-\\$1] +.el .ds misc*st-\\$1 \\$2 +.. +.\"------------- +.\" .misc@pop stackname +.\" value returned in the string misc*pop +.de misc@pop +.misc@pop-set misc*st-\\$1 \\*[misc*st-\\$1] +.. +.\"------------- +.de misc@pop-set +.ds misc*st-name \\$1 +.shift +.if \\n[.$]<1 .@error "stack \\*[misc*st-name] empty" +.ds misc*pop \\$1 +.shift +.ds \\*[misc*st-name] \\$* +.. +.\"------------- +.\" .misc@pop-nr stackname varname +.de misc@pop-nr +.misc@pop \\$1 +.nr \\$2 \\*[misc*pop] +.. +.\"------------- +.\" .misc@pop-ds stackname varname +.de misc@pop-ds +.misc@pop \\$1 +.ds \\$2 \\*[misc*pop] +.. +.\"----------- +.\" reset tabs +.de TAB +.ta T 5n +.. +.\"------------- +.\" .PGFORM linelength [ pagelength [ pageoffset [1]]] +.de PGFORM +.\" Break here to avoid problems with new linesetting of the previous line. +.\" Hope this doesn't break anything else :-) +.\" Don't break if arg_4 is a '1'. +.if \\n[D]>2 .tm PGFORM: \\$* +.if ''\\$4' .br +.if \\n[D]>3 .tm PGFORM: IN l:\\n[.l] p:\\n[.p] o:\\n[.o] +.ie !''\\$1' \{\ +. ll \\$1 +. nr @ll \\n[.l] +. nr @cur-ll \\n[@ll] +. lt \\n[@ll]u +.\} +.el \{\ +. ll \\n[@ll]u +. lt \\n[@ll]u +.\} +.\" +.ie !''\\$2' \{\ +. pl \\$2 +. nr @pl \\n[.p] +.\} +.el .pl \\n[@pl]u +.\" +.ie !''\\$3' \{\ +. po \\$3 +. nr @po \\n[.o] +.\} +.el .po \\n[@po]u +.if \\n[D]>3 .tm PGFORM: OUT l:\\n[.l] p:\\n[.p] o:\\n[.o] +.if \\n[D]>2 .tm PGFORM: ll=\\n[@ll], pl=\\n[@pl], po=\\n[@po] +'in 0 +.pg@move-trap +.if \\n[D]>2 \{\ +. tm Traps: +. ptr +.\} +.. +.\"------------- +.\" .MOVE y [[x] linelength] +.\" move to line y, indent to x +.de MOVE +.if !\\n[.$] .@error "MOVE y [x]: no arguments" +.if \\n[nl]<0 \c +.\" move to Y-pos +.sp |(v;\\$1) +.\" calc linelength +.ie \\n[.$]>2 .nr pg*i (n;\\$3) +.el \{\ +. ie \\n[.$]>1 .nr pg*i (n;\\n[@ll]u-\\$2) +. el .nr pg*i \\n[@ll]u +.\} +.\" move to X-pos, if any +.if !''\\$2' .po \\$2 +.\" set linelength +.ll \\n[pg*i]u +.. +.\"------------- +.de SM +.if !\\n[.$] .@error "SM: no arguments" +.if \\n[.$]=1 \s-1\\$1\s0 +.if \\n[.$]=2 \s-1\\$1\s0\\$2 +.if \\n[.$]=3 \\$1\s-1\\$2\s0\\$3 +.. +.\"------------- +.nr misc*S-ps \n[@ps] +.nr misc*S-vs \n[@vs] +.nr misc*S-ps1 \n[@ps] +.nr misc*S-vs1 \n[@vs] +.ds misc*a +.ds misc*b +.de S +.ie !\\n[.$] \{\ +. ds misc*a P +. ds misc*b P +.\} +.el \{\ +. ie \\n[.$]=1 .ds misc*b D +. el \{\ +. ie \w@\\$2@=0 .ds misc*b C +. el .ds misc*b \\$2 +. \} +. ie \w@\\$1@=0 .ds misc*a C +. el .ds misc*a \\$1 +.\} +.\" +.\" set point size +.if !'\\*[misc*a]'C' \{\ +. ie '\\*[misc*a]'P' .ps \\n[misc*S-ps]u +. el \{\ +. ie '\\*[misc*a]'D' .ps \\n[@ps]u +. el .ps \\*[misc*a] +. if \\n[D]>2 .tm S: .ps \\*[misc*a] +. \} +.\} +.\" +.\" set vertical spacing +.if !'\\*[misc*b]'C' \{\ +. ie '\\*[misc*b]'P' .vs \\n[misc*S-vs]u +. el \{\ +. ie '\\*[misc*b]'D' .vs \\n[.ps]u+2p +. el .vs \\*[misc*b] +. if \\n[D]>2 .tm S: .vs \\*[misc*b] +. \} +.\} +.nr @ps \\n[.ps] +.nr @vs \\n[.v] +.\" +.if \\n[D]>1 .tm S(\\$*): ma:\\*[misc*a], mb:\\*[misc*b] => ps:\\n[@ps]u, vs:\\n[@vs]u +.nr misc*S-ps \\n[misc*S-ps1] +.nr misc*S-vs \\n[misc*S-vs1] +.nr misc*S-ps1 \\n[@ps] +.nr misc*S-vs1 \\n[@vs] +.pg@move-trap +.. +.\"------------ +.de HC +.ev 0 +.hc \\$1 +.ev +.ev 1 +.hc \\$1 +.ev +.ev 2 +.hc \\$1 +.ev +.. +.\"------------ +.de RD +.di misc*rd +'fl +.rd \\$1\t +.br +.di +.ie !''\\$3' \{\ +. di misc*rd2 +. ds \\$3 "\\*[misc*rd] +. br +. di +.\} +.if !''\\$2' .rn misc*rd \\$2 +.rm misc*rd misc*rd2 +.. +.\"------------ +.\" VERBON [flag [pointsize [font]]] +.\" flag +.\" bit function +.\" 0 escape on +.\" 1 add an empty line before verbose text +.\" 2 add an empty line after verbose text +.\" 3 numbered lines (controlled by the string Verbnm) +.\" 4 indent text by the numbervariable Verbin. +.de VERBON +.br +.nr misc*verb 0\\$1 +.if (0\\n[misc*verb]%4)/2 .SP \\n[Lsp]u +.misc@ev-keep misc*verb-ev +.nf +.if (0\\n[misc*verb]%16)/8 .nm \\*[Verbnm] +.ie !'\\$3'' .ft \\$3 +.el .ft CR +.ie 0\\$2 \{\ +. ss \\$2 +. ps \\$2 +. vs \\$2 +.\} +.el .ss 12 +.ta T 8u*\w@n@u +.if (0\\n[misc*verb]%32)/16 .in +\\n[Verbin]u +.if 0\\n[misc*verb]%2 \{\ +. eo +. nr @verbose-flag 1 \" tell pageheader to set ec/eo +.\} +.. +.de VERBOFF +.ec +.br +.if (0\\n[misc*verb]%8)/4 .SP \\n[Lsp]u +.if (0\\n[misc*verb]%16)/8 .nm +.if (0\\n[misc*verb]%32)/16 .in +.ev +.nr @verbose-flag 0 +.. +.\" ######## module pict ################# +.nr pict*width 0 +.nr pict*height 0 +.nr pict*mode 0 +.nr pict*ind 0 +.nr pict*id 0 1 +.\" I assume that the number variable pict*id is the same +.\" between two runs. +.de PIC +.br +.nr pict*ind 0 +.nr pict*box 0 +.while \\n[.$]>0 \{\ +. if '-B'\\$1' \{\ +. nr pict*box 1 +. shift +. continue +. \} +. if '-L'\\$1' \{\ +. nr pict*mode 0 +. shift +. continue +. \} +. if '-R'\\$1' \{\ +. nr pict*mode 1 +. shift +. continue +. \} +. if '-I'\\$1' \{\ +. nr pict*ind (m;\\$2) +. nr pict*mode 2 +. shift 2 +. continue +. \} +. if '-C'\\$1' \{\ +. nr pict*mode 3 +. shift +. continue +. \} +. ds pict*f \\$1 +. nr pict*id +1 +. shift +. if \\n[.$]>0 \{\ +. nr pict*width (i;\\$1) +. shift +. \} +. if \\n[.$]>0 \{\ +. nr pict*height (i;\\$1) +. shift +. \} +.\} +.if \\n[Ref]>0 \{\ +. tm .\\\\" PIC id \\n[pict*id] +. tm .\\\\" PIC file \\*[pict*f] +.\} +.if d pict*file!\\n[pict*id] \{\ +. ds pict*f \\*[pict*file!\\n[pict*id]] +. nr pict*llx \\n[pict*llx!\\n[pict*id]] +. nr pict*lly \\n[pict*lly!\\n[pict*id]] +. nr pict*urx \\n[pict*urx!\\n[pict*id]] +. nr pict*ury \\n[pict*ury!\\n[pict*id]] +. \" +. nr pict*w (p;\\n[pict*urx]-\\n[pict*llx]) +. if \\n[pict*w]<0 .nr pict*w 0-\\n[pict*w] +. nr pict*h (p;\\n[pict*ury]-\\n[pict*lly]) +. if \\n[pict*h]<0 .nr pict*h 0-\\n[pict*h] +. if \\n[pict*width]>0 \{\ +. nr pict*rs (u;1000*\\n[pict*width]/\\n[pict*w]) +. nr pict*w (u;\\n[pict*w]*\\n[pict*rs]/1000) +. nr pict*h (u;\\n[pict*h]*\\n[pict*rs]/1000) +. \} +. if \\n[pict*height]>0 \{\ +. nr pict*rs (u;1000*\\n[pict*height]/\\n[pict*h]) +. nr pict*h (u;\\n[pict*h]*\\n[pict*rs]/1000) +. \} +. if '0'\\n[pict*mode]' \{\ +. nr pict*in \\n[.i]u +. \} +. if '1'\\n[pict*mode]' \{\ +. nr pict*in (u;\\n[.l]-\\n[.i]-\\n[pict*w]) +. \} +. if '2'\\n[pict*mode]' \{\ +. nr pict*in \\n[pict*ind]u +. \} +. if '3'\\n[pict*mode]' \{\ +. nr pict*in (u;(\\n[.l]-\\n[.i]-\\n[pict*w])/2) +. \} +. ds pict*h " +. if \\n[pict*h]>0 .ds pict*h \\n[pict*h] +. \" +. ne \\n[pict*h]u +. \" +. \" these lines are copied and modified from tmac.pspic. +. \" Originally written by James Clark +. br +. ie \\n[pict*box]>0 \{\ +\h'\\n[pict*in]u'\ +\Z'\D'p 0 \\n[pict*h]u \\n[pict*w]u 0 0 -\\n[pict*h]u''\ +\v'\\n[pict*h]u'\X'ps: import \\*[pict*f] \ +\\n[pict*llx] \\n[pict*lly] \\n[pict*urx] \\n[pict*ury] \\n[pict*w] \\n[pict*h]' +.\} +. el \{\ +\h'\\n[pict*in]u'\ +\X'ps: invis'\ +\Z'\D'p 0 \\n[pict*h]u \\n[pict*w]u 0 0 -\\n[pict*h]u''\ +\X'ps: endinvis'\ +\v'\\n[pict*h]u'\X'ps: import \\*[pict*f] \ +\\n[pict*llx] \\n[pict*lly] \\n[pict*urx] \\n[pict*ury] \\n[pict*w] \\n[pict*h]' +. \} +. br +. sp \\n[pict*h]u +.\} +.. +.\" external picture +.de EPIC +.if \\n[.$]< 2 .@error "EPIC: Not enough arguments" +.nr pict*w \\$1 +.nr pict*h \\$2 +.ds pict*name "External picture +.if !''$3' .ds pict*name \\$3 +\& +.br +.ne \\n[pict*h]u +.sp \\n[pict*h]u +.nr pict*ind (u;(\\n[.l]-\\n[.i]-\\n[pict*w])/2) +.in +\\n[pict*ind]u +\D'l \\n[pict*w]u 0'\ +\D'l 0 -\\n[pict*h]u'\ +\D'l -\\n[pict*w]u 0'\ +\D'l 0 \\n[pict*h]u'\ +\v'-(u;\\n[pict*h]/2)'\ +\h'(u;(\\n[pict*w]-\w'\\*[pict*name]'/2))'\\*[pict*name] +.in +.. +.\" ######## module acc ################# +.\"----------- +.\" accents. These are copied from mgs, written by James Clark. +.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' +.. +.acc@over-def ` \` +.acc@over-def ' \' +.acc@over-def ^ ^ +.acc@over-def ~ ~ +.acc@over-def : \(ad +.acc@over-def ; \(ad +.acc@under-def , \(ac +.\" ######## module uni ################# +.\" unimplemented macros +.de OK +'tm "OK: not implemented" +.. +.de PM +'tm "PM: not implemented" +.. +.\" ######## module hd ################# +.\" support for usermacro +.nr hd*h1-page 1 \" last page-number for level 1 header. +.nr hd*htype 0 +.ds hd*sect-pg +.ds hd*mark +.ds hd*suf-space +.nr hd*need 0 +.aln ;0 hd*htype +.als }0 hd*mark +.als }2 hd*suf-space +.aln ;3 hd*need +.\"------------- +.\" .hd@split varable index name val1 val2 ... +.de hd@split +.if \\$2>(\\n[.$]-3) .@error "\\$3 must have at least \\$2 values (\\*[\\$3]). +.nr hd*sp-tmp \\$2+3 +.ds \\$1 \\$[\\n[hd*sp-tmp]] +.. +.de HU +.H 0 "\\$1" +.. +.\"------------- +.de H +.if !r hd*cur-bline .nr hd*cur-bline \\n[nl] +.br +.df@print-float 2\" $$$ could be wrong... +.\" terminate all lists +.LC +.init@reset +.nr hd*level 0\\$1 +.nr hd*arg1 0\\$1 +.if !\\n[hd*level] .nr hd*level \\n[Hu] +.\" +.\" clear lower counters +.nr hd*i 1 1 +.while \\n+[hd*i]<8 .if \\n[hd*level]<\\n[hd*i] .nr H\\n[hd*i] 0 1 +.\" +.\" save last text for use in TP +.if \\n[hd*level]=1 .ds H1txt \\$2\\$3 +.\" +.\" This is a little fix to be able to get correct H1 heading number +.\" in page headers. Special attention was needed when other formats are used. +.ie !''\\g[H1]' \{\ +. ds hd*format \\g[H1] +. af H1 0 +. nr H1h \\n[H1] 1 +. af H1 \\*[hd*format] +.\} +.el .nr H1h \\n[H1] 1 +.if \\n[hd*level]=1 .nr H1h +1 +.\" +.\" Check if it's time for new page. Only if text has +.\" appeared before. +.if \\n[Ej]&(\\n[Ej]>=\\n[hd*level])&(\\n[nl]>\\n[hd*cur-bline]) .pg@next-page +.\" +.\" increment current counter +.nr H\\n[hd*level] +1 +.\" +.\" update pagenumber if section-page is used +.if (\\n[hd*level]=1)&(\\n[Sectp]>0) .hd@set-page 1 +.\" +.\" hd*mark is the text written to the left of the header. +.ds hd*mark \\n[H1]. +.\" +.if \\n[hd*level]>1 .as hd*mark \\n[H2] +.\" +.nr hd*i 2 1 +.while \\n+[hd*i]<8 .if \\n[hd*level]>(\\n[hd*i]-1) .as hd*mark .\\n[H\\n[hd*i]] +.if \\n[Ht] .ds hd*mark \\n[H\\n[hd*level]]. +.\" +.\" special case, no dot after level one heading if not H1dot true +.if (\\n[hd*level]=1)&(\\n[H1dot]=0) .ds hd*mark \\n[H1] +.\" +.as hd*mark \ \ \" add spaces between mark and heading +.if !\\n[hd*arg1] .ds hd*mark\" no mark for unnumbered +.\" +.if \\n[D]>1 .tm At header \\*[hd*mark] "\\$2" +.nr hd*htype 0 \" hd*htype = check break and space +. \" 0 = run-in, 1 = break only, 2 = space +.if \\n[hd*level]<=\\n[Hb] .nr hd*htype 1 +.if \\n[hd*level]<=\\n[Hs] .nr hd*htype 2 +. \" two spaces if hd*htype == 0 +.ie (\\n[hd*htype]=0)&(\w@\\$2@) .ds hd*suf-space " \" +.el .ds hd*suf-space +.nr hd*need 2v \" hd*need = header need space +.\"---------- user macro HX ------------ +.\" User exit macro to override numbering. +.\" May change hd*mark (}0), hd*suf-space (}2) and hd*need (;3) +.\" Can also change Hps1/2. +.if d HX .HX \\n[hd*level] \\n[hd*arg1] "\\$2\\$3" +.\"-------------------------------------- +.\" pre-space +.ie \\n[hd*level]<=\\n[Hps] .SP (u;\\n[Hps2]) +.el .SP (u;\\n[Hps1]) +.\" +.par@reset-num \\n[hd*level]\" reset numbered paragraph +.\" start diversion to measure size of header +.di hd*div +\\*[hd*mark]\\$2\\$3\\*[hd*suf-space] +.br +.di +.rm hd*div +.if \\n[hd*htype] .na \" no adjust if run-in +.if \\n[hd*htype]<2 .nr hd*need +\\n[Lsp]u \" add some extra space +.ne \\n[hd*need]u+\\n[dn]u+.5p-1v \" this is the needed space for a header +.\" +.\" size and font calculations +.hd@split hd*font \\n[hd*level] HF \\*[HF]\" get font for this level +.ft \\*[hd*font]\" set new font +.hd@split hd*new-ps \\n[hd*level] HP \\*[HP]\" get point size +.ie (\\*[hd*new-ps]=0):(\w@\\*[hd*new-ps]@=0) \{\ +. if \\n[hd*htype] \{\ +. if '\\*[hd*font]'3' \{\ +. ps -1 +. vs -1 +. \} +. if '\\*[hd*font]'B' \{\ +. ps -1 +. vs -1 +. \} +. \} +.\} +.el \{\ +. ps \\*[hd*new-ps] +. vs \\*[hd*new-ps]+2 +.\} +.\" +.\"---------- user macro HY ------------- +.\" user macro to reset indents +.if d HY .HY \\n[hd*level] \\n[hd*arg1] "\\$2\\$3" +.\"-------------------------------------- +.nr hd*mark-size \w@\\*[hd*mark]@ +.if (\\n[hd*level]<=\\n[Hc])&\\n[hd*htype] .ce\" center if level<=Hc +.\" +.\" finally, output the header +\\*[hd*mark]\&\c +.\" and the rest of the header +.ie \\n[hd*htype] \{\ +\\$2\\$3 +. br +.\} +.el \\$2\\$3\\*[hd*suf-space]\&\c +.ft 1 +.\" restore pointsize and vertical size. +.ps \\n[@ps]u +.vs \\n[@vs]u +.\" +.\" table of contents +.if (\\n[hd*level]<=\\n[Cl])&\w@\\$2@ .toc@entry \\n[hd*level] "\\$2" +.\" set adjust to previous value +.SA +.\" do break or space +.if \\n[hd*htype] .br +.if \\n[hd*htype]>1 .SP (u;\\n[Lsp]*\\n[Hss]) +.if \\n[hd*htype] \{\ +. \" indent if Hi=1 and Pt=1 +. if (\\n[Hi]=1)&(\\n[Pt]=1) .ti +\\n[Pi]n +. \" indent size of mark if Hi=2 +. if \\n[hd*htype]&(\\n[Hi]>1) .ti +\\n[hd*mark-size]u +.\} +.nr par@ind-flag 0 \" no indent on .P if Pt=2 +.\" +.\" check if it is time to reset footnotes +.if (\\n[hd*level]=1)&\\n[ft*clear-at-header] .nr ft*nr 0 1 +.\" +.\" check if it is time to reset indexes +.if (\\n[hd*level]=1)&\\n[Sectf] \{\ +. nr lix*fg-nr 0 1 +. nr lix*tb-nr 0 1 +. nr lix*ec-nr 0 1 +. nr lix*ex-nr 0 1 +.\} +.\"---------- user macro HZ ---------- +.if d HZ .HZ \\n[hd*level] \\n[hd*arg1] "\\$2\\$3" +.nr hd*last-pos \\n[nl] +.nr hd*last-hpos \\n[.k] +.nr par@ind-flag 0 +.. +.\"-------- +.de HM +.nr hd*i 0 1 +.while \\n+[hd*i]<8 .af H\\n[hd*i] \\$[\\n[hd*i]] 1 +.. +.\"---------------------- +.\" set page-nr, called from header +.\" +.de hd@set-page +.\" +.ie \\n[.$]>0 .nr P \\$1 +.el .nr P +1 +.\" Set section-page-string +.ds hd*sect-pg \\n[H1]-\\n[P] +.if \\n[Sectp]>1 .if '\\n[H1]'0' .ds hd*sect-pg " +.. +.\"########### module pg #################### +.\" set end of text trap +.wh 0 pg@header +.em pg@end-of-text +.\" +.ds pg*header ''- \\nP -'' +.ds pg*footer +.if \n[N]=4 .ds pg*header '''' +.if (\n[N]=3):(\n[N]=5) \{\ +. ds pg*header '''' +. ds pg*footer ''\\*[hd*sect-pg]'' +.\} +.ds pg*even-footer +.ds pg*odd-footer +.ds pg*even-header +.ds pg*odd-header +.\" +.nr pg*top-margin 0 +.nr pg*foot-margin 0 +.nr pg*block-size 0 +.nr pg*footer-size 5\" 1v+footer+even/odd footer+2v +.nr pg*header-size 7\" 3v+header+even/odd header+2v +.nr pg*extra-footer-size 0 +.nr pg*extra-header-size 0 +.nr ft*note-size 0 +.nr pg*cur-column 0 +.nr pg*cols-per-page 1 +.nr pg*cur-po \n[@po] +.nr pg*head-mark 0 +.\" +.nr pg*ps \n[@ps] +.nr pg*vs \n[@vs] +.\"------------------------- +.\" footer TRAPS: set, enable and disable +.de pg@set-new-trap +.nr pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v+\\n[pg*extra-footer-size]u) +.\" +.if \\n[D]>2 .tm pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v+\\n[pg*extra-footer-size]u) = \\n[pg*foot-trap] +.\" +.\" last-pos points to the position of the footer and bottom +.\" block below foot-notes. +.nr pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v) +.if \\n[D]>2 .tm pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v) = \\n[pg*last-pos] +.. +.de pg@enable-trap +.wh \\n[pg*foot-trap]u pg@footer +.if \\n[D]>2 .tm pg@enable-trap .t=\\n[.t] nl=\\n[nl] +.if \\n[D]>2 .ptr +.. +.de pg@disable-trap +.ch pg@footer +.. +.\" move to new trap (if changed). +.de pg@move-trap +.pg@disable-trap +.pg@set-new-trap +.pg@enable-trap +.. +.de pg@enable-top-trap +.\" set trap for pageheader. +.nr pg*top-enabled 1 +.. +.de pg@disable-top-trap +.\" remove trap for pageheader. +.nr pg*top-enabled 0 +.. +.\" no header on the next page +.de PGNH +.nr pg*top-enabled (-1) +.. +.\" set first trap for pagefooter +.pg@enable-top-trap +.pg@set-new-trap +.pg@enable-trap +.\"------------------------- +.\" stop output and begin on next page. Fix footnotes and all that. +.de pg@next-page +.\".debug next-page +.ne 999i \" activate trap +.\" .pg@footer +.. +.\"------------------------- +.\" support for PX, TP and EOP. +.als }t pg*header +.als }e pg*even-header +.als }o pg*odd-header +.als TPh pg*header +.als TPeh pg*even-header +.als TPoh pg*odd-header +.\" +.als EOPf pg*footer +.als EOPef pg*even-footer +.als EOPof pg*odd-footer +.\"------------------------------------------------------------ +.\" HEADER +.de pg@header +.if \\n[D]>1 .tm Page# \\n[%] (\\n[.F]:\\n[c.]) +.if \\n[Idxf] \{\ +.tl '<pagenr\ \\n[%]>''' +.\} +.\" assign current page-number to P +.hd@set-page +.\" reset spacing +.nr line*lp\\n[.z] 0 +.nr line*ac\\n[.z] 0 +.\" +.\" suppress pageheader if pagenumber == 1 and N == [124] +.if \\n[pg*top-enabled] \{\ +.\" must be fixed!! +.\". pg@disable-top-trap +. if \\n[pg*extra-header-size] 'sp \\n[pg*extra-header-size]u +. if \\n[pg*top-margin] 'sp \\n[pg*top-margin]u +. ev pg*tl-ev +. pg@set-env +. ie d let@header .let@header +. el \{\ +. ie d TP .TP +. el \{\ +' sp 3 +. ie ((\\n[%]=1)&((\\n[N]=1):(\\n[N]=2))) .sp +. el .tl \\*[pg*header] +. ie o .tl \\*[pg*odd-header] +. el .tl \\*[pg*even-header] +' sp 2 +. \} +. \} +. ev +. \" why no-space?? +. if d PX \{\ +. ns +. PX +. rs +. \} +. \" check for pending footnotes +. ft@check-old +. \" +. \" back to normal text processing +. pg@enable-trap +. \" mark for multicolumn +. nr pg*head-mark \\n[nl]u +. \" reset NCOL pointer at each new page. +. nr pg*last-ncol 0 +. \" set multicolumn +. \" +. pg@set-po +. \" print floating displays +. df@print-float 4 +. tbl@top-hook +. ns +.\} +.if \\n[pg*top-enabled]<0 .nr pg*top-enabled 1 +.nr hd*cur-bline \\n[nl] \" .H needs to know if output has occured +.. +.\"--------------------------------------------------------- +.\" FOOTER +.de pg@footer +.ec +.if \\n[D]>2 .tm Footer# \\n[%] (\\n[.F]:\\n[c.]) +.pg@disable-trap +.\".debug footer +.tbl@bottom-hook +.\" increment pageoffset for MC +.\" move to the exact start of footer. +'sp |\\n[pg*foot-trap]u+1v +.\" +.if \\n[D]>3 .tm FOOTER after .sp +.\" print footnotes +.if d ft*div .ft@print +.\" +.pg@inc-po +.if !\\n[pg*cur-column] .pg@print-footer +.\" next column +.pg@set-po +.pg@enable-trap +.if \\n[@verbose-flag] .eo \" to help VERBON/VERBOFF +.. +.\"------------------------- +.de pg@print-footer +.\" jump to the position just below the foot-notes. +'sp |\\n[pg*last-pos]u+1v +.\" check if there are any bottom block +.if d pg*block-div .pg@block +.\" +.\" print the footer and eject new page +.ev pg*tl-ev +.pg@set-env +.\" user defined end-of-page macro +.ie d EOP .EOP +.el \{\ +. ie o .tl \\*[pg*odd-footer] +. el .tl \\*[pg*even-footer] +. ie (\\n[%]=1)&(\\n[N]=1) .tl \\*[pg*header] +. el .tl \\*[pg*footer] +. tl ''\\*[Pg_type!\\n[@copy_type]]'' +.\} +.ev +.\" be sure that floating displays and footnotes will be +.\" printed at the end of the document. +.ie (\\n[df*fnr]>=\\n[df*o-fnr]):\\n[ft*exist] \{\ +. ev ne +' bp +. ev +.\} +.el 'bp +.. +.\"------------------------- +.\" +.\" Initialize the title environment +.de pg@set-env +'na +'nh +'in 0 +'ti 0 +.ie \\n[Pgps] \{\ +. ps \\n[@ps]u +. vs \\n[@vs]u +.\} +.el \{\ +. ps \\n[pg*ps]u +. vs \\n[pg*vs]u +.\} +.lt \\n[@ll]u +.. +.\"------------------------- +.de PH +.ds pg*header "\\$1 +.pg@set-new-size +.. +.de PF +.ds pg*footer "\\$1 +.pg@set-new-size +.. +.de OH +.ds pg*odd-header "\\$1 +.pg@set-new-size +.. +.de EH +.ds pg*even-header "\\$1 +.pg@set-new-size +.. +.de OF +.ds pg*odd-footer "\\$1 +.pg@set-new-size +.. +.de EF +.ds pg*even-footer "\\$1 +.pg@set-new-size +.. +.de pg@clear-hd +.ds pg*even-header +.ds pg*odd-header +.ds pg*header +.. +.de pg@clear-ft +.ds pg*even-footer +.ds pg*odd-footer +.ds pg*footer +.. +.de pg@set-new-size +.nr pg*ps \\n[@ps] +.nr pg*vs \\n[@vs] +.pg@move-trap +.. +.\"------------------------- +.\" end of page processing +.de pg@footnotes +.\".debug footnotes +.\" output footnotes. set trap for block +.\" +.. +.\"------------------------- +.\" print bottom block +.de pg@block +.ev pg*block-ev +'nf +'in 0 +.ll 100i +.pg*block-div +.br +.ev +.. +.\"------------------------- +.\" define bottom block +.de BS +.misc@ev-keep pg*block-ev +.init@reset +.br +.di pg*block-div +.. +.\"------------------------- +.de BE +.br +.di +.nr pg*block-size \\n[dn]u +.ev +.pg@move-trap +.. +.\"------------------------- +.\" print out all pending text +.de pg@end-of-text +.if \\n[D]>2 .tm ---------- End of text processing ---------------- +.df@eot-print +.ref@eot-print +.. +.\"------------------------- +.\" set top and bottom margins +.de VM +.if \\n[.$]=0 \{\ +. nr pg*extra-footer-size 0 +. nr pg*extra-header-size 0 +.\} +.if \\n[.$]>0 .nr pg*extra-header-size (v;\\$1) +.if \\n[.$]>1 .nr pg*extra-footer-size (v;\\$2) +.if \\n[D]>2 \{\ +. tm extra top \\n[pg*extra-footer-size] +. tm extra bottom \\n[pg*extra-header-size] +.\} +.pg@move-trap +.. +.\"--------------------- +.\" multicolumn output. +.de pg@set-po +.if \\n[pg*cols-per-page]>1 \{\ +. ll \\n[pg*column-size]u +.\} +.. +.de pg@inc-po +.if \\n[pg*cols-per-page]>1 \{\ +. ie \\n+[pg*cur-column]>=\\n[pg*cols-per-page] \{\ +. nr pg*cur-column 0 1 +. nr pg*cur-po \\n[@po]u +. po \\n[@po]u +. ll \\n[@ll]u +. \} +. el \{\ +. nr pg*cur-po +(\\n[pg*column-size]u+\\n[pg*column-sep]u) +. po \\n[pg*cur-po]u +' sp |\\n[pg*head-mark]u +. tbl@top-hook +. \} +.\} +.. +.\" An argument disables the page-break. +.de 1C +.br +.if \\n[pg*cols-per-page]<=1 .@error "1C: multicolumn mode not active" +.nr pg*cols-per-page 1 +.nr pg*column-sep 0 +.nr pg*column-size \\n[@ll] +.nr pg*ncol-i \\n[pg*cur-column]\" temp variable +.nr pg*cur-column 0 1 +.nr pg*cur-po \\n[@po]u +.PGFORM +.ie !'\\$1'1' .SK +.el \{\ +. if d ft*div \{\ +. if \\n[pg*ncol-i]>0 \{\ +. @warning 1C: footnotes will be messy +. \} +. \} +. if \\n[pg*last-ncol]>0 \{\ +. sp |\\n[pg*last-ncol]u +. nr pg*last-ncol 0 +. \} +.\} +.. +.de 2C +.br +.nr pg*head-mark \\n[nl]u +.if \\n[pg*cols-per-page]>1 .@error "2C: multicolumn mode already active" +.nr pg*cols-per-page 2 +.nr pg*column-sep \\n[@ll]/15 +.nr pg*column-size (\\n[@ll]u*7)/15 +.nr pg*cur-column 0 1 +.nr pg*cur-po \\n[@po]u +.ll \\n[pg*column-size]u +.\" .lt \\n[pg*column-size]u +.. +.\" MC column-size [ column-separation ] +.de MC +.br +.nr pg*head-mark \\n[nl]u +.if \\n[pg*cols-per-page]>1 .@error "MC: multicolumn mode already active" +.ie ''\\$1' .nr pg*column-size \\n[.l] +.el .nr pg*column-size (n;\\$1) +.ie ''\\$2' .nr pg*column-sep \\n[pg*column-size]/15 +.el .nr pg*column-sep (n;\\$2) +.\" +.\" calculate the number of columns/page +.nr pg*cols-per-page 0 +.nr pg*i \\n[pg*column-size] +.while \\n[pg*i]<=\\n[.l] \{\ +. nr pg*cols-per-page \\n[pg*cols-per-page]+1 +. nr pg*i \\n[pg*i]+\\n[pg*column-sep]+\\n[pg*column-size] +.\} +.nr pg*cur-column 0 1 +.nr pg*cur-po \\n[@po]u +.ll \\n[pg*column-size]u +.\" .lt \\n[pg*column-size]u +.. +.\" begin a new column +.de NCOL +.br +.if \\n[nl]>\\n[pg*last-ncol] .nr pg*last-ncol \\n[nl] +.pg@footer +.. +.\" skip pages +.de SK +.br +.bp +.nr pg*i 0 1 +.\" force new page by writing something invisible. +.while \\n+[pg*i]<=(0\\$1) \{\ +\& +. bp +.\} +.. +.\"------------------------------- +.\" MULB width1 space1 width2 space2 width3 space3 ... +.de MULB +.br +.nr pg*i 0 1 +.nr pg*mul-x 0 1 +.nr pg*mul-ind 0 +.nr pg*mul-last 0 +.while \\n[.$] \{\ +. nr pg*mul!\\n+[pg*i] (n;0\\$1) +. nr pg*muls!\\n[pg*i] (n;0\\$2) +. shift 2 +.\} +.nr pg*mul-max-col \\n[pg*i] +.ds pg*mul-fam \\n[.fam] +.nr pg*mul-font \\n[.f] +.ev pg*mul-ev +.ps \\n[@ps]u +.vs \\n[@vs]u +.fam \\*[pg*mul-fam] +.ft \\n[pg*mul-font] +.fi +.hy 14 +.di pg*mul-div +.MULN +.. +.\"----------- +.de MULN +.if \\n[pg*mul-x]>=\\n[pg*mul-max-col] .@error "MULN: Undefined columnwidth" +.br +.if \\n[.d]>\\n[pg*mul-last] .nr pg*mul-last \\n[.d] +.rt +0 +.in \\n[pg*mul-ind]u +.ll (u;\\n[.i]+\\n[pg*mul!\\n+[pg*mul-x]])u +.nr pg*mul-ind +(u;\\n[pg*mul!\\n[pg*mul-x]]+\\n[pg*muls!\\n[pg*mul-x]]) +.. +.\"----------- +.\" MULE +.de MULE +.br +.if \\n[.d]>\\n[pg*mul-last] .nr pg*mul-last \\n[.d] +.di +.ev +.ne \\n[pg*mul-last]u +.nf +.mk +.pg*mul-div +.rt +.sp \\n[pg*mul-last]u +.fi +.. +.\"----------- +.de OP +.br +.ie o .if !\\n[pg*head-mark]=\\n[nl] \{\ +. bp +1 +. bp +1 +.\} +.el .bp +.. +.\"########### module footnotes ################### +.nr ft*note-size 0 +.nr ft*busy 0 +.nr ft*nr 0 1 +.nr ft*wide 0 +.nr ft*hyphen 0\" hyphenation value +.nr ft*adjust 1\" >0 if adjust true +.nr ft*indent 1\" >0 if text indent true (not imp. $$$) +.nr ft*just 0\" 0=left justification, 1=right (not imp. $$$) +.nr ft*exist 0\" not zero if there are any footnotes to be printed +.nr ft*clear-at-header 0\" >0 if footnotes should be reset at first level head. +.\" +.ds F \v'-.4m'\s-3\\n+[ft*nr]\s0\v'.4m' +.\" +.\"----------------- +.\" init footnote environment +.de ft@init +.\" indentcontrol not implemented $$$ +.\" label justification not implemented $$$ +'in 0 +'fi +.ie \\n[ft*adjust] 'ad +.el 'na +.ie \\n[ft*hyphen] 'hy 14 +.el 'hy 0 +.ll \\n[@cur-ll]u +.lt \\n[@cur-ll]u +.ps (p;\\n[@ps]u-2) +.vs (p;\\n[@vs]u-1) +.. +.\"----------------- +.\" set footnote format +.\" no support for two column processing (yet). $$$ +.de FD +.if \\n[.$]=0 .@error "FD: bad arg \\$1" +.ie \\n[.$]=2 .nr ft*clear-at-header 1 +.el .nr ft*clear-at-header 0 +.\" +.if !'\\$1'' \{\ +. ie \\$1>11 .nr ft*format 0 +. el .nr ft*format \\$1 +. \" +. nr ft*hyphen (\\n[ft*format]%2)*14 +. nr ft*format \\n[ft*format]/2 +. \" +. nr ft*adjust 1-(\\n[ft*format]%2) +. nr ft*format \\n[ft*format]/2 +. \" +. nr ft*indent 1-(\\n[ft*format]%2) +. nr ft*format \\n[ft*format]/2 +. \" +. nr ft*just \\n[ft*format]%2 +.\} +.. +.\"--------------- +.\" Footnote and display width control $$$ +.de WC +.nr ft*i 0 1 +.while \\n+[ft*i]<=\\n[.$] \{\ +. ds ft*x \\$[\\n[ft*i]] +. if '\\*[ft*x]'N' \{\ +. nr ft*wide 0 +. nr ft*first-fn 0 +. nr ds*wide 0 +. nr ds*float-break 1 +. \} +. if '\\*[ft*x]'-WF' .nr ft*wide 0 +. if '\\*[ft*x]'WF' .nr ft*wide 1 +. if '\\*[ft*x]'-FF' .nr ft*first-fn 0 +. if '\\*[ft*x]'FF' .nr ft*first-fn 1 +. if '\\*[ft*x]'-WD' \{\ +. nr ds*wide 0 +. if r ft*df-save \{\ +. nr Df \\n[ft*df-save] +. rm ft*df-save +. \} +. \} +. if '\\*[ft*x]'WD' \{\ +. nr ds*wide 1 +. nr ft*df-save \\n[Df] +. nr Df 4 +. \} +. if '\\*[ft*x]'-FB' .nr ds*float-break 0 +. if '\\*[ft*x]'FB' .nr ds*float-break 1 +. if \\n[D]>1 .tm WC WF=\\n[ft*wide] WD=\\n[ds*wide] +.\} +.. +.\"----------------- +.\" begin footnote +.\" Change environment, switch to diversion and print the foot-note mark. +.de FS +.if \\n[ft*busy] .@error "FS: missing FE" +.nr ft*busy 1 +.ev ft*ev +.ft@init +.if !\\n[ft*wide] .pg@set-po +.di ft*tmp-div +.nr ft*space (u;\\n[Fs]*\\n[Lsp]) +.sp \\n[ft*space]u +.\" print mark +.ie \\n[.$] .ds ft*mark \\$1 +.el .ds ft*mark \\n[ft*nr]. +\\*[ft*mark] +.in +.75c +.sp -1 +.nr ft*exist 1 +.. +.\"----------------- +.\" init footnote diversion +.de ft@init-footnote +.di ft*div +\l'20n' +.br +.di +.nr ft*note-size \\n[dn] +.. +.\"----------------- +.\" end footnote +.\" End the diversion, back to previous environment, and adjust +.\" the trap to the new foot-note size. +.de FE +.nr ft*busy 0 +.br +.di +'in 0 +'nf +.if \\n[@pl]u<\\n[dn]u .@error "FE: too big footnote" +.if !d ft*div .nr dn +1v +.if \\n[D]>3 .tm FE: foot-trap=\\n[pg*foot-trap] .d=\\n[.d] dn=\\n[dn] +.ie (\\n[pg*foot-trap]u-\\n[.d]u)<\\n[dn]u \{\ +. da ft*next-div +. ft*tmp-div +. br +. di +.\} +.el \{\ +. if !d ft*div .ft@init-footnote +. da ft*div +. ft*tmp-div +. di +. nr ft*note-size +\\n[dn] +.\} +.rm ft*tmp-div +.ev +.pg@move-trap +.. +.\"----------------- +.\" print footnotes, see pg@footer +.de ft@print +.ev ft*print-ev +'nf +'in 0 +.ll 100i +.ft*div +.br +.ev +.rm ft*div +.nr ft*note-size 0 +.pg@move-trap +.. +.\"----------------- +.\" check if any pending footnotes, see pg@header +.de ft@check-old +.if d ft*next-div \{\ +. ev ft*ev +. ft@init +. ft@init-footnote +. nf +. in 0 +. da ft*div +. ft*next-div +. di +. nr ft*note-size +\\n[dn] +. rm ft*next-div +. ev +. nr ft*exist 0 +. pg@move-trap +.\} +.. +.\"########### module display ################### +.nr ds*wide 0\" >0 if wide displays wanted +.nr df*fnr 0 1\" floating display counter +.nr df*o-fnr 1\" floating display counter, already printed +.nr ds*snr 0 1\" static display counter +.nr ds*lvl 0 1\" display level +.nr ds*float-busy 0\" >0 if printing float +.nr df*float 0 >0 if previous display was floating +.\"-------------------------------------------- +.de DE +.ie \\n[df*float] .df@end \\$@ +.el .ds@end \\$@ +.. +.\"-------------------------------------------- +.\" floating display start +.\" nested DF/DE is not allowed. +.de DF +.if \\n[df*float] .@error "DF:nested floating is not allowed. Use DS." +.ds@set-format \\$@ +.\" +.nr df*old-ll \\n[.l] +.nr ds*ftmp \\n[.f] +.misc@ev-keep df*ev +.ft \\n[ds*ftmp] +.\" +.init@reset +.di df*div +'in 0 +.\" +.ds@set-new-ev \\n[df*old-ll] +.SP \\n[Lsp]u +.nr df*float 1 +.. +.\"-------------------------------------------- +.de df@end +.br +.SP \\n[Lsp]u +.di +.nr df*width!\\n+[df*fnr] \\n[dl] +.nr df*height!\\n[df*fnr] \\n[dn] +.nr df*wide!\\n[df*fnr] \\n[ds*wide] +.nr df*format!\\n[df*fnr] \\n[ds*format] +.ev +.if \\n[D]>2 .tm DF:fnr=\\n[df*fnr] w=\\n[dl] h=\\n[dn] wide=\\n[ds*wide] \ + form=\\n[ds*format] +.\" move div to the floating display list +.rn df*div df*fdiv!\\n[df*fnr] +.\" +.nr par@ind-flag 0 +.\" print float if queue is empty and the display fits into +.\" the current page +.if ((\\n[df*fnr]>=\\n[df*o-fnr])&(\\n[dn]<\\n[.t])) .df@print-float 1 +.nr df*float 0 +.. +.\"------------- +.\" called by end-of-text +.de df@eot-print +.br +.if \\n[df*o-fnr]<=\\n[df*fnr] \{\ +. if \\n[D]>2 .tm Print remaining displays. +.\" still some floats left, make non-empty environment +. misc@ev-keep ne +. init@reset +\c +. df@print-float 3 +. ev +.\} +.. +.\"--------------- +.\" print according to Df and De. +.\" .df@print-float type +.\" type called from +.\" 1 .DE +.\" 2 end of section +.\" 3 end of document +.\" 4 beginning of new page +.\" +.de df@print-float +.if \\n[Df]>5 .@error "Df=\\n[Df], max value is 5" +.if !\\n[ds*float-busy] \{\ +. nr ds*float-busy 1 +.\" at .DE +. if \\n[D]>3 .tm print-float: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]] +. \" Df = 1 or 5 +. if (\\$1=1)&((\\n[Df]=1):(\\n[Df]=5)) \{\ +. if \\n[.t]>\\n[df*height!\\n[df*o-fnr]] \{\ +. \" Print only new displays. +. if \\n[df*o-fnr]=\\n[df*fnr] \{\ +. br +. ds@print-one-float +. \} +. \} +. \} +. \" Df = 3 +. if (\\$1=1)&(\\n[Df]=3) \{\ +. if \\n[.t]>\\n[df*height!\\n[df*o-fnr]] \{\ +. br +. ds@print-one-float +. \} +. \} +.\" print all if Df<2 and end of section +. if (\\$1=2)&(\\n[Sectp]>0)&(\\n[Df]<2) \{\ +. br +. ds@print-all-floats +. \} +.\" print all if end of document. Where should they go instead? +. if \\$1=3 \{\ +. br +. ds@print-all-floats +.\} +.\" new page +. if (\\$1=4)&(\\n[Df]>1) \{\ +. if \\n[Df]=2 .ds@print-one-float +. if \\n[Df]=3 .ds@print-one-float +. if \\n[Df]>3 \{\ +. ie \\n[De] .ds@print-all-floats +. el .ds@print-this-page +. \} +. \} +. nr ds*float-busy 0 +.\} +.. +.\"--------------- +.\" DF out +.\" print a floating diversion +.de ds@output-float +.nr df*old-ll \\n[.l] +.nr df*old-in \\n[.i] +.ev ds*fev +.nf +.nr df*i \\n[df*o-fnr] +.nr df*f \\n[df*format!\\n[df*i]] +.\" +.in \\n[df*old-in]u +.if \\n[df*f]=1 'in +\\n[Si]n +.if \\n[df*f]>=2 'in 0 +.if \\n[df*f]=2 'ce 9999 +.if \\n[df*f]=3 'in (u;(\\n[.l]-\\n[df*width!\\n[df*i]])/2) +.if \\n[df*f]=4 'rj 9999 +.if \\n[df*f]=5 'in (u;\\n[.l]-\\n[df*width!\\n[df*i]]) +.\" +.\" +.df*fdiv!\\n[df*o-fnr] +.\" +.if \\n[df*f]=2 'ce 0 +.if \\n[df*f]=4 'rj 0 +.ev +.rm df*fdiv!\\n[df*i] +.rm df*height!\\n[df*i] +.rm df*format!\\n[df*i] +.if \\n[df*wide!\\n[df*i]] .nr pg*head-mark \\n[nl]u +.nr df*o-fnr +1 +.. +.\"--------------- +.\" print one floating display if there is one. +.de ds@print-one-float +.if \\n[df*o-fnr]<=\\n[df*fnr] \{\ +. if \\n[D]>3 .tm print-one-float: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]] +. if \\n[.t]<\\n[df*height!\\n[df*o-fnr]] .pg@next-page +. ds@output-float +. if \\n[De] .pg@next-page +.\} +.. +.\"--------------- +.\" print all queued floats. +.\" if De>0 do a page eject between the floats. +.de ds@print-all-floats +.while \\n[df*o-fnr]<=\\n[df*fnr] \{\ +. if \\n[D]>3 .tm print-all-floats: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]] +. if \\n[.t]<\\n[df*height!\\n[df*o-fnr]] .pg@next-page +. br +\c +. ds@output-float +. if \\n[De] .pg@next-page +.\} +.. +.\"--------------- +.\" print as many floats as will fit on the current page +.de ds@print-this-page +.while \\n[df*o-fnr]<=\\n[df*fnr] \{\ +. if \\n[D]>3 .tm print-this-page: .t=\\n[.t], h=\\n[df*height!\\n[df*o-fnr]] +. if \\n[.t]<\\n[df*height!\\n[df*o-fnr]] .break +. ds@output-float +.\} +.. +.\"--------------------------------------------------- +.\" get format of the display +.de ds@set-format +.ie \\n[.$] \{\ +. ie r ds*format!\\$1 .nr ds*format \\n[ds*format!\\$1] +. el .@error "DS/DF:wrong format:\\$1" +.\} +.el .nr ds*format 0 +.if \\n[D]>2 .tm set format=\\n[ds*format] +.\" fill or not to fill, that is the... +.nr ds*fill 0 +.ie \\n[.$]>1 \{\ +. ie r ds*fill!\\$2 .nr ds*fill \\n[ds*fill!\\$2] +. el .@error "\\*[ds*type]:wrong fill:\\$2" +.\} +.if \\n[D]>2 .tm set fill=\\n[ds*fill] +.nr ds*rindent 0 +.if \\n[.$]>2 .nr ds*rindent \\$3 +.if \\n[D]>2 .tm set indent=\\n[ds*rindent] +.. +.\"----------------------------- +.\" .ds@set-new-ev previous-line-length +.de ds@set-new-ev +.ll \\$1u +.lt \\$1u +.if \\n[ds*rindent] \{\ +. ll -\\n[ds*rindent]n +. lt -\\n[ds*rindent]n +.\} +.if \\n[ds*wide] \{\ +. ll \\n[@ll]u +. lt \\n[@ll]u +.\} +.\" +.ie \\n[ds*fill] 'fi +.el 'nf +.. +.\"-------------------------------------------------------- +.nr ds*format 0\" dummy value for .En/.EQ +.nr ds*format! 0\" no indent +.nr ds*format!0 0\" no indent +.nr ds*format!L 0\" no indent +.nr ds*format!I 1\" indent +.nr ds*format!1 1\" indent +.nr ds*format!C 2\" center each line +.nr ds*format!2 2\" center each line +.nr ds*format!CB 3\" center as block +.nr ds*format!3 3\" center as block +.nr ds*format!R 4\" right justify each line +.nr ds*format!4 4\" right justify each line +.nr ds*format!RB 5\" right justify as block +.nr ds*format!5 5\" right justify as block +.\"--------------- +.nr ds*fill! 0\" no fill +.nr ds*fill!N 0\" no fill +.nr ds*fill!0 0\" no fill +.nr ds*fill!F 1\" fill on +.nr ds*fill!1 1\" fill on +.\"-------------------------------------------- +.\" static display start +.\" nested DS/DE is allowed. No limit on depth. +.de DS +.br +.nr ds*lvl +1 +.ds@set-format \\$@ +.\" +.nr ds*old-ll \\n[.l] +.nr ds*old-in \\n[.i] +.misc@push ds-ll \\n[.l] +.misc@push ds-form \\n[ds*format] +.nr ds*i \\n[.i] +.nr ds*ftmp \\n[.f] +.misc@ev-keep ds*ev!\\n+[ds*snr] +.ft \\n[ds*ftmp] +.\" +.init@reset +.\" indent in a diversion doesn't seem like a good idea. +'in 0 +.di ds*div!\\n[ds*snr] +.\" +.ds@set-new-ev \\n[ds*old-ll] +.nr df*float 0 +.. +.\"-------------------------------------------- +.de ds@end +.if \\n-[ds*lvl]<0 .@error "DE: no corresponding DS" +.br +.di +.\" ********** +.nr ds*width \\n[dl] +.nr ds*height \\n[dn] +.misc@pop-nr ds-ll ds*old-ll +.misc@pop-nr ds-form ds*format +.\" +.\" ********** +'nf +.\" calculate needed space +.nr ds*need \\n[ds*height] +.nr ds*i \\n[pg*foot-trap]-\\n[pg*header-size]v-\\n[pg*extra-header-size]v +.if (\\n[ds*height]>\\n[ds*i])&(\\n[.t]<(\\n[ds*i]/2)) .nr ds*need \\n[.t]u+1v +.if (\\n[ds*height]<\\n[ds*i])&(\\n[.t]<(\\n[ds*height])) .nr ds*need \\n[.t]u+1v +.\" Eject page if display will fit one page and +.\" there are less than half of the page left. +.if \\n[ds*need] .ne \\n[ds*need]u +.\" +.\" check if pending equation label +.eq@check \\n[ds*need] +'in \\n[ds*old-in]u +.if \\n[ds*format]=1 'in \\n[ds*old-in]u+\\n[Si]n +.if \\n[ds*format]>=2 'in 0 +.if \\n[ds*format]=2 'ce 9999 +.if \\n[ds*format]=3 'in (u;(\\n[.l]-\\n[ds*width])/2) +.if \\n[ds*format]=4 'rj 9999 +.if \\n[ds*format]=5 'in (u;\\n[.l]-\\n[ds*width]) +.\" ********** +.\" +.\" Print static display +.nr ds*i \\n[Lsp] +.if r Dsp .nr ds*i \\n[Dsp] +.\" +.if \\n[Ds] .SP \\n[ds*i]u +.ds*div!\\n[ds*snr] +.if \\n[Ds] .SP \\n[ds*i]u +.\" +.if \\n[ds*format]=2 'ce 0 +.if \\n[ds*format]=4 'rj 0 +.rm ds*div!\\n[ds*snr] +.nr ds*snr -1 +.nr par@ind-flag 0 +.ev +.. +.\"########### module list ################### +.\" .LI text-indent mark-indent pad type [mark [LI-space [LB-space] ] ] +.\" +.nr li*tind 0 +.nr li*mind 0 +.nr li*pad 0 +.nr li*type 0 +.ds li*mark 0 +.nr li*li-spc 0 +.nr li*lvl 0 1 +.aln :g li*lvl +.nr li*cur-vpos 0 +.\"-------------------------- +.\" the major list-begin macro. +.\" If type == -1 a 'break' will occur. +.de LB +.if \\n[.$]<4 .@error "LB: not enough arguments, min 4" +.misc@push cind \\n[.i] +.misc@push tind \\n[li*tind] +.misc@push mind \\n[li*mind] +.misc@push pad \\n[li*pad] +.misc@push type \\n[li*type] +.misc@push li-spc \\n[li*li-spc] +.ds li*mark-list!\\n[li*lvl] \\*[li*mark] +.nr li*lvl +1 +.\" +.nr li*tind (n;0\\$1)\" text-indent +.nr li*mind (n;0\\$2)\" mark-indent +.nr li*pad (n;0\\$3)\" pad +.nr li*type 0\\$4\" type +.ds li*mark \\$5\" mark +.ie !'\\$6'' .nr li*li-spc \\$6\" LI-space +.el .nr li*li-spc 1 +.ie !'\\$7'' .nr li*lb-spc \\$6\" LB-space +.el .nr li*lb-spc 0 +.\" init listcounter +.nr li*cnt!\\n[li*lvl] 0 1 +.\" assign format +.af li*cnt!\\n[li*lvl] 1 +.if \\n[li*type] .if !'\\*[li*mark]'' .af li*cnt!\\n[li*lvl] \\*[li*mark] +.\" +.if \\n[li*lb-spc] .SP (u;\\n[li*lb-spc]*\\n[Lsp]) +.in +\\n[li*tind]u +.. +.\"--------------- +.de LI +.if \\n[li*lvl]<1 .@error "LI:no lists active" +.if \\n[li*li-spc]&(\\n[Ls]>=\\n[li*lvl]) .SP (u;\\n[li*li-spc]*\\n[Lsp]) +.ne 2v +.\" +.ds li*c-mark \\*[li*mark] +.nr li*cnt!\\n[li*lvl] +1 +.if \\n[li*type]=1 .ds li*c-mark \\n[li*cnt!\\n[li*lvl]]. +.if \\n[li*type]=2 .ds li*c-mark \\n[li*cnt!\\n[li*lvl]]) +.if \\n[li*type]=3 .ds li*c-mark (\\n[li*cnt!\\n[li*lvl]]) +.if \\n[li*type]=4 .ds li*c-mark [\\n[li*cnt!\\n[li*lvl]]] +.if \\n[li*type]=5 .ds li*c-mark <\\n[li*cnt!\\n[li*lvl]]> +.if \\n[li*type]=6 .ds li*c-mark {\\n[li*cnt!\\n[li*lvl]]} +.if \\n[.$]=1 .ds li*c-mark \\$1 +.ie \\n[.$]=2 \{\ +. ie (\\$2=2):(\\n[Limsp]=0) .ds li*c-mark \\$1\\*[li*c-mark] +. el .ds li*c-mark \\$1\ \\*[li*c-mark] +.\} +.\" +.\" determine where the text begins +.nr li*text-begin \\n[li*tind]>?\w@\\*[li*c-mark]\ @ +.nr x \w@\\*[li*c-mark]\ @ +.\" +.\" determine where the mark begin +.ie !\\n[li*pad] .nr li*in \\n[li*mind] +.el .nr li*in \\n[li*text-begin]-\\n[li*pad]-\w@\\*[li*c-mark]@ +.if !\\n[li*in] .nr li*in 0 +.\" +.ti -\\n[li*tind]u +.\" no indentation if hanging indent +.if (\w@\\*[li*c-mark]@=0)&((\\n[.$]=0):(\w@\\$1@=0)) .nr li*text-begin 0 +\Z'\&\h'\\n[li*in]u'\\*[li*c-mark]'\h'\\n[li*text-begin]u'\&\c +.if \\n[li*type]=-1 .br +.. +.\" +.\"------------- +.de li@pop +.nr li*lvl -1 +.misc@pop-nr cind li*tmp +.in \\n[li*tmp]u +.misc@pop-nr tind li*tind +.misc@pop-nr mind li*mind +.misc@pop-nr pad li*pad +.misc@pop-nr type li*type +.misc@pop-nr li-spc li*li-spc +.ds li*mark \\*[li*mark-list!\\n[li*lvl]] +.. +.de LE +.if \\n[li*lvl]<1 .@error "LE:mismatched" +.li@pop +.if '\\$1'1' .SP \\n[Lsp]u +.. +.\"------------- +.\" list status clear. +.\" terminate all lists to level i +.de LC +.ie \\n[.$]<1 .nr li*i 0 +.el .nr li*i \\$1 +.if \\n[li*i]>\\n[li*lvl] .@error "LC: incorrect argument: \\n[li*i] (too big)" +.while \\n[li*lvl]>\\n[li*i] .li@pop +.nr par@ind-flag 0 +.. +.\"------------- +.de AL +.if \\n[.$]>3 .@error "AL: too many arguments" +.if \\n[D]>2 .tm AL $* +.ie \\n[.$]<=1 .LB \\n[Li] 0 2 1 "\\$1" +.el \{\ +. ie \\n[.$]=2 .LB 0\\$2 0 2 1 "\\$1" +. el \{\ +. ie !'\\$2'' .LB \\$2 0 2 1 "\\$1" 0 1 +. el .LB \\n[Li] 0 2 1 "\\$1" 0 1 +. \} +.\} +.. +.de ML +.if \\n[.$]>3 .@error "ML: too many arguments" +.if \\n[D]>2 .tm ML $* +.nr li*ml-width \w@\\$1@u+1n +.if \\n[.$]<2 .LB \\n[li*ml-width]u 0 1 0 "\\$1" +.if \\n[.$]=2 .LB 0\\$2 0 1 0 "\\$1" +.if \\n[.$]=3 \{\ +. ie '\\$2'' .LB \\n[li*ml-width]u 0 1 0 "\\$1" 0 1 +. el .LB \\n[Li] 0 1 0 "\\$1" 0 1 +.\} +.. +.de VL +.if \\n[D]>2 .tm VL $* +.if \\n[.$]>3 .@error "VL: too many arguments" +.if \\n[.$]<1 .@error "VL: missing text-indent" +.ie \\n[.$]<3 .LB 0\\$1 0\\$2 0 0 +.el .LB 0\\$1 0\\$2 0 0 \& 0 1 +.. +.\" Bullet (for .BL) +.de BL +.if \\n[D]>2 .tm BL $* +.ds BU \s-2\(bu\s0 +.if \\n[.$]>2 .@error "BL: too many arguments" +.if \\n[.$]<1 .LB \\n[Pi] 0 1 0 \\*[BU] +.if \\n[.$]=1 .LB 0\\$1 0 1 0 \\*[BU] +.if \\n[.$]=2 \{\ +. ie '\\$1'' .LB \\n[Pi] 0 1 0 \\*[BU] 0 1 +. el .LB 0\\$1 0 1 0 \\*[BU] 0 1 +.\} +.. +.de DL +.if \\n[D]>2 .tm DL $* +.if \\n[.$]>2 .@error "DL: too many arguments" +.if \\n[.$]<1 .LB \\n[Pi] 0 1 0 \(em +.if \\n[.$]=1 .LB 0\\$1 0 1 0 \(em +.if \\n[.$]=2 \{\ +. ie '\\$1'' .LB \\n[Pi] 0 1 0 \(em 0 1 +. el .LB 0\\$1 0 1 0 \(em 0 1 +.\} +.. +.de RL +.if \\n[D]>2 .tm RL $* +.if \\n[.$]>2 .@error "RL: too many arguments" +.if \\n[.$]<1 .LB 6 0 2 4 +.if \\n[.$]=1 .LB 0\\$1 0 2 4 +.if \\n[.$]=2 \{\ +. ie '\\$1'' .LB 6 0 2 4 1 0 1 +. el .LB 0\\$1 0 2 4 1 0 1 +.\} +.. +.\" Broken Variable List. As .VL but text begin on the next line +.de BVL +.if \\n[D]>2 .tm BVL $* +.if \\n[.$]>3 .@error "BVL: too many arguments" +.if \\n[.$]<1 .@error "BVL: missing text-indent" +.ie \\n[.$]<3 .LB 0\\$1 0\\$2 0 -1 +.el .LB 0\\$1 0\\$2 0 -1 \& 0 1 +.. +.\" ####### module tbl ####################################### +.\" This module is copied from groff_ms and modified for mgm. +.\" Yes, it does not resemble the original anymore :-). +.\" Don't know if I missed something important. +.\" Groff_ms is written by James Clark. +.nr tbl*have-header 0 +.nr tbl*header-written 0 +.de TS +.br +.if ''\\n[.z]' .SP +.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@bottom-hook +.if \\n[tbl*have-header] \{\ +. nr T. 1 +.\" draw bottom and side lines of boxed tables. +. T# +.\} +.nr tbl*header-written 0 +.. +.de tbl@print-header +.ev tbl*ev +'nf +.tbl*header-div +.ev +.mk #T +.nr tbl*header-written 1 +.. +.de TH +.if '\\$1'N' @error TH: N not implemented yet. Sorry. +.ie '\\n[.z]'tbl*header-div' \{\ +. nr T. 0 +. T# +. br +. di +. nr tbl*header-ht \\n[dn] +. ne \\n[dn]u+1v +. nr tbl*have-header 1 +. ie '\\$1'N' .if !\\n[tbl*header-written] .tbl@print-header +. el .tbl@print-header +.\} +.el .@error ".TH without .TS H" +.. +.de TE +.ie '\\n(.z'tbl*header-div' .@error ".TS H but no .TH before .TE" +.el \{\ +. nr tbl*have-header 0 +.\} +.\" reset tabs +.TAB +.. +.de T& +.. +.\" ####### module pic ####################################### +.de PS +.nr pic*in 0 +.br +.SP .5 +.ie \\n[.$]<2 .@error "PS: bad arguments. Probably not processed with pic." +.el \{\ +. if !\\n[ds*lvl] .ne (u;\\$1)+1v +.\" should be contained between .DS/.DE +.if r ds*format \{\ +. if \\n[ds*lvl]&((\\n[ds*format]=2):(\\n[ds*format]=3)) \{\ +. nr pic*in \\n[.i] +.\" . in +(u;\\n[.l]-\\n[.i]-\\$2/2) +. \} +. \} +.\} +.. +.de PE +.init@reset +.SP .5 +.. +.\" ####### module eq ####################################### +.\" +.nr eq*number 0 1 +.ds eq*label +.de EQ +.ds eq*label "\\$1 +.. +.de eq@check +.if !'\\*[eq*label]'' \{\ +. mk +' sp (u;\\$1/2-.45v) +. ie (\\n[Eq]%2) \{\ +. \" label to the left +\h'|0'\\*[eq*label]\c +. \} +. el \{\ +. \" label to the right +\h'|\\n[.l]u'\\*[eq*label] +. \} +. rt +.\} +.ds eq*label +.. +.de EN +.. +.\"########### module toc ################### +.\" table of contents +.nr toc*slevel 1 +.nr toc*spacing \n[Lsp]u +.nr toc*tlevel 2 +.nr toc*tab 0 +.\"----------- +.\" Table of contents with friends (module lix) +.de TC +.br +.\" print any pending displays and references +.df@print-float 3 +.if \\n[ref*flag] .RP 0 1 +.\" +.if \w@\\$1@>0 .nr toc*slevel \\$1 +.if \w@\\$2@>0 .nr toc*spacing (u;\\$2*\\n[Lsp]) +.if \w@\\$3@>0 .nr toc*tlevel \\$3 +.if \w@\\$4@>0 .nr toc*tab \\$4 +.if \\n[pg*cols-per-page]>1 .1C +.ds H1txt \\*[Licon] +.ds Tcst co +.pg@clear-hd +.EF "" +.OF "" +.pg@next-page +.\"------------- +.if d Ci .toc@read-Ci \\*[Ci] +.nf +.in 0 +.ie \\n[Oc] .hd@set-page 1 +.el \{\ +. nr toc*pn 1 1 +. af toc*pn i +. aln ;g toc*pn +. PF "''\\\\\\\\n[toc*pn]''" +. am pg@header +. nr toc*pn +1 +\\.. +.\} +.nr toc*i 4 1 +.while \\n+[toc*i]<10 \{\ +. if !'\\$\\n[toc*i]'' \{\ +. ce +\\$\\n[toc*i] +. br +. \} +.\} +.if \\n[.$]<=4 .if d TX .TX +.ie d TY .if \\n[.$]<=4 .TY +.el \{\ +. ce +\\*[Licon] +. br +. SP 3 +.\} +.if d toc*list .toc*list +.br +.\" print LIST OF XXX +.if d lix*dsfg .lix@print-ds fg FG "\\*[Lf]" \\n[.$] +.if d lix*dstb .lix@print-ds tb TB "\\*[Lt]" \\n[.$] +.if d lix*dsec .lix@print-ds ec EC "\\*[Le]" \\n[.$] +.if d lix*dsex .lix@print-ds ex EX "\\*[Lx]" \\n[.$] +.. +.\"----------- +.\" .toc@read-Ci lev1 lev2 lev3 lev4 ... lev7 +.de toc@read-Ci +.nr toc*i 0 1 +.while \\n+[toc*i]<8 \{\ +. nr toc*hl!\\n[toc*i] \\$\\n[toc*i] +.\} +.. +.\"----------- +.de toc@entry +.ie \\n[Sectp] \{\ +. toc@save \\$1 "\\*[hd*mark]" "\\$2" \\*[hd*sect-pg] +.\} +.el .toc@save \\$1 "\\*[hd*mark]" "\\$2" \\n[%] +.. +.als )E toc@entry +.\"----------- +.de toc@save +.\" collect maxsize of mark if string Ci don't exist. +.if !d Ci \{\ +. if !r toc*hl!\\$1 .nr toc*hl!\\$1 0 +. if \\n[toc*hl!\\$1]<=\w@\\$2@ \{\ +. nr toc*hl!\\$1 \w@\\$2@u +. \} +.\} +.am toc*list +.\" .toc@set level headernumber text pagenr +.toc@set \\$1 "\\$2" "\\$3" \\$4 +\\.. +.. +.\"----------- +.\" level mark text pagenumber +.de toc@set +.if \\$1<=\\n[toc*slevel] .SP \\n[toc*spacing]u +.na +.fi +.nr toc*ind 0 +.nr toc*i 0 1 +.ie d Ci \{\ +. nr toc*ind +\\n[toc*hl!\\$1]u +.\} +.el \{\ +. while \\n+[toc*i]<\\$1 \{\ +. nr toc*ind +\\n[toc*hl!\\n[toc*i]]u +. \} +.\} +.nr toc*text \\n[toc*ind]u+\\n[toc*hl!\\$1]u +.in \\n[toc*text]u +.ti -\\n[toc*hl!\\$1]u +.\" +.\" length of headernum space +.nr toc*i \\n[toc*hl!\\$1]-\w@\\$2@ +.\" +.ll \\n[@ll]u-\w@\\$4@u-2m +.ne 2v +.\" ragged right --------------------------------- +.ie \\$1>\\n[toc*tlevel] \{\ +\\$2 +. sp -1 +\\$3\ \ \ \\$4 +. br +.\} +.el \{\ +. \" unnumbered heading -------------------- +. ie '\\$2'' \{\ +. in \\n[toc*ind]u +\\$3\h'1m' +. \} +. \" normal heading ------------------------ +. el \{\ +\\$2 +. sp -1 +\\$3\h'1m' +. \} +. ll \\n[@ll]u +. sp -1 +. nr toc*sep (u;\\n[.l]-\\n[.n]-\\n[.i]-\w@\\$4@)-1m +\h'|\\n[.n]u'\l'\\n[toc*sep]u.'\h'1m'\\$4 +.\} +.ll \\n[@ll]u +.. +.\"########################### module lix ############################ +.\" LIST OF figures, tables, exhibits and equations +.nr lix*fg-nr 0 1 +.nr lix*tb-nr 0 1 +.nr lix*ec-nr 0 1 +.nr lix*ex-nr 0 1 +.aln Fg lix*fg-nr +.aln Tb lix*tb-nr +.aln Ec lix*ec-nr +.aln Ex lix*ex-nr +.\"------------ +.de FG +.lix@print-line fg Lf \\n+[lix*fg-nr] "\\$1" "\\$2" "\\$3" "\\$4" +.. +.de TB +.lix@print-line tb Lt \\n+[lix*tb-nr] "\\$1" "\\$2" "\\$3" "\\$4" +.. +.de EC +.lix@print-line ec Le \\n+[lix*ec-nr] "\\$1" "\\$2" "\\$3" "\\$4" +.. +.de EX +.lix@print-line ex Lx \\n+[lix*ex-nr] "\\$1" "\\$2" "\\$3" "\\$4" +.. +.\"------------ +.\" print line with 'figure' in the text +.\" type stringvar number text override flag refname +.de lix@print-line +.ds lix*text "\\$4 +.\" +.ie \\n[Sectf] .ds lix*numb \\n[H1]-\\$3 +.el .ds lix*numb \\$3 +.\" +.ie !\\n[Of] .ds lix*ds-form .\ \ \" +.el .ds lix*ds-form "\ \(em\ \" +.nr lix*in \\n[.i] +.ds lix*label \\*[Li\\$1]\ \\*[lix*numb]\\*[lix*ds-form] +.if !'\\$5'' \{\ +. if !0\\$6 .ds lix*label \\*[Li\\$1]\ \\$5\\*[lix*numb]\\*[lix*ds-form] +. if 0\\$6=1 .ds lix*label \\*[Li\\$1]\ \\*[lix*numb]\\$5\\*[lix*ds-form] +. if 0\\$6=2 .ds lix*label \\*[Li\\$1]\ \\$5\\*[lix*ds-form] +.\} +.\" print line if not between DS/DE +.ie \\n[ds*lvl]<1&\\n[df*float]=0 \{\ +. lix@print-text "\\*[lix*label]" "\\*[lix*text]" \\$1 \\$2 \\$7 +.\} +.el \{\ +. lix@embedded-text "\\*[lix*label]" "\\*[lix*text]" \\$1 \\$2 \\$7 +.\} +.\" +.. +.\"----------- +.\" label text type stringvar refname +.de lix@print-text +.ie \\n[Sectp] .ds lix*pgnr \\*[hd*sect-pg] +.el .ds lix*pgnr \\n[%] +.SP \\n[Lsp]u +.misc@ev-keep lix +.init@reset +.br +.ie (\w@\\$1\\$2@)>(\\n[.l]-\\n[.i]) \{\ +. in +\w@\\$1@u +. ti 0 +.\} +.el .ce 1 +\fB\\$1\fP\\$2 +.br +.ev +.\" save line for LIST OF XXX, wth is the width of the label +.if !r lix*wth\\$3 .nr lix*wth\\$3 0 +.\" find the maximum width +.if \w@\\*[lix*label]@>\\n[lix*wth\\$3] .nr lix*wth\\$3 \w@\\*[lix*label]@ +.if \\n[\\$4] .lix@ds-save \\$3 \\*[lix*pgnr] "\\*[lix*text]" "\\*[lix*label]" +.\" save reference to the figure +.if !'\\$5'' .SETR \\$5 \\*[lix*numb] +.. +.\" hide printout until diversion is evaluated +.de lix@embedded-text +\!.ie \\\\n[Sectp] .ds lix*pgnr \\\\*[hd*sect-pg] +\!.el .ds lix*pgnr \\\\n[%] +\!.SP \\\\n[Lsp]u +\!.misc@ev-keep lix +\!.ll \\n[.l]u +\!.init@reset +\!.fi +\!.ie (\w@\\$1\\$2@)>(\\\\n[.l]-\\\\n[.i]) \{\ +. in +\w@\\$1@u +\!. ti 0 +\!\fB\\$1\fP\\$2 +\!.\} +\!.el \{\ +. ce 1 +\!\fB\\$1\fP\\$2 +\!.\} +\!.br +\!.ev +.\" save line for LIST OF XXX, wth is the width of the label +\!.if !r lix*wth\\$3 .nr lix*wth\\$3 0 +.\" find the maximum width +\!.if \w@\\*[lix*label]@>\\\\n[lix*wth\\$3] .nr lix*wth\\$3 \w@\\*[lix*label]@ +\!.if \\\\n[\\$4] .lix@ds-save \\$3 \\\\*[lix*pgnr] "\\*[lix*text]" "\\*[lix*label]" +.\" save reference to the figure +\!.if !'\\$5'' .SETR \\$5 \\*[lix*numb] +.. +.\"------------ +.\" print complete list of XXXX +.de lix@print-ds +.\" arg: fg,tb,ec,ex text +.ds H1txt \\$3 +.ds Tcst \\$1 +.if !\\n[Cp] .pg@next-page +.\" print LIST OF XXXX +.\" execute user-defined macros +.if \\$4<=4 .if d TX\\$2 .TX\\$2 +.ie d TY\\$2 .if \\$4<=4 .TY\\$2 +.el \{\ +. ce +\\$3 +. SP 3 +.\} +.in \\n[lix*wth\\$1]u +.fi +.lix*ds\\$1 +.. +.\"------------ +.\" save line of list in macro +.de lix@ds-save +.\" type pagenumber text +.am lix*ds\\$1 +.lix@dsln \\$1 \\$2 "\\$3" "\\$4" \\$5 +\\.. +.. +.\"------------ +.\" print appended macro +.\" lix@dsln type pagenumber text headernr +.de lix@dsln +.nr lix*i \\n[lix*wth\\$1]-\w@\\$4@ +.ne 4v +.ll \\n[@ll]u-\w@\\$4@u-\w@\\$2@u-2m +.ti -\\n[lix*wth\\$1]u +\\$4 +.sp -1 +\\$3\h'1m' +.sp -1 +.ll +.nr lix*sep (u;\\n[.l]-\\n[.n]-\\n[.i]-\w@\\$2@)-1m +\h'|\\n[.n]u'\l'\\n[lix*sep]u.'\h'1m'\\$2 +.SP \\n[toc*spacing]u +.. +.\"########################### module fnt ############################ +.\" some font macros. +.de R +.ft R +.ul 0 +.. +.\"----------- +.de fnt@switch +.ul 0 +.ds fnt*tmp +.nr fnt*prev \\n[.f] +.nr fnt*i 2 1 +.while \\n+[fnt*i]<=\\n[.$] \{\ +. if \\n[fnt*i]>3 .as fnt*tmp \, +. ie (\\n[fnt*i]%2)=1 .as fnt*tmp \\$1\\$[\\n[fnt*i]] +. el .as fnt*tmp \\$2\\$[\\n[fnt*i]] +. if \\n[fnt*i]<\\n[.$] .as fnt*tmp \/ +.\} +\&\\*[fnt*tmp]\f[\\n[fnt*prev]] +.. +.\"----------- +.de B +.ie \\n[.$] .fnt@switch \fB \f[\\n[.f]] \\$@ +.el .ft B +.. +.de I +.ie \\n[.$] .fnt@switch \fI \f[\\n[.f]] \\$@ +.el .ft I +.. +.de IB +.if \\n[.$] .fnt@switch \fI \fB \\$@ +.. +.de BI +.if \\n[.$] .fnt@switch \fB \fI \\$@ +.. +.de IR +.if \\n[.$] .fnt@switch \fI \fR \\$@ +.. +.de RI +.if \\n[.$] .fnt@switch \fR \fI \\$@ +.. +.de RB +.if \\n[.$] .fnt@switch \fR \fB \\$@ +.. +.de BR +.if \\n[.$] .fnt@switch \fB \fR \\$@ +.. +.\"########################### module box ############################ +.\" draw a box around some text. Text will be kept on the same page. +.\" +.nr box*ll 0 +.\" .B1 and .B2 works like .DS +.de B1 +.if \\n[box*ll] .@error "B1: missing B2" +.nr box*ll \\n[.l] +.nr box*ind \\n[.i] +.nr box*hyp \\n[.hy] +.nr box*wid \\n[.l]-\\n[.i] +.\" +.\" jump to new environment. +.ev box*ev +.di box*div +.ps \\n[@ps]u +.vs \\n[@vs]u +.in 1n +.ll (u;\\n[box*wid]-1n) +.hy \\n[.hy] +.. +.de B2 +.if !\\n[box*ll] .@error "B2: missing B1" +.br +.di +.nr box*height \\n[dn] +.ne \\n[dn]u+1v +.ll \\n[box*ll]u +.in \\n[box*ind]u +.nr box*y-pos \\n[.d]u +.nf +.box*div +.fi +\v'-1v+.25m'\ +\D'l \\n[box*wid]u 0'\ +\D'l 0 -\\n[box*height]u'\ +\D'l -\\n[box*wid]u 0'\ +\D'l 0 \\n[box*height]u' +.br +.sp -1 +.ev +.sp .20v +.in \\n[box*ind]u +.ll \\n[box*ll]u +.rm box*div +.nr box*ll 0 +.. +.\"########################### module ref ############################ +.nr ref*nr 0 1 +.aln :R ref*nr +.nr ref*nr-width 5n +.nr ref*flag 0 \" for end-of-text +.ds Rf \v'-.4m'\s-3[\\n+[ref*nr]]\s0\v'.4m' +.\" +.\" start reference +.\"------------ +.de RS +.if !''\\$1' .ds \\$1 \v'-.4m'\s-3[\\n[ref*nr]]\s0\v'.4m' +.nr ref*flag 1 +.am ref*mac +.ref@start-print \\n[ref*nr] +\\.. +.eo +.am ref*mac RF +.. +.\"------------ +.de RF +.ec +.am ref*mac +.ref@stop-print +\\.. +.. +.\"------------ +.de ref@start-print +.di ref*div +.in \\n[ref*nr-width]u +.ti -(\w@\\$1.@u+1n) +\\$1. +.sp -1 +.. +.de ref@stop-print +.br +.di +.ne \\n[dn]u +.ev ref*ev2 +.nf +.ref*div +.ev +.rm ref*div +.if \\n[Ls] .SP \\n[Lsp]u +.. +.\"----------- +.de RP +.if !d ref*mac .@error "RP: No references!" +.nr ref*i 0\\$2 +.if \\n[ref*i]<2 .SK +.SP 2 +.ref@print-refs +.if 0\\$1<1 .nr ref*nr 0 1 +.if ((\\n[ref*i]=0):(\\n[ref*i]=2)) .SK +.. +.\"----------- +.\" called by end-of-text! +.de ref@eot-print +.\".if \\n[ref*flag] \{ +.if d ref*mac \{\ +. if \\n[D]>2 .tm Print references, called by eot +. nr ref*flag 0 +. br +. misc@ev-keep ne +. init@reset +\c +' bp +. ev +. ref@print-refs +.\} +.. +.\"----------- +.\" prints the references +.de ref@print-refs +.toc@save 1 "" "\\*[Rp]" \\n[%] +.ce +\fI\\*[Rp]\fP +.sp +.nr ref*ll \\n[.l] +.misc@ev-keep ref*ev +.ll \\n[ref*ll]u +.in 0 +.ref*mac +.in +.rm ref*mac +.ev +.nr ref*flag 0 1 +.. +.\"########################### module app ############################ +.\" +.nr app*nr 0 1 +.af app*nr A +.nr app*dnr 0 1 +.nr app*flag 0 +.\"------------ +.\" .APP name text +.\" name == "" -> autonumber +.de APP +.\" .if \\n[.$]<2 .@error "APP: too few arguments" +.app@set-ind "\\$1" +.\" +.ds Tcst ap +.ds Apptxt \\$2 +.\" +.ie \\n[Aph] .app@header \\*[app*ind] "\\$2" +.el .bp +.app@index "\\*[app*ind]" "\\$2" +.. +.\"------------ +.\" .APPSK name pages text +.\" name == "" -> autonumber +.de APPSK +.if \\n[.$]<2 .@error "APPSK: too few arguments" +.app@set-ind "\\$1" +.\" +.ds Tcst ap +.ds Apptxt \\$3 +.\" +.ie \\n[Aph] .app@header \\*[app*ind] "\\$3" +.el .bp +.app@index "\\*[app*ind]" "\\$3" +.pn +\\$2 +.. +.\"------------ +.de app@set-ind +.ie \w@\\$1@ .ds app*ind \\$1 +.el \{\ +. if !\\n[app*flag] \{\ +. nr H1 0 1 +. af H1 A +. af H1h A +. nr app*flag 1 +. \} +. ds app*ind \\n+[app*nr] +. nr H1 \\n+[app*dnr] +. nr H1h \\n[app*dnr] +.\} +.\" clear lower counters +.nr app*i 1 1 +.while \\n+[app*i]<8 .nr H\\n[app*i] 0 1 +.. +.\"------------ +.de app@index +.toc@save 1 "" "\\*[App] \\$1: \\$2" \\n[%] +.. +.\"------------ +.\" app@heaer name text +.de app@header +.bp +.SP (u;\\n[Lsp]*4) +.ce 1 +\s+4\fB\\*[App]\ \\$1\fP\s0 +.SP (u;\\n[Lsp]*2) +.if \w@\\$2@<\\n[.l] .ce 1 +\fB\s+2\\$2\s0\fP +.SP (u;\\n[Lsp]*4) +.. +.als APPX app@header +.\"########################### module cov ############################ +.\" title stored in diversion cov*title +.\" abstract stored in diversion cov*abstract +.\" arg to abstract stored in cov*abs-arg +.\" indent stored in cov*abs-ind +.\" number of authors stored in cov*au +.\" author(s) stored in cov*au!x!y +.\" author(s) title stored in cov*at!x!y +.\" x is the author-index [1-cov*au], y is the argument-index [1-9]. +.\" author(s) firm stored in cov*firm +.\" new date (if .ND exists) is stored in cov*new-date +.\" +.\" +.ds cov*abs-name ABSTRACT +.\" +.nr cov*au 0 +.de TL +.rm IA IE WA WE LO LT +.if \\n[.$]>0 .ds cov*title-charge-case \\$1 +.if \\n[.$]>1 .ds cov*title-file-case \\$2 +.pg@disable-top-trap +.eo +.de cov*title AU +.. +.\"------------------- +.de cov@title-end +.ec +.. +.\"------------------- +.\" .AU name [initials [loc [dept [ext [room [arg [arg [arg]]]]]]]] +.de AU +.cov@title-end +.pg@disable-top-trap +.nr cov*au +1 +.nr cov*i 0 1 +.ds cov*au!\\n[cov*au]!1 +.while \\n[.$]>=\\n+[cov*i] \{\ +. ds cov*au!\\n[cov*au]!\\n[cov*i] "\\$[\\n[cov*i]] +.\} +.if (\\n[.$]>=3)&(\w@\\$3@) \{\ +. if d cov*location-\\$3] \{\ +. ds cov*au!3!\\n[cov*au] \\*[cov*location-\\$3] +. \} +.\} +.. +.\"------------------- +.\" .AT title1 [title2 [... [title9] ]]]] +.\" Well, thats all that COVEND look for. +.\" Must appear directly after .AU +.de AT +.if \\n[.$]<1 .@error "AT: no arguments" +.nr cov*i 0 1 +.while \\n[.$]>=\\n+[cov*i] \{\ +. ds cov*at!\\n[cov*au]!\\n[cov*i] "\\$[\\n[cov*i]] +.\} +.. +.\"------------------- +.de AF +.cov@title-end +.ds cov*firm \\$1 +.. +.de AST +.ds cov*abs-name \\$1 +.. +.de AS +.pg@disable-top-trap +.if d cov*abstract .@error "AS: only one abstract allowed" +.if !''\\n[.z]' .@error "AS: no diversion allowed (previous .AS?)" +.nr cov*abs-arg 0\\$1 +.nr cov*abs-ind (n;0\\$2) +.de cov*abstract AE +.. +.de AE +.. +.\" fixed for 2000, now uses \n[year]. +.de ISODATE +. \" support for ISO-date +. nr cov*mm \\n[mo] +. nr cov*dd \\n[dy] +. af cov*mm 01 +. af cov*dd 01 +. ie '0'\\$1' \{\ +. ds cov*new-date \\*[MO\\n[mo]] \\n[dy], \\n[year] +. \} +. el \{\ +. ds cov*new-date \\n[year]-\\n[cov*mm]-\\n[cov*dd] +. \} +.. +.ISODATE 0 +.als DT cov*new-date +.de ND +.ds cov*new-date \\$1 +.. +.\" switch to ISO-date if register Iso exist: YYYY-MM-DD +.if r Iso .ISODATE 1 +.\"------------------- +.\" save technical numbers. +.de TM +.nr cov*i 0 1 +.while \\n[.$]>=\\n+[cov*i] .ds cov*mt-tm!\\n[cov*i] \\$[\\n[cov*i]] +.nr cov*mt-tm-max \\n[.$] +.. +.\"----------------------- +.\" cover sheet +.\" the file must have the following last lines (somewhere): +.\" .pg@enable-top-trap +.\" .bp 1 +.\" .pg@enable-trap +.ds cov*mt-file!0 0.MT +.ds cov*mt-file!1 0.MT +.ds cov*mt-file!2 0.MT +.ds cov*mt-file!3 0.MT +.ds cov*mt-file!4 4.MT +.ds cov*mt-file!5 5.MT +.ds cov*mt-file!6 0.MT +.\"------------ +.de MT +.ie \\n[.$] \{\ +. ie d cov*mt-file!\\$1 .ds cov*mt-type \\$1 +. el .ds cov*mt-type 6 +.\} +.el .ds cov*mt-type 1 +.ds cov*mt-addresse "\\$2 +.ds cov*mt-type-text "\\$1 +.ie d @language .ds cov*str mm/\\*[@language]_ +.el .ds cov*str mm/ +.mso \\*[cov*str]\\*[cov*mt-file!\\*[cov*mt-type]] +.. +.de COVER +.ie !\\n[.$] .ds cov*cov-type ms +.el .ds cov*cov-type \\$1 +.pg@disable-top-trap +.ie d @language .ds cov*str mm/\\*[@language]_\\*[cov*cov-type].cov +.el .ds cov*str mm/\\*[cov*cov-type].cov +.mso \\*[cov*str] +.. +.\"########################### module qrf ############################ +.\" forward and backward reference thru special files. +.\" +.\" check if stderr-method is wanted +.\" This was needed when I discovered that groff was considered unsafe +.\" and groff -U didn't work. It's a workaround like the original +.\" index method, but not in my view elegant enough. +.\" +.\" init reference system +.de INITR +.ds qrf*file \\$1.qrf +.nr qrf*pass 2 +.if \\n[D]>1 .tm INITR: source \\*[qrf*file] +.ie \\n[Ref] \{\ +. tm .\\\\" Rfilename: \\*[qrf*file] +.\} +.el 'so \\*[qrf*file] +.. +.\"--------------- +.\" set a reference. +.de SETR +.if \\n[.$]<1 .@error "SETR:reference name missing" +.if !r qrf*pass .tm "SETR: No .INITR in this file" +.if \\n[Ref] \{\ +. ds qrf*name qrf*ref-\\$1 +. if \\n[D]>2 .tm SETR: ref \\*[qrf*name]=\\*[hd*mark],\\n[%] +. \" heading-number +. ds \\*[qrf*name]-hn \\*[hd*mark] +. \" page-number +. ds \\*[qrf*name]-pn \\n[%] +. \" +. if \\n[Ref] \{\ +. tm .ds \\*[qrf*name]-hn \\*[hd*mark] +. tm .ds \\*[qrf*name]-pn \\n[%] +. if !'\\$2'' .tm .ds \\*[qrf*name]-xx \\$2 +. \} +.\} +.. +.\"--------------- +.\" get misc-string +.\" If two arg -> set var. arg to misc-string. +.de GETST +.if \\n[.$]<1 .@error "GETST:reference name missing" +.if !r qrf*pass .tm "GETST: No .INITR in this file" +.ds qrf*name qrf*ref-\\$1 +. if d \\*[qrf*name]-xx \{\ +. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-xx] +. el \\*[\\*[qrf*name]-xx]\c +. \} +.\} +.. +.\"--------------- +.\" get header-number +.\" If two arg -> set var. arg to header-number. +.de GETHN +.if \\n[.$]<1 .@error "GETHN:reference name missing" +.if !r qrf*pass .tm "GETHN: No .INITR in this file" +.ds qrf*name qrf*ref-\\$1 +.if d \\*[qrf*name]-hn \{\ +. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-hn] +. el \\*[\\*[qrf*name]-hn]\c +.\} +.. +.\"--------------- +.\" get page-number +.\" If two arg -> set var. arg to page-number. +.de GETPN +.if \\n[.$]<1 .@error "GETPN:reference name missing" +.if !r qrf*pass .tm "GETPN: No .INITR in this file" +.ds qrf*name qrf*ref-\\$1 +.if d \\*[qrf*name]-pn \{\ +. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-pn] +. el \\*[\\*[qrf*name]-pn]\c +.\} +.. +.\"---------- +.de GETR +.if \\n[.$]<1 .@error "GETR:reference name missing" +.ie !r qrf*pass \{\ +. tm "GETR: No .INITR in this file" +.\} +.el \{\ +. GETHN \\$1 Qrfh +. GETPN \\$1 Qrfp +\\*[Qrf] +.\} +.. +.\"########################### module ind ############################ +.\" Support for mgs-style indexing, borrowed from mgs. +.de IX +.tm \\$1\t\\$2\t\\$3\t\\$4 ... \\n[%] +.. +.\"-------------------- +.\" Another type of index system +.\" INITI type filename [macro] +.de INITI +.if \\n[.$]<1 .@error "INITI:type missing" +.\" ignore if INITI has already been used +.if \\n[.$]>1 \{\ +. if d ind*file .@error "INITI:file already set" +. ds ind*file \\$2.ind +. if \\n[D]>1 .tm INITI: source \\*[ind*file] +.\} +.if !d ind*file .@error "INITI:file not specified" +.ds ind*type \\$1 +.if \\n[Ref] \{\ +. if \\n[.$]>2 .tm .\\\\" Imacro: \\$3 +.\} +.. +.\"--------------- +.de IND +.if !d ind*file .@error "IND: No active INITI" +.if \\n[D]>1 .tm IND: type=\\*[ind*type] +.ds ind*ref +.if '\\*[ind*type]'N' .ds ind*ref \\n[%] +.if '\\*[ind*type]'H' .ds ind*ref \\*[hd*mark] +.if '\\*[ind*type]'B' .ds ind*ref \\*[hd*mark]\t\\n[%] +.if '\\*[ind*ref]'' .@error "IND:wrong index type: \\*[ind*ref]" +.\" +.ds ind*line \\$1 +.while \\n[.$]>0 \{\ +. shift +. as ind*line \t\\$1 +.\} +.as ind*line \\*[ind*ref] +.if \\n[Ref] .tm .\\\\" IND \\*[ind*line] +.. +.\" print index +.de INDP +.ie \\n[Ref] .tm .\\\\" Index: \\*[ind*file] +.el \{\ +. if !\\n[Cp] .pg@next-page +. \" print INDEX +. \" execute user-defined macros +. if d TXIND .TXIND +. ie d TYIND .TYIND +. el \{\ +. SK +. ce +\\*[Index] +. SP 3 +. 2C +. nf +. \} +' so \\*[ind*file] +. ie d TZIND .TZIND +. el \{\ +. fi +. 1C +. \} +.\} +.rm ind*file +.. +.\"########################### module let ############################ +.\" Letter macros +.\"------------------------ +.\" Formal closing +.de FC +.df@print-float 3 +.ie \\n[.$] .ds let*i \\$1 +.el .ds let*i \\*[Letfc] +.ie d let*type .let@fc_\\*[let*type] "\\*[let*i]" \\$@ +.el .let@mt-closing "\\*[let*i]" \\$@ +.. +.\"------- +.de let@mt-closing +.ne 5v +.in (u;\\n[.l]/2) +.sp +\\$1 +.in +.. +.\"------------------------ +.\" Signature line +.de SG +.ie d let*type .let*lt-sign \\$@ +.el .let*mt-sign \\$@ +.. +.\"------------------------ +.de let*lt-sign +.if !d let@sg_\\*[let*type] .@error "SG: letter type \\*[let*type] undefined" +.df@print-float 3 +.nr let*i 0 1 +.nr let*j 0 +.while \\n+[let*i]<=\\n[let*wa-n] \{\ +.if \\n[let*i]=\\n[let*wa-n] .nr let*j 1 +.let@sg_\\*[let*type] "\\*[let*wa-name!\\n[let*i]]" "\\*[let*wa-title!\\n[let*i]]" \\n[let*i] \\n[let*j] \\$@ +.\} +.. +.\"------------------------ +.\" Memorandum signature +.de let*mt-sign +.df@print-float 3 +.ne \\n[cov*au]u*4v +.ie \\n[.$]>1 .nr let*k 1 +.el .nr let*k \\n[cov*au] +.ds let*tmp \\*[cov*au!\\n[let*k]!3]-\\*[cov*au!\\n[let*k]!4]- +.nr let*i 0 1 +.while \\n+[let*i]<=\\n[cov*au] \{\ +. if \\n[let*i]>1 .as let*tmp / +. as let*tmp \\*[cov*au!\\n[let*k]!2] +.\} +.if !''\\$1' .as let*tmp -\\$1 +.in (u;\\n[.l]/2) +.nf +.nr let*i 0 1 +.while \\n+[let*i]<=\\n[cov*au] \{\ +. SP 3v +. if \\n[let*i]=\\n[let*k] \{\ +\Z'\h'-(u;\\n[.l]/2)'\\*[let*tmp]'\c +. \} +\\*[cov*au!\\n[let*i]!1] +.\} +.fi +.in +.. +.\"------------------------ +.\" Approval signature +.de AV +.ne 6v +.nf +.sp +.ie \\n[.$]<2 \\*[Letapp] +.el .sp +.sp 2 +.ie n ______________________________ ______________ +.el \D'l 25m 0'\h'4m'\D'l 12m 0' +\Z'\\$1'\h'29m'\f[\\*[@sdf_font]]\\*[Letdate]\fP +.fi +.. +.\"------------------------ +.\" Letter signature +.de AVL +.ne 6v +.nf +.sp 3 +.ie n ______________________________ +.el \D'l 25m 0' +\Z'\\$1' +.fi +.. +.\"------------------------ +.\" Letter type +.\" let@header is called from the header. It is supposed +.\" to remove the alias itself. +.de LT +.rm AF AS AE AT AU CS OK TL MT +.ds let*type BL +.nr Pi 5 +.nr Pt 0 +.if !''\\$1' .ds let*type \\$1 +.if !d let@head_\\*[let*type] .@error "LT: unknown letter type \\$1" +.shift +.als let@header let@head_\\*[let*type] +.let@init_\\*[let*type] \\$@ +.if \n[D]>1 .tm Letter type \\*[let*type] +.. +.\"----------- +.\" Blocked letter +.de let@init_BL +.. +.de let@head_BL +.rm let@header +.let@print-head 1 +.. +.de let@sg_BL +.ne 5v +.nf +.in (u;\\n[.l]/2) +.sp 3v +\\$1 +\\$2 +.in +.if \\$4 .sp +.if \w'\\$5'&\\$4 \\$5 +.fi +.. +.als let@fc_BL let@mt-closing +.\"----------- +.\" Semiblocked letter +.de let@init_SB +.nr Pt 1 +.. +.de let@head_SB +.rm let@header +.let@print-head 1 +.. +.als let@sg_SB let@sg_BL +.als let@fc_SB let@mt-closing +.\"----------- +.\" Full-blocked letter +.de let@init_FB +.. +.de let@head_FB +.rm let@header +.let@print-head +.. +.de let@sg_FB +.ne 5v +.nf +.sp 3v +\\$1 +\\$2 +.if \\$4 .sp +.if \w'\\$5'&\\$4 \\$5 +.fi +.. +.de let@fc_FB +.ne 5v +.sp +\\$1 +.. +.\"----------- +.\" Simplified letter +.de let@init_SP +.. +.de let@head_SP +.rm let@header +.let@print-head +.. +.de let@sg_SP +.nf +.if \\$3=1 .sp +.sp +.misc@toupper "\\$1, \\$2" +.if \\$4 .sp +.if \w'\\$5'&\\$4 \\$5 +.fi +.. +.de let@fc_SP +.sp 2 +.. +.\"-------------------------------------- +.\" Print the letter-head +.de let@print-head +.nf +.sp |11 +.if '1'\\$1' .in (u;\\n[.l]/2) +.\" ---- WA +.ie d let@wa-div .let@wa-div +.el .sp 3 +.\" ---- datum +\\*[cov*new-date] +.sp +.if '1'\\$1' .if !d let*lo-CN .if !d let*lo-RN .sp 2 +.\" ---- Confidential +.if d let*lo-CN \{\ +. ti 0 +. ie !''\\*[let*lo-CN]' \\*[let*lo-CN] +. el \\*[LetCN] +. sp +.\} +.\" ---- Reference +.if d let*lo-RN \{\ +\\*[LetRN] \\*[let*lo-RN] +. sp +.\} +.\" ---- IA +.sp +.in 0 +.nr let*i 0 1 +.while \\n+[let*i]<=\\n[let*ia-n] \{\ +\\*[let*ia-name!\\n[let*i]] +\\*[let*ia-title!\\n[let*i]] +.\} +.if d let@ia-div .let@ia-div +.\" ---- Attention +.if d let*lo-AT \{\ +. sp +\\*[LetAT] \\*[let*lo-AT] +.\} +.\" ---- Salutation +.if !'\\*[let*type]'SP' .if d let*lo-SA \{\ +. sp +. ti 0 +. ie !''\\*[let*lo-SA]' \\*[let*lo-SA] +. el \\*[LetSA] +.\} +.\" ---- Subject +.if d let*lo-SJ \{\ +. ie '\\*[let*type]'SP' \{\ +. sp 2 +. misc@toupper \\*[let*lo-SJ] +. sp +. \} +. el \{\ +. sp +. if '\\*[let*type]'SB' .ti +5m +\\*[LetSJ] \f[\\*[@sdf_font]]\\*[let*lo-SJ]\fP +. \} +.\} +.. +.\"------------------- +.\" .IA [name [title]] +.nr let*ia-n 0 1 +.de IA +.if \\n[.$] .ds let*ia-name!\\n+[let*ia-n] \\$1 +.if \\n[.$]>1 .ds let*ia-title!\\n[let*ia-n] \\$2 +.ev let@ev +'nf +.di let@ia-div +.eo +.. +.de IE +.di +.ec +.ev +.. +.\"------------------- +.\" .WA [name [title]] +.nr let*wa-n 0 1 +.de WA +.if \\n[.$] .ds let*wa-name!\\n+[let*wa-n] \\$1 +.if \\n[.$]>1 .ds let*wa-title!\\n[let*wa-n] \\$2 +.ev let@ev +'nf +.di let@wa-div +.it \\n[Letwam] let@wa-drain +.eo +.. +.\"------ +.de let@wa-drain +.it +.di +.di let@wa-junk +.. +.\"------ +.de WE +.it +.ec +.di +.ev +.if d let@wa-junk .rm let@wa-junk +.. +.\"------------------- +.\" Copy to +.de NS +.sp +.ie !''\\$2' .ds let*str \\$1 +.el \{\ +. ie \\n[.$]>0 \{\ +. ie !\w'\\$1' .ds let*str \\*[Letns!\\*[Letnsdef]] +. el \{\ +. ie d Letns!\\$1 .ds let*str \\*[Letns!\\$1] +. el .ds let*str \\*[Letns!copy](\\$1)\\*[Letns!to] +. \} +. \} +. el .ds let*str \\*[Letns!\\*[Letnsdef]] +.\} +.ne 2 +.nf +\\*[let*str] +.. +.de NE +.fi +.. +.\"------------------- +.\" Letter options +.de LO +.rm AF AS AE AT AU CS OK TL MT +.if ''\\$1' .@error "LO: missing option" +.if !d Let\\$1 .@error "LO: unknown option (\\$1)" +.ds let*lo-\\$1 \\$2 +.if \n[D]>1 .tm Letter option \\$1 \\$2 +.. +.\"-------------------- +.\" Start with a clean slate +.init@reset diff --git a/contrib/mm/mse.tmac b/contrib/mm/mse.tmac new file mode 100644 index 00000000..de78cb84 --- /dev/null +++ b/contrib/mm/mse.tmac @@ -0,0 +1,184 @@ +.\" $Id: mse.tmac,v 2.1 2000/11/17 04:26:02 jhaegg Exp $ +.\" +.\" swedish version of mm +.\" See m.tmac for version-information. +.ds @language se +.mso m.tmac +.ISODATE +.\" +.ds App Bilaga +.ds Lf Figurer +.ds Lt Tabeller +.ds Lx Uppställningar +.ds Le Ekvationer +.\" Page length +.if !r L .nr @pl 28.5c +.\" page width +.if !r W .nr @ll 13c +.\" page offset +.if !r O .nr @po 3.5c +.\" set the above parameters +.ll \n[@ll]u +.po \n[@po]u +.pl \n[@pl]u +.ds Lifg Figur +.ds Litb Tabell +.ds Liex Uppställning +.ds Liec Ekvation +.ds Licon Innehållsförteckning +.ds Qrf Se kapitel \\*[Qrfh], sidan \\*[Qrfp]. +.ds Rp Referenser +.ds Letfc Vänliga hälsningar +.ds Letapp Godkänd av: +.ds Letdate datum +.ds Letconf KONFIDENTIELLT +.ds Letsal Till vederbörande: +.ds Letatt ATTENTION: +.ds Letsubj Innehåll: +.ds Letref Refererande till: +.\" +.ds Letns!copy Kopia \" space! +.ds Letns!to " till +.ds Letns!0 Kopia till +.ds Letns!1 Kopia (med att.) till +.ds Letns!2 Kopia (utan att.) till +.ds Letns!3 Att. +.ds Letns!4 Atts. +.ds Letns!5 Enc. +.ds Letns!6 Encs. +.ds Letns!7 Annat försättsblad +.ds Letns!8 Brev till +.ds Letns!9 Dokument till +.ds Letns!10 Kopia (med atts.) till +.ds Letns!11 Kopia (utan atts.) till +.ds Letns!12 Endast abstract till +.ds Letns!13 Hela dokumentet till +.ds Letns!14 CC: +.\" +.ds MO1 januari +.ds MO2 februari +.ds MO3 mars +.ds MO4 april +.ds MO5 maj +.ds MO6 juni +.ds MO7 juli +.ds MO8 augusti +.ds MO9 september +.ds MO10 oktober +.ds MO11 november +.ds MO12 december +.nr pg*footer-size 4\" 1v+footer+even/odd footer+1v +.\"------------------------------------------------ +.\" Dokumentnamn +.ds LetDNAMN +.\" Mottagarens datum +.ds LetMDAT Ert datum: +.\" Bilaga +.ds LetBIL Bilaga \" +.\" Kompletteringsuppgift +.ds LetKOMP +.\" Dokumentbeteckning eller dokumentnummer +.ds LetDBET +.\" Beteckning (ärendebeteckning i form av diarienummer e.d. +.ds LetBET Beteckning: +.\" Mottagarens beteckning. +.ds LetMBET Er beteckning: +.\" Antal sidor +.ds LetSIDOR +.\" Svensk standard med högerställd löptext. --------------------- +.de let@init_SVH +.in 4.57c +.ll 17.57c +.. +.de let@head_SVH +.rm let@header +.let@print_SV H +.. +.de let@sg_SVH +.. +.de let@fc_SVH +.. +.\" Svensk standard med vänsterställd löptext. --------------------- +.de let@init_SVV +.. +.de let@head_SVV +.rm let@header +.let@print_SV V +.. +.de let@sg_SVV +.. +.de let@fc_SVV +.. +.\"-------------------------------- +.de let@print_SV +.nf +.\" pos T0 ----------------------------------- +.in 0 +.sp |3 +.if d let@wa-div .let@wa-div +.\"----- addressat +.if '\\$1'V' .if d let@ia-div \{\ +. sp |10 +. let@ia-div +.\} +.\" pos T4 ----------------------------------- +.in 9.14c +.\"----- kompletteringsuppgift +.if d let*lo-KOMP \{\ +. sp |2 +\\*[let*lo-KOMP] +.\} +.\"----- dokumentnamn +.if d let*lo-DNAMN \{\ +. sp |3 +\\*[let*lo-DNAMN] +.\} +.\"----- datum +.if d cov*new-date \{\ +. sp |5 +Datum: +\\*[cov*new-date] +.\} +.\"----- mottagarens datum +.if d let*lo-MDAT \{\ +. sp |7 +\\*[LetMDAT] +\\*[let*lo-MDAT] +.\} +.\"----- addressat +.if '\\$1'H' .if d let@ia-div \{\ +. sp |10 +. let@ia-div +.\} +.\" pos T6 ----------------------------------- +.in 13.72c +.\"----- mottagarens beteck. +.if d let*lo-MBET \{\ +. sp |7 +\\*[LetMBET] +\\*[let*lo-MBET] +.\} +.\"----- dokumentbeteck. +.if d let*lo-BET \{\ +. sp |3 +\\*[LetBET] +\\*[let*lo-BET] +.\} +.\" pos T7 ----------------------------------- +.in 16c +.\"----- bilaga +.if d let*lo-BIL \{\ +. sp |2 +\\*[LetBIL]\\*[let*lo-BIL] +.\} +.\" +.\"----- sidnummer +.sp |3 +.ie d let*lo-SIDOR \\n[%] (\\*[let*lo-SIDOR]) +.el \\n[%] +.\" +.\" Ta hand om special +.if d TP .TP +.sp |17 +.. +.\" ----------------------------------- |