From 92b1d3f9461e6d122d6523955cc8124559e5f36e Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 19 Dec 2008 16:36:15 +0000 Subject: 2.5: blenloader/ cleaning: - removed context usage, should not be in this module - remove G.main usage, now is passed along - still some globals in use here, goal is to get rid of those too, so that it's possible to load/save blendfiles without having to think about some global state. --- source/blender/blenkernel/intern/blender.c | 6 +- source/blender/blenloader/BLO_readfile.h | 9 +- source/blender/blenloader/BLO_writefile.h | 8 +- source/blender/blenloader/intern/readblenentry.c | 25 +++-- source/blender/blenloader/intern/readfile.c | 61 ++++++------ source/blender/blenloader/intern/readfile.h | 6 +- source/blender/blenloader/intern/writefile.c | 116 +++++++++++++---------- source/blender/editors/space_file/filelist.c | 4 +- source/blender/editors/space_file/filelist.h | 2 +- source/blender/windowmanager/intern/wm_files.c | 6 +- 10 files changed, 129 insertions(+), 114 deletions(-) (limited to 'source/blender') diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index ed2b8238dae..2ab12c12ab8 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -486,7 +486,7 @@ int BKE_read_file_from_memfile(bContext *C, MemFile *memfile) BKE_reports_init(&reports, RPT_STORE); - bfd= BLO_read_from_memfile(G.sce, memfile, &reports); + bfd= BLO_read_from_memfile(CTX_data_main(C), G.sce, memfile, &reports); if (bfd) { setup_app_data(C, bfd, ""); } else { @@ -594,7 +594,7 @@ void BKE_write_undo(bContext *C, char *name) BLI_make_file_string("/", tstr, btempdir, numstr); BKE_reports_init(&reports, 0); - success= BLO_write_file(C, tstr, G.fileflags, &reports); + success= BLO_write_file(CTX_data_main(C), tstr, G.fileflags, &reports); BKE_reports_clear(&reports); strcpy(curundo->str, tstr); @@ -607,7 +607,7 @@ void BKE_write_undo(bContext *C, char *name) memused= MEM_get_memory_in_use(); BKE_reports_init(&reports, 0); - success= BLO_write_file_mem(C, prevfile, &curundo->memfile, G.fileflags, &reports); + success= BLO_write_file_mem(CTX_data_main(C), prevfile, &curundo->memfile, G.fileflags, &reports); BKE_reports_clear(&reports); curundo->undosize= MEM_get_memory_in_use() - memused; } diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h index 38f8be58bf6..59289b7e74c 100644 --- a/source/blender/blenloader/BLO_readfile.h +++ b/source/blender/blenloader/BLO_readfile.h @@ -95,9 +95,10 @@ BlendFileData* BLO_read_from_file (char *file, struct ReportList *reports); BlendFileData* BLO_read_from_memory(void *mem, int memsize, struct ReportList *reports); /** + * oldmain is old main, from which we will keep libraries, images, .. * file name is current file, only for retrieving library data */ -BlendFileData *BLO_read_from_memfile(const char *filename, struct MemFile *memfile, struct ReportList *reports); +BlendFileData *BLO_read_from_memfile(struct Main *oldmain, const char *filename, struct MemFile *memfile, struct ReportList *reports); /** * Free's a BlendFileData structure and _all_ the @@ -199,10 +200,10 @@ BLO_blendhandle_close( char *BLO_gethome(void); int BLO_has_bfile_extension(char *str); -void BLO_library_append(struct SpaceFile *sfile, char *dir, int idcode, struct Scene *scene); +void BLO_library_append(struct SpaceFile *sfile, char *dir, int idcode, struct Main *mainvar, struct Scene *scene); void BLO_library_append_(BlendHandle **libfiledata, struct direntry* filelist, int totfile, - char *dir, char* file, short flag, int idcode, struct Scene *scene); -void BLO_script_library_append(BlendHandle **bh, char *dir, char *name, int idcode, short flag, struct Scene *scene); + char *dir, char* file, short flag, int idcode, struct Main *mainvar, struct Scene *scene); +void BLO_script_library_append(BlendHandle **bh, char *dir, char *name, int idcode, short flag, struct Main *mainvar, struct Scene *scene); BlendFileData* blo_read_blendafterruntime(int file, char *name, int actualsize, struct ReportList *reports); diff --git a/source/blender/blenloader/BLO_writefile.h b/source/blender/blenloader/BLO_writefile.h index 8205a43f39f..66ddffa9f19 100644 --- a/source/blender/blenloader/BLO_writefile.h +++ b/source/blender/blenloader/BLO_writefile.h @@ -32,13 +32,13 @@ #define BLO_WRITEFILE_H struct MemFile; -struct bContext; +struct Main; struct ReportList; -extern int BLO_write_file(struct bContext *C, char *dir, int write_flags, struct ReportList *reports); -extern int BLO_write_file_mem(struct bContext *C, struct MemFile *compare, struct MemFile *current, +extern int BLO_write_file(struct Main *mainvar, char *dir, int write_flags, struct ReportList *reports); +extern int BLO_write_file_mem(struct Main *mainvar, struct MemFile *compare, struct MemFile *current, int write_flags, struct ReportList *reports); -extern int BLO_write_runtime(struct bContext *C, char *file, char *exename, struct ReportList *reports); +extern int BLO_write_runtime(struct Main *mainvar, char *file, char *exename, struct ReportList *reports); #endif diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c index d7acfc7eed0..e7e45597887 100644 --- a/source/blender/blenloader/intern/readblenentry.c +++ b/source/blender/blenloader/intern/readblenentry.c @@ -53,7 +53,6 @@ #include "BKE_utildefines.h" // for ENDB #include "BKE_main.h" -#include "BKE_global.h" #include "BKE_library.h" // for free_main #include "BKE_report.h" @@ -360,7 +359,7 @@ BlendFileData *BLO_read_from_memory(void *mem, int memsize, ReportList *reports) return bfd; } -BlendFileData *BLO_read_from_memfile(const char *filename, MemFile *memfile, ReportList *reports) +BlendFileData *BLO_read_from_memfile(Main *oldmain, const char *filename, MemFile *memfile, ReportList *reports) { BlendFileData *bfd = NULL; FileData *fd; @@ -370,16 +369,16 @@ BlendFileData *BLO_read_from_memfile(const char *filename, MemFile *memfile, Rep if (fd) { strcpy(fd->filename, filename); - /* clear ob->proxy_from pointers in G.main */ - blo_clear_proxy_pointers_from_lib(fd); + /* clear ob->proxy_from pointers in old main */ + blo_clear_proxy_pointers_from_lib(fd, oldmain); - /* separate libraries from G.main */ - blo_split_main(&mainlist, G.main); + /* separate libraries from old main */ + blo_split_main(&mainlist, oldmain); /* add the library pointers in oldmap lookup */ blo_add_library_pointer_map(&mainlist, fd); - /* makes lookup of existing images in G.main */ - blo_make_image_pointer_map(fd); + /* makes lookup of existing images in old main */ + blo_make_image_pointer_map(fd, oldmain); bfd= blo_read_file_internal(fd, reports); if (bfd) { @@ -388,17 +387,17 @@ BlendFileData *BLO_read_from_memfile(const char *filename, MemFile *memfile, Rep } /* ensures relinked images are not freed */ - blo_end_image_pointer_map(fd); + blo_end_image_pointer_map(fd, oldmain); - /* move libraries from G.main to new main */ + /* move libraries from old main to new main */ if(bfd && mainlist.first!=mainlist.last) { /* Library structs themselves */ - bfd->main->library= G.main->library; - G.main->library.first= G.main->library.last= NULL; + bfd->main->library= oldmain->library; + oldmain->library.first= oldmain->library.last= NULL; /* add the Library mainlist to the new main */ - BLI_remlink(&mainlist, G.main); + BLI_remlink(&mainlist, oldmain); BLI_addhead(&mainlist, bfd->main); } blo_join_main(&mainlist); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 2e969a71b0c..89a71f1fbb4 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -1123,20 +1123,19 @@ static void change_idid_adr(ListBase *mainlist, FileData *basefd, void *old, voi * to clear that pointer before reading the undo memfile since * the object might be removed, it is set again in reading * if the local object still exists */ -void blo_clear_proxy_pointers_from_lib(FileData *fd) +void blo_clear_proxy_pointers_from_lib(FileData *fd, Main *oldmain) { - Object *ob= G.main->object.first; + Object *ob= oldmain->object.first; for(;ob; ob= ob->id.next) if(ob->id.lib) ob->proxy_from= NULL; } -/* assumed; G.main still exists */ -void blo_make_image_pointer_map(FileData *fd) +void blo_make_image_pointer_map(FileData *fd, Main *oldmain) { - Image *ima= G.main->image.first; - Scene *sce= G.main->scene.first; + Image *ima= oldmain->image.first; + Scene *sce= oldmain->scene.first; fd->imamap= oldnewmap_new(); @@ -1156,13 +1155,13 @@ void blo_make_image_pointer_map(FileData *fd) } } -/* set G.main image ibufs to zero if it has been restored */ -/* this works because freeing G.main only happens after this call */ -void blo_end_image_pointer_map(FileData *fd) +/* set old main image ibufs to zero if it has been restored */ +/* this works because freeing old main only happens after this call */ +void blo_end_image_pointer_map(FileData *fd, Main *oldmain) { OldNew *entry= fd->imamap->entries; - Image *ima= G.main->image.first; - Scene *sce= G.main->scene.first; + Image *ima= oldmain->image.first; + Scene *sce= oldmain->scene.first; int i; /* used entries were restored, so we put them to zero */ @@ -9246,24 +9245,24 @@ static void expand_main(FileData *fd, Main *mainvar) } } -static int object_in_any_scene(Object *ob) +static int object_in_any_scene(Main *mainvar, Object *ob) { Scene *sce; - for(sce= G.main->scene.first; sce; sce= sce->id.next) + for(sce= mainvar->scene.first; sce; sce= sce->id.next) if(object_in_scene(ob, sce)) return 1; return 0; } /* when *lib set, it also does objects that were in the appended group */ -static void give_base_to_objects(Scene *sce, ListBase *lb, Library *lib, int is_group_append) +static void give_base_to_objects(Main *mainvar, Scene *sce, Library *lib, int is_group_append) { Object *ob; Base *base; /* give all objects which are LIB_INDIRECT a base, or for a group when *lib has been set */ - for(ob= lb->first; ob; ob= ob->id.next) { + for(ob= mainvar->object.first; ob; ob= ob->id.next) { if( ob->id.flag & LIB_INDIRECT ) { @@ -9279,7 +9278,7 @@ static void give_base_to_objects(Scene *sce, ListBase *lb, Library *lib, int is_ if(ob->id.us==0) do_it= 1; else if(ob->id.us==1 && lib) - if(ob->id.lib==lib && (ob->flag & OB_FROMGROUP) && object_in_any_scene(ob)==0) + if(ob->id.lib==lib && (ob->flag & OB_FROMGROUP) && object_in_any_scene(mainvar, ob)==0) do_it= 1; if(do_it) { @@ -9380,14 +9379,14 @@ static void append_id_part(FileData *fd, Main *mainvar, ID *id, ID **id_r) /* common routine to append/link something from a library */ -static Library* library_append(Scene *scene, char* file, char *dir, int idcode, +static Library* library_append(Main *mainvar, Scene *scene, char* file, char *dir, int idcode, int totsel, FileData **fd, struct direntry* filelist, int totfile, short flag) { Main *mainl; Library *curlib; /* make mains */ - blo_split_main(&(*fd)->mainlist, G.main); + blo_split_main(&(*fd)->mainlist, mainvar); /* which one do we need? */ mainl = blo_find_main(*fd, &(*fd)->mainlist, dir, G.sce); @@ -9424,21 +9423,21 @@ static Library* library_append(Scene *scene, char* file, char *dir, int idcode, } blo_join_main(&(*fd)->mainlist); - G.main= (*fd)->mainlist.first; + mainvar= (*fd)->mainlist.first; - lib_link_all(*fd, G.main); - lib_verify_nodetree(G.main, 0); - fix_relpaths_library(G.sce, G.main); /* make all relative paths, relative to the open blend file */ + lib_link_all(*fd, mainvar); + lib_verify_nodetree(mainvar, 0); + fix_relpaths_library(G.sce, mainvar); /* make all relative paths, relative to the open blend file */ /* give a base to loose objects. If group append, do it for objects too */ if(idcode==ID_GR) { if (flag & FILE_LINK) { - give_base_to_objects(scene, &(G.main->object), NULL, 0); + give_base_to_objects(mainvar, scene, NULL, 0); } else { - give_base_to_objects(scene, &(G.main->object), curlib, 1); + give_base_to_objects(mainvar, scene, curlib, 1); } } else { - give_base_to_objects(scene, &(G.main->object), NULL, 0); + give_base_to_objects(mainvar, scene, NULL, 0); } /* has been removed... erm, why? s..ton) */ /* 20040907: looks like they are give base already in append_named_part(); -Nathan L */ @@ -9459,10 +9458,10 @@ static Library* library_append(Scene *scene, char* file, char *dir, int idcode, /* this should probably be moved into the Python code anyway */ void BLO_script_library_append(BlendHandle **bh, char *dir, char *name, - int idcode, short flag, Scene *scene ) + int idcode, short flag, Main *mainvar, Scene *scene) { /* try to append the requested object */ - library_append(scene, name, dir, idcode, 0, (FileData **)bh, NULL, 0, flag ); + library_append(mainvar, scene, name, dir, idcode, 0, (FileData **)bh, NULL, 0, flag ); /* do we need to do this? */ DAG_scene_sort(scene); @@ -9470,14 +9469,14 @@ void BLO_script_library_append(BlendHandle **bh, char *dir, char *name, /* append to scene */ /* dir is a full path */ -void BLO_library_append(SpaceFile *sfile, char *dir, int idcode, Scene *scene) +void BLO_library_append(SpaceFile *sfile, char *dir, int idcode, Main *mainvar, Scene *scene) { BLO_library_append_(&sfile->libfiledata, sfile->filelist, sfile->totfile, - dir, sfile->file, sfile->flag, idcode, scene); + dir, sfile->file, sfile->flag, idcode, mainvar, scene); } void BLO_library_append_(BlendHandle** libfiledata, struct direntry* filelist, int totfile, - char *dir, char* file, short flag, int idcode, Scene *scene) + char *dir, char* file, short flag, int idcode, Main *mainvar, Scene *scene) { Library *curlib; Base *centerbase; @@ -9511,7 +9510,7 @@ void BLO_library_append_(BlendHandle** libfiledata, struct direntry* filelist, i if(flag & FILE_AUTOSELECT) scene_deselect_all(scene); - curlib = library_append(scene, file, dir, idcode, totsel, (FileData**) libfiledata, filelist, totfile,flag ); + curlib = library_append(mainvar, scene, file, dir, idcode, totsel, (FileData**) libfiledata, filelist, totfile,flag ); /* when not linking (appending)... */ if((flag & FILE_LINK)==0) { diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h index f53f3c6c883..08797d36084 100644 --- a/source/blender/blenloader/intern/readfile.h +++ b/source/blender/blenloader/intern/readfile.h @@ -113,9 +113,9 @@ FileData *blo_openblenderfile( char *name, struct ReportList *reports); FileData *blo_openblendermemory( void *buffer, int buffersize, struct ReportList *reports); FileData *blo_openblendermemfile(struct MemFile *memfile, struct ReportList *reports); -void blo_clear_proxy_pointers_from_lib(FileData *fd); -void blo_make_image_pointer_map(FileData *fd); -void blo_end_image_pointer_map(FileData *fd); +void blo_clear_proxy_pointers_from_lib(FileData *fd, Main *oldmain); +void blo_make_image_pointer_map(FileData *fd, Main *oldmain); +void blo_end_image_pointer_map(FileData *fd, Main *oldmain); void blo_add_library_pointer_map(ListBase *mainlist, FileData *fd); void blo_freefiledata( FileData *fd); diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 6cd2d328c82..c5fa2f8d282 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -145,14 +145,13 @@ Any case: direct data is ALWAYS after the lib block #include "BKE_action.h" #include "BKE_blender.h" -#include "BKE_context.h" #include "BKE_cloth.h" #include "BKE_curve.h" #include "BKE_customdata.h" #include "BKE_constraint.h" #include "BKE_global.h" // for G #include "BKE_library.h" // for set_listbasepointers -#include "BKE_main.h" // G.main +#include "BKE_main.h" #include "BKE_node.h" #include "BKE_packedFile.h" // for packAll #include "BKE_report.h" @@ -480,14 +479,29 @@ static void write_scriptlink(WriteData *wd, ScriptLink *slink) writedata(wd, DATA, sizeof(short)*slink->totscript, slink->flag); } -static void write_renderinfo(bContext *C, WriteData *wd) /* for renderdeamon */ +static void current_screen_compat(Main *mainvar, bScreen **screen) { + wmWindowManager *wm; + wmWindow *window; + + /* find a global current screen in the first open window, to have + * a reasonable default for reading in older versions */ + wm= mainvar->wm.first; + window= (wm)? wm->windows.first: NULL; + *screen= (window)? window->screen: NULL; +} + +static void write_renderinfo(WriteData *wd, Main *mainvar) /* for renderdeamon */ +{ + bScreen *curscreen; Scene *sce; int data[8]; - sce= CTX_data_main(C)->scene.first; + current_screen_compat(mainvar, &curscreen); + + sce= mainvar->scene.first; while(sce) { - if(sce->id.lib==0 && ( sce==CTX_data_scene(C) || (sce->r.scemode & R_BG_RENDER)) ) { + if(sce->id.lib==0 && ( sce==G.scene || (sce->r.scemode & R_BG_RENDER)) ) { data[0]= sce->r.sfra; data[1]= sce->r.efra; @@ -2018,14 +2032,17 @@ static void write_scripts(WriteData *wd, ListBase *idbase) /* context is usually defined by WM, two cases where no WM is available: * - for forward compatibility, curscreen has to be saved * - for undofile, curscene needs to be saved */ -/* XXX still remap G */ -static void write_global(bContext *C, WriteData *wd) +static void write_global(WriteData *wd, Main *mainvar) { FileGlobal fg; + bScreen *screen; char subvstr[8]; - fg.curscreen= CTX_wm_screen(C); - fg.curscene= CTX_data_scene(C); + current_screen_compat(mainvar, &screen); + + /* XXX still remap G */ + fg.curscreen= screen; + fg.curscene= G.scene; fg.displaymode= G.displaymode; fg.winpos= G.winpos; fg.fileflags= (G.fileflags & ~G_FILE_NO_UI); // prevent to save this, is not good convention, and feature with concerns... @@ -2042,7 +2059,7 @@ static void write_global(bContext *C, WriteData *wd) } /* if MemFile * there's filesave to memory */ -static int write_file_handle(bContext *C, int handle, MemFile *compare, MemFile *current, +static int write_file_handle(Main *mainvar, int handle, MemFile *compare, MemFile *current, int write_user_block, int write_flags) { BHead bhead; @@ -2050,47 +2067,47 @@ static int write_file_handle(bContext *C, int handle, MemFile *compare, MemFile char buf[16]; WriteData *wd; - blo_split_main(&mainlist, G.main); + blo_split_main(&mainlist, mainvar); wd= bgnwrite(handle, compare, current, write_flags); sprintf(buf, "BLENDER%c%c%.3d", (sizeof(void*)==8)?'-':'_', (G.order==B_ENDIAN)?'V':'v', G.version); mywrite(wd, buf, 12); - write_renderinfo(C, wd); - write_global(C, wd); + write_renderinfo(wd, mainvar); + write_global(wd, mainvar); /* no UI save in undo */ if(current==NULL) { - write_windowmanagers(wd, &G.main->wm); - write_screens (wd, &G.main->screen); - } - write_scenes (wd, &G.main->scene); - write_curves (wd, &G.main->curve); - write_mballs (wd, &G.main->mball); - write_images (wd, &G.main->image); - write_cameras (wd, &G.main->camera); - write_lamps (wd, &G.main->lamp); - write_lattices (wd, &G.main->latt); - write_vfonts (wd, &G.main->vfont); - write_ipos (wd, &G.main->ipo); - write_keys (wd, &G.main->key); - write_worlds (wd, &G.main->world); - write_texts (wd, &G.main->text); - write_sounds (wd, &G.main->sound); - write_groups (wd, &G.main->group); - write_armatures(wd, &G.main->armature); - write_actions (wd, &G.main->action); - write_objects (wd, &G.main->object); - write_materials(wd, &G.main->mat); - write_textures (wd, &G.main->tex); - write_meshs (wd, &G.main->mesh); - write_particlesettings(wd, &G.main->particle); - write_nodetrees(wd, &G.main->nodetree); - write_brushes (wd, &G.main->brush); - write_scripts (wd, &G.main->script); + write_windowmanagers(wd, &mainvar->wm); + write_screens (wd, &mainvar->screen); + } + write_scenes (wd, &mainvar->scene); + write_curves (wd, &mainvar->curve); + write_mballs (wd, &mainvar->mball); + write_images (wd, &mainvar->image); + write_cameras (wd, &mainvar->camera); + write_lamps (wd, &mainvar->lamp); + write_lattices (wd, &mainvar->latt); + write_vfonts (wd, &mainvar->vfont); + write_ipos (wd, &mainvar->ipo); + write_keys (wd, &mainvar->key); + write_worlds (wd, &mainvar->world); + write_texts (wd, &mainvar->text); + write_sounds (wd, &mainvar->sound); + write_groups (wd, &mainvar->group); + write_armatures(wd, &mainvar->armature); + write_actions (wd, &mainvar->action); + write_objects (wd, &mainvar->object); + write_materials(wd, &mainvar->mat); + write_textures (wd, &mainvar->tex); + write_meshs (wd, &mainvar->mesh); + write_particlesettings(wd, &mainvar->particle); + write_nodetrees(wd, &mainvar->nodetree); + write_brushes (wd, &mainvar->brush); + write_scripts (wd, &mainvar->script); if(current==NULL) - write_libraries(wd, G.main->next); /* no library save in undo */ + write_libraries(wd, mainvar->next); /* no library save in undo */ if (write_user_block) { write_userdef(wd); @@ -2105,13 +2122,12 @@ static int write_file_handle(bContext *C, int handle, MemFile *compare, MemFile mywrite(wd, &bhead, sizeof(BHead)); blo_join_main(&mainlist); - G.main= mainlist.first; return endwrite(wd); } /* return: success (1) */ -int BLO_write_file(bContext *C, char *dir, int write_flags, ReportList *reports) +int BLO_write_file(Main *mainvar, char *dir, int write_flags, ReportList *reports) { char userfilename[FILE_MAXDIR+FILE_MAXFILE]; char tempname[FILE_MAXDIR+FILE_MAXFILE]; @@ -2129,7 +2145,7 @@ int BLO_write_file(bContext *C, char *dir, int write_flags, ReportList *reports) write_user_block= BLI_streq(dir, userfilename); - err= write_file_handle(C, file, NULL,NULL, write_user_block, write_flags); + err= write_file_handle(mainvar, file, NULL,NULL, write_user_block, write_flags); close(file); if(!err) { @@ -2166,11 +2182,11 @@ int BLO_write_file(bContext *C, char *dir, int write_flags, ReportList *reports) } /* return: success (1) */ -int BLO_write_file_mem(bContext *C, MemFile *compare, MemFile *current, int write_flags, ReportList *reports) +int BLO_write_file_mem(Main *mainvar, MemFile *compare, MemFile *current, int write_flags, ReportList *reports) { int err; - err= write_file_handle(C, 0, compare, current, 0, write_flags); + err= write_file_handle(mainvar, 0, compare, current, 0, write_flags); if(err==0) return 1; return 0; @@ -2264,7 +2280,7 @@ cleanup: return !(reports->flag & RPT_HAS_ERROR); } -int BLO_write_runtime(bContext *C, char *file, char *exename, ReportList *reports) +int BLO_write_runtime(Main *mainvar, char *file, char *exename, ReportList *reports) { char gamename[FILE_MAXDIR+FILE_MAXFILE]; int outfd = -1; @@ -2282,7 +2298,7 @@ int BLO_write_runtime(bContext *C, char *file, char *exename, ReportList *report outfd= open(gamename, O_BINARY|O_WRONLY|O_CREAT|O_TRUNC, 0777); if (outfd != -1) { - write_file_handle(C, outfd, NULL,NULL, 0, G.fileflags); + write_file_handle(mainvar, outfd, NULL,NULL, 0, G.fileflags); if (write(outfd, " ", 1) != 1) { BKE_report(reports, RPT_ERROR, "Unable to write to output file."); @@ -2346,7 +2362,7 @@ static int handle_write_msb_int(int handle, int i) return (write(handle, buf, 4)==4); } -int BLO_write_runtime(bContext *C, char *file, char *exename, ReportList *reports) +int BLO_write_runtime(Main *mainvar, char *file, char *exename, ReportList *reports) { int outfd= open(file, O_BINARY|O_WRONLY|O_CREAT|O_TRUNC, 0777); int datastart; @@ -2360,7 +2376,7 @@ int BLO_write_runtime(bContext *C, char *file, char *exename, ReportList *report datastart= lseek(outfd, 0, SEEK_CUR); - write_file_handle(C, outfd, NULL,NULL, 0, G.fileflags); + write_file_handle(mainvar, outfd, NULL,NULL, 0, G.fileflags); if (!handle_write_msb_int(outfd, datastart) || (write(outfd, "BRUNTIME", 8)!=8)) { BKE_report(reports, RPT_ERROR, "Unable to write to output file."); diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index ab27fba1863..337f553e246 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -905,9 +905,9 @@ void filelist_from_library(struct FileList* filelist) filelist_filter(filelist); } -void filelist_append_library(struct FileList *filelist, char *dir, char *file, short flag, int idcode, struct Scene* scene) +void filelist_append_library(struct FileList *filelist, char *dir, char *file, short flag, int idcode, struct Main *mainvar, struct Scene* scene) { - BLO_library_append_(&filelist->libfiledata, filelist->filelist, filelist->numfiles, dir, file, flag, idcode, scene); + BLO_library_append_(&filelist->libfiledata, filelist->filelist, filelist->numfiles, dir, file, flag, idcode, mainvar, scene); } void filelist_from_main(struct FileList *filelist) diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h index 4a4c431c323..ae3b38b4353 100644 --- a/source/blender/editors/space_file/filelist.h +++ b/source/blender/editors/space_file/filelist.h @@ -70,7 +70,7 @@ void filelist_setfiletypes(struct FileList* filelist, short has_quicktime); int filelist_islibrary (struct FileList* filelist, char* dir, char* group); void filelist_from_main(struct FileList* filelist); void filelist_from_library(struct FileList* filelist); -void filelist_append_library(struct FileList* filelist, char *dir, char* file, short flag, int idcode, struct Scene* scene); +void filelist_append_library(struct FileList* filelist, char *dir, char* file, short flag, int idcode, struct Main *mainvar, struct Scene* scene); void filelist_settype(struct FileList* filelist, int type); short filelist_gettype(struct FileList* filelist); void filelist_setipotype(struct FileList* filelist, short ipotype); diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index e26380ce220..baaba13a5dc 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -847,7 +847,7 @@ void WM_write_file(bContext *C, char *target) BKE_reports_init(&reports, RPT_STORE); - if (BLO_write_file(C, di, writeflags, &reports)) { + if (BLO_write_file(CTX_data_main(C), di, writeflags, &reports)) { strcpy(G.sce, di); G.relbase_valid = 1; strcpy(G.main->name, di); /* is guaranteed current file */ @@ -880,7 +880,7 @@ int WM_write_homefile(bContext *C, wmOperator *op) // XXX error reporting to the user BKE_reports_init(&reports, RPT_PRINT); - BLO_write_file(C, tstr, write_flags, &reports); + BLO_write_file(CTX_data_main(C), tstr, write_flags, &reports); BKE_reports_clear(&reports); return OPERATOR_FINISHED; @@ -898,7 +898,7 @@ void WM_write_autosave(bContext *C) write_flags = G.fileflags & ~(G_FILE_COMPRESS | G_FILE_LOCK | G_FILE_SIGN); BKE_reports_init(&reports, RPT_PRINT); - BLO_write_file(C, tstr, write_flags, &reports); + BLO_write_file(CTX_data_main(C), tstr, write_flags, &reports); BKE_reports_clear(&reports); } -- cgit v1.2.3