This is pshalf.c in view mode; [Download] [Up]
#if ( !defined(lint) && !defined(SABER))
static char PCN_rcsid[] = "$Header: /tmp_mnt/ufs/pcn/carl/PCN/IF/Xsw/RCS/pshalf.c,v 1.2 91/09/13 17:02:53 carl Exp $";
#endif
/******************************************************************************
* *
* Copyright (C) The Aerospace Corporation 1991 *
* *
* This software was developed by The Aerospace Corporation as a *
* research endeavor for the United States Air Force *
* Space Systems Division. The current version of the Gauge *
* computer program is available for release to you for *
* educational and research purposes only. It is not *
* to be used for commercial purposes. *
* *
* In addition, the following conditions shall apply. *
* *
* 1) The computer software and documentation were designed to *
* satisfy internal Aerospace requirements only. *
* The software is provided ``as is,'' and The Aerospace Corporation *
* makes no warranty, expressed or implied, as to it accuracy, *
* functioning, or fitness for a particular purpose. *
* *
* 2) The Aerospace Corporation and its personnel are not *
* responsible for providing technical support or general assistance *
* with respect to the software. *
* *
* 3) Neither The Aerospace Corporation nor its personnel shall be *
* liable for claims, losses, or damages arising out of or connected *
* with the use of this software. *
* Your sole and exclusive remedy shall be to request a replacement *
* copy of the program. *
* *
******************************************************************************/
#include <stdio.h>
#include <X11/Xlib.h>
#include <ctype.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/Simple.h>
#define BPL 1 /* Bytes per scanline */
#define PAT_SIZE 5
#define NUMGRAY 64
#define MAXCOLOR ((unsigned long)65535)
#define MAXCOLORS 256
static char grey_message[] = "Couldn't allocate gray";
static char color_message[] = "Couldn't allocate color";
static char file_message[] = "Can't access palette file:";
/*
* Compare two strings ignoring case, comparing at most n characters.
*/
static
strnicmp (a, b, n)
register char *a;
register char *b;
register int n;
{
if (n <= 0) {
return (0);
}
while (*a && *b && n > 1) {
if ((isupper (*a) ? tolower (*a) : *a) !=
(isupper (*b) ? tolower (*b) : *b)) {
break;
}
a += 1;
b += 1;
n -= 1;
}
return (*a - *b);
}
int load_color_palette (dpy, screen, palette, colors)
Display *dpy;
int screen;
char *palette;
unsigned int *colors;
{
extern FILE *fopen ();
FILE *fp;
XColor gray;
XColor viscolor;
char buf[BUFSIZ];
int num_gray;
register char *bp;
register char *ep;
long gval;
unsigned long gdist;
unsigned long lval;
int num_colors = 0;
char * err_buf;
if (DisplayPlanes (dpy, screen) > 1) {
if (!(strnicmp (palette, "greyscale", 9) &&
strnicmp (palette, "grayscale", 9))) {
if ((num_gray = atoi (&palette[9])) <= 0) {
num_gray = NUMGRAY;
}
if (num_gray > MAXCOLORS) {
num_gray = MAXCOLORS;
}
if (num_gray > 1) {
if (!(gdist = MAXCOLOR / (num_gray - 1))) {
gdist = 1;
}
gray.flags = DoRed | DoGreen | DoBlue;
lval = gval = MAXCOLOR;
while (gval >= 0 && gval <= lval && num_colors < num_gray) {
if (gval < gdist) {
gval = 0;
}
gray.red = gray.green = gray.blue = (unsigned long)gval;
if (XAllocColor (dpy, DefaultColormap (dpy, screen),
&gray)) {
colors[num_colors++] = gray.pixel;
} else {
err_buf = XtMalloc(strlen(grey_message)+ 12);
sprintf(err_buf, "%s-%l", grey_message, gval);
XtWarning(err_buf);
XtFree(err_buf);
}
lval = gval;
gval -= gdist;
}
}
} else {
if (!(fp = fopen (palette, "r"))) {
err_buf = XtMalloc(strlen(file_message)+strlen(palette)+8);
sprintf(err_buf, "%s %s",file_message, palette);
XtWarning(err_buf);
XtFree(err_buf);
return -1;
}
while (fgets (buf, sizeof (buf), fp)) {
buf[sizeof (buf) - 1] = '\0';
bp = buf;
while (*bp == ' ' || *bp == '\t') {
bp += 1;
}
ep = &buf[strlen (buf) - 1];
while (ep >= bp && (*ep == '\n' || *ep == ' ' || *ep == '\t')){
*ep-- = '\0';
}
if (ep >= bp) {
if (!XParseColor (dpy, DefaultColormap (dpy, screen),
bp, &viscolor)) {
fprintf (stderr, "Bad color: %s\n", bp);
continue;
}
if (XAllocColor (dpy, DefaultColormap (dpy, screen),
&viscolor)) {
colors[num_colors++] = viscolor.pixel;
} else {
err_buf = XtMalloc(strlen(color_message)+ strlen(bp));
sprintf(err_buf, "%s %s", color_message, bp);
XtWarning(err_buf);
XtFree(err_buf);
}
}
}
fclose(fp);
}
}
return num_colors;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.