/*
 * This file was generated by the mkinit program.
 */

#include "shell.h"
#include "mystring.h"
#include "init.h"
#include "eval.h"
#include <stdio.h>
#include "input.h"
#include "error.h"
#include <stdlib.h>
#include "options.h"
#include "redir.h"
#include <signal.h>
#include "trap.h"
#include "output.h"
#include "memalloc.h"
#include "var.h"



#undef  ATABSIZE
#define ATABSIZE 39
#undef  YYBISON
#define YYBISON 1
#undef  YYSKELETON_NAME
#define YYSKELETON_NAME "yacc.c"
#undef  YYPURE
#define YYPURE 0
#undef  YYLSP_NEEDED
#define YYLSP_NEEDED 0
#undef  ARITH_NUM
#define ARITH_NUM 258
#undef  ARITH_LPAREN
#define ARITH_LPAREN 259
#undef  ARITH_RPAREN
#define ARITH_RPAREN 260
#undef  ARITH_OR
#define ARITH_OR 261
#undef  ARITH_AND
#define ARITH_AND 262
#undef  ARITH_BOR
#define ARITH_BOR 263
#undef  ARITH_BXOR
#define ARITH_BXOR 264
#undef  ARITH_BAND
#define ARITH_BAND 265
#undef  ARITH_NE
#define ARITH_NE 266
#undef  ARITH_EQ
#define ARITH_EQ 267
#undef  ARITH_LE
#define ARITH_LE 268
#undef  ARITH_GE
#define ARITH_GE 269
#undef  ARITH_GT
#define ARITH_GT 270
#undef  ARITH_LT
#define ARITH_LT 271
#undef  ARITH_RSHIFT
#define ARITH_RSHIFT 272
#undef  ARITH_LSHIFT
#define ARITH_LSHIFT 273
#undef  ARITH_SUB
#define ARITH_SUB 274
#undef  ARITH_ADD
#define ARITH_ADD 275
#undef  ARITH_REM
#define ARITH_REM 276
#undef  ARITH_DIV
#define ARITH_DIV 277
#undef  ARITH_MUL
#define ARITH_MUL 278
#undef  ARITH_BNOT
#define ARITH_BNOT 279
#undef  ARITH_NOT
#define ARITH_NOT 280
#undef  ARITH_UNARYPLUS
#define ARITH_UNARYPLUS 281
#undef  ARITH_UNARYMINUS
#define ARITH_UNARYMINUS 282
#undef  YYFINAL
#define YYFINAL  14
#undef  YYLAST
#define YYLAST   170
#undef  YYNTOKENS
#define YYNTOKENS  28
#undef  YYNNTS
#define YYNNTS  3
#undef  YYNRULES
#define YYNRULES  26
#undef  YYNSTATES
#define YYNSTATES  52
#undef  YYUNDEFTOK
#define YYUNDEFTOK  2
#undef  YYMAXUTOK
#define YYMAXUTOK   282
#undef  YYPACT_NINF
#define YYPACT_NINF -13
#undef  YYTABLE_NINF
#define YYTABLE_NINF -1
#undef  yyerrok
#define yyerrok		(yyerrstatus = 0)
#undef  yyclearin
#define yyclearin	(yychar = YYEMPTY)
#undef  YYEMPTY
#define YYEMPTY		(-2)
#undef  YYEOF
#define YYEOF		0
#undef  YYACCEPT
#define YYACCEPT	goto yyacceptlab
#undef  YYABORT
#define YYABORT		goto yyabortlab
#undef  YYERROR
#define YYERROR		goto yyerrorlab
#undef  YYFAIL
#define YYFAIL		goto yyerrlab
#undef  YYTERROR
#define YYTERROR	1
#undef  YYERRCODE
#define YYERRCODE	256
#undef  YYPOPSTACK
#define YYPOPSTACK   (yyvsp--, yyssp--)
#undef  YY_INT_ALIGNED
#define  YY_INT_ALIGNED short int
#undef  FLEX_SCANNER
#define FLEX_SCANNER
#undef  YY_FLEX_MAJOR_VERSION
#define YY_FLEX_MAJOR_VERSION 2
#undef  YY_FLEX_MINOR_VERSION
#define YY_FLEX_MINOR_VERSION 5
#undef  YY_FLEX_SUBMINOR_VERSION
#define YY_FLEX_SUBMINOR_VERSION 31
#undef  FLEX_BETA
#define FLEX_BETA
#undef  FLEXINT_H
#define FLEXINT_H
#undef  INT8_MIN
#define INT8_MIN               (-128)
#undef  INT16_MIN
#define INT16_MIN              (-32767-1)
#undef  INT32_MIN
#define INT32_MIN              (-2147483647-1)
#undef  INT8_MAX
#define INT8_MAX               (127)
#undef  INT16_MAX
#define INT16_MAX              (32767)
#undef  INT32_MAX
#define INT32_MAX              (2147483647)
#undef  UINT8_MAX
#define UINT8_MAX              (255U)
#undef  UINT16_MAX
#define UINT16_MAX             (65535U)
#undef  UINT32_MAX
#define UINT32_MAX             (4294967295U)
#undef  YY_USE_CONST
#define YY_USE_CONST
#undef  YY_USE_CONST
#define YY_USE_CONST
#undef  yyconst
#define yyconst const
#undef  yyconst
#define yyconst
#undef  YY_NULL
#define YY_NULL 0
#undef  BEGIN
#define BEGIN (yy_start) = 1 + 2 *
#undef  YY_START
#define YY_START (((yy_start) - 1) / 2)
#undef  YYSTATE
#define YYSTATE YY_START
#undef  YY_NEW_FILE
#define YY_NEW_FILE yyrestart(yyin  )
#undef  YY_END_OF_BUFFER_CHAR
#define YY_END_OF_BUFFER_CHAR 0
#undef  YY_BUF_SIZE
#define YY_BUF_SIZE 16384
#undef  YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
#undef  EOB_ACT_CONTINUE_SCAN
#define EOB_ACT_CONTINUE_SCAN 0
#undef  EOB_ACT_END_OF_FILE
#define EOB_ACT_END_OF_FILE 1
#undef  EOB_ACT_LAST_MATCH
#define EOB_ACT_LAST_MATCH 2
#undef  YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
#undef  YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
#undef  YY_BUFFER_NEW
#define YY_BUFFER_NEW 0
#undef  YY_BUFFER_NORMAL
#define YY_BUFFER_NORMAL 1
#undef  YY_BUFFER_EOF_PENDING
#define YY_BUFFER_EOF_PENDING 2
#undef  YY_CURRENT_BUFFER
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
#undef  YY_CURRENT_BUFFER_LVALUE
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
#undef  YY_FLUSH_BUFFER
#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
#undef  yy_new_buffer
#define yy_new_buffer yy_create_buffer
#undef  YY_SKIP_YYWRAP
#define YY_SKIP_YYWRAP
#undef  yytext_ptr
#define yytext_ptr yytext
#undef  YY_DO_BEFORE_ACTION
#define YY_DO_BEFORE_ACTION \
#undef  YY_NUM_RULES
#define YY_NUM_RULES 29
#undef  YY_END_OF_BUFFER
#define YY_END_OF_BUFFER 30
#undef  REJECT
#define REJECT reject_used_but_not_detected
#undef  YY_MORE_ADJ
#define YY_MORE_ADJ 0
#undef  YY_RESTORE_YY_MORE_OFFSET
#define YY_RESTORE_YY_MORE_OFFSET
#undef  YY_NO_UNPUT
#define YY_NO_UNPUT
#undef  INITIAL
#define INITIAL 0
#undef  YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#undef  YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#undef  ECHO
#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
#undef  YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#undef  YY_DECL_IS_OURS
#define YY_DECL_IS_OURS 1
#undef  YY_DECL
#define YY_DECL int yylex (void)
#undef  YY_USER_ACTION
#define YY_USER_ACTION
#undef  YY_BREAK
#define YY_BREAK break;
#undef  YY_RULE_SETUP
#define YY_RULE_SETUP \
#undef  YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#undef  YYTABLES_NAME
#define YYTABLES_NAME "yytables"
#undef  MAXPWD
#define MAXPWD 256
#undef  signal
#define signal bsd_signal
#undef  ALL
#define ALL (E_OPEN|E_CREAT|E_EXEC)
#undef  EV_EXIT
#define EV_EXIT 01		/* exit after evaluating tree */
#undef  EV_TESTED
#define EV_TESTED 02		/* exit status is checked; ignore -e flag */
#undef  EV_BACKCMD
#define EV_BACKCMD 04		/* command executing within back quotes */
#undef  CMDTABLESIZE
#define CMDTABLESIZE 31		/* should be prime */
#undef  ARB
#define ARB 1			/* actual size determined at run time */
#undef  NEWARGS
#define NEWARGS 5
#undef  EOF_NLEFT
#define EOF_NLEFT -99		/* value of parsenleft when EOF pushed back */
#undef  _PATH_DEVNULL
#define _PATH_DEVNULL "/dev/null"
#undef  PROFILE
#define PROFILE 0
#undef  SIGSSIZE
#define SIGSSIZE (sizeof(sigs)/sizeof(sigs[0]))
#undef  MINSIZE
#define MINSIZE 504		/* minimum size of a block */
#undef  DEFINE_OPTIONS
#define DEFINE_OPTIONS
#undef  EOFMARKLEN
#define EOFMARKLEN 79
#undef  OPENBRACE
#define OPENBRACE '{'
#undef  CLOSEBRACE
#define CLOSEBRACE '}'
#undef  EMPTY
#define EMPTY -2		/* marks an unused slot in redirtab */
#undef  signal
#define signal bsd_signal
#undef  sys_signame
#define sys_signame sys_siglist
#undef  S_DFL
#define S_DFL 1			/* default signal handling (SIG_DFL) */
#undef  S_CATCH
#define S_CATCH 2		/* signal is caught */
#undef  S_IGN
#define S_IGN 3			/* signal is ignored (SIG_IGN) */
#undef  S_HARD_IGN
#define S_HARD_IGN 4		/* signal is ignored permenantly */
#undef  S_RESET
#define S_RESET 5		/* temporary - to reset a hard ignored sig */
#undef  OUTBUFSIZ
#define OUTBUFSIZ BUFSIZ
#undef  BLOCK_OUT
#define BLOCK_OUT -2		/* output to a fixed block of memory */
#undef  MEM_OUT
#define MEM_OUT -3		/* output to dynamically allocated memory */
#undef  OUTPUT_ERR
#define OUTPUT_ERR 01		/* error occurred on output */
#undef  TEMPSIZE
#define TEMPSIZE 24
#undef  HAVE_VASPRINTF
#define HAVE_VASPRINTF 1
#undef  VTABSIZE
#define VTABSIZE 39
#undef  VTABSIZE
#define VTABSIZE 517
#undef  ATABSIZE
#define ATABSIZE 39
#undef  YYBISON
#define YYBISON 1
#undef  YYSKELETON_NAME
#define YYSKELETON_NAME "yacc.c"
#undef  YYPURE
#define YYPURE 0
#undef  YYLSP_NEEDED
#define YYLSP_NEEDED 0
#undef  ARITH_NUM
#define ARITH_NUM 258
#undef  ARITH_LPAREN
#define ARITH_LPAREN 259
#undef  ARITH_RPAREN
#define ARITH_RPAREN 260
#undef  ARITH_OR
#define ARITH_OR 261
#undef  ARITH_AND
#define ARITH_AND 262
#undef  ARITH_BOR
#define ARITH_BOR 263
#undef  ARITH_BXOR
#define ARITH_BXOR 264
#undef  ARITH_BAND
#define ARITH_BAND 265
#undef  ARITH_NE
#define ARITH_NE 266
#undef  ARITH_EQ
#define ARITH_EQ 267
#undef  ARITH_LE
#define ARITH_LE 268
#undef  ARITH_GE
#define ARITH_GE 269
#undef  ARITH_GT
#define ARITH_GT 270
#undef  ARITH_LT
#define ARITH_LT 271
#undef  ARITH_RSHIFT
#define ARITH_RSHIFT 272
#undef  ARITH_LSHIFT
#define ARITH_LSHIFT 273
#undef  ARITH_SUB
#define ARITH_SUB 274
#undef  ARITH_ADD
#define ARITH_ADD 275
#undef  ARITH_REM
#define ARITH_REM 276
#undef  ARITH_DIV
#define ARITH_DIV 277
#undef  ARITH_MUL
#define ARITH_MUL 278
#undef  ARITH_BNOT
#define ARITH_BNOT 279
#undef  ARITH_NOT
#define ARITH_NOT 280
#undef  ARITH_UNARYPLUS
#define ARITH_UNARYPLUS 281
#undef  ARITH_UNARYMINUS
#define ARITH_UNARYMINUS 282
#undef  YYFINAL
#define YYFINAL  14
#undef  YYLAST
#define YYLAST   170
#undef  YYNTOKENS
#define YYNTOKENS  28
#undef  YYNNTS
#define YYNNTS  3
#undef  YYNRULES
#define YYNRULES  26
#undef  YYNSTATES
#define YYNSTATES  52
#undef  YYUNDEFTOK
#define YYUNDEFTOK  2
#undef  YYMAXUTOK
#define YYMAXUTOK   282
#undef  YYPACT_NINF
#define YYPACT_NINF -13
#undef  YYTABLE_NINF
#define YYTABLE_NINF -1
#undef  yyerrok
#define yyerrok		(yyerrstatus = 0)
#undef  yyclearin
#define yyclearin	(yychar = YYEMPTY)
#undef  YYEMPTY
#define YYEMPTY		(-2)
#undef  YYEOF
#define YYEOF		0
#undef  YYACCEPT
#define YYACCEPT	goto yyacceptlab
#undef  YYABORT
#define YYABORT		goto yyabortlab
#undef  YYERROR
#define YYERROR		goto yyerrorlab
#undef  YYFAIL
#define YYFAIL		goto yyerrlab
#undef  YYTERROR
#define YYTERROR	1
#undef  YYERRCODE
#define YYERRCODE	256
#undef  YYPOPSTACK
#define YYPOPSTACK   (yyvsp--, yyssp--)
#undef  YY_INT_ALIGNED
#define  YY_INT_ALIGNED short int
#undef  FLEX_SCANNER
#define FLEX_SCANNER
#undef  YY_FLEX_MAJOR_VERSION
#define YY_FLEX_MAJOR_VERSION 2
#undef  YY_FLEX_MINOR_VERSION
#define YY_FLEX_MINOR_VERSION 5
#undef  YY_FLEX_SUBMINOR_VERSION
#define YY_FLEX_SUBMINOR_VERSION 31
#undef  FLEX_BETA
#define FLEX_BETA
#undef  FLEXINT_H
#define FLEXINT_H
#undef  INT8_MIN
#define INT8_MIN               (-128)
#undef  INT16_MIN
#define INT16_MIN              (-32767-1)
#undef  INT32_MIN
#define INT32_MIN              (-2147483647-1)
#undef  INT8_MAX
#define INT8_MAX               (127)
#undef  INT16_MAX
#define INT16_MAX              (32767)
#undef  INT32_MAX
#define INT32_MAX              (2147483647)
#undef  UINT8_MAX
#define UINT8_MAX              (255U)
#undef  UINT16_MAX
#define UINT16_MAX             (65535U)
#undef  UINT32_MAX
#define UINT32_MAX             (4294967295U)
#undef  YY_USE_CONST
#define YY_USE_CONST
#undef  YY_USE_CONST
#define YY_USE_CONST
#undef  yyconst
#define yyconst const
#undef  yyconst
#define yyconst
#undef  YY_NULL
#define YY_NULL 0
#undef  BEGIN
#define BEGIN (yy_start) = 1 + 2 *
#undef  YY_START
#define YY_START (((yy_start) - 1) / 2)
#undef  YYSTATE
#define YYSTATE YY_START
#undef  YY_NEW_FILE
#define YY_NEW_FILE yyrestart(yyin  )
#undef  YY_END_OF_BUFFER_CHAR
#define YY_END_OF_BUFFER_CHAR 0
#undef  YY_BUF_SIZE
#define YY_BUF_SIZE 16384
#undef  YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
#undef  EOB_ACT_CONTINUE_SCAN
#define EOB_ACT_CONTINUE_SCAN 0
#undef  EOB_ACT_END_OF_FILE
#define EOB_ACT_END_OF_FILE 1
#undef  EOB_ACT_LAST_MATCH
#define EOB_ACT_LAST_MATCH 2
#undef  YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
#undef  YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
#undef  YY_BUFFER_NEW
#define YY_BUFFER_NEW 0
#undef  YY_BUFFER_NORMAL
#define YY_BUFFER_NORMAL 1
#undef  YY_BUFFER_EOF_PENDING
#define YY_BUFFER_EOF_PENDING 2
#undef  YY_CURRENT_BUFFER
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
#undef  YY_CURRENT_BUFFER_LVALUE
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
#undef  YY_FLUSH_BUFFER
#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
#undef  yy_new_buffer
#define yy_new_buffer yy_create_buffer
#undef  YY_SKIP_YYWRAP
#define YY_SKIP_YYWRAP
#undef  yytext_ptr
#define yytext_ptr yytext
#undef  YY_DO_BEFORE_ACTION
#define YY_DO_BEFORE_ACTION \
#undef  YY_NUM_RULES
#define YY_NUM_RULES 29
#undef  YY_END_OF_BUFFER
#define YY_END_OF_BUFFER 30
#undef  REJECT
#define REJECT reject_used_but_not_detected
#undef  YY_MORE_ADJ
#define YY_MORE_ADJ 0
#undef  YY_RESTORE_YY_MORE_OFFSET
#define YY_RESTORE_YY_MORE_OFFSET
#undef  YY_NO_UNPUT
#define YY_NO_UNPUT
#undef  INITIAL
#define INITIAL 0
#undef  YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#undef  YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#undef  ECHO
#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
#undef  YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#undef  YY_DECL_IS_OURS
#define YY_DECL_IS_OURS 1
#undef  YY_DECL
#define YY_DECL int yylex (void)
#undef  YY_USER_ACTION
#define YY_USER_ACTION
#undef  YY_BREAK
#define YY_BREAK break;
#undef  YY_RULE_SETUP
#define YY_RULE_SETUP \
#undef  YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#undef  YYTABLES_NAME
#define YYTABLES_NAME "yytables"
#undef  MAXPWD
#define MAXPWD 256
#undef  signal
#define signal bsd_signal
#undef  ALL
#define ALL (E_OPEN|E_CREAT|E_EXEC)
#undef  EV_EXIT
#define EV_EXIT 01		/* exit after evaluating tree */
#undef  EV_TESTED
#define EV_TESTED 02		/* exit status is checked; ignore -e flag */
#undef  EV_BACKCMD
#define EV_BACKCMD 04		/* command executing within back quotes */
#undef  CMDTABLESIZE
#define CMDTABLESIZE 31		/* should be prime */
#undef  ARB
#define ARB 1			/* actual size determined at run time */
#undef  NEWARGS
#define NEWARGS 5
#undef  EOF_NLEFT
#define EOF_NLEFT -99		/* value of parsenleft when EOF pushed back */
#undef  _PATH_DEVNULL
#define _PATH_DEVNULL "/dev/null"
#undef  PROFILE
#define PROFILE 0
#undef  SIGSSIZE
#define SIGSSIZE (sizeof(sigs)/sizeof(sigs[0]))
#undef  MINSIZE
#define MINSIZE 504		/* minimum size of a block */
#undef  DEFINE_OPTIONS
#define DEFINE_OPTIONS
#undef  EOFMARKLEN
#define EOFMARKLEN 79
#undef  OPENBRACE
#define OPENBRACE '{'
#undef  CLOSEBRACE
#define CLOSEBRACE '}'
#undef  EMPTY
#define EMPTY -2		/* marks an unused slot in redirtab */
#undef  signal
#define signal bsd_signal
#undef  sys_signame
#define sys_signame sys_siglist
#undef  S_DFL
#define S_DFL 1			/* default signal handling (SIG_DFL) */
#undef  S_CATCH
#define S_CATCH 2		/* signal is caught */
#undef  S_IGN
#define S_IGN 3			/* signal is ignored (SIG_IGN) */
#undef  S_HARD_IGN
#define S_HARD_IGN 4		/* signal is ignored permenantly */
#undef  S_RESET
#define S_RESET 5		/* temporary - to reset a hard ignored sig */
#undef  OUTBUFSIZ
#define OUTBUFSIZ BUFSIZ
#undef  BLOCK_OUT
#define BLOCK_OUT -2		/* output to a fixed block of memory */
#undef  MEM_OUT
#define MEM_OUT -3		/* output to dynamically allocated memory */
#undef  OUTPUT_ERR
#define OUTPUT_ERR 01		/* error occurred on output */
#undef  TEMPSIZE
#define TEMPSIZE 24
#undef  HAVE_VASPRINTF
#define HAVE_VASPRINTF 1
#undef  VTABSIZE
#define VTABSIZE 39
#undef  VTABSIZE
#define VTABSIZE 517
#undef  main
#define main echocmd
#undef  YYBISON
#define YYBISON 1
#undef  YYSKELETON_NAME
#define YYSKELETON_NAME "yacc.c"
#undef  YYPURE
#define YYPURE 0
#undef  YYLSP_NEEDED
#define YYLSP_NEEDED 0
#undef  ARITH_NUM
#define ARITH_NUM 258
#undef  ARITH_LPAREN
#define ARITH_LPAREN 259
#undef  ARITH_RPAREN
#define ARITH_RPAREN 260
#undef  ARITH_OR
#define ARITH_OR 261
#undef  ARITH_AND
#define ARITH_AND 262
#undef  ARITH_BOR
#define ARITH_BOR 263
#undef  ARITH_BXOR
#define ARITH_BXOR 264
#undef  ARITH_BAND
#define ARITH_BAND 265
#undef  ARITH_NE
#define ARITH_NE 266
#undef  ARITH_EQ
#define ARITH_EQ 267
#undef  ARITH_LE
#define ARITH_LE 268
#undef  ARITH_GE
#define ARITH_GE 269
#undef  ARITH_GT
#define ARITH_GT 270
#undef  ARITH_LT
#define ARITH_LT 271
#undef  ARITH_RSHIFT
#define ARITH_RSHIFT 272
#undef  ARITH_LSHIFT
#define ARITH_LSHIFT 273
#undef  ARITH_SUB
#define ARITH_SUB 274
#undef  ARITH_ADD
#define ARITH_ADD 275
#undef  ARITH_REM
#define ARITH_REM 276
#undef  ARITH_DIV
#define ARITH_DIV 277
#undef  ARITH_MUL
#define ARITH_MUL 278
#undef  ARITH_BNOT
#define ARITH_BNOT 279
#undef  ARITH_NOT
#define ARITH_NOT 280
#undef  ARITH_UNARYPLUS
#define ARITH_UNARYPLUS 281
#undef  ARITH_UNARYMINUS
#define ARITH_UNARYMINUS 282
#undef  YYFINAL
#define YYFINAL  14
#undef  YYLAST
#define YYLAST   170
#undef  YYNTOKENS
#define YYNTOKENS  28
#undef  YYNNTS
#define YYNNTS  3
#undef  YYNRULES
#define YYNRULES  26
#undef  YYNSTATES
#define YYNSTATES  52
#undef  YYUNDEFTOK
#define YYUNDEFTOK  2
#undef  YYMAXUTOK
#define YYMAXUTOK   282
#undef  YYPACT_NINF
#define YYPACT_NINF -13
#undef  YYTABLE_NINF
#define YYTABLE_NINF -1
#undef  yyerrok
#define yyerrok		(yyerrstatus = 0)
#undef  yyclearin
#define yyclearin	(yychar = YYEMPTY)
#undef  YYEMPTY
#define YYEMPTY		(-2)
#undef  YYEOF
#define YYEOF		0
#undef  YYACCEPT
#define YYACCEPT	goto yyacceptlab
#undef  YYABORT
#define YYABORT		goto yyabortlab
#undef  YYERROR
#define YYERROR		goto yyerrorlab
#undef  YYFAIL
#define YYFAIL		goto yyerrlab
#undef  YYTERROR
#define YYTERROR	1
#undef  YYERRCODE
#define YYERRCODE	256
#undef  YYPOPSTACK
#define YYPOPSTACK   (yyvsp--, yyssp--)
#undef  YY_INT_ALIGNED
#define  YY_INT_ALIGNED short int
#undef  FLEX_SCANNER
#define FLEX_SCANNER
#undef  YY_FLEX_MAJOR_VERSION
#define YY_FLEX_MAJOR_VERSION 2
#undef  YY_FLEX_MINOR_VERSION
#define YY_FLEX_MINOR_VERSION 5
#undef  YY_FLEX_SUBMINOR_VERSION
#define YY_FLEX_SUBMINOR_VERSION 31
#undef  FLEX_BETA
#define FLEX_BETA
#undef  FLEXINT_H
#define FLEXINT_H
#undef  INT8_MIN
#define INT8_MIN               (-128)
#undef  INT16_MIN
#define INT16_MIN              (-32767-1)
#undef  INT32_MIN
#define INT32_MIN              (-2147483647-1)
#undef  INT8_MAX
#define INT8_MAX               (127)
#undef  INT16_MAX
#define INT16_MAX              (32767)
#undef  INT32_MAX
#define INT32_MAX              (2147483647)
#undef  UINT8_MAX
#define UINT8_MAX              (255U)
#undef  UINT16_MAX
#define UINT16_MAX             (65535U)
#undef  UINT32_MAX
#define UINT32_MAX             (4294967295U)
#undef  YY_USE_CONST
#define YY_USE_CONST
#undef  YY_USE_CONST
#define YY_USE_CONST
#undef  yyconst
#define yyconst const
#undef  yyconst
#define yyconst
#undef  YY_NULL
#define YY_NULL 0
#undef  BEGIN
#define BEGIN (yy_start) = 1 + 2 *
#undef  YY_START
#define YY_START (((yy_start) - 1) / 2)
#undef  YYSTATE
#define YYSTATE YY_START
#undef  YY_NEW_FILE
#define YY_NEW_FILE yyrestart(yyin  )
#undef  YY_END_OF_BUFFER_CHAR
#define YY_END_OF_BUFFER_CHAR 0
#undef  YY_BUF_SIZE
#define YY_BUF_SIZE 16384
#undef  YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
#undef  EOB_ACT_CONTINUE_SCAN
#define EOB_ACT_CONTINUE_SCAN 0
#undef  EOB_ACT_END_OF_FILE
#define EOB_ACT_END_OF_FILE 1
#undef  EOB_ACT_LAST_MATCH
#define EOB_ACT_LAST_MATCH 2
#undef  YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
#undef  YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
#undef  YY_BUFFER_NEW
#define YY_BUFFER_NEW 0
#undef  YY_BUFFER_NORMAL
#define YY_BUFFER_NORMAL 1
#undef  YY_BUFFER_EOF_PENDING
#define YY_BUFFER_EOF_PENDING 2
#undef  YY_CURRENT_BUFFER
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
#undef  YY_CURRENT_BUFFER_LVALUE
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
#undef  YY_FLUSH_BUFFER
#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
#undef  yy_new_buffer
#define yy_new_buffer yy_create_buffer
#undef  yytext_ptr
#define yytext_ptr yytext
#undef  YY_DO_BEFORE_ACTION
#define YY_DO_BEFORE_ACTION \
#undef  YY_NUM_RULES
#define YY_NUM_RULES 29
#undef  YY_END_OF_BUFFER
#define YY_END_OF_BUFFER 30
#undef  REJECT
#define REJECT reject_used_but_not_detected
#undef  YY_MORE_ADJ
#define YY_MORE_ADJ 0
#undef  YY_RESTORE_YY_MORE_OFFSET
#define YY_RESTORE_YY_MORE_OFFSET
#undef  YY_NO_UNPUT
#define YY_NO_UNPUT
#undef  INITIAL
#define INITIAL 0
#undef  YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#undef  YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#undef  ECHO
#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
#undef  YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#undef  YY_DECL_IS_OURS
#define YY_DECL_IS_OURS 1
#undef  YY_DECL
#define YY_DECL int yylex (void)
#undef  YY_USER_ACTION
#define YY_USER_ACTION
#undef  YY_BREAK
#define YY_BREAK break;
#undef  YY_RULE_SETUP
#define YY_RULE_SETUP \
#undef  YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#undef  YYTABLES_NAME
#define YYTABLES_NAME "yytables"
#undef  MAXPWD
#define MAXPWD 256
#undef  ALL
#define ALL (E_OPEN|E_CREAT|E_EXEC)
#undef  EV_EXIT
#define EV_EXIT 01		/* exit after evaluating tree */
#undef  EV_TESTED
#define EV_TESTED 02		/* exit status is checked; ignore -e flag */
#undef  EV_BACKCMD
#define EV_BACKCMD 04		/* command executing within back quotes */
#undef  CMDTABLESIZE
#define CMDTABLESIZE 31		/* should be prime */
#undef  ARB
#define ARB 1			/* actual size determined at run time */
#undef  NEWARGS
#define NEWARGS 5
#undef  EOF_NLEFT
#define EOF_NLEFT -99		/* value of parsenleft when EOF pushed back */
#undef  _PATH_DEVNULL
#define _PATH_DEVNULL "/dev/null"
#undef  PROFILE
#define PROFILE 0
#undef  SIGSSIZE
#define SIGSSIZE (sizeof(sigs)/sizeof(sigs[0]))
#undef  MINSIZE
#define MINSIZE 504		/* minimum size of a block */
#undef  DEFINE_OPTIONS
#define DEFINE_OPTIONS
#undef  EOFMARKLEN
#define EOFMARKLEN 79
#undef  OPENBRACE
#define OPENBRACE '{'
#undef  CLOSEBRACE
#define CLOSEBRACE '}'
#undef  EMPTY
#define EMPTY -2		/* marks an unused slot in redirtab */
#undef  S_DFL
#define S_DFL 1			/* default signal handling (SIG_DFL) */
#undef  S_CATCH
#define S_CATCH 2		/* signal is caught */
#undef  S_IGN
#define S_IGN 3			/* signal is ignored (SIG_IGN) */
#undef  S_HARD_IGN
#define S_HARD_IGN 4		/* signal is ignored permenantly */
#undef  S_RESET
#define S_RESET 5		/* temporary - to reset a hard ignored sig */
#undef  OUTBUFSIZ
#define OUTBUFSIZ BUFSIZ
#undef  BLOCK_OUT
#define BLOCK_OUT -2		/* output to a fixed block of memory */
#undef  MEM_OUT
#define MEM_OUT -3		/* output to dynamically allocated memory */
#undef  OUTPUT_ERR
#define OUTPUT_ERR 01		/* error occurred on output */
#undef  TEMPSIZE
#define TEMPSIZE 24
#undef  HAVE_VASPRINTF
#define HAVE_VASPRINTF 1
#undef  VTABSIZE
#define VTABSIZE 39
#undef  VTABSIZE
#define VTABSIZE 517
#undef  main
#define main echocmd



