1#!/bin/sh 2# 3# NAME: 4# fixcpp - fix CPP errors 5# 6# SYNOPSIS: 7# fixcpp [-c][-p patch_file][-b bak_dir][-n new_dir] files(s) 8# 9# DESCRIPTION: 10# For each named file, use sed(1) to fixup any descriptive 11# text after #else or #endif or that is not properly 12# commented as this causes ANSI compilers to generate 13# unnecessary warnings. 14# 15# Naturally this script is not guaranteed to be bullet 16# proof, use of -n or -b is advisable! 17# 18# -c causes fixcpp to make sure that only files that 19# needed changing are affected by returning the original 20# file to its original location if no changes were needed. 21# 22# -p causes fixcpp to append to a patch file the context 23# diffs of the changes wrought. 24# 25# SEE ALSO: 26# sed(1) 27# 28# AMENDED: 29# 90/08/08 22:46:32 (sjg) 30# 31# RELEASED: 32# 90/08/08 22:46:34 v1.4 33# 34# SCCSID: 35# @(#)fixcpp.sh 1.4 90/08/08 22:46:32 (sjg) 36# 37# @(#)Copyright (c) 1990 Simon J. Gerraty 38# 39# This is free software. It comes with NO WARRANTY. 40# Everyone is granted permission to copy, modify and 41# redistribute this source code provided that all 42# recipients are given similar rights, and that the above 43# copyright notice and this notice are preserved in all 44# copies. 45 46TMPF=/tmp/fixcpp.$$ 47NEWDIR= 48BAKDIR= 49PATCHF= 50CHECK= 51 52set -- `getopt "cp:b:n:" $*` 53if [ $? != 0 ]; then 54 echo "$0 [-c][-p patch_file][-b bakup_dir][-n new_dir] file [file ...]" >&2 55 exit 1 56fi 57for i in $* 58do 59 case $i in 60 -c) CHECK=yes; shift;; 61 -p) PATCHF=$2; shift 2;; 62 -b) BAKDIR=$2; shift 2;; 63 -n) NEWDIR=$2; shift 2;; 64 --) shift; break;; 65 esac 66done 67NEWDIR=${NEWDIR:-.} 68if [ $BAKDIR ]; then 69 if [ ! -d $BAKDIR ]; then 70 echo "$0: no such directory -- $BAKDIR" >&2 71 exit 1 72 fi 73fi 74 75 76 77for i in $* 78do 79 if [ $BAKDIR ]; then 80 mv $i $BAKDIR 81 infile=$BAKDIR/$i 82 else 83 if [ "$NEWDIR" = "." ]; then 84 mv $i ${TMPF} 85 infile=${TMPF} 86 else 87 infile=$i 88 fi 89 fi 90 sed -e 's;^#\([ ]*e[nl][^ ]*[ ][ ]*\)\([^/ ][^\*].*\);#\1/* \2 */;' -e 's;^#\([ ]*e[nl][^ ]*[ ][ ]*\)\([^/ ]\)$;#\1/* \2 */;' $infile >${NEWDIR}/$i 91 if [ "${CHECK}" = "yes" -o ${PATCHF} ]; then 92 if cmp -s $infile ${NEWDIR}/$i ; then 93 if [ "${CHECK}" = "yes" ]; then 94 if [ $BAKDIR ]; then 95 mv $infile ${NEWDIR}/$i 96 else 97 rm ${NEWDIR}/$i 98 fi 99 fi 100 else 101 if [ $PATCHF ]; then 102 diff -c $infile ${NEWDIR}/$i >> ${PATCHF} 103 fi 104 fi 105 fi 106 107done 108 109rm -f ${TMPF} 110