![]() ![]() | ![]() |
version 1.7, 2000/12/01 04:34:01 | version 1.12, 2000/12/22 10:03:32 | ||
---|---|---|---|
|
|
||
* 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.6 2000/11/13 01:48:13 noro Exp $ | * $OpenXM: OpenXM_contrib2/asir2000/parse/lex.c,v 1.11 2000/12/18 01:28:27 noro Exp $ | ||
*/ | */ | ||
#include <ctype.h> | #include <ctype.h> | ||
#include "ca.h" | #include "ca.h" | ||
#include "al.h" | #include "al.h" | ||
#include "base.h" | #include "base.h" | ||
#include "parse.h" | #include "parse.h" | ||
#if !defined(THINK_C) | |||
#include <sys/types.h> | #include <sys/types.h> | ||
#include <sys/stat.h> | #include <sys/stat.h> | ||
#endif | #if defined(VISUAL) | ||
#include "ytab.h" | |||
#else | |||
#include "y.tab.h" | #include "y.tab.h" | ||
#endif | |||
extern IN asir_infile; | extern IN asir_infile; | ||
extern struct oTKWD kwd[]; | extern struct oTKWD kwd[]; | ||
|
|
||
extern int main_parser; | extern int main_parser; | ||
extern char *parse_strp; | extern char *parse_strp; | ||
extern int recv_intr; | |||
static int skipspace(); | static int skipspace(); | ||
static int Getc(); | static int Getc(); | ||
|
|
||
#elif defined(linux) | #elif defined(linux) | ||
stdin->_IO_read_end = stdin->_IO_read_base; | stdin->_IO_read_end = stdin->_IO_read_base; | ||
stdin->_IO_read_ptr = stdin->_IO_read_base; | stdin->_IO_read_ptr = stdin->_IO_read_base; | ||
#elif defined(sparc) || defined(__alpha) || defined(__SVR4) || defined(mips) | #elif defined(VISUAL_LIB) | ||
stdin->_ptr = stdin->_base; stdin->_cnt = 0; | |||
#elif defined(VISUAL) | |||
w_purge_stdin(); | w_purge_stdin(); | ||
#elif defined(sparc) || defined(__alpha) || defined(__SVR4) || defined(mips) || defined(VISUAL) | |||
stdin->_ptr = stdin->_base; stdin->_cnt = 0; | |||
#else | #else | ||
--->FIXIT | --->FIXIT | ||
#endif | #endif | ||
|
|
||
if ( fp ) { | if ( fp ) { | ||
c = getc(fp); | c = getc(fp); | ||
#if defined(VISUAL) | |||
if ( recv_intr ) { | |||
#include <signal.h> | |||
if ( recv_intr == 1 ) { | |||
recv_intr = 0; | |||
int_handler(SIGINT); | |||
} else { | |||
recv_intr = 0; | |||
ox_usr1_handler(0); | |||
} | |||
} | |||
#endif | |||
if ( c == EOF ) | if ( c == EOF ) | ||
return c; | return c; | ||
if ( asir_infile->encoded ) | if ( asir_infile->encoded ) | ||
|
|
||
int c; | int c; | ||
if ( main_parser ) { | if ( main_parser ) { | ||
#if FEP | |||
if ( do_fep && isatty(fileno(asir_infile->fp)) ) | |||
while ( 1 ) { | |||
if ((c = readline_getc()) == EOF) | |||
if ( NEXT(asir_infile) ) { | |||
closecurrentinput(); | |||
c = Getc(); | |||
break; | |||
} else if ( read_exec_file || do_file ) | |||
asir_terminate(1); | |||
else { | |||
if ( asir_infile->fp ) | |||
clearerr(asir_infile->fp); | |||
} | |||
else | |||
break; | |||
} | |||
else | |||
#endif | |||
while ( 1 ) { | while ( 1 ) { | ||
if ((c = Egetc(asir_infile->fp)) == EOF) | if ((c = Egetc(asir_infile->fp)) == EOF) | ||
if ( NEXT(asir_infile) ) { | if ( NEXT(asir_infile) ) { | ||
closecurrentinput(); | 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; | break; | ||
} else if ( read_exec_file || do_file ) | } else if ( read_exec_file || do_file ) | ||
asir_terminate(2); | asir_terminate(2); | ||
|
|
||
static void Ungetc(c) { | static void Ungetc(c) { | ||
if ( main_parser ) { | if ( main_parser ) { | ||
#if FEP | |||
if ( do_fep && isatty(fileno(asir_infile->fp)) ) | |||
readline_ungetc(); | |||
else | |||
#endif | |||
Eungetc(c,asir_infile->fp); | Eungetc(c,asir_infile->fp); | ||
if ( echoback ) | if ( echoback ) | ||
fputc('',asir_out); | fputc('',asir_out); | ||
|
|
||
*s++ = c; | *s++ = c; | ||
*s = 0; | *s = 0; | ||
} | } | ||
#if FEP | |||
static char *readline_line; | |||
static int readline_nc,readline_index; | |||
char *readline_console(); | |||
int readline_getc() | |||
{ | |||
char buf[BUFSIZ]; | |||
if ( !readline_nc ) { | |||
if ( readline_line ) | |||
free(readline_line); | |||
sprompt(buf); | |||
readline_line = readline_console(buf); | |||
readline_nc = strlen(readline_line); | |||
readline_index = 0; | |||
} | |||
readline_nc--; | |||
return readline_line[readline_index++]; | |||
} | |||
void readline_ungetc() | |||
{ | |||
readline_nc++; readline_index--; | |||
} | |||
char *readline_console(prompt) | |||
char *prompt; | |||
{ | |||
char *line; | |||
int exp_result; | |||
char *expansion; | |||
while ( 1 ) { | |||
line = (char *)readline(prompt); | |||
if ( line && *line ) { | |||
using_history(); | |||
exp_result = history_expand(line,&expansion); | |||
if ( !exp_result ) { | |||
free(expansion); | |||
for ( ; isspace(*line); line++ ); | |||
add_history(line); | |||
break; | |||
} else if ( exp_result > 0 ) { | |||
free(line); | |||
line = expansion; | |||
break; | |||
} | |||
} | |||
} | |||
return line; | |||
} | |||
#endif |