#!/bin/bash

# Copyright (C) 2017 Mihail Groza
# See ../LICENSE for license information.

# Usage: progname input output

progname=`basename $0`

showerr()
{
	echo "$progname: error: $1" > /dev/stderr
}


if [ $# -ne 2 ] ; then
	showerr "incorrect number of arguments"
	exit 1
fi

input="$1"
output="$2"
baseinput=`basename $input`

if [ ! -r $input ] ; then
	showerr "can't find readable file $input"
	exit 1
fi

rm -f $output

numstringflags=`egrep '(ARG_STRING)|(ARG_FILE)|(ARG_PATH)|(ARG_DIRECTORY)' $input | wc -l`
numvalueflags=`egrep '(ARG_NUMBER)|(ARG_CHAR)' $input | wc -l`

sed -e "s/_SOURCE_FILE_/$baseinput/" -e "s/_GENFLAGCODES_/$progname/" >>$output <<\EOF
/*
** File generated from _SOURCE_FILE_ by _GENFLAGCODES_. Don't modify this file directly
** as changes will be discarded. Modify either _SOURCE_FILE_ or _GENFLAGCODES_.
*/

/*
** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003.
** Copyright (C) Mihail Groza 2017
** See ../LICENSE for license information.
**
*/

# ifndef FLAGCODES_H
# define FLAGCODES_H

typedef enum  
{ 
    MODENAME_FLAG = -3,
    SKIP_FLAG = -2,
    INVALID_FLAG = -1,
EOF
if [ $? -ne 0 ] ; then
	showerr "writing to $output failed."
	exit 1
fi

grep "FLG_" $input >> $output 

sed -e "s/_COMPUTED_NUMSTRINGFLAGS_/$numstringflags/" -e "s/_COMPUTED_NUMVALUEFLAGS_/$numvalueflags/" >>$output <<\EOF
    NUMFLAGS
} flagcode;

/*@constant int NUMVALUEFLAGS; @*/
# define NUMVALUEFLAGS       _COMPUTED_NUMVALUEFLAGS_

/*@constant int NUMSTRINGFLAGS; @*/
# define NUMSTRINGFLAGS      _COMPUTED_NUMSTRINGFLAGS_

/*@iter allFlagCodes (yield flagcode f); @*/
# define allFlagCodes(m_code) \
  { /*@+enumint@*/ flagcode m_code; for (m_code = 0; m_code < NUMFLAGS; m_code++) \
      /*@=enumint@*/ { 

# define end_allFlagCodes }}

# else
# error "Multiple include"
# endif

EOF
if [ $? -ne 0 ] ; then
	showerr "writing to $output failed."
	exit 1
fi

exit 0
