/* lex.h  (Steve Hill)  1.4  5/24/90$ */

/* lex.h
 *
 * Header file for lex.c
 */

#define MAX_TOKEN_SIZE	80
#define MAX_INCLUDE_LEVEL 15

#define TokenIs(TOKEN)		(strcmp((TOKEN), (token)) == 0)
#define TokenIsnt(TOKEN)	(strcmp((TOKEN), (token)) != 0)

extern char		token[MAX_TOKEN_SIZE],
			*lex_file_name;
extern int		line_number, include_level;

typedef struct lex_info_s
{
	char	*name,
		current;
	FILE	*file;
	int	line;
}
lex_info_t;

#define	EOF_TOKEN		""
#define	START_COMMENT_TOKEN	"/*"
#define	STOP_COMMENT_TOKEN	"*/"
#define	OPEN_CURLY_TOKEN	"{"
#define	CLOSE_CURLY_TOKEN	"}"
#define	SURFACE_TOKEN		"SURFACE"
#define	PATTERN_TOKEN		"PATTERN"
#define	SOLID_TOKEN		"SOLID"
#define	WORLD_TOKEN		"WORLD"
#define	AMBIENT_TOKEN		"AMBIENT"
#define	DIFFUSE_TOKEN		"DIFFUSE"
#define	MIRROR_TOKEN		"MIRROR"
#define	TRANSMIT_TOKEN		"TRANSMIT"
#define	SPECULAR_TOKEN		"SPECULAR"
#define	TYPE_TOKEN		"TYPE"
#define	CHEQUE_TOKEN		"CHEQUE"
#define	LAYER_TOKEN		"LAYER"
#define	ATOM_TOKEN		"ATOM"
#define	JOIN_TOKEN		"JOIN"
#define	MEET_TOKEN		"MEET"
#define	RES_TOKEN		"RES"
#define	SURFACE1_TOKEN		"SURFACE1"
#define	SURFACE2_TOKEN		"SURFACE2"
#define	AXIS_TOKEN		"AXIS"
#define	X_AXIS_TOKEN		"X_AXIS"
#define	Y_AXIS_TOKEN		"Y_AXIS"
#define	Z_AXIS_TOKEN		"Z_AXIS"
#define	SPHERE_TOKEN		"SPHERE"
#define	CYLINDER_TOKEN		"CYLINDER"
#define	SEMI_TOKEN		"SEMI"
#define	PLANE_TOKEN		"PLANE"
#define	CONE_TOKEN		"CONE"
#define	TRANSLATE_TOKEN		"TRANSLATE"
#define	ROTATE_TOKEN		"ROTATE"
#define	SCALE_TOKEN		"SCALE"
#define	SOLID1_TOKEN		"SOLID1"
#define	SOLID2_TOKEN		"SOLID2"
#define	LOCATION_TOKEN		"LOCATION"
#define	LOOK_TOKEN		"LOOK"
#define	LOOKAT_TOKEN		"LOOKAT"
#define	UP_TOKEN		"UP"
#define	LIGHT_TOKEN		"LIGHT"
#define	FILE_TOKEN		"FILE"
#define	RESOLUTION_TOKEN	"RESOLUTION"
#define	PPLANE_TOKEN		"PPLANE"
#define	BBOX_TOKEN		"BBOX"
#define	NEGATE_TOKEN		"NEGATE"
#define	JOIN_LIST_TOKEN		"JOIN_LIST"
#define	MEET_LIST_TOKEN		"MEET_LIST"
#define	SKY_TOKEN		"SKY"
#define	INCLUDE_TOKEN		"INCLUDE"
#define	DEG_TOKEN		"DEG"
#define	INDEX_TOKEN		"INDEX"
#define PLANE3_TOKEN		"PLANE3"
#define PLANE4_TOKEN		"PLANE4"
#define QUADRIC_TOKEN		"QUADRIC"
#define BITMAP_TOKEN		"SUNBITMAP"

void		InitialiseLex PROTO((char *, FILE *)),
		GetToken PROTO((void)),
		StackFile PROTO((void)),
		PopFile PROTO((void));
