summaryrefslogtreecommitdiffstats
path: root/mantools/ccformat
diff options
context:
space:
mode:
Diffstat (limited to 'mantools/ccformat')
-rwxr-xr-xmantools/ccformat207
1 files changed, 207 insertions, 0 deletions
diff --git a/mantools/ccformat b/mantools/ccformat
new file mode 100755
index 0000000..9ac6c57
--- /dev/null
+++ b/mantools/ccformat
@@ -0,0 +1,207 @@
+#!/bin/sh
+
+# ccformat - convert C code to standard format
+
+# @(#) ccformat.sh 1.3 11/5/89 14:39:29
+
+# how to suppress newlines in echo
+
+case `echo -n` in
+"") n=-n; c=;;
+ *) n=; c='\c';;
+esac
+
+# initialize
+
+TMPF=/tmp/ccformat.$$
+ERROR=
+TROFF=
+BCK=
+FLAGS="-st -di8 -npsl -bap -bad -bbb -nbc -i4 -d0 -nip -nfc1 -cd41 -c49"
+
+trap 'rm -f .ind.$$ $TMPF; exit 1' 1 2 3 15
+
+# parse command options
+
+while :
+do
+ case $1 in
+ -t) TROFF=-troff;;
+ -b) case $# in
+ 1) ERROR="-b option requires backup argument"; break;;
+ *) BCK=$2; shift;;
+ esac;;
+ -T) case $# in
+ 1) ERROR="-T option requires typename argument"; break;;
+ *) FLAGS="$FLAGS -T$2"; shift;;
+ esac;;
+ -*) ERROR="invalid option: $1"; break;;
+ *) break;;
+ esac
+ shift
+done
+
+# check for invalid commands
+
+test -z "$ERROR" || {
+ echo "$0: $ERROR" 1>&2
+ echo "usage: $0 [-b backup] [-t] [-T typename] [file(s)]" 1>&2
+ exit 1; }
+
+# format the files
+
+case $# in
+ 0) indent $TROFF $FLAGS;;
+ *) case "$TROFF" in
+-troff) for i in $*
+ do
+ indent $TROFF $FLAGS $i
+ done;;
+ *) for i in $*
+ do
+ echo $n $i... $c
+ test -z "$BCK" || cp $i $i"$BCK" || { echo backup FAILED; exit 1; }
+ { # some versions of indent return garbage exit status -- gack!
+ (indent $FLAGS <$i 2>.ind.$$ >$TMPF || test ! -s .ind.$$) >$TMPF &&
+ # try a device full check
+ # echo >>$TMPF &&
+ (
+ # ignore interrupts while we overwrite the original file
+ trap '' 1 2 3 15; cp $TMPF $i
+ ) && echo replaced; } || { echo replacement FAILED; exit 1; }
+ done;;
+ esac;;
+esac
+
+rm -f $TMPF .ind.$$
+
+exit
+
+#++
+# NAME
+# ccformat 1
+# SUMMARY
+# convert C source text to standard format
+# PROJECT
+# sdetools
+# SYNOPSIS
+# ccformat [-b backup] [-t] [-T typename] [file(s)]
+# DESCRIPTION
+# The \fIccformat\fR command adjusts the layout of C program text
+# such that it approximates the Kernighan and Ritchie coding style.
+#
+# If no file names are specified, \fIccformat\fR reads
+# from standard input and writes the result to standard output.
+# This is convenient for source formatting from within a text
+# editor program.
+#
+# Otherwise, the named files are overwritten with their
+# formatted equivalent. The \fI-b\fR option (see below) provides
+# a way to create backup copies of the original files.
+#
+# Alternatively, the command can be used as a preprocessor for
+# pretty-printing with the \fInroff\fR or \fItroff\fR commands
+# (see the -t option below). In this case, output is always written
+# to standard output and no change is made to source files.
+#
+# The following options are recognized:
+# .TP
+# -b backup
+# Requests that a copy of the original files be saved. The backup
+# file name is constructed by appending the specified \fIbackup\fR
+# string to the original file name.
+# This option is ignored when the \fI-t\fR
+# option is specifid.
+# .TP
+# -t
+# Makes the program act as a preprocessor
+# for pretty-printing with \fInroff\fR or \fItroff\fR.
+# For example, in order to produce a pretty-printed
+# version on the line printer, use
+#
+ ccformat -t file(s) | nroff -mindent | col | lp
+# .TP
+# -T typename
+# Adds \fItypename\fR 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
+# won't be formatted as nicely as it should.
+# PROGRAM LAYOUT
+# .fi
+# .ad
+# The following program layout is produced:
+# .TP
+# comments
+# Comments starting in the first column are left untouched.
+# These are often carefully laid out by the programmer.
+# .sp
+# Comments that appear in-between statements are lined up with
+# the surrounding program text, and are adjusted to accommodate
+# as many words on a line as possible.
+# However, a blank line in the middle of a comment is respected.
+# .sp
+# Trailing comments after declarations begin at column 41
+# (5 tab stops).
+# Trailing comments after executable statements start at
+# column 49 (6 tab stops).
+# .TP
+# indentation
+# Statements are indented by multiples of four columns.
+# There is only one statement per line. A control statement
+# is always placed on a separate line.
+# .TP
+# braces
+# If an opening brace is preceded by a control statement (\fCif,
+# else, do, for\fR or \fCswitch\fR), it is placed on the same line
+# as the control statement.
+# .sp
+# A closing brace is placed at the same level of indentation as the
+# program text that precedes the corresponding opening brace.
+# If a closing brace is followed by a control statement (\fCelse\fR
+# or \fCwhile\fR), that control statement is placed on the same line
+# as the closing brace.
+# .sp
+# In practice, brace placement is as
+# exemplified by the books on C by B.W. Kernighan and D.M. Ritchie.
+# .TP
+# blanks
+# Blanks are placed around assignment and arithmetic operators.
+# Commas in declarations or parameter lists are followed by one blank.
+# .sp
+# In the following cases a
+# blank line is inserted if it is not already present in the text:
+# 1) in front of a block comment, 2) between local declarations and
+# executable statements 3) after each function body.
+# .TP
+# declarations
+# In the output, each variable declaration appears on
+# a separate line.
+# COMMANDS
+# indent(1)
+# FILES
+# /tmp/ccformat.* intermediate files
+# SEE ALSO
+# indent(1)
+# DIAGNOSTICS
+# Indent may complain in case of syntax errors. These show
+# up as comments in the resulting program text.
+# BUGS
+# The programs seems to beave even when fed ANSI C or even C++
+# code; this has not been tested thoroughly, however.
+#
+# Will produce useless files when fed with anything that is
+# not C program text. This does not imply a judgment about
+# C programs in general.
+# AUTHOR(S)
+# W.Z. Venema
+# Eindhoven University of Technology
+# Department of Mathematics and Computer Science
+# Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
+# CREATION DATE
+# Fri May 6 14:07:04 MET DST 1988
+# STATUS
+# ccformat.sh 1.3 11/5/89 14:39:29 (draft)
+#--