From 4b87e256eba51a8711c24fbae501ac7975b4ecd3 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Wed, 19 Jan 2000 12:30:19 +0000 Subject: Split off general commands to cmds.c. Added `show symbols' command which dumps whole symbol table together with symbol types etc. --- conf/cf-lex.l | 40 ++++++++++++++++++++++++++++++++++++++++ conf/conf.h | 2 ++ 2 files changed, 42 insertions(+) (limited to 'conf') diff --git a/conf/cf-lex.l b/conf/cf-lex.l index df0f3c1..a54cdd9 100644 --- a/conf/cf-lex.l +++ b/conf/cf-lex.l @@ -308,3 +308,43 @@ cf_pop_scope(void) conf_this_scope = conf_this_scope->next; ASSERT(conf_this_scope); } + +struct symbol * +cf_walk_symbols(struct config *cf, struct symbol *sym, int *pos) +{ + for(;;) + { + if (!sym) + { + if (*pos >= SYM_HASH_SIZE) + return NULL; + sym = cf->sym_hash[(*pos)++]; + } + else + sym = sym->next; + if (sym && sym->scope->active) + return sym; + } +} + +char * +cf_symbol_class_name(struct symbol *sym) +{ + switch (sym->class) + { + case SYM_VOID: + return "undefined"; + case SYM_PROTO: + return "protocol"; + case SYM_NUMBER: + return "numeric constant"; + case SYM_FUNCTION: + return "function"; + case SYM_FILTER: + return "filter"; + case SYM_TABLE: + return "routing table"; + default: + return "unknown type"; + } +} diff --git a/conf/conf.h b/conf/conf.h index 178cdb6..5b80b0d 100644 --- a/conf/conf.h +++ b/conf/conf.h @@ -94,6 +94,8 @@ struct symbol *cf_default_name(char *template, int *counter); void cf_define_symbol(struct symbol *symbol, int type, void *def); void cf_push_scope(struct symbol *); void cf_pop_scope(void); +struct symbol *cf_walk_symbols(struct config *cf, struct symbol *sym, int *pos); +char *cf_symbol_class_name(struct symbol *sym); /* Parser */ -- cgit v1.2.3