#define LEX
/*** Just added by Bub ***/

# include stdio.h
# define U(x) x
# define NLSTATE yyprevious=YYNEWLINE
# define BEGIN yybgin = yysvec + 1 +
# define INITIAL 0
# define YYLERR yysvec
# define YYSTATE (yyestate-yysvec-1)
# define YYOPTIM 1
# define YYLMAX BUFSIZ
# define output(c) putc(c,yyout)
# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
# define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
# define yymore() (yymorfg=1)
# define ECHO fprintf(yyout, "%s",yytext)
# define REJECT { nstr = yyreject(); goto yyfussy;}
int yyleng; extern char yytext[];
int yymorfg;
extern char *yysptr, yysbuf[];
int yytchar;

/*** The VAX doesn't like this declaration..... Lets try.... (bub) ***/
/*FILE *yyin = {stdin}, *yyout = {stdout};*/
#define yyin stdin
#define yyout stdout

extern int yylineno;
struct yysvf { 
	struct yywork *yystoff;
	struct yysvf *yyother;
	int *yystops;};
struct yysvf *yyestate;
extern struct yysvf yysvec[], *yybgin;
	/* next error will still return 1 by default */
#include "y-tab.h"
#define FLEX_SCANNER
#include "lint.h"
#include <string.h>
#include "lnode.h"
#include "config.h"

int current_line;
int total_lines;	/* Used to compute average compiled lines/s */
char *current_file;
extern char *argument_name;
int number(), lookup_table(), string(), atoi();

/*
 * Flex doesn't handle negative characters, but this change will at least
 * not crash the game.
 */
#ifdef YY_FATAL_ERROR
#undef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) \
      { \
      fputs( msg, stderr ); \
      putc( '\n', stderr ); \
      error(msg); \
      }
#endif

#ifdef FLEX
#define yywrap() 1
#endif

/*
 * using a lookup table cuts the size of the lexer down
 */
