#! /bin/sh # ============================================================================= # # = DESCRIPTION # Front end to awk script for generating .hxx and .hxx files # from classinfo files. # # = AUTHOR(S) # K. Dorn # # # ============================================================================= OSE_HOST= OSE_RELEASE_NAME= export OSE_RELEASE_NAME OSE_ROOT=${OSE_ROOT-$WRAPPER_ROOT} export OSE_ROOT OSE_VERSION_ROOT=$OSE_ROOT export OSE_VERSION_ROOT BINDIR="$OSE_VERSION_ROOT/$OSE_HOST/bin" LIBDIR=${CLASSINFOLIBDIR-"$OSE_VERSION_ROOT/bin"} AWK="${AWK-nawk}" if test "$AWK" = "nawk" then VARG="-v" fi EXT="3" # # Error. # ERROR() { echo "`basename $0`: $1" >&2 shift while test $# != "0" do echo $1 >&2 shift done exit 1 } # # Usage message. # USAGE() { ERROR "Usage: `basename $0` file.ci" } # # Check usage. # if test $# != "1" -o "'basename $1 .ci'" = "$1" then USAGE fi # # Check for awk file etc. # INFO2SRC=$BINDIR/info2src.awk INFO2DOC=$LIBDIR/info2doc.awk MANFMT=$LIBDIR/info2head.fmt HIDINGFMT=$LIBDIR/hiding.fmt VENDORFMT=$LIBDIR/vendor.fmt if test ! -f $VENDORFMT then ERROR "Can't find $VENDORFMT" fi if test ! -f $HIDINGFMT then ERROR "Can't find $HIDINGFMT" fi if test ! -f $INFO2DOC then ERROR "Can't find $INFO2DOC" fi if test ! -f $MANFMT then ERROR "Can't find $MANFMT" fi ADTS=`$AWK ' BEGIN { FS="\n"; RS="" } $1 ~ "^(CLASS|STRUCT|UNION)$" && $2 !~ "(::|<)" { printf( "%s\n", $2 ) } $1 ~ "^TEMPLATE$" && $3 !~ "::" { printf( "%s\n", $3 ) }' $1` VMERGE=`$AWK ' BEGIN { FS="\n"; RS="" } $1 ~ "^CSAMERGECXXHXX$" { if ( $2 ~ "on" ) printf("%s","merge=on"); else printf("%s","merge="); }' $HIDINGFMT` VCSA=`$AWK ' BEGIN { FS="\n"; RS="" } $1 ~ "^CSAHEADER$" { if ( $2 ~ "on" ) printf("%s","csaprintheader=on"); else printf("%s","csaprintheader="); }' $HIDINGFMT` VPUBL=`$AWK ' BEGIN { FS="\n"; RS="" } $1 ~ "^PUBLIC$" { if ( $2 ~ "on" ) printf("%s","publ=on"); else printf("%s","publ="); }' $HIDINGFMT` VPROT=`$AWK ' BEGIN { FS="\n"; RS="" } $1 ~ "^PROTECTED$" { if ( $2 ~ "on" ) printf("%s","prot=on"); else printf("%s","prot="); }' $HIDINGFMT` VPRIV=`$AWK ' BEGIN { FS="\n"; RS="" } $1 ~ "^PRIVATE$" { if ( $2 ~ "on" ) printf("%s","priv=on"); else printf("%s","priv="); }' $HIDINGFMT` VCOCXX=`$AWK ' BEGIN { FS=""; RS="" } /VENDOR_COMPILATION_HEADER_CXX_START/, /VENDOR_COMPILATION_HEADER_CXX_END/ { sub("^VENDOR_COMPILATION_HEADER_CXX_START\n","",$0) sub("VENDOR_COMPILATION_HEADER_CXX_END$","",$0) gsub( / \\\" /, "999", $0 ) gsub( "\"\\[\t ]*", "234", $0 ) gsub( "234\\\n", "345", $0 ) gsub( /234.\n/, "456", $0 ) gsub( /456[\t ]*234/, "567", $0 ) gsub( /567/, "", $0 ) gsub( /234/, "", $0 ) gsub( /345/, "", $0 ) gsub( "999", "\"", $0 ) print $0 }' $VENDORFMT` VMECXX=`$AWK ' BEGIN { FS=""; RS="" } /VENDOR_METHOD_HEADER_CXX_START/, /VENDOR_METHOD_HEADER_CXX_END/ { sub("^VENDOR_METHOD_HEADER_CXX_START\n","",$0) sub("VENDOR_METHOD_HEADER_CXX_END$","",$0) gsub( / \\\" /, "999", $0 ) gsub( "\"\\[\t ]*", "234", $0 ) gsub( "234\\\n", "345", $0 ) gsub( /234.\n/, "456", $0 ) gsub( /456[\t ]*234/, "567", $0 ) gsub( /567/, "", $0 ) gsub( /234/, "", $0 ) gsub( /345/, "", $0 ) gsub( "999", "\"", $0 ) print $0 }' $VENDORFMT` VCOHXX=`$AWK ' BEGIN { FS=""; RS="" } /VENDOR_COMPILATION_HEADER_HXX_START/, /VENDOR_COMPILATION_HEADER_HXX_END/ { sub("^VENDOR_COMPILATION_HEADER_HXX_START\n","",$0) sub("VENDOR_COMPILATION_HEADER_HXX_END$","",$0) gsub( / \\\" /, "999", $0 ) gsub( "\"\\[\t ]*", "234", $0 ) gsub( "234\\\n", "345", $0 ) gsub( /234.\n/, "456", $0 ) gsub( /456[\t ]*234/, "567", $0 ) gsub( /567/, "", $0 ) gsub( /234/, "", $0 ) gsub( /345/, "", $0 ) gsub( "999", "\"", $0 ) print $0 }' $VENDORFMT` VCLHXX=`$AWK ' BEGIN { FS=""; RS="" } /VENDOR_CLASS_HEADER_HXX_START/, /VENDOR_CLASS_HEADER_HXX_END/ { sub("^VENDOR_CLASS_HEADER_HXX_START\n","",$0) sub("VENDOR_CLASS_HEADER_HXX_END$","",$0) gsub( / \\\" /, "999", $0 ) gsub( "\"\\[\t ]*", "234", $0 ) gsub( "234\\\n", "345", $0 ) gsub( /234.\n/, "456", $0 ) gsub( /456[\t ]*234/, "567", $0 ) gsub( /567/, "", $0 ) gsub( /234/, "", $0 ) gsub( /345/, "", $0 ) gsub( "999", "\"", $0 ) print $0 }' $VENDORFMT` echo " $VCOCXX " > vcocxx.txt echo " $VMECXX " > vmecxx.txt echo " $VCOHXX " > vcohxx.txt echo " $VCLHXX " > vclhxx.txt echo " $VPUBL $VPROT $VPRIV $VCSA $VMERGE" # # get from *.ci file the classes that should separated # and make the .hxx and .cxx files # if test ! -z "$ADTS" then LASTADT="" LOPCNT=1 BASEFILENAME=`basename $1` HXXMERGEFILE=`echo $BASEFILENAME | sed -e 's/\..*$//'`.mhxx CXXMERGEFILE=`echo $BASEFILENAME | sed -e 's/\..*$//'`.mcxx rm -f $HXXMERGEFILE rm -f $CXXMERGEFILE for ADT in $ADTS do if test "$LASTADT" != "$ADT" then echo "loop = $LOPCNT" echo "$ADT" echo "making $ADTS.hxx file ..." $AWK -f $INFO2DOC \ $VARG fvclhxx=vclhxx.txt \ $VARG fvcohxx=vcohxx.txt \ $VARG $VPUBL $VARG $VPROT $VARG $VPRIV $VARG $VCSA $VARG $VMERGE \ $VARG pass=0 $VARG device=text $VARG infile=$1 \ $VARG class=$ADT $VARG loop=$LOPCNT\ $MANFMT $MANFMT > $ADT.hxx echo "$ADTS.hxx file done!" if test "$VMERGE" = "merge=on" then echo "merging $ADT.hxx into $HXXMERGEFILE" cat $ADT.hxx >> $HXXMERGEFILE fi echo "making $ADTS.cxx file ..." $AWK -f $INFO2SRC \ $VARG fvmecxx=vmecxx.txt \ $VARG fvcocxx=vcocxx.txt \ $VARG $VPUBL $VARG $VPROT $VARG $VPRIV $VARG $VCSA $VARG $VMERGE \ $VARG infile=$1 $VARG classext=$ADT $VARG mode=single $VARG loop=$LOPCNT\ $1 > $ADT.cxx echo "$ADTS.cxx file done!" if test "$VMERGE" = "merge=on" then echo "merging $ADT.cxx into $CXXMERGEFILE" cat $ADT.cxx >> $CXXMERGEFILE fi LOPCNT=`expr $LOPCNT + 1` LASTADT=$ADT fi done fi # # remove temporary vendor files # rm -f vcocxx.txt rm -f vmecxx.txt rm -f vcohxx.txt rm -f vclhxx.txt