#!/bin/sh

OPTS=`grep getopt_long dvblast.c | sed -e 's|.*, \"||;s|\".*||;s|:||g;s|\(.\)|\1 |g'`
SOPTS=$((for i in $OPTS; do echo $i; done) | sort)
LOPTS=$(grep "^        { \"" dvblast.c | sed -e 's|.*{ \"||;s|".*||')
FOPTS=""
MANSYN="$(grep ^\\[ dvblast.1 | xargs echo)"

MANOPTS=$(sed -e 's|\\||g' dvblast.1 | grep ^fB | sed -e 's|^fB-||;s|,||;s|fR||g;s|fR||g;s|fB||g;s| <.*||;s| --| |')
SUSAGE="$(
	(grep -A 20 'msg_Raw( NULL, \"Usage: ' dvblast.c | while read LINE
	do
		if [ "$LINE" = "" ]; then
			break
		fi
		echo "$LINE" | sed -e 's|.* dvblast ||;s|\"||g;s|);||g'
	done) | xargs echo
)"

echo -en "Short options that are free to use:\n    "
for i in $(echo {A..Z}) $(echo {a..z}) $(echo {0..9})
do
	echo $OPTS | grep -q $i 2>/dev/null
	if [ $? != 0 ]
	then
		echo -n $i
		FOPTS="$FOPTS $i"
	fi
done
echo

echo -en "Options that are not process in dvblast.c:\n    "
#AOPTS="$FOPTS $SOPTS"
AOPTS="$SOPTS"
for i in $AOPTS
do
	grep -q "case '$i'" dvblast.c 2>/dev/null
	[ $? != 0 ] && echo -n $i
done
echo

echo -en "Options that are not defined along long opts dvblast.c:\n    "
for i in $AOPTS
do
	grep -q "NULL, '$i' }," dvblast.c 2>/dev/null
	[ $? != 0 ] && echo -n $i
done
echo

echo -en "No detailed help in dvblast.c for short options:\n    "
for i in $AOPTS
do
	grep -q "msg_Raw( NULL, \"  -$i" dvblast.c 2>/dev/null
	[ $? != 0 ] && echo -n $i
done
echo

echo -en "Not mentioned in dvblast.c usage:\n    "
for i in $AOPTS
do
	echo "$SUSAGE" | grep -q "\-$i" 2>/dev/null
	[ $? != 0 ] && echo -n $i
done
echo

echo -en "Missing description in dvblast man page:\n    "
for i in $AOPTS
do
	grep -q "^\\\fB\\\-$i\\\fR, " dvblast.1 2>/dev/null
	[ $? != 0 ] && echo -n $i
done
echo

echo -en "Not mentioned in dvblast man page synopsis:\n    "
for i in $AOPTS
do
	echo "$MANSYN" | grep -q "fI-$i" 2>/dev/null
	[ $? != 0 ] && echo -n $i
done
echo

echo "No detailed help in dvblast.c for long options:"
for i in $LOPTS
do
	grep -q "msg_Raw( NULL, \"  -. --$i" dvblast.c 2>/dev/null
	[ $? != 0 ] && echo "    $i"
done
echo

echo "Missing description in dvblast man page:"
for i in $LOPTS
do
	sed -e 's|\\||g' dvblast.1 | grep -q "fB--$i"
	[ $? != 0 ] && echo "    $i"
done
echo

echo "$MANOPTS" | while read s l
do
	if [ "$(echo -n "$s" | wc -c)" != 1 ]
	then
		echo "Short MAN option error: \"$s $l\""
	else
		echo $AOPTS | grep -q $s
		[ $? != 0 ] && echo "Unknown option described in MAN: $s"
	fi
	if [ "$l" = "" ]
	then
		echo "Missing long MAN option: \"$s $l\""
	else
		echo $LOPTS | grep -q $l
		[ $? != 0 ] && echo "Unknown option described in MAN: $l"
	fi
done
