/* $Header$ */ #include #include #include #include "tokenname.h" #include "position.h" #include "file.h" #include "symbol.h" #include "scope.h" #include "Lpars.h" static char *usage = "Usage: %s [] []"; char *progname; char *AckObj; char *AObj; char *dirs[] = { "", 0 }; FILE *db_out; FILE *db_in; int debug; extern struct tokenname tkidf[]; extern char *strindex(); extern void signal_child(); extern void init_del(); extern void init_run(); extern int eof_seen; extern int interrupted; static struct tokenname shorts[] = { {LIST, "l"}, {CONT, "c"}, {STEP, "s"}, {NEXT, "n"}, {DELETE, "d"}, {PRINT, "p"}, {RESTORE, "r"}, {TRACE, "t"}, {WHERE, "w"}, { 0, 0} }; main(argc, argv) char *argv[]; { char *p; db_out = stdout; db_in = stdin; progname = argv[0]; init_del(); while (p = strindex(progname, '/')) { progname = p + 1; } if (argv[1] && argv[1][0] == '-') { switch(argv[1][1]) { case 'd': debug++; break; default: fatal(usage, progname); } argv++; argc--; } if (argc > 3) { fatal(usage, progname); } AckObj = argv[1] ? argv[1] : "a.out"; if (argc == 3) AObj = argv[2]; init_idf(); init_types(); init_scope(); init_languages(); if (DbRead(AckObj) && AObj == 0) AObj = AckObj; else if (AObj == 0) AObj = "a.out"; reserve(tkidf); reserve(shorts); init_run(); prompt(); Commands(); signal_child(SIGKILL); if (eof_seen) putc('\n', db_out); exit(0); } prompt() { if (isatty(fileno(db_in))) { fprintf(db_out, "-> "); fflush(db_out); } } /*VARARGS*/ fatal(va_alist) va_dcl { va_list ap; char *fmt; va_start(ap); { fmt = va_arg(ap, char *); fprintf(db_out, "%s: ", progname); vfprintf(db_out, fmt, ap); fprintf(db_out, "\n"); } va_end(ap); exit(1); } extern int errorgiven; /*VARARGS*/ error(va_alist) va_dcl { va_list ap; char *fmt; if (! interrupted) { va_start(ap); { fmt = va_arg(ap, char *); fprintf(db_out, "%s: ", progname); vfprintf(db_out, fmt, ap); fprintf(db_out, "\n"); } va_end(ap); } errorgiven = 1; } /*VARARGS*/ warning(va_alist) va_dcl { va_list ap; char *fmt; va_start(ap); { fmt = va_arg(ap, char *); fprintf(db_out, "%s: ", progname); vfprintf(db_out, fmt, ap); fprintf(db_out, "\n"); } va_end(ap); } rd_fatal() { fatal("read error in %s", AckObj); } No_Mem() { fatal("out of memory"); }