#ifdef __cplusplus
   #include <stdio.h>
   extern "C" {
     extern void yyerror(char *);
     extern int yylex();
   }
#endif	/* __cplusplus */ 

# line 2 "asm65.y"
/* ---------------------------------------------------------------------- */
/*                   Copyright (C) 1992 by Natrlich!                     */
/*                      This file is copyrighted!                         */
/*                Refer to the documentation for details.                 */
/* ---------------------------------------------------------------------- */
/*#define YYDEBUG*/
#include <stdio.h>
#include "defines.h"
#undef DEBUG
#include "structs.h"
#include "nasm.h"
#include "labels.h"
#include "code.h"
#include "buffer.h"
#include "exprfast.h"
#include "op.h"

#if DEBUG
#define bputchar( c)   putchar( c)
#define dbprintf( s)    puts( s)
#else
#define dbputchar( c)
#define dbprintf( s)
#endif

#ifdef NIL
#undef NIL
#endif
#define NIL   ((char *) 0)
#define ENIL  ((expr *) 0)

extern int     _in_instr,
               _in_doteq,
               _call_macro,
               wasstrlen,
               state,
               fully_mac65;


extern buffer huge   *bp;
extern word    __pc;

static char    undefined[] = { 9, 0, 'u','n','d','e','f','i','n','e','d' },
               *lastident;
static int     footok;
static lword   fooval;
#define adrmod footok      /* screws the debugger of course (har har) */

typedef union
{
   lword     u;
   byte     *b;
   char     *c;
   expr     *e;
   lexpr    *l;
} YYSTYPE;

#define _ul    lword
# define T_DOTEQ 257
# define T_IF 258
# define T_ELSE 259
# define T_LOCAL 260
# define T_EOL 261
# define T_NUMBER 262
# define T_ZEXT 263
# define T_ENDIF 264
# define T_ORG 265
# define T_DS 266
# define T_WORD 267
# define T_BYTE 268
# define T_SBYTE 269
# define T_OPT 270
# define T_MACRO 271
# define T_ENDM 272
# define T_END 273
# define T_NUM 274
# define T_OBJ 275
# define T_MLIST 276
# define T_INCLUDE 277
# define T_ERROR 278
# define T_TITLE 279
# define T_DBYTE 280
# define T_TAB 281
# define T_FLOAT 282
# define T_CBYTE 283
# define T_XREF 284
# define T_SET 285
# define T_LIST 286
# define T_ERR 287
# define T_ACCU 288
# define T_CHAR 289
# define T_NOT 290
# define T_DEF 291
# define T_REF 292
# define T_CLIST 293
# define T_EJECT 294
# define T_PAGE 295
# define T_XFLOAT 296
# define T_UNDEF 297
# define T_WARN 298
# define T_REPT 299
# define T_CALL 300
# define T_IDENT 301
# define T_STRING 302
# define T_LABEL 303
# define T_FILE 304
# define T_EXPR 305
# define T_INSTR 306
# define T_NO 307
# define T_OR 308
# define T_AND 309
# define T_LEQ 310
# define T_GEQ 311
# define T_NEQ 312
# define MIDDLE 313
# define HIGHEST 314
# define T_MPARA 315
# define T_MSPARA 316
# define T_MLPARA 317
# define T_MLSPARA 318
# define T_PARA 319
# define REALHIGH 320
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
extern int yychar;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif

/* __YYSCLASS defines the scoping/storage class for global objects
 * that are NOT renamed by the -p option.  By default these names
 * are going to be 'static' so that multi-definition errors
 * will not occur with multiple parsers.
 * If you want (unsupported) access to internal names you need
 * to define this to be null so it implies 'extern' scope.
 * This should not be used in conjunction with -p.
 */
#ifndef __YYSCLASS
# define __YYSCLASS static
#endif
YYSTYPE yylval;
__YYSCLASS YYSTYPE yyval;
typedef int yytabelem;
# define YYERRCODE 256
__YYSCLASS yytabelem yyexca[] ={
-1, 0,
	0, 4,
	258, 4,
	259, 4,
	260, 4,
	261, 4,
	263, 4,
	264, 4,
	265, 4,
	266, 4,
	267, 4,
	268, 4,
	269, 4,
	270, 4,
	271, 4,
	273, 4,
	277, 4,
	278, 4,
	279, 4,
	280, 4,
	281, 4,
	282, 4,
	283, 4,
	285, 4,
	295, 4,
	297, 4,
	298, 4,
	299, 4,
	300, 4,
	301, 4,
	303, 4,
	306, 4,
	-2, 0,
-1, 1,
	0, -1,
	-2, 0,
-1, 6,
	0, 14,
	261, 14,
	-2, 8,
-1, 153,
	310, 0,
	311, 0,
	61, 0,
	312, 0,
	62, 0,
	60, 0,
	-2, 68,
-1, 154,
	310, 0,
	311, 0,
	61, 0,
	312, 0,
	62, 0,
	60, 0,
	-2, 69,
-1, 155,
	310, 0,
	311, 0,
	61, 0,
	312, 0,
	62, 0,
	60, 0,
	-2, 70,
-1, 156,
	310, 0,
	311, 0,
	61, 0,
	312, 0,
	62, 0,
	60, 0,
	-2, 71,
-1, 157,
	310, 0,
	311, 0,
	61, 0,
	312, 0,
	62, 0,
	60, 0,
	-2, 72,
-1, 166,
	310, 0,
	311, 0,
	61, 0,
	312, 0,
	62, 0,
	60, 0,
	-2, 81,
	};
