Esempio n. 1
0
int unpackSound(Main *bmain, ReportList *reports, bSound *sound, int how)
{
    char localname[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX];
    char *newname;
    int ret_value = RET_ERROR;

    if (sound != NULL) {
        BLI_split_file_part(sound->name, fi, sizeof(fi));
        BLI_snprintf(localname, sizeof(localname), "//sounds/%s", fi);
        newname = unpackFile(reports, sound->name, localname, sound->packedfile, how);
        if (newname != NULL) {
            BLI_strncpy(sound->name, newname, sizeof(sound->name));
            MEM_freeN(newname);

            freePackedFile(sound->packedfile);
            sound->packedfile = NULL;

            sound_load(bmain, sound);

            ret_value = RET_OK;
        }
    }

    return(ret_value);
}
Esempio n. 2
0
/* ------------------------------------------------------------------------- */
#if 0 /* UNUSED */
void autotexname(Tex *tex)
{
	Main *bmain = G.main;
	char texstr[20][15] = {"None", "Clouds", "Wood", "Marble", "Magic", "Blend",
		                   "Stucci", "Noise", "Image", "EnvMap", "Musgrave",
		                   "Voronoi", "DistNoise", "Point Density", "Voxel Data", "Ocean", "", "", ""};
	Image *ima;
	char di[FILE_MAXDIR], fi[FILE_MAXFILE];
	
	if (tex) {
		if (tex->use_nodes) {
			new_id(&bmain->tex, (ID *)tex, "Noddy");
		}
		else if (tex->type == TEX_IMAGE) {
			ima = tex->ima;
			if (ima) {
				BLI_split_file_part(ima->name, fi, sizeof(fi));
				strcpy(di, "I.");
				strcat(di, fi);
				new_id(&bmain->tex, (ID *)tex, di);
			}
			else {
				new_id(&bmain->tex, (ID *)tex, texstr[tex->type]);
			}
		}
		else {
			new_id(&bmain->tex, (ID *)tex, texstr[tex->type]);
		}
	}
}
Esempio n. 3
0
static bool delete_recursive(const char *dir)
{
	struct direntry *filelist, *fl;
	bool err = false;
	unsigned int nbr, i;

	i = nbr = BLI_dir_contents(dir, &filelist);
	fl = filelist;
	while (i--) {
		char file[8];
		BLI_split_file_part(fl->path, file, sizeof(file));
		if (STREQ(file, ".") || STREQ(file, "..")) {
			/* Skip! */
		}
		else if (S_ISDIR(fl->type)) {
			if (delete_recursive(fl->path)) {
				err = true;
			}
		}
		else {
			if (delete_unique(fl->path, false)) {
				err = true;
			}
		}
		++fl;
	}

	if (!err && delete_unique(dir, true)) {
		err = true;
	}

	BLI_free_filelist(filelist, nbr);

	return err;
}
Esempio n. 4
0
VFont *BKE_vfont_load(Main *bmain, const char *name)
{
	char filename[FILE_MAXFILE];
	VFont *vfont = NULL;
	PackedFile *pf;
	PackedFile *temp_pf = NULL;
	int is_builtin;
	
	if (STREQ(name, FO_BUILTIN_NAME)) {
		BLI_strncpy(filename, name, sizeof(filename));
		
		pf = get_builtin_packedfile();
		is_builtin = TRUE;
	}
	else {
		BLI_split_file_part(name, filename, sizeof(filename));
		pf = newPackedFile(NULL, name, bmain->name);
		temp_pf = newPackedFile(NULL, name, bmain->name);
		
		is_builtin = FALSE;
	}

	if (pf) {
		VFontData *vfd;

		vfd = BLI_vfontdata_from_freetypefont(pf);
		if (vfd) {
			vfont = BKE_libblock_alloc(&bmain->vfont, ID_VF, filename);
			vfont->data = vfd;

			/* if there's a font name, use it for the ID name */
			if (vfd->name[0] != '\0') {
				BLI_strncpy(vfont->id.name + 2, vfd->name, sizeof(vfont->id.name) - 2);
			}
			BLI_strncpy(vfont->name, name, sizeof(vfont->name));

			/* if autopack is on store the packedfile in de font structure */
			if (!is_builtin && (G.fileflags & G_AUTOPACK)) {
				vfont->packedfile = pf;
			}

			/* Do not add FO_BUILTIN_NAME to temporary listbase */
			if (strcmp(filename, FO_BUILTIN_NAME)) {
				vfont->temp_pf = temp_pf;
			}
		}

		/* Free the packed file */
		if (!vfont || vfont->packedfile != pf) {
			freePackedFile(pf);
		}
	}
	
	return vfont;
}
Esempio n. 5
0
/* path to temporary exr file */
void render_result_exr_file_path(Scene *scene, const char *layname, int sample, char *filepath)
{
	char name[FILE_MAXFILE + MAX_ID_NAME + MAX_ID_NAME + 100], fi[FILE_MAXFILE];
	
	BLI_split_file_part(G.main->name, fi, sizeof(fi));
	if (sample == 0)
		BLI_snprintf(name, sizeof(name), "%s_%s_%s.exr", fi, scene->id.name + 2, layname);
	else
		BLI_snprintf(name, sizeof(name), "%s_%s_%s%d.exr", fi, scene->id.name + 2, layname, sample);

	BLI_make_file_string("/", filepath, BLI_temporary_dir(), name);
}
Esempio n. 6
0
int unpackVFont(ReportList *reports, VFont *vfont, int how)
{
    char localname[FILE_MAX], fi[FILE_MAXFILE];
    char *newname;
    int ret_value = RET_ERROR;

    if (vfont != NULL) {
        BLI_split_file_part(vfont->name, fi, sizeof(fi));
        BLI_snprintf(localname, sizeof(localname), "//fonts/%s", fi);
        newname = unpackFile(reports, vfont->name, localname, vfont->packedfile, how);
        if (newname != NULL) {
            ret_value = RET_OK;
            freePackedFile(vfont->packedfile);
            vfont->packedfile = NULL;
            BLI_strncpy(vfont->name, newname, sizeof(vfont->name));
            MEM_freeN(newname);
        }
    }

    return (ret_value);
}
Esempio n. 7
0
int unpackImage(ReportList *reports, Image *ima, int how)
{
    char localname[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX];
    char *newname;
    int ret_value = RET_ERROR;

    if (ima != NULL && ima->name[0]) {
        BLI_split_file_part(ima->name, fi, sizeof(fi));
        BLI_snprintf(localname, sizeof(localname), "//textures/%s", fi);
        newname = unpackFile(reports, ima->name, localname, ima->packedfile, how);
        if (newname != NULL) {
            ret_value = RET_OK;
            freePackedFile(ima->packedfile);
            ima->packedfile = NULL;
            BLI_strncpy(ima->name, newname, sizeof(ima->name));
            MEM_freeN(newname);
            BKE_image_signal(ima, NULL, IMA_SIGNAL_RELOAD);
        }
    }

    return(ret_value);
}
Esempio n. 8
0
static int fluid_init_filepaths(Object *fsDomain, char *targetDir, char *targetFile, char *debugStrBuffer)
{
	FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(fsDomain, eModifierType_Fluidsim);
	FluidsimSettings *domainSettings= fluidmd->fss;
	FILE *fileCfg;
	int dirExist = 0;
	char newSurfdataPath[FILE_MAX]; /* modified output settings */
	const char *suffixConfigTmp = FLUID_SUFFIX_CONFIG_TMP;
	int outStringsChanged = 0;

	/* prepare names... */
	const char *relbase= modifier_path_relbase(fsDomain);

	BLI_strncpy(targetDir, domainSettings->surfdataPath, FILE_MAXDIR);
	BLI_strncpy(newSurfdataPath, domainSettings->surfdataPath, FILE_MAXDIR); /* if 0'd out below, this value is never used! */
	BLI_path_abs(targetDir, relbase); /* fixed #frame-no */

	/* .tmp: don't overwrite/delete original file */
	BLI_join_dirfile(targetFile, FILE_MAX, targetDir, suffixConfigTmp);

	// make sure all directories exist
	// as the bobjs use the same dir, this only needs to be checked
	// for the cfg output
	BLI_make_existing_file(targetFile);
	
	// check selected directory
	// simply try to open cfg file for writing to test validity of settings
	fileCfg = BLI_fopen(targetFile, "w");
	if (fileCfg) {
		dirExist = 1; fclose(fileCfg); 
		// remove cfg dummy from  directory test
		BLI_delete(targetFile, false, false);
	}
	
	if (targetDir[0] == '\0' || (!dirExist)) {
		char blendFile[FILE_MAX];
		
		// invalid dir, reset to current/previous
		BLI_split_file_part(G.main->name, blendFile, sizeof(blendFile));
		BLI_replace_extension(blendFile, FILE_MAX, ""); /* strip .blend */
		BLI_snprintf(newSurfdataPath, FILE_MAX, "//fluidsimdata/%s_%s_", blendFile, fsDomain->id.name);
		
		BLI_snprintf(debugStrBuffer, 256, "fluidsimBake::error - warning resetting output dir to '%s'\n", newSurfdataPath);
		elbeemDebugOut(debugStrBuffer);
		outStringsChanged=1;
	}
	
	/* check if modified output dir is ok */
#if 0
	if (outStringsChanged) {
		char dispmsg[FILE_MAX+256];
		int  selection=0;
		BLI_strncpy(dispmsg, "Output settings set to: '", sizeof(dispmsg));
		strcat(dispmsg, newSurfdataPath);
		strcat(dispmsg, "'%t|Continue with changed settings %x1|Discard and abort %x0");
		
		/* ask user if thats what he/she wants... */
		selection = pupmenu(dispmsg);
		if (selection < 1) return 0; /* 0 from menu, or -1 aborted */
		BLI_strncpy(targetDir, newSurfdataPath, sizeof(targetDir));
		strncpy(domainSettings->surfdataPath, newSurfdataPath, FILE_MAXDIR);
		BLI_path_abs(targetDir, G.main->name); /* fixed #frame-no */
	}
#endif
	return outStringsChanged;
}
Esempio n. 9
0
void unpack_menu(bContext *C, const char *opname, const char *id_name, const char *abs_name, const char *folder, struct PackedFile *pf)
{
	PointerRNA props_ptr;
	uiPopupMenu *pup;
	uiLayout *layout;
	char line[FILE_MAX + 100];
	wmOperatorType *ot = WM_operatortype_find(opname, 1);

	pup = uiPupMenuBegin(C, IFACE_("Unpack File"), ICON_NONE);
	layout = uiPupMenuLayout(pup);

	props_ptr = uiItemFullO_ptr(layout, ot, IFACE_("Remove Pack"), ICON_NONE,
	                            NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
	RNA_enum_set(&props_ptr, "method", PF_REMOVE);
	RNA_string_set(&props_ptr, "id", id_name);

	if (G.relbase_valid) {
		char local_name[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX];

		BLI_split_file_part(abs_name, fi, sizeof(fi));
		BLI_snprintf(local_name, sizeof(local_name), "//%s/%s", folder, fi);
		if (strcmp(abs_name, local_name) != 0) {
			switch (checkPackedFile(local_name, pf)) {
				case PF_NOFILE:
					BLI_snprintf(line, sizeof(line), IFACE_("Create %s"), local_name);
					props_ptr = uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
					RNA_enum_set(&props_ptr, "method", PF_WRITE_LOCAL);
					RNA_string_set(&props_ptr, "id", id_name);

					break;
				case PF_EQUAL:
					BLI_snprintf(line, sizeof(line), IFACE_("Use %s (identical)"), local_name);
					//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_LOCAL);
					props_ptr = uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
					RNA_enum_set(&props_ptr, "method", PF_USE_LOCAL);
					RNA_string_set(&props_ptr, "id", id_name);

					break;
				case PF_DIFFERS:
					BLI_snprintf(line, sizeof(line), IFACE_("Use %s (differs)"), local_name);
					//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_LOCAL);
					props_ptr = uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
					RNA_enum_set(&props_ptr, "method", PF_USE_LOCAL);
					RNA_string_set(&props_ptr, "id", id_name);

					BLI_snprintf(line, sizeof(line), IFACE_("Overwrite %s"), local_name);
					//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_LOCAL);
					props_ptr = uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
					RNA_enum_set(&props_ptr, "method", PF_WRITE_LOCAL);
					RNA_string_set(&props_ptr, "id", id_name);
					break;
			}
		}
	}

	switch (checkPackedFile(abs_name, pf)) {
		case PF_NOFILE:
			BLI_snprintf(line, sizeof(line), IFACE_("Create %s"), abs_name);
			//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_ORIGINAL);
			props_ptr = uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
			RNA_enum_set(&props_ptr, "method", PF_WRITE_ORIGINAL);
			RNA_string_set(&props_ptr, "id", id_name);
			break;
		case PF_EQUAL:
			BLI_snprintf(line, sizeof(line), IFACE_("Use %s (identical)"), abs_name);
			//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_ORIGINAL);
			props_ptr = uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
			RNA_enum_set(&props_ptr, "method", PF_USE_ORIGINAL);
			RNA_string_set(&props_ptr, "id", id_name);
			break;
		case PF_DIFFERS:
			BLI_snprintf(line, sizeof(line), IFACE_("Use %s (differs)"), abs_name);
			//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_USE_ORIGINAL);
			props_ptr = uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
			RNA_enum_set(&props_ptr, "method", PF_USE_ORIGINAL);
			RNA_string_set(&props_ptr, "id", id_name);

			BLI_snprintf(line, sizeof(line), IFACE_("Overwrite %s"), abs_name);
			//uiItemEnumO_ptr(layout, ot, line, 0, "method", PF_WRITE_ORIGINAL);
			props_ptr = uiItemFullO_ptr(layout, ot, line, ICON_NONE, NULL, WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
			RNA_enum_set(&props_ptr, "method", PF_WRITE_ORIGINAL);
			RNA_string_set(&props_ptr, "id", id_name);
			break;
	}

	uiPupMenuEnd(C, pup);
}