struct tl {
      char *name;
      int ret_val;
};
static struct tl table[]  = {
{"remote_command"	, F_REMOTE_COMMAND },
{"ls"			, F_LS },
{"cat"			, F_CAT },
{"grep"			, F_GREP },
{"rm"			, F_RM },
{"log_file"		, F_LOG_FILE },
{"else"			, F_ELSE },
{"reallocate"		, F_REALLOCATE },
{"index"		, F_INDEX },
{"searcha"		, F_SEARCHA },
{"in_editor"		, F_IN_EDITOR },
{"contents"		, F_CONTENTS },
{"find_living"		, F_FIND_LIVING },
{"find_player"		, F_FIND_PLAYER },
{"previous_object"	, F_PREVIOUS_OBJECT },
{"inherit"		, F_INHERIT },
{"tell_object"		, F_TELL_OBJECT },
{"query_host_name"	, F_QUERY_HOST_NAME },
{"tail"			, F_TAIL },
{"file_name"		, F_FILE_NAME },
{"query_verb"		, F_QUERY_VERB },
{"this_verb"		, F_QUERY_VERB },
{"snoop"		, F_SNOOP },
{"input_to"		, F_INPUT_TO },
{"rmdir"		, F_RMDIR },
{"mkdir"		, F_MKDIR },
{"crypt"		, F_CRYPT },
{"first_inventory"	, F_FIRST_INVENTORY },
{"regcomp"		, F_REGCOMP },
{"regexec"		, F_REGEXEC },
{"transfer"		, F_TRANSFER },
{"next_inventory"	, F_NEXT_INVENTORY },
{"string"		, F_STRING_DECL },
{"shout"			, F_SHOUT },
{"sscanf"		, F_SSCANF },
{"extract"		, F_EXTRACT },
{"ed"			, F_ED },
{"localcmd"		, F_LOCALCMD },
{"swap"			, F_SWAP },
{"explode"		, F_EXPLODE },
{"break"			, F_BREAK },
{"intp"			, F_INTP },
{"pointerp"		, F_POINTERP },
{"objectp"		, F_OBJECTP },
{"stringp"		, F_STRINGP },
{"users"			, F_USERS },
{"ctime"			, F_CTIME },
{"disable_commands"	, F_DISABLE_COMMANDS },
{"allocate"		, F_ALLOCATE },
{"combine_free_list"	, F_COMBINE_FREE_LIST },
{"continue"		, F_CONTINUE },
{"while"			, F_WHILE },
{"capitalize"		, F_CAPITALIZE },
{"living"		, F_LIVING },
{"interactive"		, F_INTERACTIVE },
{"lower_case"		, F_LOWER_CASE },
{"set_heart_beat"	, F_SET_HEART_BEAT },
{"strlen"		, F_STRLEN },
{"say"			, F_SAY },
{"tell_room"		, F_TELL_ROOM },
{"find_object"		, F_FIND_OBJECT },
{"add_worth"		, F_ADD_WORTH },
{"time"			, F_TIME },
{"create_wizard"		, F_CREATE_WIZARD },
{"destruct"		, F_DESTRUCT },
{"static"		, F_STATIC },
{"environment" 		, F_ENVIRONMENT },
{"save_object"		, F_SAVE_OBJECT },
{"enable_commands"	, F_ENABLE_COMMANDS },
{"sizeof"		, F_SIZEOF },
{"random" 		, F_RANDOM },
{"restore_object"	, F_RESTORE_OBJECT },
{"this_object"		, F_THIS_OBJECT },
{"clone_object"		, F_CLONE_OBJECT },
{"this_player"		, F_THIS_PLAYER },
{"if"			, F_IF },
{"status"		, F_STATUS },
{"object"		, F_STATUS },
{"return"		, F_RETURN },
{"write"			, F_WRITE },
{"add_verb"		, F_ADD_VERB },
{"add_xverb"		, F_ADD_XVERB },
{"add_adj"		, F_ADD_ADJ },
{"add_subst"		, F_ADD_SUBST },
{"add_action"		, F_ADD_ACTION },
{"move_object"		, F_MOVE_OBJECT },
{"present"		, F_PRESENT },
{"call_out"		, F_CALL_OUT },
{"remove_call_out"	, F_REMOVE_CALL_OUT },
{"find_call_out"		, F_FIND_CALL_OUT },
{"creator"		, F_CREATOR },
{"caller"		, F_CALLER },
{"query_ip_number"	, F_QUERY_IP_NUMBER },
{"command"		, F_COMMAND },
{"set_light"		, F_SET_LIGHT },
{"int"			, F_INT },
{"call_other"		, F_CALL_OTHER },
{"shutdown"		, F_SHUTDOWN },
{"typeof"		, F_TYPEOF },
{"cp"			, F_CP },
{"rename"		, F_RENAME },
{"read_file"		, F_READ_FILE },
{"query_snoop"		, F_QUERY_SNOOP },
{"write_file"   	, F_WRITE_FILE },
{"file_size"    	, F_FILE_SIZE },
{"parse_command"     	, F_PARSE_COMMAND },
{"implode"   		, F_IMPLODE },
{"query_idle"   	, F_QUERY_IDLE },
{"do"			, F_DO },
{"for"	 		, F_FOR },
{"filter_objects" 	, F_FILTER_OBJECTS },
{"query_load_average" 	, F_QUERY_LOAD_AVERAGE },
{"catch"		, F_CATCH },
{"throw"		, F_THROW },
{"set_bit"	    	, F_SET_BIT },
{"clear_bit"   		, F_CLEAR_BIT },
{"test_bit" 		, F_TEST_BIT },
{"notify_fail" 		, F_NOTIFY_FAIL },
{"set_living_name"      , F_SET_LIVING_NAME },
{ 0, 0}
 };

extern char *local_names[];
extern int current_number_of_locals;

