#include <stdio.h>
#include "site.h"

#define	TRUE	1
#define	FALSE	0

#ifndef	BSD
#include <string.h>
#define	rindex	strrchr
#define	index	strchr
#else
#include <strings.h>
#endif

#ifndef	ANSI
#ifdef	SYSV
extern sprintf();
#else
extern char *sprintf();
#endif
#endif

#define max_line_length (78)
#define max_strings (20000)
#define hash_prime (101)
#define sym_table_size (3000)
#define unused (271828)
#define ex_32 (2)
#define ex_real (3)
#define max(a,b) ((a>b)?a:b)

extern int indent;
extern int line_pos;
extern int last_brace;
extern int block_level;
extern int ii;
extern int last_tok;

extern char safe_string[80];

extern char field_list[200];
extern char last_id[80];
extern char next_temp[];

extern long last_i_num;
/*l_s is assigned by LEX to point to any non-reserved id*/
extern int ii, l_s; 
extern long lower_bound, upper_bound;
extern FILE *fopen();
extern FILE *std;
extern int pf_count;

#include "w2c-symtab.h"

extern char strings[max_strings];
extern int hash_list[hash_prime];
extern short global;
#ifdef	MS_DOS
extern struct sym_entry huge sym_table[sym_table_size];
#else
extern struct sym_entry sym_table[sym_table_size];
#endif
extern int last_sym_used, next_string_free;

#ifdef	FLEX
extern char *yytext;
#else	/* LEX */
#ifdef	HP
extern unsigned char yytext[];
#else /* Not HP */
extern char yytext[];
#endif	/* HP */
#endif	/* LEX */

/* These macros describe various types of variables. Any distinct small 
numbers will do*/

#define is_char         1
#define is_file         2
#define is_array        3
#define is_record       4
#define is_int          5
#define is_real         6
#define is_point        7
#define is_string       8

static int uses_mem, uses_eqtb ;
char my_routine[100];   /* Name of routine being parsed, if any */

#ifdef	ANSI
extern void exit(int);
extern int yyparse(void);
void find_next_temp(void);
void normal(void);
void silent(void);
void mark(void);
void forward(int);
void un_forward(int);
void to_string(char *);
void new_line(void);
void indent_line(void);
void my_output(char *);
void semicolon(void);
void yyerror(char *);
int hash(char *);
int search_table(char *);
int add_to_table(char *);
void pop_stack(void);
void push_stack(void);
void initialize(void);
void main(int,char * *);
#else
void find_next_temp(), normal(), new_line(), indent_line(), mark(),
my_output(), silent(), forward(), un_forward(), to_string(),
semicolon(), yyerror(), pop_stack(), push_stack(), initialize();
#endif

