243 lines
5.4 KiB
C++
243 lines
5.4 KiB
C++
/*
|
|
* $Id$
|
|
*
|
|
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version. The Blender
|
|
* Foundation also sells licenses for use in proprietary software under
|
|
* the Blender License. See http://www.blender.org/BL/ for information
|
|
* about this.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
* All rights reserved.
|
|
*
|
|
* The Original Code is: all of this file.
|
|
*
|
|
* Contributor(s): none yet.
|
|
*
|
|
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
|
* external readfile function prototypes
|
|
*/
|
|
#ifndef BLO_READFILE_H
|
|
#define BLO_READFILE_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct SpaceFile;
|
|
struct LinkNode;
|
|
struct Main;
|
|
struct UserDef;
|
|
struct bScreen;
|
|
struct Scene;
|
|
|
|
typedef struct BlendHandle BlendHandle;
|
|
|
|
typedef enum BlenFileType {
|
|
BLENFILETYPE_BLEND= 1,
|
|
BLENFILETYPE_PUB= 2,
|
|
BLENFILETYPE_RUNTIME= 3
|
|
} BlenFileType;
|
|
|
|
typedef enum {
|
|
BRE_NONE,
|
|
|
|
BRE_UNABLE_TO_OPEN,
|
|
BRE_UNABLE_TO_READ,
|
|
|
|
BRE_OUT_OF_MEMORY,
|
|
BRE_INTERNAL_ERROR,
|
|
|
|
BRE_NOT_A_BLEND,
|
|
BRE_NOT_A_PUBFILE,
|
|
BRE_INCOMPLETE,
|
|
BRE_CORRUPT,
|
|
|
|
BRE_TOO_NEW,
|
|
BRE_NOT_ALLOWED,
|
|
|
|
BRE_NO_SCREEN,
|
|
BRE_NO_SCENE,
|
|
|
|
BRE_INVALID
|
|
} BlendReadError;
|
|
|
|
typedef struct BlendFileData {
|
|
struct Main* main;
|
|
struct UserDef* user;
|
|
|
|
int winpos;
|
|
int fileflags;
|
|
int displaymode;
|
|
|
|
struct bScreen* curscreen;
|
|
struct Scene* curscene;
|
|
|
|
BlenFileType type;
|
|
} BlendFileData;
|
|
|
|
/**
|
|
* Open a blender file from a pathname. The function
|
|
* returns NULL and sets the @a error_r argument if
|
|
* it cannot open the file.
|
|
*
|
|
* @param file The path of the file to open.
|
|
* @param error_r If the return value is NULL, an error
|
|
* code indicating the cause of the failure.
|
|
* @return The data of the file.
|
|
*/
|
|
BlendFileData* BLO_read_from_file (char *file, BlendReadError *error_r);
|
|
|
|
/**
|
|
* Open a blender file from memory. The function
|
|
* returns NULL and sets the @a error_r argument if
|
|
* it cannot open the file.
|
|
*
|
|
* @param mem The file data.
|
|
* @param memsize The length of @a mem.
|
|
* @param error_r If the return value is NULL, an error
|
|
* code indicating the cause of the failure.
|
|
* @return The data of the file.
|
|
*/
|
|
BlendFileData* BLO_read_from_memory (void *mem, int memsize, BlendReadError *error_r);
|
|
|
|
|
|
/**
|
|
* Convert a BlendReadError to a human readable string.
|
|
* The string is static and does not need to be free'd.
|
|
*
|
|
* @param error The error to return a string for.
|
|
* @return A static human readable string representation
|
|
* of @a error.
|
|
*/
|
|
char*
|
|
BLO_bre_as_string(
|
|
BlendReadError error);
|
|
|
|
/**
|
|
* Free's a BlendFileData structure and _all_ the
|
|
* data associated with it (the userdef data, and
|
|
* the main libblock data).
|
|
*
|
|
* @param bfd The structure to free.
|
|
*/
|
|
void
|
|
BLO_blendfiledata_free(
|
|
BlendFileData *bfd);
|
|
|
|
/**
|
|
* Convert an idcode into a name.
|
|
*
|
|
* @param code The code to convert.
|
|
* @return A static string representing the name of
|
|
* the code.
|
|
*/
|
|
char*
|
|
BLO_idcode_to_name(
|
|
int code);
|
|
|
|
/**
|
|
* Convert a name into an idcode (ie. ID_SCE)
|
|
*
|
|
* @param name The name to convert.
|
|
* @return The code for the name, or 0 if invalid.
|
|
*/
|
|
int
|
|
BLO_idcode_from_name(
|
|
char *name);
|
|
|
|
/**
|
|
* Open a blendhandle from a file path.
|
|
*
|
|
* @param file The file path to open.
|
|
* @return A handle on success, or NULL on failure.
|
|
*/
|
|
BlendHandle*
|
|
BLO_blendhandle_from_file(
|
|
char *file);
|
|
|
|
/**
|
|
* Gets the names of all the datablocks in a file
|
|
* of a certain type (ie. All the scene names in
|
|
* a file).
|
|
*
|
|
* @param bh The blendhandle to access.
|
|
* @param ofblocktype The type of names to get.
|
|
* @return A BLI_linklist of strings. The string links
|
|
* should be freed with malloc.
|
|
*/
|
|
struct LinkNode*
|
|
BLO_blendhandle_get_datablock_names(
|
|
BlendHandle *bh,
|
|
int ofblocktype);
|
|
|
|
/**
|
|
* Gets the names of all the datablock groups in a
|
|
* file. (ie. file contains Scene, Mesh, and Lamp
|
|
* datablocks).
|
|
*
|
|
* @param bh The blendhandle to access.
|
|
* @return A BLI_linklist of strings. The string links
|
|
* should be freed with malloc.
|
|
*/
|
|
struct LinkNode*
|
|
BLO_blendhandle_get_linkable_groups(
|
|
BlendHandle *bh);
|
|
|
|
/**
|
|
* Close and free a blendhandle. The handle
|
|
* becomes invalid after this call.
|
|
*
|
|
* @param bh The handle to close.
|
|
*/
|
|
void
|
|
BLO_blendhandle_close(
|
|
BlendHandle *bh);
|
|
|
|
/***/
|
|
|
|
char *BLO_gethome(void);
|
|
int BLO_has_bfile_extension(char *str);
|
|
|
|
void BLO_library_append(struct SpaceFile *sfile, char *dir, int idcode);
|
|
|
|
|
|
/* Ick ick ick, why are internal loader functions
|
|
* being exported out of the loader? IMHO readstreamglue
|
|
* should not need to know anything about the loader,
|
|
* but this is a point of contention. - zr
|
|
*/
|
|
void*
|
|
blo_readstreamfile_begin(
|
|
void *endControl);
|
|
|
|
int
|
|
blo_readstreamfile_process(
|
|
void *filedataVoidPtr,
|
|
unsigned char *data,
|
|
unsigned int dataIn);
|
|
|
|
int
|
|
blo_readstreamfile_end(
|
|
void *filedataVoidPtr);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|