main.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /* $Header$ */
  2. #include <stdio.h>
  3. #include <varargs.h>
  4. #include <signal.h>
  5. #include "tokenname.h"
  6. #include "position.h"
  7. #include "file.h"
  8. #include "symbol.h"
  9. #include "scope.h"
  10. #include "Lpars.h"
  11. static char *usage = "Usage: %s [<ack.out>] [<a.out>]";
  12. char *progname;
  13. char *AckObj;
  14. char *AObj;
  15. char *dirs[] = { "", 0 };
  16. FILE *db_out;
  17. FILE *db_in;
  18. int debug;
  19. extern struct tokenname tkidf[];
  20. extern char *strindex();
  21. extern int eof_seen;
  22. extern int interrupted;
  23. static struct tokenname shorts[] = {
  24. {LIST, "l"},
  25. {CONT, "c"},
  26. {STEP, "s"},
  27. {NEXT, "n"},
  28. {DELETE, "d"},
  29. {PRINT, "p"},
  30. {RESTORE, "r"},
  31. {TRACE, "t"},
  32. {WHERE, "w"},
  33. { 0, 0}
  34. };
  35. main(argc, argv)
  36. char *argv[];
  37. {
  38. char *p;
  39. db_out = stdout;
  40. db_in = stdin;
  41. progname = argv[0];
  42. init_del();
  43. while (p = strindex(progname, '/')) {
  44. progname = p + 1;
  45. }
  46. if (argv[1] && argv[1][0] == '-') {
  47. switch(argv[1][1]) {
  48. case 'd':
  49. debug++;
  50. break;
  51. default:
  52. fatal(usage, progname);
  53. }
  54. argv++;
  55. argc--;
  56. }
  57. if (argc > 3) {
  58. fatal(usage, progname);
  59. }
  60. AckObj = argv[1] ? argv[1] : "a.out";
  61. if (argc == 3) AObj = argv[2];
  62. init_idf();
  63. init_types();
  64. init_scope();
  65. init_languages();
  66. if (DbRead(AckObj) && AObj == 0) AObj = AckObj;
  67. else if (AObj == 0) AObj = "a.out";
  68. reserve(tkidf);
  69. reserve(shorts);
  70. if (! init_run()) {
  71. fatal("something wrong with file descriptors");
  72. }
  73. prompt();
  74. Commands();
  75. signal_child(SIGKILL);
  76. if (eof_seen) putc('\n', db_out);
  77. exit(0);
  78. }
  79. prompt()
  80. {
  81. if (isatty(fileno(db_in))) {
  82. fprintf(db_out, "-> ");
  83. fflush(db_out);
  84. }
  85. }
  86. /*VARARGS*/
  87. fatal(va_alist)
  88. va_dcl
  89. {
  90. va_list ap;
  91. char *fmt;
  92. va_start(ap);
  93. {
  94. fmt = va_arg(ap, char *);
  95. fprintf(db_out, "%s: ", progname);
  96. vfprintf(db_out, fmt, ap);
  97. fprintf(db_out, "\n");
  98. }
  99. va_end(ap);
  100. exit(1);
  101. }
  102. extern int errorgiven;
  103. /*VARARGS*/
  104. error(va_alist)
  105. va_dcl
  106. {
  107. va_list ap;
  108. char *fmt;
  109. if (! interrupted) {
  110. va_start(ap);
  111. {
  112. fmt = va_arg(ap, char *);
  113. fprintf(db_out, "%s: ", progname);
  114. vfprintf(db_out, fmt, ap);
  115. fprintf(db_out, "\n");
  116. }
  117. va_end(ap);
  118. }
  119. errorgiven = 1;
  120. }
  121. /*VARARGS*/
  122. warning(va_alist)
  123. va_dcl
  124. {
  125. va_list ap;
  126. char *fmt;
  127. va_start(ap);
  128. {
  129. fmt = va_arg(ap, char *);
  130. fprintf(db_out, "%s: ", progname);
  131. vfprintf(db_out, fmt, ap);
  132. fprintf(db_out, "\n");
  133. }
  134. va_end(ap);
  135. }
  136. rd_fatal()
  137. {
  138. fatal("read error in %s", AckObj);
  139. }
  140. No_Mem()
  141. {
  142. fatal("out of memory");
  143. }