|
|
1.1 root 1: #include "copyright.h"
2:
3: /* $Header: XParseCol.c,v 11.13 87/09/11 08:05:21 toddb Exp $ */
4: /* Copyright Massachusetts Institute of Technology 1985 */
5:
6: #define NEED_REPLIES
7: #include "Xlibint.h"
8:
9: Status XParseColor (dpy, cmap, spec, def)
10: register Display *dpy;
11: Colormap cmap;
12: register char *spec;
13: XColor *def;
14: {
15: register int n, i;
16: int r, g, b;
17: char c;
18:
19: n = strlen (spec);
20: if (*spec != '#') {
21: xLookupColorReply reply;
22: register xLookupColorReq *req;
23: LockDisplay(dpy);
24: GetReq (LookupColor, req);
25: req->cmap = cmap;
26: req->nbytes = n;
27: req->length += (n + 3) >> 2;
28: Data (dpy, spec, (long)n);
29: if (!_XReply (dpy, (xReply *) &reply, 0, xTrue)) {
30: UnlockDisplay(dpy);
31: SyncHandle();
32: return (0);
33: }
34: def->red = reply.exactRed;
35: def->green = reply.exactGreen;
36: def->blue = reply.exactBlue;
37: UnlockDisplay(dpy);
38: SyncHandle();
39: return (1);
40: }
41: spec++;
42: n--;
43: if (n != 3 && n != 6 && n != 9 && n != 12)
44: return (0);
45: n /= 3;
46: r = g = b = 0;
47: do {
48: r = g;
49: g = b;
50: b = 0;
51: for (i = n; --i >= 0; ) {
52: c = *spec++;
53: b <<= 4;
54: if (c >= '0' && c <= '9')
55: b |= c - '0';
56: else if (c >= 'A' && c <= 'F')
57: b |= c - ('A' - 10);
58: else if (c >= 'a' && c <= 'f')
59: b |= c - ('a' - 10);
60: else return (0);
61: }
62: } while (*spec != '\0');
63: n <<= 2;
64: n = 16 - n;
65: def->red = r << n;
66: def->green = g << n;
67: def->blue = b << n;
68: return (1);
69: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.