|
|
1.1 root 1: .\" Copyright (c) 1980, 1990 The Regents of the University of California.
2: .\" Copyright (c) 1985 Sun Microsystems, Inc.
3: .\" Copyright (c) 1976 Board of Trustees of the University of Illinois.
4: .\" All rights reserved.
5: .\"
6: .\" Redistribution and use in source and binary forms are permitted provided
7: .\" that: (1) source distributions retain this entire copyright notice and
8: .\" comment, and (2) distributions including binaries display the following
9: .\" acknowledgement: ``This product includes software developed by the
10: .\" University of California, Berkeley and its contributors'' in the
11: .\" documentation or other materials provided with the distribution and in
12: .\" all advertising materials mentioning features or use of this software.
13: .\" Neither the name of the University nor the names of its contributors may
14: .\" be used to endorse or promote products derived from this software without
15: .\" specific prior written permission.
16: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
17: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
18: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19: .\"
20: .\" @(#)indent.1 6.8 (Berkeley) 7/24/90
21: .\"
22: .Dd July 24, 1990
23: .Dt INDENT 1
24: .Sh NAME
25: .Nm indent
26: .Nd indent and format C program source
27: .Sh SYNOPSIS
28: .Nm indent
29: .Op Ar input-file Op Ar output-file
30: .Cx \&[
31: .Fl bad
32: .Cx \&\ |\ \&
33: .Fl nbad
34: .Cx \&]
35: .Cx
36: .Cx \&[
37: .Fl bap
38: .Cx \&\ |\ \&
39: .Fl nbap
40: .Cx \&]
41: .Cx
42: .Cx \&[
43: .Fl bbb
44: .Cx \&\ |\ \&
45: .Fl nbbb
46: .Cx \&]
47: .Cx
48: .Cx \&[
49: .Fl bc
50: .Cx \&\ |\ \&
51: .Fl nbc
52: .Cx \&]
53: .Cx
54: .Op Fl bl
55: .Op Fl br
56: .Oo
57: .Op Fl c Ar n
58: .Op Fl cd Ar n
59: .Oo
60: .Cx \&[
61: .Fl cdb
62: .Cx \&\ |\ \&
63: .Fl ncdb
64: .Cx \&]
65: .Cx
66: .Cx \&[
67: .Fl ce
68: .Cx \&\ |\ \&
69: .Fl nce
70: .Cx \&]
71: .Cx
72: .Oo
73: .Op Fl ci Ar n
74: .Op Fl cli Ar n
75: .Op Fl d Ar n
76: .Op Fl di Ar n
77: .Oo
78: .Cx \&[
79: .Fl fc1
80: .Cx \&\ |\ \&
81: .Fl nfc1
82: .Cx \&]
83: .Cx
84: .Oo
85: .Op Fl i Ar n
86: .Oo
87: .Cx \&[
88: .Fl ip
89: .Cx \&\ |\ \&
90: .Fl nip
91: .Cx \&]
92: .Cx
93: .Oo
94: .Op Fl l Ar n
95: .Op Fl lc Ar n
96: .Oo
97: .Cx \&[
98: .Fl lp
99: .Cx \&\ |\ \&
100: .Fl nlp
101: .Cx \&]
102: .Cx
103: .Op Fl npro
104: .Cx \&[
105: .Fl pcs
106: .Cx \&\ |\ \&
107: .Fl npcs
108: .Cx \&]
109: .Cx
110: .Cx \&[
111: .Fl psl
112: .Cx \&\ |\ \&
113: .Fl npsl
114: .Cx \&]
115: .Cx
116: .Cx \&[
117: .Fl sc
118: .Cx \&\ |\ \&
119: .Fl nsc
120: .Cx \&]
121: .Cx
122: .Cx \&[
123: .Fl sob
124: .Cx \&\ |\ \&
125: .Fl nsob
126: .Cx \&]
127: .Cx
128: .Op Fl st
129: .Op Fl troff
130: .Cx \&[
131: .Fl v
132: .Cx \&\ |\ \&
133: .Fl nv
134: .Cx \&]
135: .Cx
136: .Sh DESCRIPTION
137: .Nm Indent
138: is a
139: .Ar C
140: program formatter. It reformats the
141: .Ar C
142: program in the
143: .Ar input-file
144: according to the switches. The switches which can be
145: specified are described below. They may appear before or after the file
146: names.
147: .Pp
148: .Sy NOTE :
149: If you only specify an
150: .Ar input-file ,
151: the formatting is
152: done `in-place', that is, the formatted file is written back into
153: .Ar input-file
154: and a backup copy of
155: .Ar input-file
156: is written in the current directory. If
157: .Ar input-file
158: is named
159: .Sq Pa /blah/blah/file ,
160: the backup file is named
161: .Pa file.BAK .
162: .Pp
163: If
164: .Ar output-file
165: is specified,
166: .Nm indent
167: checks to make sure it is different from
168: .Ar input-file .
169: .Pp
170: The options listed below control the formatting style imposed by
171: .Nm indent .
172: .Tw Op
173: .Tp Fl bad , nbad
174: If
175: .Fl bad
176: is specified, a blank line is forced after every block of
177: declarations. Default:
178: .Fl nbad .
179: .Tp Fl bap , nbap
180: If
181: .Fl bap
182: is specified, a blank line is forced after every procedure body. Default:
183: .Fl nbap .
184: .Tp Fl bbb , nbbb
185: If
186: .Fl bbb
187: is specified, a blank line is forced before every block comment. Default:
188: .Fl nbbb .
189: .Tp Fl bc , nbc
190: If
191: .Fl bc
192: is specified, then a newline is forced after each comma in a declaration.
193: .Fl nbc
194: turns off this option. The default is
195: .Fl bc .
196: .Tp Fl br , bl
197: Specifying
198: .Fl bl
199: lines up compound statements like this:
200: .ne 4
201: .Ds I
202: if (...)
203: {
204: code
205: }
206: .De
207: Specifying
208: .Fl br
209: (the default) makes them look like this:
210: .ne 3
211: .Ds I
212: if (...) {
213: code
214: }
215: .De
216: .Pp
217: .Tp Fl c n
218: The column in which comments on code start. The default is 33.
219: .Tp Fl cd n
220: The column in which comments on declarations start. The default
221: is for these comments to start in the same column as those on code.
222: .Tp Fl cdb , ncdb
223: Enables (disables) the placement of comment delimiters on blank lines. With
224: this option enabled, comments look like this:
225: .Ds I
226: .ne 3
227: /*
228: * this is a comment
229: */
230: .De
231: Rather than like this:
232: .Ds I
233: /* this is a comment */
234: .De
235: This only affects block comments, not comments to the right of
236: code. The default is
237: .Fl cdb .
238: .Tp Fl ce , nce
239: Enables (disables) forcing `else's to cuddle up to the immediately preceding
240: `}'. The default is
241: .Fl ce .
242: .Tp Cx Fl ci
243: .Ar n
244: .Cx
245: Sets the continuation indent to be
246: .Ar n .
247: Continuation
248: lines will be indented that far from the beginning of the first line of the
249: statement. Parenthesized expressions have extra indentation added to
250: indicate the nesting, unless
251: .Fl lp
252: is in effect.
253: .Fl ci
254: defaults to the same value as
255: .Fl i .
256: .Tp Cx Fl cli
257: .Ar n
258: .Cx
259: Causes case labels to be indented
260: .Ar n
261: tab stops to the right of the containing
262: .Ic switch
263: statement.
264: .Fl cli0 .5
265: causes case labels to be indented half a tab stop. The
266: default is
267: .Fl cli0 .
268: .Tp Cx Fl d
269: .Ar n
270: .Cx
271: Controls the placement of comments which are not to the
272: right of code. The default
273: .Fl d1
274: means that such comments are placed one indentation level to the
275: left of code. Specifying
276: .Fl d0
277: lines up these comments with the code. See the section on comment
278: indentation below.
279: .Tp Cx Fl di
280: .Ar n
281: .Cx
282: Specifies the indentation, in character positions, from a declaration keyword
283: to the following identifier. The default is
284: .Fl di16 .
285: .Tp Fl dj , ndj
286: .Fl dj
287: left justifies declarations.
288: .Fl ndj
289: indents declarations the same as code. The default is
290: .Fl ndj .
291: .Tp Fl ei , nei
292: Enables (disables) special
293: .Ic else-if
294: processing. If it's enabled, an
295: .Ic if
296: following an
297: .Ic else
298: will have the same indentation as the preceding
299: .Ic if
300: statement.
301: .Tp Fl fc1 , nfc1
302: Enables (disables) the formatting of comments that start in column 1.
303: Often, comments whose leading `/' is in column 1 have been carefully
304: hand formatted by the programmer. In such cases,
305: .Fl nfc1
306: should be
307: used. The default is
308: .Fl fc1 .
309: .Tp Cx Fl i
310: .Ar n
311: .Cx
312: The number of spaces for one indentation level. The default is 4.
313: .Tp Fl ip , nip
314: Enables (disables) the indentation of parameter declarations from the left
315: margin. The default is
316: .Fl ip .
317: .Tp Cx Fl l
318: .Ar n
319: .Cx
320: Maximum length of an output line. The default is 75.
321: .Tp Fl lp , nlp
322: Lines up code surrounded by parenthesis in continuation lines. If a line
323: has a left paren which is not closed on that line, then continuation lines
324: will be lined up to start at the character position just after the left
325: paren. For example, here is how a piece of continued code looks with
326: .Fl nlp
327: in effect:
328: .ne 2
329: .Ds I
330: .Li p1 = first_procedure(second_procedure(p2, p3),
331: .Li \ \ third_procedure(p4,p5));
332: .De
333: .ne 5
334: With
335: .Fl lp
336: in effect (the default) the code looks somewhat clearer:
337: .Ds I
338: .Li p1\ =\ first_procedure(second_procedure(p2,\ p3),
339: .Li \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ third_procedure(p4,p5));
340: .De
341: .ne 5
342: Inserting two more newlines we get:
343: .Ds I
344: .Li p1\ =\ first_procedure(second_procedure(p2,
345: .Li \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ p3),
346: .Li \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ third_procedure(p4
347: .Li \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ p5));
348: .De
349: .Pp
350: .Tp Fl npro
351: Causes the profile files,
352: .Sq Pa ./.indent.pro
353: and
354: .Sq Pa ~/.indent.pro ,
355: to be ignored.
356: .Tp Fl pcs , npcs
357: If true
358: .Pq Fl pcs
359: all procedure calls will have a space inserted between
360: the name and the `('. The default is
361: .Fl npcs .
362: .Tp Fl psl , npsl
363: If true
364: .Pq Fl psl
365: the names of procedures being defined are placed in
366: column 1 \- their types, if any, will be left on the previous lines. The
367: default is
368: .Fl psl .
369: .Tp Fl sc , nsc
370: Enables (disables) the placement of asterisks (`*'s) at the left edge of all
371: comments.
372: .Tp Fl sob , nsob
373: If
374: .Fl sob
375: is specified, indent will swallow optional blank lines. You can use this to
376: get rid of blank lines after declarations. Default:
377: .Fl nsob .
378: .Tp Fl st
379: Causes
380: .Nm indent
381: to take its input from stdin, and put its output to stdout.
382: .Tp Cx Fl T
383: .Ar typename
384: .Cx
385: Adds
386: .Ar typename
387: to the list of type keywords. Names accumulate:
388: .Fl T
389: can be specified more than once. You need to specify all the typenames that
390: appear in your program that are defined by
391: .Ic typedef
392: \- nothing will be
393: harmed if you miss a few, but the program won't be formatted as nicely as
394: it should. This sounds like a painful thing to have to do, but it's really
395: a symptom of a problem in C:
396: .Ic typedef
397: causes a syntactic change in the
398: language and
399: .Nm indent
400: can't find all
401: instances of
402: .Ic typedef .
403: .Tp Fl troff
404: Causes
405: .Nm indent
406: to format the program for processing by troff. It will produce a fancy
407: listing in much the same spirit as
408: .Xr vgrind 1 .
409: If the output file is not specified, the default is standard output,
410: rather than formatting in place.
411: .Tp Fl v , nv
412: .Fl v
413: turns on `verbose' mode;
414: .Fl nv
415: turns it off. When in verbose mode,
416: .Nm indent
417: reports when it splits one line of input into two or more lines of output,
418: and gives some size statistics at completion. The default is
419: .Fl nv .
420: .Tp
421: .Pp
422: You may set up your own `profile' of defaults to
423: .Nm indent
424: by creating a file called
425: .Pa .indent.pro
426: in your login directory and/or the current directory and including
427: whatever switches you like. A `.indent.pro' in the current directory takes
428: precedence over the one in your login directory. If
429: .Nm indent
430: is run and a profile file exists, then it is read to set up the program's
431: defaults. Switches on the command line, though, always override profile
432: switches. The switches should be separated by spaces, tabs or newlines.
433: .Pp
434: .Ss Comments
435: .Sq Em Box
436: .Em comments .
437: .Nm Indent
438: assumes that any comment with a dash or star immediately after the start of
439: comment (that is, `/*\-' or `/**') is a comment surrounded by a box of stars.
440: Each line of such a comment is left unchanged, except that its indentation
441: may be adjusted to account for the change in indentation of the first line
442: of the comment.
443: .Pp
444: .Em Straight text .
445: All other comments are treated as straight text.
446: .Nm Indent
447: fits as many words (separated by blanks, tabs, or newlines) on a
448: line as possible. Blank lines break paragraphs.
449: .Pp
450: .Ss Comment indentation
451: If a comment is on a line with code it is started in the `comment column',
452: which is set by the
453: .Cx Fl c
454: .Ar n
455: .Cx
456: command line parameter. Otherwise, the comment is started at
457: .Ar n
458: indentation levels less than where code is currently being placed, where
459: .Ar n
460: is specified by the
461: .Cx Fl d
462: .Ar n
463: .Cx
464: command line parameter. If the code on a line extends past the comment
465: column, the comment starts further to the right, and the right margin may be
466: automatically extended in extreme cases.
467: .Pp
468: .Ss Preprocessor lines
469: In general,
470: .Nm indent
471: leaves preprocessor lines alone. The only
472: reformatting that it will do is to straighten up trailing comments. It
473: leaves embedded comments alone. Conditional compilation
474: .Pq Ic #ifdef...#endif
475: is recognized and
476: .Nm indent
477: attempts to correctly
478: compensate for the syntactic peculiarities introduced.
479: .Pp
480: .Ss C syntax
481: .Nm Indent
482: understands a substantial amount about the syntax of C, but it
483: has a `forgiving' parser. It attempts to cope with the usual sorts of
484: incomplete and misformed syntax. In particular, the use of macros like:
485: .Dl #define forever for(;;)
486: is handled properly.
487: .Sh ENVIRONMENT
488: .Nm Indent
489: uses the
490: .Ev HOME
491: environment variable.
492: .Sh FILES
493: .Dw \&./.indent.pro
494: .Di L
495: .Dp Pa \&./.indent.pro
496: profile file
497: .Dp Pa ~/.indent.pro
498: profile file
499: .Dp
500: .Sh HISTORY
501: .Nm Indent
502: appeared in 4.2 BSD.
503: .Sh BUGS
504: .Nm Indent
505: has even more switches than
506: .Xr ls 1 .
507: .Pp
508: .ne 5
509: A common mistake that often causes grief is typing:
510: .Dl indent *.c
511: to the shell in an attempt to indent all the
512: .Nm C
513: programs in a directory.
514: This is probably a bug, not a feature.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.