386BSD 0.0 development
authorWilliam F. Jolitz <wjolitz@soda.berkeley.edu>
Mon, 13 Aug 1990 18:01:32 +0000 (10:01 -0800)
committerWilliam F. Jolitz <wjolitz@soda.berkeley.edu>
Mon, 13 Aug 1990 18:01:32 +0000 (10:01 -0800)
Work on file usr/src/lib/libg++/genclass/genclass.sh

Co-Authored-By: Lynne Greer Jolitz <ljolitz@cardio.ucsf.edu>
Synthesized-from: 386BSD-0.0/src

usr/src/lib/libg++/genclass/genclass.sh [new file with mode: 0644]

diff --git a/usr/src/lib/libg++/genclass/genclass.sh b/usr/src/lib/libg++/genclass/genclass.sh
new file mode 100644 (file)
index 0000000..96fc81d
--- /dev/null
@@ -0,0 +1,93 @@
+#!/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