/* @(#)misc.c 17.1.1.1 (ESO-IPG) 01/25/02 17:26:43 */ /*--------------------------------------------------------------------- * $Date: 93/07/12 18:31:03 $ $Revision: 2.2.6.1 $ *--------------------------------------------------------------------- * * * Copyright (c) 1992, Visual Edge Software Ltd. * * ALL RIGHTS RESERVED. Permission to use, copy, modify, and * distribute this software and its documentation for any purpose * and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Visual Edge Software not be * used in advertising or publicity pertaining to distribution of * the software without specific, written prior permission. The year * included in the notice is the year of the creation of the work. *-------------------------------------------------------------------*/ /* * Copyright 1990, 1991 GROUPE BULL * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of GROUPE BULL not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. GROUPE BULL makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * GROUPE BULL disclaims all warranties with regard to this software, * including all implied warranties of merchantability and fitness, * in no event shall GROUPE BULL be liable for any special, * indirect or consequential damages or any damages * whatsoever resulting from loss of use, data or profits, * whether in an action of contract, negligence or other tortious * action, arising out of or in connection with the use * or performance of this software. * */ /*****************************************************************************\ * misc.c: * * * * XPM library * * Miscellaneous utilities * * * * Developed by Arnaud Le Hors * \*****************************************************************************/ #include "xpmP.h" /* * Free the computed color table */ xpmFreeColorTable(colorTable, ncolors) char ***colorTable; int ncolors; { int a, b; char ***ct, **cts; if (colorTable) { for (a = 0, ct = colorTable; a < ncolors; a++, ct++) if (*ct) { for (b = 0, cts = *ct; b <= NKEYS; b++, cts++) if (*cts) free(*cts); free(*ct); } free(colorTable); } } /* * Intialize the xpmInternAttrib pointers to Null to know * which ones must be freed later on. */ xpmInitInternAttrib(attrib) xpmInternAttrib *attrib; { attrib->ncolors = 0; attrib->colorTable = NULL; attrib->pixelindex = NULL; attrib->xcolors = NULL; attrib->colorStrings = NULL; attrib->mask_pixel = UNDEF_PIXEL; } /* * Free the xpmInternAttrib pointers which have been allocated */ xpmFreeInternAttrib(attrib) xpmInternAttrib *attrib; { unsigned int a, ncolors; char **sptr; if (attrib->colorTable) xpmFreeColorTable(attrib->colorTable, attrib->ncolors); if (attrib->pixelindex) free(attrib->pixelindex); if (attrib->xcolors) free(attrib->xcolors); if (attrib->colorStrings) { ncolors = attrib->ncolors; for (a = 0, sptr = attrib->colorStrings; a < ncolors; a++, sptr++) if (*sptr) free(*sptr); free(attrib->colorStrings); } } /* * Free array of extensions */ XpmFreeExtensions(extensions, nextensions) XpmExtension *extensions; int nextensions; { unsigned int i, j, nlines; XpmExtension *ext; char **sptr; for (i = 0, ext = extensions; i < nextensions; i++, ext++) { free(ext->name); nlines = ext->nlines; for (j = 0, sptr = ext->lines; j < nlines; j++, sptr++) if (*sptr) free(*sptr); if (ext->lines) free(ext->lines); } free(extensions); } /* * Return the XpmAttributes structure size */ XpmAttributesSize() { return sizeof(XpmAttributes); } /* * Free the XpmAttributes structure members * but the structure itself */ XpmFreeAttributes(attributes) XpmAttributes *attributes; { if (attributes) { if (attributes->valuemask & XpmReturnPixels && attributes->pixels) { free(attributes->pixels); attributes->pixels = NULL; attributes->npixels = 0; } if (attributes->valuemask & XpmInfos) { if (attributes->colorTable) { xpmFreeColorTable(attributes->colorTable, attributes->ncolors); attributes->colorTable = NULL; attributes->ncolors = 0; } if (attributes->hints_cmt) { free(attributes->hints_cmt); attributes->hints_cmt = NULL; } if (attributes->colors_cmt) { free(attributes->colors_cmt); attributes->colors_cmt = NULL; } if (attributes->pixels_cmt) { free(attributes->pixels_cmt); attributes->pixels_cmt = NULL; } if (attributes->pixels) { free(attributes->pixels); attributes->pixels = NULL; } } if (attributes->valuemask & XpmReturnExtensions && attributes->nextensions) { XpmFreeExtensions(attributes->extensions, attributes->nextensions); attributes->nextensions = 0; attributes->extensions = NULL; } attributes->valuemask = 0; } } /* * Store into the XpmAttributes structure the required informations stored in * the xpmInternAttrib structure. */ xpmSetAttributes(attrib, attributes) xpmInternAttrib *attrib; XpmAttributes *attributes; { if (attributes) { if (attributes->valuemask & XpmReturnInfos) { attributes->cpp = attrib->cpp; attributes->ncolors = attrib->ncolors; attributes->colorTable = attrib->colorTable; attrib->ncolors = 0; attrib->colorTable = NULL; } attributes->width = attrib->width; attributes->height = attrib->height; attributes->valuemask |= XpmSize; } }