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