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

Remere at users.sourceforge.net Remere at users.sourceforge.net
Sat Aug 8 22:03:06 CEST 2009


Revision: 43137
          http://scummvm.svn.sourceforge.net/scummvm/?rev=43137&view=rev
Author:   Remere
Date:     2009-08-08 20:03:05 +0000 (Sat, 08 Aug 2009)

Log Message:
-----------
*Merged up to revision 43135 of tools/trunk.

Revision Links:
--------------
    http://scummvm.svn.sourceforge.net/scummvm/?rev=43135&view=rev

Modified Paths:
--------------
    tools/branches/gsoc2009-gui/Makefile
    tools/branches/gsoc2009-gui/README
    tools/branches/gsoc2009-gui/compress_gob.cpp
    tools/branches/gsoc2009-gui/descumm6.cpp
    tools/branches/gsoc2009-gui/dist/msvc8/tools.sln

Added Paths:
-----------
    tools/branches/gsoc2009-gui/create_sjisfnt.cpp

Property Changed:
----------------
    tools/branches/gsoc2009-gui/


Property changes on: tools/branches/gsoc2009-gui
___________________________________________________________________
Modified: svn:mergeinfo
   - /tools/trunk:41370-42088
   + /tools/trunk:41370-43135

Modified: tools/branches/gsoc2009-gui/Makefile
===================================================================
--- tools/branches/gsoc2009-gui/Makefile	2009-08-08 20:00:28 UTC (rev 43136)
+++ tools/branches/gsoc2009-gui/Makefile	2009-08-08 20:03:05 UTC (rev 43137)
@@ -188,6 +188,8 @@
 #extract_zak_c64$(EXEEXT): extract_zak_c64.o util.o tool.o
 #	$(CXX) $(LDFLAGS) -o $@ $+
 
+create_sjisfnt$(EXEEXT): create_sjisfnt.o util.o
+	$(CXX) $(LDFLAGS) `freetype-config --libs` -o $@ $+
 tools_gui$(EXEEXT): gui/main.o gui/pages.o gui/gui_tools.o compress_agos.o compress_gob.o compress_kyra.o \
 	compress_queen.o compress_saga.o compress_scumm_bun.o compress_scumm_san.o compress_scumm_sou.o \
 	compress_sword1.o compress_sword2.o compress_touche.o compress_tucker.o compress_tinsel.o \
@@ -213,6 +215,12 @@
 gui/pages.o: gui/pages.cpp gui/pages.h gui/main.h gui/gui_tools.h
 	$(CXX) $(CXXFLAGS) $(CPPFLAGS) `wx-config --cxxflags` -c gui/pages.cpp -o gui/pages.o
 
+create_sjisfnt.o: create_sjisfnt.cpp util.h
+	$(CXX) $(CXXFLAGS) $(CPPFLAGS) `freetype-config --cflags` -c create_sjisfnt.cpp -o create_sjisfnt.o
+
+tools_gui.o: tools_gui.cpp tools_gui.h
+	$(CXX) $(CXXFLAGS) $(CPPFLAGS) `wx-config --cxxflags` -c tools_gui.cpp -o tools_gui.o
+
 gui/gui_tools.o: gui/gui_tools.cpp gui/gui_tools.h
 	$(CXX) $(CXXFLAGS) $(CPPFLAGS) `wx-config --cxxflags` -c gui/gui_tools.cpp -o gui/gui_tools.o
 

Modified: tools/branches/gsoc2009-gui/README
===================================================================
--- tools/branches/gsoc2009-gui/README	2009-08-08 20:00:28 UTC (rev 43136)
+++ tools/branches/gsoc2009-gui/README	2009-08-08 20:03:05 UTC (rev 43137)
@@ -221,7 +221,7 @@
                 Example of usage:
                 compress_sword1 [params] <inputdir>
 
-       compress_sword2
+        compress_sword2
                 Used to compress Broken Sword 2's music and speech .clu
                 files to .cl3 (MP3), .clg (Vorbis) or .clf (FLAC).
 

Modified: tools/branches/gsoc2009-gui/compress_gob.cpp
===================================================================
--- tools/branches/gsoc2009-gui/compress_gob.cpp	2009-08-08 20:00:28 UTC (rev 43136)
+++ tools/branches/gsoc2009-gui/compress_gob.cpp	2009-08-08 20:03:05 UTC (rev 43137)
@@ -336,9 +336,10 @@
 	size = src.size();
 
 	byte *unpacked = new byte [size + 1];
