Blame lib/Xm/XpmI.h

Packit b099d7
/*
Packit b099d7
 * (c) Copyright 1996 Digital Equipment Corporation.
Packit b099d7
 * (c) Copyright 1996 Hewlett-Packard Company.
Packit b099d7
 * (c) Copyright 1996 International Business Machines Corp.
Packit b099d7
 * (c) Copyright 1996 Sun Microsystems, Inc.
Packit b099d7
 * (c) Copyright 1996 Novell, Inc.
Packit b099d7
 * (c) Copyright 1996 FUJITSU LIMITED.
Packit b099d7
 * (c) Copyright 1996 Hitachi.
Packit b099d7
 *
Packit b099d7
 * $TOG: XpmI.h /main/10 1999/09/01 17:16:10 mgreess $
Packit b099d7
 */
Packit b099d7
Packit b099d7
#ifndef _XpmI_h
Packit b099d7
#define _XpmI_h
Packit b099d7
Packit b099d7
#ifdef __cplusplus
Packit b099d7
extern "C" {
Packit b099d7
#endif
Packit b099d7
Packit b099d7
/* Xpm internal symbols are prefixed with _Xm */
Packit b099d7
Packit b099d7
#define xpmParseData _XmxpmParseData
Packit b099d7
#define xpmParseDataAndCreate _XmxpmParseDataAndCreate
Packit b099d7
#define xpmFreeColorTable _XmxpmFreeColorTable
Packit b099d7
#define xpmInitAttributes _XmxpmInitAttributes
Packit b099d7
#define xpmInitXpmImage _XmxpmInitXpmImage
Packit b099d7
#define xpmInitXpmInfo _XmxpmInitXpmInfo
Packit b099d7
#define xpmSetInfoMask _XmxpmSetInfoMask
Packit b099d7
#define xpmSetInfo _XmxpmSetInfo
Packit b099d7
#define xpmSetAttributes _XmxpmSetAttributes
Packit b099d7
#define xpmCreatePixmapFromImage _XmxpmCreatePixmapFromImage
Packit b099d7
#define xpmCreateImageFromPixmap _XmxpmCreateImageFromPixmap
Packit b099d7
#define xpmHashTableInit _XmxpmHashTableInit
Packit b099d7
#define xpmHashTableFree _XmxpmHashTableFree
Packit b099d7
#define xpmHashSlot _XmxpmHashSlot
Packit b099d7
#define xpmHashIntern _XmxpmHashIntern
Packit b099d7
#define xpmNextString _XmxpmNextString
Packit b099d7
#define xpmNextUI _XmxpmNextUI
Packit b099d7
#define xpmGetString _XmxpmGetString
Packit b099d7
#define xpmNextWord _XmxpmNextWord
Packit b099d7
#define xpmGetCmt _XmxpmGetCmt
Packit b099d7
#define xpmParseHeader _XmxpmParseHeader
Packit b099d7
#define xpmParseValues _XmxpmParseValues
Packit b099d7
#define xpmParseColors _XmxpmParseColors
Packit b099d7
#define xpmParseExtensions _XmxpmParseExtensions
Packit b099d7
#define xpmReadRgbNames _XmxpmReadRgbNames
Packit b099d7
#define xpmGetRgbName _XmxpmGetRgbName
Packit b099d7
#define xpmFreeRgbNames _XmxpmFreeRgbNames
Packit b099d7
#define xpmGetRGBfromName _XmxpmGetRGBfromName
Packit b099d7
#define xpm_xynormalizeimagebits _Xmxpm_xynormalizeimagebits
Packit b099d7
#define xpm_znormalizeimagebits _Xmxpm_znormalizeimagebits
Packit b099d7
#define xpmstrdup _Xmxpmstrdup
Packit b099d7
#define xpmstrcasecmp _Xmxpmstrcasecmp
Packit b099d7
#define xpmatoui _Xmxpmatoui
Packit b099d7
#define xpmDataTypes _XmxpmDataTypes
Packit b099d7
#define xpmColorKeys _XmxpmColorKeys
Packit b099d7
Packit b099d7
/* The following is the original XpmI.h header file,
Packit b099d7
   except that it includes XpmP.h instead of xpm.h */
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Copyright (C) 1989-95 GROUPE BULL
Packit b099d7
 *
Packit b099d7
 * Permission is hereby granted, free of charge, to any person obtaining a copy
Packit b099d7
 * of this software and associated documentation files (the "Software"), to
Packit b099d7
 * deal in the Software without restriction, including without limitation the
Packit b099d7
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
Packit b099d7
 * sell copies of the Software, and to permit persons to whom the Software is
Packit b099d7
 * furnished to do so, subject to the following conditions:
Packit b099d7
 *
Packit b099d7
 * The above copyright notice and this permission notice shall be included in
Packit b099d7
 * all copies or substantial portions of the Software.
Packit b099d7
 *
Packit b099d7
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Packit b099d7
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Packit b099d7
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
Packit b099d7
 * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
Packit b099d7
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
Packit b099d7
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Packit b099d7
 *
Packit b099d7
 * Except as contained in this notice, the name of GROUPE BULL shall not be
Packit b099d7
 * used in advertising or otherwise to promote the sale, use or other dealings
Packit b099d7
 * in this Software without prior written authorization from GROUPE BULL.
Packit b099d7
 */
Packit b099d7
Packit b099d7
/*****************************************************************************\
Packit b099d7
* XpmI.h:                                                                     *
Packit b099d7
*                                                                             *
Packit b099d7
*  XPM library                                                                *
Packit b099d7
*  Internal Include file                                                      *
Packit b099d7
*                                                                             *
Packit b099d7
*  ** Everything defined here is subject to changes any time. **              *
Packit b099d7
*                                                                             *
Packit b099d7
*  Developed by Arnaud Le Hors                                                *
Packit b099d7
\*****************************************************************************/
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * The code related to FOR_MSW has been added by
Packit b099d7
 * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
Packit b099d7
 */
Packit b099d7
Packit b099d7
#ifndef XPMI_h
Packit b099d7
#define XPMI_h
Packit b099d7
Packit b099d7
#include "XpmP.h"
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * lets try to solve include files
Packit b099d7
 */
Packit b099d7
Packit b099d7
#include <sys/types.h>
Packit b099d7
#include <stdio.h>
Packit b099d7
#include <stdlib.h>
Packit b099d7
#include <limits.h>
Packit b099d7
#include <X11/Xmd.h>
Packit b099d7
/* stdio.h doesn't declare popen on a Sequent DYNIX OS */
Packit b099d7
#ifdef sequent
Packit b099d7
extern FILE *popen();
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#if defined(SYSV) || defined(SVR4) || defined(VMS) || defined(WIN32) || defined (_SVID_SOURCE)
Packit b099d7
#include <string.h>
Packit b099d7
Packit b099d7
#ifndef index
Packit b099d7
#define index strchr
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#ifndef rindex
Packit b099d7
#define rindex strrchr
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#else  /* defined(SYSV) || defined(SVR4) || defined(VMS) */
Packit b099d7
#include <strings.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
#if defined(SYSV) || defined(SVR4) || defined(VMS) || defined(WIN32)
Packit b099d7
#ifndef bcopy
Packit b099d7
#define bcopy(source, dest, count) memcpy(dest, source, count)
Packit b099d7
#endif
Packit b099d7
#ifndef bzero
Packit b099d7
#define bzero(b, len) memset(b, 0, len)
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
Packit b099d7
/* the following is defined in X11R6 but not in previous versions */
Packit b099d7
#ifdef __alpha
Packit b099d7
#ifndef LONG64
Packit b099d7
#define LONG64
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#ifdef VMS
Packit b099d7
#include <unixio.h>
Packit b099d7
#include <file.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
/* The following should help people wanting to use their own memory allocation
Packit b099d7
 * functions. To avoid the overhead of a function call when the standard
Packit b099d7
 * functions are used these are all macros, even the XpmFree function which
Packit b099d7
 * needs to be a real function for the outside world though.
Packit b099d7
 * So if change these be sure to change the XpmFree function in misc.c
Packit b099d7
 * accordingly.
Packit b099d7
 */
Packit b099d7
#ifndef NO_XPMFREE_MACRO
Packit b099d7
#ifdef XpmFree
Packit b099d7
#undef XpmFree
Packit b099d7
#endif
Packit b099d7
#define XpmFree(ptr) free(ptr)
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#ifndef FOR_MSW
Packit b099d7
#define XpmMalloc(size) malloc((size))
Packit b099d7
#define XpmRealloc(ptr, size) realloc((ptr), (size))
Packit b099d7
#define XpmCalloc(nelem, elsize) calloc((nelem), (elsize))
Packit b099d7
#else
Packit b099d7
/* checks for mallocs bigger than 64K */
Packit b099d7
#define XpmMalloc(size) boundCheckingMalloc((long)(size))/* in simx.[ch] */
Packit b099d7
#define XpmRealloc(ptr, size) boundCheckingRealloc((ptr),(long)(size))
Packit b099d7
#define XpmCalloc(nelem, elsize) \
Packit b099d7
		boundCheckingCalloc((long)(nelem),(long) (elsize))
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#define XPMMAXCMTLEN BUFSIZ
Packit b099d7
typedef struct {
Packit b099d7
    unsigned int type;
Packit b099d7
    union {
Packit b099d7
	FILE *file;
Packit b099d7
	char **data;
Packit b099d7
    }     stream;
Packit b099d7
    char *cptr;
Packit b099d7
    unsigned int line;
Packit b099d7
    int CommentLength;
Packit b099d7
    char Comment[XPMMAXCMTLEN];
Packit b099d7
    char *Bcmt, *Ecmt, Bos, Eos;
Packit b099d7
    int format;			/* 1 if XPM1, 0 otherwise */
Packit b099d7
}      xpmData;
Packit b099d7
Packit b099d7
#define XPMARRAY 0
Packit b099d7
#define XPMFILE  1
Packit b099d7
#define XPMPIPE  2
Packit b099d7
#define XPMBUFFER 3
Packit b099d7
Packit b099d7
#define EOL '\n'
Packit b099d7
#define TAB '\t'
Packit b099d7
#define SPC ' '
Packit b099d7
Packit b099d7
typedef struct {
Packit b099d7
    char *type;			/* key word */
Packit b099d7
    char *Bcmt;			/* string beginning comments */
Packit b099d7
    char *Ecmt;			/* string ending comments */
Packit b099d7
    char Bos;			/* character beginning strings */
Packit b099d7
    char Eos;			/* character ending strings */
Packit b099d7
    char *Strs;			/* strings separator */
Packit b099d7
    char *Dec;			/* data declaration string */
Packit b099d7
    char *Boa;			/* string beginning assignment */
Packit b099d7
    char *Eoa;			/* string ending assignment */
Packit b099d7
}      xpmDataType;
Packit b099d7
Packit b099d7
extern xpmDataType xpmDataTypes[];
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * rgb values and ascii names (from rgb text file) rgb values,
Packit b099d7
 * range of 0 -> 65535 color mnemonic of rgb value
Packit b099d7
 */
Packit b099d7
typedef struct {
Packit b099d7
    int r, g, b;
Packit b099d7
    char *name;
Packit b099d7
}      xpmRgbName;
Packit b099d7
Packit b099d7
/* Maximum number of rgb mnemonics allowed in rgb text file. */
Packit b099d7
#define MAX_RGBNAMES 1024
Packit b099d7
Packit b099d7
extern char *xpmColorKeys[];
Packit b099d7
Packit b099d7
#define TRANSPARENT_COLOR "None"	/* this must be a string! */
Packit b099d7
Packit b099d7
/* number of xpmColorKeys */
Packit b099d7
#define NKEYS 5
Packit b099d7
Packit b099d7
/* XPM internal routines */
Packit b099d7
Packit b099d7
FUNC(xpmParseData, int, (xpmData *data, XpmImage *image, XpmInfo *info));
Packit b099d7
FUNC(xpmParseDataAndCreate, int, (Display *display, xpmData *data,
Packit b099d7
				  XImage **image_return,
Packit b099d7
				  XImage **shapeimage_return,
Packit b099d7
				  XpmImage *image, XpmInfo *info,
Packit b099d7
				  XpmAttributes *attributes));
Packit b099d7
Packit b099d7
FUNC(xpmFreeColorTable, void, (XpmColor *colorTable, int ncolors));
Packit b099d7
Packit b099d7
FUNC(xpmInitAttributes, void, (XpmAttributes *attributes));
Packit b099d7
Packit b099d7
FUNC(xpmInitXpmImage, void, (XpmImage *image));
Packit b099d7
Packit b099d7
FUNC(xpmInitXpmInfo, void, (XpmInfo *info));
Packit b099d7
Packit b099d7
FUNC(xpmSetInfoMask, void, (XpmInfo *info, XpmAttributes *attributes));
Packit b099d7
FUNC(xpmSetInfo, void, (XpmInfo *info, XpmAttributes *attributes));
Packit b099d7
FUNC(xpmSetAttributes, void, (XpmAttributes *attributes, XpmImage *image,
Packit b099d7
			      XpmInfo *info));
Packit b099d7
Packit b099d7
#ifndef FOR_MSW
Packit b099d7
FUNC(xpmCreatePixmapFromImage, void, (Display *display, Drawable d,
Packit b099d7
				      XImage *ximage, Pixmap *pixmap_return));
Packit b099d7
Packit b099d7
FUNC(xpmCreateImageFromPixmap, void, (Display *display, Pixmap pixmap,
Packit b099d7
				      XImage **ximage_return,
Packit b099d7
				      unsigned int *width,
Packit b099d7
				      unsigned int *height));
Packit b099d7
#endif
Packit b099d7
Packit b099d7
/* structures and functions related to hastable code */
Packit b099d7
Packit b099d7
typedef struct _xpmHashAtom {
Packit b099d7
    char *name;
Packit b099d7
    void *data;
Packit b099d7
}      *xpmHashAtom;
Packit b099d7
Packit b099d7
typedef struct {
Packit b099d7
    unsigned int size;
Packit b099d7
    unsigned int limit;
Packit b099d7
    unsigned int used;
Packit b099d7
    xpmHashAtom *atomTable;
Packit b099d7
}      xpmHashTable;
Packit b099d7
Packit b099d7
FUNC(xpmHashTableInit, int, (xpmHashTable *table));
Packit b099d7
FUNC(xpmHashTableFree, void, (xpmHashTable *table));
Packit b099d7
FUNC(xpmHashSlot, xpmHashAtom *, (xpmHashTable *table, char *s));
Packit b099d7
FUNC(xpmHashIntern, int, (xpmHashTable *table, char *tag, void *data));
Packit b099d7
Packit b099d7
#define HashAtomData(i) ((void *)i)
Packit b099d7
#define HashColorIndex(slot) ((unsigned int)((*slot)->data))
Packit b099d7
#define USE_HASHTABLE (cpp > 2 && ncolors > 4)
Packit b099d7
Packit b099d7
/* I/O utility */
Packit b099d7
Packit b099d7
FUNC(xpmNextString, int, (xpmData *mdata));
Packit b099d7
FUNC(xpmNextUI, int, (xpmData *mdata, unsigned int *ui_return));
Packit b099d7
FUNC(xpmGetString, int, (xpmData *mdata, char **sptr, unsigned int *l));
Packit b099d7
Packit b099d7
#define xpmGetC(mdata) \
Packit b099d7
	((!mdata->type || mdata->type == XPMBUFFER) ? \
Packit b099d7
	 (*mdata->cptr++) : (getc(mdata->stream.file)))
Packit b099d7
Packit b099d7
FUNC(xpmNextWord, unsigned int,
Packit b099d7
     (xpmData *mdata, char *buf, unsigned int buflen));
Packit b099d7
FUNC(xpmGetCmt, int, (xpmData *mdata, char **cmt));
Packit b099d7
FUNC(xpmParseHeader, int, (xpmData *mdata));
Packit b099d7
FUNC(xpmParseValues, int, (xpmData *data, unsigned int *width,
Packit b099d7
			   unsigned int *height, unsigned int *ncolors,
Packit b099d7
			   unsigned int *cpp, unsigned int *x_hotspot,
Packit b099d7
			   unsigned int *y_hotspot, unsigned int *hotspot,
Packit b099d7
			   unsigned int *extensions));
Packit b099d7
Packit b099d7
FUNC(xpmParseColors, int, (xpmData *data, unsigned int ncolors,
Packit b099d7
			   unsigned int cpp, XpmColor **colorTablePtr,
Packit b099d7
			   xpmHashTable *hashtable));
Packit b099d7
Packit b099d7
FUNC(xpmParseExtensions, int, (xpmData *data, XpmExtension **extensions,
Packit b099d7
			       unsigned int *nextensions));
Packit b099d7
Packit b099d7
/* RGB utility */
Packit b099d7
Packit b099d7
FUNC(xpmReadRgbNames, int, (char *rgb_fname, xpmRgbName *rgbn));
Packit b099d7
FUNC(xpmGetRgbName, char *, (xpmRgbName *rgbn, int rgbn_max,
Packit b099d7
			     int red, int green, int blue));
Packit b099d7
FUNC(xpmFreeRgbNames, void, (xpmRgbName *rgbn, int rgbn_max));
Packit b099d7
#ifdef FOR_MSW
Packit b099d7
FUNC(xpmGetRGBfromName,int, (char *name, int *r, int *g, int *b));
Packit b099d7
#endif
Packit b099d7
Packit b099d7
FUNC(xpm_xynormalizeimagebits, void, (register unsigned char *bp,
Packit b099d7
				      register XImage *img));
Packit b099d7
FUNC(xpm_znormalizeimagebits, void, (register unsigned char *bp,
Packit b099d7
				     register XImage *img));
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Macros
Packit b099d7
 *
Packit b099d7
 * The XYNORMALIZE macro determines whether XY format data requires
Packit b099d7
 * normalization and calls a routine to do so if needed. The logic in
Packit b099d7
 * this module is designed for LSBFirst byte and bit order, so
Packit b099d7
 * normalization is done as required to present the data in this order.
Packit b099d7
 *
Packit b099d7
 * The ZNORMALIZE macro performs byte and nibble order normalization if
Packit b099d7
 * required for Z format data.
Packit b099d7
 *
Packit b099d7
 * The XYINDEX macro computes the index to the starting byte (char) boundary
Packit b099d7
 * for a bitmap_unit containing a pixel with coordinates x and y for image
Packit b099d7
 * data in XY format.
Packit b099d7
 *
Packit b099d7
 * The ZINDEX* macros compute the index to the starting byte (char) boundary
Packit b099d7
 * for a pixel with coordinates x and y for image data in ZPixmap format.
Packit b099d7
 *
Packit b099d7
 */
Packit b099d7
Packit b099d7
#define XYNORMALIZE(bp, img) \
Packit b099d7
    if ((img->byte_order == MSBFirst) || (img->bitmap_bit_order == MSBFirst)) \
Packit b099d7
	xpm_xynormalizeimagebits((unsigned char *)(bp), img)
Packit b099d7
Packit b099d7
#define ZNORMALIZE(bp, img) \
Packit b099d7
    if (img->byte_order == MSBFirst) \
Packit b099d7
	xpm_znormalizeimagebits((unsigned char *)(bp), img)
Packit b099d7
Packit b099d7
#define XYINDEX(x, y, img) \
Packit b099d7
    ((y) * img->bytes_per_line) + \
Packit b099d7
    (((x) + img->xoffset) / img->bitmap_unit) * (img->bitmap_unit >> 3)
Packit b099d7
Packit b099d7
#define ZINDEX(x, y, img) ((y) * img->bytes_per_line) + \
Packit b099d7
    (((x) * img->bits_per_pixel) >> 3)
Packit b099d7
Packit b099d7
#define ZINDEX32(x, y, img) ((y) * img->bytes_per_line) + ((x) << 2)
Packit b099d7
Packit b099d7
#define ZINDEX16(x, y, img) ((y) * img->bytes_per_line) + ((x) << 1)
Packit b099d7
Packit b099d7
#define ZINDEX8(x, y, img) ((y) * img->bytes_per_line) + (x)
Packit b099d7
Packit b099d7
#define ZINDEX1(x, y, img) ((y) * img->bytes_per_line) + ((x) >> 3)
Packit b099d7
Packit b099d7
#ifdef __STDC__
Packit b099d7
#define Const const
Packit b099d7
#else
Packit b099d7
#define Const /**/
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#ifdef NEED_STRDUP
Packit b099d7
FUNC(xpmstrdup, char *, (char *s1));
Packit b099d7
#else
Packit b099d7
#undef xpmstrdup
Packit b099d7
#define xpmstrdup strdup
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#ifdef NEED_STRCASECMP                   
Packit b099d7
FUNC(xpmstrcasecmp, int, (char *s1, char *s2));
Packit b099d7
#else
Packit b099d7
#undef xpmstrcasecmp
Packit b099d7
#define xpmstrcasecmp strcasecmp
Packit b099d7
#endif
Packit b099d7
Packit b099d7
FUNC(xpmatoui, unsigned int,
Packit b099d7
     (char *p, unsigned int l, unsigned int *ui_return));
Packit b099d7
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#ifdef __cplusplus
Packit b099d7
}  /* Close scope of 'extern "C"' declaration which encloses file. */
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#endif /* _XpmI_h */