extern char *string_copy();
void pre_processor_info();
# define YYNEWLINE 10
yylex(){
int nstr; extern int yyprevious;
while((nstr = yylook()) >= 0)
yyfussy: switch(nstr){
case 0:
if(yywrap()) return(0); break;
case 1:
		{ return ';'; }
break;
case 2:
		{ return '('; }
break;
case 3:
		{ return ')'; }
break;
case 4:
		{ return ','; }
break;
case 5:
		{ return '{'; }
break;
case 6:
		{ return '}'; }
break;
case 7:
		{ return F_INC; }
break;
case 8:
		{ return F_DEC; }
break;
case 9:
		{ return '?'; }
break;
case 10:
		{ return ':'; }
break;
case 11:
		{ return '~'; }
break;
case 12:
		{ return F_LAND; }
break;
case 13:
		{ return '&'; }
break;
case 14:
		{ return F_AND_EQ; }
break;
case 15:
		{ return F_LOR; }
break;
case 16:
		{ return '|'; }
break;
case 17:
		{ return F_OR_EQ; }
break;
case 18:
		{ return '^'; }
break;
case 19:
		{ return F_XOR_EQ; }
break;
case 20:
		{ return F_LSH; }
break;
case 21:
		{ return F_LSH_EQ; }
break;
case 22:
		{ return F_RSH; }
break;
case 23:
		{ return F_RSH_EQ; }
break;
case 24:
		{ return F_NOT; }
break;
case 25:
		{ return F_ARROW; }
break;
case 26:
		{ return '='; }
break;
case 27:
		{ return '-'; }
break;
case 28:
		{ return F_SUB_EQ; }
break;
case 29:
		{ return '+'; }
break;
case 30:
		{ return F_ADD_EQ; }
break;
case 31:
		{ return '*'; }
break;
case 32:
		{ return F_MULT_EQ; }
break;
case 33:
		{ return '%'; }
break;
case 34:
		{ return F_MOD_EQ; }
break;
case 35:
		{ return '/'; }
break;
case 36:
		{ return F_DIV_EQ; }
break;
case 37:
		{ return '<'; }
break;
case 38:
		{ return '>'; }
break;
case 39:
		{ return F_GE; }
break;
case 40:
		{ return F_LE; }
break;
case 41:
		{ return F_EQ; }
break;
case 42:
		{ return F_NE; }
break;
case 43:
		{ return F_COLON_COLON; }
break;
case 44:
  { pre_processor_info(yytext); }
break;
case 45:
{ return '['; }
break;
case 46:
{ return ']'; }
break;
case 47:
  { return dec(yytext); }
break;
case 48:
  { return hex(yytext); }
break;
case 49:
  { return oct(yytext); }
break;
case 50:
{ yylval.lnode = (struct lnode *)alloc_lnode_number(F_NUMBER,
							    yytext[1]);
          return F_NUMBER; }
break;
case 51:
	{ return lookup_table(yytext); }
break;
case 52:
{ return string(yytext); }
break;
case 53:
	{ break; }
break;
case 54:
{ current_line++;
 	  if (current_line & L_MASK) {
 	      yyerror("Too many lines.\n");
 	      current_line = 0;
 	  }
	total_lines++;
 	}
break;
case 55:
{ char buff[100]; sprintf(buff, "Illegal character '%c'", yytext[0]);
	  yyerror(buff); }
break;
case -1:
break;
default:
fprintf(yyout,"bad switch yylook %d",nstr);
} return(0); }
/* end of yylex */

extern YYSTYPE yylval;

#ifdef LEX
int yywrap() { return 1; }
#endif

int lookup_table(str)
    char *str;
{
    int i;

    for (i=0; table[i].name; i++) {
        if (*str != table[i].name[0]) continue;
        if (strcmp(str, table[i].name) == 0) return(table[i].ret_val);      
    }
    for (i=current_number_of_locals-1; i>=0; i--) {
	if (strcmp(local_names[i], str) == 0) {
	    yylval.lnode = (struct lnode *)alloc_lnode_number(F_LOCAL_NAME, i);
	    return F_LOCAL_NAME;
	}
    }
    if (argument_name && strcmp(str, argument_name) == 0)
	return F_ARGUMENT;
    yylval.string = string_copy(str);
    return F_IDENTIFIER;
}

/*
 * debugging, gives the name of a single.
 */

static char cbuf[100];

char * cmdname(c)
int c;
{
    int i;

    switch (c) {
	case F_LOCAL_NAME: return "Local var def";
	case F_ARGUMENT:   return "First Argument";
	}

    for (i=0; table[i].name; i++) {
        if (c == table[i].ret_val) return table[i].name;
    }
    sprintf(cbuf, "Identifier? (%d)", c);
    return cbuf;
}
    
