#!/bin/sh

# PimenTech 1999 : $Revision: 1.6 $

case $DEBUG in
  1) set -x
     ;;
  *)
     ;;
esac

bak_dir=""

while true
do
  case $1 in
    -r)	regexp=`echo "$2" | sed 's/\//\\\\\//g'`
        shift 2
        ;;
    -s) substitute=`echo "$2" | sed 's/\//\\\\\//g'`
        shift 2
        ;;
    -f)	files="$2"
		shift 2
		;;
    -b) bak_dir="$2"
        shift 2
		;;
    -h) echo "usage : replace.sh -r 'sed regexp' -s 'sed substitute string' -f 'files' -b 'backup dir'"
		echo "example : replace.sh -r 'n\([0-9]\)' -s 'number\1' -f '*/*.cc'"
		exit 0
		;;
     *)
		break
		;;
  esac
done

if [ -n "${bak_dir}" ]
then
	mkdir -p ${bak_dir}

	last_operation_dir=`ls -rt ${bak_dir} | tail -1`
	if [ -n "${last_operation_dir}" ]
	then
		bak_operation_dir="`expr ${last_operation_dir} + 1`"
	else
		bak_operation_dir="1"
	fi
fi

for file in ${files}
do
  if [ -f "$file" ]
  then
    sed "s/${regexp}/${substitute}/g" "${file}" > "${file}".new
    diff "${file}" "${file}".new > /dev/null
    if [ $? -ne 0 ]
    then
	  if [ -n "${bak_dir}" ]
	  then
		dir=`dirname "${file}"`
		mkdir -p ${bak_dir}/${bak_operation_dir}/${dir}
		mv -f "${file}" ${bak_dir}/${bak_operation_dir}/${dir}
	  fi
      mv -f "${file}".new "${file}"
    else
      rm -f "${file}".new 
    fi
  fi
done