-	for (int i = 0; i < 4096 - 18; i++)
-		dico[i] = 0x20;
 
+	memset(dico, 0x20, 4114);
+	memset(unpacked, 0, size + 1);
+
 	src.read(unpacked, 1, size);
 
 	writeBuffer[0] = size & 0xFF;

Copied: tools/branches/gsoc2009-gui/create_sjisfnt.cpp (from rev 43135, tools/trunk/create_sjisfnt.cpp)
===================================================================
--- tools/branches/gsoc2009-gui/create_sjisfnt.cpp	                        (rev 0)
+++ tools/branches/gsoc2009-gui/create_sjisfnt.cpp	2009-08-08 20:03:05 UTC (rev 43137)
@@ -0,0 +1,376 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include <iconv.h>
+#include <vector>
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+#include "util.h"
+#include <cstdio>
+#include <cstdlib>
+
+namespace {
+
+int mapSJIStoChunk(uint8 fB, uint8 sB);
+
+bool initSJIStoUTF32Conversion();
+void deinitSJIStoUTF32Conversion();
+uint32 convertSJIStoUTF32(uint8 fB, uint8 sB);
+
+bool initFreeType(const char *font);
+void deinitFreeType();
+
+struct Glyph {
+	uint8 fB, sB;
+
+	int xOffset;
+	int yOffset;
+	int height;
+	int width;
+
+	int pitch;
+	uint8 *plainData;
+};
+
+bool drawGlyph16x16(uint32 unicode, Glyph &glyph);
+
+} // end of anonymous namespace
+
+int main(int argc, char *argv[]) {
+	if (argc < 2 || argc > 3) {
+		std::printf("Usage:\n\t%s <input ttf font> [outfile]\n", argv[0]);
+		return -1;
+	}
+
+	const char *font = argv[1];
+	const char *out = 0;
+	if (argc == 3)
+		out = argv[2];
+	else
+		out = "sjis.fnt";
+
+	if (!initSJIStoUTF32Conversion()) {
+		error("Could not initialize conversion from SJIS to UTF-32.");
+		return -1;
+	}
+
+	atexit(deinitSJIStoUTF32Conversion);
+
+	if (!initFreeType(font)) {
+		error("Could not initialize FreeType library.");
+		return -1;
+	}
+
+	atexit(deinitFreeType);
+
+	std::vector<Glyph> glyphs;
+	int chars = 0;
+
+	for (uint8 fB = 0x81; fB <= 0xEF; ++fB) {
+		if (fB >= 0xA0 && fB <= 0xDF)
+			continue;
+
+		for (uint8 sB = 0x40; sB <= 0xFC; ++sB) {
+			if (sB == 0x7F)
+				continue;
+
+			++chars;
+
+			uint32 utf32 = convertSJIStoUTF32(fB, sB);
+			if (utf32 == (uint32)-1) {
+				// For now we disable that warning, since iconv will fail for all reserved,
+				// that means unused, valid SJIS character codes.
+				//
+				// It might be useful to enable that warning again to detect problems with
+				// iconv though. An example for such an iconv problem is the 
+				// "FULLWIDTH APOSTROPHE", which iconv refuses to convert to UTF-32.
+				//warning("Conversion error on: %.2X %.02X", fB, sB);
+				continue;
+			}
+
+			Glyph data;
+			data.fB = fB;
+			data.sB = sB;
+			if (!drawGlyph16x16(utf32, data)) {
+				warning("Could not render glyph: %.2X %.2X", fB, sB);
+				continue;
+			}
+
+			glyphs.push_back(data);
+		}
+	}
+
+	// Calculate the base line for the font. The possible range is [0, 15].
+	int baseLine = 15;
+	for (std::vector<Glyph>::const_iterator i = glyphs.begin(); i != glyphs.end(); ++i) {
+		int bL = 16 + (i->yOffset - i->height);
+
+		if (bL < baseLine)
+			baseLine = bL;
+	}
+	
+	// Check whether we have an character which does not fit in 16x16
+	for (std::vector<Glyph>::const_iterator i = glyphs.begin(); i != glyphs.end(); ++i) {
+		if (baseLine - i->yOffset < 0 || baseLine - i->yOffset + i->height > 16 ||
+			i->xOffset > 15 || i->xOffset + i->width > 16) {
+
+			for (std::vector<Glyph>::iterator j = glyphs.begin(); j != glyphs.end(); ++j)
+				delete[] i->plainData;
+
+			error("Could not fit glyph for %.2X %.2X top: %d bottom: %d, left: %d right: %d", i->fB, i->sB, 
+			      baseLine - i->yOffset, baseLine - i->yOffset + i->height, i->xOffset, i->xOffset + i->width);
+		}
+	}
+
+	const int sjisDataSize = chars * 32;
+	uint8 *sjisFontData = new uint8[sjisDataSize];
+
+	if (!sjisFontData) {
+		for (std::vector<Glyph>::iterator i = glyphs.begin(); i != glyphs.end(); ++i)
+			delete[] i->plainData;
+		error("Out of memory");
+	}
+
+	memset(sjisFontData, 0, sjisDataSize);
+
+	for (std::vector<Glyph>::const_iterator i = glyphs.begin(); i != glyphs.end(); ++i) {
+		int chunk = mapSJIStoChunk(i->fB, i->sB);
+
+		if (chunk != -1) {
+			uint8 *dst = sjisFontData + chunk * 32;
+			const uint8 *src = i->plainData;
+
+			dst += (baseLine - i->yOffset) * 2;
+
+			for (int y = 0; y < i->height; ++y) {
+				uint16 mask = 1 << (15 - i->xOffset);
+
+				const uint8 *curSrc = src;
+
+				uint16 line = 0;
+				uint8 d = 0;
+				for (int x = 0; x < i->width; ++x) {
+					if (x == 0 || x == 8)
+						d = *curSrc++;
+
+					if (d & 0x80)
+						line |= mask;
+
+					d <<= 1;
+					mask >>= 1;
+				}
+
+				WRITE_BE_UINT16(dst, line); dst += 2;
+				src += i->pitch;
+			}
+		}
+	}
+
+	for (std::vector<Glyph>::iterator i = glyphs.begin(); i != glyphs.end(); ++i)
+		delete[] i->plainData;
+	glyphs.clear();
+
+	FILE *sjisFont = std::fopen(out, "wb");
+	if (sjisFont) {
+		// Write our magic bytes
+		writeUint32BE(sjisFont, MKID_BE('SCVM'));
+		writeUint32BE(sjisFont, MKID_BE('SJIS'));
+
+		// Write version
+		writeUint32BE(sjisFont, 0x00000001);
+
+		// Write character count
+		writeUint16BE(sjisFont, chars);
+
+		std::fwrite(sjisFontData, 1, sjisDataSize, sjisFont);
+		std::fflush(sjisFont);
+
+		if (std::ferror(sjisFont)) {
+			delete[] sjisFontData;
+			std::fclose(sjisFont);
+			error("Error while writing to font file: '%s'", out);
+		}
+
+		std::fclose(sjisFont);
+	} else {
+		delete[] sjisFontData;
+		error("Could not open file '%s' for writing", out);
+	}
+
+	delete[] sjisFontData;
+	return 0;
+}
+
+namespace {
+
+int mapSJIStoChunk(uint8 fB, uint8 sB) {
+	// We only allow 2 byte SJIS characters.
+	if (fB <= 0x80 || fB >= 0xF0 || (fB >= 0xA0 && fB <= 0xDF) || sB == 0x7F)
+		return -1;
+
+	int base = fB;
+	base -= 0x81;
+	if (base >= 0x5F)
+		base -= 0x40;
+
+	int index = sB;
+	index -= 0x40;
+	if (index >= 0x3F)
+		--index;
+
+	return (base * 0xBC + index);
+}
+
+iconv_t confSetup = (iconv_t)-1;
+
+bool initSJIStoUTF32Conversion() {
+	// We initialize a SJIS to native endian UTF-32 conversion
+	// over here.
+	confSetup = iconv_open("UTF-32", "SJIS");
+	return (confSetup != (iconv_t)-1);
+}
+
+void deinitSJIStoUTF32Conversion() {
+	iconv_close(confSetup);
+}
+
+uint32 convertSJIStoUTF32(uint8 fB, uint8 sB) {
+	// For some reason iconv will refuse "0x81 0xAD" as valid
+	// SJIS sequence, even though it is "FULLWIDTH APOSTROPHE",
+	// thus we will short circuit iconv and convert it ourself
+	// here.
+	if (fB == 0x81 && sB == 0xAD)
+		return 0x0000FF07;
+
+	char inBuf[3];
+
+	inBuf[0] = fB;
+	inBuf[1] = sB;
+	inBuf[2] = 0;
+
+	char outBuf[3 * sizeof(uint32)];
+	memset(outBuf, 0, sizeof(outBuf));
+
+	size_t inBufSize = sizeof(inBuf);
+	size_t outBufSize = sizeof(outBuf);
+	char *inBufWrap = inBuf;
+	char *outBufWrap = outBuf;
+
+	if (iconv(confSetup, &inBufWrap, &inBufSize, &outBufWrap, &outBufSize) == (size_t)-1)
+		return (uint32)-1;
+
+	uint32 ret = *(uint32 *)outBuf;
+
+	// It might happen that iconv will add a "ZERO WIDTH NO-BREAK SPACE"
+	// before a character, we filter that out over here.
+	if (ret == 0x0000FEFF)
+		ret = *(uint32 *)(outBuf + 4);
+	
+	return ret;
+}
+
+FT_Library ft = NULL;
+FT_Face sjisFont = NULL;
+
+bool initFreeType(const char *font) {
+	FT_Error err = FT_Init_FreeType(&ft);
+	if (err) {
+		warning("Could not initialize FreeType2 library.");
+		return false;
+	}
+
+	err = FT_New_Face(ft, font, 0, &sjisFont);
+	if (err) {
+		warning("Could not load font '%s'", font);
+		return false;
+	}
+
+	err = FT_Set_Pixel_Sizes(sjisFont, 16, 16);
+	if (err) {
+		warning("Could not initialize font for 16x16 outout.");
+		return false;
+	}
+
+	err = FT_Select_Charmap(sjisFont, FT_ENCODING_UNICODE);
+	if (err) {
+		warning("Could not select unicode charmap.");
+		return false;
+	}
+
+	return true;
+}
+
+void deinitFreeType() {
+	FT_Done_Face(sjisFont);
+	FT_Done_FreeType(ft);
+}
+
+bool drawGlyph16x16(uint32 unicode, Glyph &glyph) {
+	uint32 index = FT_Get_Char_Index(sjisFont, unicode);
+	if (!index)
+		return false;
+
+	FT_Error err = FT_Load_Glyph(sjisFont, index, FT_LOAD_MONOCHROME);
+	if (err)
+		return false;
+
+	err = FT_Render_Glyph(sjisFont->glyph, FT_RENDER_MODE_MONO);
+	if (err)
+		return false;
+
+	const FT_Bitmap &bitmap = sjisFont->glyph->bitmap;
+
+	glyph.yOffset = sjisFont->glyph->bitmap_top;
+	glyph.xOffset = sjisFont->glyph->bitmap_left;
+	glyph.height = bitmap.rows;
+	glyph.width = bitmap.width;
+	glyph.pitch = bitmap.pitch;
+	glyph.plainData = 0;
+
+	if (glyph.height) {
+		glyph.plainData = new uint8[glyph.height * abs(glyph.pitch)];
+		if (!glyph.plainData)
+			return false;
+
+		const uint8 *src = bitmap.buffer;
+		uint8 *dst = glyph.plainData;
+
+		if (glyph.pitch < 0)
+			dst += (glyph.height - 1) * (-glyph.pitch);
+
+		for (int i = 0; i < bitmap.rows; ++i) {
+			memcpy(dst, src, glyph.pitch);
+			src += bitmap.pitch;
+			dst += glyph.pitch;
+		}
+	}
+
+	return true;
+}
+
+} // end of anonymous namespace
+

