8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / cmd / troff / troff.d / tmac.d / vgrind
blob2306c472fd94e5d4fe834b0beb1a75dee817ba8d
1 .\"
2 .\" CDDL HEADER START
3 .\"
4 .\" The contents of this file are subject to the terms of the
5 .\" Common Development and Distribution License, Version 1.0 only
6 .\" (the "License").  You may not use this file except in compliance
7 .\" with the License.
8 .\"
9 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 .\" or http://www.opensolaris.org/os/licensing.
11 .\" See the License for the specific language governing permissions
12 .\" and limitations under the License.
13 .\"
14 .\" When distributing Covered Code, include this CDDL HEADER in each
15 .\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 .\" If applicable, add the following below this CDDL HEADER, with the
17 .\" fields enclosed by brackets "[]" replaced with your own identifying
18 .\" information: Portions Copyright [yyyy] [name of copyright owner]
19 .\"
20 .\" CDDL HEADER END
21 .\"
22 .\" ident       "%Z%%M% %I%     %E% SMI"
23 .ig
24         This version of tmac.vgrind is intended to interface more
25         gracefully to other macro packages than the previous version.
26         Rather than defining things irrevocably, with no way to alter
27         the definitions, this version encapsulates definitions and
28         changes in the operating environment into macros whose
29         definitions can be overriden as needed.
31         Guide to strings that vfontedpr generates code to define:
32         =F      current file name
33         =H      operand of vfontedpr's -h flag
34         =M      time and date info for current file
36         Guide to number registers that vfontedpr generates code to define:
37         vP      point size (in points) to use for main text.  Pre-defined
38                 only if the -s option was supplied to vfontedpr.
39                 N.B.: does not affect headers or margin entries.
41         Internal strings
42         =f      ellipsis string for current function
43         =G      local copy of =F used to keep header and footer consistent
44                 with each other
45         +K      string used to start keyword; value depends on whether
46                 or not a comment is active
47         -K      string used to end keyword; value depends on whether
48                 or not a comment is active
50         Internal number registers
51         v       nonzero prevents cut marks (in theory, at least)
52         vC      nonzero when in comment
54         To do: convert hard-wired point sizes, etc. to parameterized values.
56         XXX: vfontedpr has font 2 wired into it for comments; change to use
57         tC and fC as below.
59   ***   This version is also augmented with support for two column output.
61         N.B.: I haven't thought at all about how to make this work in
62         filter mode.  Things will have to be redefined, as I rely on adding
63         hooks to the header and footer macros to flip from one column to
64         the next.
66         Additional register that vfontedpr defines:
67         =2      if nonzero, generate two column output.
69         Additional internal number registers.
70         v2      corrent column number: 0 == left, 1 == right
71         vH      saved vertical position of top of left column; calculated
72                 in vH when switching to left column and used in vF when
73                 switching to the right column.
74         vO      page offset in effect for left column (the original offset).
75         vR      page offset in effect for right column.
76         vL      saved line length in effect at beginning of new page.
77         vK      line length in effect for each column.
78         vX      scratch register.
80 '\"----------------
81 .ig
82     sI: Initialize configurable strings
83         XXX: need better name for this macro.
84         This macro is called from the vI macro at initialization time.
85         It must define the following:
86         _       string  representation for underscore
87         -       string  representation for minus
88         /       string  representation for slash, shifted horizontally so
89                         that C-style comments will line up
90         /*      string  representation for /*, shifted horizontally so
91                         that C-style comments will line up.
93         tC      string  comment font in .ft form (e.g., `BI')
94         fC      string  comment font in \f  form (e.g., `(BI')
95         tK      string  keyword font in .ft form
96         fK      string  keyword font in \f  form
97         tP      string  program font in .ft form
98         fP      string  program font in \f  form
100         By redefining this macro, one can alter the appearance of vgrind's
101         output.
103 .de sI
104 'ds _ \d\(mi\u
105 'ds - \(mi
106 'ds / \\h'\\w' 'u-\\w'/'u'/
107 'ds /* \\h'\\w' 'u-\\w'/'u'/*
109 'ds tC 2
110 'ds fC 2
111 'ds tK 3
112 'ds fK 3
113 'ds tP 1
114 'ds fP 1
116 .nr v 1
118 '\"----------------
120     no: no-op
121         This macro does nothing.  It's defined as a place-holder to
122 '\"     immediately precede \} constructs, to make editing easier.
124 .de no
126 '\"----------------
128     vI: Initial definitions.
129         This macro is called once only, before any .vS -- .vE program
130         inclusions are processed (or before all input files, if they consist
131         solely of program text).
133    XXX: We assume that 2-column mode imples landscape output.  Ideally, there
134         should be a separate -T<device> entry for the landscape version of the
135         output device, but that hasn't happened.  Instead, all there is is a
136         "-L" flag to troff that does nothing more than rotate the resulting
137         PostScript 90 degrees.  In particular, page lengths and widths are
138         unaffected.  Thus, we hack altered values into place here.  This is
139         pretty disgusting...
141 .de vI
142 '\"     Deal with page length and width -- see above.
143 'if \\n(=2 \{\
144 '       ll 9.5i
145 '       lt 9.5i
146 '       ev 2
147 '       ll 9.5i
148 '       lt 9.5i
149 '       ev
150 '       pl 8i
151 'no\}
153 '\"     If point size values haven't already been established, set them
154 '\"     to suitable default values.  The defaults are smaller for two column
155 '\"     mode.
156 'if \\n(vP=0 \{\
157 '       ie \\n(=2 \{\
158 '               nr vP 8
159 '       no\}
160 '       el \{\
161 '               nr vP 9
162 '       no\}
163 'no\}
164 '\"     Force comment state indicators into the correct
165 '\"     initial state.  Convert the comment start macro
166 '\"     to its final form.
169 'am +C
170 'ne 3
171 \\..
172 'ft \\*(tP
173 'lg 0
175 '\"----------------
177     vS: Start program text
178         This macro must be called at the start of a chunk of interpolated
179         program text.  The version given here is a default version suitable
180         for standalone use -- that is, not in conjunction with some other
181         macro package.  It should be redefined as necessary to coexist
182         gracefully with the macro package of your choice.  Of course, the
183         redefined version should do the same things this version does.
185         It may be necessary to move the emboldening commands to the vI
186         macro, or remove them altogether.  If they remain here, they will
187         probably have to be supplemented with copies of themselves that
188         are protected with the transparent throughput indicator.
190 .de vS
191 'ss 23
192 '\" Set text point size and vertical spacing.
193 '\"     XXX: All point size stuff should be parameterized, not just the
194 '\"     primary text sizes.
195 'ps \\n(vPp
196 'nr vX \\n(vP+1
197 'vs \\n(vXp
198 '\" If in two column mode, reduce page offset to first column a bit
199 '\" and bump line length correspondingly.
200 '\"     XXX: Aargh!  More hard-wiring!
201 .if \\n(=2 \{\
202 '       po -0.4i
203 '       ll +0.4i
204 '       lt +0.4i
205 '       ev 2
206 '       ll +0.4i
207 '       lt +0.4i
208 '       ev
209 'no\}
210 '\"'bd B 3
211 '\"'bd S B 3
212 'nf             \" When not run standalone, the host macro package
213 '               \" may well do this for us.
214 'nr vC 0        \" We're not in a comment.
215 'nr v2 0                                \" start in left column
216 'nr vO \\n(.ou                          \" save page offset
217 'nr vL \\n(.lu                          \" save line length
218 'nr vR \\n(.ou+(\\n(.lu/2u)+(0.25i)u    \" get right column offset
219 'ie \\n(=2 'nr vK (\\n(.lu/2u)-(0.25i)u \" get column width
220 'el        'nr vK \\n(.lu
222 '\"----------------
224     vE: End program text
225         This macro closes the chunk of program text started by vS.  The
226         same comments apply to it that do for vS.
228 .de vE
229 'ss 12
232 '\"'bd B
233 '\"'bd S
235 '\"----------------
237     vH: Header macro
238         Only invoked when not in filter mode.
240         N.B.: This macro hard-wires the inter-column gap to 0.25i.
242 'de vH
243 'v<     \" Put out the header itself.
244 'if \\n(=2 \{\
245 '\"     In two column mode: we've trapped because we've moved to a new
246 '\"     page.  Save position information for later use.  Squash down line
247 '\"     length.
248 '       nr v2 0 1       \" reset column counter
249 '       mk vH           \" save vertical position for later restoration
250 '       ll \\n(vKu
251 '.no\}
252 'v.     \" Put out the column header
254 '\"----------------
256     v<: Output page header
257         Called from vH.
259 .de v<
260 'ev 2
261 'if t 'if !\nv 'tl '\-\-''\-\-'
262 '\" Emit page header (file name at right and left page margins).
263 'ft 1
264 'sp .35i
265 'tl '\s14\f3\\*(=F\fP\s0'\\*(=H'\f3\s14\\*(=F\fP\s0'
266 '\"'\" Emit the ellipsis string for the current function.
267 '\"'sp .25i
268 '\"'ft 1
269 '\"\f2\s12\h'\\n(.lu-\w'\\*(=f'u'\\*(=f\fP\s0\h'|0u'
270 '\".sp .05i
272 '\" Save current file name for use in footer.
273 'ds =G \\*(=F
275 '\"----------------
277     v.: Output function ellipsis string as part of column header.
278         Called from vH.
280 .de v.
281 'ev 2
282 'sp .25i
283 'ft 1
284 \f2\s12\h'\\n(vKu-\w'\\*(=f'u'\\*(=f\fP\s0\h'|0u'
285 .sp .05i
287 'ns     \" Suppress additional spacing.
289 '\"----------------
291     vF: Footer macro
292         Only invoked when not in filter mode.
294         If in two column mode, handles switching between columns.
296         N.B.: This macro hard-wires the inter-column gap to 0.25i.
298 .de vF
299 'ie \\n(=2 \{\
300 '\" in two column mode
301 '       ie \\n+(v2=1 \{\
302 '\"         Transition from left column to right.
303 '\"             Construct a vertical line running down the center of the
304 '\"             gutter.
305 '               ev 2
306 '               nr vX (\\n(vLu/2u-(0.125i))u    \" Horiz off to gutter center
307 \h'|\\n(vXu'\c
308 \L'|\\n(vHu'\c
309 \h'|0u'\c
310 '\"             Move back to top of column and bump page offset to move
311 '\"             into it.
312 .               sp |\\n(vHu
313 '               po \\n(vRu
314 '\"             Put out the current function ellipsis string.
315 '               ev
316 '               v.
317 '       no\}
318 '       el \{\
319 '\"         Transition from right column to left of next page: restore
320 '\"         saved values and then output the footer.
321 '               po \\n(vOu
322 '               ll \\n(vLu
323 '               v>
324 '       no\}
325 'no\}
326 'el     'v>
328 '\"----------------
330     v>: Output page footer
331         Called from vF when in single column mode or when it hits the
332         bottom of the left column.
334 'de v>
335 'ev 2
336 'sp .35i
337 'ie '\\*(=G'' 'tl '\f2\\*(=M''Page %\fP'
338 'el           'tl '\f2\\*(=M''Page % of \\*(=G\fP'
341 'ft \\*(tP
342 'if \\n(vC=1 'ft \\*(tC
344 '\"----------------
346     (): Inter-file macro
347         Only invoked when not in filter mode.  Called between input files,
348         to reset page numbering for each.
350 'de ()
351 'pn 1
353 '\"----------------
355     +C: Start comment
357 'de +C
358 'nr vC 1
359 'ft \\*(tC
360 'ds +K
361 'ds -K
363 '\"----------------
365     -C: end comment
367 'de -C
368 'nr vC 0
369 'ft \\*(tP
370 'ds +K \\f\\*(fK
371 'ds -K \fP
373 '\"----------------
375     FN: function definition
376         Issues marginal notation giving function's name.
377         Issues the primary index entry for it.
378         Sets the =f string to record a continuation entry for it
379         (e.g., " ...func-name").
381 'de FN
382 \f2\s14\h'\\n(vKu-\w'\\$1'u'\\$1\fP\s0\h'|0u'\c
383 .if \\nx .tm \\$1 \\*(=F \\n%
384 'ds =f \&...\\$1
386 '\"----------------
388     FC: function continuation
389         Issues index entry for where the function definition picks up again.
390         Sets the =f string to record a continuation entry for it
391         (e.g., " ...func-name").
393 'de FC
394 .if \\nx .tm \\$1 \\*(=F \\n%
395 'ds =f \&...\\$1
397 '\"----------------
399     -F: function end
400         Removes definition of =f string so that the marginal entry for
401         function continuation will no longer appear.
403 'de -F
404 'rm =f
406 '\"----------------