#!/bin/bash


# Prompt for yes or no answer - returns non-zero for no
_getyn()
{
        while   echo -n "$* (y/n) ">&2
        do      read yn rest
                case $yn in
                [yY])   return 0                      ;;
                [nN])   return 1                      ;;
                *)      echo "Please answer y or n" >&2 ;;
                esac
        done
}

# run README file without looping
_read_readme()
{
	if [ ! -f README ]
	then
		echo "*** Missing README file ***"
		return
	fi
	if [ ! -x README ]
	then
		chmod +x README
	fi
	README QUICKLY
}

_show_menu1()
{
	echo " "
	echo "               MAIN MENU"
	echo " "
	echo "1) read README file"
	echo "2) check MANIFEST"
	echo "3) run makes"
	echo "4) run tests, check tests"
	echo ":-)"
	echo "10) verify files"
	echo "11) tour package"
	echo "12) save validated tests"
	echo "13) clean package"
	echo "14) create new archive file"
	echo ":-)"
	echo "h) help"
	echo "q) quit program"
	echo " "
	echo -n "Select then press <ENTER>: "
}

_do_menu1()
{
	local NOWPICK
	local REST

	NOWPICK=$1
	case $NOWPICK in
	1)
		_read_readme
		;;
	2)
		$AGENTS/manifest.bsh
		;;
	3)
		(cd src.utl; make)
		(cd src.asm; make)
		;;
	4)
		(cd tests; make)
		(cd tests; $AGENTS/comptests.bsh)
		;;
	10)
		$AGENTS/verifier.bsh -top
		(cd src.asm; $AGENTS/verifier.bsh src.asm)
		(cd src.utl; $AGENTS/verifier.bsh src.utl)
		(cd inc; $AGENTS/verifier.bsh inc)
		(cd bin; $AGENTS/verifier.bsh bin)
		(cd doc; $AGENTS/verifier.bsh doc)
		(cd legal; $AGENTS/verifier.bsh legal)
		(cd tests; $AGENTS/verifier.bsh tests)
		(cd $AGENTS; $AGENTS/verifier.bsh agents)
		;;
	11)
		$AGENTS/whatisit.bsh -top
		(cd src.asm; $AGENTS/whatisit.bsh src.asm)
		(cd src.utl; $AGENTS/whatisit.bsh src.utl)
		(cd inc; $AGENTS/whatisit.bsh inc)
		(cd bin; $AGENTS/whatisit.bsh bin)
		(cd doc; $AGENTS/whatisit.bsh doc)
		(cd legal; $AGENTS/whatisit.bsh legal)
		(cd tests; $AGENTS/whatisit.bsh tests)
		;;
	12)
		_getyn "Remove old validated tests?" \
		&& (cd tests; make cleanbase)
		(cd tests; make savetests)
		;;
	13)
		_getyn "Clean package?" \
		&& _getyn "*** Are you sure?" && _clean_files
		;;
	14)
		_getyn "Really clean package before archive?" \
		&& _getyn "*** Are you sure?" && _realclean_files
		_getyn "Create manifest for archive?" \
		&& $AGENTS/manifest.bsh create
		_getyn "Proceed creating an archive?" && $AGENTS/newtar.bsh
		;;
	*)
		echo -n "Invalid selection" $NOWPICK ". Please press <ENTER>"
		read REST
	esac
}

_help_menu1()
{
	local REST

	echo " "
	echo "Type q<ENTER> to quit"
	echo "Pick - read README - to review what its all about"
	echo "Pick - run makes - to prepare the whole thing in one shot"
	echo "Pick - check documents - to see manuals and other info"
	echo "Most other selections for touring the overall package"
	echo " "
	echo -n "Please press <ENTER>."
	read REST
}

_clean_files()
{
	(cd src.utl; make clean)
	(cd src.asm; make clean)
	(cd tests; make clean)
}

_realclean_files()
{
	(cd src.utl; make realclean)
	(cd src.asm; make realclean)
	(cd tests; make realclean)
}

_choose_items()
{
	local NOWPICK
	local REST
	local SHOW_MENU
	local DO_MENU
	local HELP_MENU

	SHOW_MENU=$1
	DO_MENU=$2
	HELP_MENU=$3

        while  [ 1 ]
        do
		$SHOW_MENU
	        read NOWPICK REST
                case $NOWPICK in
		"")
			;;
		[hH]*)
			$HELP_MENU
			;;
#                [xX]*)   
#			return 1
#			;;
                [qQ]*)   
			exit 1
			;;
                *)
			$DO_MENU $NOWPICK
			;;
                esac
        done
}





#
# main
#
	if [ -z "$BASH_VERSION" ]
	then
		echo "I want to be bash'd!"
		_getyn "Continue running in this shell anyway?" || exit
	fi
	if [ ! -d agents ]
	then
		echo "Oops, missing critical agents subdirectory."
		exit
	fi
	AGENTS=`cd agents; pwd`
	PACKAGE=`pwd`
	export PACKAGE AGENTS

	while ( _choose_items _show_menu1 _do_menu1 _help_menu1)
	do
		echo " "
	done