# define YYNPROD 117
# define YYLAST 598
__YYSCLASS yytabelem yyact[]={

    10,    11,    32,     8,   145,    20,    12,    13,    14,    15,
    17,    19,    26,    29,    94,    31,    93,    92,    91,    30,
    35,    33,    16,    25,    21,    18,   102,    27,   141,   126,
   125,   101,    89,    53,    88,    71,    46,    34,    68,    28,
    36,    24,    22,    23,   171,     6,    70,    37,     9,     3,
    39,    48,   187,    47,    10,    11,    32,   137,   136,    20,
    12,    13,    14,    15,    17,    19,    26,    29,    53,    31,
   183,    46,    76,    30,    35,    33,    16,    25,    21,    18,
    77,    27,    44,   184,    60,   128,    48,    53,    47,   179,
    46,    34,   178,    28,    36,    24,    22,    23,   114,   176,
   177,    63,     9,   113,   172,    48,    53,    47,    65,    46,
    74,   170,    53,   169,   186,    46,   148,    44,   114,   111,
    90,   112,   144,   113,    48,    96,    47,   142,   135,   117,
    48,   127,    47,     7,   116,   117,    44,   181,   114,   111,
   116,   112,    75,   113,   114,   111,    64,   112,   115,   113,
   173,    72,   133,   134,    69,    44,   109,   119,   110,   143,
    41,    44,   109,   119,   110,    66,    67,    98,   115,    38,
   117,     5,    95,     4,     2,   116,    61,   138,   129,   114,
   111,    49,   112,    99,   113,     1,     0,     0,   115,   167,
   118,     0,     0,     0,   115,   117,   118,   109,   119,   110,
   116,    86,    79,    81,   114,   111,     0,   112,     0,   113,
     0,    83,   168,    80,    84,   174,     0,     0,     0,     0,
    82,    85,   109,   119,   110,    86,    79,    81,     0,   115,
     0,   118,   182,     0,    78,    83,     0,    80,    84,   185,
     0,     0,     0,     0,    82,    85,    40,     0,     0,     0,
     0,     0,   117,    50,   115,   180,   118,   116,     0,     0,
     0,   114,   111,     0,   112,     0,   113,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   103,
    54,    45,    55,    56,     0,     0,     0,     0,    50,     0,
     0,     0,    51,     0,     0,     0,    52,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,    50,     0,     0,
    57,   115,     0,   118,     0,    54,    45,    55,    56,     0,
     0,     0,     0,     0,     0,     0,    50,    51,   139,     0,
     0,    52,    50,     0,    54,    45,    55,    56,     0,     0,
     0,     0,     0,     0,     0,    57,    51,   130,     0,     0,
    52,     0,     0,    54,    45,    55,    56,     0,     0,    54,
    45,    55,    56,     0,    57,    51,     0,     0,     0,    52,
     0,    51,     0,     0,     0,    52,     0,     0,     0,     0,
     0,     0,     0,    57,     0,     0,    43,     0,     0,    57,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,   105,   104,   108,   107,   106,     0,
   105,   104,   108,   107,   106,    62,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,    42,     0,     0,    58,
    59,   120,   121,   122,   123,   124,     0,     0,     0,     0,
    73,     0,     0,    87,     0,     0,   104,   108,   107,   106,
     0,     0,     0,     0,     0,    97,     0,   100,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,   108,   107,   106,     0,     0,     0,     0,     0,
   131,   132,   131,   131,     0,     0,     0,     0,   140,     0,
     0,   151,   152,   153,   154,   155,   156,   157,   158,   159,
   160,   161,   162,   163,   164,   165,   166,     0,     0,     0,
     0,     0,   146,     0,   147,     0,     0,   149,   150,     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,
   175,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,   131,     0,     0,     0,   140,
     0,     0,     0,     0,     0,     0,     0,   140 };
__YYSCLASS yytabelem yypact[]={

  -207, -3000,  -258, -3000,  -214, -3000,   -11, -3000, -3000, -3000,
    70, -3000, -3000,    70,    70,    70,    70,    65,    65,    65,
  -263,  -250,  -266, -3000,    70,    70,   -73,    70,  -267,  -269,
    85, -3000, -3000,  -284,  -285,  -286,  -288, -3000,  -204,    64,
 -3000,    -9, -3000,   102,    70,    70,    70,    70,    70, -3000,
 -3000, -3000, -3000, -3000, -3000,  -271,  -272, -3000, -3000, -3000,
 -3000,    87, -3000, -3000,    45,    70,    45,    45, -3000,    84,
 -3000, -3000,    26,  -273, -3000,    83, -3000, -3000,   -49, -3000,
 -3000, -3000, -3000, -3000, -3000, -3000, -3000,    78, -3000, -3000,
  -300, -3000, -3000, -3000, -3000, -3000,    70, -3000,    70, -3000,
    72,    70,    70, -3000,    70,    70,    70,    70,    70,    70,
    70,    70,    70,    70,    70,    70,    70,    70,    70,    70,
    96, -3000, -3000,   219,   219, -3000, -3000,    70, -3000,    69,
 -3000, -3000,    67, -3000, -3000,  -252, -3000, -3000,    60, -3000,
 -3000, -3000,   -73, -3000,    70, -3000, -3000, -3000,    11,    48,
 -3000,   162,   137,   219,   219,   219,   219,   219,    56,    56,
 -3000, -3000, -3000,    76,    76,    76,   219, -3000, -3000,    45,
 -3000, -3000, -3000,    26, -3000, -3000, -3000, -3000,   -18,    39,
 -3000,    26, -3000,    73,   -37, -3000, -3000, -3000 };
__YYSCLASS yytabelem yypgo[]={

     0,   185,   183,   386,   181,   146,   415,   178,   177,    85,
    57,    84,   176,    58,   174,   173,   171,   169,   133,   167,
   160,   154,   151,   150,   142,   137,    72,    80 };
__YYSCLASS yytabelem yyr1[]={

     0,     1,     1,    14,    14,    14,    16,    16,    17,    15,
    15,    15,    19,    15,    15,    15,    20,    18,    18,    18,
    18,    18,    18,    18,    18,    18,    18,    18,    18,    18,
    18,    22,    18,    23,    18,    18,    18,    18,    18,    18,
    18,    18,    18,    18,    18,    18,    18,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     4,     4,     4,     4,
     4,     4,     4,     4,     6,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,    12,    11,    11,
     5,     5,     7,     7,     9,     9,     8,     8,    10,    25,
    10,    13,    13,    21,    21,    24,    24,    26,    26,    27,
    27,    27,    27,    27,    27,    27,    27 };
