/* * sym dump, but data is _always_ a string (print it) */ int sym_dump_s(SYM sym, int depth) { register struct sym *se; /* symbol entry */ register int d; if (sym == NULL) return 0; if (sym->magic != SYM_MAGIC) { for (d = 0; d < depth; d++) { putchar('"'); putchar(' '); } printf(" = %s\n", (char *)sym); return 0; } for (se = sym->sym; se != NULL; se = se->next) { for (d = 0; d < depth; d++) { putchar('"'); putchar(' '); } printf("%s", se->key); if (((SYM) se->data)->magic == SYM_MAGIC) { putchar('\n'); sym_dump_s((SYM) se->data, depth + 1); } else { printf("(%p) = %s (%p)\n", se->key, (char *)se->data, se->data); } } return 0; }
int main(int argc, char *argv[]) { SYM tags; /* tag data */ int c; while ((c = getopt(argc, argv, "D:ehi")) != -1) { switch(c) { case 'i': set_iscanner(); break; case 'D': set_debug(optarg); break; case 'e': extended++; break; case 'h': fprintf(stderr, "%s [-e] [-i] [ -D area, level ] input-filenames\n", argv[0]); exit(0); default: fprintf(stderr, "invalid argument, %c\n", c); exit(1); } } lex_files(&argv[optind]); /* I hope that argv[argc+1] == NULL */ tags = sym_open(0, 0, 0); scanner(tags); #ifdef DEBUGGING DEBUG(D_INIT, 1) sym_dump_s(tags, 0); #endif reporter(tags); exit(0); }