error.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. /*
  2. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. * See the copyright notice in the ACK home directory, in the file "Copyright".
  4. */
  5. /* $Id$ */
  6. /* E R R O R A N D D I A G N O S T I C R O U T I N E S */
  7. #include <system.h>
  8. #if __STDC__
  9. #include <stdarg.h>
  10. #else
  11. #include <varargs.h>
  12. #endif
  13. #include "print.h"
  14. #include "arith.h"
  15. #include "errout.h"
  16. #include "LLlex.h"
  17. /* This file contains the (non-portable) error-message and diagnostic
  18. functions. Beware, they are called with a variable number of
  19. arguments!
  20. */
  21. int err_occurred;
  22. void err_hdr(char *s)
  23. {
  24. if (FileName) {
  25. fprint(ERROUT, "\"%s\", line %d: %s", FileName, (int)LineNumber, s);
  26. }
  27. else fprint(ERROUT, s);
  28. }
  29. #if __STDC__
  30. /*VARARGS*/
  31. void error(char *fmt, ...)
  32. {
  33. va_list ap;
  34. err_occurred = 1;
  35. err_hdr("");
  36. va_start(ap, fmt);
  37. doprnt(ERROUT, fmt, ap);
  38. fprint(ERROUT, "\n");
  39. va_end(ap);
  40. }
  41. /*VARARGS*/
  42. void warning(char *fmt, ...)
  43. {
  44. va_list ap;
  45. err_hdr("(warning) ");
  46. va_start(ap, fmt);
  47. doprnt(ERROUT, fmt, ap);
  48. fprint(ERROUT, "\n");
  49. va_end(ap);
  50. }
  51. /*VARARGS*/
  52. void strict(char *fmt, ...)
  53. {
  54. va_list ap;
  55. err_hdr("(strict) ");
  56. va_start(ap, fmt);
  57. doprnt(ERROUT, fmt, ap);
  58. fprint(ERROUT, "\n");
  59. va_end(ap);
  60. }
  61. /*VARARGS*/
  62. void crash(char *fmt, ...)
  63. {
  64. va_list ap;
  65. err_hdr("CRASH\007 ");
  66. va_start(ap, fmt);
  67. doprnt(ERROUT, fmt, ap);
  68. fprint(ERROUT, "\n");
  69. va_end(ap);
  70. sys_stop(S_ABORT);
  71. }
  72. /*VARARGS*/
  73. void fatal(char *fmt, ...)
  74. {
  75. va_list ap;
  76. err_hdr("fatal error -- ");
  77. va_start(ap, fmt);
  78. doprnt(ERROUT, fmt, ap);
  79. fprint(ERROUT, "\n");
  80. va_end(ap);
  81. sys_stop(S_EXIT);
  82. }
  83. #else
  84. /*VARARGS*/
  85. error(va_alist)
  86. va_dcl
  87. {
  88. char *fmt;
  89. va_list ap;
  90. err_occurred = 1;
  91. err_hdr("");
  92. va_start(ap);
  93. fmt = va_arg(ap, char *);
  94. doprnt(ERROUT, fmt, ap);
  95. fprint(ERROUT, "\n");
  96. va_end(ap);
  97. }
  98. /*VARARGS*/
  99. warning(va_alist)
  100. va_dcl
  101. {
  102. char *fmt;
  103. va_list ap;
  104. err_hdr("(warning) ");
  105. va_start(ap);
  106. fmt = va_arg(ap, char *);
  107. doprnt(ERROUT, fmt, ap);
  108. fprint(ERROUT, "\n");
  109. va_end(ap);
  110. }
  111. /*VARARGS*/
  112. strict(va_alist)
  113. va_dcl
  114. {
  115. char *fmt;
  116. va_list ap;
  117. err_hdr("(strict) ");
  118. va_start(ap);
  119. fmt = va_arg(ap, char *);
  120. doprnt(ERROUT, fmt, ap);
  121. fprint(ERROUT, "\n");
  122. va_end(ap);
  123. }
  124. /*VARARGS*/
  125. crash(va_alist)
  126. va_dcl
  127. {
  128. char *fmt;
  129. va_list ap;
  130. err_hdr("CRASH\007 ");
  131. va_start(ap);
  132. fmt = va_arg(ap, char *);
  133. doprnt(ERROUT, fmt, ap);
  134. fprint(ERROUT, "\n");
  135. va_end(ap);
  136. sys_stop(S_ABORT);
  137. }
  138. /*VARARGS*/
  139. fatal(va_alist)
  140. va_dcl
  141. {
  142. char *fmt;
  143. va_list ap;
  144. err_hdr("fatal error -- ");
  145. va_start(ap);
  146. fmt = va_arg(ap, char *);
  147. doprnt(ERROUT, fmt, ap);
  148. fprint(ERROUT, "\n");
  149. va_end(ap);
  150. sys_stop(S_EXIT);
  151. }
  152. #endif