__YYSCLASS yytabelem yyr2[]={

     0,     4,     2,     5,     0,     3,     4,     2,     1,     7,
     9,     7,     1,     9,     3,     3,     1,     7,     5,     3,
     3,     5,     5,     5,     5,     7,     7,     7,     5,     4,
     5,     1,     7,     1,    11,     5,     5,     9,     5,     5,
     7,     3,     3,     5,     5,     5,     5,     7,     7,    11,
    11,     5,     7,     3,     3,     1,     3,     3,     2,     3,
     3,     5,     5,     3,     3,     7,     7,     7,     7,     7,
     7,     7,     7,     7,     7,     7,     7,     7,     7,     7,
     7,     7,     5,     5,     5,     5,     2,     3,     2,     7,
     7,     1,     3,     3,     2,     7,     3,     3,     2,     1,
     9,     1,     3,     2,     6,     2,     6,     2,     4,     2,
     2,     2,     2,     2,     2,     2,     2 };
__YYSCLASS yytabelem yychk[]={

 -3000,    -1,   -14,   256,   -15,   -16,   303,   -18,   261,   306,
   258,   259,   264,   265,   266,   267,   280,   268,   283,   269,
   263,   282,   300,   301,   299,   281,   270,   285,   297,   271,
   277,   273,   260,   279,   295,   278,   298,   261,   -17,    61,
   257,   -20,    -6,    -3,    91,   290,    45,    62,    60,    -4,
   262,   301,   305,    42,   289,   291,   292,   319,    -6,    -6,
   -11,   -12,    -6,   -11,    -5,    43,    -5,    -5,   301,   -21,
   296,   301,   -22,    -6,   -11,   -24,   -26,   -27,   307,   275,
   286,   276,   293,   284,   287,   294,   274,    -6,   301,   301,
    35,   302,   302,   302,   302,   -18,    61,    -6,   -19,    -2,
    -6,    40,    35,   288,   309,   308,   312,   311,   310,    60,
    62,    43,    45,    47,    42,    92,    38,    33,    94,    61,
    -3,    -3,    -3,    -3,    -3,   301,   301,    44,    -9,    -7,
   302,    -6,    -6,    -9,    -9,    44,   -13,   -10,    -8,   302,
    -6,   301,    44,   -27,    44,   304,    -6,    -6,    44,    -6,
    -6,    -3,    -3,    -3,    -3,    -3,    -3,    -3,    -3,    -3,
    -3,    -3,    -3,    -3,    -3,    -3,    -3,    93,   -11,    44,
    44,   296,    44,   -23,   -26,    -6,    88,    89,    44,    41,
    -9,   -25,   -13,    88,    44,   -10,    41,    89 };
__YYSCLASS yytabelem yydef[]={

    -2,    -2,     2,     5,     1,     3,    -2,    15,     7,    16,
     0,    19,    20,     0,     0,     0,     0,    91,    91,    91,
     0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
     0,    41,    42,     0,     0,     0,     0,     6,     0,     0,
    12,    55,    18,    64,     0,     0,     0,     0,     0,    86,
    56,    57,    58,    59,    60,     0,     0,    63,    21,    22,
    23,    88,    87,    24,     0,     0,     0,     0,    28,    29,
   103,    30,   101,     0,    35,    36,   105,   107,     0,   109,
   110,   111,   112,   113,   114,   115,   116,     0,    38,    39,
     0,    43,    44,    45,    46,     9,     0,    11,     0,    17,
    53,     0,     0,    54,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,    82,    83,    84,    85,    61,    62,     0,    25,    94,
    92,    93,     0,    26,    27,     0,    32,   102,    98,    96,
    97,    33,     0,   108,     0,    40,    10,    13,     0,     0,
    51,    66,    67,    -2,    -2,    -2,    -2,    -2,    73,    74,
    75,    76,    77,    78,    79,    80,    -2,    65,    89,     0,
    90,   104,    99,   101,   106,    37,    47,    48,     0,    52,
    95,     0,    34,     0,     0,   100,    49,    50 };
typedef struct { char *t_name; int t_val; } yytoktype;
#ifndef YYDEBUG
#	define YYDEBUG	0	/* don't allow debugging */
#endif

#if YYDEBUG

__YYSCLASS yytoktype yytoks[] =
{
	"T_DOTEQ",	257,
	"T_IF",	258,
	"T_ELSE",	259,
	"T_LOCAL",	260,
	"T_EOL",	261,
	"T_NUMBER",	262,
	"T_ZEXT",	263,
	"T_ENDIF",	264,
	"T_ORG",	265,
	"T_DS",	266,
	"T_WORD",	267,
	"T_BYTE",	268,
	"T_SBYTE",	269,
	"T_OPT",	270,
	"T_MACRO",	271,
	"T_ENDM",	272,
	"T_END",	273,
	"T_NUM",	274,
	"T_OBJ",	275,
	"T_MLIST",	276,
	"T_INCLUDE",	277,
	"T_ERROR",	278,
	"T_TITLE",	279,
	"T_DBYTE",	280,
	"T_TAB",	281,
	"T_FLOAT",	282,
	"T_CBYTE",	283,
	"T_XREF",	284,
	"T_SET",	285,
	"T_LIST",	286,
	"T_ERR",	287,
	"T_ACCU",	288,
	"T_CHAR",	289,
	"T_NOT",	290,
	"T_DEF",	291,
	"T_REF",	292,
	"T_CLIST",	293,
	"T_EJECT",	294,
	"T_PAGE",	295,
	"T_XFLOAT",	296,
	"T_UNDEF",	297,
	"T_WARN",	298,
	"T_REPT",	299,
	"T_CALL",	300,
	"T_IDENT",	301,
	"T_STRING",	302,
	"T_LABEL",	303,
	"T_FILE",	304,
	"T_EXPR",	305,
	"T_INSTR",	306,
	",",	44,
	"T_NO",	307,
	"T_OR",	308,
	"T_AND",	309,
	"T_LEQ",	310,
	"T_GEQ",	311,
	"=",	61,
	"T_NEQ",	312,
	">",	62,
	"<",	60,
	"MIDDLE",	313,
	"!",	33,
	"^",	94,
	"&",	38,
	"+",	43,
	"-",	45,
	"*",	42,
	"/",	47,
	"\\",	92,
	"HIGHEST",	314,
	"T_MPARA",	315,
	"T_MSPARA",	316,
	"T_MLPARA",	317,
	"T_MLSPARA",	318,
	"T_PARA",	319,
	"REALHIGH",	320,
	"-unknown-",	-1	/* ends search */
};

