/*
 * PVVMUD a 3D MUD
 * Copyright (C) 1998-1999  Programvareverkstedet (pvv@pvv.org)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
#ifndef _GLOBALS_H
#define _GLOBALS_H

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "bogfile.H"

#ifndef YYPARSER

#include "geo_parse.h"

#endif

#ifndef TRUE
#define TRUE 1
#endif

#ifndef FALSE
#define FALSE 0
#endif

#define WORD unsigned short int


#define MAXTOKENLEN   64
#define MAXCHILDREN   3

typedef int TokenType;


extern int lineno;
extern char  tokenString[MAXTOKENLEN+1];
extern FILE * source;

/******************************************************************************
 *
 * Syntax tree for parsing 
 *
 *****************************************************************************/

typedef enum {FileK,HeadK,GeometryK,FloatK,IndexK,StringK,VertexK,VertexListK,NormalK,NormalListK,TexCoordK,TexCoordListK,PolyK,PolyTypeK,MaterialK,VertexIndexK,NormalIndexK,TexCoordIndexK,VertexIndexListK,NormalIndexListK,TexCoordIndexListK} NodeKind_t;

typedef struct treeNode {
  NodeKind_t nodeKind;
  struct treeNode * sibling;
  struct treeNode * child[MAXCHILDREN];
  union {
    int index;
    float value;
    char * name;
    PolyType_t polyType;
  } attr;
} TreeNode_t;


/*
   Declarations to prevent SYMBOL NOT FOUND in c++
 */ 

static TokenType yylex();
int yyerror(char *);
TreeNode_t *parse();
extern int getToken();
void writebogfile(TreeNode_t *, FILE *, FILE *);

#endif /* _GLOBALS_H */