#!/bin/ksh
#
# Author: D. Fuchs
#
# (c) Copyright NETMANSYS 1997
#
# This file has been modified by SUN 
# Copyright 05/07/97 Sun Microsystems, Inc.  All Rights Reserved.
#
# Convert old masterfiles (SUN FCS 1.0) to new masterfiles (patchlevel 0.2.8)
#
#

#--------------------------------------------------------------------------

usage () {
  echo Error: $@
  echo Usage: `basename "$0"` \[-proj \<project-dir\>\] \[-d \<masterfile\>\] >&2
  exit 1
}

#--------------------------------------------------------------------------

error () {
  echo Error: $@ >&2
  exit 1
}

#--------------------------------------------------------------------------

info () {
  echo $@
}

#--------------------------------------------------------------------------

addflag=0
addline () {
  if [ $addflag -eq 0 ] 
  then
    echo '--'
    echo '-- New mibs needed for Solstice TMN Agent Tester'
    echo '--'
  fi
  addflag=1
}

#--------------------------------------------------------------------------

cmdline () {
  projectdir=${CAT_PROJECT_DIR}
  master=""

  while test $# -gt 0 ;
  do
    case "z$1" in
      z-proj) if [ $# -gt 1 ] ; then 
            projectdir=$2 ; shift 
          else
            usage "Mandatory parameter missing for -p option."
          fi
          ;;
      z-d) if [ $# -gt 1 ] ; then 
            master=$2 ; shift
          else
            usage "Mandatory parameter missing for -d option."
          fi
          ;;
      *) usage "Unkown option -- $1" ; break ;;
    esac
    shift
  done

  setparam  
}

#--------------------------------------------------------------------------

setparam () {
  if [ -z "$projectdir" ] 
  then 
    usage "CAT_PROJECT_DIR environment variable not set, and no -proj option"
  fi
  case "z$master" in 
    z)      masterfile=$projectdir/Metadata/masterfile;;
    z/*)    masterfile=$master;;
    z./*)   masterfile=$master;;
    z../*)  masterfile=$master;;
    *)      masterfile=$projectdir/Metadata/$master;;
  esac
}

#--------------------------------------------------------------------------

cmdline $@

if test -d $projectdir && test -r $masterfile ;
then
   info "masterfile = $masterfile"
else
   usage "Can't find masterfile $masterfile"
fi

#--------------------------------------------------------------------------

nicknames=`cat  $masterfile | egrep -v '^[ 	]*[-][-]' | sed 's/--.*//' | sed 's/;/\\
;/g' | sed -n '/NICKNAME/,/;/ p;d'`
defined=`cat  $masterfile | egrep -v '^[ 	]*[-][-]' | sed 's/--.*//' | sed 's/;/\\
;/g' | sed -n '/BY/,/;/ p;d'`


# save old masterfile
# test -r ${masterfile}.sav && (rm -f ${masterfile}.sav || \
#	error "can't remove ${masterfile}.sav")
#
# info "saving old masterfile to ${masterfile}.sav"
# cp $masterfile ${masterfile}.sav

tmpfile=/tmp/masterfile.$$

touch $tmpfile || error "can't create temoprary file $tmpfile"

#--------------------------------------------------------------------------

#--------------------------------------------------------------------------

# check x711
x711=`echo $nicknames  | tr ';' '\012' | grep x711`
x711mib=`echo $defined | tr ';' '\012' | grep x711`

if [ -z "$x711" ] 
then
  info "X.711 : document not found in masterfile. Adding x711..."
  cat $masterfile > $tmpfile
  addline >> $tmpfile
  cat << END_OF_X711 >> $tmpfile

-- Minimal version of ITU X701 ASN.1 modules.
"Recommendation X.711:1991": DOCUMENT 
	DEFINED BY /opt/SUNWconn/AgtTester/template/agtmib/x711-minimal.mib;
	NICKNAME x711;;

END_OF_X711
elif [ -z "`echo $x711mib | grep x711-minimal.mib`" ]
then
  info "substituing x711.mib with x711-minimal.mib"
  x711_path=`cat $masterfile |grep '/opt/SUNWconn/AgtTester/template/agtmib/x711.mib' `
  if [ -n "$x711_path" ]
  then
    #
    # Something is found on the standard path 
    # No user change, so old mib has to be replaces
    #
    cat $masterfile | \
	sed 's,/opt/SUNWconn/AgtTester/template/agtmib/x711.mib,/opt/SUNWconn/AgtTester/template/agtmib/x711-minimal.mib,' \
	> $tmpfile
   else
	cat $masterfile > $tmpfile
   fi
else
  info "X.711 correctly referenced."
  cat $masterfile > $tmpfile
fi

#--------------------------------------------------------------------------

# check x721:
x721=`echo $nicknames | tr ';' '\012' | grep x721`
x721mib=`echo $defined | tr ';' '\012' | grep X721.mib`
x721asn1=`echo $defined | tr ';' '\012' | grep X721.asn1`

if [ -z "$x721" ] 
then
  info "X.721 : document not found in masterfile. Adding x721..."
  addline >> $tmpfile
  cat << END_OF_X721 >> $tmpfile

-- ITU-T X721 MIB.
"Rec. X.721 | ISO/IEC 10165-2 : 1992": DOCUMENT
	DEFINED BY x721.mib;
	NICKNAME x721;;

END_OF_X721
elif [ -z "$x721mib" ] 
then
  info Warning: "x721 does not refer to x721.mib."