extern void rmaliases(void);

extern int loopnest;		/* current loop nesting level */

extern void deletefuncs(void);
extern void hash_special_builtins(void);

struct strpush {
	struct strpush *prev;	/* preceding string on stack */
	char *prevstring;
	int prevnleft;
	int prevlleft;
	struct alias *ap;	/* if push was associated with an alias */
};

struct parsefile {
	struct parsefile *prev;	/* preceding file on stack */
	int linno;		/* current line */
	int fd;			/* file descriptor (or -1 if string) */
	int nleft;		/* number of chars left in this line */
	int lleft;		/* number of chars left in this buffer */
	char *nextc;		/* next char in buffer */
	char *buf;		/* input buffer */
	struct strpush *strpush; /* for pushing strings at this level */
	struct strpush basestrpush; /* so pushing one is fast */
};

extern int parselleft;		/* copy of parsefile->lleft */
extern struct parsefile basepf;	/* top level input file */
extern char basebuf[BUFSIZ];	/* buffer for top level input file */

extern pid_t backgndpid;	/* pid of last background process */
extern int jobctl;

extern int tokpushback;		/* last token pushed back */
extern int checkkwd;            /* 1 == check for kwds, 2 == also eat newlines */

struct redirtab {
	struct redirtab *next;
	short renamed[10];
};

