123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- /* $Id$ */
- #include <stdio.h>
- #include <signal.h>
- #if __STDC__
- #include <stdarg.h>
- #else
- #include <varargs.h>
- #endif
- #include "tokenname.h"
- #include "position.h"
- #include "file.h"
- #include "symbol.h"
- #include "scope.h"
- #include "Lpars.h"
- #include "type.h"
- #include "langdep.h"
- #include "misc.h"
- static char *usage = "Usage: %s [<ack.out>] [<a.out>]";
- char *progname;
- char *AckObj;
- char *AObj;
- char *dirs[] = { "", 0 };
- FILE *db_out;
- FILE *db_in;
- int debug;
- extern struct tokenname tkidf[];
- extern char *strchr();
- 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 = strchr(progname, '/')) {
- progname = p + 1;
- }
- while (argv[1] && argv[1][0] == '-') {
- switch(argv[1][1]) {
- case 'v':
- debug++;
- break;
- case 'i':
- int_size = atoi(&argv[1][2]);
- break;
- case 's':
- short_size = atoi(&argv[1][2]);
- break;
- case 'l':
- long_size = atoi(&argv[1][2]);
- break;
- case 'f':
- float_size = atoi(&argv[1][2]);
- break;
- case 'd':
- double_size = atoi(&argv[1][2]);
- break;
- case 'p':
- pointer_size = atoi(&argv[1][2]);
- 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_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();
- if (! currlang) {
- fatal("could not determine source language. Recompile with -g?");
- }
- 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);
- }
- }
- extern int errorgiven;
- #if __STDC__
- void
- fatal(char *fmt, ...)
- {
- va_list ap;
- va_start(ap, fmt);
- {
- fprintf(db_out, "%s: ", progname);
- vfprintf(db_out, fmt, ap);
- fprintf(db_out, "\n");
- }
- va_end(ap);
- exit(1);
- }
- void
- error(char *fmt, ...)
- {
- va_list ap;
- if (! interrupted) {
- va_start(ap, fmt);
- {
- fprintf(db_out, "%s: ", progname);
- vfprintf(db_out, fmt, ap);
- fprintf(db_out, "\n");
- }
- va_end(ap);
- }
- errorgiven = 1;
- }
- void
- warning(char *fmt, ...)
- {
- va_list ap;
- va_start(ap, fmt);
- {
- fprintf(db_out, "%s: ", progname);
- vfprintf(db_out, fmt, ap);
- fprintf(db_out, "\n");
- }
- va_end(ap);
- }
- #else
- /*VARARGS*/
- void
- 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);
- }
- /*VARARGS*/
- void
- 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*/
- void
- 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);
- }
- #endif
- void
- rd_fatal()
- {
- fatal("read error in %s", AckObj);
- }
- void
- No_Mem()
- {
- fatal("out of memory");
- }
|