int string(str)
    char *str;
{
    char *p;

    p = (char *)string_copy(str);
    yylval.string = p;
    for (str++; str[1] != '\0'; str++, p++) {
	if (str[0] == '\\' && str[1] == 'n') {
	    *p = '\n';
	    str++;
	} else if (str[0] == '\\' && str[1] == 't') {
	    *p = '\t';
	    str++;
	} else if (str[0] == '\\' && str[1] == '"') {	/* LA */
	    *p = '"';					/* LA */
	    str++;					/* LA */
	    if (!str[1]) {
		yyerror("Unterminated string");
		break;
	    }
 	} else if (str[0] == '\\') {
 	    *p = str[1];
 	    str++;
	} else
	    *p = *str;
    }
    *p = '\0';
    return F_STRING;
}

int dec(str)
    char *str;
{
    int i;

    i = atoi(str);
    return number(i);
}

int hex(str)
    char *str;
{
    int i;

    sscanf(str, "%x", &i);
    return number(i);
}

int oct(str)
    char *str;
{
    int i;

    sscanf(str, "%x", &i);
    return number(i);
}

int number(i)
    int i;
{
    if (i == 0) {
        yylval.lnode = (struct lnode *)alloc_lnode_single(F_CONST0);
	return F_CONST0;
    }
    if (i == 1) {
	yylval.lnode = (struct lnode *)alloc_lnode_single(F_CONST1);
	return F_CONST1;
    }
    yylval.lnode =(struct lnode *)alloc_lnode_number(F_NUMBER, i);
    return F_NUMBER;
}

void start_new_file(f)
    FILE *f;
{
	extern int yyprevious;
#ifdef FLEX
    yy_init = 1;
#endif
#ifdef LEX
    extern int yyprevious;	/* KLUDGE! */
    NLSTATE;
    yysptr = yysbuf;
#endif
    yyin = f;
}

void pre_processor_info(str)
    char *str;
{
    int line,i;
    char file[100];
    if (sscanf(str, "# %d \"%s\"", &line, file) != 2)
	return;
    i = strlen(file);
    if (file[i-1] == '"')
	file[i-1] = '\0';
    free(current_file);
    current_file = string_copy(file);
    current_line = line - 1;
}