extern struct redirtab *redirlist;

extern char sigmode[NSIG];	/* current value of signal */

extern char **environ;



/*
 * Initialization code.
 */

void
init() {

      /* from exec.c: */
      {
	      hash_special_builtins();
      }

      /* from input.c: */
      {
	      basepf.nextc = basepf.buf = basebuf;
      }

      /* from var.c: */
      {
	      char **envp;

	      initvar();
	      for (envp = environ ; *envp ; envp++) {
		      if (strchr(*envp, '=')) {
			      setvareq(*envp, VEXPORT|VTEXTFIXED);
		      }
	      }
      }
}



/*
 * This routine is called when an error or an interrupt occurs in an
 * interactive shell and control is returned to the main command loop.
 */

void
reset() {

      /* from eval.c: */
      {
	      evalskip = 0;
	      loopnest = 0;
	      funcnest = 0;
      }

      /* from input.c: */
      {
	      if (exception != EXSHELLPROC)
		      parselleft = parsenleft = 0;	/* clear input buffer */
	      popallfiles();
      }

      /* from parser.c: */
      {
	      tokpushback = 0;
	      checkkwd = 0;
      }

      /* from redir.c: */
      {
	      while (redirlist)
		      popredir();
      }

      /* from output.c: */
      {
	      out1 = &output;
	      out2 = &errout;
	      if (memout.buf != NULL) {
		      ckfree(memout.buf);
		      memout.buf = NULL;
	      }
      }
}



/*
 * This routine is called to initialize the shell to run a shell procedure.
 */

void
initshellproc() {

      /* from alias.c: */
      {
	      rmaliases();
      }

      /* from eval.c: */
      {
	      exitstatus = 0;
      }

      /* from exec.c: */
      {
	      deletefuncs();
      }

      /* from input.c: */
      {
	      popallfiles();
      }

      /* from jobs.c: */
      {
	      backgndpid = -1;
#if JOBS
	      jobctl = 0;
#endif
      }

      /* from options.c: */
      {
	      int i;

	      for (i = 0; optlist[i].name; i++)
		      optlist[i].val = 0;
	      optschanged();

      }

      /* from redir.c: */
      {
	      clearredir(0);
      }

      /* from trap.c: */
      {
	      char *sm;

	      clear_traps(0);
	      for (sm = sigmode ; sm < sigmode + NSIG ; sm++) {
		      if (*sm == S_IGN)
			      *sm = S_HARD_IGN;
	      }
      }

      /* from var.c: */
      {
	      shprocvar();
      }
}
