OSDN Git Service

shrink mine
[nethackexpress/trunk.git] / doc / tmac.n
1 \" @(#)$Id: tmac.n,v 1.3 2000/02/02 18:49:05 dean Exp $
2 .\" The News macro package
3 .\"
4 .\" This  is  the macro package that is used to format news documents.  It
5 .\" was written because many sites do not have one of the -mm or -ms pack-
6 .\" ages that the documents use.   This is NOT compatible with EITHER, but
7 .\" (I hope) will become the standard for all news  documents  (man  pages
8 .\" excepted, since everyone seems to have -man.)
9 .\"
10 .\" This package was written using  only  the  "NROFF/TROFF Users' Guide",
11 .\" and  therefore  if  you  can run NROFF/TROFF, you can legitimately use
12 .\" this package.  However, because NROFF/TROFF are proprietary  programs,
13 .\" I  cannot  place  this  package in the public domain.  This should not
14 .\" matter, because if you legitimately have  NROFF/TROFF,  you  have  the
15 .\" documentation; if not, you can't run off the documentation anyway.
16 .\"
17 .\" This  package may be circulated freely with the news documentation; it
18 .\" may not be sold, but is to be distributed with  the  unformatted  news
19 .\" documents.  However,  the name of the author and the place at which it
20 .\" was written (in the author's own  time,  of  course)  are  not  to  be
21 .\" removed  from the package regardless of how it is modified or altered.
22 .\" Further, please do not distribute this package if you make any changes
23 .\" because  I  don't want to get bug reports of macros I haven't written;
24 .\" if you have a goodie you want me to add, send it to me and we'll talk.
25 .\" (I really do like feedback!)  I'd really appreciate your cooperation.
26 .\"
27 .\" Author:     Matt Bishop
28 .\"             Research Institute for Advanced Computer Science
29 .\"             Mail Stop 230-5
30 .\"             NASA Ames Research Center
31 .\"             Moffett Field, CA  94035
32 .\"
33 .\" version 1.0         September 28, 1985      mab@riacs.arpa
34 .\"     initial version
35 .\" version 1.1         October 25, 1985        mab@riacs.arpa
36 .\"     fixed an incredibly obscure footnote bug (that occurred twice in
37 .\"     the news documentation!) which put footnoted words on  one  page
38 .\"     and the footnote on the next if the word was in the next-to-last
39 .\"     or last line; commented it, and generally cleaned up
40 .\" Version 1.2         October 27, 1985        mab@riacs.arpa
41 .\"     Added a few more comments and a check to keep footnotes lined up
42 .\"     with the bottom margin.
43 .\" Version 1.3         February 12, 1986       mab@riacs.arpa
44 .\"     Added an error check to catch unmatched ef's and ed's
45 .\" Version 1.4         December 29, 1986       mab@riacs.edu
46 .\"     Changed footnote for ux, pd, and vx macros and  added  a  string
47 .\"     for rg ("Registered Trademark")
48 .\" Version 1.5         January 2, 1989         Matt.Bishop@dartmouth.edu
49 .\"     Minor modifications for nroff compatibility
50 .\" Version 1.6         March 15, 1989          Matt.Bishop@dartmouth.edu
51 .\"                                             ..!bear.dartmouth.edu!bishop
52 .\"     Fixed a bug in footnote handling (again, sigh ...)  This one
53 .\"     occurred when the the "fo" trap position was reset just beneath
54 .\"     the current line; the footnote overflow trap would kick in and
55 .\"     never be closed.
56 .\"
57 .\"
58 .\" **********
59 .\" these preserve and restore various things
60 .\" they are used to shorten other macros
61 .de yf                                  \" restore fonts
62 .ft \\n(f2                              \" previous font
63 .ft \\n(f1                              \" current font
64 ..
65 .de yi                                  \" restore indents
66 'in \\n(i2u                             \" previous indent
67 'in \\n(i1u                             \" current indent
68 ..
69 .de ys                                  \" restore point sizes
70 .ps \\n(s2                              \" previous point size
71 .ps \\n(s1                              \" current point size
72 ..
73 .de yv                                  \" restore vertical spacings
74 .vs \\n(v2u                             \" previous vertical spacing
75 .vs \\n(v1u                             \" current vertical spacing
76 ..
77 .de ya                                  \" restore everything
78 .yf                                     \" restore fonts
79 .yi                                     \" restore indents
80 .ys                                     \" restore point sizes
81 .yv                                     \" restore vertical spacing
82 ..
83 .de zf                                  \" preserve fonts
84 .nr f1 \\n(.f                           \" current font
85 .ft                                     \" switch to previous font
86 .nr f2 \\n(.f                           \" previous font
87 .ft                                     \" back to current font
88 ..
89 .de zi                                  \" preserve indents
90 .nr i1 \\n(.iu                          \" current indent
91 'in                                     \" switch to previous indent
92 .nr i2 \\n(.iu                          \" previous indent
93 'in                                     \" back to current indent
94 ..
95 .de zs                                  \" preserve point sizes
96 .nr s1 \\n(.su                          \" current point size
97 .ps                                     \" switch to previous point size
98 .nr s2 \\n(.su                          \" previous point size
99 .ps                                     \" back to current point size
100 ..
101 .de zv                                  \" preserve vertical spacings
102 .nr v1 \\n(.vu                          \" current vertical spacing
103 .vs                                     \" switch to previous vertical spacing
104 .nr v2 \\n(.vu                          \" previous vertical spacing
105 .vs                                     \" back to current vertical spacing
106 ..
107 .de za                                  \" save everything
108 .zf                                     \" save fonts
109 .zi                                     \" save indents
110 .zs                                     \" save point sizes
111 .zv                                     \" save vertical spacings
112 ..
113 .\" **********
114 .\" these actually print the header and footer titles
115 .\" they are defined separately from the "hd" and "fo" macros
116 .\" to make user redefinition easy
117 .de pt                                  \" print header title
118 .                                       \" omit header on first page
119 .if \\n%>1 \{\
120 '       sp |\\$1u                       \" move to proper position
121 .       ft 1                            \" change to default font
122 .       ps \\n(ps                       \" change to default point size
123 .       vs \\n(vs                       \" change to default spacing
124 .       tl '\\*(h0'\\*(h1'\\*(h2'       \" center title
125 .       vs                              \" restore current vertical spacing
126 .       ps                              \" restore current point size
127 .       ft                              \" restore current font
128 .\}
129 ..
130 .de pf                                  \" print footer title
131 .ft 1                                   \" change to default font
132 .ps \\n(ps                              \" change to default point size
133 .vs \\n(vs                              \" change to default spacing
134 .ie \\n%=1 .tl '\\*(h0'\\*(h1'\\*(h2'   \" on first page, print the header here
135 .el        .tl '\\*(f0'\\*(f1'\\*(f2'   \" on other pages, print the footer
136 .vs                                     \" restore current vertical spacing
137 .ps                                     \" restore current point size
138 .ft                                     \" restore current font
139 ..
140 .\" **********
141 .\" these are the top of page (header) and bottom of page (footer) macros
142 .\" they don't actually print anything, just call the right macros
143 .de hd                                  \" header -- do top of page processing
144 .if t .if \\n(cm .tl '\(rn'''           \" drop cut mark if needed
145 .pt \\n(ttu                             \" print header
146 .nr fc 0 1                              \" init footnote count
147 .nr fs \\n(.pu-\\n(bmu-1u               \" if any footnotes, start print here
148 .nr fp 0-\\n(bmu                        \" reset current footer place
149 .ch fo -\\n(bmu                         \" reset footer trap
150 .if \\n(dn .fz                          \" put leftover footnotes st bottom
151 .ya                                     \" restore font, etc.
152 'sp |\\n(tmu                            \" move to top of body
153 .ns                                     \" don't allow any more space
154 ..
155 .de fo                                  \" footer -- do bottom of page processing
156 .za                                     \" save font, etc.
157 .rs                                     \" you want motions here
158 .nr dn 0                                \" clobber diversion size register
159 .if \\n(fc .fd                          \" now print the footnotes, if any
160 'bp                                     \" force out page
161 ..
162 .\" **********
163 .\" these are the footnote macros
164 .\" here's an overview:
165 .\"     Footnotes are processed in environment #1, which is  initialized
166 .\"     at the bottom of this package.  When "fn" is called, nroff/troff
167 .\"     switches to this environment.  The body of the footnote is saved
168 .\"     in  the  diversion  "tf" (for "temporary footnote"), so you will
169 .\"     NEVER spring a trap during the first reading of a footnote. When
170 .\"     "ef" ("end footnote") is called,  the diversion  is  closed.  If
171 .\"     this  is the first footnote on the page (ie, the number register
172 .\"     "fc" is 1), and the footnote height (plus the height of 1  line)
173 .\"     crosses  the  bottom  margin,  you get the footnoted word on one
174 .\"     page and the footnote on the other.  In this case we  just  call
175 .\"     "fo"  manually  (taking case it cannot be re-invoked on the same
176 .\"     page!)  If this situation does not occur,  we  just  adjust  the
177 .\"     footer  trap's  position upwards (we'll get to how far in a min-
178 .\"     ute); if this puts the trap above the current line,  we  reposi-
179 .\"     tion  the trap just beneath the current line to be sure of trig-
180 .\"     triggering it once the current line is forced out.
181 .\"      To reposition the footer trap, we proceed as  follows.  Because
182 .\"     the  trap  may be sprung in the middle of a line, it is possible
183 .\"     that the footnote will not fit on the page (regardless of  where
184 .\"     on the page the footnoted word occurs -- really!) if we move the
185 .\"     trap up by the size of  the  footnote  diversion  "tf".  So,  we
186 .\"     fudge things a little bit -- for the first footnote on each page
187 .\"     we move the footer trap up 1 extra line ("line" being 1v in env-
188 .\"     ironment  #0).   Unless  the point size and vertical spacing are
189 .\"     increased between the first footnote and the footer trap's being
190 .\"     sprung,  this  will  keep  the footnotes on the same page as the
191 .\"     footnoted word.  But as there may be now as much as 1v of  space
192 .\"     between the footnote and the bottom margin, which looks HIDEOUS,
193 .\"     we use the number register "fs" to mark where  the  footer  trap
194 .\"     would  REALLY go, and just space to it when it comes time to put
195 .\"     out the footnotes.
196 .de fd                                  \" dump footnotes
197 .nr gs 1v                               \" get a measure of 1 line in env #0
198 .ev 1                                   \" switch to footnote environment
199 .nr gs +2v                              \" min of 2 lines of footnotes
200 .                                       \" if the number register ns > 0,
201 .                                       \" the last text line may contain a
202 .                                       \" footnote that is too big to fit;
203 .                                       \" this checks for such a note and
204 .                                       \" if so, forces the footnote into
205 .                                       \" the "fy" diversion that carries
206 .                                       \" it onto the next text page
207 .ie (\\n(nsu>0)&(\\n(gsu>=\\n(.tu) 'sp \\n(gsu  \" be sure you can get it down
208 .el .if \\n(fsu>\\n(nlu 'sp \\n(fsu-\\n(nlu     \" move to footnote start position
209 'nf                                     \" don't reprocess footnotes
210 'in 0                                   \" don't indent them any more either
211 .tf                                     \" drop text of footnotes
212 .rm tf
213 .if '\\n(.z'fy' .di                     \" end overflow diversion, if any
214 .nr fc 0                                \" re-init footnote count
215 .ev                                     \" return to usual environment
216 ..
217 .de fn                                  \" start footnote
218 .                                       \" look for nested footnotes -- ILLEGAL
219 .ie \\n(if>0 .er "footnote within footnote"
220 .el .da tf                              \" append footnote to footnote diversion
221 .nr if +1                               \" increment level of footnoting
222 .nr fc +1                               \" one more footnote on this page
223 .if \\n(fc=1 .nr fp -1v                 \" The reason for this "fudge factor"
224 .                                       \" is that there is no way to force
225 .                                       \" NROFF/TROFF to invoke a macro at
226 .                                       \" the end of each line.  At times,
227 .                                       \" the trap boundary will not match up
228 .                                       \" with the bottom of a line, so the
229 .                                       \" "fo" trap which is set at 2320 may
230 .                                       \" not be triggered until 2340 -- and
231 .                                       \" then the footnote won't fit.  This
232 .                                       \" gives some slack so the footnote is
233 .                                       \" more likely to fit. *sigh*
234 .ev 1                                   \" enter footnote environment
235 .if \\n(fc=1 .fs                        \" drop separator if first footnote
236 .br                                     \" flush out any previous line in footnote
237 .fi                                     \" process footnote in fill mode
238 ..
239 .de ef                                  \" end footnote
240 .br                                     \" flush out the line in footnote
241 .ie \\n(if<=0 .er "end footnote has no corresponding begin footnote"
242 .el \{\
243 .       nr if -1                        \" decrement level of footnoting
244 .       nr fg 2v                        \" remember this for repositioning fo
245 .       ev                              \" back to usual environment
246 .       if \\n(if=0 \{\
247 .               di                      \" end of footnote proper
248 .               nr fp -\\n(dnu          \" "fo" will be moved at least up this far
249 .               nr fs -\\n(dnu          \" increase size of footnote
250 .               ch fo \\n(fpu           \" reposition "fo" trap (first guess)
251 .                                       \" the first part of the "ie" clause
252 .                                       \" is taken in the special case
253 .                                       \" described above
254 .               ie (\\n(fc=1)&((\\n(nlu+1v+\\n(fgu)>=(\\n(.pu-\\n(bmu)) \{\
255 .                       nr ns \\n(dnu   \" suppress footnote separator
256 .                                       \" since this footnote contains it
257 .                                       \" keep "fo" from being invoked twice
258 .                       ch fo \\n(.pu+1i
259 .                       fo              \" force the page out AT ONCE
260 .                       nr ns 0         \" re-enable footnote separator
261 .               \}
262 .                                       \" footnote won't fit completely
263 .                                       \" invoke the footer trap but
264 .                                       \" don't worry about the footnote
265 .                                       \" separator (it's already there)
266 .               el .if (\\n(nlu+1v)>=(\\n(.pu+\\n(fpu) \{\
267 .                                       \" as before we must reposition the
268 .                                       \" "fo" trap to prevent "fo" from
269 .                                       \" being invoked twice
270 .                       ch fo \\n(.pu+1i
271 .                       fo              \" force the page out AT ONCE
272 .               \}
273 .       \}
274 .\}
275 ..
276 .de fs                                  \" drop footnote separator
277 .                                       \" only if not already dropped
278 .if \\n(ns=0 \l'1i'
279 .nr ns 0                                \" in case footnotes are over 1 page long
280 ..
281 .de fx                                  \" process footnote overflow
282 .if \\n(fc .di fy                       \" stuff them in the right place
283 ..
284 .de fz                                  \" deposit footnote overflow
285 .fn                                     \" treat it as a footnote
286 .nf                                     \" it's already been processed
287 .in 0                                   \"   and indented
288 .fy                                     \" "fx" put it here
289 .ef                                     \" end the footnote
290 ..
291 .\" **********
292 .\" the ones after here are user-invoked (like "fn" and "ef" above)
293 .\" title, author, etc.
294 .de mt                                  \" main title
295 \&
296 .sp |\\n(mtu                            \" space
297 .ft 3                                   \" in bold
298 .ps \\n(ps+2p                           \" large point size and
299 .vs \\n(vs+2p                           \" vertical spacing
300 .ce 1000                                \" center the title
301 .nr t2 1                                \" space it
302 ..
303 .de au                                  \" author
304 .nr t2 0                                \" spacing here
305 .sp 2v                                  \" space
306 .ft 2                                   \" in italics
307 .ps \\n(ps                              \" usual point size and
308 .vs \\n(vs                              \" vertical spacing
309 .ce 1000                                \" center the name(s)
310 ..
311 .de ai                                  \" author's institution
312 .if \\n(t2 .sp 2v                       \" space after a title
313 .nr t2 0                                \" institution
314 .ft 2                                   \" in italics
315 .ps \\n(ps                              \" usual point size and
316 .vs \\n(vs                              \" vertical spacing
317 .ce 1000                                \" center the name(s)
318 ..
319 .de bt                                  \" begin text macro
320 .nr t2 0                                \" hold it here
321 .nr it +1                               \" mark as called
322 .ce 0                                   \" end any centering
323 .sn 3v                                  \" a little bit of space
324 ..
325 .\" paragraph
326 .de si                                  \" start indented section
327 .nr lo \\n(lm                           \" remember the current level
328 .nr lm +1                               \" go to the next level
329 .ie '\\$1'' .nr l\\n(lm \\n(l\\n(lo+5n  \" if no arg, indent 5n
330 .el         .nr l\\n(lm \\$1n           \" otherwise, indent that much
331 ..
332 .de ei                                  \" end indent
333 .nr lm -1                               \" down one level
334 .if \\n(lm<0 .nr lm 0                   \" make sure you don't go too far
335 ..
336 .de pg                                  \" plain old paragraph
337 .if !\\n(it .bt                         \" end the title and such
338 .sn \\n(pdu                             \" inter-paragraph spacing
339 .ft 1                                   \" reset a few things (paranoia)
340 .                                       \" these ONLY if not in footnote
341 .ie \\n(if=0 \{\
342 .       ps \\n(ps                       \" reset point size
343 .       vs \\n(vs                       \" reset vertical spacing
344 .       ne 1v+\\n(.Vu                   \" slightly more than 1 line
345 .\}
346 .el \{\
347 .       ps \\n(ps-2p                    \" reset point size
348 .       vs \\n(vs-2p                    \" reset vertical spacing
349 .\}
350 .in \\n(l\\n(lmu                        \" stop any indenting
351 .ce 0                                   \" stop any centering
352 .if !'\\$1'L' .if !'\\$1'l' .ti +\\n(piu        \" indent the sucker
353 ..
354 .de lp                                  \" labelled paragraph
355 .pg l                                   \" reset paragraph
356 .if \\n(.$>1 .nr li \\$2n               \" if indent given use it
357 .in +\\n(liu                            \" indent for paragraph
358 .ti -\\n(liu                            \" force first line NOT to indent
359 .ta +\\n(liu                            \" for the label
360 \&\\$1\t\c
361 .if \\w'\\$1'u>=(\\n(l\\n(lmu+\\n(liu) .br      \" don't overwrite
362 ..
363 .\" The following two macros (hu & hn) have been modified for ELM usage.
364 .\" If the macros have text as part of the macro call, the text will be
365 .\" increased in size by two points.  After printing the text, the font
366 .\" will be returned to normal, otherwise the font will be left bold.
367 .\"
368 .\" section
369 .de hu                                  \" header, unnumbered
370 .                                       \" format: .hu [text]
371 .if !\\n(it .bt                         \" end the title and such
372 .br                                     \" force out previous line
373 .b
374 .ie \\n(hP .ps \\n(hP
375 .el        .ps \\n(ps
376 .ie \\n(hv .vs \\n(hv
377 .el        .vs \\n(vs
378 .in \\n(l\\n(lmu                        \" stop any indenting
379 .sn \\n(hsu                             \" inter-section spacing
380 .ne 3v+\\n(.Vu                          \" slightly more than 3 lines
381 .fi                                     \" process the text, too
382 .if \\n(.$>=1 \{\
383 .ps +2
384 \\$1
385 .\}
386 .if \\n(.$>=2 \\$2
387 .if \\n(.$>=3 \\$3
388 .if \\n(.$>=4 \\$4
389 .if \\n(.$>=5 \\$5
390 .if \\n(.$>=6 \\$6
391 .if \\n(.$>=7 \\$7
392 .if \\n(.$>=8 \\$8
393 .if \\n(.$=9 \\$9
394 .if \\n(.$>=1 \{\
395 .ps -2
396 .br
397 .ft 1
398 .\}
399 ..
400 .de hn                                  \" header, numbered
401 .                                       \" format: .hn [level] [text]
402 .if !\\n(it .bt                         \" end the title and such
403 .br                                     \" force out previous line
404 .b
405 .ie \\n(hP .ps \\n(hP
406 .el        .ps \\n(ps
407 .ie \\n(hv .vs \\n(hv
408 .el        .vs \\n(vs
409 .in \\n(l\\n(lmu                        \" stop any indenting
410 .sn \\n(hsu                             \" inter-section spacing
411 .ne 3v+\\n(.Vu                          \" slightly more than 3 lines
412 .fi                                     \" process the text, too
413 .ie !'\\$1'' .nr hn \\$1
414 .el          .nr hn 1
415 .ie \\n(hn>0 .nr hn -1
416 .el          .nr hn 0
417 .ie \\n(hn=0 \{\
418 .       nr h0 +1                        \" add 1 to main section header
419 .       nr h1 0                         \" zap remaining section numbers
420 .       nr h2 0                         \" zap remaining section numbers
421 .       nr h3 0                         \" zap remaining section numbers
422 .ie \\n(.$>=2 \{\
423 .ps +2
424 \\n(h0.
425 .ps -2
426 .\}
427 .el \\n(h0.
428 .\}
429 .el .ie \\n(hn=1 \{\
430 .       nr h1 +1                        \" add 1 to the section header
431 .       nr h2 0                         \" zap remaining section numbers
432 .       nr h3 0                         \" zap remaining section numbers
433 .ie \\n(.$>=2 \{\
434 .ps +2
435 \\n(h0.\\n(h1.
436 .ps -2
437 .\}
438 .el \\n(h0.\\n(h1.
439 .\}
440 .el .ie \\n(hn=2 \{\
441 .       nr h2 +1                        \" add 1 to the section header
442 .       nr h3 0                         \" zap remaining section numbers
443 .ie \\n(.$>=2 \{\
444 .ps +2
445 \\n(h0.\\n(h1.\\n(h2.
446 .ps -2
447 .\}
448 .el \\n(h0.\\n(h1.\\n(h2.
449 .\}
450 .el \{\
451 .       nr h3 +1                        \" add 1 to the section number
452 .ie \\n(.$>=2 \{\
453 .ps +2
454 \\n(h0.\\n(h1.\\n(h2.\\n(h3.
455 .ps -2
456 .\}
457 .el \\n(h0.\\n(h1.\\n(h2.\\n(h3.
458 .\}
459 .if \\n(.$>=2 \{\
460 .ps +2
461 \\$2
462 .\}
463 .if \\n(.$>=3 \\$3
464 .if \\n(.$>=4 \\$4
465 .if \\n(.$>=5 \\$5
466 .if \\n(.$>=6 \\$6
467 .if \\n(.$>=7 \\$7
468 .if \\n(.$>=8 \\$8
469 .if \\n(.$>=9 \\$9
470 .if \\n(.$>=2 \{\
471 .br
472 .ft 1
473 .ps -2
474 .\}
475 ..
476 .\" displays (no floats, thank God!)
477 .de sd                                  \" start display
478 .                                       \" look for nested displays -- ILLEGAL
479 .ie \\n(id>0 .er "display within display"
480 .el \{\
481 .       ie '\\$1'c' .nr sf 1            \" center the sucker
482 .       el          .nr sf 0            \" don't center it
483 .\}
484 .sn \\n(pdu                             \" a little bit of space
485 .ev 2                                   \" switch to display environment
486 .nf                                     \" what you type is what you get
487 .if \\n(id=0 .di dd                     \" start saving text
488 .rs                                     \" don't eat leading space
489 .nr id +1                               \" increment level of display
490 ..
491 .de ed                                  \" end display
492 .br                                     \" flush line
493 .ie \\n(id<=0 .er "end display has no corresponding begin display"
494 .el \{\
495 .       nr id -1                        \" decrement level of display
496 .       if \\n(id=0 \{\
497 .               di                      \" end diversion
498 .               fi                      \" resume filling
499 .               in -\\n(piu             \" dedent
500 .               ev                      \" pop environment
501 .               ne \\n(dnu              \" be sure you have room
502 .               nf                      \" don't reprocess display
503 .               rs                      \" don't eat leading space
504 .               zi                      \" save indents
505 .               ie \\n(sf .in (\\n(llu-\\n(dlu)/2u      \" center on the line length
506 .               el .in +\\n(piu         \" indent the sucker
507 .               dd                      \" drop display
508 .               yi                      \" restore indents
509 .       \}
510 .\}
511 .fi                                     \" resume filling
512 .sn \\n(pdu                             \" a little bit of space
513 ..
514 .\" **********
515 .\" fonts -- if argument(s), apply only to first
516 .de b                                   \" bold (font 3)
517 .ie \\n(.$>0 \\&\\$3\\f3\\$1\\fP\\$2
518 .el .ft 3
519 ..
520 .de i                                   \" italics (font 2)
521 .ie \\n(.$>0 \\&\\$3\\f2\\$1\\fP\\$2
522 .el .ft 2
523 ..
524 .de r                                   \" roman (font 1)
525 .ft 1                                   \" just restore it
526 ..
527 .de bi                                  \" bold italics (embolden font 2)
528 \\&\\$3\c
529 \\kb\\f2\\$1\\fP\\h'|\\nbu+2u'\\f2\\$1\\fP\\$2
530 ..
531 .\" **********
532 .\" point sizes -- if argument(s), apply only to first
533 .de sm                                  \" reduce point size by 2
534 .ie \\n(.$>0 \\&\\$3\\s-2\\$1\\s0\\$2
535 .el .ps -2
536 ..
537 .de is                                  \" increase point size by 2
538 .ie \\n(.$>0 \\&\\$3\\s+2\\$1\\s0\\$2
539 .el .ps +2
540 ..
541 .de nl                                  \" return to normal size
542 .ps \\n(ps                              \" just reset the point size
543 ..
544 .\" **********
545 .\" handy force space/inhibit more space macros
546 .de sn                                  \" space, then turn on nospace mode
547 .sp \\$1                                \" space
548 .ns                                     \" ignore any more space requests
549 ..
550 .de sr                                  \" force out space
551 .rs                                     \" turn on spacing mode
552 .sp \\$1                                \" space
553 ..
554 .\" **********
555 .\" end of text and error macros
556 .de et                                  \" end of text macro
557 .                                       \" this: (1) flushes rest of line
558 .                                       \" (2) trips the footer, taking
559 .                                       \" care of footnotes
560 .sp \\n(.pu
561 .                                       \" check for open displays or footnotes
562 .if \\n(id>0 .er "unfinished display"
563 .if \\n(if>0 .er "unfinished footnote"
564 .                                       \" this one means an -mn bug (*sigh*)
565 .if !'\\n(.z'' .er "diversion \\n(.z not closed"
566 ..
567 .de er                                  \" print error message
568 .                                       \" flag it as an error
569 .ds ws "** ERROR **
570 .                                       \" if you have it, give the file name
571 .if !'\\*(.f'' .as ws " file \\*(.f,
572 .                                       \" put out the line number
573 .as ws " line \\n(.c
574 .                                       \" and finally the error message
575 .tm \\*(ws: \\$1
576 ..
577 .\" **********
578 .\" macros in this section are VERY specific to the news documentation
579 .de pa                                  \" protocol appellation (darn names!)
580 \\&\\$3\\f2\\$1\\fP\\$2
581 ..
582 .de ng                                  \" news group name
583 \\&\\$3\\f3\\$1\\fP\\$2
584 ..
585 .de cn                                  \" computer name
586 \\&\\$3\\f2\\$1\\fP\\$2
587 ..
588 .de hf                                  \" header field
589 \\&\\$3\\*(lq\\$1\\*(rq\\$2
590 ..
591 .de cf                                  \" contents of field
592 \\&\\$3\\*(lq\\$1\\*(rq\\$2
593 ..
594 .de qc                                  \" quote control char (command)
595 \\&\\$3\\f3<\\s-2\\$1\\s0>\\fP\\$2
596 ..
597 .de qp                                  \" quote printing char (command)
598 \\&\\$3\\f3\\$1\\fP\\$2
599 ..
600 .de op                                  \" option
601 \\&\\$3\\f3\\$1\\fP\\$2
602 ..
603 .\" **********
604 .\" trademarked names
605 .de pd                                  \" print "PDP-11"
606 .ie \\n(p1 \\&\\$2\\s-1PDP\\s0-11\\$1
607 .el \{\
608 .       nr p1 +1                        \" mark footnote as dropped
609 \\&\\$2\\s-1PDP\\s0-11\\*(rg\\$1
610 .       fn                              \" put out the footnote
611 \\&\\*(rgPDP-11 is a registered trademark of Digital Equipment Corporation.
612 .       ef                              \" short and sweet ...
613 .\}
614 ..
615 .de ux                                  \" print "UNIX"
616 .ie \\n(ux \\&\\$2\\s-1UNIX\\s0\\$1
617 .el \{\
618 .       nr ux +1                        \" mark footnote as dropped
619 \\&\\$2\\s-1UNIX\\s0\\*(rg\\$1
620 .       fn                              \" put out the footnote
621 \\&\\*(rgUNIX is a registered trademark of AT&T.
622 .       ef                              \" short and sweet ...
623 .\}
624 ..
625 .de vx                                  \" print "VAX"
626 .ie \\n(vx \\&\\$2\\s-1VAX\\s0\\$1
627 .el \{\
628 .       nr vx +1                        \" mark footnote as dropped
629 \\&\\$2\\s-1VAX\\s0\\*(rg\\$1
630 .       fn                              \" put out the footnote
631 \\&\\*(rgVAX is a trademark of Digital Equipment Corporation.
632 .       ef                              \" short and sweet ...
633 .\}
634 ..
635 .\" **********
636 .\" set up string and number registers
637 .                                       \" set up for the date
638 .if \n(mo=1  .ds mo January
639 .if \n(mo=2  .ds mo February
640 .if \n(mo=3  .ds mo March
641 .if \n(mo=4  .ds mo April
642 .if \n(mo=5  .ds mo May
643 .if \n(mo=6  .ds mo June
644 .if \n(mo=7  .ds mo July
645 .if \n(mo=8  .ds mo August
646 .if \n(mo=9  .ds mo September
647 .if \n(mo=10 .ds mo October
648 .if \n(mo=11 .ds mo November
649 .if \n(mo=12 .ds mo December
650 .nr Yr \n(yr+1900
651 .ds dy "\*(mo \n(dy, \n(Yr
652 .if \n(dw=1  .ds dw Sunday
653 .if \n(dw=2  .ds dw Monday
654 .if \n(dw=3  .ds dw Tuesday
655 .if \n(dw=4  .ds dw Wednesday
656 .if \n(dw=5  .ds dw Thursday
657 .if \n(dw=6  .ds dw Friday
658 .if \n(dw=7  .ds dw Saturday
659 .                                       \" NROFF dependencies
660 .if n \{\
661 .                                       \" string registers
662 .       ds rg (R)
663 .       ds lq ""
664 .       ds rq ""
665 .       ds f1 "\*(dy
666 .                                       \" number registers
667 .       nr hs 1v                        \" space before section header
668 .       nr pd 1v                        \" inter-paragraph spacing
669 .       nr bm 1.0i                      \" height of bottom margin
670 .\}
671 .                                       \" NROFF dependencies
672 .if t \{\
673 .                                       \" string registers
674 .       ds rg \\u\\s-2\\(rg\\s0\\d
675 .       ds lq ``
676 .       ds rq ''
677 .                                       \" number registers
678 .       nr hs 1v                        \" space before section header
679 .       nr pd 0.3v                      \" inter-paragraph spacing
680 .       nr bm 1.0i+1v                   \" height of bottom margin (wacky laser)
681 .\}
682 .                                       \" these are the same for [NT]ROFF
683 .ds dg \(dg
684 .ds vr "News Version B2.11
685 .ds pv "News macros 1.5
686 .ds h1 - % -
687 .nr bt 0.5i+1v                          \" bottom of page to footer
688 .nr cm 0                                \" no cut marks
689 .nr fc 0 1                              \" init footnote count
690 .nr fl 5.5i                             \" footnote line length
691 .nr fp 0-\n(bmu                         \" fo macro trap location
692 .nr h0 0                                \" init section header level 0
693 .nr h1 0                                \" init section header level 1
694 .nr h2 0                                \" init section header level 2
695 .nr h3 0                                \" init section header level 3
696 .nr id 0                                \" 1 in display
697 .nr if 0                                \" 1 in keep
698 .nr it 0                                \" 1 when beyond title, etc.
699 .nr li 5n                               \" indent for labelled paragraph
700 .nr ll 6.5i                             \" line length
701 .nr lm 0                                \" left margin
702 .nr l0 0                                \" first indent level
703 .nr mt 1.5i+1v                          \" title goes down this far
704 .nr pi 5n                               \" regular paragraph indent
705 .nr po 1.0i                             \" page offset
706 .nr ps 10                               \" point size
707 .nr tm 1.0i                             \" height of top margin
708 .nr tt 0.5i-0.5v                        \" top of page to header
709 .nr p1 0                                \" no PDP-TM message yet
710 .nr ux 0                                \" no UNIX-TM message yet
711 .nr vx 0                                \" no VAX-TM message yet
712 .nr vs 12                               \" vertical spacing
713 .\" set things up
714 .\" DSINC changes for XROFF
715 .nr f1 1
716 .nr f2 1
717 .nr s1 10
718 .nr s2 10
719 .nr v1 12
720 .nr v2 12
721 .ps 10
722 .vs 12
723 .\" DSINC end changes for XROFF
724 .po \n(pou                              \" set page offset
725 .ps \n(ps                               \" set previous, current
726 .ps \n(ps                               \"   point sizes
727 .vs \n(vs                               \" set previous, current
728 .vs \n(vs                               \"   vertical spacings
729 .ll \n(llu                              \" set line length
730 .lt \n(llu                              \" set title line length
731 .ev 1                                   \" *** footnote environment
732 .ps \n(ps-2p                            \" set previous, current
733 .ps \n(ps-2p                            \"   point sizes
734 .vs \n(vs-2p                            \" set previous, current
735 .vs \n(vs-2p                            \"   vertical spacings
736 .ll \n(flu                              \" set line length
737 .lt \n(flu                              \" set title line length
738 .ev                                     \" *** pop environment
739 .ev 2                                   \" *** footnote environment
740 .ps \n(ps                               \" set previous, current
741 .ps \n(ps                               \"   point sizes
742 .vs \n(vs                               \" set previous, current
743 .vs \n(vs                               \"   vertical spacings
744 .ll \n(llu                              \" set line length
745 .lt \n(llu                              \" set title line length
746 .ev                                     \" *** pop environment
747 .\" now set internal registers (for the first header section)
748 .nr f1 \n(.f                            \" saved font #1
749 .nr f2 \n(.f                            \" saved font #2
750 .nr s1 \n(.s                            \" saved point size #1
751 .nr s2 \n(.s                            \" saved point size #2
752 .nr v1 \n(.v                            \" saved vertical spacing #1
753 .nr v2 \n(.v                            \" saved vertical spacing #2
754 .\" install traps
755 .wh 0i hd                               \" position header trap
756 .wh -\n(bmu fo                          \" position footer trap
757 .wh \n(.pu+1i fx                        \" put footnote overflow trap here
758 .ch fx -\n(bmu                          \" move it over fo
759 .wh -\n(btu pf                          \" print the bottom margin here
760 .em et                                  \" at end of file, call et
761 .\" couple of miscellaneous requests
762 .bd S 3 3                               \" embolden special font chars if B
763 .hy 2                                   \" don't hyphenate last lines
764