elif [ -n "$x721asn1" ]
then
	d0=`cat $tmpfile | tr '\012' '\007' `
	echo $d0 | sed 's,[ \t\,]*/opt/SUNWconn/AgtTester/template/agtmib/X721.asn1[ \t\,]*,,'|\
	sed 's,/opt/SUNWconn/AgtTester/template/agtmib/X721.mib,/opt/SUNWconn/AgtTester/template/agtmib/x721.mib,'|\
	sed 's/,\([ 	]*\),/\1,/g' |\
	sed 's/,\([ 	]*\);/\1;/g' |\
		tr '\007' '\012'   > /$tmpfile
else
  info "X.721 correctly referenced."
fi


#--------------------------------------------------------------------------

# check catdoc
cat=`echo $nicknames  | tr ';' '\012' | grep cat`
catmib=`echo $defined | tr ';' '\012' | grep cat.mib`

if [ -z "$cat" ] 
then
  info "CatDoc : document not found in masterfile. Adding CatDoc..."
  addline >> $tmpfile
  cat << END_OF_CATDOC >> $tmpfile

-- FastBench(r) CMIS Agent Tester MIB.
"CatDoc": DOCUMENT
        DEFINED BY /opt/SUNWconn/AgtTester/template/agtmib/cat.mib;
	NICKNAME cat;;

END_OF_CATDOC
elif [ -z "$catmib" ]
then
  info Warning: "CatDoc does not refer to cat.mib."
else 
  info "CatDoc correctly referenced."
fi

#--------------------------------------------------------------------------

# check x.501
x501=`echo $nicknames | tr ';' '\012' | grep x501`
x501mib=`echo $defined | tr ';' '\012' | grep x501-minimal.mib`
if [ -z "$x501" ] 
then
  info "X.501 : document not found in masterfile. Adding x501..."
  addline >> $tmpfile
  cat << END_OF_X501 >> $tmpfile

-- Minimal version of ITU X501 ASN.1 modules.
"Recommendation X.501:1990": DOCUMENT
        DEFINED BY /opt/SUNWconn/AgtTester/template/agtmib/x501-minimal.mib;
	NICKNAME x501;;

END_OF_X501
elif [ -z "$x501mib" ] 
then
  info Warning: "X.501 does not refer to x501-minimal.mib."
else 
  info "X.501 correctly referenced."
fi

#--------------------------------------------------------------------------

#check x227
x227=`echo $nicknames | tr ';' '\012' | grep x227`
x227mib=`echo $defined | tr ';' '\012' | grep x227.mib`

if [ -z "$x227" ] 
then
  info "X.227 : document not found in masterfile. Adding x227..."
  addline >> $tmpfile
  cat << END_OF_X227 >> $tmpfile

-- ITU X227 ASN.1 modules.
"X.227": DOCUMENT
        DEFINED BY /opt/SUNWconn/AgtTester/template/agtmib/x227.mib;
	NICKNAME x227;;

END_OF_X227
elif [ -z "$x227mib" ] 
then
  info Warning: "X.227 does not refer to x227.mib."
else 
  info "X.227 correctly referenced."
fi

#--------------------------------------------------------------------------

# check acse.asn1
acse=`echo $nicknames | tr ';' '\012' | grep acse`
acseasn1=`echo $defined | tr ';' '\012' | grep acse.asn1`
if [ -z "$acse" ] 
then
  info "acse.asn1 not referenced. It seams correct."
elif [ -z "$acseasn1" ] 
then
  info Warning: "acse.asn1 does not refer to acse.asn1."
else 
  cat $tmpfile | awk '/acse.asn1/, /;;/ {next } {print}' > $tmpfile.$$
  mv $tmpfile.$$ $tmpfile
fi


#--------------------------------------------------------------------------

# check name binding definition
name_binding=`echo $nicknames | tr ';' '\012' | grep name_binding`
name_bindingmib=`echo $defined | tr ';' '\012' | grep name_binding.mib`
if [ -z "$name_binding" ] 
then
  info "name_binding : document not found in masterfile. Adding name_binding..."
  addline >> $tmpfile
  cat << END_OF_NAME_BINDING >> $tmpfile

"name binding definition": DOCUMENT
        DEFINED BY /opt/SUNWconn/AgtTester/template/agtmib/name_binding.mib;
	NICKNAME name_binding;;

END_OF_NAME_BINDING
elif [ -z "$name_bindingmib" ] 
then
  info Warning: "name_binding does not refer to name_binding.mib."
else 
  info "X.501 correctly referenced."
fi

#--------------------------------------------------------------------------

if [ -f  $projectdir/Metadata/masterfile.bak ]
then
	info "'$masterfile' will be copied to '$projectdir/Metadata/masterfile.bak'"
	rsp=`ckyorn -p "'$projectdir/Metadata/masterfile.bak' already exists. Do you want to overwrite this file? "`
	if [ "$rsp" != "y" ] && [ "$rsp" != "yes" ] && [ "$rsp" != "Y" ] && [ "$rsp" != "YES" ]
	then
		info "Leaving old master file in '$masterfile'."
		info "Leaving old 'masterfile.bak' in '$projectdir/Metadata/masterfile.bak'."
		info "New master file is '$tmpfile'."
		exit 0
	fi
fi

info "Moving old master file to '$projectdir/Metadata/masterfile.bak'"
mv -f $masterfile $projectdir/Metadata/masterfile.bak || \
		error "Can't move '$masterfile'. New master file is '$tmpfile'."
		#
		# Note error proc performs an 'exit
		#
		

info "Moving new master file to '$masterfile'".
mv $tmpfile $masterfile
exit 0

#--------------------------------------------------------------------------




