[Scummvm-cvs-logs] SF.net SVN: scummvm:[40844] tools/trunk/compress_kyra.cpp
lordhoto at users.sourceforge.net
lordhoto at users.sourceforge.net
Sun May 24 02:12:47 CEST 2009
Revision: 40844
http://scummvm.svn.sourceforge.net/scummvm/?rev=40844&view=rev
Author: lordhoto
Date: 2009-05-24 00:12:47 +0000 (Sun, 24 May 2009)
Log Message:
-----------
- Extend compress_kyra to support Lands of Lore .TLK files
- Change file extensions to standard ones (MP3/OGG/FLA instead of VO3/VOG/VOF)
- Little cleanup
Modified Paths:
--------------
tools/trunk/compress_kyra.cpp
Modified: tools/trunk/compress_kyra.cpp
===================================================================
--- tools/trunk/compress_kyra.cpp 2009-05-24 00:11:28 UTC (rev 40843)
+++ tools/trunk/compress_kyra.cpp 2009-05-24 00:12:47 UTC (rev 40844)
@@ -28,13 +28,8 @@
static void processKyra3(const char *infile, const char *output);
static bool detectKyra3File(const char *infile);
-#define OUTPUT_MP3 ".VO3"
-#define OUTPUT_OGG ".VOG"
-#define OUTPUT_FLAC ".VOF"
-
#define TEMPFILE "TEMP.VOC"
-const char *outputExt = 0;
static CompressMode gCompMode = kMP3Mode;
int main(int argc, char *argv[]) {
@@ -62,19 +57,16 @@
switch (gCompMode) {
case kMP3Mode:
- outputExt = OUTPUT_MP3;
tempEncoded = TEMP_MP3;
if (!process_mp3_parms(argc - 2, argv, i))
showhelp(argv[0]);
break;
case kVorbisMode:
- outputExt = OUTPUT_OGG;
tempEncoded = TEMP_OGG;
if (!process_ogg_parms(argc - 2, argv, i))
showhelp(argv[0]);
break;
case kFlacMode:
- outputExt = OUTPUT_FLAC;
tempEncoded = TEMP_FLAC;
if (!process_flac_parms(argc - 2, argv, i))
showhelp(argv[0]);
@@ -149,6 +141,41 @@
return (scumm_stricmp(&str[off], suf) == 0);
}
+static void changeFileExt(char *filename) {
+ char *str = filename + strlen(filename) - 4;
+
+ if (*str != '.')
+ error("Invalid filename '%s'", filename);
+
+ ++str;
+
+ switch (gCompMode) {
+ case kMP3Mode:
+ *str++ = 'm';
+ *str++ = 'p';
+ *str++ = '3';
+ break;
+
+ case kVorbisMode:
+ *str++ = 'o';
+ *str++ = 'g';
+ *str++ = 'g';
+ break;
+
+ case kFlacMode:
+ *str++ = 'f';
+ *str++ = 'l';
+ *str++ = 'a';
+ break;
+
+ default:
+ error("Unknown compression mode");
+ }
+
+ *str = 0;
+}
+
+
static void process(const char *infile, const char *outfile) {
PAKFile input, output;
@@ -162,7 +189,8 @@
char outputName[32];
for (; list; list = list->next) {
- if (!hasSuffix(list->filename, ".VOC"))
+ // Detect VOC file from content instead of extension. This is needed for Lands of Lore TLK files.
+ if (memcmp(list->data, "Creative Voice File", 19) != 0)
continue;
if (list->data[26] != 1) {
@@ -171,16 +199,24 @@
}
input.outputFileAs(list->filename, TEMPFILE);
- strncpy(outputName, list->filename, 32);
+ strncpy(outputName, list->filename, sizeof(outputName) - 5);
+ outputName[sizeof(outputName) - 5] = 0;
FILE *tempFile = fopen(TEMPFILE, "rb");
fseek(tempFile, 26, SEEK_CUR);
extractAndEncodeVOC(TEMP_RAW, tempFile, gCompMode);
fclose(tempFile);
- char *vocStart = strstr(outputName, ".VOC");
- for (unsigned int i = 0; i < strlen(outputExt); ++i)
- vocStart[i] = outputExt[i];
+ if (hasSuffix(outputName, ".VOC")) {
+ // When a ".VOC" extension is present we will replace it with a extension
+ // based on the compression method used.
+ changeFileExt(outputName);
+ } else {
+ // When no ".VOC" extension is present we will just append a extension
+ // based on the compression method used.
+ strcat(outputName, ".VOC");
+ changeFileExt(outputName);
+ }
output.addFile(outputName, tempEncoded);
@@ -380,40 +416,6 @@
unlink(TEMP_RAW);
}
-static void changeFileExt(char *filename) {
- char *str = filename + strlen(filename) - 4;
-
- if (*str != '.')
- error("Invalid filename '%s'", filename);
-
- ++str;
-
- switch (gCompMode) {
- case kMP3Mode:
- *str++ = 'm';
- *str++ = 'p';
- *str++ = '3';
- break;
-
- case kVorbisMode:
- *str++ = 'o';
- *str++ = 'g';
- *str++ = 'g';
- break;
-
- case kFlacMode:
- *str++ = 'f';
- *str++ = 'l';
- *str++ = 'a';
- break;
-
- default:
- error("Unknown compression mode");
- }
-
- *str = 0;
-}
-
struct DuplicatedFile {
uint32 resFilename;
uint32 resOffset;
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