=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/lex.c,v retrieving revision 1.5 retrieving revision 1.9 diff -u -p -r1.5 -r1.9 --- OpenXM_contrib2/asir2000/parse/lex.c 2000/08/22 05:04:27 1.5 +++ OpenXM_contrib2/asir2000/parse/lex.c 2000/12/05 01:51:35 1.9 @@ -45,17 +45,15 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/parse/lex.c,v 1.4 2000/08/21 08:31:47 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/lex.c,v 1.8 2000/12/05 01:24:57 noro Exp $ */ #include #include "ca.h" #include "al.h" #include "base.h" #include "parse.h" -#if !defined(THINK_C) #include #include -#endif #include "y.tab.h" extern IN asir_infile; @@ -399,6 +397,22 @@ yylex() return ( c ); } +void purge_stdin() +{ +#if defined(__FreeBSD__) + fpurge(stdin); +#elif defined(linux) + stdin->_IO_read_end = stdin->_IO_read_base; + stdin->_IO_read_ptr = stdin->_IO_read_base; +#elif defined(sparc) || defined(__alpha) || defined(__SVR4) || defined(mips) + stdin->_ptr = stdin->_base; stdin->_cnt = 0; +#elif defined(VISUAL) + w_purge_stdin(); +#else +--->FIXIT +#endif +} + static int skipspace() { int c,c1; @@ -541,7 +555,11 @@ static int Getc() { if ((c = Egetc(asir_infile->fp)) == EOF) if ( NEXT(asir_infile) ) { closecurrentinput(); - c = Getc(); + /* if the input is the top level, generate error */ + if ( !NEXT(asir_infile) ) + error("end-of-file detected during parsing"); + else + c = Getc(); break; } else if ( read_exec_file || do_file ) asir_terminate(2);