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