/*	main.c

	Main program and command-line options
*/

#include "main.h"
#include "mesg.h"
#include "ite.h"

char	*myname;		/* Name of this command */
char	*source = "stdin";	/* source file name */
FILE	*dotfile = 0;		/* dot graph output */
int	dotfilled = 0;		/* dot nodes filled? */
FILE	*infile = 0;		/* input file */
FILE	*outfile = 0;		/* output file */
int	verbose = 0;		/* verbosity level */

int
main(int argc,
char **argv)
{
	register int i;

	myname = argv[0];
	infile = stdin;
	outfile = stdout;

	for (i=1; i<argc; ++i) {
		register char *p = argv[i];
		register int onoroff = 0;

		switch (*p) {
		case '-':
		case '+':
			onoroff = (*p == '+');
			while (*(++p)) {
				switch (*p) {
				case 'b':
					if (onoroff) {
						ite1 = 1;
						bitp = 2;
					} else {
						ite1 = NOTITE;
						bitp = 1;
					}
					break;
				case 'f':
					dotfilled = onoroff;
					break;
				case 'g':
					if ((*(argv[++i]) == '-') &&
					    (*(argv[i] + 1) == '0')) {
						dotfile = stdout;
					} else {
						dotfile = fopen(argv[i], "w");
						if (dotfile == 0) {
							sprintf(mesg,
								"cannot open/create dot output file %s",
								argv[i]);
							error(mesg);
						}
					}
					break;
				case 'i':
					if ((*(argv[++i]) == '-') &&
					    (*(argv[i] + 1) == '0')) {
						infile = stdin;
						source = "stdin";
					} else {
						infile = fopen(argv[i], "r");
						if (infile == 0) {
							sprintf(mesg,
								"cannot read input file %s",
								argv[i]);
							error(mesg);
						}
					}
					break;
				case 'o':
					if ((*(argv[++i]) == '-') &&
					    (*(argv[i] + 1) == '0')) {
						outfile = stdout;
					} else {
						outfile = fopen(argv[i], "w");
						if (outfile == 0) {
							sprintf(mesg,
								"cannot open/create output file %s",
								argv[i]);
							error(mesg);
						}
					}
					break;
				case 'v':
					verbose += (onoroff ? 1 : -1);
					break;
				case '-':
				case '+':
					onoroff = (*p == '+');
					break;
				default:
					fprintf(stderr,
"Usage: %s {args}\n"
"-b      Turn off Bryant normal form (i.e., use Karplus normal form)\n"
"+f      Graph nodes should be filled (outline by default)\n"
"-g file Graph in dot format to file (- for stdout)\n"
"-i file Read input from (- for stdin, which is the default)\n"
"-o file Output to file (- for stdout)\n"
"+v      Make more (-v for less) verbose messages\n"
"file    Read input from file (stdin is default)\n",
						myname);
					exit(1);
				}
			}
			break;
		default:
			fopen(argv[++i], "r");
			if (infile == 0) {
				sprintf(mesg,
					"cannot open input file %s",
					argv[i]);
				error(mesg);
			}
			source = argv[i];
		}
	}

	/* Parse input and generate output */
	prog();
}