__YYSCLASS char * yyreds[] =
{
	"-no such reduction-",
	"file : source line",
	"file : source",
	"source : source sline",
	"source : /* empty */",
	"source : error",
	"sline : line T_EOL",
	"sline : T_EOL",
	"line : T_LABEL",
	"line : T_LABEL nline",
	"line : T_LABEL '=' '=' __expr",
	"line : T_LABEL '=' __expr",
	"line : T_LABEL T_DOTEQ",
	"line : T_LABEL T_DOTEQ __expr",
	"line : T_LABEL",
	"line : nline",
	"nline : T_INSTR",
	"nline : T_INSTR irest",
	"nline : T_IF __expr",
	"nline : T_ELSE",
	"nline : T_ENDIF",
	"nline : T_ORG __expr",
	"nline : T_DS __expr",
	"nline : T_WORD i_expr",
	"nline : T_DBYTE i_expr",
	"nline : T_BYTE modif si_expr",
	"nline : T_CBYTE modif si_expr",
	"nline : T_SBYTE modif si_expr",
	"nline : T_ZEXT T_IDENT",
	"nline : T_FLOAT f_expr",
	"nline : T_CALL T_IDENT",
	"nline : T_IDENT",
	"nline : T_IDENT ei_expr",
	"nline : T_REPT __expr T_IDENT",
	"nline : T_REPT __expr T_IDENT ei_expr",
	"nline : T_TAB i_expr",
	"nline : T_OPT o_expr",
	"nline : T_SET __expr ',' __expr",
	"nline : T_UNDEF T_IDENT",
	"nline : T_MACRO T_IDENT",
	"nline : T_INCLUDE '#' T_FILE",
	"nline : T_END",
	"nline : T_LOCAL",
	"nline : T_TITLE T_STRING",
	"nline : T_PAGE T_STRING",
	"nline : T_ERROR T_STRING",
	"nline : T_WARN T_STRING",
	"irest : __expr ',' 'X'",
	"irest : __expr ',' 'Y'",
	"irest : '(' __expr ',' 'X' ')'",
	"irest : '(' __expr ')' ',' 'Y'",
	"irest : '#' __expr",
	"irest : '(' __expr ')'",
	"irest : __expr",
	"irest : T_ACCU",
	"irest : /* empty */",
	"a_expr : T_NUMBER",
	"a_expr : T_IDENT",
	"a_expr : T_EXPR",
	"a_expr : '*'",
	"a_expr : T_CHAR",
	"a_expr : T_DEF T_IDENT",
	"a_expr : T_REF T_IDENT",
	"a_expr : T_PARA",
	"__expr : s_expr",
	"s_expr : '[' s_expr ']'",
	"s_expr : s_expr T_AND s_expr",
	"s_expr : s_expr T_OR s_expr",
	"s_expr : s_expr T_NEQ s_expr",
	"s_expr : s_expr T_GEQ s_expr",
	"s_expr : s_expr T_LEQ s_expr",
	"s_expr : s_expr '<' s_expr",
	"s_expr : s_expr '>' s_expr",
	"s_expr : s_expr '+' s_expr",
	"s_expr : s_expr '-' s_expr",
	"s_expr : s_expr '/' s_expr",
	"s_expr : s_expr '*' s_expr",
	"s_expr : s_expr '\\' s_expr",
	"s_expr : s_expr '&' s_expr",
	"s_expr : s_expr '!' s_expr",
	"s_expr : s_expr '^' s_expr",
	"s_expr : s_expr '=' s_expr",
	"s_expr : T_NOT s_expr",
	"s_expr : '-' s_expr",
	"s_expr : '>' s_expr",
	"s_expr : '<' s_expr",
	"s_expr : a_expr",
	"fubar : __expr",
	"i_expr : fubar",
	"i_expr : fubar ',' i_expr",
	"modif : '+' __expr ','",
	"modif : /* empty */",
	"t_expr : T_STRING",
	"t_expr : __expr",
	"si_expr : t_expr",
	"si_expr : t_expr ',' si_expr",
	"u_expr : T_STRING",
	"u_expr : __expr",
	"mi_expr : u_expr",
	"mi_expr : u_expr ','",
	"mi_expr : u_expr ',' mi_expr",
	"ei_expr : /* empty */",
	"ei_expr : mi_expr",
	"f_expr : T_XFLOAT",
	"f_expr : f_expr ',' T_XFLOAT",
	"o_expr : op2",
	"o_expr : o_expr ',' op2",
	"op2 : option",
	"op2 : T_NO option",
	"option : T_OBJ",
	"option : T_LIST",
	"option : T_MLIST",
	"option : T_CLIST",
	"option : T_XREF",
	"option : T_ERR",
	"option : T_EJECT",
	"option : T_NUM",
};
#endif /* YYDEBUG */
#define YYFLAG  (-3000)
/* @(#) $Revision: 66.3 $ */    

/*
** Skeleton parser driver for yacc output
*/

#if defined(NLS) && !defined(NL_SETN)
#include <msgbuf.h>
#endif

#ifndef nl_msg
#define nl_msg(i,s) (s)
#endif

/*
** yacc user known macros and defines
*/
#define YYERROR		goto yyerrlab

#ifndef __RUNTIME_YYMAXDEPTH
#define YYACCEPT	return(0)
#define YYABORT		return(1)
#else
#define YYACCEPT	{free_stacks(); return(0);}
#define YYABORT		{free_stacks(); return(1);}
#endif

#define YYBACKUP( newtoken, newvalue )\
{\
	if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
	{\
		yyerror( (nl_msg(30001,"syntax error - cannot backup")) );\
		goto yyerrlab;\
	}\
	yychar = newtoken;\
	yystate = *yyps;\
	yylval = newvalue;\
	goto yynewstate;\
}
#define YYRECOVERING()	(!!yyerrflag)
#ifndef YYDEBUG
#	define YYDEBUG	1	/* make debugging available */
#endif

/*
** user known globals
*/
int yydebug;			/* set to 1 to get debugging */

