/*
 *	texchk.h
 */

/* these are the types of tokens we look for in the input text */
 
typedef enum {
        ESCAPE_BEGIN, ESCAPE_END, ESCAPE_ANY,
        LEFT_SQUARE_BRACKET, RIGHT_SQUARE_BRACKET,
        LEFT_CURLY_BRACKET, RIGHT_CURLY_BRACKET,
        MATH, DOUBLE_MATH, ESCAPE_SINGLE_CHAR
    } envtype;

/* some of the input tokens cause the LaTeX environment to be 'pushed' */
/* following is the definition of the stack on which these tokens are stored */

typedef struct {
   envtype etype;
   char *keyword;
   long linenum;        /*em*/
} Stack_Entry, *Ptr_Stack_Entry;

#define MAX_ENTRIES 1000                /*em*/
#define MAX_KEYWORD_LENGTH 100

extern Stack_Entry Lex_Stack[];
extern int Lex_TOS;

#define Stack_Empty (Lex_TOS < 0)

#define LCB '{'
#define RCB '}'
#define LSB '['
#define RSB ']'
#define MATH_CHAR '$'
#define ESCAPE '\\'
#define COMMENT '%'

#define ENDSTRING "end"
#define BEGINSTRING "begin"

/* these are the possible actions we can take when we see a token. */
/* the 'CHECK' action has not been implemented. */

typedef enum {POP,PUSH,CHECK_SINGLE,DOLLAR,DOLLAR_DOLLAR,CHECK} Actions;


/* Macro for Get_A_Char to speed up execution */

#define get_a_char()	\
	( (Current_Char >= Line_Length) ? \
	   fill_for_get_a_char() : \
	   ((int) (255 & Line_Buffer[Current_Char++])) )


/* we keep track of where we are in the text so we can print out nice */
/* error messages */

extern long Current_Line;
extern int Current_Char;        /*em*/
extern int Line_Length;		/* (br) */
extern int eight_bits;          /*em*/
extern int ctrl_chars;          /*em*/
extern int all_unknown_cmds;	/* (br) */
extern char Line_Buffer[];
#define MAXLL 1024

extern Indent_Level;                    /* for verbose pretty print */

extern FILE *fp;

/* this is LaTeX's definition of whitespace */

#define ISWHITE(x) ((x) == ' ' || (x) == '\t')

#define SPACES_PER_INDENT_LEVEL 2

/*em*/

/* (br) added Args() Macro */
#ifdef __STDC__
#  define Args(x)	x
#else
#  define Args(x)	()
#endif


/* errors.c */
void	eof_error  Args((void));
void	stack_empty_error  Args((envtype etype, char *keyword));
void	no_brace_after_begin_end_error  Args((void));
void	warning_blanks_in_cb  Args((void));
void	warning_close_brace  Args((void));
void	bad_char_error  Args((int ch, int abort));
void	line_too_long_error  Args((void));
void	blank_begin_end_error  Args((void));
void	keyword_error  Args((char *keyword));
void	math_keyword_error  Args((char *keyword));
void	nest_error  Args((char *s, char *e, long oldlinenum, char *current_key));
void	keyword_length_error  Args((void));
void	single_char_command_error  Args((int ch));  /* (br) changed: char ch */
void	print_stack  Args((void));
void	eof_verbatim_error  Args((void));
void	verb_error  Args((int ch));  /* (br) changed: char ch */

/* texchars.c */
int	init_legal_chars  Args((void));

/* texchk.c */
void	new_file  Args((void));
void	do_indent  Args((int level));
void	lex_push  Args((envtype etype, char *keyword, long linenum));
void	lex_pop  Args((envtype *ptr_etype, char **ptr_keyword,
			long *ptr_linenum));
void	curstack  Args((envtype *ptr_etype, char **ptr_keyword,
			long *ptr_linenum));
char *	copy_keyword  Args((int starttoken, int endtoken));
void	do_pop  Args((envtype etype, char *keyword));
/* int	get_a_char  Args((void)); */ /* (br) is a macro */
void	unget_a_char  Args((void));
char *	get_keyword  Args((void));
char *	get_begin_end_keyword  Args((void));
int	get_token  Args((Actions *action, envtype *etype, char **keyword));
void	push_math_mode  Args((char *key));
void	pop_math_mode  Args((char *key));
void	math_mode_action  Args((Actions action, char *keyword));
int	process_file  Args((void));
void	texit  Args((void));
void	usage  Args((void));
int	main  Args((int argc, char **argv));

/* verbatim.c */
void	do_verbatim  Args((char *keyword));
void	do_verb  Args((void));
int	find_end_verbatim  Args((char *matchstring));


#undef Args
