Update changes file
[profile/ivi/libXpm.git] / src / Info.c
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  */
43 void
44 xpmInitXpmInfo(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  */
58 void
59 XpmFreeXpmInfo(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  */
88 void
89 xpmSetInfoMask(
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  */
103 void
104 xpmSetInfo(
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 }