BSD 4_4 release
[unix-history] / usr / share / doc / usd / 21.troff / m2
CommitLineData
ad787160
C
1.\" This module is believed to contain source code proprietary to AT&T.
2.\" Use and redistribution is subject to the Berkeley Software License
3.\" Agreement and your Software Agreement with AT&T (Western Electric).
ff262511 4.\"
ad787160 5.\" @(#)m2 8.1 (Berkeley) 8/14/93
a909d424
KM
6.\"
7.tr |
8.rm mx
9.br
10.mh
11Line Length and Indenting
12.pg
13The maximum line length for fill mode may be set with \fBll\fR.
14The indent may be set with \fBin\fR;
15an indent applicable to \fIonly\fR the \fInext\fR output line may be set with \fBti\fR.
16The line length includes indent space but \fInot\fR
17page offset space.
18The line-length minus the indent is the basis for centering with \fBce\fR.
19The effect of \fBll\fR, \fBin\fR, or \fBti\fR
20is delayed, if a partially collected line exists,
21until after that line is output.
22In fill mode the length of text on an output line is less than or equal to
23the line length minus the indent.
24The current line length and indent are available in registers \fB.l\fR and \fB.i\fR respectively.
25The length of \fIthree-part titles\fR produced by \fBtl\fR
26(see \(sc14) is \fIindependently\fR set by \fBlt\fR.
27.h1
28.bt
29\fB&ll\fI|\(+-N\fR 6.5\|in previous E,\fBm\fR Line length is set to \(+-\fIN\fR.
30In \*(TR the maximum (line-length)+(page-offset) is about 7.54 inches.
31.bt
32\fB&in\fI|\(+-N\fR \fIN\(eq\^\fR0 previous B,E,\fBm\fR Indent is set to \fI\(+-N\fR.
33The indent is prepended to each output line.
34.bt
35\fB&ti\fI|\(+-N\fR - ignored B,E,\fBm\fR Temporary indent.
36The \fInext\fR output text line will be indented a distance \fI\(+-N\fR
37with respect to the current indent.
38The resulting total indent may not be negative.
39The current indent is not changed.
40.mh
41Macros, Strings, Diversion, and Position Traps
42.sc
43Macros and strings.
44A \fImacro\fR is a named set of arbitrary \fIlines\fR that may be invoked by name or
45with a \fItrap\fR.
46A \fIstring\fR is a named string of \fIcharacters\fR,
47\fInot\fR including a newline character,
48that may be interpolated by name at any point.
49Request, macro, and string names share the \fIsame\fR name list.
50Macro and string names
51may be one or two characters long and may usurp previously defined
52request, macro, or string names.
53Any of these entities may be renamed with \fBrn\fR
54or removed with \fBrm\fR.
55Macros are created by \fBde\fR and \fBdi\fR, and appended to by \fBam\fR and \fBda\fR;
56\fBdi\fR and \fBda\fR cause normal output to be stored in a macro.
57Strings are created by \fBds\fR and appended to by \fBas\fR.
58A macro is invoked in the same way as a request;
59a control line beginning \fB.\fIxx\fR will interpolate the contents of macro \fIxx\fR.
60The remainder of the line may contain up to nine \fIarguments\fR.
61The strings \fIx\fR and \fIxx\fR are interpolated at any desired point with
62\fB\e\(**\fIx\fR and \fB\e\(**(\fIxx\fR respectively.
63String references and macro invocations may be nested.
64.sc
65Copy mode input interpretation.
66During the definition and extension
67of strings and macros (not by diversion)
68the input is read in \fIcopy mode\fR.
69The input is copied without interpretation
70\fIexcept\fR that:
71.x1
72.ds + \v'-.1m'\s-4\(bu\s+4\v'+.1m'
ad787160
C
73\(bu The contents of number registers indicated by \fB\en\fR are interpolated.
74\(bu Strings indicated by \fB\e\(**\fR are interpolated.
75\(bu Arguments indicated by \fB\e$\fR are interpolated.
76\(bu Concealed newlines indicated by \fB\e\fR(newline) are eliminated.
77\(bu Comments indicated by \fB\e"\fR are eliminated.
78\(bu \fB\et\fR and \fB\ea\fR are interpreted as \s-1ASCII\s+1 horizontal tab and \s-1SOH\s+1 respectively (\(sc9).
79\(bu \fB\e\e\fR is interpreted as \fB\e\fR.
80\(bu \fB\e.\fR is interpreted as "\fB.\fR".
a909d424
KM
81.x2
82These interpretations can be suppressed by
83prepending
84a \fB\e\fR.
85For example, since \fB\e\e\fR maps into a \fB\e\fR, \fB\e\en\fR will copy as \fB\en\fR which
86will be interpreted as a number register indicator when the
87macro or string is reread.
88.sc
89Arguments.
90When a macro is invoked by name, the remainder of the line is
91taken to contain up to nine arguments.
92The argument separator is the space character, and arguments
93may be surrounded by double-quotes to permit imbedded space characters.
94Pairs of double-quotes may be imbedded in double-quoted arguments to
95represent a single double-quote.
96If the desired arguments won't fit on a line,
97a concealed newline may be used to continue on the next line.
98.pg
99When a macro is invoked the \fIinput level\fR is \fIpushed down\fR and
100any arguments available at the previous level become unavailable
101until the macro is completely read and the previous level is restored.
102A macro's own arguments can be interpolated at \fIany\fR point
103within the macro with \fB\e$\fIN\fR, which interpolates the \fIN\fR\^th
104argument
105(1\(<=\fIN\fR\^\(<=9).
106If an invoked argument doesn't exist,
107a null string results.
108For example, the macro \fIxx\fR may be defined by
109.x1
ad787160 110.ft B
a909d424
KM
111.ta .75i
112&de xx \e"begin definition
113Today is \e\e$1 the \e\e$2.
114&. \e"end definition
ad787160 115.ft R
a909d424
KM
116.x2
117and called by
118.x1
ad787160 119.ft B
a909d424 120&xx Monday 14th
ad787160 121.ft R
a909d424
KM
122.x2
123to produce the text
124.x1
ad787160 125.ft B
a909d424 126Today is Monday the 14th.
ad787160 127.ft R
a909d424
KM
128.x2
129Note that the \fB\e$\fR
130was concealed in the definition with a prepended \fB\e\fR.
131The number of currently available
132arguments is in the \fB.$\fR register.
133.pg
134No arguments are available at the top (non-macro) level
135in this implementation.
136Because string referencing is implemented
137as a input-level push down,
138no arguments are available from \fIwithin\fR a string.
139No arguments are available within a trap-invoked macro.
140.pg
141Arguments are copied in \fIcopy mode\fR onto a stack
142where they are available for reference.
143The mechanism does not allow an argument to contain
144a direct reference to a \fIlong\fR string
145(interpolated at copy time) and it is advisable to
146conceal string references (with an extra \fB\e\fR\|)
147to delay interpolation until argument reference time.
148.sc
149Diversions.
150Processed output may be diverted into a macro for purposes
151such as footnote processing (see Tutorial \(scT5)
152or determining the horizontal and vertical size of some text for
153conditional changing of pages or columns.
154A single diversion trap may be set at a specified vertical position.
155The number registers \fBdn\fR and \fBdl\fR respectively contain the
156vertical and horizontal size of the most
157recently ended diversion.
158Processed text that is diverted into a macro
159retains the vertical size of each of its lines when reread
160in \fInofill\fR mode
161regardless of the current \fIV\fR.
162Constant-spaced (\fBcs\fR) or emboldened (\fBbd\fR) text that is diverted
163can be reread correctly only if these modes are again or still in effect
164at reread time.
165One way to do this is to imbed in the diversion the appropriate
166\fBcs\fR or \fBbd\fR requests with the \fItransparent\fR
167mechanism described in \(sc10.6.
168.pg
169Diversions may be nested
170and certain parameters and registers
171are associated
172with the current diversion level
173(the top non-diversion level may be thought of as the
1740th diversion level).
175These are the diversion trap and associated macro,
176no-space mode,
177the internally-saved marked place (see \fBmk\fR and \fBrt\fR),
178the current vertical place (\fB.d\fR register),
179the current high-water text base-line (\fB.h\fR register),
180and the current diversion name (\fB.z\fR register).
181.sc
182Traps.
183Three types of trap mechanisms are available\(empage traps, a diversion trap, and
184an input-line-count trap.
185Macro-invocation traps may be planted using \fBwh\fR at any page position including the top.
186This trap position may be changed using \fBch\fR.
187Trap positions at or below the bottom of the page
188have no effect unless or until
189moved to within the page or rendered effective by an increase in page length.
190Two traps may be planted at the \fIsame\fR position only by first planting them at different
191positions and then moving one of the traps;
192the first planted trap will conceal the second unless and until the first one is moved
193(see Tutorial Examples \(scT5).
194If the first one is moved back, it again conceals the second trap.
195The macro associated with a page trap is automatically
196invoked when a line of text is output whose vertical size \fIreaches\fR
197or \fIsweeps past\fR the trap position.
198Reaching the bottom of a page springs the top-of-page trap, if any,
199provided there is a next page.
200The distance to the next trap position is available in the \fB.t\fR register;
201if there are no traps between the current position and the bottom of the page,
202the distance returned is the distance to the page bottom.
203.pg
204A macro-invocation trap effective in the current diversion may be planted using \fBdt\fR.
205The \fB.t\fR register works in a diversion; if there is no subsequent trap a \fIlarge\fR
206distance is returned.
c5bdbd2a 207For a description of input-line-count traps, see the \fBit\fR request below.
a909d424
KM
208.h1
209.bt
210\fB&de\fI|xx|yy\fR - \fI.yy=\fB..\fR - Define or redefine the macro \fIxx\fR.
211The contents of the macro begin on the next input line.
212Input lines are copied in \fIcopy mode\fR until the definition is terminated by a
213line beginning with \fB.\fIyy\fR,
214whereupon the macro \fIyy\fR is called.
215In the absence of \fIyy\fR, the definition
216is terminated by a
217line beginning with "\fB..\fR".
218A macro may contain \fBde\fR requests
219provided the terminating macros differ
220or the contained definition terminator is concealed.
221\&"\fB..\fR" can be concealed as
222\fB\e\e..\fR which will copy as \fB\e..\fR and be reread as "\fB..\fR".
223.bt
224\fB&am\fI|xx|yy\fR - \fI.yy=\fB..\fR - Append to macro (append version of \fBde\fR).
225.bt
226\fB&ds\fI|xx|string\fR - ignored - Define a string
227\fIxx\fR containing \fIstring\fR.
228Any initial double-quote in \fIstring\fR is stripped off to permit
229initial blanks.
230.bt
231\fB&as\fI|xx|string\fR - ignored - Append
232\fIstring\fR to string \fIxx\fR
233(append version of \fBds\fR).
234.bt
235\fB&rm\fI|xx\fR - ignored - Remove
236request, macro, or string.
237The name \fIxx\fR is removed from the name list and
238any related storage space is freed.
239Subsequent references will have no effect.
240.bt
241\fB&rn\fI|xx|yy\fR - ignored - Rename request, macro, or string
242\fIxx\fR to \fIyy\fR.
243If \fIyy\fR exists, it is first removed.
244.bt
245\fB&di|\fIxx\fR - end D Divert output to macro \fIxx\fR.
246Normal text processing occurs during diversion
247except that page offsetting is not done.
248The diversion ends when the request \fBdi\fR or \fBda\fR is encountered without an argument;
249extraneous
250requests of this type should not appear when nested diversions are being used.
251.bt
252\fB&da|\fIxx\fR - end D Divert, appending to \fIxx\fR
253(append version of \fBdi\fR).
254.bt
255\fB&wh\fI|N|xx\fR - - \fBv\fR Install
256a trap to invoke \fIxx\fR at page position \fIN;\fR
257a \fInegative N\fR will be interpreted with respect to the
258page \fIbottom\fR.
259Any macro previously planted at \fIN\fR is replaced by \fIxx\fR.
260A zero \fIN\fR refers to the \fItop\fR of a page.
261In the absence of \fIxx\fR, the first found trap at \fIN\fR, if any, is removed.
262.bt
263\fB&ch\fI|xx|N\fR - - \fBv\fR Change
264the trap position for macro \fIxx\fR to be \fIN\fR.
265In the absence of \fIN\fR, the trap, if any, is removed.
266.bt
267\fB&dt\fI|N|xx\fR - off D,\fBv\fR Install a diversion trap
268at position \fIN\fR in the \fIcurrent\fR diversion to invoke
269macro \fIxx\fR.
270Another \fBdt\fR will redefine the diversion trap.
271If no arguments are given, the diversion trap is removed.
272.bt
273\fB&it\fI|N|xx\fR - off E Set an input-line-count trap
274to invoke the macro \fIxx\fR after \fIN\fR lines of \fItext\fR input
275have been read
276(control or request lines don't count).
277The text may be in-line text or
278text interpolated by inline or trap-invoked macros.
279.bt
280\fB&em\fI|xx\fR none none - The
281macro \fIxx\fR will be invoked
282when all input has ended.
283The effect is the same as if the contents of \fIxx\fR had been at the end
284of the last file processed.
285.mh
286Number Registers
287.pg
288A variety of parameters are available to the user as
289predefined, named \fInumber registers\fR (see Summary and Index, page 7).
290In addition, the user may define his own named registers.
291Register names are one or two characters long and \fIdo not\fR conflict
292with request, macro, or string names.
293Except for certain predefined read-only registers,
294a number register can be read, written, automatically
295incremented or decremented, and interpolated
296into the input in a variety of formats.
297One common use of user-defined registers is to
298automatically number sections, paragraphs, lines, etc.
299A number register may be used any time numerical input is expected or desired
300and may be used in numerical \fIexpressions\fR (\(sc1.4).
301.pg
302Number registers are created and modified using \fBnr\fR, which
303specifies the name, numerical value, and the auto-increment size.
304Registers are also modified, if accessed
305with an auto-incrementing sequence.
306If the registers \fIx\fR and \fIxx\fR both contain
307\fIN\fR and have the auto-increment size \fIM\fR,
308the following access sequences have the effect shown:
309.TS
310center box;
311c2|c2|c
ad787160
C
312c2|c2|c
313l2|c2|c
314l2|c2|c
315l2|l2|c.
a909d424
KM
316 Effect on Value
317Sequence Register Interpolated
318_
319\fB\en\fIx\fR none \fIN\fR
320\fB\en(\fIxx\fR none \fIN\fR
321\fB\en+\fIx\fR \fIx\fR incremented by \fIM\fR \fIN+M\fR
322\fB\en\-\fIx\fR \fIx\fR decremented by \fIM\fR \fIN\-M\fR
323\fB\en+(\fIxx\fR \fIxx\fR incremented by \fIM\fR \fIN+M\fR
324\fB\en\-(\fIxx\fR \fIxx\fR decremented by \fIM\fR \fIN\-M\fR
325.TE
326When interpolated, a number register is converted to
327decimal (default),
328decimal with leading zeros,
329lower-case Roman,
330upper-case Roman,
331lower-case sequential alphabetic,
332or
333upper-case sequential alphabetic
334according to the format specified by \fBaf\fR.
335.h1
336.bt
f6d73574 337\fB&nr\fI|R|\(+-N|M\fR - - \fBu\fR \
a909d424
KM
338The number register \fIR\fR is assigned the value \fI\(+-N\fR
339with respect to the previous value, if any.
340The increment for auto-incrementing is set to \fIM\fR.
341.bt
342\fB&af\fI|R|c\fR arabic - - Assign format \fIc\fR to register \fIR\fR.
343The available formats are:
344.TS
345center box;
346c2|c
347c2|c
348c2|l.
349 Numbering
350Format Sequence
351_
352\fB1\fR 0,1,2,3,4,5,...
353\fB001\fR 000,001,002,003,004,005,...
354\fBi\fR 0,i,ii,iii,iv,v,...
355\fBI\fR 0,I,II,III,IV,V,...
356\fBa\fR 0,a,b,c,...,z,aa,ab,...,zz,aaa,...
357\fBA\fR 0,A,B,C,...,Z,AA,AB,...,ZZ,AAA,...
358.TE
359An arabic format having \fIN\fR digits
360specifies a field width of \fIN\fR digits (example 2 above).
361The read-only registers and the \fIwidth\fR function (\(sc11.2)
362are always arabic.
363.bt
364\fB&rr\fI|R\fR - ignored - Remove register \fIR\fR.
365If many registers are being created dynamically, it
366may become necessary to remove no longer used registers
367to recapture internal storage space for newer registers.