#include	<stdio.h>
#include	<stdlib.h>
#include	<string.h>
#include	<ctype.h>
#include	<heap.cf>

#include	"tb.h"

TBCFG	TBcfg;

int		main(int argc, char **argv)
{
#ifdef	__HIGHC__
	Init_allocated_storage = 0;
#endif

#if	0
	/* memory test */
	malloc(20 * 1024 * 1024);
#endif

	TBcfg.flags     =   0;
	TBcfg.xsTest    = 256;
	TBcfg.ysTest    = 192;
	TBcfg.looptime  =   2;
	TBcfg.listctrl  = NULL;
	TBcfg.fpTxt     = stdout;
	TBcfg.ttlkey[0] = '\0';

	{
		int				i;
		const char	   *fn = NULL;

		for ( i = 1; i < argc; ++i )
		{
			const char	   *s;

			s = argv[i];
			if ( *s == '-' )
			{
				enum _search_key
				{
					_MAXSCREEN,
					_NO_MR    ,
					_NO_HR    ,
					_NO_FC    ,
					_LOOPTIME ,
					_KEYNAME  ,
				};
				static SEARCHKEYTBL	tbl[] =
				{
					{"key"      , _KEYNAME   },
					{"keyname"  , _KEYNAME   },
					{"looptime" , _LOOPTIME  },
					{"maxscreen", _MAXSCREEN },
					{"nofc"     , _NO_FC     },
					{"nohr"     , _NO_HR     },
					{"nomr"     , _NO_MR     },
				};

				++s;
				switch ( tb_search_key(s,tbl,sizeof(tbl)/sizeof(*tbl)) )
				{
					case _MAXSCREEN:
						TBcfg.flags |= TBFLAGS_MAXSCREEN;
						break;
					case _NO_MR:
						TBcfg.flags |= TBFLAGS_IGNORE_MR;
						break;
					case _NO_HR:
						TBcfg.flags |= TBFLAGS_IGNORE_HR;
						break;
					case _NO_FC:
						TBcfg.flags |= TBFLAGS_IGNORE_FC;
						break;
					case _LOOPTIME:
						if ( i + 1 < argc && argv[i+1][0] != '-' )
						{
							int		t;

							s = argv[++i];
							if ( (t = atoi(s)) > 0 )
								TBcfg.looptime = t;
						}
						break;
					case _KEYNAME:
						if ( i + 1 < argc && argv[i+1][0] != '-' )
						{
							s = argv[++i];
							strncpy( TBcfg.ttlkey, s, sizeof(TBcfg.ttlkey));
						}
						break;
					default:
						return (1);	/* error */
				}
			} else
			{
				if ( fn == NULL )
					fn = s;
			}
		}

		if ( fn != NULL )
		{
			FILE	*fp;

			if ( (fp = fopen(fn,"a")) == NULL )
				return (1);	/* error */
			TBcfg.fpTxt = fp;
		}
	}

	tb_main();

	if ( TBcfg.fpTxt != stdout )
		fclose(TBcfg.fpTxt);

	return (0);
}
