- saves the 'draw faces' flag in a file, in fact the entire G.f flag.
[blender.git] / source / blender / blenloader / BLO_readfile.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  * external readfile function prototypes
32  */
33 #ifndef BLO_READFILE_H
34 #define BLO_READFILE_H
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 struct SpaceFile;
41 struct LinkNode;
42 struct Main;
43 struct UserDef;
44 struct bScreen;
45 struct Scene;
46
47 typedef struct BlendHandle      BlendHandle;
48
49 typedef enum BlenFileType {
50         BLENFILETYPE_BLEND= 1, 
51         BLENFILETYPE_PUB= 2, 
52         BLENFILETYPE_RUNTIME= 3
53 } BlenFileType;
54
55 typedef enum {
56         BRE_NONE, 
57         
58         BRE_UNABLE_TO_OPEN, 
59         BRE_UNABLE_TO_READ, 
60
61         BRE_OUT_OF_MEMORY, 
62         BRE_INTERNAL_ERROR, 
63
64         BRE_NOT_A_BLEND, 
65         BRE_NOT_A_PUBFILE,
66         BRE_INCOMPLETE, 
67         BRE_CORRUPT, 
68         
69         BRE_TOO_NEW, 
70         BRE_NOT_ALLOWED, 
71         
72         BRE_NO_SCREEN, 
73         BRE_NO_SCENE, 
74         
75         BRE_INVALID
76 } BlendReadError;
77
78 typedef struct BlendFileData {
79         struct Main*    main;
80         struct UserDef* user;
81
82         int winpos;
83         int fileflags;
84         int displaymode;
85         int globalf;
86
87         struct bScreen* curscreen;
88         struct Scene*   curscene;
89         
90         BlenFileType    type;
91 } BlendFileData;
92
93         /**
94          * Open a blender file from a pathname. The function
95          * returns NULL and sets the @a error_r argument if
96          * it cannot open the file.
97          * 
98          * @param file The path of the file to open.
99          * @param error_r If the return value is NULL, an error
100          * code indicating the cause of the failure.
101          * @return The data of the file.
102          */
103 BlendFileData*  BLO_read_from_file              (char *file, BlendReadError *error_r);
104
105         /**
106          * Open a blender file from memory. The function
107          * returns NULL and sets the @a error_r argument if
108          * it cannot open the file.
109          * 
110          * @param mem The file data.
111          * @param memsize The length of @a mem.
112          * @param error_r If the return value is NULL, an error
113          * code indicating the cause of the failure.
114          * @return The data of the file.
115          */
116 BlendFileData*  BLO_read_from_memory    (void *mem, int memsize, BlendReadError *error_r);
117
118
119 /**
120  * Convert a BlendReadError to a human readable string.
121  * The string is static and does not need to be free'd.
122  * 
123  * @param error The error to return a string for.
124  * @return A static human readable string representation
125  * of @a error.
126  */
127         char*
128 BLO_bre_as_string(
129         BlendReadError error);
130
131 /**
132  * Free's a BlendFileData structure and _all_ the
133  * data associated with it (the userdef data, and
134  * the main libblock data).
135  * 
136  * @param bfd The structure to free.
137  */
138         void
139 BLO_blendfiledata_free(
140         BlendFileData *bfd);
141
142 /**
143  * Convert an idcode into a name.
144  * 
145  * @param code The code to convert.
146  * @return A static string representing the name of
147  * the code.
148  */
149         char*
150 BLO_idcode_to_name(
151         int code);
152
153 /**
154  * Convert a name into an idcode (ie. ID_SCE)
155  * 
156  * @param name The name to convert.
157  * @return The code for the name, or 0 if invalid.
158  */
159         int
160 BLO_idcode_from_name(
161         char *name);
162         
163 /**
164  * Open a blendhandle from a file path.
165  * 
166  * @param file The file path to open.
167  * @return A handle on success, or NULL on failure.
168  */
169         BlendHandle*
170 BLO_blendhandle_from_file(
171         char *file);
172
173 /**
174  * Gets the names of all the datablocks in a file
175  * of a certain type (ie. All the scene names in
176  * a file).
177  * 
178  * @param bh The blendhandle to access.
179  * @param ofblocktype The type of names to get.
180  * @return A BLI_linklist of strings. The string links
181  * should be freed with malloc.
182  */
183         struct LinkNode*
184 BLO_blendhandle_get_datablock_names(
185         BlendHandle *bh, 
186         int ofblocktype);
187
188 /**
189  * Gets the names of all the datablock groups in a
190  * file. (ie. file contains Scene, Mesh, and Lamp
191  * datablocks).
192  * 
193  * @param bh The blendhandle to access.
194  * @return A BLI_linklist of strings. The string links
195  * should be freed with malloc.
196  */
197         struct LinkNode*
198 BLO_blendhandle_get_linkable_groups(
199         BlendHandle *bh);
200
201 /**
202  * Close and free a blendhandle. The handle
203  * becomes invalid after this call.
204  *
205  * @param bh The handle to close.
206  */
207         void
208 BLO_blendhandle_close(
209         BlendHandle *bh);
210         
211         /***/
212
213 char *BLO_gethome(void);
214 int BLO_has_bfile_extension(char *str);
215
216 void BLO_library_append(struct SpaceFile *sfile, char *dir, int idcode);
217
218
219 /* Ick ick ick, why are internal loader functions
220  * being exported out of the loader? IMHO readstreamglue
221  * should not need to know anything about the loader, 
222  * but this is a point of contention. - zr
223  */
224         void*
225 blo_readstreamfile_begin(
226         void *endControl);
227
228         int
229 blo_readstreamfile_process(
230         void *filedataVoidPtr, 
231         unsigned char *data, 
232         unsigned int dataIn);
233         
234         int
235 blo_readstreamfile_end(
236         void *filedataVoidPtr);
237                                 
238 #ifdef __cplusplus
239
240 #endif
241
242 #endif
243