[Scummvm-cvs-logs] SF.net SVN: scummvm:[41531] tools/branches/gsoc2009-gui

Remere at users.sourceforge.net Remere at users.sourceforge.net
Mon Jun 15 03:32:56 CEST 2009


Revision: 41531
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41531&view=rev
Author:   Remere
Date:     2009-06-15 01:32:56 +0000 (Mon, 15 Jun 2009)

Log Message:
-----------
*Commiting compress_tucker again, this time for real (accidently reverted it yesterday).

Modified Paths:
--------------
    tools/branches/gsoc2009-gui/compress_sword2.cpp
    tools/branches/gsoc2009-gui/compress_tucker.cpp

Modified: tools/branches/gsoc2009-gui/compress_sword2.cpp
===================================================================
--- tools/branches/gsoc2009-gui/compress_sword2.cpp	2009-06-15 00:31:25 UTC (rev 41530)
+++ tools/branches/gsoc2009-gui/compress_sword2.cpp	2009-06-15 01:32:56 UTC (rev 41531)
@@ -88,13 +88,13 @@
 
 	switch(gCompMode) {
 	case kMP3Mode:
-	tempEncoded = TEMP_MP3;
+		tempEncoded = TEMP_MP3;
 		break;
 	case kVorbisMode:
-	tempEncoded = TEMP_OGG;
+		tempEncoded = TEMP_OGG;
 		break;
 	case kFlacMode:
-	tempEncoded = TEMP_FLAC;
+		tempEncoded = TEMP_FLAC;
 		break;
 	default:
 		printf(helptext, argv[0]);

Modified: tools/branches/gsoc2009-gui/compress_tucker.cpp
===================================================================
--- tools/branches/gsoc2009-gui/compress_tucker.cpp	2009-06-15 00:31:25 UTC (rev 41530)
+++ tools/branches/gsoc2009-gui/compress_tucker.cpp	2009-06-15 01:32:56 UTC (rev 41531)
@@ -30,10 +30,7 @@
 #define OUTPUT_OGG  "TUCKER.SOG"
 #define OUTPUT_FLA  "TUCKER.SOF"
 
-static CompressMode g_mode = kMP3Mode;
-static const char *g_output_filename = OUTPUT_MP3;
-static const char *g_output_directory = NULL;
-static const char *g_input_directory = NULL;
+static CompressMode gCompMode = kMP3Mode;
 
 struct CompressedData {
 	int offset;
@@ -63,7 +60,7 @@
 	char buf[8];
 
 	if (fread(buf, 1, 8, input) == 8 && memcmp(buf, "RIFF", 4) == 0) {
-		extractAndEncodeWAV(TEMP_WAV, input, g_mode);
+		extractAndEncodeWAV(TEMP_WAV, input, gCompMode);
 		return append_compress_file(output);
 	}
 	return 0;
@@ -75,7 +72,7 @@
 	} else {
 		setRawAudioType(false, false, 8);
 	}
-	encodeAudio(input, true, 22050, tempEncoded, g_mode);
+	encodeAudio(input, true, 22050, tempEncoded, gCompMode);
 	return append_compress_file(output);
 }
 
@@ -97,20 +94,27 @@
 	{ "SPEECH", "sam%04d.wav", MAX_SPEECH_FILES }
 };
 
