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*  Info.c:                                                                    *
28*                                                                             *
29*  XPM library                                                                *
30*  Functions related to the XpmInfo structure.                                *
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/*
41 * Init returned data to free safely later on
42 */
43void
44xpmInitXpmInfo(XpmInfo *info)
45{
46    if (info) {
47	info->hints_cmt = NULL;
48	info->colors_cmt = NULL;
49	info->pixels_cmt = NULL;
50	info->extensions = NULL;
51	info->nextensions = 0;
52    }
53}
54
55/*
56 * Free the XpmInfo data which have been allocated
57 */
58void
59XpmFreeXpmInfo(XpmInfo *info)
60{
61    if (info) {
62	if (info->valuemask & XpmComments) {
63	    if (info->hints_cmt) {
64		XpmFree(info->hints_cmt);
65		info->hints_cmt = NULL;
66	    }
67	    if (info->colors_cmt) {
68		XpmFree(info->colors_cmt);
69		info->colors_cmt = NULL;
70	    }
71	    if (info->pixels_cmt) {
72		XpmFree(info->pixels_cmt);
73		info->pixels_cmt = NULL;
74	    }
75	}
76	if (info->valuemask & XpmReturnExtensions && info->nextensions) {
77	    XpmFreeExtensions(info->extensions, info->nextensions);
78	    info->extensions = NULL;
79	    info->nextensions = 0;
80	}
81	info->valuemask = 0;
82    }
83}
84
85/*
86 * Set the XpmInfo valuemask to retrieve required info
87 */
88void
89xpmSetInfoMask(
90    XpmInfo		*info,
91    XpmAttributes	*attributes)
92{
93    info->valuemask = 0;
94    if (attributes->valuemask & XpmReturnInfos)
95	info->valuemask |= XpmReturnComments;
96    if (attributes->valuemask & XpmReturnExtensions)
97	info->valuemask |= XpmReturnExtensions;
98}
99
100/*
101 * Fill in the XpmInfo with the XpmAttributes
102 */
103void
104xpmSetInfo(
105    XpmInfo		*info,
106    XpmAttributes	*attributes)
107{
108    info->valuemask = 0;
109    if (attributes->valuemask & XpmInfos) {
110	info->valuemask |= XpmComments | XpmColorTable;
111	info->hints_cmt = attributes->hints_cmt;
112	info->colors_cmt = attributes->colors_cmt;
113	info->pixels_cmt = attributes->pixels_cmt;
114    }
115    if (attributes->valuemask & XpmExtensions) {
116	info->valuemask |= XpmExtensions;
117	info->extensions = attributes->extensions;
118	info->nextensions = attributes->nextensions;
119    }
120    if (attributes->valuemask & XpmHotspot) {
121	info->valuemask |= XpmHotspot;
122	info->x_hotspot = attributes->x_hotspot;
123	info->y_hotspot = attributes->y_hotspot;
124    }
125}
126