home *** CD-ROM | disk | FTP | other *** search
/ PC Shareware 1999 March / PCShareware-3-99.iso / IMPLE / DJGPP.RAR / DJGPP2 / XLIB-SR0.ZIP / SRC / XLIBEMU / ERROR.C < prev    next >
C/C++ Source or Header  |  1994-01-14  |  3KB  |  111 lines

  1. /* $Id: error.c 1.2 1994/01/15 02:06:12 ulrich Exp $ */
  2. /*
  3.  * error.c
  4.  *
  5.  * X library error functions.
  6.  */
  7.  
  8. #include "Xlibemu.h"
  9. #include <stdio.h>
  10.  
  11. extern char *strerror();
  12. #define _SysErrorMsg(n) strerror(n)
  13.  
  14. int _XDefaultError(Display *, XErrorEvent *);
  15. int _XDefaultIOError(Display *);
  16.  
  17. XErrorHandler _XErrorFunction = _XDefaultError;
  18. XIOErrorHandler _XIOErrorFunction = _XDefaultIOError;
  19.  
  20. XErrorHandler _WErrorFunctions[MAX_CONN] = { 0 };
  21.  
  22.  
  23. int
  24. _WError (Display *dpy, XID resourceid, int error_code, int request_code)
  25. {
  26.   XErrorEvent error;
  27.  
  28.   error.type = 0;
  29.   error.display = dpy;
  30.   error.resourceid = resourceid;
  31.   error.serial = ++dpy->request;
  32.   error.error_code = error_code;
  33.   error.request_code = request_code;
  34.   error.minor_code = 0;
  35.  
  36.   if (_WErrorFunctions[ConnectionNumber(dpy)])
  37.     return (*_WErrorFunctions[ConnectionNumber(dpy)]) (dpy, &error);
  38.  
  39.   return (*_XErrorFunction) (dpy, & error);
  40. }
  41.  
  42. void
  43. _WIDValid (Display *dpy, XID resourceid, int error_code, int request_code)
  44. {
  45.   if (resourceid == None)
  46.     _WError (dpy, resourceid, error_code, request_code);
  47. }
  48.  
  49. int _XDefaultError (Display *dpy, XErrorEvent *event)
  50. {
  51.   GrSetMode (GR_default_text);
  52.   fprintf (stderr, "X Error:\n");
  53.   fprintf (stderr, "Resource ID: %08x\n", event->resourceid);
  54.   fprintf (stderr, "Serial:\t%d\n", event->serial);
  55.   if (event->error_code <= BadImplementation)
  56.     fprintf (stderr, "Error code:\t%d\n", event->error_code);
  57.   else
  58.     fprintf (stderr, "Error code:\t%d\n", event->error_code);
  59.   fprintf (stderr, "Request code:\t%d\n", event->request_code);
  60.   fprintf (stderr, "Minor code:\t%d\n", event->minor_code);
  61.   exit (1);
  62. }
  63.  
  64. /*
  65.  * _XDefaultIOError - Default fatal system error reporting routine.  Called 
  66.  * when an X internal system error is encountered.
  67.  */
  68. _XDefaultIOError (dpy)
  69.     Display *dpy;
  70. {
  71.     (void) fprintf (stderr, 
  72.      "XIO:  fatal IO error %d (%s) on X server \"%s\"\r\n",
  73.             errno, _SysErrorMsg (errno), DisplayString (dpy));
  74.     (void) fprintf (stderr, 
  75.      "      after %lu requests (%lu known processed) with %d events remaining.\r\n",
  76.             NextRequest(dpy) - 1, LastKnownRequestProcessed(dpy),
  77.             QLength(dpy));
  78.  
  79.     if (errno == EPIPE) {
  80.         (void) fprintf (stderr,
  81.      "      The connection was probably broken by a server shutdown or KillClient.\r\n");
  82.     }
  83.     exit(1);
  84. }
  85.  
  86. /*
  87.  * _XIOError - call user connection error handler and exit
  88.  */
  89. int _XIOError (dpy)
  90.     Display *dpy;
  91. {
  92.     dpy->flags |= XlibDisplayIOError;
  93.     if (_XIOErrorFunction != NULL)
  94.     (*_XIOErrorFunction)(dpy);
  95.     else
  96.     _XDefaultIOError(dpy);
  97.     exit (1);
  98. }
  99.  
  100. XErrorHandler
  101. XSetDisplayErrorHandler (Display *dpy, XErrorHandler handler)
  102. {
  103.   int i;
  104.   XErrorHandler oldhandler;
  105.  
  106.   i = ConnectionNumber (dpy);
  107.   oldhandler = _WErrorFunctions[i];
  108.   _WErrorFunctions[i] = handler;
  109.   return oldhandler;
  110. }
  111.