/*
 * UUID: bb188d3b-e320-11dc-8b9d-00502c05c241
 * Author: Brian M. Ames, bames@apk.net
 * Copyright: Copyright (C) 2008 by Brian M. Ames
 */

#ifndef _bb188d3b_e320_11dc_8b9d_00502c05c241_
#define _bb188d3b_e320_11dc_8b9d_00502c05c241_

#include "tree.h"

#define MAX_COMMENT_STRING 2048
#define COMMENT_BUFFER_SIZE MAX_COMMENT_STRING+1
#define CHAR_BUF_SIZE 512
#define CONDITION_DEPTH 128

int parser_routines_init();
int predefined_macro_init();
int idncmp(const void *idn1, const void *idn2);
int idcmp(const void *id1, const void *id2);
int depcmp(const void *idn1, const void *idn2);
int add_dependency(char *dep_path);

void add_char(int ch);
void copy_string(char *chars);
void copy_string_less(char *chars);
void copy_utf8(unsigned char *chars);
long get_value_octal();
long get_value_decimal();
long get_value_hexadecimal();

void handle_comment(char *tokenString);
void handle_begin_comment();
void handle_comment_char(int);
void handle_end_comment();
void handle_file_begin(enum tokenIndex ti);
void handle_file_end(enum tokenIndex token);
void handle_location();
void handle_token(enum tokenIndex ti);
void handle_string_token(enum tokenIndex ti);
void handle_token_open(enum tokenIndex ti);
void handle_token_close(enum tokenIndex ti);
int test_identifier();
void doNothing(void *nodep);
void repl_destroy();
char *get_replacement_string();
char *get_function_replacement_string();
void handle_identifier(enum tokenIndex ti);
void handle_nonrepl_identifier(enum tokenIndex ti);
void handle_identifier_open(enum tokenIndex ti);
void handle_include(enum tokenIndex ti);
void handle_command_line_define(char *arg);
void handle_define(const char *identifier);
void handle_replacement_open(enum tokenIndex ti);
void handle_replacement_close(enum tokenIndex token);
int get_param_index(char *identifier);
int skip_line();
int dont_care();
int is_param_id();
int is_macro_id();
void handle_macro_arg();
void handle_macro_open(enum tokenIndex ti);
void handle_macro_close(enum tokenIndex ti);
void handle_macro_undef(enum tokenIndex ti);
void handle_if_open(enum tokenIndex ti, int value);
void handle_ifdef_open(enum tokenIndex ti);
void handle_ifndef_open(enum tokenIndex ti);
void handle_else_open(enum tokenIndex ti);
void handle_elif_open(enum tokenIndex ti, int value);
void handle_elif_close(enum tokenIndex ti);
void handle_endif(enum tokenIndex ti);
void handle_header_name(enum tokenIndex ti);
void handle_pp_number();
void handle_invalid_macro_id(enum tokenIndex ti);

void define_use_on_code(const char *use_on_code);
void handle_use_on_code(const char *use_on_code);
int use_on_code_matched();
void define_include_directory(char *directory);

#endif // ifndef _bb188d3b_e320_11dc_8b9d_00502c05c241_