/*
** driver internal defines
*/
/* define for YYFLAG now generated by yacc program. */
/*#define YYFLAG		(FLAGVAL)*/

/*
** global variables used by the parser
*/
# ifndef __RUNTIME_YYMAXDEPTH
__YYSCLASS YYSTYPE yyv[ YYMAXDEPTH ];	/* value stack */
__YYSCLASS int yys[ YYMAXDEPTH ];		/* state stack */
# else
__YYSCLASS YYSTYPE *yyv;			/* pointer to malloc'ed value stack */
__YYSCLASS int *yys;			/* pointer to malloc'ed stack stack */
#ifdef __cplusplus
	extern char *malloc(int);
	extern char *realloc(char *, int);
	extern void free();
# else
	extern char *malloc();
	extern char *realloc();
	extern void free();
# endif /* __cplusplus */
static int allocate_stacks(); 
static void free_stacks();
# ifndef YYINCREMENT
# define YYINCREMENT (YYMAXDEPTH/2) + 10
# endif
# endif	/* __RUNTIME_YYMAXDEPTH */
long  yymaxdepth = YYMAXDEPTH;

__YYSCLASS YYSTYPE *yypv;			/* top of value stack */
__YYSCLASS int *yyps;			/* top of state stack */

__YYSCLASS int yystate;			/* current state */
__YYSCLASS int yytmp;			/* extra var (lasts between blocks) */

int yynerrs;			/* number of errors */
__YYSCLASS int yyerrflag;			/* error recovery flag */
int yychar;			/* current input token number */



/*
** yyparse - return 0 if worked, 1 if syntax error not recovered from
*/
int
yyparse()
{
	register YYSTYPE *yypvt;	/* top of value stack for $vars */

	/*
	** Initialize externals - yyparse may be called more than once
	*/
# ifdef __RUNTIME_YYMAXDEPTH
	if (allocate_stacks()) YYABORT;
# endif
	yypv = &yyv[-1];
	yyps = &yys[-1];
	yystate = 0;
	yytmp = 0;
	yynerrs = 0;
	yyerrflag = 0;
	yychar = -1;

	goto yystack;
	{
		register YYSTYPE *yy_pv;	/* top of value stack */
		register int *yy_ps;		/* top of state stack */
		register int yy_state;		/* current state */
		register int  yy_n;		/* internal state number info */

		/*
		** get globals into registers.
		** branch to here only if YYBACKUP was called.
		*/
	yynewstate:
		yy_pv = yypv;
		yy_ps = yyps;
		yy_state = yystate;
		goto yy_newstate;

		/*
		** get globals into registers.
		** either we just started, or we just finished a reduction
		*/
	yystack:
		yy_pv = yypv;
		yy_ps = yyps;
		yy_state = yystate;

		/*
		** top of for (;;) loop while no reductions done
		*/
	yy_stack:
		/*
		** put a state and value onto the stacks
		*/
#if YYDEBUG
		/*
		** if debugging, look up token value in list of value vs.
		** name pairs.  0 and negative (-1) are special values.
		** Note: linear search is used since time is not a real
		** consideration while debugging.
		*/
		if ( yydebug )
		{
			register int yy_i;

			printf( "State %d, token ", yy_state );
			if ( yychar == 0 )
				printf( "end-of-file\n" );
			else if ( yychar < 0 )
				printf( "-none-\n" );
			else
			{
				for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
					yy_i++ )
				{
					if ( yytoks[yy_i].t_val == yychar )
						break;
				}
				printf( "%s\n", yytoks[yy_i].t_name );
			}
		}
#endif /* YYDEBUG */
		if ( ++yy_ps >= &yys[ yymaxdepth ] )	/* room on stack? */
		{
# ifndef __RUNTIME_YYMAXDEPTH
			yyerror( (nl_msg(30002,"yacc stack overflow")) );
			YYABORT;
# else
			/* save old stack bases to recalculate pointers */
			YYSTYPE * yyv_old = yyv;
			int * yys_old = yys;
			yymaxdepth += YYINCREMENT;
			yys = (int *) realloc(yys, yymaxdepth * sizeof(int));
			yyv = (YYSTYPE *) realloc(yyv, yymaxdepth * sizeof(YYSTYPE));
			if (yys==0 || yyv==0) {
			    yyerror( (nl_msg(30002,"yacc stack overflow")) );
			    YYABORT;
			    }
			/* Reset pointers into stack */
			yy_ps = (yy_ps - yys_old) + yys;
			yyps = (yyps - yys_old) + yys;
			yy_pv = (yy_pv - yyv_old) + yyv;
			yypv = (yypv - yyv_old) + yyv;
# endif

		}
		*yy_ps = yy_state;
		*++yy_pv = yyval;

		/*
		** we have a new state - find out what to do
		*/
	yy_newstate:
		if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
			goto yydefault;		/* simple state */
#if YYDEBUG
		/*
		** if debugging, need to mark whether new token grabbed
		*/
		yytmp = yychar < 0;
#endif
		if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
			yychar = 0;		/* reached EOF */
#if YYDEBUG
		if ( yydebug && yytmp )
		{
			register int yy_i;

			printf( "Received token " );
			if ( yychar == 0 )
				printf( "end-of-file\n" );
			else if ( yychar < 0 )
				printf( "-none-\n" );
			else
			{
				for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
					yy_i++ )
				{
					if ( yytoks[yy_i].t_val == yychar )
						break;
				}
				printf( "%s\n", yytoks[yy_i].t_name );
			}
		}
