94 lines
2.5 KiB
Bash
94 lines
2.5 KiB
Bash
#!/bin/sh
|
|
# shell script for generating classes from prototypes
|
|
#
|
|
# usage: genclass [-2] type1 {ref, val} [type2 {ref, val}] proto [out-prefix]
|
|
|
|
|
|
# search in standard g++ prototype directory & in current
|
|
|
|
PROTODIR=${PROTODIR-/usr/local/lib/g++-include/gen}
|
|
CURRENTDIR=`pwd`
|
|
|
|
N="1"
|
|
T2=""
|
|
T2ACC=""
|
|
|
|
case $1 in
|
|
-2) N="2"; shift;;
|
|
*) ;;
|
|
esac
|
|
|
|
T1=$1;
|
|
T1NAME=$T1.;
|
|
T1SEDNAME=$T1;
|
|
|
|
case $2 in
|
|
ref) T1ACC="\&";;
|
|
val) T1ACC=" ";;
|
|
*) echo "Must specify type1 access: ref or val"; exit 1;;
|
|
esac
|
|
|
|
case $N in
|
|
2) T2=$3;
|
|
T2NAME=$T2.; T2SEDNAME=$T2;
|
|
case $4 in
|
|
ref) T2ACC="\&";;
|
|
val) T2ACC=" ";;
|
|
*) echo "Must specify type2 access: ref or val"; exit 1;;
|
|
esac;
|
|
CLASS=$5;;
|
|
*) CLASS=$3;;
|
|
esac
|
|
|
|
REPLACEPREFIX="N"
|
|
DFLTPREFIX=$T1NAME$T2NAME
|
|
|
|
case $# in
|
|
3) PREFIX=$DFLTPREFIX;;
|
|
5) PREFIX=$DFLTPREFIX;;
|
|
4) PREFIX=$4; REPLACEPREFIX="Y";;
|
|
6) PREFIX=$6; REPLACEPREFIX="Y";;
|
|
*) echo "bad arguments"; exit 1 ;;
|
|
esac
|
|
|
|
HSRC=$CLASS.hP
|
|
CCSRC=$CLASS.ccP
|
|
HOUT=$PREFIX$CLASS.h;
|
|
CCOUT=$PREFIX$CLASS.cc ;
|
|
|
|
|
|
# .h and .cc parts done separately in case only a .h
|
|
|
|
|
|
if test -f $CURRENTDIR/$HSRC
|
|
then HSRC=$CURRENTDIR/$HSRC
|
|
elif test -f $PROTODIR/$HSRC
|
|
then HSRC=$PROTODIR/$HSRC
|
|
else echo "genclass: $HSRC: no such file"; exit 1;
|
|
fi
|
|
|
|
CASES=$N$REPLACEPREFIX
|
|
|
|
case $CASES in
|
|
2Y) sed < $HSRC > $HOUT -e "s/<T>/$T1/g" -e "s/<T&>/$T1$T1ACC/g" -e "s/<C>/$T2/g" -e "s/<C&>/$T2$T2ACC/g" -e "s/$T1SEDNAME\.$T2SEDNAME\./$PREFIX/g" -e "s/$T1SEDNAME\./$PREFIX/g" -e "s/$T2SEDNAME\./$PREFIX/g" ;;
|
|
2N) sed < $HSRC > $HOUT -e "s/<T>/$T1/g" -e "s/<T&>/$T1$T1ACC/g" -e "s/<C>/$T2/g" -e "s/<C&>/$T2$T2ACC/g" ;;
|
|
1Y) sed < $HSRC > $HOUT -e "s/<T>/$T1/g" -e "s/<T&>/$T1$T1ACC/g" -e "s/$T1SEDNAME\./$PREFIX/g" ;;
|
|
*) sed < $HSRC > $HOUT -e "s/<T>/$T1/g" -e "s/<T&>/$T1$T1ACC/g";;
|
|
esac
|
|
|
|
if test -f $CURRENTDIR/$CCSRC
|
|
then CCSRC=$CURRENTDIR/$CCSRC
|
|
elif test -f $PROTODIR/$CCSRC
|
|
then CCSRC=$PROTODIR/$CCSRC
|
|
else echo "genclass warning: class has a .h but no .cc file"; exit 0;
|
|
fi
|
|
|
|
case $CASES in
|
|
2Y) sed < $CCSRC > $CCOUT -e "s/<T>/$T1/g" -e "s/<T&>/$T1$T1ACC/g" -e "s/<C>/$T2/g" -e "s/<C&>/$T2$T2ACC/g" -e "s/$T1SEDNAME\.$T2SEDNAME\./$PREFIX/g" -e "s/$T1SEDNAME\./$PREFIX/g" -e "s/$T2SEDNAME\./$PREFIX/g" ;;
|
|
2N) sed < $CCSRC > $CCOUT -e "s/<T>/$T1/g" -e "s/<T&>/$T1$T1ACC/g" -e "s/<C>/$T2/g" -e "s/<C&>/$T2$T2ACC/g" ;;
|
|
1Y) sed < $CCSRC > $CCOUT -e "s/<T>/$T1/g" -e "s/<T&>/$T1$T1ACC/g" -e "s/$T1SEDNAME\./$PREFIX/g" ;;
|
|
*) sed < $CCSRC > $CCOUT -e "s/<T>/$T1/g" -e "s/<T&>/$T1$T1ACC/g";;
|
|
esac
|
|
|
|
exit 0
|