Home | History | Annotate | Line # | Download | only in src
      1 /*
      2  * Copyright (C) 1989-95 GROUPE BULL
      3  *
      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:
     10  *
     11  * The above copyright notice and this permission notice shall be included in
     12  * all copies or substantial portions of the Software.
     13  *
     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.
     20  *
     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.
     24  */
     25 
     26 /*****************************************************************************\
     27 *  CrIFrData.c:                                                               *
     28 *                                                                             *
     29 *  XPM library                                                                *
     30 *  Parse an Xpm array and create the image and possibly its mask              *
     31 *                                                                             *
     32 *  Developed by Arnaud Le Hors                                                *
     33 \*****************************************************************************/
     34 
     35 #ifdef HAVE_CONFIG_H
     36 #include <config.h>
     37 #endif
     38 #include "XpmI.h"
     39 
     40 LFUNC(OpenArray, void, (char **data, xpmData *mdata));
     41 
     42 int
     43 XpmCreateImageFromData(
     44     Display		 *display,
     45     char		**data,
     46     XImage		**image_return,
     47     XImage		**shapeimage_return,
     48     XpmAttributes	 *attributes)
     49 {
     50     XpmImage image;
     51     XpmInfo info;
     52     int ErrorStatus;
     53     xpmData mdata;
     54 
     55     xpmInitXpmImage(&image);
     56     xpmInitXpmInfo(&info);
     57 
     58     /* open data */
     59     OpenArray(data, &mdata);
     60 
     61     /* create an XpmImage from the file */
     62     if (attributes) {
     63 	xpmInitAttributes(attributes);
     64 	xpmSetInfoMask(&info, attributes);
     65 	ErrorStatus = xpmParseDataAndCreate(display, &mdata,
     66 					    image_return, shapeimage_return,
     67 					    &image, &info, attributes);
     68     } else
     69 	ErrorStatus = xpmParseDataAndCreate(display, &mdata,
     70 					    image_return, shapeimage_return,
     71 					    &image, NULL, attributes);
     72     if (attributes) {
     73 	if (ErrorStatus >= 0)		/* no fatal error */
     74 	    xpmSetAttributes(attributes, &image, &info);
     75 	XpmFreeXpmInfo(&info);
     76     }
     77 
     78     /* free the XpmImage */
     79     XpmFreeXpmImage(&image);
     80 
     81     return (ErrorStatus);
     82 }
     83 
     84 int
     85 XpmCreateXpmImageFromData(
     86     char	**data,
     87     XpmImage	 *image,
     88     XpmInfo	 *info)
     89 {
     90     xpmData mdata;
     91     int ErrorStatus;
     92 
     93     /* init returned values */
     94     xpmInitXpmImage(image);
     95     xpmInitXpmInfo(info);
     96 
     97     /* open data */
     98     OpenArray(data, &mdata);
     99 
    100     /* create the XpmImage from the XpmData */
    101     ErrorStatus = xpmParseData(&mdata, image, info);
    102 
    103     return (ErrorStatus);
    104 }
    105 
    106 /*
    107  * open the given array to be read or written as an xpmData which is returned
    108  */
    109 static void
    110 OpenArray(
    111     char	**data,
    112     xpmData	 *mdata)
    113 {
    114     mdata->type = XPMARRAY;
    115     mdata->stream.data = data;
    116     mdata->cptr = *data;
    117     mdata->line = 0;
    118     mdata->CommentLength = 0;
    119     mdata->Bcmt = mdata->Ecmt = NULL;
    120     mdata->Bos = mdata->Eos = '\0';
    121     mdata->format = 0;			/* this can only be Xpm 2 or 3 */
    122 }
    123