/*** VMS doesn't like #ifdef 0 (bub) ***/
#ifdef ZERO0ZERO
#ifdef LEX
void fix_vars()
{
	extern int yyprevious;
	current_line = 0;
	yyprevious = 10;
	yylineno = 1;
	yysptr = yysbuf;
}
#endif
#endif
int yyvstop[] = {
0,

55,
0,

53,
55,
0,

54,
0,

24,
55,
0,

55,
0,

33,
55,
0,

13,
55,
0,

55,
0,

2,
55,
0,

3,
55,
0,

31,
55,
0,

29,
55,
0,

4,
55,
0,

27,
55,
0,

35,
55,
0,

47,
55,
0,

47,
55,
0,

10,
55,
0,

1,
55,
0,

37,
55,
0,

26,
55,
0,

38,
55,
0,

9,
55,
0,

51,
55,
0,

45,
55,
0,

46,
55,
0,

18,
55,
0,

5,
55,
0,

16,
55,
0,

6,
55,
0,

11,
55,
0,

55,
-44,
0,

42,
0,

52,
0,

34,
0,

12,
0,

14,
0,

32,
0,

7,
0,

30,
0,

8,
0,

28,
0,

25,
0,

36,
0,

49,
0,

47,
0,

43,
0,

20,
0,

40,
0,

41,
0,

39,
0,

22,
0,

51,
0,

19,
0,

17,
0,

15,
0,

-44,
0,

44,
0,

52,
0,

50,
0,

48,
0,

21,
0,

23,
0,
0};
# define YYTYPE char
struct yywork { YYTYPE verify, advance; } yycrank[] = {
0,0,	0,0,	1,3,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	1,4,	1,5,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	36,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	1,6,	1,7,	
0,0,	0,0,	1,8,	1,9,	
1,10,	1,11,	1,12,	1,13,	
1,14,	1,15,	1,16,	9,40,	
1,17,	1,18,	1,19,	14,44,	
42,66,	0,0,	65,0,	0,0,	
0,0,	1,19,	0,0,	1,20,	
1,21,	1,22,	1,23,	1,24,	
1,25,	6,35,	1,26,	8,39,	
13,43,	14,45,	9,41,	2,6,	
1,26,	2,34,	16,46,	2,8,	
2,9,	2,10,	2,11,	2,12,	
2,13,	2,14,	2,15,	2,16,	
17,49,	2,17,	20,53,	22,54,	
22,55,	1,26,	16,47,	16,48,	
1,27,	23,56,	1,28,	1,29,	
2,20,	2,21,	2,22,	2,23,	
2,24,	2,25,	7,36,	29,60,	
10,42,	24,57,	24,58,	31,61,	
36,38,	54,68,	7,36,	7,0,	
10,42,	10,0,	18,50,	18,50,	
18,50,	18,50,	18,50,	18,50,	
18,50,	18,50,	58,69,	0,0,	
1,30,	1,31,	1,32,	1,33,	
0,0,	2,27,	0,0,	2,28,	
2,29,	0,0,	0,0,	7,37,	
65,38,	10,42,	19,52,	19,52,	
19,52,	19,52,	19,52,	19,52,	
19,52,	19,52,	19,52,	19,52,	
0,0,	7,36,	7,36,	10,42,	
10,42,	0,0,	18,51,	38,0,	
0,0,	7,36,	0,0,	10,42,	
0,0,	2,30,	2,31,	2,32,	
2,33,	0,0,	7,36,	0,0,	
10,42,	0,0,	31,62,	0,0,	
7,36,	0,0,	10,42,	0,0,	
0,0,	0,0,	0,0,	38,65,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	18,51,	0,0,	
0,0,	7,36,	0,0,	10,42,	
0,0,	7,38,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	0,0,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	38,38,	0,0,	0,0,	
0,0,	26,59,	0,0,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	26,59,	26,59,	26,59,	
26,59,	34,63,	0,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	34,63,	34,64,	50,50,	
50,50,	50,50,	50,50,	50,50,	
50,50,	50,50,	50,50,	0,0,	
0,0,	0,0,	0,0,	51,67,	
51,67,	51,67,	51,67,	51,67,	
51,67,	51,67,	51,67,	51,67,	
51,67,	0,0,	34,63,	0,0,	
0,0,	0,0,	0,0,	0,0,	
51,67,	51,67,	51,67,	51,67,	
51,67,	51,67,	0,0,	0,0,	
34,63,	34,63,	0,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
34,63,	0,0,	0,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	34,63,	0,0,	0,0,	
0,0,	0,0,	0,0,	34,63,	
51,67,	51,67,	51,67,	51,67,	
51,67,	51,67,	0,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
0,0,	0,0,	0,0,	0,0,	
34,63,	0,0,	0,0,	0,0,	
0,0};
struct yysvf yysvec[] = {
0,	0,	0,
yycrank+-1,	0,		0,	
yycrank+-38,	yysvec+1,	0,	
yycrank+0,	0,		yyvstop+1,
yycrank+0,	0,		yyvstop+3,
yycrank+0,	0,		yyvstop+6,
yycrank+4,	0,		yyvstop+8,
yycrank+-101,	0,		yyvstop+11,
yycrank+6,	0,		yyvstop+13,
yycrank+9,	0,		yyvstop+16,
yycrank+-103,	0,		yyvstop+19,
yycrank+0,	0,		yyvstop+21,
yycrank+0,	0,		yyvstop+24,
yycrank+7,	0,		yyvstop+27,
yycrank+8,	0,		yyvstop+30,
yycrank+0,	0,		yyvstop+33,
yycrank+29,	0,		yyvstop+36,
yycrank+23,	0,		yyvstop+39,
yycrank+66,	0,		yyvstop+42,
yycrank+90,	0,		yyvstop+45,
yycrank+28,	0,		yyvstop+48,
yycrank+0,	0,		yyvstop+51,
yycrank+27,	0,		yyvstop+54,
yycrank+32,	0,		yyvstop+57,
yycrank+44,	0,		yyvstop+60,
yycrank+0,	0,		yyvstop+63,
yycrank+146,	0,		yyvstop+66,
yycrank+0,	0,		yyvstop+69,
yycrank+0,	0,		yyvstop+72,
yycrank+42,	0,		yyvstop+75,
yycrank+0,	0,		yyvstop+78,
yycrank+46,	0,		yyvstop+81,
yycrank+0,	0,		yyvstop+84,
yycrank+0,	0,		yyvstop+87,
yycrank+-268,	0,		yyvstop+90,
yycrank+0,	0,		yyvstop+93,
yycrank+-16,	yysvec+7,	0,	
yycrank+0,	0,		yyvstop+95,
yycrank+-145,	yysvec+7,	0,	
yycrank+0,	0,		yyvstop+97,
yycrank+0,	0,		yyvstop+99,
yycrank+0,	0,		yyvstop+101,
yycrank+13,	0,		0,	
yycrank+0,	0,		yyvstop+103,
yycrank+0,	0,		yyvstop+105,
yycrank+0,	0,		yyvstop+107,
yycrank+0,	0,		yyvstop+109,
yycrank+0,	0,		yyvstop+111,
yycrank+0,	0,		yyvstop+113,
yycrank+0,	0,		yyvstop+115,
yycrank+231,	0,		yyvstop+117,
yycrank+243,	0,		0,	
yycrank+0,	yysvec+19,	yyvstop+119,
yycrank+0,	0,		yyvstop+121,
yycrank+48,	0,		yyvstop+123,
yycrank+0,	0,		yyvstop+125,
yycrank+0,	0,		yyvstop+127,
yycrank+0,	0,		yyvstop+129,
yycrank+61,	0,		yyvstop+131,
yycrank+0,	yysvec+26,	yyvstop+133,
yycrank+0,	0,		yyvstop+135,
yycrank+0,	0,		yyvstop+137,
yycrank+0,	0,		yyvstop+139,
yycrank+0,	yysvec+34,	yyvstop+141,
yycrank+0,	0,		yyvstop+143,
yycrank+-44,	yysvec+7,	yyvstop+145,
yycrank+0,	0,		yyvstop+147,
yycrank+0,	yysvec+51,	yyvstop+149,
yycrank+0,	0,		yyvstop+151,
yycrank+0,	0,		yyvstop+153,
0,	0,	0};
struct yywork *yytop = yycrank+356;
struct yysvf *yybgin = yysvec+1;
char yymatch[] = {
00  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,011 ,012 ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
011 ,01  ,'"' ,01  ,01  ,01  ,01  ,01  ,
01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
'0' ,'1' ,'1' ,'1' ,'1' ,'1' ,'1' ,'1' ,
'8' ,'8' ,01  ,01  ,01  ,01  ,01  ,01  ,
01  ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'G' ,
'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,
'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,
'X' ,'G' ,'G' ,01  ,01  ,01  ,01  ,'G' ,
01  ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'G' ,
'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,
'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,'G' ,
'X' ,'G' ,'G' ,01  ,01  ,01  ,01  ,01  ,
0};
char yyextra[] = {
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,1,0,0,0,
0,0,0,0,0,0,0,0,
0};
#ifndef lint
static	char ncform_sccsid[] = "@(#)ncform 1.6 88/02/08 SMI"; /* from S5R2 1.2 */
#endif

