plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

error.c (2133B)


      1 /* Copyright (c) 1994-1996 David Hogan, see README for licence details */
      2 #include <stdio.h>
      3 #include <stdlib.h>
      4 #include <X11/X.h>
      5 #include <X11/Xlib.h>
      6 #include <X11/Xutil.h>
      7 #include <X11/Xproto.h>
      8 #include "dat.h"
      9 #include "fns.h"
     10 
     11 int 	ignore_badwindow;
     12 
     13 void
     14 fatal(char *s)
     15 {
     16 	fprintf(stderr, "rio: ");
     17 	perror(s);
     18 	fprintf(stderr, "\n");
     19 	exit(1);
     20 }
     21 
     22 int
     23 handler(Display *d, XErrorEvent *e)
     24 {
     25 	char msg[80], req[80], number[80];
     26 
     27 	if(initting && (e->request_code == X_ChangeWindowAttributes) && (e->error_code == BadAccess)){
     28 		fprintf(stderr, "rio: it looks like there's already a window manager running;  rio not started\n");
     29 		exit(1);
     30 	}
     31 
     32 	if(ignore_badwindow && (e->error_code == BadWindow || e->error_code == BadColor))
     33 		return 0;
     34 
     35 	XGetErrorText(d, e->error_code, msg, sizeof(msg));
     36 	sprintf(number, "%d", e->request_code);
     37 	XGetErrorDatabaseText(d, "XRequest", number, "", req, sizeof(req));
     38 	if(req[0] == '\0')
     39 		sprintf(req, "<request-code-%d>", (int)e->request_code);
     40 
     41 	fprintf(stderr, "rio: %s(0x%x): %s\n", req, (int)e->resourceid, msg);
     42 
     43 	if(initting){
     44 		fprintf(stderr, "rio: failure during initialisation; aborting\n");
     45 		exit(1);
     46 	}
     47 	return 0;
     48 }
     49 
     50 void
     51 graberror(char *f, int err)
     52 {
     53 #ifdef	DEBUG	/* sick of "bug" reports; grab errors "just happen" */
     54 	char *s;
     55 
     56 	switch (err){
     57 	case GrabNotViewable:
     58 		s = "not viewable";
     59 		break;
     60 	case AlreadyGrabbed:
     61 		s = "already grabbed";
     62 		break;
     63 	case GrabFrozen:
     64 		s = "grab frozen";
     65 		break;
     66 	case GrabInvalidTime:
     67 		s = "invalid time";
     68 		break;
     69 	case GrabSuccess:
     70 		return;
     71 	default:
     72 		fprintf(stderr, "rio: %s: grab error: %d\n", f, err);
     73 		return;
     74 	}
     75 	fprintf(stderr, "rio: %s: grab error: %s\n", f, s);
     76 #endif
     77 }
     78 
     79 #ifdef	DEBUG_EV
     80 #include "showevent/ShowEvent.c"
     81 #endif
     82 
     83 #ifdef	DEBUG
     84 
     85 void
     86 dotrace(char *s, Client *c, XEvent *e)
     87 {
     88 	if(debug == 0)
     89 		return;
     90 setbuf(stdout, 0);
     91 	fprintf(stderr, "rio: %s: c=%p", s, (void*)c);
     92 	if(c)
     93 		fprintf(stderr, " x %d y %d dx %d dy %d w 0x%x parent 0x%x", c->x, c->y, c->dx, c->dy, (int)c->window, (int)c->parent);
     94 #ifdef	DEBUG_EV
     95 	if(e){
     96 		fprintf(stderr, "\n\t");
     97 		ShowEvent(e);
     98 	}
     99 #endif
    100 	fprintf(stderr, "\n");
    101 }
    102 #endif