
# This is a shell script version of the program which transforms a .ch
#  file into either a .h file or a .c file.  This is used to create
#  matching .c and .h files from a common source (the .ch file) where
#  the .c file contains variable definitions and the .h file contains
#  corresponding external declarations.  The program is run twice
#  on a .ch file: once with the "-c" option to create the .c file
#  and once with the "-h" option to create the .h file (the program
#  reads from standard input and writes to standard output - the
#  extensions named here are just the conventional ones).
#
# In either case block comments (rather crudely defined - see the cdecom
#  script which uses the same rules) are first stripped out by the first
#  half of the pipeline (the first sed command). After the comments are
#  stripped out the file is filtered according to:
#    -c option:
#        >lines starting with 'C' or 'X' are copied with 1st character removed
#        >lines starting with 'H' are discarded
#        >all other lines are copied out
#    -h option:
#        >lines starting with 'H' are copied with 1st character removed
#        >lines starting with 'X' are copied with 'X' replaced by 'extern'
#        >lines starting with 'C' are discarded
#        >all other lines are copied out

if [ $# -ne 1 -o "$1" != '-c' -a  "$1" != '-h' ]
then
    echo "usage: makech -c|-h"
    exit 1
fi

sed -e '
  /^[ 	]*\/\*.*\*\// d
  /^[ 	]*\/\*/,/\*\// d' | \
if [ $1 = '-c' ]
then
    echo '#define INIT(v) =v '
    sed -e '
      /^H/ d
      s/^X/ /
      s/^C//'
elif [ $1 = -h ]
then
    echo '#define INIT(v) '
    sed -e '
      /^C/ d
      s/^X/extern  /
      s/^H//'
fi
