[net.nlang.greek] GRK distribution: file main.c -- file 4 of 6

kateveni@Shasta (04/21/84)

From: Manolis Katevenis <kateveni@Shasta>
#include <stdio.h>

int  curarg,	/* index into argv[] for argument (file) currently
		 *  under processing */
     maxarg;	/* the maximum value that curarg can take */
char **g_argv;	/* global (external) version of argv[] */

main(argc, argv)
int argc; char *argv[];
{ int nofiles;		/* boolean flag */

	curarg = 0 ;	/* this is BEFORE processing of the first
			 *  argument (file) has begun */
	maxarg = argc-1 ;
	g_argv = argv ;

	nofiles = yywrap() ;	/* open first argument (file), or do
				 *  nothing if no arguments exist */
	if ( maxarg>0 && nofiles )
	  { fprintf(stderr, "grk: all arguments were bad -- quit.\n");
	    exit(1);
	  }
	yylex() ;	/* call the LEX-scanner; IT will call yywrap()
			 *  when each end-of-file is reached */
}

yywrap()
{
	if ( curarg++ < maxarg )  /* more file(s) to be opened */
	  { if ( freopen(g_argv[curarg], "r", stdin) != NULL )
			/* default LEX-scanner reads from standard-
			 *  input; thus, we "re-open" stdin -- the
			 *  alternative would be to redefine yyin */
		return(0);	/* successful opening -- else: */
	    fprintf(stderr, "grk: can't open %s -- discarded it.\n",
				g_argv[curarg] );
	    return(yywrap());	/* try to open the next one */
	  }
	else			/* no more files to be opened */
	    return(1);
}