]>
git.saurik.com Git - wxWidgets.git/blob - src/xpm/RdFToI.c
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 * Parse an XPM file and create the image and possibly its mask *
32 * Developed by Arnaud Le Hors *
33 \*****************************************************************************/
37 #if !defined(NO_ZPIPE) && defined(WIN32)
39 # define pclose _pclose
40 # if defined(STAT_ZFILE)
47 LFUNC(OpenReadFile
, int, (char *filename
, xpmData
*mdata
));
48 LFUNC(xpmDataClose
, void, (xpmData
*mdata
));
52 /* Visual Age cannot deal with old, non-ansi, code */
53 int XpmReadFileToImage(
56 , XImage
** image_return
57 , XImage
** shapeimage_return
58 , XpmAttributes
* attributes
62 XpmReadFileToImage(display
, filename
,
63 image_return
, shapeimage_return
, attributes
)
66 XImage
**image_return
;
67 XImage
**shapeimage_return
;
68 XpmAttributes
*attributes
;
76 xpmInitXpmImage(&image
);
77 xpmInitXpmInfo(&info
);
79 /* open file to read */
80 if ((ErrorStatus
= OpenReadFile(filename
, &mdata
)) != XpmSuccess
)
83 /* create the XImage from the XpmData */
85 xpmInitAttributes(attributes
);
86 xpmSetInfoMask(&info
, attributes
);
87 ErrorStatus
= xpmParseDataAndCreate(display
, &mdata
,
88 image_return
, shapeimage_return
,
89 &image
, &info
, attributes
);
91 ErrorStatus
= xpmParseDataAndCreate(display
, &mdata
,
92 image_return
, shapeimage_return
,
93 &image
, NULL
, attributes
);
95 if (ErrorStatus
>= 0) /* no fatal error */
96 xpmSetAttributes(attributes
, &image
, &info
);
97 XpmFreeXpmInfo(&info
);
100 xpmDataClose(&mdata
);
101 /* free the XpmImage */
102 XpmFreeXpmImage(&image
);
104 return (ErrorStatus
);
109 #define pclose fclose
110 /* Visual Age cannot deal with old, non-ansi, code */
111 int XpmReadFileToXpmImage(
118 XpmReadFileToXpmImage(filename
, image
, info
)
127 /* init returned values */
128 xpmInitXpmImage(image
);
129 xpmInitXpmInfo(info
);
131 /* open file to read */
132 if ((ErrorStatus
= OpenReadFile(filename
, &mdata
)) != XpmSuccess
)
133 return (ErrorStatus
);
135 /* create the XpmImage from the XpmData */
136 ErrorStatus
= xpmParseData(&mdata
, image
, info
);
138 xpmDataClose(&mdata
);
140 return (ErrorStatus
);
142 #endif /* CXPMPROG */
145 * open the given file to be read as an xpmData which is returned.
148 /* Visual Age cannot deal with old, non-ansi, code */
149 static int OpenReadFile(char* filename
, xpmData
* mdata
)
152 OpenReadFile(filename
, mdata
)
158 char *compressfile
, buf
[BUFSIZ
];
165 mdata
->stream
.file
= (stdin
);
166 mdata
->type
= XPMFILE
;
169 int len
= strlen(filename
);
170 if ((len
> 2) && !strcmp(".Z", filename
+ (len
- 2))) {
171 mdata
->type
= XPMPIPE
;
172 sprintf(buf
, "uncompress -c \"%s\"", filename
);
173 if (!(mdata
->stream
.file
= popen(buf
, "r")))
174 return (XpmOpenFailed
);
176 } else if ((len
> 3) && !strcmp(".gz", filename
+ (len
- 3))) {
177 mdata
->type
= XPMPIPE
;
178 sprintf(buf
, "gunzip -qc \"%s\"", filename
);
179 if (!(mdata
->stream
.file
= popen(buf
, "r")))
180 return (XpmOpenFailed
);
184 if (!(compressfile
= (char *) XpmMalloc(len
+ 4)))
185 return (XpmNoMemory
);
187 sprintf(compressfile
, "%s.Z", filename
);
188 if (!stat(compressfile
, &status
)) {
189 sprintf(buf
, "uncompress -c \"%s\"", compressfile
);
190 if (!(mdata
->stream
.file
= popen(buf
, "r"))) {
191 XpmFree(compressfile
);
192 return (XpmOpenFailed
);
194 mdata
->type
= XPMPIPE
;
196 sprintf(compressfile
, "%s.gz", filename
);
197 if (!stat(compressfile
, &status
)) {
198 sprintf(buf
, "gunzip -c \"%s\"", compressfile
);
199 if (!(mdata
->stream
.file
= popen(buf
, "r"))) {
200 XpmFree(compressfile
);
201 return (XpmOpenFailed
);
203 mdata
->type
= XPMPIPE
;
207 if (!(mdata
->stream
.file
= fopen(filename
, "r"))) {
208 #if !defined(NO_ZPIPE) && defined(STAT_ZFILE)
209 XpmFree(compressfile
);
211 return (XpmOpenFailed
);
213 mdata
->type
= XPMFILE
;
218 XpmFree(compressfile
);
223 mdata
->CommentLength
= 0;
232 * close the file related to the xpmData if any
235 /* Visual Age cannot deal with old, non-ansi, code */
237 xpmDataClose(xpmData
* mdata
)
244 switch (mdata
->type
) {
246 if (mdata
->stream
.file
!= (stdin
))
247 fclose(mdata
->stream
.file
);
251 pclose(mdata
->stream
.file
);