|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T X
Length: 2328 (0x918) Types: TextFile Names: »XReadBitmapF.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« └─⟦2109abc41⟧ └─⟦this⟧ »./X.V10R4/Xlib/XReadBitmapF.c«
#include <X/mit-copyright.h> /* Copyright Massachusetts Institute of Technology 1985 */ /* $Header: XReadBitmapF.c,v 10.10 86/11/18 11:54:02 jg Rel $ */ #include "XlibInternal.h" #include <stdio.h> #include <errno.h> #include <strings.h> #define boolean int extern int errno; Status XReadBitmapFile(filename, width, height, data, x_hot, y_hot) char *filename; register int *width, *height; /* RETURN; must be non-NULL */ register short **data; /* RETURN */ int *x_hot, *y_hot; /* RETURN; may be NULL */ { char variable[81]; int status, value, i, data_length; FILE *file = fopen (filename, "r"); if (file == NULL) return (0); *width = *height = -1; if (x_hot) *x_hot = -1; if (y_hot) *y_hot = -1; while ((status = fscanf (file, "#define %80s %2d\n", variable, &value))==2) { if (StringEndsWith (variable, "width")) *width = value; else if (StringEndsWith (variable, "height")) *height = value; else if (StringEndsWith (variable, "x_hot")) { if (x_hot) *x_hot = value; } else if (StringEndsWith (variable, "y_hot")) { if (y_hot) *y_hot = value; } } if (*width <= 0) { fclose (file); errno = EINVAL; return (-1); } if (*height <= 0) { fclose (file); errno = EINVAL; return (-2); } data_length = BitmapSize (*width, *height); *data = (short *) malloc (data_length); data_length /= sizeof(short); if (*data == NULL) { fclose (file); return (-3); } status = fscanf (file, "static short %80s = { 0x%4hx", variable, *data); /* fills in 0th element of *data array */ if ((status != 2) || !StringEndsWith (variable, "bits[]")) { free ((char *)*data); fclose (file); errno = EINVAL; return (-4); } for (i=1;i<data_length;i++) { /* fill in i'th element of data array */ status = fscanf (file, ", 0x%4hx", *data + i); if (status != 1) { free ((char *)*data); fclose (file); errno = EINVAL; return (-5); } } fclose (file); return (1); } /* StringEndsWith returns TRUE if "s" ends with "suffix", else returns FALSE */ static boolean StringEndsWith (s, suffix) char *s, *suffix; { int s_len = strlen (s); int suffix_len = strlen (suffix); return (strcmp (s + s_len - suffix_len, suffix) == 0); }