|
|
1.1 root 1: #include "copyright.h"
2:
3: /* $Header: XErrDes.c,v 11.15 87/09/11 08:02:54 toddb Exp $ */
4: /* Copyright Massachusetts Institute of Technology 1986 */
5:
6: #include <stdio.h>
7: #include "Xlibint.h"
8: #include "Xresource.h"
9: #include "Quarks.h"
10: #include <strings.h>
11:
12: char *XErrorList[] = {
13: /* No error */ "",
14: /* BadRequest */ "bad request code",
15: /* BadValue */ "integer parameter out of range",
16: /* BadWindow */ "parameter not a Window",
17: /* BadPixmap */ "parameter not a Pixmap",
18: /* BadAtom */ "parameter not an Atom",
19: /* BadCursor */ "parameter not a Cursor",
20: /* BadFont */ "parameter not a Font",
21: /* BadMatch */ "parameter mismatch",
22: /* BadDrawable */ "parameter not a Pixmap or Window",
23: /* BadAccess */ "attempt to access private resource",
24: /* BadAlloc */ "insufficient resources",
25: /* BadColor */ "no such colormap",
26: /* BadGC */ "parameter not a GC",
27: /* BadIDChoice */ "invalid resource ID for this connection",
28: /* BadName */ "font or color name does not exist",
29: /* BadLength */ "request length incorrect; internal Xlib error",
30: /* BadImplementation */ "server does not implement function",
31: };
32:
33: XGetErrorText(dpy, code, buffer, nbytes)
34: register int code;
35: register Display *dpy;
36: char *buffer;
37: int nbytes;
38: {
39:
40: char *defaultp = NULL;
41: char buf[32];
42: register _XExtension *ext;
43:
44: sprintf(buf, "%d\0", code);
45:
46:
47: if (code <= (sizeof(XErrorList)/ sizeof (char *)) && code > 0) {
48: defaultp = XErrorList[code];
49: XGetErrorDatabaseText(dpy, "XProtoError", buf, defaultp, buffer, nbytes);
50: }
51: ext = dpy->ext_procs;
52: while (ext) { /* call out to any extensions interested */
53: if (ext->error_string != NULL)
54: (*ext->error_string)(dpy, code, &ext->codes, buffer, nbytes);
55: ext = ext->next;
56: }
57: return;
58: }
59:
60: XGetErrorDatabaseText(dpy, name, type, defaultp, buffer, nbytes)
61: register char *name, *type;
62: char *defaultp;
63: register Display *dpy;
64: char *buffer;
65: int nbytes;
66: {
67:
68: XrmResourceDataBase db;
69: XrmName namelist[5];
70: XrmClass classlist[5];
71: XrmValue result;
72: static int initialized = False;
73: char temp[BUFSIZ];
74:
75: if (initialized == False) {
76: _XInitErrorHandling (&db);
77: initialized = True;
78: }
79: sprintf(temp, "%s.%s", name, type);
80: XrmStringToNameList(temp, namelist);
81: XrmStringToClassList("ErrorType.ErrorNumber", classlist);
82:
83: XrmGetResource(dpy, namelist, classlist, XrmQString, &result);
84: if (result.addr) {
85: (void) strncpy (buffer, result.addr, nbytes);
86: if (result.size < nbytes) buffer[result.size] = 0;
87: } else (void) strncpy(buffer, defaultp, nbytes);
88: }
89:
90:
91: _XInitErrorHandling (db)
92: XrmResourceDataBase *db;
93: {
94: XrmResourceDataBase errordb;
95: FILE *f;
96:
97: XrmInitialize();
98:
99: XrmGetCurrentDataBase(db);
100:
101: f = fopen(ErrorDataBase, "r");
102: if (f) {
103: XrmGetDataBase(f, &errordb);
104: XrmMergeDataBases(errordb, db);
105: XrmSetCurrentDataBase(*db);
106: (void) fclose(f);
107: }
108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.