Expand PMF_FN_* macros.
[netbsd-mini2440.git] / external / ibm-public / postfix / dist / mantools / ccformat
blob3573a6dc8f32c5ef52dcc52c52ce0bc8b5390962
1 #!/bin/sh
3 # ccformat - convert C code to standard format
5 # @(#) ccformat.sh 1.3 11/5/89 14:39:29
7 # how to supress newlines in echo
9 case `echo -n` in
10 "") n=-n; c=;;
11 *) n=; c='\c';;
12 esac
14 # initialize
16 TMPF=/tmp/ccformat.$$
17 ERROR=
18 TROFF=
19 BCK=
20 FLAGS="-st -di8 -npsl -bap -bad -bbb -nbc -i4 -d0 -nip -nfc1 -cd41 -c49"
22 trap 'rm -f .ind.$$ $TMPF; exit 1' 1 2 3 15
24 # parse command options
26 while :
28 case $1 in
29 -t) TROFF=-troff;;
30 -b) case $# in
31 1) ERROR="-b option requires backup argument"; break;;
32 *) BCK=$2; shift;;
33 esac;;
34 -T) case $# in
35 1) ERROR="-T option requires typename argument"; break;;
36 *) FLAGS="$FLAGS -T$2"; shift;;
37 esac;;
38 -*) ERROR="invalid option: $1"; break;;
39 *) break;;
40 esac
41 shift
42 done
44 # check for invalid commands
46 test -z "$ERROR" || {
47 echo "$0: $ERROR" 1>&2
48 echo "usage: $0 [-b backup] [-t] [-T typename] [file(s)]" 1>&2
49 exit 1; }
51 # format the files
53 case $# in
54 0) indent $TROFF $FLAGS;;
55 *) case "$TROFF" in
56 -troff) for i in $*
58 indent $TROFF $FLAGS $i
59 done;;
60 *) for i in $*
61 do
62 echo $n $i... $c
63 test -z "$BCK" || cp $i $i"$BCK" || { echo backup FAILED; exit 1; }
64 { # some versions of indent return garbage exit status -- gack!
65 (indent $FLAGS <$i 2>.ind.$$ >$TMPF || test ! -s .ind.$$) >$TMPF &&
66 # try a device full check
67 echo >>$TMPF && (
68 # ignore interrupts while we overwrite the original file
69 trap '' 1 2 3 15; cp $TMPF $i
70 ) && echo replaced; } || { echo replacement FAILED; exit 1; }
71 done;;
72 esac;;
73 esac
75 rm -f $TMPF .ind.$$
77 exit
79 #++
80 # NAME
81 # ccformat 1
82 # SUMMARY
83 # convert C source text to standard format
84 # PROJECT
85 # sdetools
86 # SYNOPSIS
87 # ccformat [-b backup] [-t] [-T typename] [file(s)]
88 # DESCRIPTION
89 # The \fIccformat\fR command adjusts the layout of C program text
90 # such that it approximates the Kernighan and Ritchie coding style.
92 # If no file names are specified, \fIccformat\fR reads
93 # from standard input and writes the result to standard output.
94 # This is convenient for source formatting from within a text
95 # editor program.
97 # Otherwise, the named files are overwritten with their
98 # formatted equivalent. The \fI-b\fR option (see below) provides
99 # a way to create backup copies of the original files.
101 # Alternatively, the command can be used as a preprocessor for
102 # pretty-printing with the \fInroff\fR or \fItroff\fR commands
103 # (see the -t option below). In this case, output is always written
104 # to standard output and no change is made to source files.
106 # The following options are recognized:
107 # .TP
108 # -b backup
109 # Requests that a copy of the original files be saved. The backup
110 # file name is constructed by appending the specified \fIbackup\fR
111 # string to the original file name.
112 # This option is ignored when the \fI-t\fR
113 # option is specifid.
114 # .TP
115 # -t
116 # Makes the program act as a preprocessor
117 # for pretty-printing with \fInroff\fR or \fItroff\fR.
118 # For example, in order to produce a pretty-printed
119 # version on the line printer, use
121 ccformat -t file(s) | nroff -mindent | col | lp
122 # .TP
123 # -T typename
124 # Adds \fItypename\fR to the list of type keywords.
125 # Names accumulate: -T can be specified more
126 # than once. You need to specify all the
127 # typenames that appear in your program that
128 # are defined by typedefs - nothing will be
129 # harmed if you miss a few, but the program
130 # won't be formatted as nicely as it should.
131 # PROGRAM LAYOUT
132 # .fi
133 # .ad
134 # The following program layout is produced:
135 # .TP
136 # comments
137 # Comments starting in the first column are left untouched.
138 # These are often carefully laid out by the programmer.
139 # .sp
140 # Comments that appear in-between statements are lined up with
141 # the surrounding program text, and are adjusted to accomodate
142 # as many words on a line as possible.
143 # However, a blank line in the middle of a comment is respected.
144 # .sp
145 # Trailing comments after declarations begin at column 41
146 # (5 tab stops).
147 # Trailing comments after executable statements start at
148 # column 49 (6 tab stops).
149 # .TP
150 # indentation
151 # Statements are indented by multiples of four columns.
152 # There is only one statement per line. A control statement
153 # is always placed on a separate line.
154 # .TP
155 # braces
156 # If an opening brace is preceded by a control statement (\fCif,
157 # else, do, for\fR or \fCswitch\fR), it is placed on the same line
158 # as the control statement.
159 # .sp
160 # A closing brace is placed at the same level of indentation as the
161 # program text that precedes the corresponding opening brace.
162 # If a closing brace is followed by a control statement (\fCelse\fR
163 # or \fCwhile\fR), that control statement is placed on the same line
164 # as the closing brace.
165 # .sp
166 # In practice, brace placement is as
167 # exemplified by the books on C by B.W. Kernighan and D.M. Ritchie.
168 # .TP
169 # blanks
170 # Blanks are placed around assignment and arithmetic operators.
171 # Commas in declarations or parameter lists are followed by one blank.
172 # .sp
173 # In the following cases a
174 # blank line is inserted if it is not already present in the text:
175 # 1) in front of a block comment, 2) between local declarations and
176 # executable statements 3) after each function body.
177 # .TP
178 # declarations
179 # In the output, each variable declaration appears on
180 # a separate line.
181 # COMMANDS
182 # indent(1)
183 # FILES
184 # /tmp/ccformat.* intermediate files
185 # SEE ALSO
186 # indent(1)
187 # DIAGNOSTICS
188 # Indent may complain in case of syntax errors. These show
189 # up as comments in the resulting program text.
190 # BUGS
191 # The programs seems to beave even when fed ANSI C or even C++
192 # code; this has not been tested thoroughly, however.
194 # Will produce useless files when fed with anything that is
195 # not C program text. This does not imply a judgment about
196 # C programs in general.
197 # AUTHOR(S)
198 # W.Z. Venema
199 # Eindhoven University of Technology
200 # Department of Mathematics and Computer Science
201 # Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
202 # CREATION DATE
203 # Fri May 6 14:07:04 MET DST 1988
204 # STATUS
205 # ccformat.sh 1.3 11/5/89 14:39:29 (draft)