-static uint32 compress_sounds_directory(FILE *output, const struct SoundDirectory *dir) {
+static uint32 compress_sounds_directory(const Filename *inpath, const Filename *outpath, FILE *output, const struct SoundDirectory *dir) {
 	char filepath[1024];
+	char inputDir[1024];
 	char *filename;
-	struct stat s;
+	//struct stat s;
 	int i, pos;
 	uint32 current_offset;
 	FILE *input;
 
+	inpath->getPath(inputDir);
+
 	assert(dir->count <= ARRAYSIZE(temp_table));
 
-	snprintf(filepath, sizeof(filepath), "%s/%s", g_input_directory, dir->name);
+	// We can't use setFullName since dir->name can contain '/'
+	snprintf(filepath, sizeof(filepath), "%s/%s", inputDir, dir->name);
+	/* stat is NOT standard C, but rather a POSIX call and fails under MSVC
+	 * this could be factored out to Filename::isDirectory ?
 	if (stat(filepath, &s) != 0 || !S_ISDIR(s.st_mode)) {
 		error("Cannot stat directory '%s'", filepath);
 	}
+	*/
 	strcat(filepath, "/");
 	filename = filepath + strlen(filepath);
 
@@ -380,7 +384,7 @@
 	{ "raw", AUDIO_RAW_COUNT }
 };
 
-static uint32 compress_audio_directory(FILE *output, int count, int index) {
+static uint32 compress_audio_directory(const Filename *inpath, const Filename *outpath, FILE *output, int count, int index) {
 	char filepath[1024];
 	int i, pos;
 	uint32 current_offset;
@@ -388,6 +392,9 @@
 	char entry_name[13];
 	bool is_16LE;
 
+	char inputDir[1024];
+	inpath->getPath(inputDir);
+
 	assert(ARRAYSIZE(audio_wav_fileslist) == AUDIO_WAV_COUNT);
 
 	pos = ftell(output);
@@ -405,7 +412,7 @@
 		temp_table[i].offset = current_offset;
 		switch (index) {
 		case 0: /* .wav */
-			sprintf(filepath, "%s/audio/%s", g_input_directory, audio_wav_fileslist[i]);
+			sprintf(filepath, "%s/audio/%s", inputDir, audio_wav_fileslist[i]);
 			input = fopen(filepath, "rb");
 			if (!input) {
 				error("Can't open file '%s'", filepath);
@@ -417,7 +424,7 @@
 			is_16LE = bsearch(audio_raw_fileslist[i], audio_raw_fileslist_16LE,
 				ARRAYSIZE(audio_raw_fileslist_16LE), sizeof(const char *), cmp_helper) != NULL;
 			temp_table[i].offset = current_offset;
-			sprintf(filepath, "%s/audio/%s", g_input_directory, audio_raw_fileslist[i]);
+			sprintf(filepath, "%s/audio/%s", inputDir, audio_raw_fileslist[i]);
 			input = fopen(filepath, "rb");
 			if (input) {
 				fclose(input);
@@ -444,19 +451,17 @@
 	return current_offset + count * 8;
 }
 
-static void compress_sound_files() {
+static void compress_sound_files(const Filename *inpath, const Filename *outpath) {
 	int i;
 	FILE *output;
-	char filepath[1024];
 	uint32 current_offset;
 	uint32 sound_directory_size[SOUND_TYPES_COUNT];
 	uint32 audio_directory_size[AUDIO_TYPES_COUNT];
 	const uint16 flags = 0; // HEADER_FLAG_AUDIO_INTRO;
 
-	snprintf(filepath, sizeof(filepath), "%s/%s", g_output_directory, g_output_filename);
-	output = fopen(filepath, "wb");
+	output = fopen(outpath->getFullPath(), "wb");
 	if (!output) {
-		error("Cannot open file '%s' for writing", filepath);
+		error("Cannot open file '%s' for writing", outpath->getFullPath());
 	}
 
 	writeUint16LE(output, CURRENT_VER);
@@ -477,13 +482,13 @@
 	/* compress the .wav files in each directory */
 	for (i = 0; i < SOUND_TYPES_COUNT; ++i) {
 		printf("Processing directory '%s'...\n", sound_directory_table[i].name);
-		sound_directory_size[i] = compress_sounds_directory(output, &sound_directory_table[i]);
+		sound_directory_size[i] = compress_sounds_directory(inpath, outpath, output, &sound_directory_table[i]);
 		printf("Done (%d bytes)\n", sound_directory_size[i]);
 	}
 	if (flags & HEADER_FLAG_AUDIO_INTRO) {
 		for (i = 0; i < AUDIO_TYPES_COUNT; ++i) {
 			printf("Processing 'audio/*.%s' files...\n", audio_directory_table[i].ext);
-			audio_directory_size[i] = compress_audio_directory(output, audio_directory_table[i].count, i);
+			audio_directory_size[i] = compress_audio_directory(inpath, outpath, output, audio_directory_table[i].count, i);
 			printf("Done (%d bytes)\n", audio_directory_size[i]);
 		}
 	}
@@ -514,57 +519,53 @@
 	printf("Done.\n");
 }
 
-static void showhelp(const char *exename) {
-	printf("\nUsage: %s [params] <inputdir> <outputdir>\n", exename);
-	exit(2);
-}
+const char *helptext = "\nUsage: %s [mode] [mode params] [-o outputdir] inputdir\n";
 
 int main(int argc, char *argv[]) {
-	int i;
+	Filename inpath, outpath;
+	int first_arg = 1;
+	int last_arg = argc - 1;
+	
+	parseHelpArguments(argv, argc, helptext);
 
-	if (argc < 2) {
-		showhelp(argv[0]);
-	}
+	// compression mode
+	gCompMode = process_audio_params(argc, argv, &first_arg);
 
-	i = 1;
-	if (strcmp(argv[1], "--mp3") == 0) {
-		g_mode = kMP3Mode;
-		g_output_filename = OUTPUT_MP3;
-		++i;
-	} else if (strcmp(argv[1], "--vorbis") == 0) {
-		g_mode = kVorbisMode;
-		g_output_filename = OUTPUT_OGG;
-		++i;
-	} else if (strcmp(argv[1], "--flac") == 0) {
-		g_mode = kFlacMode;
-		g_output_filename = OUTPUT_FLA;
-		++i;
+
+	// Now we try to find the proper output file
+	// also make sure we skip those arguments
+	if (parseOutputDirectoryArguments(&outpath, argv, argc, first_arg))
+		first_arg += 2;
+	else if (parseOutputDirectoryArguments(&outpath, argv, argc, last_arg - 2))
+		last_arg -= 2;
+
+	inpath.setFullPath(argv[first_arg]);
+
+	// Default out is same as in directory, file names differ by extension
+	if(outpath.empty()) {
+		outpath = inpath;
 	}
 
-	g_input_directory = argv[argc - 2];
-	g_output_directory = argv[argc - 1];
-
-	switch (g_mode) {
+	// Temporary output file
+	switch(gCompMode) {
 	case kMP3Mode:
 		tempEncoded = TEMP_MP3;
-		if (!process_mp3_parms(argc - 1, argv, i)) {
-			showhelp(argv[0]);
-		}
+		outpath.setFullName(OUTPUT_MP3);
 		break;
 	case kVorbisMode:
 		tempEncoded = TEMP_OGG;
-		if (!process_ogg_parms(argc - 1, argv, i)) {
-			showhelp(argv[0]);
-		}
+		outpath.setFullName(OUTPUT_OGG);
 		break;
 	case kFlacMode:
 		tempEncoded = TEMP_FLAC;
-		if (!process_flac_parms(argc - 1, argv, i)) {
-			showhelp(argv[0]);
-		}
+		outpath.setFullName(OUTPUT_FLA);
 		break;
+	default:
+		printf(helptext, argv[0]);
+		exit(2);
+		break;
 	}
 
-	compress_sound_files();
+	compress_sound_files(&inpath, &outpath);
 	return 0;
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list