indent(9)
Command: indent - reformat the layout of a program
Syntax: indent in_file [out_file] [options]
Flags: (many)
Examples: indent -br -c25 prog.c # Indent prog.c
indent -npcs prog.c newprog.c # Put output on newprog.c
Indent reads a C program in, rearranges the layout, and outputs a
new C program that will compile to the same executable binary as the
original one. The difference between the input and output is that the
output is in a standard layout determined by a large number of options.
For most of the options there are two choices, one that enables it and
one that disables it.
If indent is called with no file files, it operates as a filter.
If called with one file name, that file is reformatted and the result
replaces the original file. A backup is created, however, with the
suffix .BAK. If it is called with two file names, the first one is the
input file and the second one is the output file. Only one file can be
reformatted at a time (e.g., one cannot call indent with *.c as
argument; this is an error and will not work.).
Options
Many options are available. If you want to format a program to the
'official' MINIX format, use pretty, which calls indent with the proper
options and then postprocesses the output. The options listed below
control the formatting style.
OPTION: -bad, -nbad
If -bad is specified, a blank line is forced after every block of
declarations. Default: -nbad.
OPTION: -bap, -nbap
If -bap is specified, a blank line is forced after every procedure
body. Default: -nbap.
OPTION: -bbb, -nbbb
If -bbb is specified, a blank line is forced before every block
comment. Default: -nbbb.
OPTION: -bc, -nbc
If -bc is specified, then a newline is forced after each comma in a
declaration. -nbc turns off this option. The default is -nbc.
OPTION: -bl, -br
Specifying -bl lines up compound statements like this:
if (...)
{
code
}
Specifying -br (the default) makes them look like this:
if (...) {
code
}
OPTION: -cn
The column in which comments on code start. The default is 33.
OPTION: -cdn
The column in which comments on declarations start. The default is
for these comments to start in the same column as those on code.
OPTION: -cdb, -ncdb
Enables (disables) the placement of comment delimiters on blank
lines. With this option enabled, comments look like this:
/*
* this is a comment
*/
Rather than like this:
/* this is a comment */
This only affects block comments, not comments to the right of code. The
default is -cdb.
OPTION: -ce, -nce
Enables (disables) forcing 'else's to cuddle up to the immediately
preceding '}'. The default is -ce.
OPTION: -cin
Sets the continuation indent to be n. Continuation lines will be
indented that far from the beginning of the first line of the statement.
Parenthesized expressions have extra indentation added to indicate the
nesting, unless -lp is in effect. -ci defaults to the same value as -i.
OPTION: -clin
Causes case labels to be indented n tab stops to the right of the
containing switch statement. -cli0.5 causes case labels to be indented
half a tab stop. The default is -cli0. (This is the only option that
takes a fractional argument.)
OPTION: -dn
Controls the placement of comments which are not to the right of
code. Specifying -d1 means that such comments are placed one
indentation level to the left of code. The default -d0 lines up these
comments with the code. See the section on comment indentation below.
OPTION: -din
Specifies the indentation, in character positions, from a
declaration keyword to the following identifier. The default is -di16.
OPTION: -dj, -ndj
-dj left justifies declarations. -ndj indents declarations the
same as code. The default is -ndj.
OPTION: -ei, -nei
Enables (disables) special else-if processing. If enabled, ifs
following elses will have the same indentation as the preceding if
statement. The default is -ei.
OPTION: -fc1, -nfc1
Enables (disables) the formatting of comments that start in column
1. Often, comments whose leading '/' is in column 1 have been carefully
hand formatted by the programmer. In such cases, -nfc1 should be used.
The default is -fc1.
OPTION: -in
The number of spaces for one indentation level. The default is 8.
OPTION: -ip, -nip
Enables (disables) the indentation of parameter declarations from
the left margin. The default is -ip.
OPTION: -ln
Maximum length of an output line. The default is 78.
OPTION: -lp, -nlp
Lines up code surrounded by parenthesis in continuation lines. If
a line has a left paren which is not closed on that line, then
continuation lines will be lined up to start at the character position
just after the left paren.
OPTION: -npro
Causes the profile files, .indent.pro in both the current directory
and the user's home directory to be ignored.
OPTION: -pcs, -npcs
If true (-pcs) all procedure calls will have a space inserted
between the name and the '('. The default is -npcs.
OPTION: -ps, -nps
If true (-ps) the pointer following operator '->' will be
surrounded by spaces on either side. The default is -nps.
OPTION: -psl, -npsl
If true (-psl) the names of procedures being defined are placed in
column 1 - their types, if any, will be left on the previous lines. The
default is -psl.
OPTION: -sc, -nsc
Enables (disables) the placement of asterisks (*) at the left edge
of all comments. The default is -sc.
OPTION: -sob, -nsob
If -sob is specified, indent will swallow optional blank lines.
You can use this to get rid of blank lines after declarations. The
default is -nsob.
OPTION: -st
Causes indent to take its input from stdin, and put its output to
stdout.
OPTION: -Ttypename
Adds typename to the list of type keywords. Names accumulate: -T
can be specified more than once. You need to specify all the typenames
that appear in your program that are defined by #typedefs. Nothing will
be harmed if you miss a few, but the program will not be formatted as
nicely as it should. This sounds like a painful thing to have to do,
but it is really a symptom of a problem in C: typedef causes a syntactic
change in the language and indent cannot find all typedefs.
OPTION: -troff
Causes indent to format the program for processing by troff. It
will produce a fancy listing in much the same spirit as vgrind. If the
output file is not specified, the default is standard output, rather
than formatting in place.
OPTION: -v, -nv
The -v flag turns on verbose mode; -nv turns it off. When in
verbose mode, indent reports when it splits one line of input into two
or more lines of output, and gives some size statistics at completion.
The default is -nv.
User Profiles
You may set up your own profile of defaults to indent by creating a
file called .indent.pro in either your login directory and/or the
current directory and including whatever switches you like. Switches in
.indent.pro in the current directory override those in your login
directory (with the exception of -T type definitions, which just
accumulate). If indent is run and a profile file exists, then it is read
to set up the program's defaults. The switches should be separated by
spaces, tabs or newlines. Switches on the command line, however,
override profile switches.
Comments
Indent assumes that any comment with a dash or star immediately
after the start of comment (that is, '/*-' or '/**') is a comment
surrounded by a box of stars. Each line of such a comment is left
unchanged, except that its indentation may be adjusted to account for
the change in indentation of the first line of the comment.
All other comments are treated as straight text. Indent fits as
many words (separated by blanks, tabs, or newlines) on a line as
possible. Blank lines break paragraphs.
If a comment is on a line with code it is started in the comment
column, which is set by the -cn command line parameter. Otherwise, the
comment is started at n indentation levels less than where code is
currently being placed, where n is specified by the -dn command line
parameter. If the code on a line extends past the comment column, the
comment starts further to the right, and the right margin may be
automatically extended in extreme cases.
Preprocessor Lines
In general, indent leaves preprocessor lines alone. The only
reformatting that it will do is to straighten up trailing comments. It
leaves embedded comments alone. Conditional compilation
(#ifdef...#endif) is recognized and indent attempts to correctly
compensate for the syntactic peculiarities introduced.
C Syntax
Indent understands a substantial amount about the syntax of C, but
it has a forgiving parser. It attempts to cope with the usual sorts of
incomplete and misformed syntax. In particular, the use of macros like:
#define forever for(;;)
is handled properly.