Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2009-06-30 23:20:45 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-06-30 23:20:45 +0400
commit37864a4273a5f9217f9b5995dc70212bb97a6cf6 (patch)
tree7c256bbc29aeda0904a45d06825c1e3f27810b68 /source/blender/blenkernel/intern/packedFile.c
parent80ee09bb9a03a58019b2054d7e0d280658858656 (diff)
2.5
Image Window * Unpack operator now works. * Some small layout code tweaks. Info Window Header * Moved to python UI code. * template_running_jobs, template_operator_search added. * Ported external data operators: pack/unpack all, make paths relative/absolute, find/report missing files. Also * Report RPT_INFO too, not only warnings and errors. * Run UI handle functions after RNA and Operators. * Rename particle system add/remove operators, to not include "slot", that's only there for materials because that's what they are called now in RNA.
Diffstat (limited to 'source/blender/blenkernel/intern/packedFile.c')
-rw-r--r--source/blender/blenkernel/intern/packedFile.c227
1 files changed, 75 insertions, 152 deletions
diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c
index 22e4e8a8309..4d88556d8bf 100644
--- a/source/blender/blenkernel/intern/packedFile.c
+++ b/source/blender/blenkernel/intern/packedFile.c
@@ -61,8 +61,9 @@
#include "BKE_image.h"
#include "BKE_font.h"
#include "BKE_packedFile.h"
+#include "BKE_report.h"
-int seekPackedFile(PackedFile * pf, int offset, int whence)
+int seekPackedFile(PackedFile *pf, int offset, int whence)
{
int oldseek = -1, seek = 0;
@@ -92,12 +93,12 @@ int seekPackedFile(PackedFile * pf, int offset, int whence)
return(oldseek);
}
-void rewindPackedFile(PackedFile * pf)
+void rewindPackedFile(PackedFile *pf)
{
seekPackedFile(pf, 0, SEEK_SET);
}
-int readPackedFile(PackedFile * pf, void * data, int size)
+int readPackedFile(PackedFile *pf, void *data, int size)
{
if ((pf != NULL) && (size >= 0) && (data != NULL)) {
if (size + pf->seek > pf->size) {
@@ -118,66 +119,55 @@ int readPackedFile(PackedFile * pf, void * data, int size)
return(size);
}
-int countPackedFiles()
+int countPackedFiles(Main *bmain)
{
- int count = 0;
Image *ima;
VFont *vf;
bSample *sample;
+ int count = 0;
// let's check if there are packed files...
- ima = G.main->image.first;
- while (ima) {
- if (ima->packedfile) {
+ for(ima=bmain->image.first; ima; ima=ima->id.next)
+ if(ima->packedfile)
count++;
- }
- ima= ima->id.next;
- }
- vf = G.main->vfont.first;
- while (vf) {
- if (vf->packedfile) {
+ for(vf=bmain->vfont.first; vf; vf=vf->id.next)
+ if(vf->packedfile)
count++;
- }
- vf = vf->id.next;
- }
- sample = samples->first;
- while (sample) {
- if (sample->packedfile) {
- count++;
- }
- sample = sample->id.next;
- }
+ if(samples)
+ for(sample=samples->first; sample; sample=sample->id.next)
+ if(sample->packedfile)
+ count++;
- return(count);
+ return count;
}
-void freePackedFile(PackedFile * pf)
+void freePackedFile(PackedFile *pf)
{
- if (pf) {
+ if(pf) {
MEM_freeN(pf->data);
MEM_freeN(pf);
- } else {
- printf("freePackedFile: Trying to free a NULL pointer\n");
}
+ else
+ printf("freePackedFile: Trying to free a NULL pointer\n");
}
-PackedFile * newPackedFileMemory(void *mem, int memlen)
+PackedFile *newPackedFileMemory(void *mem, int memlen)
{
- PackedFile * pf = MEM_callocN(sizeof(*pf), "PackedFile");
+ PackedFile *pf = MEM_callocN(sizeof(*pf), "PackedFile");
pf->data = mem;
pf->size = memlen;
return pf;
}
-PackedFile * newPackedFile(char * filename)
+PackedFile *newPackedFile(ReportList *reports, char *filename)
{
- PackedFile * pf = NULL;
+ PackedFile *pf = NULL;
int file, filelen;
char name[FILE_MAXDIR+FILE_MAXFILE];
- void * data;
+ void *data;
//XXX waitcursor(1);
@@ -191,7 +181,7 @@ PackedFile * newPackedFile(char * filename)
file= open(name, O_BINARY|O_RDONLY);
if (file <= 0) {
- // error("Can't open file: %s", name);
+ BKE_reportf(reports, RPT_ERROR, "Can't open file: %s", name);
} else {
filelen = BLI_filesize(file);
@@ -214,36 +204,24 @@ PackedFile * newPackedFile(char * filename)
return (pf);
}
-void packAll()
+void packAll(Main *bmain, ReportList *reports)
{
Image *ima;
VFont *vf;
bSample *sample;
- ima = G.main->image.first;
- while (ima) {
- if (ima->packedfile == NULL) {
- ima->packedfile = newPackedFile(ima->name);
- }
- ima= ima->id.next;
- }
-
- vf = G.main->vfont.first;
- while (vf) {
- if (vf->packedfile == NULL) {
- vf->packedfile = newPackedFile(vf->name);
- }
- vf = vf->id.next;
- }
+ for(ima=bmain->image.first; ima; ima=ima->id.next)
+ if(ima->packedfile == NULL)
+ ima->packedfile = newPackedFile(reports, ima->name);
+ for(vf=bmain->vfont.first; vf; vf=vf->id.next)
+ if(vf->packedfile == NULL)
+ vf->packedfile = newPackedFile(reports, vf->name);
- sample = samples->first;
- while (sample) {
- if (sample->packedfile == NULL) {
- sound_set_packedfile(sample, newPackedFile(sample->name));
- }
- sample = sample->id.next;
- }
+ if(samples)
+ for(sample=samples->first; sample; sample=sample->id.next)
+ if(sample->packedfile == NULL)
+ sound_set_packedfile(sample, newPackedFile(reports, sample->name));
}
@@ -252,10 +230,10 @@ void packAll()
// attempt to create a function that generates an unique filename
// this will work when all funtions in fileops.c understand relative filenames...
-char * find_new_name(char * name)
+char *find_new_name(char *name)
{
char tempname[FILE_MAXDIR + FILE_MAXFILE];
- char * newname;
+ char *newname;
if (fop_exists(name)) {
for (number = 1; number <= 999; number++) {
@@ -274,13 +252,13 @@ char * find_new_name(char * name)
*/
-int writePackedFile(char * filename, PackedFile *pf, int guimode)
+int writePackedFile(ReportList *reports, char *filename, PackedFile *pf, int guimode)
{
int file, number, remove_tmp = FALSE;
int ret_value = RET_OK;
char name[FILE_MAXDIR + FILE_MAXFILE];
char tempname[FILE_MAXDIR + FILE_MAXFILE];
-/* void * data; */
+/* void *data; */
if (guimode); //XXX waitcursor(1);
@@ -305,23 +283,23 @@ int writePackedFile(char * filename, PackedFile *pf, int guimode)
file = open(name, O_BINARY + O_WRONLY + O_CREAT + O_TRUNC, 0666);
if (file >= 0) {
if (write(file, pf->data, pf->size) != pf->size) {
- if(guimode) ; //XXX error("Error writing file: %s", name);
+ BKE_reportf(reports, RPT_ERROR, "Error writing file: %s", name);
ret_value = RET_ERROR;
}
close(file);
} else {
- if(guimode); //XXX error("Error creating file: %s", name);
+ BKE_reportf(reports, RPT_ERROR, "Error creating file: %s", name);
ret_value = RET_ERROR;
}
if (remove_tmp) {
if (ret_value == RET_ERROR) {
if (BLI_rename(tempname, name) != 0) {
- if(guimode); //XXX error("Error restoring tempfile. Check files: '%s' '%s'", tempname, name);
+ BKE_reportf(reports, RPT_ERROR, "Error restoring tempfile. Check files: '%s' '%s'", tempname, name);
}
} else {
if (BLI_delete(tempname, 0, 0) != 0) {
- if(guimode); //XXX error("Error deleting '%s' (ignored)");
+ BKE_reportf(reports, RPT_ERROR, "Error deleting '%s' (ignored)", tempname);
}
}
}
@@ -342,7 +320,7 @@ PF_NOFILE - the original file doens't exist
*/
-int checkPackedFile(char * filename, PackedFile * pf)
+int checkPackedFile(char *filename, PackedFile *pf)
{
struct stat st;
int ret_val, i, len, file;
@@ -390,68 +368,23 @@ int checkPackedFile(char * filename, PackedFile * pf)
/*
-unpackFile() looks at the existing files (abs_name, local_name) and a packed file.
-If how == PF_ASK it offers the user a couple of options what to do with the packed file.
+ unpackFile() looks at the existing files (abs_name, local_name) and a packed file.
-It returns a char * to the existing file name / new file name or NULL when
+It returns a char *to the existing file name / new file name or NULL when
there was an error or when the user desides to cancel the operation.
*/
-char *unpackFile(char * abs_name, char * local_name, PackedFile * pf, int how)
+char *unpackFile(ReportList *reports, char *abs_name, char *local_name, PackedFile *pf, int how)
{
- char menu[6 * (FILE_MAXDIR + FILE_MAXFILE + 100)];
+ char menu[6 *(FILE_MAXDIR + FILE_MAXFILE + 100)];
char line[FILE_MAXDIR + FILE_MAXFILE + 100];
- char * newname = NULL, * temp = NULL;
+ char *newname = NULL, *temp = NULL;
// char newabs[FILE_MAXDIR + FILE_MAXFILE];
// char newlocal[FILE_MAXDIR + FILE_MAXFILE];
if (pf != NULL) {
- if (how == PF_ASK) {
- sprintf(menu, "UnPack file%%t|Remove Pack %%x%d", PF_REMOVE);
-
- if (strcmp(abs_name, local_name)) {
- switch (checkPackedFile(local_name, pf)) {
- case PF_NOFILE:
- sprintf(line, "|Create %s%%x%d", local_name, PF_WRITE_LOCAL);
- strcat(menu, line);
- break;
- case PF_EQUAL:
- sprintf(line, "|Use %s (identical)%%x%d", local_name, PF_USE_LOCAL);
- strcat(menu, line);
- break;
- case PF_DIFFERS:
- sprintf(line, "|Use %s (differs)%%x%d", local_name, PF_USE_LOCAL);
- strcat(menu, line);
- sprintf(line, "|Overwrite %s%%x%d", local_name, PF_WRITE_LOCAL);
- strcat(menu, line);
- break;
- }
- // sprintf(line, "|%%x%d", PF_INVALID);
- // strcat(menu, line);
- }
-
- switch (checkPackedFile(abs_name, pf)) {
- case PF_NOFILE:
- sprintf(line, "|Create %s%%x%d", abs_name, PF_WRITE_ORIGINAL);
- strcat(menu, line);
- break;
- case PF_EQUAL:
- sprintf(line, "|Use %s (identical)%%x%d", abs_name, PF_USE_ORIGINAL);
- strcat(menu, line);
- break;
- case PF_DIFFERS:
- sprintf(line, "|Use %s (differs)%%x%d", abs_name, PF_USE_ORIGINAL);
- strcat(menu, line);
- sprintf(line, "|Overwrite %s%%x%d", abs_name, PF_WRITE_ORIGINAL);
- strcat(menu, line);
- break;
- }
-
- //XXX how = pupmenu(menu);
- }
-
switch (how) {
case -1:
case PF_KEEP:
@@ -467,7 +400,7 @@ char *unpackFile(char * abs_name, char * local_name, PackedFile * pf, int how)
}
// else fall through and create it
case PF_WRITE_LOCAL:
- if (writePackedFile(local_name, pf, 1) == RET_OK) {
+ if (writePackedFile(reports, local_name, pf, 1) == RET_OK) {
temp = local_name;
}
break;
@@ -479,7 +412,7 @@ char *unpackFile(char * abs_name, char * local_name, PackedFile * pf, int how)
}
// else fall through and create it
case PF_WRITE_ORIGINAL:
- if (writePackedFile(abs_name, pf, 1) == RET_OK) {
+ if (writePackedFile(reports, abs_name, pf, 1) == RET_OK) {
temp = abs_name;
}
break;
@@ -498,10 +431,10 @@ char *unpackFile(char * abs_name, char * local_name, PackedFile * pf, int how)
}
-int unpackVFont(VFont * vfont, int how)
+int unpackVFont(ReportList *reports, VFont *vfont, int how)
{
char localname[FILE_MAXDIR + FILE_MAXFILE], fi[FILE_MAXFILE];
- char * newname;
+ char *newname;
int ret_value = RET_ERROR;
if (vfont != NULL) {
@@ -510,7 +443,7 @@ int unpackVFont(VFont * vfont, int how)
sprintf(localname, "//fonts/%s", fi);
- newname = unpackFile(vfont->name, localname, vfont->packedfile, how);
+ newname = unpackFile(reports, vfont->name, localname, vfont->packedfile, how);
if (newname != NULL) {
ret_value = RET_OK;
freePackedFile(vfont->packedfile);
@@ -523,10 +456,10 @@ int unpackVFont(VFont * vfont, int how)
return (ret_value);
}
-int unpackSample(bSample *sample, int how)
+int unpackSample(ReportList *reports, bSample *sample, int how)
{
char localname[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX];
- char * newname;
+ char *newname;
int ret_value = RET_ERROR;
PackedFile *pf;
@@ -535,7 +468,7 @@ int unpackSample(bSample *sample, int how)
BLI_splitdirstring(localname, fi);
sprintf(localname, "//samples/%s", fi);
- newname = unpackFile(sample->name, localname, sample->packedfile, how);
+ newname = unpackFile(reports, sample->name, localname, sample->packedfile, how);
if (newname != NULL) {
strcpy(sample->name, newname);
MEM_freeN(newname);
@@ -553,10 +486,10 @@ int unpackSample(bSample *sample, int how)
return(ret_value);
}
-int unpackImage(Image * ima, int how)
+int unpackImage(ReportList *reports, Image *ima, int how)
{
char localname[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX];
- char * newname;
+ char *newname;
int ret_value = RET_ERROR;
if (ima != NULL) {
@@ -564,7 +497,7 @@ int unpackImage(Image * ima, int how)
BLI_splitdirstring(localname, fi);
sprintf(localname, "//textures/%s", fi);
- newname = unpackFile(ima->name, localname, ima->packedfile, how);
+ newname = unpackFile(reports, ima->name, localname, ima->packedfile, how);
if (newname != NULL) {
ret_value = RET_OK;
freePackedFile(ima->packedfile);
@@ -578,33 +511,23 @@ int unpackImage(Image * ima, int how)
return(ret_value);
}
-void unpackAll(int how)
+void unpackAll(Main *bmain, ReportList *reports, int how)
{
Image *ima;
VFont *vf;
bSample *sample;
-
- ima = G.main->image.first;
- while (ima) {
- if (ima->packedfile) {
- unpackImage(ima, how);
- }
- ima= ima->id.next;
- }
-
- vf = G.main->vfont.first;
- while (vf) {
- if (vf->packedfile) {
- unpackVFont(vf, how);
- }
- vf = vf->id.next;
- }
- sample = samples->first;
- while (sample) {
- if (sample->packedfile) {
- unpackSample(sample, how);
- }
- sample = sample->id.next;
- }
+ for(ima=bmain->image.first; ima; ima=ima->id.next)
+ if(ima->packedfile)
+ unpackImage(reports, ima, how);
+
+ for(vf=bmain->vfont.first; vf; vf=vf->id.next)
+ if(vf->packedfile)
+ unpackVFont(reports, vf, how);
+
+ if(samples)
+ for(sample=samples->first; sample; sample=sample->id.next)
+ if(sample->packedfile)
+ unpackSample(reports, sample, how);
}
+