![]() ![]() | ![]() |
version 1.42, 2006/09/29 08:58:22 | version 1.46, 2010/08/03 04:34:44 | ||
---|---|---|---|
|
|
||
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, | * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, | ||
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. | * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. | ||
* | * | ||
* $OpenXM: OpenXM_contrib2/asir2000/parse/lex.c,v 1.41 2006/03/05 08:21:59 noro Exp $ | * $OpenXM: OpenXM_contrib2/asir2000/parse/lex.c,v 1.45 2010/04/16 07:13:42 noro Exp $ | ||
*/ | */ | ||
#include <ctype.h> | #include <ctype.h> | ||
#include "ca.h" | #include "ca.h" | ||
|
|
||
#else | #else | ||
#include "y.tab.h" | #include "y.tab.h" | ||
#endif | #endif | ||
#if FEP | |||
#include <readline/readline.h> | |||
#endif | |||
static int Getc(); | static int Getc(); | ||
static void Ungetc(int c); | static void Ungetc(int c); | ||
|
|
||
void purge_stdin() | void purge_stdin() | ||
{ | { | ||
#if defined(__FreeBSD__) | #if defined(__FreeBSD__) || defined(__DARWIN__) | ||
fpurge(stdin); | fpurge(stdin); | ||
#elif defined(linux) | #elif defined(linux) | ||
stdin->_IO_read_end = stdin->_IO_read_base; | stdin->_IO_read_end = stdin->_IO_read_base; | ||
|
|
||
int afternl() { | int afternl() { | ||
int c,ac,i,quote; | int c,ac,i,quote; | ||
char *ptr; | char *ptr,*buf0; | ||
char *av[BUFSIZ]; | char *av[BUFSIZ]; | ||
static int ilevel = 0; | static int ilevel = 0; | ||
char buf[BUFSIZ]; | char buf[BUFSIZ]; | ||
|
|
||
asir_infile->ln++; | asir_infile->ln++; | ||
while ( (c = Getc()) == '#' ) { | while ( (c = Getc()) == '#' ) { | ||
Gets(buf); | Gets(buf); | ||
for ( quote = 0, ptr = buf; *ptr; ptr++ ) | #define LINE "line" | ||
if ( !strncmp(buf,LINE,strlen(LINE)) ) buf0 = buf+strlen(LINE); | |||
else buf0 = buf; | |||
for ( quote = 0, ptr = buf0; *ptr; ptr++ ) | |||
if ( *ptr == '"' ) | if ( *ptr == '"' ) | ||
quote = quote ? 0 : 1; | quote = quote ? 0 : 1; | ||
else if ( quote && (*ptr == ' ') ) | else if ( quote && (*ptr == ' ') ) | ||
*ptr = '_'; | *ptr = '_'; | ||
stoarg(buf,&ac,av); | stoarg(buf0,&ac,av); | ||
if ( ac == 3 ) | if ( ac == 3 ) | ||
if ( (i = atoi(av[2])) == 1 ) | if ( (i = atoi(av[2])) == 1 ) | ||
ilevel++; | ilevel++; | ||
|
|
||
else | else | ||
c = Getc(); | c = Getc(); | ||
break; | break; | ||
} else if ( asir_infile->fp || do_file ) | } else if ( asir_infile->fp || do_file ) { | ||
asir_terminate(2); | |||
else { | |||
if ( asir_infile->fp ) | if ( asir_infile->fp ) | ||
clearerr(asir_infile->fp); | clearerr(asir_infile->fp); | ||
asir_terminate(2); | |||
} else { | |||
error("end-of-line detected during parsing"); | |||
} | } | ||
else | else | ||
break; | break; |