2.5: blenloader/ cleaning:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 19 Dec 2008 16:36:15 +0000 (16:36 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 19 Dec 2008 16:36:15 +0000 (16:36 +0000)
- 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
source/blender/blenloader/BLO_readfile.h
source/blender/blenloader/BLO_writefile.h
source/blender/blenloader/intern/readblenentry.c
source/blender/blenloader/intern/readfile.c
source/blender/blenloader/intern/readfile.h
source/blender/blenloader/intern/writefile.c
source/blender/editors/space_file/filelist.c
source/blender/editors/space_file/filelist.h
source/blender/windowmanager/intern/wm_files.c

index ed2b8238dae6c3b9bb5630a72465c0daefef9980..2ab12c12ab8ba965627bf3c73da0b8366f92c11e 100644 (file)
@@ -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, "<memory1>");
        } 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;
        }
index 38f8be58bf6f9cfe3034e6c400958efaae61bf11..59289b7e74c94846d63939043f606feba92e94b2 100644 (file)
@@ -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);
 
index 8205a43f39f0f186a38b13e9e5f281edd1ea4bfd..66ddffa9f194a558c66ae63b1fb58c935867ad9a 100644 (file)
 #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
 
index d7acfc7eed045304be84eb2089743764202dcaab..e7e45597887ae8bf6d0027f6b82f8f4f175255cc 100644 (file)
@@ -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);
index 2e969a71b0c93a020a861b8e1e14e8f1b30935e0..89a71f1fbb4f863ecf9d9c0af682df168d32a5f4 100644 (file)
@@ -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) {
index f53f3c6c8837a875ea107cfba0ee8f17eef2d587..08797d3608496f81d5244f85f262fa8529360b40 100644 (file)
@@ -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);
index 6cd2d328c82fcfa5bf163c25c182677eef97e6e8..c5fa2f8d282fa31c92fa8140d80cf459831002c2 100644 (file)
@@ -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.");
index ab27fba1863507aff6f2757a39c28551ff299e20..337f553e246bee1a16126e54dc51d795c27e6e18 100644 (file)
@@ -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)
index 4a4c431c32352a7fd8a77e85d7d6353f9e6ce37a..ae3b38b43533e2dbedad6971f1b9f4fc062d02c2 100644 (file)
@@ -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);
index e26380ce220f517b176f3a9a369b78cad56d683b..baaba13a5dc93383499ea2da08de0cbcfd2f76e7 100644 (file)
@@ -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);
 }