12c7b1c5 (kx 2023-03-24 02:53:04 +0300 1)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 2) #ifndef __SYMTAB_H
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 3) #define __SYMTAB_H
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 4)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 5)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 6) #ifdef __cplusplus
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 7) extern "C" {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 8) #endif
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 9)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 10) /******************************
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 11) SYMBOL is a node of symlist:
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 12) */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 13) typedef struct symbol SYMBOL;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 14) struct symbol
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 15) {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 16) char *name; /* Variable name */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 17) int type; /* VARIABLE, SECTION, REPO, NUMERICAL, STRING, PATH */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 18) union
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 19) {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 20) int value; /* for NUMERICAL */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 21) char *string; /* for STRING */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 22) char *path; /* for PATH */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 23) } u;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 24)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 25) struct symbol *list; /* The list of variables. Used for SECTION and REPO */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 26)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 27) struct symbol *next; /* Next Symbol */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 28) };
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 29)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 30) /**********************************************
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 31) SYMTAB is an entry of the stack of symlists:
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 32) */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 33) typedef struct symtab SYMTAB;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 34) struct symtab
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 35) {
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 36) SYMBOL **symlist;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 37) struct symtab *next; /* Next Entry */
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 38) };
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 39)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 40)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 41) extern SYMBOL *symlist;
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 42)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 43) extern void init_symtab( void );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 44) extern void push_symlist( SYMBOL **head );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 45) extern void pop_symlist( void );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 46) extern void fini_symtab( void );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 47)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 48) extern void reverse_symlist( SYMBOL **head );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 49) extern void remove_consts( SYMBOL **head );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 50)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 51) //debug
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 52) extern void print_symlist( int indent, SYMBOL *head );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 53)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 54) extern SYMBOL *install( const char *s, int type, ... );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 55) extern SYMBOL *lookup( const char *s );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 56) extern SYMBOL *lookup_section( const char *s );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 57) extern SYMBOL *lookup_repo( const char *s );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 58)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 59) extern SYMBOL *assign_value( SYMBOL *dest, SYMBOL *src );
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 60)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 61)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 62)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 63) #ifdef __cplusplus
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 64) }
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 65) #endif
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 66)
12c7b1c5 (kx 2023-03-24 02:53:04 +0300 67) #endif /* __SYMTAB_H */