Modified: tools/branches/gsoc2009-gui/descumm6.cpp
===================================================================
--- tools/branches/gsoc2009-gui/descumm6.cpp	2009-08-08 20:00:28 UTC (rev 43136)
+++ tools/branches/gsoc2009-gui/descumm6.cpp	2009-08-08 20:03:05 UTC (rev 43137)
@@ -2495,9 +2495,9 @@
 		ext(output, "rx" "getObjectData\0"
 				"\x20|getWidth,"
 				"\x21|getHeight,"
-				"\x25|getImageCount,"
-				"\x27|getX,"
-				"\x28|getY,"
+				"\x24|getImageCount,"
+				"\x26|getX,"
+				"\x27|getY,"
 				"\x34|getState,"
 				"\x39p|setId,"
 				"\x8Bp|dummy");
@@ -3090,9 +3090,9 @@
 		ext(output, "rx" "getObjectData\0"
 				"\x20|getWidth,"
 				"\x21|getHeight,"
-				"\x25|getImageCount,"
-				"\x27|getX,"
-				"\x28|getY,"
+				"\x24|getImageCount,"
+				"\x26|getX,"
+				"\x27|getY,"
 				"\x34|getState,"
 				"\x39p|setId,"
 				"\x8Bp|dummy");
@@ -3498,6 +3498,7 @@
 				"\x61p|setAnimSpeed,"
 				"\x62p|setShadowMode,"
 				"\x63pp|setTalkPos,"
