main.c 2.3 KB

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