]>
git.saurik.com Git - wxWidgets.git/blob - src/xpm/xpmi.h
2 * Copyright (C) 1989-95 GROUPE BULL
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to
6 * deal in the Software without restriction, including without limitation the
7 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8 * sell copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 * Except as contained in this notice, the name of GROUPE BULL shall not be
22 * used in advertising or otherwise to promote the sale, use or other dealings
23 * in this Software without prior written authorization from GROUPE BULL.
26 /*****************************************************************************\
30 * Internal Include file *
32 * ** Everything defined here is subject to changes any time. ** *
34 * Developed by Arnaud Le Hors *
35 \*****************************************************************************/
38 * The code related to FOR_MSW has been added by
39 * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
48 * lets try to solve include files
53 /* stdio.h doesn't declare popen on a Sequent DYNIX OS */
58 #if defined(SYSV) || defined(SVR4) || defined(VMS) || defined(WIN32)
66 #define rindex strrchr
69 #else /* defined(SYSV) || defined(SVR4) || defined(VMS) */
75 #if defined(SYSV) || defined(SVR4) || defined(VMS) || defined(WIN32)
77 #define bcopy(source, dest, count) memcpy(dest, source, count)
80 #define bzero(b, len) memset(b, 0, len)
84 /* the following is defined in X11R6 but not in previous versions */
96 /* The following should help people wanting to use their own memory allocation
97 * functions. To avoid the overhead of a function call when the standard
98 * functions are used these are all macros, even the XpmFree function which
99 * needs to be a real function for the outside world though.
100 * So if change these be sure to change the XpmFree function in misc.c
103 #define XpmFree(ptr) free(ptr)
106 #define XpmMalloc(size) malloc((size))
107 #define XpmRealloc(ptr, size) realloc((ptr), (size))
108 #define XpmCalloc(nelem, elsize) calloc((nelem), (elsize))
110 /* checks for mallocs bigger than 64K */
111 #define XpmMalloc(size) boundCheckingMalloc((long)(size))/* in simx.[ch] */
112 #define XpmRealloc(ptr, size) boundCheckingRealloc((ptr),(long)(size))
113 #define XpmCalloc(nelem, elsize) \
114 boundCheckingCalloc((long)(nelem),(long) (elsize))
117 #define XPMMAXCMTLEN BUFSIZ
127 char Comment
[XPMMAXCMTLEN
];
128 char *Bcmt
, *Ecmt
, Bos
, Eos
;
129 int format
; /* 1 if XPM1, 0 otherwise */
146 char *type
; /* key word */
147 char *Bcmt
; /* string beginning comments */
148 char *Ecmt
; /* string ending comments */
149 char Bos
; /* character beginning strings */
150 char Eos
; /* character ending strings */
151 char *Strs
; /* strings separator */
152 char *Dec
; /* data declaration string */
153 char *Boa
; /* string beginning assignment */
154 char *Eoa
; /* string ending assignment */
157 extern xpmDataType xpmDataTypes
[];
160 * rgb values and ascii names (from rgb text file) rgb values,
161 * range of 0 -> 65535 color mnemonic of rgb value
168 /* Maximum number of rgb mnemonics allowed in rgb text file. */
169 #define MAX_RGBNAMES 1024
171 extern char *xpmColorKeys
[];
173 #define TRANSPARENT_COLOR "None" /* this must be a string! */
175 /* number of xpmColorKeys */
178 /* XPM internal routines */
180 FUNC(xpmParseData
, int, (xpmData
*data
, XpmImage
*image
, XpmInfo
*info
));
181 FUNC(xpmParseDataAndCreate
, int, (Display
*display
, xpmData
*data
,
182 XImage
**image_return
,
183 XImage
**shapeimage_return
,
184 XpmImage
*image
, XpmInfo
*info
,
185 XpmAttributes
*attributes
));
187 FUNC(xpmFreeColorTable
, void, (XpmColor
*colorTable
, int ncolors
));
189 FUNC(xpmInitAttributes
, void, (XpmAttributes
*attributes
));
191 FUNC(xpmInitXpmImage
, void, (XpmImage
*image
));
193 FUNC(xpmInitXpmInfo
, void, (XpmInfo
*info
));
195 FUNC(xpmSetInfoMask
, void, (XpmInfo
*info
, XpmAttributes
*attributes
));
196 FUNC(xpmSetInfo
, void, (XpmInfo
*info
, XpmAttributes
*attributes
));
197 FUNC(xpmSetAttributes
, void, (XpmAttributes
*attributes
, XpmImage
*image
,
200 #if !defined(FOR_MSW) && !defined(AMIGA)
201 FUNC(xpmCreatePixmapFromImage
, void, (Display
*display
, Drawable d
,
202 XImage
*ximage
, Pixmap
*pixmap_return
));
204 FUNC(xpmCreateImageFromPixmap
, void, (Display
*display
, Pixmap pixmap
,
205 XImage
**ximage_return
,
207 unsigned int *height
));
210 /* structures and functions related to hastable code */
212 typedef struct _xpmHashAtom
{
221 xpmHashAtom
*atomTable
;
224 FUNC(xpmHashTableInit
, int, (xpmHashTable
*table
));
225 FUNC(xpmHashTableFree
, void, (xpmHashTable
*table
));
226 FUNC(xpmHashSlot
, xpmHashAtom
*, (xpmHashTable
*table
, char *s
));
227 FUNC(xpmHashIntern
, int, (xpmHashTable
*table
, char *tag
, void *data
));
229 #define HashAtomData(i) ((void *)i)
230 #define HashColorIndex(slot) ((unsigned int)((*slot)->data))
231 #define USE_HASHTABLE (cpp > 2 && ncolors > 4)
235 FUNC(xpmNextString
, int, (xpmData
*mdata
));
236 FUNC(xpmNextUI
, int, (xpmData
*mdata
, unsigned int *ui_return
));
237 FUNC(xpmGetString
, int, (xpmData
*mdata
, char **sptr
, unsigned int *l
));
239 #define xpmGetC(mdata) \
240 ((!mdata->type || mdata->type == XPMBUFFER) ? \
241 (*mdata->cptr++) : (getc(mdata->stream.file)))
243 FUNC(xpmNextWord
, unsigned int,
244 (xpmData
*mdata
, char *buf
, unsigned int buflen
));
245 FUNC(xpmGetCmt
, int, (xpmData
*mdata
, char **cmt
));
246 FUNC(xpmParseHeader
, int, (xpmData
*mdata
));
247 FUNC(xpmParseValues
, int, (xpmData
*data
, unsigned int *width
,
248 unsigned int *height
, unsigned int *ncolors
,
249 unsigned int *cpp
, unsigned int *x_hotspot
,
250 unsigned int *y_hotspot
, unsigned int *hotspot
,
251 unsigned int *extensions
));
253 FUNC(xpmParseColors
, int, (xpmData
*data
, unsigned int ncolors
,
254 unsigned int cpp
, XpmColor
**colorTablePtr
,
255 xpmHashTable
*hashtable
));
257 FUNC(xpmParseExtensions
, int, (xpmData
*data
, XpmExtension
**extensions
,
258 unsigned int *nextensions
));
262 FUNC(xpmReadRgbNames
, int, (char *rgb_fname
, xpmRgbName
*rgbn
));
263 FUNC(xpmGetRgbName
, char *, (xpmRgbName
*rgbn
, int rgbn_max
,
264 int red
, int green
, int blue
));
265 FUNC(xpmFreeRgbNames
, void, (xpmRgbName
*rgbn
, int rgbn_max
));
267 FUNC(xpmGetRGBfromName
,int, (char *name
, int *r
, int *g
, int *b
));
271 FUNC(xpm_xynormalizeimagebits
, void, (register unsigned char *bp
,
272 register XImage
*img
));
273 FUNC(xpm_znormalizeimagebits
, void, (register unsigned char *bp
,
274 register XImage
*img
));
279 * The XYNORMALIZE macro determines whether XY format data requires
280 * normalization and calls a routine to do so if needed. The logic in
281 * this module is designed for LSBFirst byte and bit order, so
282 * normalization is done as required to present the data in this order.
284 * The ZNORMALIZE macro performs byte and nibble order normalization if
285 * required for Z format data.
287 * The XYINDEX macro computes the index to the starting byte (char) boundary
288 * for a bitmap_unit containing a pixel with coordinates x and y for image
291 * The ZINDEX* macros compute the index to the starting byte (char) boundary
292 * for a pixel with coordinates x and y for image data in ZPixmap format.
296 #define XYNORMALIZE(bp, img) \
297 if ((img->byte_order == MSBFirst) || (img->bitmap_bit_order == MSBFirst)) \
298 xpm_xynormalizeimagebits((unsigned char *)(bp), img)
300 #define ZNORMALIZE(bp, img) \
301 if (img->byte_order == MSBFirst) \
302 xpm_znormalizeimagebits((unsigned char *)(bp), img)
304 #define XYINDEX(x, y, img) \
305 ((y) * img->bytes_per_line) + \
306 (((x) + img->xoffset) / img->bitmap_unit) * (img->bitmap_unit >> 3)
308 #define ZINDEX(x, y, img) ((y) * img->bytes_per_line) + \
309 (((x) * img->bits_per_pixel) >> 3)
311 #define ZINDEX32(x, y, img) ((y) * img->bytes_per_line) + ((x) << 2)
313 #define ZINDEX16(x, y, img) ((y) * img->bytes_per_line) + ((x) << 1)
315 #define ZINDEX8(x, y, img) ((y) * img->bytes_per_line) + (x)
317 #define ZINDEX1(x, y, img) ((y) * img->bytes_per_line) + ((x) >> 3)
318 #endif /* not AMIGA */
327 FUNC(xpmstrdup
, char *, (char *s1
));
330 #define xpmstrdup strdup
333 #ifdef NEED_STRCASECMP
334 FUNC(xpmstrcasecmp
, int, (char *s1
, char *s2
));
337 #define xpmstrcasecmp strcasecmp
340 FUNC(xpmatoui
, unsigned int,
341 (char *p
, unsigned int l
, unsigned int *ui_return
));