Man Page indent.1




NAME

     indent - indent and format	a C program source file


SYNOPSIS

     indent input-file [ output-file ] [ [ -bap	| -nbap	]
     [ -bacc | -nbacc ]	[ -bad | -nbad ] [ -bbb	| -nbbb	]
     [ -bc | -nbc ] [ -bl ] [ -br ] [ -bs | -nbs ] [ -cn ]
     [ -cdn ] [	-cdb | -ncdb ] [ -ce | -nce ] [	-cin ]	[ -clin	]
     [ -dn ] [ -din ] [	-dj | -ndj ] [ -eei | -neei ]
     [ -ei | -nei ] [ -fc1 | -nfc1 ] [ -in ] [ -ip | -nip ]
     [ -ln ] [ -lcn ] [	-lp | -nlp ]  [	-pcs | -npcs ]	[ -npro	]
     [ -psl | -npsl ] [	-sc | -nsc ] [ -sob | -nsob ] [	-st ]
     [ -T typename ] [ -troff ]	[ -v | -nv ]


DESCRIPTION

     indent is a C program formatter.  It reformats the	C program
     in	 the  input-file according to the switches.  The switches
     which can be specified are	described below.  They may appear
     before or after the file names.

     Note: if you only specify an input-file, the  formatting  is
     done "in-place", that is, the formatted file is written back
     into input-file and a backup copy of input-file  is  written
     in	  the	current	  directory.	If  input-file	is  named
     /blah/blah/file, the backup file is named file.BAK.

     If	output-file is specified, indent checks	to make	 sure  it
     is	different from input-file.


OPTIONS

     The  options  listed  below  control  the	formatting  style
     imposed by	indent.

     -bacc,-nbacc
	       If -bacc	is specified,  a  blank	 line  is  forced
	       around  every  conditional compilation block.  For
	       example,	in front of every #ifdef and after  every
	       #endif.	 Other blank lines surrounding these will
	       be swallowed.  Default: -nbacc.

     -bad,-nbad
	       If -bad is specified, a blank line is forced after
	       every block of declarations.  Default: -nbad.

     -bap,-nbap
	       If -bap is specified, a blank line is forced after
	       every procedure body.  Default:	-nbap.

     -bbb,-nbbb
	       If -bbb is  specified,  a  blank	 line  is  forced
	       before every block comment.  Default:  -nbbb.

     -bc,-nbc  If -bc is specified,  then  a  NEWLINE  is  forced
	       after each comma	in a declaration.  -nbc	turns off
	       this option.  Default: -bc.

     -br,-bl   Specifying -bl lines up compound	 statements  like
	       this:
		    if (...)
		    {
				   code
		    }

	       Specifying -br (the default) makes them look  like
	       this:
		    if (...) {
				   code
		    }

     -bs,-nbs
	  Enable (disable) the forcing of a blank  after  sizeof.
	  Some people believe that sizeof should appear	as though
	  it were a procedure call (-nbs, the default)	and  some
	  people  believe  that	 since	sizeof is an operator, it
	  should always	be treated that	 way  and  should  always
	  have a blank after it.

     -cn  The column in	which comments on code start.
	   Default:  -c33.

     -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.

     -cdb,-ncdb
	  Enable (disable) 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. Default:	-cdb.

     -ce,-nce
	  Enables (disables) forcing else's to cuddle up  to  the
	  immediately preceding	`}'.  Default:	-ce.

     -cin Sets the continuation	indent to  be  the  value  of  n.

	  Continuation lines will be indented the value	of n 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.

     -clin
	  Cause	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.
	  Default:  -cli0.

     -dn  Control the placement	of comments which are not to  the
	  right	 of  code. Default:  -d1 means that such comments
	  are placed one indentation level to the left	of  code.
	  Specifying  -d0  lines up these comments with	the code.
	  See the section on comment indentation below.

     -din Specify the indentation, in character	positions, from	a
	  declaration	keyword	  to  the  following  identifier.
	  Default:  -di16.

     -dj,-ndj
	  -dj left justifies declarations.  -ndj indents declara-
	  tions	the same as code.  Default:  -ndj.

     -ei,-nei
	  If -ei is enabled, ifs following elses  will	have  the
	  same	indentation  as	the preceding if statement. If it
	  is disabled, ifs following elses will	be  indented  one
	  extra	level. Default:	 -ei.

     -eei,-neei
	  If -eei is specified,	an  extra  expression  indent  is
	  applied on continuation lines	of the expression part of
	  if() and while().  These  continuation  lines	 will  be
	  indented  one	extra level - twice instead of just once.
	  This is to avoid the confusion  between  the	continued
	  expression  and  the statement that follows the if() or
	  while().  Default: -neei.

     -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.
	  Default:  -fc1.

     -in  The number of	spaces for  one	 indentation  level.  The
	  default is one tab stop, -i8.

     -ip,-nip

	  Enables  (disables)  the   indentation   of	parameter
	  declarations from the	left margin.  Default:	-ip .

     -ln  Maximum length of an output line with	a  trailing  com-
	  ment.	 Default:  -l78.

     -lcn Sets the line	length	for  block  comments  to  n.   It
	  defaults  to being the same as the usual line	length as
	  specified with -l.

     -lp,-nlp
	  Lines	up code	surrounded by parenthesis in continuation
	  lines.   If  a line has a left parenthesis which is not
	  closed on that line, then continuation  lines	 will  be
	  lined	 up to start at	the character position just after
	  the left parenthesis.	 For example, here is how a piece
	  of continued code looks with -nlp in effect:
	       p1 = first_procedure(second_procedure(p2, p3),
			      third_procedure(p4, p5));

	  With -lp in effect (the default) the code  looks  some-
	  what clearer:
	       p1 = first_procedure(second_procedure(p2, p3),
				      third_procedure(p4, p5));

	  Inserting a couple more NEWLINE characters we	get:
	       p1 = first_procedure(second_procedure(p2,
						  p3),
				      third_procedure(p4,
						p5));

	  This example was generated with -lp.

     -npro
	  Ignore   the	 profile   files,    ./.indent.pro    and
	  ~/.indent.pro.

     -pcs , -npcs
	  If true (-pcs) all procedure calls and declarations  in
	  the  source code will	have a space inserted between the
	  name and the '('.  Default:  -npcs

     -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. Default:	-psl.

     -sc,-nsc
	  Enables (disables) the placement of asterisks	(`*'s) at
	  the left edge	of all comments. Default:  -sc.

     -sob,-nsob

	  If -sob is  specified,  indent  will	swallow	 optional
	  blank	 lines.	  You  can  use	 this to get rid of blank
	  lines	after declarations.  Default:  -nsob.

     -st  indent takes its input from the standard input, and put
	  its output to	the standard output.

     -T	typename
	  Add typename to the list of type keywords.  Names accu-
	  mulate:   -T can be specified	more than once.	 You need
	  to specify all the typenames that appear in  your  pro-
	  gram	that  are  defined  by typedefs	- nothing will be
	  harmed if you	miss a few, but	the program won't be for-
	  matted  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.

     -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.	The usual way to  get  a  troffed
	  listing is with the command

	       indent -troff program.c | troff -mindent

     -v,-nv
	  -v 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. Default:  -nv.


USAGE

     You may set up your own "profile" of defaults to  indent  by
     creating  a  file	called	.indent.pro  in	either your login
     directory or the current directory	 and  including	 whatever
     switches  you like.  An .indent.pro in the	current	directory
     takes precedence over the one in your login  directory.   If
     indent  is	run and	a profile file exists, then it is read to
     set up the	program's  defaults.   Switches	 on  the  command
     line,   though,   always  override	 profile  switches.   The
     switches should be	separated by SPACE, TAB, or NEWLINE char-
     acters.

  Comments
     Boxed	    indent assumes that	any comment with  a  dash
		    or	star  immediately after	the start of com-
		    ment (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.

     Straight text  All	other comments are  treated  as	 straight
		    text.   indent  fits as many words (separated
		    by SPACE, TAB, or NEWLINE  characters)  on	a
		    line  as  possible.	  Blank	lines break para-
		    graphs.

  Comment indentation
     If	a comment is on	a line with code it  is	 started  in  the
     comment column, which is set by the -cn command line parame-
     ter.  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 trail-
     ing comments.  It leaves imbedded	comments  alone.   Condi-
     tional   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.

  /*INDENT OFF*/ /*INDENT ON*/
     All text between these two	comments gets left alone.  There-
     fore,  when  you  put source code between these comments, it
     will not be affected by the reformatting.


FILES

     ./.indent.pro	 profile file
     ~/.indent.pro	 profile file

SEE ALSO

     troff(1)

BUGS

     A common mistake that often causes	grief is typing:
	  indent *.c

     to	the shell in an	attempt	to indent all the C programs in	a
     directory.