#!/bin/sh
#
# NAME:
#	fixcpp - fix CPP errors
#
# SYNOPSIS:
#	fixcpp [-c][-p patch_file][-b bak_dir][-n new_dir] files(s)
#
# DESCRIPTION:
#	For each named file, use sed(1) to fixup any descriptive
#	text after #else or #endif or that is not properly
#	commented as this causes ANSI compilers to generate
#	unnecessary warnings.
#
#	Naturally this script is not guaranteed to be bullit
#	proof, use of -n or -b is advisable!
#
#	-c causes fixcpp to make sure that only files that
#	needed changing are affected by returning the original
#	file to its original location if no changes were needed.
#
#	-p causes fixcpp to append to a patch file the context
#	diffs of the changes wraught.
#
# SEE ALSO:
#	sed(1)
#
# AMENDED:
#	90/08/08 22:46:32 (sjg)
#
# RELEASED:
#	90/08/08 22:46:34 v1.4
#
# SCCSID:
#	@(#)fixcpp.sh 1.4 90/08/08 22:46:32 (sjg)
#
#	@(#)Copyright (c) 1990 Simon J. Gerraty
#
#       This is free software.  It comes with NO WARRANTY.
#       Everyone is granted permission to copy, modify and
#       redistribute this source code provided that all
#       recipients are given similar rights, and that the above
#       copyright notice and this notice are preserved in all
#       copies. 

TMPF=/tmp/fixcpp.$$
NEWDIR=
BAKDIR=
PATCHF=
CHECK=

set -- `getopt "cp:b:n:" $*`
if [ $? != 0 ]; then
	echo "$0 [-c][-p patch_file][-b bakup_dir][-n new_dir] file [file ...]" >&2
	exit 1
fi
for i in $*
do
	case $i in
	-c)	CHECK=yes; shift;;
	-p)	PATCHF=$2; shift 2;;
	-b)	BAKDIR=$2; shift 2;;
	-n)	NEWDIR=$2; shift 2;;
	--)	shift; break;;
	esac
done
NEWDIR=${NEWDIR:-.}
if [ $BAKDIR ]; then
	if [ ! -d $BAKDIR ]; then
		echo "$0: no such directory -- $BAKDIR" >&2
		exit 1
	fi
fi



for i in $*
do
	if [ $BAKDIR ]; then
		mv $i $BAKDIR
		infile=$BAKDIR/$i
	else
		if [ "$NEWDIR" = "." ]; then
			mv $i ${TMPF}
			infile=${TMPF}
		else
			infile=$i
		fi
	fi	
	sed -e 's;^#\([ 	]*e[nl][^ 	]*[ 	][ 	]*\)\([^/ 	][^\*].*\);#\1/* \2 */;' -e 's;^#\([ 	]*e[nl][^ 	]*[ 	][ 	]*\)\([^/ 	]\)$;#\1/* \2 */;' $infile >${NEWDIR}/$i
	if [ "${CHECK}" = "yes" -o ${PATCHF} ]; then
		if cmp -s $infile ${NEWDIR}/$i ; then
			if [ "${CHECK}" = "yes" ]; then
				if [ $BAKDIR ]; then
					mv $infile ${NEWDIR}/$i
				else
					rm ${NEWDIR}/$i
				fi
			fi
		else
			if [ $PATCHF ]; then
				diff -c $infile ${NEWDIR}/$i >> ${PATCHF}
			fi
		fi
	fi

done

rm -f ${TMPF}
