4.3BSD/usr/contrib/X/Xlib/XParseColor.c

Compare this file to the similar file:
Show the results in this format:

#include <X/mit-copyright.h>

/* $Header: XParseColor.c,v 10.4 86/02/01 15:37:40 tony Rel $ */
/* Copyright    Massachusetts Institute of Technology    1985	*/

#include "XlibInternal.h"

Status XParseColor (spec, def)
	register char *spec;
	Color *def;
{
	register Display *dpy;
	register XReq *req;
	XRep rep;
	register int n, i;
	int r, g, b;
	char c;

	n = strlen (spec);
	if (*spec != '#') {
	    GetReq (X_LookupColor, 0);
	    req->param.s[0] = n;
	    Data (dpy, spec, n);
	    if (!_XReply (dpy, &rep))
	    	return (0);
	    def->red = rep.param.u[0];
	    def->green = rep.param.u[1];
	    def->blue = rep.param.u[2];
	    return (1);
	}
	spec++;
	n--;
	if (n != 3 && n != 6 && n != 9 && n != 12)
	    return (0);
	n /= 3;
	r = g = b = 0;
	do {
	    r = g;
	    g = b;
	    b = 0;
	    for (i = n; --i >= 0; ) {
		c = *spec++;
		b <<= 4;
		if (c >= '0' && c <= '9')
		    b |= c - '0';
		else if (c >= 'A' && c <= 'F')
		    b |= c - ('A' - 10);
		else if (c >= 'a' && c <= 'f')
		    b |= c - ('a' - 10);
		else return (0);
	    }
	} while (*spec);
	n <<= 2;
	n = 16 - n;
	def->red = r << n;
	def->green = g << n;
	def->blue = b << n;
	return (1);
}