#ifndef __SYMTAB_H #define __SYMTAB_H #ifdef __cplusplus extern "C" { #endif /****************************** SYMBOL is a node of symlist: */ typedef struct symbol SYMBOL; struct symbol { char *name; /* Variable name */ int type; /* VARIABLE, SECTION, REPO, NUMERICAL, STRING, PATH */ union { int value; /* for NUMERICAL */ char *string; /* for STRING */ char *path; /* for PATH */ } u; struct symbol *list; /* The list of variables. Used for SECTION and REPO */ struct symbol *next; /* Next Symbol */ }; /********************************************** SYMTAB is an entry of the stack of symlists: */ typedef struct symtab SYMTAB; struct symtab { SYMBOL **symlist; struct symtab *next; /* Next Entry */ }; extern SYMBOL *symlist; extern void init_symtab( void ); extern void push_symlist( SYMBOL **head ); extern void pop_symlist( void ); extern void fini_symtab( void ); extern void reverse_symlist( SYMBOL **head ); extern void remove_consts( SYMBOL **head ); //debug extern void print_symlist( int indent, SYMBOL *head ); extern SYMBOL *install( const char *s, int type, ... ); extern SYMBOL *lookup( const char *s ); extern SYMBOL *lookup_section( const char *s ); extern SYMBOL *lookup_repo( const char *s ); extern SYMBOL *assign_value( SYMBOL *dest, SYMBOL *src ); #ifdef __cplusplus } #endif #endif /* __SYMTAB_H */