#endif /* YYDEBUG */
		if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
			goto yydefault;
		if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar )	/*valid shift*/
		{
			yychar = -1;
			yyval = yylval;
			yy_state = yy_n;
			if ( yyerrflag > 0 )
				yyerrflag--;
			goto yy_stack;
		}

	yydefault:
		if ( ( yy_n = yydef[ yy_state ] ) == -2 )
		{
#if YYDEBUG
			yytmp = yychar < 0;
#endif
			if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
				yychar = 0;		/* reached EOF */
#if YYDEBUG
			if ( yydebug && yytmp )
			{
				register int yy_i;

				printf( "Received token " );
				if ( yychar == 0 )
					printf( "end-of-file\n" );
				else if ( yychar < 0 )
					printf( "-none-\n" );
				else
				{
					for ( yy_i = 0;
						yytoks[yy_i].t_val >= 0;
						yy_i++ )
					{
						if ( yytoks[yy_i].t_val
							== yychar )
						{
							break;
						}
					}
					printf( "%s\n", yytoks[yy_i].t_name );
				}
			}
#endif /* YYDEBUG */
			/*
			** look through exception table
			*/
			{
				register int *yyxi = yyexca;

				while ( ( *yyxi != -1 ) ||
					( yyxi[1] != yy_state ) )
				{
					yyxi += 2;
				}
				while ( ( *(yyxi += 2) >= 0 ) &&
					( *yyxi != yychar ) )
					;
				if ( ( yy_n = yyxi[1] ) < 0 )
					YYACCEPT;
			}
		}

		/*
		** check for syntax error
		*/
		if ( yy_n == 0 )	/* have an error */
		{
			/* no worry about speed here! */
			switch ( yyerrflag )
			{
			case 0:		/* new error */
				yyerror( (nl_msg(30003,"syntax error")) );
				yynerrs++;
				goto skip_init;
			yyerrlab:
				/*
				** get globals into registers.
				** we have a user generated syntax type error
				*/
				yy_pv = yypv;
				yy_ps = yyps;
				yy_state = yystate;
				yynerrs++;
			skip_init:
			case 1:
			case 2:		/* incompletely recovered error */
					/* try again... */
				yyerrflag = 3;
				/*
				** find state where "error" is a legal
				** shift action
				*/
				while ( yy_ps >= yys )
				{
					yy_n = yypact[ *yy_ps ] + YYERRCODE;
					if ( yy_n >= 0 && yy_n < YYLAST &&
						yychk[yyact[yy_n]] == YYERRCODE)					{
						/*
						** simulate shift of "error"
						*/
						yy_state = yyact[ yy_n ];
						goto yy_stack;
					}
					/*
					** current state has no shift on
					** "error", pop stack
					*/
#if YYDEBUG
#	define _POP_ "Error recovery pops state %d, uncovers state %d\n"
					if ( yydebug )
						printf( _POP_, *yy_ps,
							yy_ps[-1] );
#	undef _POP_
#endif
					yy_ps--;
					yy_pv--;
				}
				/*
				** there is no state on stack with "error" as
				** a valid shift.  give up.
				*/
				YYABORT;
			case 3:		/* no shift yet; eat a token */
#if YYDEBUG
				/*
				** if debugging, look up token in list of
				** pairs.  0 and negative shouldn't occur,
				** but since timing doesn't matter when
				** debugging, it doesn't hurt to leave the
				** tests here.
				*/
				if ( yydebug )
				{
					register int yy_i;

					printf( "Error recovery discards " );
					if ( yychar == 0 )
						printf( "token end-of-file\n" );
					else if ( yychar < 0 )
						printf( "token -none-\n" );
					else
					{
						for ( yy_i = 0;
							yytoks[yy_i].t_val >= 0;
							yy_i++ )
						{
							if ( yytoks[yy_i].t_val
								== yychar )
							{
								break;
							}
						}
						printf( "token %s\n",
							yytoks[yy_i].t_name );
					}
				}
#endif /* YYDEBUG */
				if ( yychar == 0 )	/* reached EOF. quit */
					YYABORT;
				yychar = -1;
				goto yy_newstate;
			}
		}/* end if ( yy_n == 0 ) */
		/*
		** reduction by production yy_n
		** put stack tops, etc. so things right after switch
		*/
#if YYDEBUG
		/*
		** if debugging, print the string that is the user's
		** specification of the reduction which is just about
		** to be done.
		*/
		if ( yydebug )
			printf( "Reduce by (%d) \"%s\"\n",
				yy_n, yyreds[ yy_n ] );
