error.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. #ifndef lint
  6. static char rcsid[] = "$Id$";
  7. #endif
  8. #include <stdarg.h>
  9. #include <stdlib.h>
  10. #include <stdio.h>
  11. #include <out.h>
  12. #include "const.h"
  13. static short nerrors = 0;
  14. static void diag(char *, char *, va_list);
  15. void stop()
  16. {
  17. extern char *outputname;
  18. extern int exitstatus;
  19. if (nerrors) {
  20. unlink(outputname);
  21. exit(nerrors);
  22. }
  23. exit(exitstatus);
  24. }
  25. /* VARARGS1 */
  26. void fatal(char *format, ...)
  27. {
  28. va_list ap;
  29. va_start(ap, format);
  30. nerrors++;
  31. diag("fatal", format, ap);
  32. stop();
  33. }
  34. /* VARARGS1 */
  35. void warning(char *format, ...)
  36. {
  37. va_list ap;
  38. va_start(ap, format);
  39. diag("warning", format, ap);
  40. va_end(ap);
  41. }
  42. /* VARARGS1 */
  43. void error(char *format, ...)
  44. {
  45. va_list ap;
  46. va_start(ap, format);
  47. nerrors++;
  48. diag("error", format, ap);
  49. va_end(ap);
  50. }
  51. /* VARARGS1 */
  52. int do_verbose(char *format, ...)
  53. {
  54. va_list ap;
  55. va_start(ap, format);
  56. diag((char *) 0, format, ap);
  57. va_end(ap);
  58. return (0==0);
  59. }
  60. static void diag(char *tail, char *format, va_list ap)
  61. {
  62. extern char *progname, *archname, *modulname;
  63. fprintf(stderr, "%s: ", progname);
  64. if (archname && modulname)
  65. fprintf(stderr, "%s(%.14s): ", archname, modulname);
  66. else if (archname)
  67. fprintf(stderr, "%s: ", archname);
  68. else if (modulname)
  69. fprintf(stderr, "%s: ", modulname);
  70. vfprintf(stderr, format, ap);
  71. if (tail) fprintf(stderr, " (%s)\n", tail);
  72. else putc('\n', stderr);
  73. }