diff options
author | pst <pst@FreeBSD.org> | 1995-01-15 08:10:00 +0000 |
---|---|---|
committer | pst <pst@FreeBSD.org> | 1995-01-15 08:10:00 +0000 |
commit | cce628f8862ac988dbda0d00abd44df0e485889b (patch) | |
tree | a9d75291f0488e464b00f0a6c7694c5b1d3589c7 /gnu/usr.bin/groff/mm | |
parent | bce1a0a51a6ab90369f5be84041302b6cac1e13a (diff) | |
download | FreeBSD-src-cce628f8862ac988dbda0d00abd44df0e485889b.zip FreeBSD-src-cce628f8862ac988dbda0d00abd44df0e485889b.tar.gz |
groff-1.09
Diffstat (limited to 'gnu/usr.bin/groff/mm')
-rw-r--r-- | gnu/usr.bin/groff/mm/ChangeLog | 288 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/Makefile.sub | 35 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/NOTES | 101 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/README | 26 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/groff_mm.man | 763 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/groff_mmse.man | 36 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/mm/0.MT | 145 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/mm/4.MT | 65 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/mm/5.MT | 33 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/mm/ms.cov | 83 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/mm/se_ms.cov | 2 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/tmac.m | 2635 | ||||
-rw-r--r-- | gnu/usr.bin/groff/mm/tmac.mse | 42 |
13 files changed, 4254 insertions, 0 deletions
diff --git a/gnu/usr.bin/groff/mm/ChangeLog b/gnu/usr.bin/groff/mm/ChangeLog new file mode 100644 index 0000000..1eb5be4 --- /dev/null +++ b/gnu/usr.bin/groff/mm/ChangeLog @@ -0,0 +1,288 @@ +Tue Sep 7 08:37:00 1993 Jörgen Hägg (jh at efd.lth.se) + + * version 1.19 + * .lt is called in the header for .TP also. + * Variable Pgps added to control the header and footer point-size. + * Error-text printed with .APP removed. + * Error with .FG, .TB, .EC and .EX indentation fixed. + * header and footer line-length is not changed by MC or 2C. + * Default for page-length and page-offset is now taken from + \n[.p] and \n[.o]. + * Argument to .ab (abort) is supplied. + * Argument to .1C added. + * Argument to .PGFORM added. + * RP/RS/RF totally rewritten. Should work with 2C now. + +Fri Apr 23 10:37:25 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.18 + * Height of display is now more exactly calculated. + * tabs and blankspaces where wrong in .VERBON. + * error in manual for escape-character in VERBON. + * Makefile.sub: installed tmac.m as tmac.m and tmac.mse + * Installation of tmac.mse now supports TMAC_M. + * bug with N fixed. + +Mon Apr 5 09:36:01 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.17 + * MULB preserves size. + * bug in VERBON fixed, causing strange errors. + * section-page footer fixed. + * added support for numberregister S + * fixed bug with floating displays wich made floats to + generate space on a page, but broke page anyway. + * end-of-page trap reinstalled. + +Mon Mar 29 10:53:13 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.16 + * MUL* now use the previous font and family. + * extra blank page at end-of-text eliminated. + +Mon Mar 8 10:27:47 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.15 + * Didn't restore pointsize to current size in .H. + * B1/B2 did not work with indent. (MULE and friends) + * fixed old problem with trailing empty pages. + +Fri Mar 5 15:20:49 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.14 + * Sigh. Amazing what a missing \} can do. If the string + HP was set, then all text disappeared... + +Fri Mar 5 14:12:43 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.13 + * Fixed bug with handling ps/vs in .H. (again, sigh... ) + +Wed Mar 3 09:21:20 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.12 + * Line-break added to PGFORM. + * added more features to VERBON + * .S is not used anymore in H, it caused confusion with + normal text, but it will still set .vs. + * SK was broken, will now produce the requested number of + empty pages. + * dotted lines added to LIST OF FIGURES adn friends. + Also better linespacing. + +Mon Feb 22 12:41:06 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.11 + * missing left-parenthesis gave ") .sp" when N=4. + * N=4 removed user-specified header also. + * MOVE made linelength pageoffset wider than wanted. + * fixed (again) parenthesis in RP. + +Thu Jan 21 12:10:39 1993 Joergen Haegg (jh at efd.lth.se) + + * version 1.10 + * changed PROG_PREFIX to g in the manual-pages. + * Better check if new page is needed in .H, when Ej>0. + * Usage of variable Lsp now more complete. + * Space added in TOC when mark is equal to size. + * Usermacro HY moved after font-calulations. + * .S used instead of .ps, which will use .vs correct. + * Now possible to set Hps1/2 inside HX. + * .FD "" 1 is now fixed. + * section-page numbering bug fixed. + * several bugs in VERBON/OFF fixed. + +Tue Dec 8 16:43:15 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.09 + * N==4 gives no default header + +Sat Nov 21 14:28:20 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.08 + * Escape-character disabled between + VERBON/VERBOFF (turned on by an argument). + Pointsize and fontchange also added as arguments. + * MULB, MULN and MULE added to get multicolumn output + with different width. + * Number register N can now use 1-5. + * Register Sectp and Sectf added. + * Register P is now updated correctly for "section-page" numbering. + +Thu Nov 19 11:19:33 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.07 + * .OP fixed to eject a blank page if not odd. + +Fri Nov 13 09:46:09 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.06 + * Macro TL rewritten. TL depends now on a following .AU. + * NOTES updated. + * .lt is now used more frequent when linelength is changed. + * macro AST added. + * removed PH/EH/OH not needed in ?.MT. + +Wed Oct 28 14:35:43 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.05 + * .VM implemented. + * Possible bug in page heading fixed. Changed .sp to 'sp in HEADER. + +Thu Aug 20 13:56:31 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.04 + * page-break in .EQ moved. + * changed unit for footer-size and header-size from units to lines. + Fixes problems with .S and page-breaks. + * \n[%] is now treated as a string, wich makes it possible + to assign new formats to it. Unfortunately, it was necessary + to change the page-number-variable in GETPN to a string. + * Makefile.sub included. (Thank you, James) + +Thu May 7 16:14:10 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.03 + * Typo and centering in DS/DE fixed. + Even and odd pageheaders were reversed. + * LI: pad and mark-indent was lost in some earlier versions. Now fixed. + * fixed bug in reference to .FG, .TB, ... + * APP did not clear headercounters. + * Pointsize in titles is now only set at the beginning and + when PH, PF, OH, OF, EH and EF are used. + +Thu May 6 16:01:35 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.02 + * OP fixed. + +Fri Mar 6 09:36:09 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.01 + * two .LI without text between should not be printed + on the same row. Now fixed. + * figure titles and friends fixed, now possible with many .FG + in a DS/DE. Didn't always position correctly in previous version, + but is now always printed as it should. + * Makefile fixed for Ultrix. + * DS/DF could not handle empty arguments correct + * Missing .br i EQ added. + +Sat Jan 25 15:47:21 1992 Joergen Haegg (jh at efd.lth.se) + + * version 1.00 + * No betaversion anymore! + * Fixed headernumbers within appendixes. + * DS did not keep the same font as before DS. + * mmse did a line break. + +Fri Jan 24 14:38:16 1992 Joergen Haegg (jh at efd.lth.se) + + * version 0.16 + * bug in TC, multiple line headers did not wrap correctly. + * added support for mm/locale and mm/language_locale. + * cov*default-firm in locale sets name of firm in the MT covers. + * cov*location-xxxx in locale sets location xxxx to the contents + of cov*location-xxxx. Used in the MT covers. + * hanging indent in lists fixed. + * use larger empty lines if .nroff is defined. + * macros, like .P, can now be used inside abstracts. + * .S do not reset indentation anymore. + * .RS aA now sets a string, not an integer. + * appendix with .APP or .APPSK added. + +Thu Nov 28 22:00:59 1991 Joergen Haegg (jh at efd.lth.se) + + * version 0.15 + * Fixed .AU in MT 0-3, added support for variable Au. + * Bug in the positioning of the foot-notes. + * lists not indented properly. + * Hps1 and Hps2 added. + * COVER had to have an argument. + * table of contents can now have multiline header. + * .HU now increments headingvariable H? + * added the inclusion of a locale file. + +Sat Nov 23 14:40:17 1991 Joergen Haegg (jh at efd.lth.se) + + * version 0.14 + * bug when using -rO fixed. + * MT 1-4 added. + * default is now MT 1 + * .EQ/.EN can be used outside of .DS/.DE without complaints. But + I don't recommend it. Neither does the DWB books. + * LI don't break lines now if arg too big. + * PGFORM did not reset indent. + * Added the numbervariable Hps. + * Rewritten and added MT 0-5 + "string". + * Added TM. + * Indent to AS added + +Wed Nov 6 15:18:40 1991 Joergen Haegg (jh at efd.lth.se) + + * version 0.13 + * ds*format nod defined if PS/PE is used without DS/DE. + * GETST added, fourth argument to EX, FG, TB and EC added. + +Mon Nov 4 13:38:01 1991 Joergen Haegg (jh at efd.lth.se) + + * version 0.12 + * Fixed C,D,P,+-size in .S + +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * Next version will have ChangeLog entries... + * Bug in INITR fixed. + * VERBON/VERBOFF added to include programlistings + * Bug in .DE fixed, addition overflow +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * spelling error in month-names. + * WC should work now (no warranty :-) + * FD almost finished, some details missing. + * incorrect calculation of foot-notes fixed. + * DS/DE did not break page when the size was smaller than the paper + * Forward/backward referencesystem added. Se .INITR in README. + * mgmsw changed name to mgmse. +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * embarrassing bug in .P fixed + * .H did always eject page, now fixed. + * lost floating displays now found. + * accents added (from mgs) + * empty line in .EQ/.EN removed + * indentation in .TC corrected. + * indentation of DS/DE in lists fixed. + * .TB and friends now work inside DS/DE and outside. + * .WC partially implemented (WF and WD). Still working on it. + * .mso used if version>=1.02 +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * register P was not working. + * support for register Fg, Tb, Ec and Ex. + * list items was left on the previous page at a page break. + * tlevel in .TC now defaults to 2. + * string DT, EM and Tm supported. + * new macro: PGNH, see comments. + * bug in MOVE fixed. + * pagenumber in .TC fixed. + * a blank page was ejected if Ej==1, now fixed + * bug in floating display fixed (did break and SP wrong) + * bug in .SP fixed, no lines is now printed at top of page + * There are still problems with footnotes and displays in two column mode. +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * register P added (same as %) + * bug in floating displays fixed + * MOVE added + * MT added, see comment below + * COVER/COVEND added + * fixed bug in figure titles + * extended S, se comment below + * MT 0 added + * ms-cover added (COVER ms) +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * bugs in RD and comb. fonts fixed +Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se) + * HC added + * Combined fonts (IB,BI...) + * HM added + * RD added + * OP added + * TP&PX supported + * warnings for unimplemented macros diff --git a/gnu/usr.bin/groff/mm/Makefile.sub b/gnu/usr.bin/groff/mm/Makefile.sub new file mode 100644 index 0000000..25b5ba0 --- /dev/null +++ b/gnu/usr.bin/groff/mm/Makefile.sub @@ -0,0 +1,35 @@ +# +MAN7=groff_mm.n groff_mmse.n +FILES=0.MT 5.MT 4.MT ms.cov se_ms.cov +# Local configuration files with default values. +LOCALE = locale se_locale +CLEANADD=temp +install: install_mm + +install_mm: install_m + -test -d $(tmacdir)/mm || mkdir $(tmacdir)/mm + -for f in $(FILES); do \ + rm -f $(tmacdir)/mm/$$f; \ + $(INSTALL_DATA) $(srcdir)/mm/$$f $(tmacdir)/mm/$$f; \ + done + -for f in $(LOCALE); do \ + test -f $(tmacdir)/mm/$$f || touch $(tmacdir)/mm/$$f; \ + done + +install_m: + -test -d $(tmacdir) || mkdir $(tmacdir) + -rm -f $(tmacdir)/tmac.$(tmac_m) + $(INSTALL_DATA) $(srcdir)/tmac.m $(tmacdir)/tmac.$(tmac_m) + @sed -e "s;^.mso tmac.m;.mso $(tmac_m);g" $(srcdir)/tmac.mse \ + > $(tmacdir)/tmac.$(tmac_m)se + + + +uninstall_sub: + -for f in $(FILES); do rm -f $(tmacdir)/mm/$$f; done + -for f in $(LOCALE); do \ + test -s $(tmacdir)/mm/$$f || rm -f $(tmacdir)/mm/$$f; \ + done + -rm -f $(tmacdir)/tmac.$(tmac_m) + -rm -f $(tmacdir)/tmac.$(tmac_m)se + -rmdir $(tmacdir)/mm diff --git a/gnu/usr.bin/groff/mm/NOTES b/gnu/usr.bin/groff/mm/NOTES new file mode 100644 index 0000000..ee258d3 --- /dev/null +++ b/gnu/usr.bin/groff/mm/NOTES @@ -0,0 +1,101 @@ +###################################################################### + +Implementation notes. (Or how to make your own national mm) + +Different commands: + +COVER [arg] +MT [arg [addressee]] +The arg is part of a filename in mm/*.MT or mm/*.cov. +This file is read when the macro is executed. Therefore it must be +put before any text output. +In each file there are definitions of all extra macros needed for the +cover sheet. MT files is only for compatibility reasons, and has several +limits due to that it don't know when the cover starts, and cannot +change sizes. Use COVER for new coversheet macros. + +But with MT it is possible to write all of the AT&T covers. +An example can be found in mm/0.MT. + +When writing a new cover using COVER, have in mind that the cover +should print the page with the COVEND macro. This macro +should be defined by the new macrofile. + +Here is a part of ms.cov: +> .\"----------------- +> .de COVEND +> .sp |4.2c +> .cov@print-title +> .cov@print-authors +> .cov@print-firm +> .cov@print-abstract +> .cov@print-date +This is important, since COVER disables the page header. +> .pg@enable-top-trap +Should begin with page one (normally). +> .bp 1 +And enable the trap at the page footer. +> .pg@enable-trap +> .. + +######################### + +Variables for covers: +I = integer +S = string +D = diversion +M = macro + +Name Type Desc. +cov*au I The number of authors. + +cov*title M Title collected with .TL. + +cov*au!x!y S Author(s) given to .AU +cov*at!x!y S Author(s) title given to .AT + x is the author-index [1-cov*au], + y is the argument-index [1-9]. + Look at the table with indexes. + +cov*firm I Author(s) firm. + +cov*abs-arg I Argument to abstract. + +cov*abs-ind I Indent for abstract. + +cov*abs-name S The string 'ABSTRACT', changed with .AST + +cov*abstract M The abstract. + +cov*new-date S The date (todays date if ND is not used) + +cov*mt-type S MT type +cov*mt-addresse S MT addressee + + +########################## +Argument-index for cov*au: + +Index Desc. +1 name +2 initials +3 location +4 department +5 extension +6 room +7 arg 7 +8 arg 8 +9 arg 9 + +The location is set to the contents of string cov*location-xxxx +if location is equal to xxxx and cov*location-xxxx is defined +in the file locale. + + +Argument-index for cov*at: + +Index Desc. +1 title 1 +. . +. . +9 title 9 diff --git a/gnu/usr.bin/groff/mm/README b/gnu/usr.bin/groff/mm/README new file mode 100644 index 0000000..54b32d2 --- /dev/null +++ b/gnu/usr.bin/groff/mm/README @@ -0,0 +1,26 @@ +This is mgm, a macro package for groff. + +It is supposed to be compatible with the DWB mm macros, +and has several extensions. + +Send bug reports to jh@efd.lth.se with a description of the problem +and a sample of text which reproduces the error. + +Don't forget to mention the version of mgm (look in the beginning +of tmac.m) and the version of groff. + +Any new ideas or improvements are welcome. + +Newest version is available with anonymous FTP +at ftp.efd.lth.se [130.235.48.11], as pub/groff/mm<something>.Z + +You can install mgm as a separate package without the configure in groff +with the following command: + +make -f Makefile.sim install + +This README should be bigger :-) + +Jörgen. + +Thanks to everyone who have send me bug-reports and fixes. diff --git a/gnu/usr.bin/groff/mm/groff_mm.man b/gnu/usr.bin/groff/mm/groff_mm.man new file mode 100644 index 0000000..0ef488b --- /dev/null +++ b/gnu/usr.bin/groff/mm/groff_mm.man @@ -0,0 +1,763 @@ +.TH GROFF_MM @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +.SH NAME +groff_mm \- groff mm macros +.SH SYNOPSIS +.B groff +.B \-m@TMAC_M@ +[ +.IR options .\|.\|. +] +[ +.IR files .\|.\|. +] +.SH DESCRIPTION +The groff mm macros are intended to be compatible with the DWB mm macros +with the following limitations: +.TP +.B \(bu +no letter macros implemented (yet). +.TP +.B \(bu +no Bell Labs localisms implemented. +.TP +.B \(bu +the macros OK and PM is not implemented. +.TP +.B \(bu +groff mm does not support cut marks +.LP +\fBm@TMAC_M@\fP is intended to be international. Therefore it is +possible to write short national macrofiles which change all +english text to the preferred language. Use \fBm@TMAC_M@se\fP as an example. +.LP +Groff mm has several extensions: +.TP +.B "1C [1]" +Begin one column processing. An \fB1\fP as argmunet disabled the page-break. +.TP +.B "APP name text" +Begin an appendix with name \fIname\fP. Automatic naming occurs if +\fIname\fP is "". The appendixes starts with \fBA\fP if auto is used. +An new page is ejected, and a header is also produced if the number +variable \fBAph\fP is non-zero. This is the default. +The appendix always appear in the 'List of contents' with correct +pagenumber. The name \fIAPPENDIX\fP can be changed by setting +the string \fBApp\fP to the desired text. +.TP +.B "APPSK name pages text" +Same as \fB.APP\fP, but the pagenr is incremented with \fIpages\fP. +This is used when diagrams or other non-formatted documents are +included as appendixes. +.TP +.B B1 +Begin box (as the ms macro) +Draws a box around the text. +.TP +.B B2 +End box. Finish the box. +.TP +.B BVL +Start of +broken variable-item list. +As VL but text begins always at the next line +.TP +.B "COVER [arg]" +\&\fBCOVER\fP begins a coversheet definition. It is important +that \fB.COVER\fP appears before any normal text. +\&\fB.COVER\fP uses \fIarg\fP to build the filename +@TMAC_MDIR@/\fIarg\fP.cov. Therefore it is possible to create unlimited +types of coversheets. +\fIms.cov\fP is supposed to look like the \fBms\fP coversheet. +\&\fB.COVER\fP requires a \fB.COVEND\fP at the end of the coverdefinition. +Always use this order of the covermacros: +.nf +\&.COVER +\&.TL +\&.AF +\&.AU +\&.AT +\&.AS +\&.AE +\&.COVEND +.fi +However, only \fB.TL\fP and \fB.AU\fP are required. +.TP +.B COVEND +This finish the cover description and prints the cover-page. +It is defined in the cover file. +.TP +.B "GETHN refname [varname]" +Includes the headernumber where the corresponding \fBSETR\fP \fIrefname\fP +was placed. Will be X.X.X. in pass 1. See \fBINITR\fP. +If varname is used, \fBGETHN\fP sets the stringvariable \fIvarname\fP to the +headernumber. +.TP +.B "GETPN refname [varname]" +Includes the pagenumber where the corresponding \fBSETR\fP \fIrefname\fP +was placed. Will be 9999 in pass 1. See \fBINITR\fP. +If varname is used, \fBGETPN\fP sets the stringvariable \fIvarname\fP +to the pagenumber. +.TP +.B "GETR refname" +Combines \fBGETHN\fP and \fBGETPN\fP with the text 'chapter' and ', page'. +The string \fIQrf\fP contains the text for reference: +.ti +.5i +\&.ds Qrf See chapter \e\e*[Qrfh], page \e\e*[Qrfp]. +.br +\fIQrf\fP may be changed to support other languages. +Strings \fIQrfh\fP and \fIQrfp\fP are set by \fBGETR\fP +and contains the page and headernumber. +.TP +.B "GETST refname [varname]" +Includes the string saved with the second argument to \fB.SETR\fP. +Will be dummystring in pass 1. +If varname is used, \fBGETST\fP sets the stringvariable \fIvarname\fP to the +saved string. See \fBINITR\fP. +.TP +.B "INITR filename" +Initialize the refencemacros. References will be written to +\fIfilename.tmp\fP and \fIfilename.qrf\fP. Requires two passes with groff. +The first looks for references and the second includes them. +\fBINITR\fP can be used several times, but it is only the first +occurrence of \fBINITR\fP that is active. +See also \fBSETR\fP, \fBGETPN\fP and \fBGETHN\fP. +.TP +.B "MC column-size [column-separation] " +Begin multiple columns. Return to normal with 1C. +.TP +.B "MT [arg [addressee]]" +Memorandum type. +The \fIarg\fP is part of a filename in \fI@TMAC_MDIR@/*.MT\fP. +Memorandum type 0 thru 5 are supported, including \fI"string"\fP. +\fIAddresse\fP just sets a variable, used in the AT&T macros. +.TP +.B "MOVE y-pos [x-pos [line-length]]" +Move to a position, pageoffset set to \fIx-pos\fP. +If \fIline-length\fP is not given, the difference between +current and new pageoffset is used. +Use \fBPGFORM\fP without arguments to return to normal. +.TP +.B "MULB cw1 space1 [cw2 space2 [cw3 ...]]" +Begin a special multi-column mode. Every columns width must be specified. +Also the space between the columns must be specified. The last column +does not need any space-definition. MULB starts a diversion and MULE +ends the diversion and prints the columns. +The unit for width and space is 'n', but MULB accepts all +normal unitspecifications like 'c' and 'i'. +MULB operates in a separate environment. +.TP +.B "MULN" +Begin the next column. This is the only way to switch column. +.TP +.B "MULE" +End the multi-column mode and print the columns. +.TP +.B "PGFORM [linelength [pagelength [pageoffset [1]]]]" +Sets linelength, pagelength and/or pageoffset. +This macro can be used for special formatting, like letterheads +and other. +\fBPGFORM\fP can be used without arguments +to reset everything after a \fBMOVE\fP. +A line-break is done unless the fourth argument is given. +This can be used to avoid the pagenumber on the first page while setting +new width and length. +.TP +.B PGNH +No header is printed on the next page. Used to get rid off +the header in letters or other special texts +This macro must be used before any text to inhibit the pageheader +on the first page. +.TP +.B "SETR refname [string]" +Remember the current header and page-number as refname. +Saves \fIstring\fP if \fIstring\fP is defined. \fIstring\fP is retrieved +with \fB.GETST\fP. +See \fBINITR\fP. +.TP +.B TAB +reset tabs to every 5n. Normally used to reset any previous tabpositions. +.TP +.B VERBON [flag [pointsize [font]]] +Begin verbatim output using courier font. +Usually for printing programs. +All character has equal width. +The pointsize can be changed with +the second argument. By specifying the font-argument +it is possible to use another font instead of courier. +\fIflag\fP control several special features. +It contains the sum of all wanted features. +.in +.5i +.ti -.5i +Value +.sp -1 +Description +.ti -.5i +1 +.sp -1 +Disable the escape-character (\e). This is normally turned on during +verbose output. +.ti -.5i +2 +.sp -1 +Add en empty line before the verbose text. +.ti -.5i +4 +.sp -1 +Add en empty line after the verbose text. +.ti -.5i +8 +.sp -1 +Print the verbose text with numbered lines. This adds four digitsized +spaces in the beginning of each line. Finer control is available with +the string-variable \fBVerbnm\fP. It contains all arguments to the +\fBtroff\fP-command \fB.nm\fP, normally '1'. +.ti -.5i +16 +.sp -1 +Indent the verbose text with five 'n':s. This is controlled by the +number-variable \fBVerbin\fP (in units). +.in +.TP +.B VERBOFF +End verbatim output. +.sp +.LP +.\"######################################################################## +New variables in m@TMAC_M@: +.TP +.B App +A string containing the word "APPENDIX". +.TP +.B Aph +Print an appendix-page for every new appendix +if this numbervariable is non-zero. +No output will occur if \fBAph\fP is zero, but there will always +be an appendix-entry in the 'List of contents'. +.TP +.B Hps +Numbervariable with the heading pre-space level. If the heading-level +is less than or equal to \fBHps\fP, then two lines will precede the +section heading instead of one. Default is first level only. +The real amount of lines is controlled by the variables \fBHps1\fP and +\fBHps2\fP. +.TP +.B Hps1 +This is the number of lines preceding \fB.H\fP when the heading-level +is greater than \fBHps\fP. Value is in units, normally 0.5v. +.TP +.B Hps2 +This is the number of lines preceding \fB.H\fP when the heading-level +is less than or equal to \fBHps\fP. Value is in units, normally 1v. +.TP +.B Lifg +String containing \fIFigure\fP. +.TP +.B Litb +String containing \fITABLE\fP. +.TP +.B Liex +String containing \fIExhibit\fP. +.TP +.B Liec +String containing \fIEquation\fP. +.TP +.B Licon +String containing \fICONTENTS\fP. +.TP +.B Lsp +.TP +The size of an empty line. Normally 0.5v, but it is 1v +if \fBn\fP is set (\fB.nroff\fP). +.B "MO1 - MO12" +Strings containing \fIJanuary\fI to \fIDecember\fP. +.TP +.B Qrf +String containing "See chapter \e\e*[Qrfh], page \e\en[Qrfp].". +.TP +.B Pgps +Controls whether header and footer pointsize should follow the current +setting or just change when the header and footer is defined. +.in +.5i +.ti -.5i +Value +.sp -1 +Description +.ti -.5i +0 +.sp -1 +Pointsize will only change to the current setting when \fB.PH\fP, \fB.PF\fP, +\&\fB.OH\fP, \fP.EH\fP, \fB.OF\fP or \fB.OE\fP is executed. +.ti -.5i +1 +.sp -1 +Pointsize will change after every \fB.S\fP. This is the default. +.ti -.5i +.in +.TP +.B Sectf +Flag controlling "section-figures". A non-zero value enables this. +Se also register N. +.TP +.B Sectp +Flag controlling "section-page-numbers". A non-zero value enables this. +Se also register N. +.TP +.B .mgm +Always 1. +.\"######################################################################## +.LP +A file called \fBlocale\fP or \fIlang\fP\fB_locale\fP is read +after the initiation of the global variables. It is therefore +possible to localize the macros with companyname and so on. +.sp 3 +.LP +The following standard macros are implemented: +.TP +.B 2C +Begin two column processing +.TP +.B AE +Abstract end +.TP +.B "AF [name of firm]" +Authors firm +.TP +.B "AL [type [text-indent [1]]]]" +Start autoincrement list +.TP +.B "AS [arg [indent]]" +Abstract start. Indent is specified in 'ens', but scaling is allowed. +.TP +.B "AST [title]" +Abstract title. Default is 'ABSTRACT'. +.TP +.B "AT title1 [title2 ...]" +Authors title +.TP +.B "AU name [initials [loc [dept [ext [room [arg [arg [arg]]]]]]]]" +Author information +.TP +.B "B [bold-text [prev-font-tex [...]]]" +Begin boldface +No limit on the number of arguments. +.TP +.B BE +End bottom block +.TP +.B "BI [bold-text [italic-text [bold-text [...]]]" +Bold-italic. +No limit on the number of arguments. +.TP +.B "BL [text-indent [1]]" +Start bullet list +.TP +.B "BR [bold-text [roman-text [bold-text [...]]]" +Bold-roman. +No limit on the number of arguments. +.TP +.B BS +Bottom block start +.TP +.B DE +Display end +.TP +.B "DF [format [fill [rindent]]]" +Begin floating display (no nesting allowed) +.TP +.B "DL [text-indent [1]]" +Dash list start +.TP +.B "DS [format [fill [rindent]]]" +Static display start. +Can now have unlimited nesting. Also +right adjusted text and block may be used (R or RB as \fIformat\fP). +.TP +.B "EC [title [override [flag [refname]]]]" +Equation title. +If \fIrefname\fP is used, then the equationnumber is saved with +\&\fB.SETR\fP, and can be retrieved with \fB.GETST\fP \fIrefname\fP. +.TP +.B "EF [arg]" +Even-page footer. +.TP +.B "EH [arg]" +Even-page header. +.TP +.B EN +Equation end. +.TP +.B "EQ [label]" +Equation start. +.TP +.B "EX [title [override [flag [refname]]]]" +Exhibit title. +If \fIrefname\fP is used, then the exhibitnumber is saved with +\&\fB.SETR\fP, and can be retrieved with \fB.GETST\fP \fIrefname\fP. +.TP +.B "FD [arg [1]]" +Footnote default format. +.TP +.B FE +Footnote end. +.TP +.B "FG [title [override [flag [refname]]]]" +Figure title. +If \fIrefname\fP is used, then the figurenumber is saved with +\&\fB.SETR\fP, and can be retrieved with \fB.GETST\fP \fIrefname\fP. +.TP +.B FS +Footnote start. +Footnotes in displays is now possible. +.TP +.B "H level [heading-text [heading-suffix]]" +Numbered heading. +.TP +.B "HC [hyphenation-character]" +Set hyphenation character. +.TP +.B "HM [arg1 [arg2 [... [arg7]]]]" +Heading mark style. +.TP +.B "HU heading-text" +Unnumbered header. +.TP +.B "HX dlevel rlevel heading-text" +Userdefined heading exit. +Called just before printing the header. +.TP +.B "HY dlevel rlevel heading-text" +Userdefined heading exit. +Called just before printing the header. +.TP +.B "HZ dlevel rlevel heading-text" +Userdefined heading exit. +Called just after printing the header. +.TP +.B "I [italic-text [prev-font-text [italic-text [...]]]" +Italic. +.TP +.B "IB [italic-text [bold-text [italic-text [...]]]" +Italic-bold +.TP +.B "IR [italic-text [roman-text [italic-text [...]]]" +Italic-roman +.TP +.B "LB text-indent mark-indent pad type [mark [LI-space [LB-space]]]" +List begin macro. +.TP +.B "LC [list level]" +List-status clear +.TP +.B LE +List end. +.TP +.B "LI [mark [1]]" +List item +.TP +.B "ML mark [text-indent]" +Marked list start +.TP +.B "MT [arg [addressee]]" +Memorandum type. See above note about MT. +.TP +.B "ND new-date" +New date. +.TP +.B "OF [arg]" +Odd-page footer +.TP +.B "OH [arg]" +Odd-page header +.TP +.B OP +Skip to odd page. +.TP +.B "P [type]" +Begin new paragraph. +.TP +.B PE +Picture end. +.TP +.B "PF [arg]" +Page footer +.TP +.B "PH [arg]" +Page header +.TP +.B PS +Picture start (from pic) +.TP +.B PX +Page-header user-defined exit. +.TP +.B R +Roman. +.TP +.B "RB [roman-text [bold-text [roman-text [...]]]" +Roman-bold. +.TP +.B "RD [prompt [diversion [string]]]" +Read to diversion and/or string. +.TP +.B RF +Reference end +.TP +.B "RI [roman-text [italic-text [roman-text [...]]]" +Roman-italic. +.TP +.B "RL [text-indent [1]]" +Reference list start +.TP +.B "RP [arg [arg]]" +Produce reference page. +.TP +.B "RS [string-name]" +Reference start. +.TP +.B "S [size [spacing]]" +Set point size and vertical spacing. If any argument is equal 'P', then +the previous value is used. A 'C' means current value, and 'D' default value. +If '+' or '-' is used before the value, then increment or decrement of +the current value will be done. +.TP +.B "SA [arg]" +Set adjustment. +.TP +.B "SK [pages]" +Skip pages. +.TP +.B "SM string1 [string2 [string3]]" +Make a string smaller. +.TP +.B "SP [lines]" +Space vertically. \fIlines\fP can have any scalingfactor, like \fI3i\fP or +\fI8v\fP. +.TP +.B "TB [title [override [flag [refname]]]]" +Table title. +If \fIrefname\fP is used, then the tablenumber is saved with +\&\fB.SETR\fP, and can be retrieved with \fB.GETST\fP \fIrefname\fP. +.TP +.B "TC [slevel [spacing [tlevel [tab [h1 [h2 [h3 [h4 [h5]]]]]]]]]" +Table of contents. +All texts can be redefined, new stringvariables +\fILifg\fP, \fILitb\fP, \fILiex\fP, \fILiec\fP and \fILicon\fP contains +"Figure", "TABLE", "Exhibit", "Equation" and "CONTENTS". +These can be redefined to other languages. +.TP +.B TE +Table end. +.TP +.B "TH [N]" +Table header. +.TP +.B TL +Begin title of memorandum. +.TP +.B TM [num1 [num2 [...]]] +Technical memorandumnumbers used in \fB.MT\fP. Unlimited number +of arguments may be given. +.TP +.B TP +Top of page user-defined macro. +Note that header and footer is printed in a separate environment. +Linelength is preserved though. +.TP +.B "TS [H]" +Table start +.TP +.B TX +Userdefined table of contents exit. +.TP +.B TY +Userdefined tbale of contents exit (no "CONTENTS"). +.TP +.B "VL [text-indent [mark-indent [1]]]" +Variable-item list start +.TP +.B "VM [top [bottom]]" +Vertical margin. +.TP +.B "WC [format]" +Footnote and display width control. +.sp 3 +.LP +Strings used in m@TMAC_M@: +.TP +.B "EM" +Em dash string +.TP +.B HF +Fontlist for headings, normally "2 2 2 2 2 2 2". +Nonnumeric fontnames may also be used. +.TP +.B HP +Pointsize list for headings. Normally "0 0 0 0 0 0 0" which is the same as +"10 10 10 10 10 10 10". +.TP +.B Lf +Contains "LIST OF FIGURES". +.TP +.B Lt +Contains "LIST OF TABLES". +.TP +.B Lx +Contains "LIST OF EXHIBITS". +.TP +.B Le +Contains "LIST OF EQUATIONS". +.TP +.B Rp +Contains "REFERENCES". +.TP +.B Tm +Contains \e(tm, trade mark. +.\"----------------------------------- +.LP +Number variables used in m@TMAC_M@: +.TP +.B Cl=2 +Contents level [0:7], contents saved if heading level <= Cl +.TP +.B Cp=0 +Eject page between LIST OF XXXX if Cp == 0 +.TP +.B D=0 +Debugflag, values >0 produces varying degree of debug. A value of 1 +gives information about the progress of formatting. +.TP +.B De=0 +Eject after floating display is output [0:1] +.TP +.B Df=5 +Floating keep output [0:5] +.TP +.B Ds=1 +space before and after display if == 1 [0:1] +.TP +.B Ej=0 +Eject page +.TP +.B Eq=0 +Equation lable adjust 0=left, 1=right +.TP +.B Fs=1 +Footnote spacing +.TP +.B "H1-H7" +Heading counters +.TP +.B Hb=2 +Heading break level [0:7] +.TP +.B Hc=0 +Heading centering level, [0:7] +.TP +.B Hi=1 +Heading temporary indent [0:2] +0 -> 0 indent, left margin +.br +1 -> indent to right , like .P 1 +.br +2 -> indent to line up with text part of preceding heading +.TP +.B Hs=2 +Heading space level [0:7] +.TP +.B Ht=0 +Heading numbering type +0 -> multiple (1.1.1 ...) +.br +1 -> single +.TP +.B Hu=2 +Unnumbered heading level +.TP +.B Hy=1 +Hyphenation in body +0 -> no hyphenation +.br +1 -> hyphenation 14 on +.TP +.B "Lf=1, Lt=1, Lx=1, Le=0" +Enables (1) or disables (0) the printing of List of figures, +List of tables, List of exhibits and List of equations. +.TP +.B Li=6 +List indent, used by .AL +.TP +.B Ls=99 +List space, if current listlevel > Ls then no spacing will occur around lists. +.TP +.B N=0 +Numbering style [0:5] +0 == (default) normal header for all pages. +.br +1 == header replaces footer on first page, header is empty. +.br +2 == page header is removed on the first page. +.br +3 == "section-page" numbering enabled. +.br +4 == page header is removed on the first page. +.br +5 == "section-page" and "section-figure" numbering enabled. +Se also the number-register Sectf and Sectp. +.TP +.B Np=0 +Numbered paragraphs. +.br +0 == not numbered +.br +1 == numbered in first level headings. +.TP +.B Of=0 +Format of figure,table,exhibit,equation titles. +.br +0= ". " +.br +1= " - " +.TP +.B P +Current page-number, normally the same as % unless "section-page" numbering +is enabled. +.TP +.B Pi=5 +paragraph indent +.TP +.B Ps=1 +paragraph spacing +.TP +.B Pt=0 +Paragraph type. +.br +0 == left-justified +.br +1 == indented .P +.br +2 == indented .P except after .H, .DE or .LE. +.TP +.B Si=5 +Display indent. +.LP +.\".SH BUGS +.SH AUTHOR +Jörgen Hägg, Lund Institute of Technology, Sweden <jh@efd.lth.se> +.SH FILES +.TP +.B @MACRODIR@/tmac.@TMAC_M@ +.TP +.B @TMAC_MDIR@/*.cov +.TP +.B @TMAC_MDIR@/*.MT +.TP +.B @TMAC_MDIR@/locale +.SH "SEE ALSO" +.BR groff (@MAN1EXT@), +.BR @g@troff (@MAN1EXT@), +.BR @g@tbl (@MAN1EXT@), +.BR @g@pic (@MAN1EXT@), +.BR @g@eqn (@MAN1EXT@) +.br +.BR mm (@MAN7EXT@) +.BR m@TMAC_M@se (@MAN7EXT@) diff --git a/gnu/usr.bin/groff/mm/groff_mmse.man b/gnu/usr.bin/groff/mm/groff_mmse.man new file mode 100644 index 0000000..5f79c01 --- /dev/null +++ b/gnu/usr.bin/groff/mm/groff_mmse.man @@ -0,0 +1,36 @@ +.\" +.\" Skrivet av Jörgen Hägg, Lund, Sverige +.\" +.TH GROFF_MMSE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +.SH NAMN +groff_mmse \- svenska mm makro för groff +.SH SYNTAX +.B groff +.B \-m@TMAC_M@se +[ +.IR flaggor .\|.\|. +] +[ +.IR filer .\|.\|. +] +.SH BESKRIVNING +\fBm@TMAC_M@se\fP är en svensk variant av \fBm@TMAC_M@\fP. Alla texter +är översatta. En A4 sida får text som är 13 cm bred, 3.5 cm indragning +samt är 28.5 cm hög. +.LP +\fBCOVER\fP kan använda \fIse_ms\fP som argument. Detta ger ett +svenskt försättsblad. +Se \fBgroff_mm(@MAN7EXT@)\fP för övriga detaljer. +.SH "SKRIVET AV" +Jörgen Hägg, Lunds Tekniska Högskola <jh@efd.lth.se> +.SH FILER +.B @MACRODIR@/tmac.@TMAC_M@se +.B @TMAC_MDIR@/se_*.cov +.SH "SE OCKSÅ" +.BR groff (@MAN1EXT@), +.BR @g@troff (@MAN1EXT@), +.BR @g@tbl (@MAN1EXT@), +.BR @g@pic (@MAN1EXT@), +.BR @g@eqn (@MAN1EXT@) +.br +.BR m@TMAC_M@ (@MAN7EXT@) diff --git a/gnu/usr.bin/groff/mm/mm/0.MT b/gnu/usr.bin/groff/mm/mm/0.MT new file mode 100644 index 0000000..02a423e --- /dev/null +++ b/gnu/usr.bin/groff/mm/mm/0.MT @@ -0,0 +1,145 @@ +.\"------------ +.\" Cover sheet. Memorandum type 0-3 and "string". +.\"------------ +.if !r Au .nr Au 1 +.nr cov*mt0-ind 1.1c +.de cov@print-title +.MOVE 4.8c 1.5c +.S 8 +subject: +.sp -1.1 +.S +.PGFORM +.B +.ll 9c +.fi +.cov*title +.R +.ll +.nf +.if d cov*title-charge-case \fBCharge Case \\*[cov*title-charge-case]\fP +.if d cov*title-file-case \fBFile Case \\*[cov*title-file-case]\fP +.fi +.. +.\"------------ +.de cov@print-authors +.MOVE 5.7c 13.3c +.nf +.S 8 +\\$1: +.br +.S +.sp -1 +.in 0.8c +.B +.nr cov*i 0 1 +.while \\n+[cov*i]<=\\n[cov*au] \{\ +. cov@print-au1 \\n[cov*i] 1 +. if \\n[Au] \{\ +. cov@print-au2 \\n[cov*i] 3 4 +. cov@print-au2 \\n[cov*i] 6 5 +. cov@print-au1 \\n[cov*i] 7 +. cov@print-au1 \\n[cov*i] 8 +. cov@print-au1 \\n[cov*i] 9 +. \} +. if \\n[cov*i]<\\n[cov*au] .SP 1 +.\} +.R +.if r cov*mt-tm-max \{\ +. SP 1 +. nr cov*i 0 1 +. B +TM +. in 1.5c +. sp -1 +. while \\n+[cov*i]<\\n[cov*mt-tm-max] \\*[cov*mt-tm!\\n[cov*i]] +. in +. R +.\} +.fi +.PGFORM +.. +.\"------------ +.\" index arg1 +.de cov@print-au1 +.if d cov*au!\\$1!\\$2 \\*[cov*au!\\$1!\\$2] +.. +.\"------------ +.de cov@print-au2 +.\" index arg1 arg2 +.if d cov*au!\\$1!\\$2 \\*[cov*au!\\$1!\\$2] \c +.if \\$3=5 .if d cov*au!\\$1!\\$3 x\c +.if d cov*au!\\$1!\\$3 \\*[cov*au!\\$1!\\$3]\c +.br +.. +.\"------------ +.de cov@print-date +.MOVE 4.8c 13.3c +.S 8 +.nf +\\$1: +.br +.S +.sp -1 +.in 0.8c +.B "\\*[cov*new-date]" +.br +.fi +.PGFORM +.. +.\"------------ +.de cov@print-firm +.if d cov*firm \{\ +. MOVE 2.8c 0 17.7c +. S 18 +. rj 1 +\fB\\*[cov*firm]\fP +. S +. PGFORM +.\} +.. +.\"------------ +.de cov@print-abstract +.SP 3 +.if d cov*abstract \{\ +. misc@ev-keep cov*ev +. if \\n[cov*abs-ind]>0 \{\ +. in +\\n[cov*abs-ind]u +. ll -\\n[cov*abs-ind]u +. \} +. ce +\fI\\$1\fP +. SP 1.5 +. fi +. cov*abstract +. br +. ev +.\} +.. +.\"----------------- +.ds cov*mt0-txt!1 MEMORANDUM FOR FILE +.ds cov*mt0-txt!2 PROGRAMMER'S NOTES +.ds cov*mt0-txt!3 ENGINEER'S NOTES +.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm] +.\" +.if !d cov*mt-printed \{\ +. cov@print-firm +. cov@print-title subject +. cov@print-date date +. cov@print-authors from +. cov@print-abstract \\*[cov*abs-name] +. SP 3 +. if (\*[cov*mt-type]>=1)&(\*[cov*mt-type]<=3) \{\ +. ce +\fI\*[cov*mt0-txt!\*[cov*mt-type]]\fP +. SP 1.5 +. \} +. if \*[cov*mt-type]=6 \{\ +. ce +\fI\*[cov*mt-type-text]\fP +. SP 1.5 +. \} +. pg@enable-top-trap +. pg@enable-trap +. ds cov*mt-printed +.\} diff --git a/gnu/usr.bin/groff/mm/mm/4.MT b/gnu/usr.bin/groff/mm/mm/4.MT new file mode 100644 index 0000000..e361132 --- /dev/null +++ b/gnu/usr.bin/groff/mm/mm/4.MT @@ -0,0 +1,65 @@ +.\"------------ +.\" Cover sheet. Memorandum type 4 +.\"------------ +.de cov@print-title +.MOVE 2.4c +.S 12 +.ad c +.fi +.B +.cov*title +.br +.S +.R +.ad b +.PGFORM +.. +.\"------------ +.de cov@print-authors +.SP 0.5 +.I +.nr cov*i 0 1 +.while \\n+[cov*i]<=\\n[cov*au] \{\ +.ce +\\*[cov*au!\\n[cov*i]!1] +.br +.\} +.R +.PGFORM +.. +.\"------------ +.de cov@print-firm +.SP 0.5 +.ce +\\*[cov*firm] +.. +.\"------------ +.de cov@print-abstract +.SP 2 +.if d cov*abstract \{\ +. misc@ev-keep cov*ev +. if \\n[cov*abs-ind]>0 \{\ +. in +\\n[cov*abs-ind]u +. ll -\\n[cov*abs-ind]u +. \} +. ce +\fI\\*[cov*abs-name]\fP +. SP 2 +. fi +. cov*abstract +. br +. ev +.\} +.. +.\"----------------- +.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm] +.if !d cov*mt-printed \{\ +. cov@print-title +. cov@print-authors +. cov@print-firm +. cov@print-abstract +. SP 3 +. ds cov*mt-printed +. pg@enable-top-trap +. pg@enable-trap +.\} diff --git a/gnu/usr.bin/groff/mm/mm/5.MT b/gnu/usr.bin/groff/mm/mm/5.MT new file mode 100644 index 0000000..654fc95 --- /dev/null +++ b/gnu/usr.bin/groff/mm/mm/5.MT @@ -0,0 +1,33 @@ +.\"------------ +.\" Cover sheet. Memorandum type 5 +.\"------------ +.nr cov*mt0-ind 1.1c +.de cov@print-title +.B +.ll 9c +.fi +.cov*title +.R +.ll +.nf +.if d cov*title-charge-case \fBCharge Case \\*[cov*title-charge-case]\fP +.if d cov*title-file-case \fBFile Case \\*[cov*title-file-case]\fP +.fi +.. +.\"------------ +.de cov@print-date +.rj 1 +.B "\\*[cov*new-date]" +.br +.. +.\"------------ +.if !d cov*mt-printed \{\ +. SP 1.9c +. cov@print-title +. SP 1.2c +. cov@print-date +. SP 3 +. pg@enable-top-trap +. pg@enable-trap +. ds cov*mt-printed +.\} diff --git a/gnu/usr.bin/groff/mm/mm/ms.cov b/gnu/usr.bin/groff/mm/mm/ms.cov new file mode 100644 index 0000000..1c66215 --- /dev/null +++ b/gnu/usr.bin/groff/mm/mm/ms.cov @@ -0,0 +1,83 @@ +.\"------------ +.\" Cover sheet. Mostly like ms cover. +.\"------------ +.de cov@print-title +.in 0 +.misc@ev-keep cov*ev +.init@reset +.ad c +.hy 0 +.fi +.B +.cov*title +.br +.ad b +.R +.ev +.. +.\"------------ +.de cov@print-authors +.SP +.nr cov*i 0 1 +.while \\n+[cov*i]<=\\n[cov*au] \{\ +. ce +\fI\\*[cov*au!\\n[cov*i]!1]\fP +. nr cov*j 0 1 +. while \\n+[cov*j]<=9 \{\ +. if d cov*at!\\n[cov*i]!\\n[cov*j] \{\ +. if \w'\\*[cov*at!\\n[cov*i]!\\n[cov*j]]' \{\ +. ce +\s-1\\*[cov*at!\\n[cov*i]!\\n[cov*j]]\s0 +. .\} +. \} +. \} +.\} +.. +.\"------------ +.de cov@print-firm +.SP .5 +.ce +\\*[cov*firm] +.. +.\"------------ +.de cov@print-abstract +.SP 2 +.if d cov*abstract \{\ +. misc@ev-keep cov*ev +. init@reset +. if \\n[cov*abs-ind]>0 \{\ +. in +\\n[cov*abs-ind]u +. ll -\\n[cov*abs-ind]u +. \} +. ce +\fI\\$1\fP +. SP 1.5 +. fi +. cov*abstract +. br +. ev +.\} +.. +.\"------------ +.de cov@print-date +.SP 2 +\\*[cov*new-date] +.. +.\"----------------- +.de COVEND +.br +.if d cov*default-firm .if !d cov*firm .ds cov*firm \\*[cov*default-firm] +.sp |4.2c +.cov@print-title +.cov@print-authors +.cov@print-firm +.cov@print-abstract \\*[cov*abs-name] +.cov@print-date +.pg@enable-top-trap +.bp 1 +.pg@enable-trap +.if d cov*abs-arg .if \\n[cov*abs-arg] \{\ +. cov@print-abstract ABSTRACT +. SP 2 +.\} +.. diff --git a/gnu/usr.bin/groff/mm/mm/se_ms.cov b/gnu/usr.bin/groff/mm/mm/se_ms.cov new file mode 100644 index 0000000..e6431f2 --- /dev/null +++ b/gnu/usr.bin/groff/mm/mm/se_ms.cov @@ -0,0 +1,2 @@ +.mso mm/ms.cov +.nr cur*abstract-ll 11c diff --git a/gnu/usr.bin/groff/mm/tmac.m b/gnu/usr.bin/groff/mm/tmac.m new file mode 100644 index 0000000..8c86a60 --- /dev/null +++ b/gnu/usr.bin/groff/mm/tmac.m @@ -0,0 +1,2635 @@ +.\" Version: +.ds RE 1.19 +.ig + +Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. +mgm is written by Jörgen Hägg (jh@efd.lth.se) + +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. + +Almost complete. The letter format is not included. +Maybe as a separate package. +Should be better as time goes. + +Please send bugreports with examples to jh@efd.lth.se. + +Naming convention stolen from mgs. +Local names module*name +Extern names module@name +Env.var environ:name +Index array!index +.. +.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 lable adjust 0=left, 1=right +.nr Eq 0 +.\" Em dash string +.ds 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 1 +.\" 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 +.\" 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 +.\" +.ds Tm \(tm +.\" +.\"--------------------------------------------- +.\" Internal global variables +.\" +.\" These two are for cover macro .MT +.\" Change @langage in the national file. +.ds @cur-lib /usr/local/lib/groff/tmac +.\" .ds @language +.\" +.\" Current pointsize and vertical space, always in points. +.ie r S \{\ +. nr @ps \n[S] +. nr @vs \n[S]+2 +.\} +.el \{\ +. nr @ps 10 +. nr @vs 12 +.\} +.\" +.\" Page length +.ie r L .nr @pl \n[L] +.el .nr @pl \n[.p] +.\" page width +.ie r W .nr @ll \n[W] +.el .nr @ll 6i +.\" page offset +.ie r O .nr @po \n[O] +.el .nr @po \n(.o +.\" +.\" cheating... +.pl \n[@pl]u +.ll \n[@ll]u +.lt \n[@ll]u +.po \n[@po]u +.nr @cur-ll \n[@ll] +.\" +.\" 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 +.\" +.\" 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.5v +.if n .nr Hps1 1v +.\" +.\" Hps2 is the number of lines when level >= Hps +.nr Hps2 1v +.if n .nr Hps2 2v +.\" +.\" 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 +.\" +.\" 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 +.\" +.\" test for mgm macro. This can be used if the text must test +.\" what macros is used. +.nr .mgm 1 +.\" +.\"--------------------------------------------- +.\" 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] +'vs \\n[@vs] +.. +.de @error +.tm ****************** +.tm ERROR:(\\n[.F]) input line \\n[.c]:\\$* +.if \\n[D] .backtrace +.tm ****************** +.ab "Input aborted, syntax error" +.. +.\" ####### 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*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 +. par@doit \\$* +.\} +.el .if !(\\n[hd*last-hpos]=\\n[.k]) \{\ +. if \\n[D]>2 .tm Paragraph +. par@doit \\$* +.\} +.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 +.\} +.if \\n[Np] \{\ +\\n[H1].\\n+[par*number]\ \ \c +.\" $$$ 'br +.\} +.. +.\" ####### 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 ''\\$4' .br +.if !''\\$1' .nr @ll \\$1 +.if !''\\$2' .nr @pl \\$2 +.if !''\\$3' .nr @po \\$3 +.ll \\n[@ll]u +.lt \\n[@ll]u +.po \\n[@po]u +.pl \\n[@pl]u +.nr @cur-ll \\n[@ll] +'in 0 +.pg@move-trap +.. +.\"------------- +.\" .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' .nr @ps \\n[misc*S-ps] +. el \{\ +. ie '\\*[misc*a]'D' .nr @ps 10 +. el .nr @ps \\*[misc*a] +. \} +.\} +.\" +.\" set vertical spacing +.if !'\\*[misc*b]'C' \{\ +. ie '\\*[misc*b]'P' .nr @vs \\n[misc*S-vs] +. el \{\ +. ie '\\*[misc*b]'D' .nr @vs \\n[@ps]+2 +. el .nr @vs \\*[misc*b] +. \} +.\} +'ps \\n[@ps] +'vs \\n[@vs] +.if \\n[D]>1 .tm point-size \\n[@ps] (\\n[.s]), vertical spacing \\n[@vs] (\\n[.v]) +.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] +.. +.\"------------ +.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 +.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 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 +.ds@print-float 2\" $$$ could be wrong... +.\" terminate all lists +.LC 0 +.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 +.\" +.\" 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 .hd@set-page \\n[%] +.\" +.\" +.\" 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]]. +.\" +.\" toc-mark is sent to the table of contents +.ds hd*toc-mark \\*[hd*mark] +.as hd*mark \ \ \" add spaces between mark and heading +.if !\\n[hd*arg1] \{\ +. ds hd*mark\" no mark for unnumbered +. ds hd*toc-mark +.\} +.\" +.if \\n[D]>1 .tm At header \\*[hd*toc-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 +.if \\n[hd*htype]<2 .nr hd*need +\\n[Lsp]u \" add some extra 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 \\n[Hps2]u +.el .SP \\n[Hps1]u +.\" +.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 +.ne \\n[hd*need]u+\\n[dn]u+.5p \" this is the needed space for a header +.if \\n[hd*htype] .na \" no adjust if run-in +.\" +.\" 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] +.vs \\n[@vs] +.\" +.\" table of contents +.if (\\n[hd*level]<=\\n[Cl])&\w@\\$2@ \{\ +. ie \\n[Sectp] \{\ +. toc@save \\n[hd*level] "\\*[hd*toc-mark]" "\\$2" \\*[hd*sect-pg] +. \} +. el .toc@save \\n[hd*level] "\\*[hd*toc-mark]" "\\$2" \\n[%] +.\} +.\" set adjust to previous value +.SA +.\" do break or space +.if \\n[hd*htype] .br +.if \\n[hd*htype]>1 .SP \\n[Lsp]u +.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 +.if \\n[.$]>0 .nr hd*h1-page \\$1 +.\" +.ie \\n[Sectp] .nr P \\n[%]-\\n[hd*h1-page]+1 +.el .nr P \\n[%] +.\" +.\" 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 ''- % -'' +.ds pg*footer +.if \n[N]=4 .ds pg*header '''' +.if \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*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) +.. +.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] +.. +.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 and TP +.als }t pg*header +.als }e pg*even-header +.als }o pg*odd-header +.\"------------------------------------------------------------ +.\" 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 +.\" +.\" suppress pageheader if pagenumber == 1 and N == [124] +.if \\n[pg*top-enabled] \{\ +. 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 TP \{\ +' 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 +. \} +. el .TP +. 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 +. \" set multicolumn +. \" +. pg@set-po +. \" print floating displays +. ds@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 +.ie o .tl \\*[pg*odd-footer] +.el .tl \\*[pg*even-footer] +.ie (\\n[%]=1)&(\\n[N]=1) .tl \\*[pg*header] +.el .tl \\*[pg*footer] +.ev +.ie (\\n[ds*fnr]>=\\n[ds*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] +. vs \\n[@vs] +.\} +.el \{\ +. ps \\n[pg*ps] +. vs \\n[pg*vs] +.\} +.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 ---------------- +.ds@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*cur-column 0 1 +.nr pg*cur-po \\n[@po]u +.PGFORM +.if !'\\$1'1' .SK +.. +.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) +.\" +.nr pg*cols-per-page (u;\\n[.l]/(\\n[pg*column-size]+\\n[pg*column-sep]+1)) +.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 +.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] +.vs \\n[@vs] +.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 (\\n[@ps]-2) +.vs (\\n[@vs]-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 '\\*[ft*x]'WD' .nr ds*wide 1 +. if '\\*[ft*x]'-FB' .nr ds*float-break 0 +. if '\\*[ft*x]'FB' .nr ds*float-break 1 +.\} +.. +.\"----------------- +.\" begin footnote +.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 +.if !d ft*div .ft@init-footnote +.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 +.de FE +.nr ft*busy 0 +.br +.di +'in 0 +'nf +.if \\n[@pl]u<\\n[dn]u .@error "FE: too big footnote" +.ie (\\n[pg*foot-trap]u-\\n[.d]u)<\\n[dn]u \{\ +. da ft*next-div +. ft*tmp-div +. br +. di +.\} +.el \{\ +. 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 ds*fnr 0 1\" floating display counter +.nr ds*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 ds*ffloat 0\" >0 if DF, 0 if DS +.\" static display start +.\" nested DS/DE is allowed. No limit on depth. +.de DS +.br +.ds@start 0 DS \\$@ +.. +.\" floating display start +.\" nested DF/DE is not allowed. +.de DF +.if \\n[ds*lvl] .@error "DF:nested floating is not allowed. Use DS." +.ds@start 1 DF \\$@ +.. +.\"--------------- +.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 +.\"--------------- +.de ds@start +.nr ds*ffloat \\$1 +.ds ds*type \\$2 +.shift 2 +.nr ds*lvl +1 +.\" get format of the display +.ie \\n[.$] \{\ +. ie r ds*format!\\$1 .nr ds*format \\n[ds*format!\\$1] +. el .@error "\\*[ds*type]:wrong format:\\$1" +.\} +.el .nr ds*format 0 +.\" 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" +.\} +.nr ds*rindent 0 +.if \\n[.$]>2 .nr ds*rindent \\$3 +.\" +.\"--------------- +.nr ds*old-ll \\n[.l] +.misc@push ds-ll \\n[.l] +.misc@push ds-form \\n[ds*format] +.misc@push ds-ffloat \\n[ds*ffloat] +.nr ds*i \\n[.i] +.nr ds*ftmp \\n[.f] +.misc@ev-keep ds*ev!\\n+[ds*snr] +.ft \\n[ds*ftmp] +.\" +.init@reset +'in \\n[ds*i]u +.di ds*div!\\n[ds*snr] +.\" +.ll \\n[ds*old-ll]u +.lt \\n[ds*old-ll]u +.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 +.\" +.if \\n[ds*format]=1 \{\ +. ll -\\n[Si]n +. lt -\\n[Si]n +' in +\\n[Si]n +.\} +.if (\\n[ds*format]=3):(\\n[ds*format]=5) 'in 0 +.. +.\"--------------- +.de DE +.if \\n-[ds*lvl]<0 .@error "DE: no corresponding DS or DF" +.br +.if \\n[ds*ffloat] .SP \\n[Lsp]u +.di +.\" find out the real size of the diversion +.di ds*test +.ds*div!\\n[ds*snr] +.di +.nr ds*width \\n[dl] +.nr ds*height \\n[dn] +.rm ds*test +.misc@pop-nr ds-ll ds*old-ll +.misc@pop-nr ds-form ds*format +.misc@pop-nr ds-ffloat ds*ffloat +.if (\\n[ds*format]>=2)&(\\n[ds*width]>\\n[ds*old-ll]) \{\ +. @error "DE: display too wide for current line-length" +.\} +.\" prepare copy to floating display +.if \\n[ds*ffloat] .di ds*fdiv!\\n+[ds*fnr] +.\" +'in 0 +'nf +.if \\n[ds*format]=2 'ce 9999 +.if \\n[ds*format]=3 'in (u;(\\n[ds*old-ll]-\\n[ds*width])/2) +.if \\n[ds*format]=4 'rj 9999 +.if \\n[ds*format]=5 'in (u;\\n[ds*old-ll]-\\n[ds*width]) +.\" +.ie !\\n[ds*ffloat] \{\ +. \" +. \" Print static display +. \" Eject page if display will fit one page and +. \" there are less than half of the page left. +. 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)) \{\ +. ne \\n[.t]u+1v +. \} +. if (\\n[ds*height]<\\n[ds*i])&(\\n[.t]<(\\n[ds*height])) \{\ +. ne \\n[.t]u+1v +. \} +. if \\n[Ds] .SP \\n[Lsp]u +.\} +.el .SP \\n[Lsp]u +.ds*div!\\n[ds*snr] +.ie !\\n[ds*ffloat] .if \\n[Ds] .SP \\n[Lsp]u +.el \{\ +. SP \\n[Lsp]u +. di +.\} +.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 +.\" move div to the floating display list +.ev +.if \\n[ds*ffloat] \{\ +. nr ds*fsize!\\n[ds*fnr] \\n[dn] +. \" print float if queue is empty and the display fits into +. \" the current page +. if ((\\n[ds*fnr]>\\n[ds*o-fnr])&(\\n[ds*height]<\\n[.t])) \{\ +. ds@print-float 1 +. \} +.\} +.. +.\"------------- +.\" called by end-of-text +.de ds@eot-print +.if \\n[ds*o-fnr]<=\\n[ds*fnr] \{\ +. if \\n[D]>2 .tm Print remaining displays. +.\" still some floats left, make non-empty environment +. misc@ev-keep ne +. init@reset +\c +. ds@print-float 3 +. ev +.\} +.. +.\"--------------- +.\" print according to Df and De. +.\" .ds@print-float type +.\" type called from +.\" 1 .DE +.\" 2 end of section +.\" 3 end of document +.\" 4 beginning of new page +.\" +.de ds@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 (\\$1=1)&((\\n[Df]%2)=1) \{\ +. if \\n[.t]>\\n[ds*fsize!\\n[ds*o-fnr]] \{\ +. \" Df = 1,3 or 5 +. ds@print-one-float +. \} +. \} +.\" print all if Df<2 and end of section +. if (\\$1=2)&(\\n[Df]<2) .ds@print-all-floats +.\" print all if end of document. Where should they go instead? +. if \\$1=3 .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 +.\} +.. +.\"--------------- +.\" print a floating diversion +.de ds@output-div +.ev ds*fev +.in 0 +.nf +.ds*fdiv!\\n[ds*o-fnr] +.ev +.rm ds*fdiv!\\n[ds*o-fnr] +.rm ds*fsize!\\n[ds*o-fnr] +.rm ds*fformat!\\n[ds*o-fnr] +.nr ds*o-fnr +1 +.. +.\"--------------- +.\" print one floating display if there is one. +.de ds@print-one-float +.if \\n[ds*o-fnr]<=\\n[ds*fnr] \{\ +. if \\n[.t]<\\n[ds*fsize!\\n[ds*o-fnr]] .pg@next-page +. ds@output-div +. 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[ds*o-fnr]<=\\n[ds*fnr] \{\ +. if \\n[.t]<\\n[ds*fsize!\\n[ds*o-fnr]] .pg@next-page +. ds@output-div +. if \\n[De] .pg@next-page +.\} +.. +.\"--------------- +.\" print as many floats as will fit on the current page +.de ds@print-this-page +.while \\n[ds*o-fnr]<=\\n[ds*fnr] \{\ +. if \\n[.t]<\\n[ds*fsize!\\n[ds*o-fnr]] .break +. ds@output-div +.\} +.. +.\"########### 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 +.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 +.if \\n[.$]=2 .ds li*c-mark \\$1\ \\*[li*c-mark] +.if '\\*[li*c-mark]'\ ' .ds 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. +.de LC +.if !\\n[.$]=1 .@error "LC: no argument" +.if \\$1>\\n[li*lvl] .@error "LC: incorrect argument: \\$1 (too big)" +.while \\n[li*lvl]>\\$1 .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 +.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 +.de EQ +.ds eq*lable "\\$1 +.di eq*div +.misc@ev-keep eq*ev +.in 0 +.nf +.. +.de EN +.br +.di +.ta +.\" equation with lable. +.if \\n[dl] \{\ +. br +. chop eq*div +. ie (\\n[Eq]%2) \{\ +. \" lable to the left +. if \\n[ds*format]<2 \{\ +. ta (u;(\\n[.l]/7)+\\n[.i]) \\n[.l]u\" L +\\*[eq*lable]\t\\*[eq*div]\t\& +. \} +. if (\\n[ds*format]=2):(\\n[ds*format]=3) \{\ +. ta (u;(\\n[.l]-\\n[.i])/2+\\n[.i])C \\n[.l]u\" C +\\*[eq*lable]\t\\*[eq*div]\t\& +. \} +. if \\n[ds*format]>3 \{\ +. ta \\n[.l]uR\" R +\\*[eq*lable]\t\\*[eq*div] +. \} +. \} +. el \{\ +. \" lable to the right +. if \\n[ds*format]<2 \{\ +. ta \\n[.l]uR\" L +\\*[eq*div]\t\\*[eq*lable] +. \} +. if (\\n[ds*format]=2):(\\n[ds*format]=3) \{\ +. ta (u;(\\n[.l]-\\n[.i])/2+\\n[.i])C \\n[.l]uR\" C +\t\\*[eq*div]\t\\*[eq*lable] +. \} +. if \\n[ds*format]>3 \{\ +. ta (\\n[.l]u-\w@\\*[eq*lable]@u-1m)R \\n[.l]uR\" R +\t\\*[eq*div]\t\\*[eq*lable] +. \} +. \} +.\} +.TAB +.ev +.. +.\"########### 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 +.ds@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 +.pg@clear-hd +.pg@next-page +.pg@clear-ft +.\"------------- +.if d Ci .toc@read-Ci \\*[Ci] +.nf +.in 0 +.nr toc*pn 0 1 +.af toc*pn i +.PF "''\\\\\\\\n+[toc*pn]''" +.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 +.\" print LIST OF XXX +.if d lix*dsfg .lix@print-ds fg "\\*[Lf]" +.if d lix*dstb .lix@print-ds tb "\\*[Lt]" +.if d lix*dsec .lix@print-ds ec "\\*[Le]" +.if d lix*dsex .lix@print-ds ex "\\*[Lx]" +.. +.\"----------- +.\" .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@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+1m +. \} +.\} +.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 +.ne 2v +.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 +.\" 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*lable \\*[Li\\$1]\ \\*[lix*numb]\\*[lix*ds-form] +.if !'\\$5'' \{\ +. if !0\\$6 .ds lix*lable \\*[Li\\$1]\ \\$5\\*[lix*numb]\\*[lix*ds-form] +. if 0\\$6=1 .ds lix*lable \\*[Li\\$1]\ \\*[lix*numb]\\$5\\*[lix*ds-form] +. if 0\\$6=2 .ds lix*lable \\*[Li\\$1]\ \\$5\\*[lix*ds-form] +.\} +.ie \\n[Sectp] .ds lix*pgnr \\*[hd*sect-pg] +.el .ds lix*pgnr \\n[%] +.\" print line if not between DS/DE +.ie \\n[ds*lvl]<1 .lix@print-text "\\*[lix*lable]" "\\*[lix*text]" +.el .lix@embedded-text "\\*[lix*lable]" "\\*[lix*text]" +.\" +.\" save line for LIST OF XXX +.if !r lix*wth\\$1 .nr lix*wth\\$1 0 +.if \w@\\*[lix*lable]@>\\n[lix*wth\\$1] .nr lix*wth\\$1 \w@\\*[lix*lable]@ +.if \\n[\\$2] .lix@ds-save \\$1 \\*[lix*pgnr] "\\$4" "\\*[lix*lable]" +.if !'\\$7'' .SETR \\$7 \\*[lix*numb] +.. +.\"----------- +.de lix@print-text +.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 +.. +.\" hide printout until diversion is evaluated +.de lix@embedded-text +\!.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 +.. +.\"------------ +.\" print complete list of XXXX +.de lix@print-ds +.\" arg: fg,tb,ec,ex text +.if !\\n[Cp] .pg@next-page +.\" print LIST OF XXXX +.ce +\\$2 +.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 2v +.nr lix*sep \\n[.l]-\\n[lix*i]-\w'\\$4\\$3\\$2'-1m-1n-\\n[.i] +\h'\\n[lix*i]u'\\$4\\$3\h'1n'\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] +.vs \\n[@vs] +.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 +.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 \\n[ref*nr] +.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 +.. +.\"########################### module app ############################ +.\" +.nr app*nr 0 1 +.af app*nr A +.nr app*dnr 0 1 +.\"------------ +.\" .APP name text +.\" name == "" -> autonumber +.de APP +.\" .if \\n[.$]<2 .@error "APP: too few arguments" +.app@set-ind "\\$1" +.\" +.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" +.\" +.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*dnr] \{\ +. nr H1 0 1 +. af H1 A +. \} +. ds app*ind \\n+[app*nr] +. nr H1 \\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) +.. +.\"########################### 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 +.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 +.if \\n[.$]<1 .@error "AU: no arguments" +.nr cov*au +1 +.nr cov*i 0 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 +.if \\n[.$]<1 .@error "AF: no arguments" +.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 +.. +.\" I am planning to use mgm some time :-) +.ie \\n[yr]<50 .ds cov*new-date \\*[MO\\n[mo]] \\n[dy], 20\\n[yr] +.el .ds cov*new-date \\*[MO\\n[mo]] \\n[dy], 19\\n[yr] +.als DT cov*new-date +.de ND +.\" don't remember why I did this: .pg@disable-top-trap +.ds cov*new-date \\$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. +.\" +.\" init reference system +.de INITR +.if \\n[.$]<1 .@error "INITR:filename missing" +.\" ignore if INITR has already been used +.if !r qrf*pass \{\ +.\" +. ds qrf*file \\$1 +. sy test -f \\*[qrf*file].tmp +. ie \\n[systat] \{\ +. \" PASS 1 +. if \\n[D]=1 .tm PASS 1 +. if \\n[D]>1 .tm INITR: file \\*[qrf*file].tmp, PASS 1 +. nr qrf*pass 1 +. open qrf*stream \\*[qrf*file].tmp +. write qrf*stream .\\\\" references for \\*[qrf*file] +. close qrf*stream +. \} +. el \{\ +. nr qrf*pass 2 +. if \\n[D]=1 .tm PASS 2 +. if \\n[D]>1 .tm INITR: file \\*[qrf*file].tmp, PASS 2 +. sy mv \\*[qrf*file].tmp \\*[qrf*file].qrf +' so \\*[qrf*file].qrf +. \} +.\} +.. +.\"--------------- +.\" set a reference. +.de SETR +.if \\n[.$]<1 .@error "SETR:reference name missing" +.ie !r qrf*pass .tm "SETR: No .INITR in this file" +.el \{\ +. ds qrf*name qrf*ref-\\$1 +.\" probably pass two if already defined +. if \\n[qrf*pass]<2 \{\ +. if \\n[D]>2 .tm SETR: ref \\*[qrf*name]=\\*[hd*toc-mark],\\n[%] +. \" heading-number +. ds \\*[qrf*name]-hn \\*[hd*toc-mark] +. \" page-number +. ds \\*[qrf*name]-pn \\n[%] +. \" +. \" append to file +. opena qrf*stream \\*[qrf*file].tmp +. write qrf*stream .ds \\*[qrf*name]-hn \\*[hd*toc-mark] +. write qrf*stream .ds \\*[qrf*name]-pn \\n[%] +. if !'\\$2'' .write qrf*stream .ds \\*[qrf*name]-xx \\$2 +. close qrf*stream +. \} +.\} +.. +.\"--------------- +.\" get misc-string, output <->42<-> in pass 1 +.\" 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 +.ie \\n[qrf*pass]=2 \{\ +. ie !d \\*[qrf*name]-xx .tm "GETHN:\\$1 not defined" +. el \{\ +. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-xx] +. el \\*[\\*[qrf*name]-xx]\c +. \} +.\} +.\" The answer... +.el <->42<->\c +.. +.\"--------------- +.\" get header-number, output X.X.X. in pass 1 +.\" 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 +.ie \\n[qrf*pass]=2 \{\ +. ie !d \\*[qrf*name]-hn .tm "GETHN:\\$1 not defined" +. el \{\ +. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-hn] +. el \\*[\\*[qrf*name]-hn]\c +. \} +.\} +.el X.X.X.\c +.. +.\"--------------- +.\" get page-number, output 9999 in pass 1 +.\" 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 +.ie \\n[qrf*pass]=2 \{\ +. ie !d \\*[qrf*name]-pn .tm "GETPN:\\$1 not defined" +. el \{\ +. ie \\n[.$]>1 .ds \\$2 \\*[\\*[qrf*name]-pn] +. el \\*[\\*[qrf*name]-pn]\c +. \} +.\} +.el 9999\c +.. +.\"---------- +.de GETR +.if \\n[.$]<1 .@error "GETR:reference name missing" +.ie !r qrf*pass \{\ +. tm "GETR: No .INITR in this file" +.\} +.el \{\ +. if \\n[qrf*pass]=2 \{\ +. GETHN \\$1 Qrfh +. GETPN \\$1 Qrfp +\\*[Qrf] +. \} +.\} +.. diff --git a/gnu/usr.bin/groff/mm/tmac.mse b/gnu/usr.bin/groff/mm/tmac.mse new file mode 100644 index 0000000..e84babf --- /dev/null +++ b/gnu/usr.bin/groff/mm/tmac.mse @@ -0,0 +1,42 @@ +.\" swedish version of mm +.\" See tmac.m for version-information. +.mso tmac.m +.ds @language se +.\" +.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 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 +.ie \\n[yr]<50 .ds cov*new-date \\n[dy] \\*[MO\\n[mo]] 20\\n[yr] +.el .ds cov*new-date \\n[dy] \\*[MO\\n[mo]] 19\\n[yr] +.nr pg*footer-size 4\" 1v+footer+even/odd footer+1v |