#! /bin/sh
#
#  Generate the summary chapter
#
#  $Id$
#

echo "@c"
echo "@c DO NOT EDIT -- AUTOMATICALLY GENERATED!!!"
echo "@c"
echo
echo "@chapter Compliance Summary"
echo

wc2()
{
  pattern=$1
  shift
  grep "${pattern}" $* | wc -l
}

wc3()
{
  pattern=$1
  filter=$2
  shift ; shift
  grep "${pattern}" $* | grep "${filter}" | wc -l
}

# adds the numbers passed on the command line
addit()
{
  sumx=0
  for x in $*
  do
    sumx=`expr $sumx + $x`
  done
  echo $sumx
}

summarize_chapter()
{
  echo 
  if [ $# -eq 1 ] ; then
    grep "^@chapter" $1 | \
      sed -e "s/^.chapter/@section/"  \
          -e "s/$/ Chapter/" 
  else
    echo "@section Overall Summary"
  fi

  echo

  # functions

  functions_total=`wc2 "()" $*`
  functions_implemented=`   wc3 "()" "Implemented" $*`
  functions_unimplemented=` wc3 "()" "Unimplemented" $*`
  functions_unmplementable=`wc3 "()" "Unimplementable" $*`
  functions_partial=`       wc3 "()" "Partial Implementation" $*`
  functions_dummy=`         wc3 "()" "Dummy Implementation" $*`
  functions_untested=`      wc3 "()" "Untested Implementation" $*`

  functions_sum=`addit ${functions_implemented} \
     ${functions_unimplemented} ${functions_unmplementable} \
     ${functions_partial}       ${functions_dummy} \
     ${functions_untested}`

  # data types

  datatypes_total=`wc2 "Type," $*`
  datatypes_implemented=`   wc3 "Type," "Implemented" $*`
  datatypes_unimplemented=` wc3 "Type," "Unimplemented" $*`
  datatypes_unmplementable=`wc3 "Type," "Unimplementable" $*`
  datatypes_partial=`       wc3 "Type," "Partial Implementation" $*`
  datatypes_dummy=`         wc3 "Type," "Dummy Implementation" $*`
  datatypes_untested=`      wc3 "Type," "Untested Implementation" $*`

  datatypes_sum=`addit ${datatypes_implemented} \
     ${datatypes_unimplemented} ${datatypes_unmplementable} \
     ${datatypes_partial}       ${datatypes_dummy} \
     ${datatypes_untested}`

  # feature flags

  features_total=`wc2 "Feature Flag," $*`
  features_implemented=`   wc3 "Feature Flag," "Implemented" $*`
  features_unimplemented=` wc3 "Feature Flag," "Unimplemented" $*`
  features_unmplementable=`wc3 "Feature Flag," "Unimplementable" $*`
  features_partial=`       wc3 "Feature Flag," "Partial Implementation" $*`
  features_dummy=`         wc3 "Feature Flag," "Dummy Implementation" $*`
  features_untested=`      wc3 "Feature Flag," "Untested Implementation" $*`

  features_sum=`addit ${features_implemented} \
     ${features_unimplemented} ${features_unmplementable} \
     ${features_partial}       ${features_dummy} \
     ${features_untested}`

  # constants

  constants_total=`wc2 "Constant," $*`
  constants_implemented=`   wc3 "Constant," "Implemented" $*`
  constants_unimplemented=` wc3 "Constant," "Unimplemented" $*`
  constants_unmplementable=`wc3 "Constant," "Unimplementable" $*`
  constants_partial=`       wc3 "Constant," "Partial Implementation" $*`
  constants_dummy=`         wc3 "Constant," "Dummy Implementation" $*`
  constants_untested=`      wc3 "Constant," "Untested Implementation" $*`

  constants_sum=`addit ${constants_implemented} \
     ${constants_unimplemented} ${constants_unmplementable} \
     ${constants_partial}       ${constants_dummy} \
     ${constants_untested}`

  # Now print the reports

  echo "@example"
  echo "Functions:"
  echo "    Total Number    : ${functions_total}"
  echo "    Implemented     : ${functions_implemented}"
  echo "    Unimplemented   : ${functions_unimplemented}"
  echo "    Unimplementable : ${functions_unmplementable}"
  echo "    Partial         : ${functions_partial}"
  echo "    Dummy           : ${functions_dummy}"
  echo "    Untested        : ${functions_untested}"
  echo "@end example"
  echo
  if [ ${functions_sum} -ne ${functions_total} ] ; then
    echo "@sp 1"
    echo "@center @b{FUNCTION COUNTS DO NOT ADD UP!!}"
    echo "@sp 1"
  fi

  echo "@example"
  echo "Data Types:"
  echo "    Total Number    : ${datatypes_total}"
  echo "    Implemented     : ${datatypes_implemented}"
  echo "    Unimplemented   : ${datatypes_unimplemented}"
  echo "    Unimplementable : ${datatypes_unmplementable}"
  echo "    Partial         : ${datatypes_partial}"
  echo "    Dummy           : ${datatypes_dummy}"
  echo "    Untested        : ${datatypes_untested}"
  echo "@end example"
  echo
  if [ ${datatypes_sum} -ne ${datatypes_total} ] ; then
    echo "@sp 1"
    echo "@center @b{DATA TYPE COUNTS DO NOT ADD UP!!}"
    echo "@sp 1"
  fi

  echo "@example"
  echo "Feature Flags:"
  echo "    Total Number    : ${features_total}"
  echo "    Implemented     : ${features_implemented}"
  echo "    Unimplemented   : ${features_unimplemented}"
  echo "    Unimplementable : ${features_unmplementable}"
  echo "    Partial         : ${features_partial}"
  echo "    Dummy           : ${features_dummy}"
  echo "    Untested        : ${features_untested}"
  echo "@end example"
  echo
  if [ ${features_sum} -ne ${features_total} ] ; then
    echo "@sp 1"
    echo "@center @b{FEATURE FLAG COUNTS DO NOT ADD UP!!}"
    echo "@sp 1"
  fi

  echo "@example"
  echo "Constants:"
  echo "    Total Number    : ${constants_total}"
  echo "    Implemented     : ${constants_implemented}"
  echo "    Unimplemented   : ${constants_unimplemented}"
  echo "    Unimplementable : ${constants_unmplementable}"
  echo "    Partial         : ${constants_partial}"
  echo "    Dummy           : ${constants_dummy}"
  echo "    Untested        : ${constants_untested}"
  echo "@end example"
  echo
  if [ ${constants_sum} -ne ${constants_total} ] ; then
    echo "@sp 1"
    echo "@center @b{CONSTANT COUNTS DO NOT ADD UP!!}"
    echo "@sp 1"
  fi
}

chapters="ch01.t ch02.t ch03.t ch04.t ch05.t ch06.t ch07.t ch08.t \
    ch09.t ch10.t ch11.t ch12.t ch13.t ch14.t ch15.t ch16.t ch17.t ch18.t"

# go through the chapters one at a time
for chapter in ${chapters}
do
  summarize_chapter $chapter
  echo "@page"
done

# now generate the overall summary
summarize_chapter ${chapters}