int yylineno =1;
# define YYU(x) x
# define NLSTATE yyprevious=YYNEWLINE
char yytext[YYLMAX];
struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
char yysbuf[YYLMAX];
char *yysptr = yysbuf;
int *yyfnd;
extern struct yysvf *yyestate;
int yyprevious = YYNEWLINE;
yylook(){
	register struct yysvf *yystate, **lsp;
	register struct yywork *yyt;
	struct yysvf *yyz;
	int yych, yyfirst;
	struct yywork *yyr;
# ifdef LEXDEBUG
	int debug;
# endif
	char *yylastch;
	/* start off machines */
# ifdef LEXDEBUG
	debug = 0;
# endif
	yyfirst=1;
	if (!yymorfg)
		yylastch = yytext;
	else {
		yymorfg=0;
		yylastch = yytext+yyleng;
		}
	for(;;){
		lsp = yylstate;
		yyestate = yystate = yybgin;
		if (yyprevious==YYNEWLINE) yystate++;
		for (;;){
# ifdef LEXDEBUG
			if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
# endif
			yyt = yystate->yystoff;
			if(yyt == yycrank && !yyfirst){  /* may not be any transitions */
				yyz = yystate->yyother;
				if(yyz == 0)break;
				if(yyz->yystoff == yycrank)break;
				}
			*yylastch++ = yych = input();
			yyfirst=0;
		tryagain:
# ifdef LEXDEBUG
			if(debug){
				fprintf(yyout,"char ");
				allprint(yych);
				putchar('\n');
				}
# endif
			yyr = yyt;
			if ( (int)yyt > (int)yycrank){
				yyt = yyr + yych;
				if (yyt <= yytop && yyt->verify+yysvec == yystate){
					if(yyt->advance+yysvec == YYLERR)	/* error transitions */
						{unput(*--yylastch);break;}
					*lsp++ = yystate = yyt->advance+yysvec;
					goto contin;
					}
				}
# ifdef YYOPTIM
			else if((int)yyt < (int)yycrank) {		/* r < yycrank */
				yyt = yyr = yycrank+(yycrank-yyt);
# ifdef LEXDEBUG
				if(debug)fprintf(yyout,"compressed state\n");
# endif
				yyt = yyt + yych;
				if(yyt <= yytop && yyt->verify+yysvec == yystate){
					if(yyt->advance+yysvec == YYLERR)	/* error transitions */
						{unput(*--yylastch);break;}
					*lsp++ = yystate = yyt->advance+yysvec;
					goto contin;
					}
				yyt = yyr + YYU(yymatch[yych]);
# ifdef LEXDEBUG
				if(debug){
					fprintf(yyout,"try fall back character ");
					allprint(YYU(yymatch[yych]));
					putchar('\n');
					}
# endif
				if(yyt <= yytop && yyt->verify+yysvec == yystate){
					if(yyt->advance+yysvec == YYLERR)	/* error transition */
						{unput(*--yylastch);break;}
					*lsp++ = yystate = yyt->advance+yysvec;
					goto contin;
					}
				}
			if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
# ifdef LEXDEBUG
				if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
# endif
				goto tryagain;
				}
# endif
			else
				{unput(*--yylastch);break;}
		contin:
# ifdef LEXDEBUG
			if(debug){
				fprintf(yyout,"state %d char ",yystate-yysvec-1);
				allprint(yych);
				putchar('\n');
				}
# endif
			;
			}
# ifdef LEXDEBUG
		if(debug){
			fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
			allprint(yych);
			putchar('\n');
			}
# endif
		while (lsp-- > yylstate){
			*yylastch-- = 0;
			if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
				yyolsp = lsp;
				if(yyextra[*yyfnd]){		/* must backup */
					while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
						lsp--;
						unput(*yylastch--);
						}
					}
				yyprevious = YYU(*yylastch);
				yylsp = lsp;
				yyleng = yylastch-yytext+1;
				yytext[yyleng] = 0;
# ifdef LEXDEBUG
				if(debug){
					fprintf(yyout,"\nmatch ");
					sprint(yytext);
					fprintf(yyout," action %d\n",*yyfnd);
					}
# endif
				return(*yyfnd++);
				}
			unput(*yylastch);
			}
		if (yytext[0] == 0  /* && feof(yyin) */)
			{
			yysptr=yysbuf;
			return(0);
			}
		yyprevious = yytext[0] = input();
		if (yyprevious>0)
			output(yyprevious);
		yylastch=yytext;
# ifdef LEXDEBUG
		if(debug)putchar('\n');
# endif
		}
	}
yyback(p, m)
	int *p;
{
if (p==0) return(0);
while (*p)
	{
	if (*p++ == m)
		return(1);
	}
return(0);
}
	/* the following are only used in the lex library */
yyinput(){
	return(input());
	}
yyoutput(c)
  int c; {
	output(c);
	}
yyunput(c)
   int c; {
	unput(c);
	}