#endif
		yytmp = yy_n;			/* value to switch over */
		yypvt = yy_pv;			/* $vars top of value stack */
		/*
		** Look in goto table for next state
		** Sorry about using yy_state here as temporary
		** register variable, but why not, if it works...
		** If yyr2[ yy_n ] doesn't have the low order bit
		** set, then there is no action to be done for
		** this reduction.  So, no saving & unsaving of
		** registers done.  The only difference between the
		** code just after the if and the body of the if is
		** the goto yy_stack in the body.  This way the test
		** can be made before the choice of what to do is needed.
		*/
		{
			/* length of production doubled with extra bit */
			register int yy_len = yyr2[ yy_n ];

			if ( !( yy_len & 01 ) )
			{
				yy_len >>= 1;
				yyval = ( yy_pv -= yy_len )[1];	/* $$ = $1 */
				yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
					*( yy_ps -= yy_len ) + 1;
				if ( yy_state >= YYLAST ||
					yychk[ yy_state =
					yyact[ yy_state ] ] != -yy_n )
				{
					yy_state = yyact[ yypgo[ yy_n ] ];
				}
				goto yy_stack;
			}
			yy_len >>= 1;
			yyval = ( yy_pv -= yy_len )[1];	/* $$ = $1 */
			yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
				*( yy_ps -= yy_len ) + 1;
			if ( yy_state >= YYLAST ||
				yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
			{
				yy_state = yyact[ yypgo[ yy_n ] ];
			}
		}
					/* save until reenter driver code */
		yystate = yy_state;
		yyps = yy_ps;
		yypv = yy_pv;
	}
	/*
	** code supplied by user is placed in this switch
	*/
	switch( yytmp )
	{
		
case 3:
# line 105 "asm65.y"
{
               inc_line();
               _in_instr = 0;
               dbputchar( '\n');
            } break;
case 5:
# line 112 "asm65.y"
{
               nterror("unwanted token appeared", yychar);
               while( (yychar = yylex()) && yychar != T_EOL);
               inc_line();
               if( ! yychar)
                  return;
               yyerrok;
               yyclearin;
            } break;
case 8:
# line 129 "asm65.y"
{
                           enter_pclabel( yypvt[-0].c);
                        } break;
case 9:
# line 133 "asm65.y"
{
                           dbprintf("T_LABEL nline [done with line]\n\n");
                        } break;
case 10:
# line 137 "asm65.y"
{
                           enter_elabel( yypvt[-3].c, yypvt[-0].e, L_ZERO | L_LINKZERO);
                           dbprintf("T_LABEL == s_expr [done with line]\n\n");
                        } break;
case 11:
# line 142 "asm65.y"
{
                           enter_elabel( yypvt[-2].c, yypvt[-0].e, L_NORMAL);
                           dbprintf("T_LABEL = s_expr [done with line]\n\n");
                        } break;
case 12:
# line 146 "asm65.y"
{ _in_doteq = 1; } break;
case 13:
# line 148 "asm65.y"
{
                           _in_doteq = 0;
                           enter_elabel( yypvt[-3].c, yypvt[-0].e, L_EQU);
                           dbprintf("T_LABEL .= s_expr [done with line]\n\n");
                        } break;
case 14:
# line 153 "asm65.y"
{
                           enter_pclabel( yypvt[-0].c);
                           dbprintf("T_LABEL [done with line]\n\n");
                        } break;
case 15:
# line 157 "asm65.y"
{
                           dbprintf("regular line [done]\n\n");
                        } break;
case 16:
# line 163 "asm65.y"
{  _in_instr = 1;  } break;
case 17:
# line 164 "asm65.y"
{ generate( yypvt[-2].b,adrmod,yypvt[-0].e);} break;
case 18:
# line 165 "asm65.y"
{ if_treat( yypvt[-0].e);          } break;
case 19:
# line 166 "asm65.y"
{ else_treat();           } break;
case 20:
# line 167 "asm65.y"
{ endif_treat();          } break;
case 21:
# line 168 "asm65.y"
{ setorg( yypvt[-0].e, 0);         } break;
case 22:
# line 169 "asm65.y"
{ reserve( yypvt[-0].e);           } break;
case 23:
# line 170 "asm65.y"
{ dropwords(  yypvt[-0].l);        } break;
case 24:
# line 171 "asm65.y"
{ dropdbytes( yypvt[-0].l);        } break;
case 25:
# line 172 "asm65.y"
{ dropbytes(  yypvt[-1].e, yypvt[-0].l, 0); } break;
case 26:
# line 173 "asm65.y"
{ dropbytes(  yypvt[-1].e, yypvt[-0].l, 1); } break;
case 27:
# line 174 "asm65.y"
{ dropsbytes( yypvt[-1].e, yypvt[-0].l);    } break;
case 28:
# line 175 "asm65.y"
{ page0decl( yypvt[-0].c);         } break;
case 30:
# line 177 "asm65.y"
{ call_macro( yypvt[-0].c);        } break;
case 31:
# line 178 "asm65.y"
{ lastident = NIL; 
                                            _call_macro = 1;        } break;
case 32:
# line 180 "asm65.y"
{ _call_macro = 0;
                                            do_macro( yypvt[-2].c, yypvt[-0].l);      } break;
case 33:
# line 182 "asm65.y"
{ lastident = NIL;        
                                            _call_macro = 1;        } break;
case 34:
# line 184 "asm65.y"
{ _call_macro = 0;
                                            rept_macro( yypvt[-3].e, yypvt[-2].c, yypvt[-0].l);} break;
case 35:
# line 186 "asm65.y"
{ dbprintf("T_TAB");      } break;
case 36:
# line 187 "asm65.y"
{ dbprintf("T_OPT");      } break;
case 37:
# line 188 "asm65.y"
{ dbprintf("T_SET");      } break;
case 38:
# line 189 "asm65.y"
{ undefine( yypvt[-0].c);          } break;
case 39:
# line 190 "asm65.y"
{
                                             load_macro( yypvt[-0].c);
                                             dbprintf("*** DONE WITH .MACRO ***");
                                          } break;
case 40:
# line 194 "asm65.y"
{
                                             footok = yylex();
                                             fooval = yylval.u;
                                             include( yypvt[-0].c, ".h65");
                                             fix_include( footok, fooval);
                                          } break;
case 41:
# line 200 "asm65.y"
{ return( 0);          } break;
case 42:
# line 201 "asm65.y"
{ do_local();          } break;
case 43:
# line 202 "asm65.y"
{ dbprintf("TITLE\n"); } break;
case 44:
# line 203 "asm65.y"
{ dbprintf("PAGE\n");  } break;
case 45:
# line 204 "asm65.y"
{ nerror( yypvt[-0].c + 2);     } break;
case 46:
# line 205 "asm65.y"
{ nwarning( yypvt[-0].c + 2);   } break;
case 47:
# line 209 "asm65.y"
{ adrmod = C_RELX; } break;
case 48:
# line 210 "asm65.y"
{ adrmod = C_RELY; } break;
case 49:
# line 211 "asm65.y"
{ adrmod = C_INDX; yyval.e = yypvt[-3].e;   } break;
case 50:
# line 212 "asm65.y"
{ adrmod = C_INDY; yyval.e = yypvt[-3].e;   } break;
case 51:
# line 213 "asm65.y"
{ adrmod = C_IMM;  yyval.e = yypvt[-0].e;   } break;
case 52:
# line 214 "asm65.y"
{ adrmod = C_IND;  yyval.e = yypvt[-1].e;   } break;
case 53:
# line 215 "asm65.y"
{ adrmod = C_ABS;             } break;
case 54:
# line 216 "asm65.y"
{ adrmod = C_ACCU; yyval.e = ENIL; } break;
case 55:
# line 217 "asm65.y"
{ adrmod = C_IMPL; yyval.e = ENIL; } break;
case 56:
# line 220 "asm65.y"
{ yyval.e = ival_pl( (word) yypvt[-0].u);         } break;
case 57:
# line 221 "asm65.y"
{ yyval.e = lval_pl( lastident = yypvt[-0].c);    } break;
case 59:
# line 223 "asm65.y"
{(yyval.e = ival_pl( __pc))->op = O_PCREL;} break;
case 60:
# line 224 "asm65.y"
{ yyval.e = ival_pl( (word) yypvt[-0].u);         } break;
case 61:
# line 225 "asm65.y"
{ yyval.e = ival_pl( is_def( yypvt[-0].c));       } break;
case 62:
# line 226 "asm65.y"
{ yyval.e = ival_pl( is_ref( yypvt[-0].c));       } break;
case 63:
# line 227 "asm65.y"
{ 
                                          expr  *he;

                                          lastident = yypvt[-0].l->string + 2;
                                          he = copyexpr( yypvt[-0].l->expr);
                                          he->fix = 0;
                                          yyval.e = he;
                                       } break;
case 64:
# line 237 "asm65.y"
{ yypvt[-0].e->fix = FIX_NOTHING; } break;
case 65:
# line 239 "asm65.y"
{ yyval.e = yypvt[-1].e;                      } break;
case 66:
# line 240 "asm65.y"
{ yyval.e = op_pl( O_BAND, yypvt[-2].e, yypvt[-0].e);  } break;
case 67:
# line 241 "asm65.y"
{ yyval.e = op_pl( O_BOR, yypvt[-2].e, yypvt[-0].e);   } break;
case 68:
# line 242 "asm65.y"
{ yyval.e = op_pl( O_NEQ, yypvt[-2].e, yypvt[-0].e);   } break;
case 69:
# line 243 "asm65.y"
{ yyval.e = op_pl( O_GEQ, yypvt[-2].e, yypvt[-0].e);   } break;
case 70:
# line 244 "asm65.y"
{ yyval.e = op_pl( O_LEQ, yypvt[-2].e, yypvt[-0].e);   } break;
case 71:
# line 245 "asm65.y"
{ yyval.e = op_pl( O_LT,  yypvt[-2].e, yypvt[-0].e);   } break;
case 72:
# line 246 "asm65.y"
{ yyval.e = op_pl( O_GT,  yypvt[-2].e, yypvt[-0].e);   } break;
case 73:
# line 247 "asm65.y"
{ yyval.e = op_pl( O_ADD, yypvt[-2].e, yypvt[-0].e);   } break;
case 74:
# line 248 "asm65.y"
{ yyval.e = op_pl( O_SUB, yypvt[-2].e, yypvt[-0].e);   } break;
case 75:
# line 249 "asm65.y"
{ yyval.e = op_pl( O_DIV, yypvt[-2].e, yypvt[-0].e);   } break;
case 76:
# line 250 "asm65.y"
{ yyval.e = op_pl( O_MUL, yypvt[-2].e, yypvt[-0].e);   } break;
case 77:
# line 251 "asm65.y"
{ yyval.e = op_pl( O_MOD, yypvt[-2].e, yypvt[-0].e);   } break;
case 78:
# line 252 "asm65.y"
{ yyval.e = op_pl( O_AND, yypvt[-2].e, yypvt[-0].e);   } break;
case 79:
# line 253 "asm65.y"
{ yyval.e = op_pl( O_OR,  yypvt[-2].e, yypvt[-0].e);   } break;
case 80:
# line 254 "asm65.y"
{ yyval.e = op_pl( O_EOR, yypvt[-2].e, yypvt[-0].e);   } break;
case 81:
# line 255 "asm65.y"
{ yyval.e = op_pl( O_EQ,  yypvt[-2].e, yypvt[-0].e);   } break;
case 82:
# line 256 "asm65.y"
{ yyval.e = op_pl( O_BNOT,yypvt[-0].e, ENIL); } break;
case 83:
# line 257 "asm65.y"
{ yyval.e = op_pl( O_MIN, yypvt[-0].e, ENIL); } break;
case 84:
# line 258 "asm65.y"
{ yyval.e = op_pl( O_MSB, yypvt[-0].e, ENIL); } break;
case 85:
# line 259 "asm65.y"
{ yyval.e = op_pl( O_LSB, yypvt[-0].e, ENIL); } break;
case 87:
# line 263 "asm65.y"
{ yyval.l = lex_pl( NIL, yypvt[-0].e); } break;
case 89:
# line 267 "asm65.y"
{ yyval.l = lex_ch( yypvt[-2].l, yypvt[-0].l); } break;
case 90:
# line 271 "asm65.y"
{ yyval.e = yypvt[-1].e;   } break;
case 91:
# line 272 "asm65.y"
{ yyval.e = ENIL; } break;
case 92:
# line 275 "asm65.y"
{ yyval.l = lex_pl( yypvt[-0].c, ENIL);  } break;
case 93:
# line 276 "asm65.y"
{ yyval.l = lex_pl( NIL, yypvt[-0].e);   } break;
case 95:
# line 281 "asm65.y"
{ yyval.l = lex_ch( yypvt[-2].l, yypvt[-0].l);   } break;
case 96:
# line 284 "asm65.y"
{ yyval.l = lex_pl( yypvt[-0].c, ival_pl( wasstrlen)); } break;
case 97:
# line 285 "asm65.y"
{ yyval.l = lex_pl( lastident
                                             ? make_string( lastident)
                                             : undefined, yypvt[-0].e); } break;
case 99:
# line 291 "asm65.y"
{ lastident = NIL;      } break;
case 100:
# line 292 "asm65.y"
{ yyval.l = lex_ch( yypvt[-3].l, yypvt[-0].l); } break;
case 101:
# line 295 "asm65.y"
{ yyval.l = lex_pl( NIL, ival_pl( 0)); } break;
case 102:
# line 297 "asm65.y"
{ yyval.l = slex_ch( lex_pl( NIL, ival_pl( lex_cnt( yypvt[-0].l))), yypvt[-0].l);  } break;
	}
	goto yystack;		/* reset registers in driver code */
}

# ifdef __RUNTIME_YYMAXDEPTH

static int allocate_stacks() {
	/* allocate the yys and yyv stacks */
	yys = (int *) malloc(yymaxdepth * sizeof(int));
	yyv = (YYSTYPE *) malloc(yymaxdepth * sizeof(YYSTYPE));

	if (yys==0 || yyv==0) {
	   yyerror( (nl_msg(30004,"unable to allocate space for yacc stacks")) );
	   return(1);
	   }
	else return(0);

}


static void free_stacks() {
	if (yys!=0) free((char *) yys);
	if (yyv!=0) free((char *) yyv);
}

# endif  /* defined(__RUNTIME_YYMAXDEPTH) */

