# include	<stdio.h>

# include	"../ingres.h"
# include	"../aux.h"
# include	"../access.h"
# include	"../lock.h"


extern int	Status;

main(argc, argv)
int	argc;
char 	*argv[];
{
	extern struct out_arg	Out_arg;
	register char		**av;
	register char		*q;
	register char		*p;
	int			i;
	int			badf;
	char			style;
	char			*user_ovrd;
	int			mode;
	int			nc;
	extern char		*Parmvect[];
	extern char		*Flagvect[];
	extern char		*Dbpath;

#	ifdef xSTR1
	tTrace(&argc, argv, 'T');
#	endif

	mode = -1;
	badf = 0;

	/*
	**  Scan the argument vector and otherwise initialize.
	*/

	i = initucode(argc, argv, TRUE, NULL, M_SHARE);
	switch (i)
	{
	  case 0:
	  case 5:
		break;

	  case 1:
	  case 6:
		printf("Database %s does not exist\n", Parmvect[0]);
		exit(-1);

	  case 2:
		printf("You are not authorized to access this database\n");
		exit(-1);

	  case 3:
		printf("You are not a valid INGRES user\n");
		exit(-1);

	  case 4:
		printf("No database name specified\n");
		badf++;
		break;

	  default:
		syserr("main: initucode %d", i);
	}

	for (av = Flagvect; (p = *av) != NULL; av++)
	{
		if (p[0] != '-')
			goto badflag;
		switch (p[1])
		{
		  case 'h':		/* do headers on each page */
			mode = -2;
			if (p[2] == 0)
				break;
			if (atoi(&p[2], &Out_arg.linesperpage))
				goto badflag;
			break;

		  case 's':		/* supress headers and footers */
			mode = -3;
			if (p[2] != 0)
				goto badflag;
			break;

		  case 'c':		/* set cNwidth */
			if (atoi(&p[2], &Out_arg.c0width))
			{
			badflag:
				printf("bad flag %s\n", p);
				badf++;
				continue;
			}
			break;

		  case 'i':		/* set iNwidth */
			switch (p[2])
			{

			  case '1':
				if (atoi(&p[3], &Out_arg.i1width))
					goto badflag;
				break;

			  case '2':
				if (atoi(&p[3], &Out_arg.i2width))
					goto badflag;
				break;

			  case '4':
				if (atoi(&p[3], &Out_arg.i4width))
					goto badflag;
				break;

			  default:
				goto badflag;

			}
			break;

		  case 'f':		/* set fNwidth */
			style = p[3];
			switch (style)
			{

			  case 'e':
			  case 'E':
			  case 'f':
			  case 'F':
			  case 'g':
			  case 'G':
			  case 'n':
			  case 'N':
				break;

			  default:
				goto badflag;

			}
			for (q = &p[4]; *q != '.'; q++)
				if (*q == 0)
					goto badflag;
			*q++ = 0;
			switch (p[2])
			{

			  case '4':
				if (atoi(&p[4], &Out_arg.f4width))
					goto badflag;
				if (atoi(q, &Out_arg.f4prec))
					goto badflag;
				Out_arg.f4style = style;
				break;

			  case '8':
				if (atoi(&p[4], &Out_arg.f8width))
					goto badflag;
				if (atoi(q, &Out_arg.f8prec))
					goto badflag;
				Out_arg.f8style = style;
				break;

			  default:
				goto badflag;

			}
			break;

		  case 'v':
			if (p[2] == 0 || p[3] != 0)
				goto badflag;
			Out_arg.coldelim = p[2];
			break;

		  default:
			goto badflag;
		}
	}

	/*
	**  Find end of Parmvect and store mode there
	*/

	for (nc = 1; Parmvect[nc] != NULL; nc++)
		continue;
	Parmvect[nc] = (char *) mode;

	/*
	**  Check for usage errors.
	*/

	if (nc < 2)
	{
		badf++;
		printf("usage:  printr [flags] database relation ...\n");
	}
	if (badf)
	{
		flush();
		exit(-1);
	}

	p = Parmvect[0];	/* data base is first parameter */
	if (chdir(Dbpath) < 0)
		syserr("cannot access data base %s", p);
#	ifdef xTTR2
	if (tTf(1, 0))
		printf("entered database %s\n", Dbpath);
#	endif

	/* initialize access methods (and Admin struct) for user_ovrd test */
	acc_init();

#	ifdef xTTR1
	if (tTf(1, 1))
		printf("printing %s\n", p);
#	endif

	print(nc - 1, &Parmvect[1]);
	flush();
	exit(0);
}



rubproc()
{
	flush();
	exit(0);
}
