home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume13 / korner / diagnostic.c next >
C/C++ Source or Header  |  1988-01-31  |  2KB  |  80 lines

  1. #include <stdio.h>
  2.  
  3. /*
  4. ** generic error message routines.  Diag_xxx, may be externally set by caller.
  5. **
  6. ** possible portability problem - use of several "long" arguments to pass
  7. ** stack through to underlying printf() family routine.
  8. */
  9.  
  10. /*
  11. **
  12. **    Copyright (c) 1987, Robert L. McQueer
  13. **        All Rights Reserved
  14. **
  15. ** Permission granted for use, modification and redistribution of this
  16. ** software provided that no use is made for commercial gain without the
  17. ** written consent of the author, that all copyright notices remain intact,
  18. ** and that all changes are clearly documented.  No warranty of any kind
  19. ** concerning any use which may be made of this software is offered or implied.
  20. **
  21. */
  22.  
  23. char *Diag_file = "";        /* filename for use in diagnostic message */
  24. int Diag_line = 1;        /* diagnostic line number */
  25. FILE *Diag_fp = stderr;        /* output stream for messages */
  26. char *Diag_cmd = "?";        /* command name for fatal() / usage() */
  27.  
  28. static int (*Fatcall)() = NULL;
  29.  
  30. /*
  31. ** print nonfatal diagnostic with line number from an input file.  Format
  32. ** compatible with "context"
  33. */
  34. diagnostic(s,a,b,c,d,e,f)
  35. char *s;
  36. long a,b,c,d,e,f;
  37. {
  38.     fprintf(Diag_fp,"%s line %d: ",Diag_file,Diag_line);
  39.     fprintf(Diag_fp,s,a,b,c,d,e,f);
  40.     fprintf(Diag_fp,"\n");
  41. }
  42.  
  43. /*
  44. ** print fatal error message and exit.  May call user set cleanup routine first.
  45. ** argument list passed to fatal() will also be passed to cleanup routine.
  46. */
  47. fatal (s,a,b,c,d,e,f)
  48. char *s;
  49. long a,b,c,d,e,f;
  50. {
  51.     fprintf (Diag_fp,"%s: ",Diag_cmd);
  52.     fprintf (Diag_fp,s,a,b,c,d,e,f);
  53.     fprintf (Diag_fp,"\n");
  54.     if (Fatcall != NULL)
  55.         (*Fatcall) (s,a,b,c,d,e,f);
  56.     exit (1);
  57. }
  58.  
  59. /*
  60. ** set cleanup routine for fatal() calls
  61. */
  62. fat_set (fn)
  63. int (*fn) ();
  64. {
  65.     Fatcall = fn;
  66. }
  67.  
  68. /*
  69. ** print usage message and exit.
  70. */
  71. usage (s,a,b,c,d,e,f)
  72. char *s;
  73. long a,b,c,d,e,f;
  74. {
  75.     fprintf (Diag_fp,"usage: %s ",Diag_cmd);
  76.     fprintf (Diag_fp,s,a,b,c,d,e,f);
  77.     fprintf (Diag_fp,"\n");
  78.     exit (1);
  79. }
  80.