summaryrefslogtreecommitdiff
path: root/cscmd/symtab.h
blob: 50195691eb755609cd6e0232261989fc85129f63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#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 */