+				"\x8Bpp|case139,"
 				"\x9Cp|charset,"
 				"\xAFp|setPaletteNum,"
 				"\xC6pp|setAnimVar,"

Modified: tools/branches/gsoc2009-gui/dist/msvc8/tools.sln
===================================================================
--- tools/branches/gsoc2009-gui/dist/msvc8/tools.sln	2009-08-08 20:00:28 UTC (rev 43136)
+++ tools/branches/gsoc2009-gui/dist/msvc8/tools.sln	2009-08-08 20:03:05 UTC (rev 43137)
@@ -1,26 +1,6 @@
 
 Microsoft Visual Studio Solution File, Format Version 9.00
 # Visual C++ Express 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_scumm_san", "compress_scumm_san.vcproj", "{1712DDB9-8BB1-4108-9A06-F86F28409B20}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_scumm_bun", "compress_scumm_bun.vcproj", "{C423ACAC-C398-4419-BA32-B77F6A8AC1F9}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_kyra", "compress_kyra.vcproj", "{B4D19F72-1F7B-48B2-8067-C6395B94DF05}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_saga", "compress_saga.vcproj", "{457CC8A6-E7AA-4C96-A7F8-F1D121762160}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_agos", "compress_agos.vcproj", "{4E9E6AA8-0A17-4DF3-992D-265EC9035AD8}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_queen", "compress_queen.vcproj", "{9E1854BD-1272-417D-88EB-34D7FD884C8C}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_scumm_sou", "compress_scumm_sou.vcproj", "{31465450-F58F-4237-9FF5-50874209B700}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_sword1", "compress_sword1.vcproj", "{9F35213C-290F-4656-81D5-263D2E2C1059}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_sword2", "compress_sword2.vcproj", "{ADE72D13-51EB-4B77-82F5-9DF3ED0480BF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_touche", "compress_touche.vcproj", "{FF790984-B460-4B34-8471-26E66B8ECD4C}"
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "degob", "degob.vcproj", "{C151022B-EAC8-4680-9018-C0A897F7F9C6}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dekyra", "dekyra.vcproj", "{0B9A669F-83C2-4AE4-841F-3B015713605C}"
@@ -29,30 +9,6 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "desword2", "desword2.vcproj", "{455E0465-9E4D-449F-A2C7-77506EF6912D}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "encode_dxa", "encode_dxa.vcproj", "{D39F34DF-2FA5-4857-A9C3-1F9EC8C8468F}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract_agos", "extract_agos.vcproj", "{A59D7F94-4875-4337-8246-A28F21A1DF78}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract_gob_stk", "extract_gob_stk.vcproj", "{7F599814-F7B1-4C4C-931C-04C05B0CA670}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract_kyra", "extract_kyra.vcproj", "{5BCEC6FE-1EDD-464F-B09A-660C9B706AFD}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract_loom_tg16", "extract_loom_tg16.vcproj", "{C3696126-6FDE-48E7-85EB-729CA0A65B3B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract_mm_apple", "extract_mm_apple.vcproj", "{E72A394B-F909-41F8-BC6A-AB1A7D43F068}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract_mm_c64", "extract_mm_c64.vcproj", "{A511F49C-7CD7-425B-8EFE-759473873180}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract_mm_nes", "extract_mm_nes.vcproj", "{FCB14856-1F26-4426-AAA0-1308441B3E2B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract_scumm_mac", "extract_scumm_mac.vcproj", "{D915987F-39E4-423A-857B-E9DBA8790619}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract_zak_c64", "extract_zak_c64.vcproj", "{E79A9C02-416F-4165-AE11-E9C5205FBD29}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract_parallaction", "extract_parallaction.vcproj", "{F4B04E6F-5916-44DA-A957-E8FA789D2CBC}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "compress_gob", "compress_gob.vcproj", "{8C4BC409-2EEC-41F5-A017-972F38414289}"
-EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32


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