utzoo!decvax!cca!hplabs!hao!menlo70!sytek!zehntel!teklabs!azure!stevenm at sri-unix utzoo!decvax!cca!hplabs!hao!menlo70!sytek!zehntel!teklabs!azure!stevenm at sri-unix
Mon Oct 25 21:39:32 AEST 1982

Alan's humor certainly puts the argument in perspective. On a more serious
tone, however, I should note to the net that my query of a year or more ago
was answered. The University of Illinois 'indent' program (this is the
same program that is distributed with EMACS, by the way) - has been
updated for V7 C. The program is not perfect - it stills barfs if you put
spaces after your preprocessor '#' signs, and it has a few other problems
which escape my mempory currently. All things considered, however, it is
an extremely useful tool. Coupled with:

	1) a locally written program which moves comments around;
	2) a tool which someone wrote which fixes Bourne-style ALGOL-isms; and 
	3) a simple tool which I wrote which expands and contracts tabstops 

These tools allow me to take an arbitrarily formatted C program and format
it the way that I want it. 'Indent' has options for both of the prevelent
styles of C brace placement, and a slew of other options. I am including
the manual page at the bottom of this note.

Now the sticker. I got this program from someone at the University of
Illinois. All you net news readers out there can do one of two things:

	1) Wait until I ask the person that I got it from whether it
	is OK to redistribute it; or

	2) Sit on your thumb.

PLEASE! Do not send me mail asking me for a copy. Simply 'watch this space'.
At some point in the future I either will or will not post the sources
to 'net.sources'.

S. McGeady
Tektronix, Inc.


INDENT(1T)	    UNIX Programmer's Manual	       INDENT(1T)

     indent - indent and format	a C program source

     indent ifile [ ofile ] [ args ]

     The arguments that	can be specified follows. They may appear
     before or after the file names.

     ifile     Input file specification.

     ofile     Output file specification.
	       If omitted, then	the indented formatted file will
	       be written back into the	input file, and	there
	       will be a "back-up" copy	of ifile written in the
	       current directory.  For an ifile	named
	       "/blah/blah/file", the backup file will be named
	       ".Bfile". (It will only be listed when the `-a'
	       argument	is specified in	ls.) If	ofile is speci-
	       fied, indent checks to make sure	it is different
	       from ifile.

     -lnnn     Maximum length of an output line.  The default is

     -cnnn     The column in which comments will start.	 The
	       default is 33.

     -cdnnn    The column in which comments on declarations will
	       start.  The default is for these	comments to start
	       in the same column as other comments.

     -innn     The number of spaces for	one indentation	level.
	       The default is 4.

     -dj,-ndj  -dj will	cause declarations to be left justified.
	       -ndj will cause them to be indented the same as
	       code.  The default is -ndj.

     -v,-nv    -v turns	on "verbose" mode, -nv turns it	off.
	       When in verbose mode, indent will report	when it
	       splits one line of input	into two or more lines of
	       output, and it will give	some size statistics at
	       completion.  The	default	is -nv.

     -bc,-nbc  If -bc is specified, then a newline will	be forced
	       after each comma	in a declaration.  -nbc	will turn
	       off this	option.	 The default is	-bc.

     -dnnn     This option controls the	placement of comments

Printed	5/1/82		  5/1/82 Local				1

INDENT(1T)	    UNIX Programmer's Manual	       INDENT(1T)

	       which are not to	the right of code.  Specifying
	       -d2 means that such comments will be placed two
	       indentation levels to the left of code.	The
	       default -d0 lines up these comments with	the code.
	       See the section on comment indentation below.

     -br,-bl   Specifying -bl will cause complex statements to be
	       lined up	like this:
		   if (...)
	       Specifying -br (the default) will make them look
	       like this:
		   if (...) {

     You may set up your own `profile' of defaults to indent by
     creating the file `$HOME/' (where $HOME	is your
     home directory) and including whatever switches you like.
     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 will always over-ride	profile	switches.  The profile
     file must be a single line	of not more than 127 characters.
     The switches should be seperated on the line by spaces or

     Indent is intended	primarily as a C program indenter.
     Specifically, indent will:

	> indent code lines

	> align	comments

	> insert spaces	around operators where necessary

	> break	up declaration lists as	in "int	a,b,c;".

     It	will not break up long statements to make them fit within
     the maximum line length, but it will flag lines that are too
     long.  Lines will be broken so that each statement	starts a
     new line, and braces will appear alone on a line.	(See the
     -br option	to inhibit this.) Also,	an attempt is made to
     line up identifiers in declarations.

     Multi-line	expressions
     Indent will not break up complicated expressions that extend
     over multiple lines, but it will usually correctly	indent
     such expressions which have already been broken up.  Such an

Printed	5/1/82		  5/1/82 Local				2

INDENT(1T)	    UNIX Programmer's Manual	       INDENT(1T)

     expression	might end up looking like this:
	 x =
		     (Arbitrary	parenthesized expression)
			 (Parenthesized	expression)
			 (Parenthesized	expression)

     Indent recognizes four kinds of comments.	They are straight
     text, "box" comments, UNIX-style comments,	and comments that
     should be passed thru unchanged.  The action taken	with
     these various types is as follows:

	"Box" comments:	The DSG	documentation standards	specify
     that boxes	will be	placed around section headers.	Indent
     assumes that any comment with a dash immediately after the
     start of comment (i.e. "/*-") is such a box.  Each	line of
     such a comment will be left unchanged, except that	the first
     non-blank character of each successive line will be lined up
     with the beginning	slash of the first line.  Box comments
     will be indented (see below).

	Unix-style comments:  This is the type of section header
     which is used extensively in the UNIX system source.  If the
     start of comment ('/*') appears on	a line by itself, indent
     assumes that it is	a UNIX-style comment.  These will be
     treated similarly to box comments,	except the first non-
     blank character on	each line will be lined	up with	the '*'
     of	the '/*'.

	Unchanged comments: Any	comment	which starts in	column 1
     will be left completely unchanged.	 This is intended pri-
     marily for	documentation header pages.  The check for
     unchanged comments	is made	before the check for UNIX-style

	Straight text: All other comments are treated as straight
     text.  Indent will	fit as many words (separated by	blanks,
     tabs, or newlines)	on a line as possible.	Straight text
     comments will be indented.

     Comment indentation Box, UNIX-style, and straight text com-
     ments may be indented.  If	a comment is on	a line with code
     it	will be	started	in the "comment	column", which is set by
     the -cnnn command line parameter.	Otherwise, the comment
     will be started at	nnn indentation	levels less than where

Printed	5/1/82		  5/1/82 Local				3

INDENT(1T)	    UNIX Programmer's Manual	       INDENT(1T)

     code is currently being placed, where nnn is specified by
     the -dnnn command line parameter.	(Indented comments will
     never be placed in	column 1.) If the code on a line extends
     past the comment column, the comment will be moved	to the
     next line.

     Diagnostic	error messsages, mostly	to tell	that a text line
     has been broken or	is too long for	the output line, will be
     printed on	the controlling	tty.

     $HOME/ - profile file

More information about the Comp.lang.c mailing list