main.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. static char *usage = "Usage: %s [-d] [<ack.out>] [<a.out>]";
  9. static char *progname;
  10. char *AckObj;
  11. char *AObj;
  12. char *dirs[] = { "", 0 };
  13. FILE *db_out;
  14. FILE *db_in;
  15. t_lineno currline;
  16. int debug;
  17. extern struct tokenname tkidf[];
  18. extern char *strindex();
  19. main(argc, argv)
  20. char *argv[];
  21. {
  22. char *p;
  23. db_out = stdout;
  24. db_in = stdin;
  25. progname = argv[0];
  26. while (p = strindex(progname, '/')) {
  27. progname = p + 1;
  28. }
  29. if (argv[1][0] == '-') {
  30. switch(argv[1][1]) {
  31. case 'd':
  32. debug++;
  33. break;
  34. default:
  35. fatal(usage, progname);
  36. }
  37. argv++;
  38. argc--;
  39. }
  40. if (argc > 3) {
  41. fatal(usage, progname);
  42. }
  43. AckObj = argv[1] ? argv[1] : "a.out";
  44. if (argc == 3) AObj = argv[2];
  45. init_idf();
  46. init_types();
  47. init_scope();
  48. init_languages();
  49. if (DbxRead(AckObj) && AObj == 0) AObj = AckObj;
  50. else if (AObj == 0) AObj = "a.out";
  51. reserve(tkidf);
  52. if (currfile) CurrentScope = currfile->sy_file->f_scope;
  53. if (! init_run()) {
  54. fatal("something wrong with file descriptors");
  55. }
  56. prompt();
  57. Commands();
  58. fputc( '\n', db_out);
  59. exit(0);
  60. }
  61. prompt()
  62. {
  63. if (isatty(fileno(db_in))) {
  64. fprintf(db_out, "%s -> ", progname);
  65. fflush(db_out);
  66. }
  67. }
  68. /*VARARGS1*/
  69. fatal(va_alist)
  70. va_dcl
  71. {
  72. va_list ap;
  73. char *fmt;
  74. va_start(ap);
  75. {
  76. fmt = va_arg(ap, char *);
  77. fprintf(stderr, "%s: ", progname);
  78. vfprintf(stderr, fmt, ap);
  79. fprintf(stderr, "\n");
  80. }
  81. va_end(ap);
  82. abort();
  83. exit(1);
  84. }
  85. extern int errorgiven;
  86. /*VARARGS1*/
  87. error(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(stderr, "%s: ", progname);
  96. vfprintf(stderr, fmt, ap);
  97. fprintf(stderr, "\n");
  98. }
  99. va_end(ap);
  100. errorgiven = 1;
  101. }
  102. rd_fatal()
  103. {
  104. fatal("read error in %s", AckObj);
  105. }
  106. No_Mem()
  107. {
  108. fatal("out of memory");
  109. }