[Scummvm-cvs-logs] scummvm master -> 2ebacc64be623cf4c4e8bff9df9c363523660939

dreammaster dreammaster at scummvm.org
Mon May 23 10:44:13 CEST 2011


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
3556875c49 SWORD25: Created proxy class that presents ScumMVM settings as a valid config.lua file
b5609eb4a1 SWORD25: Added proxy code for converting writing config.lua to update the ScummVM game settings
27a6d9b910 SWORD25: Added detection entries for other languages
2ebacc64be SWORD25: Moved detection entries into detection_tables.h


Commit: 3556875c4922e9172c1eff6c4d929f1f80aa1254
    https://github.com/scummvm/scummvm/commit/3556875c4922e9172c1eff6c4d929f1f80aa1254
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-05-23T01:41:16-07:00

Commit Message:
SWORD25: Created proxy class that presents ScumMVM settings as a valid config.lua file

Changed paths:
  A engines/sword25/util/lua/scummvm_file.cpp
  A engines/sword25/util/lua/scummvm_file.h
    engines/sword25/util/lua/lauxlib.cpp



diff --git a/engines/sword25/util/lua/lauxlib.cpp b/engines/sword25/util/lua/lauxlib.cpp
index ce61827..3b54cf9 100644
--- a/engines/sword25/util/lua/lauxlib.cpp
+++ b/engines/sword25/util/lua/lauxlib.cpp
@@ -22,7 +22,8 @@
 #include "lua.h"
 
 #include "lauxlib.h"
-
+#include "scummvm_file.h"
+#include "common\textconsole.h"
 
 #define FREELIST_REF	0	/* free list of references */
 
@@ -520,7 +521,7 @@ LUALIB_API void luaL_unref (lua_State *L, int t, int ref) {
 
 typedef struct LoadF {
   int extraline;
-  FILE *f;
+  Sword25::Sword25FileProxy *f;
   char buff[LUAL_BUFFERSIZE];
 } LoadF;
 
@@ -533,8 +534,8 @@ static const char *getF (lua_State *L, void *ud, size_t *size) {
     *size = 1;
     return "\n";
   }
-  if (feof(lf->f)) return NULL;
-  *size = fread(lf->buff, 1, sizeof(lf->buff), lf->f);
+  if (lf->f->eof()) return NULL;
+  *size = lf->f->read(lf->buff, 1, sizeof(lf->buff));
   return (*size > 0) ? lf->buff : NULL;
 }
 
@@ -551,9 +552,13 @@ static int errfile (lua_State *L, const char *what, int fnameindex) {
 LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) {
   LoadF lf;
   int status, readstatus;
-  int c;
+//  int c;
   int fnameindex = lua_gettop(L) + 1;  /* index of filename on the stack */
   lf.extraline = 0;
+
+  lua_pushfstring(L, "@%s", filename);
+  lf.f = new Sword25::Sword25FileProxy(filename, "r");
+/*
   if (filename == NULL) {
     lua_pushliteral(L, "=stdin");
     lf.f = stdin;
@@ -563,23 +568,25 @@ LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) {
     lf.f = fopen(filename, "r");
     if (lf.f == NULL) return errfile(L, "open", fnameindex);
   }
-  c = getc(lf.f);
-  if (c == '#') {  /* Unix exec. file? */
+
+  c = lf.f->getc();
+  if (c == '#') {  // Unix exec. file? 
     lf.extraline = 1;
-    while ((c = getc(lf.f)) != EOF && c != '\n') ;  /* skip first line */
-    if (c == '\n') c = getc(lf.f);
+    while ((c = lf.f->getc()) != EOF && c != '\n') ;  // skip first line 
+    if (c == '\n') c = lf.f->getc();
   }
-  if (c == LUA_SIGNATURE[0] && filename) {  /* binary file? */
-    lf.f = freopen(filename, "rb", lf.f);  /* reopen in binary mode */
+  if (c == LUA_SIGNATURE[0] && filename) {  // binary file? 
+    lf.f = freopen(filename, "rb", lf.f);  // reopen in binary mode 
     if (lf.f == NULL) return errfile(L, "reopen", fnameindex);
-    /* skip eventual `#!...' */
-   while ((c = getc(lf.f)) != EOF && c != LUA_SIGNATURE[0]) ;
+    // skip eventual `#!...'
+   while ((c = lf.f->getc()) != EOF && c != LUA_SIGNATURE[0]) ;
     lf.extraline = 0;
   }
   ungetc(c, lf.f);
+*/
   status = lua_load(L, getF, &lf, lua_tostring(L, -1));
-  readstatus = ferror(lf.f);
-  if (filename) fclose(lf.f);  /* close file (even in case of errors) */
+  readstatus = 0; //ferror(lf.f);
+  if (filename) delete lf.f;  // close file (even in case of errors)
   if (readstatus) {
     lua_settop(L, fnameindex);  /* ignore results from `lua_load' */
     return errfile(L, "read", fnameindex);
@@ -637,7 +644,7 @@ static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
 
 static int panic (lua_State *L) {
   (void)L;  /* to avoid warnings */
-  fprintf(stderr, "PANIC: unprotected error in call to Lua API (%s)\n",
+  warning("PANIC: unprotected error in call to Lua API (%s)\n",
                    lua_tostring(L, -1));
   return 0;
 }
diff --git a/engines/sword25/util/lua/scummvm_file.cpp b/engines/sword25/util/lua/scummvm_file.cpp
new file mode 100644
index 0000000..bb0da64
--- /dev/null
+++ b/engines/sword25/util/lua/scummvm_file.cpp
@@ -0,0 +1,93 @@
+/* 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.
+ *
+ */
+
+#include "sword25/util/lua/scummvm_file.h"
+#include "common/config-manager.h"
+#include "common/util.h"
+
+namespace Sword25 {
+
+Sword25FileProxy::Sword25FileProxy(const Common::String &filename, const Common::String &mode) {
+	assert(filename.contains("config.lua"));
+	if (mode == "r")
+		setupConfigFile();
+}
+
+void Sword25FileProxy::setupConfigFile() {
+	float sfxVolume = ConfMan.hasKey("sfx_volume") ? 1.0 : 1.0 * ConfMan.getInt("sfx_volume") / 255.0;
+	float musicVolume = ConfMan.hasKey("music_volume") ? 0.5 : 1.0 * ConfMan.getInt("music_volume") / 255.0;
+	float speechVolume = ConfMan.hasKey("speech_volume") ? 1.0 : 1.0 * ConfMan.getInt("speech_volume") / 255.0;
+	bool subtitles = ConfMan.hasKey("subtitles") ? true : ConfMan.getBool("subtitles");
+
+	_readData = Common::String::format(
+"GAME_LANGUAGE = \"%s\"\r\n\
+GAME_SUBTITLES = %s\r\n\
+MAX_MEMORY_USAGE = 256000000\r\n\
+GFX_VSYNC_ACTIVE = true\r\n\
+SFX_SAMPLING_RATE = 44100\r\n\
+SFX_CHANNEL_COUNT = 32\r\n\
+SFX_SOUND_VOLUME = %f\r\n\
+SFX_MUSIC_VOLUME = %f\r\n\
+SFX_SPEECH_VOLUME = %f\r\n",
+		getLanguage().c_str(), subtitles ? "true" : "false", sfxVolume, musicVolume, speechVolume);
+
+	_readPos = 0;
+}
+
+/**
+ * Get the language code used by the game for each language it supports
+ */
+Common::String Sword25FileProxy::getLanguage() {
+	Common::Language lang = Common::parseLanguage(ConfMan.get("language"));
+	switch (lang) {
+	case Common::EN_ANY:
+		return "en";
+	case Common::DE_DEU:
+		return "de";
+	case Common::ES_ESP:
+		return "es";
+	case Common::FR_FRA:
+		return "fr";
+	case Common::HU_HUN:
+		return "hr";
+	case Common::IT_ITA:
+		return "it";
+	case Common::PL_POL:
+		return "pl";
+	case Common::PT_BRA:
+		return "pt";
+	case Common::RU_RUS:
+		return "ru";
+	default:
+		error("Unknown language '%s' encountered", ConfMan.get("language"));
+		break;
+	}
+}
+
+size_t Sword25FileProxy::read(void *ptr, size_t size, size_t count) {
+	size_t bytesRead = MIN(_readData.size() - _readPos, size * count);
+	memmove(ptr, &_readData.c_str()[_readPos], bytesRead);
+	_readPos += bytesRead;
+	return bytesRead / size;
+}
+
+} // End of namespace Sword25
diff --git a/engines/sword25/util/lua/scummvm_file.h b/engines/sword25/util/lua/scummvm_file.h
new file mode 100644
index 0000000..8ecfd34
--- /dev/null
+++ b/engines/sword25/util/lua/scummvm_file.h
@@ -0,0 +1,49 @@
+/* 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.
+ *
+ */
+
+#ifndef SWORD25_SCUMMVM_FILE_H
+#define SWORD25_SCUMMVM_FILE_H
+
+#include "common/str.h"
+
+namespace Sword25 {
+
+/**
+ * The following class acts as a proxy interface to the I/O code, pretending that the ScummVM
+ * settings are a properly formatted 'config.lua' file
+ */
+class Sword25FileProxy {
+private:
+	Common::String _readData;
+	uint _readPos;
+
+	void setupConfigFile();
+	Common::String getLanguage();
+public:
+	Sword25FileProxy(const Common::String &filename, const Common::String &mode);
+	bool eof() const { return _readPos >= _readData.size(); }
+	size_t read(void *ptr, size_t size, size_t count);
+};
+
+} // End of namespace Sword25
+
+#endif


Commit: b5609eb4a162264c7b3bc02ff31ca2f7dcbdecc8
    https://github.com/scummvm/scummvm/commit/b5609eb4a162264c7b3bc02ff31ca2f7dcbdecc8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-05-23T01:41:17-07:00

Commit Message:
SWORD25: Added proxy code for converting writing config.lua to update the ScummVM game settings

Changed paths:
    engines/sword25/module.mk
    engines/sword25/util/lua/liolib.cpp
    engines/sword25/util/lua/scummvm_file.cpp
    engines/sword25/util/lua/scummvm_file.h



diff --git a/engines/sword25/module.mk b/engines/sword25/module.mk
index da91c84..968f21c 100644
--- a/engines/sword25/module.mk
+++ b/engines/sword25/module.mk
@@ -83,6 +83,7 @@ MODULE_OBJS := \
 	util/lua/lvm.o \
 	util/lua/lzio.o \
 	util/lua/print.o \
+	util/lua/scummvm_file.o \
 	util/pluto/pdep.o \
 	util/pluto/pluto.o \
 	util/pluto/plzio.o
diff --git a/engines/sword25/util/lua/liolib.cpp b/engines/sword25/util/lua/liolib.cpp
index aea6c32..b505d1e 100644
--- a/engines/sword25/util/lua/liolib.cpp
+++ b/engines/sword25/util/lua/liolib.cpp
@@ -16,7 +16,8 @@
 
 #include "lauxlib.h"
 #include "lualib.h"
-
+#include "common/textconsole.h"
+#include "scummvm_file.h"
 
 
 #define IO_INPUT	1
@@ -43,47 +44,48 @@ static int pushresult (lua_State *L, int i, const char *filename) {
   }
 }
 
-
+/*
 static void fileerror (lua_State *L, int arg, const char *filename) {
   lua_pushfstring(L, "%s: %s", filename, "LUA I/O error descriptions have been removed in ScummVM");
   luaL_argerror(L, arg, lua_tostring(L, -1));
 }
-
+*/
 
 #define tofilep(L)	((FILE **)luaL_checkudata(L, 1, LUA_FILEHANDLE))
-
+#define tofileProxy(L)	((Sword25::Sword25FileProxy **)luaL_checkudata(L, 1, LUA_FILEHANDLE))
 
 static int io_type (lua_State *L) {
+	return luaL_error(L, "%s", "LUA I/O has been removed in ScummVM");
+/*
   void *ud;
   luaL_checkany(L, 1);
   ud = lua_touserdata(L, 1);
   lua_getfield(L, LUA_REGISTRYINDEX, LUA_FILEHANDLE);
   if (ud == NULL || !lua_getmetatable(L, 1) || !lua_rawequal(L, -2, -1))
-    lua_pushnil(L);  /* not a file */
+    lua_pushnil(L);  // not a file
   else if (*((FILE **)ud) == NULL)
     lua_pushliteral(L, "closed file");
   else
     lua_pushliteral(L, "file");
   return 1;
+*/
 }
 
-
-static FILE *tofile (lua_State *L) {
-  FILE **f = tofilep(L);
+static Sword25::Sword25FileProxy *tofile (lua_State *L) {
+  Sword25::Sword25FileProxy **f = tofileProxy(L);
   if (*f == NULL)
     luaL_error(L, "attempt to use a closed file");
   return *f;
 }
 
 
-
 /*
 ** When creating file handles, always creates a `closed' file handle
 ** before opening the actual file; so, if there is a memory error, the
 ** file is not left opened.
 */
-static FILE **newfile (lua_State *L) {
-  FILE **pf = (FILE **)lua_newuserdata(L, sizeof(FILE *));
+static Sword25::Sword25FileProxy **newfile (lua_State *L) {
+	Sword25::Sword25FileProxy **pf = (Sword25::Sword25FileProxy **)lua_newuserdata(L, sizeof(Sword25::Sword25FileProxy *));
   *pf = NULL;  /* file handle is currently `closed' */
   luaL_getmetatable(L, LUA_FILEHANDLE);
   lua_setmetatable(L, -2);
@@ -105,10 +107,13 @@ static int io_noclose (lua_State *L) {
 ** function to close 'popen' files
 */
 static int io_pclose (lua_State *L) {
+	error("LUA I/O has been removed in ScummVM");
+/*
   FILE **p = tofilep(L);
   int ok = lua_pclose(L, *p);
   *p = NULL;
   return pushresult(L, ok, NULL);
+  */
 }
 
 
@@ -116,52 +121,63 @@ static int io_pclose (lua_State *L) {
 ** function to close regular files
 */
 static int io_fclose (lua_State *L) {
+	error("LUA I/O has been removed in ScummVM");
+	/*
   FILE **p = tofilep(L);
   int ok = (fclose(*p) == 0);
   *p = NULL;
   return pushresult(L, ok, NULL);
+  */
 }
 
-
+/*
 static int aux_close (lua_State *L) {
   lua_getfenv(L, 1);
   lua_getfield(L, -1, "__close");
   return (lua_tocfunction(L, -1))(L);
 }
-
+*/
 
 static int io_close (lua_State *L) {
   if (lua_isnone(L, 1))
     lua_rawgeti(L, LUA_ENVIRONINDEX, IO_OUTPUT);
-  tofile(L);  /* make sure argument is a file */
-  return aux_close(L);
+
+  Sword25::Sword25FileProxy **f = tofileProxy(L);
+  delete *f;
+  *f = NULL;
+
+  return 0;
 }
 
 
 static int io_gc (lua_State *L) {
-  FILE *f = *tofilep(L);
-  /* ignore closed files */
-  if (f != NULL)
-    aux_close(L);
+  Sword25::Sword25FileProxy **f = tofileProxy(L);
+  // ignore closed files
+  if (*f != NULL)
+    delete *f;
+
   return 0;
 }
 
 
 static int io_tostring (lua_State *L) {
+  error("LUA I/O has been removed in ScummVM");
+  /*
   FILE *f = *tofilep(L);
   if (f == NULL)
     lua_pushliteral(L, "file (closed)");
   else
     lua_pushfstring(L, "file (%p)", f);
   return 1;
+  */
 }
 
 
 static int io_open (lua_State *L) {
   const char *filename = luaL_checkstring(L, 1);
   const char *mode = luaL_optstring(L, 2, "r");
-  FILE **pf = newfile(L);
-  *pf = fopen(filename, mode);
+  Sword25::Sword25FileProxy **pf = newfile(L);
+  *pf = new Sword25::Sword25FileProxy(filename, mode);
   return (*pf == NULL) ? pushresult(L, 0, filename) : 1;
 }
 
@@ -171,21 +187,22 @@ static int io_open (lua_State *L) {
 ** correct __close for 'popen' files
 */
 static int io_popen (lua_State *L) {
+  error("LUA I/O has been removed in ScummVM");
+/*
   const char *filename = luaL_checkstring(L, 1);
   const char *mode = luaL_optstring(L, 2, "r");
   FILE **pf = newfile(L);
   *pf = lua_popen(L, filename, mode);
   return (*pf == NULL) ? pushresult(L, 0, filename) : 1;
+  */
 }
 
 
 static int io_tmpfile (lua_State *L) {
-  FILE **pf = newfile(L);
-  *pf = tmpfile();
-  return (*pf == NULL) ? pushresult(L, 0, NULL) : 1;
+  return luaL_error(L, "%s", "LUA I/O error descriptions have been removed in ScummVM");
 }
 
-
+/*
 static FILE *getiofile (lua_State *L, int findex) {
   FILE *f;
   lua_rawgeti(L, LUA_ENVIRONINDEX, findex);
@@ -194,8 +211,8 @@ static FILE *getiofile (lua_State *L, int findex) {
     luaL_error(L, "standard %s file is closed", fnames[findex - 1]);
   return f;
 }
-
-
+*/
+/*
 static int g_iofile (lua_State *L, int f, const char *mode) {
   if (!lua_isnoneornil(L, 1)) {
     const char *filename = lua_tostring(L, 1);
@@ -206,24 +223,26 @@ static int g_iofile (lua_State *L, int f, const char *mode) {
         fileerror(L, 1, filename);
     }
     else {
-      tofile(L);  /* check that it's a valid file handle */
+      tofile(L);  // check that it's a valid file handle
       lua_pushvalue(L, 1);
     }
     lua_rawseti(L, LUA_ENVIRONINDEX, f);
   }
-  /* return current value */
+  // return current value 
   lua_rawgeti(L, LUA_ENVIRONINDEX, f);
   return 1;
 }
-
+*/
 
 static int io_input (lua_State *L) {
-  return g_iofile(L, IO_INPUT, "r");
+  error("LUA I/O has been removed in ScummVM");
+//  return g_iofile(L, IO_INPUT, "r");
 }
 
 
 static int io_output (lua_State *L) {
-  return g_iofile(L, IO_OUTPUT, "w");
+  error("LUA I/O has been removed in ScummVM");
+//  return g_iofile(L, IO_OUTPUT, "w");
 }
 
 
@@ -245,8 +264,10 @@ static int f_lines (lua_State *L) {
 
 
 static int io_lines (lua_State *L) {
-  if (lua_isnoneornil(L, 1)) {  /* no arguments? */
-    /* will iterate over default input */
+  error("LUA I/O has been removed in ScummVM");
+/*
+  if (lua_isnoneornil(L, 1)) {  // no arguments?
+    // will iterate over default input
     lua_rawgeti(L, LUA_ENVIRONINDEX, IO_INPUT);
     return f_lines(L);
   }
@@ -259,6 +280,7 @@ static int io_lines (lua_State *L) {
     aux_lines(L, lua_gettop(L), 1);
     return 1;
   }
+  */
 }
 
 
@@ -268,18 +290,18 @@ static int io_lines (lua_State *L) {
 ** =======================================================
 */
 
-
-static int read_number (lua_State *L, FILE *f) {
+/*
+static int read_number (lua_State *L, Sword25::Sword25FileProxy *f) {
   lua_Number d;
   if (fscanf(f, LUA_NUMBER_SCAN, &d) == 1) {
     lua_pushnumber(L, d);
     return 1;
   }
-  else return 0;  /* read fails */
+  else return 0;  // read fails
 }
 
 
-static int test_eof (lua_State *L, FILE *f) {
+static int test_eof (lua_State *L, Sword25::Sword25FileProxy *f) {
   int c = getc(f);
   ungetc(c, f);
   lua_pushlstring(L, NULL, 0);
@@ -287,56 +309,56 @@ static int test_eof (lua_State *L, FILE *f) {
 }
 
 
-static int read_line (lua_State *L, FILE *f) {
+static int read_line (lua_State *L, Sword25::Sword25FileProxy *f) {
   luaL_Buffer b;
   luaL_buffinit(L, &b);
   for (;;) {
     size_t l;
     char *p = luaL_prepbuffer(&b);
-    if (fgets(p, LUAL_BUFFERSIZE, f) == NULL) {  /* eof? */
-      luaL_pushresult(&b);  /* close buffer */
-      return (lua_objlen(L, -1) > 0);  /* check whether read something */
+    if (fgets(p, LUAL_BUFFERSIZE, f) == NULL) {  // eof? 
+      luaL_pushresult(&b);  // close buffer
+      return (lua_objlen(L, -1) > 0);  // check whether read something
     }
     l = strlen(p);
     if (l == 0 || p[l-1] != '\n')
       luaL_addsize(&b, l);
     else {
-      luaL_addsize(&b, l - 1);  /* do not include `eol' */
-      luaL_pushresult(&b);  /* close buffer */
-      return 1;  /* read at least an `eol' */
+      luaL_addsize(&b, l - 1);  // do not include `eol'
+      luaL_pushresult(&b);  // close buffer
+      return 1;  // read at least an `eol'
     }
   }
 }
 
 
-static int read_chars (lua_State *L, FILE *f, size_t n) {
-  size_t rlen;  /* how much to read */
-  size_t nr;  /* number of chars actually read */
+static int read_chars (lua_State *L, Sword25::Sword25FileProxy *f, size_t n) {
+  size_t rlen;  // how much to read 
+  size_t nr;  // number of chars actually read 
   luaL_Buffer b;
   luaL_buffinit(L, &b);
-  rlen = LUAL_BUFFERSIZE;  /* try to read that much each time */
+  rlen = LUAL_BUFFERSIZE;  // try to read that much each time 
   do {
     char *p = luaL_prepbuffer(&b);
-    if (rlen > n) rlen = n;  /* cannot read more than asked */
+    if (rlen > n) rlen = n;  // cannot read more than asked 
     nr = fread(p, sizeof(char), rlen, f);
     luaL_addsize(&b, nr);
-    n -= nr;  /* still have to read `n' chars */
-  } while (n > 0 && nr == rlen);  /* until end of count or eof */
-  luaL_pushresult(&b);  /* close buffer */
+    n -= nr;  // still have to read `n' chars 
+  } while (n > 0 && nr == rlen);  // until end of count or eof 
+  luaL_pushresult(&b);  // close buffer 
   return (n == 0 || lua_objlen(L, -1) > 0);
 }
 
 
-static int g_read (lua_State *L, FILE *f, int first) {
+static int g_read (lua_State *L, Sword25::Sword25FileProxy *f, int first) {
   int nargs = lua_gettop(L) - 1;
   int success;
   int n;
   clearerr(f);
-  if (nargs == 0) {  /* no arguments? */
+  if (nargs == 0) {  // no arguments? 
     success = read_line(L, f);
-    n = first+1;  /* to return 1 result */
+    n = first+1;  // to return 1 result 
   }
-  else {  /* ensure stack space for all results and for auxlib's buffer */
+  else {  // ensure stack space for all results and for auxlib's buffer 
     luaL_checkstack(L, nargs+LUA_MINSTACK, "too many arguments");
     success = 1;
     for (n = first; nargs-- && success; n++) {
@@ -348,15 +370,15 @@ static int g_read (lua_State *L, FILE *f, int first) {
         const char *p = lua_tostring(L, n);
         luaL_argcheck(L, p && p[0] == '*', n, "invalid option");
         switch (p[1]) {
-          case 'n':  /* number */
+          case 'n':  // number 
             success = read_number(L, f);
             break;
-          case 'l':  /* line */
+          case 'l':  // line 
             success = read_line(L, f);
             break;
-          case 'a':  /* file */
-            read_chars(L, f, ~((size_t)0));  /* read MAX_SIZE_T chars */
-            success = 1; /* always success */
+          case 'a':  // file 
+            read_chars(L, f, ~((size_t)0));  // read MAX_SIZE_T chars 
+            success = 1; // always success 
             break;
           default:
             return luaL_argerror(L, n, "invalid format");
@@ -367,58 +389,66 @@ static int g_read (lua_State *L, FILE *f, int first) {
   if (ferror(f))
     return pushresult(L, 0, NULL);
   if (!success) {
-    lua_pop(L, 1);  /* remove last result */
-    lua_pushnil(L);  /* push nil instead */
+    lua_pop(L, 1);  // remove last result 
+    lua_pushnil(L);  // push nil instead 
   }
   return n - first;
 }
-
+*/
 
 static int io_read (lua_State *L) {
-  return g_read(L, getiofile(L, IO_INPUT), 1);
+  error("LUA I/O has been removed in ScummVM");
+//  return g_read(L, getiofile(L, IO_INPUT), 1);
 }
 
 
 static int f_read (lua_State *L) {
-  return g_read(L, tofile(L), 2);
+  error("LUA I/O has been removed in ScummVM");
+//  return g_read(L, tofile(L), 2);
 }
 
 
 static int io_readline (lua_State *L) {
+  error("LUA I/O has been removed in ScummVM");
+/*
   FILE *f = *(FILE **)lua_touserdata(L, lua_upvalueindex(1));
   int sucess;
-  if (f == NULL)  /* file is already closed? */
+  if (f == NULL)  // file is already closed?
     luaL_error(L, "file is already closed");
   sucess = read_line(L, f);
   if (ferror(f))
     return luaL_error(L, "%s", "LUA I/O error descriptions have been removed in ScummVM");
   if (sucess) return 1;
-  else {  /* EOF */
-    if (lua_toboolean(L, lua_upvalueindex(2))) {  /* generator created file? */
+  else {  // EOF 
+    if (lua_toboolean(L, lua_upvalueindex(2))) {  // generator created file? 
       lua_settop(L, 0);
       lua_pushvalue(L, lua_upvalueindex(1));
-      aux_close(L);  /* close it */
+      aux_close(L);  // close it
     }
     return 0;
   }
+*/
 }
 
 /* }====================================================== */
 
 
-static int g_write (lua_State *L, FILE *f, int arg) {
+static int g_write (lua_State *L, Sword25::Sword25FileProxy *f, int arg) {
   int nargs = lua_gettop(L) - 1;
   int status = 1;
   for (; nargs--; arg++) {
     if (lua_type(L, arg) == LUA_TNUMBER) {
-      /* optimization: could be done exactly as for strings */
-      status = status &&
-          fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0;
-    }
+      // optimization: could be done exactly as for strings
+	  if (status) {
+        char buffer[20];
+		sprintf(buffer, LUA_NUMBER_FMT, lua_tonumber(L, arg));
+		status = f->write(buffer, strlen(buffer)) == strlen(buffer);
+	  }
+	}
     else {
       size_t l;
       const char *s = luaL_checklstring(L, arg, &l);
-      status = status && (fwrite(s, sizeof(char), l, f) == l);
+      status = status && (f->write(s, l) == l);
     }
   }
   return pushresult(L, status, NULL);
@@ -426,7 +456,8 @@ static int g_write (lua_State *L, FILE *f, int arg) {
 
 
 static int io_write (lua_State *L) {
-  return g_write(L, getiofile(L, IO_OUTPUT), 1);
+  error("LUA I/O has been removed in ScummVM");
+//  return g_write(L, getiofile(L, IO_OUTPUT), 1);
 }
 
 
@@ -436,6 +467,8 @@ static int f_write (lua_State *L) {
 
 
 static int f_seek (lua_State *L) {
+  error("LUA I/O has been removed in ScummVM");
+  /*
   static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END};
   static const char *const modenames[] = {"set", "cur", "end", NULL};
   FILE *f = tofile(L);
@@ -443,15 +476,18 @@ static int f_seek (lua_State *L) {
   long offset = luaL_optlong(L, 3, 0);
   op = fseek(f, offset, mode[op]);
   if (op)
-    return pushresult(L, 0, NULL);  /* error */
+    return pushresult(L, 0, NULL);  // error
   else {
     lua_pushinteger(L, ftell(f));
     return 1;
   }
+*/
 }
 
 
 static int f_setvbuf (lua_State *L) {
+  error("LUA I/O has been removed in ScummVM");
+  /*
   static const int mode[] = {_IONBF, _IOFBF, _IOLBF};
   static const char *const modenames[] = {"no", "full", "line", NULL};
   FILE *f = tofile(L);
@@ -459,17 +495,20 @@ static int f_setvbuf (lua_State *L) {
   lua_Integer sz = luaL_optinteger(L, 3, LUAL_BUFFERSIZE);
   int res = setvbuf(f, NULL, mode[op], sz);
   return pushresult(L, res == 0, NULL);
+  */
 }
 
 
 
 static int io_flush (lua_State *L) {
-  return pushresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL);
+  error("LUA I/O has been removed in ScummVM");
+//  return pushresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL);
 }
 
 
 static int f_flush (lua_State *L) {
-  return pushresult(L, fflush(tofile(L)) == 0, NULL);
+  error("LUA I/O has been removed in ScummVM");
+//  return pushresult(L, fflush(tofile(L)) == 0, NULL);
 }
 
 
@@ -510,18 +549,18 @@ static void createmeta (lua_State *L) {
   luaL_register(L, NULL, flib);  /* file methods */
 }
 
-
+/*
 static void createstdfile (lua_State *L, FILE *f, int k, const char *fname) {
   *newfile(L) = f;
   if (k > 0) {
     lua_pushvalue(L, -1);
     lua_rawseti(L, LUA_ENVIRONINDEX, k);
   }
-  lua_pushvalue(L, -2);  /* copy environment */
-  lua_setfenv(L, -2);  /* set it */
+  lua_pushvalue(L, -2);  // copy environment
+  lua_setfenv(L, -2);  // set it
   lua_setfield(L, -3, fname);
 }
-
+*/
 
 static void newfenv (lua_State *L, lua_CFunction cls) {
   lua_createtable(L, 0, 1);
@@ -539,9 +578,11 @@ LUALIB_API int luaopen_io (lua_State *L) {
   luaL_register(L, LUA_IOLIBNAME, iolib);
   /* create (and set) default files */
   newfenv(L, io_noclose);  /* close function for default files */
+/*
   createstdfile(L, stdin, IO_INPUT, "stdin");
   createstdfile(L, stdout, IO_OUTPUT, "stdout");
   createstdfile(L, stderr, 0, "stderr");
+*/
   lua_pop(L, 1);  /* pop environment for default files */
   lua_getfield(L, -1, "popen");
   newfenv(L, io_pclose);  /* create environment for 'popen' */
diff --git a/engines/sword25/util/lua/scummvm_file.cpp b/engines/sword25/util/lua/scummvm_file.cpp
index bb0da64..2b7ac6d 100644
--- a/engines/sword25/util/lua/scummvm_file.cpp
+++ b/engines/sword25/util/lua/scummvm_file.cpp
@@ -53,6 +53,99 @@ SFX_SPEECH_VOLUME = %f\r\n",
 	_readPos = 0;
 }
 
+Sword25FileProxy::~Sword25FileProxy() {
+	if (!_settings.empty())
+		writeSettings();
+}
+
+size_t Sword25FileProxy::read(void *ptr, size_t size, size_t count) {
+	size_t bytesRead = MIN(_readData.size() - _readPos, size * count);
+	memmove(ptr, &_readData.c_str()[_readPos], bytesRead);
+	_readPos += bytesRead;
+	return bytesRead / size;
+}
+
+size_t Sword25FileProxy::write(const char *ptr, size_t count) {
+	// Loop through the provided line(s)
+	while (*ptr) {
+		if ((*ptr == '-') && (*(ptr + 1) == '-')) {
+			// Comment line to skip over
+			while ((*ptr != '\r') && (*ptr != '\n'))
+				++ptr;
+		} else {
+			// Legitimate data
+			const char *p = strchr(ptr, '\n');
+			if (!p) p = ptr + strlen(ptr);
+			while ((*p == '\r') || (*p == '\n')) 
+				++p;
+
+			_settings += Common::String(ptr, p - ptr);
+			ptr = p;
+		}
+
+		while ((*ptr == '\r') || (*ptr == '\n')) 
+			++ptr;
+	}
+
+	return count;
+}
+
+void Sword25FileProxy::writeSettings() {
+	// Loop through the setting lines
+	const char *pSrc = _settings.c_str();
+	while (*pSrc) {
+		if ((*pSrc != '\r') && (*pSrc != '\n')) {
+			const char *p = strchr(pSrc, '=');
+			assert(p);
+			
+			// Get the setting name
+			const char *pEnd = p - 1;
+			while (*pEnd == ' ')
+				--pEnd;
+			Common::String settingName(pSrc, pEnd - pSrc + 1);
+
+			// Get the setting value
+			const char *pStart = p + 1;
+			while (*pStart == ' ')
+				++pStart;
+
+			pEnd = pStart + 1;
+			while ((*pEnd != '\r') && (*pEnd != '\n') && (*pEnd != '\0')) 
+				++pEnd;
+			Common::String value(pStart + (*pStart == '"' ? 1 : 0), pEnd - pStart - (*pStart == '"' ? 2 : 0));
+			
+			// Update the setting
+			updateSetting(settingName, value);
+			pSrc = pEnd;
+		}
+
+		// Move to next line
+		while ((*pSrc == '\r') || (*pSrc == '\n'))
+			++pSrc;
+	}
+
+	ConfMan.flushToDisk();
+}
+
+void Sword25FileProxy::updateSetting(const Common::String &setting, const Common::String &value) {
+	if (setting == "GAME_LANGUAGE")
+		setLanguage(value);
+	else if (setting == "GAME_SUBTITLES")
+		ConfMan.setBool("subtitles", value == "true");
+	else if (setting == "SFX_SOUND_VOLUME") {
+		double v = strtod(value.c_str(), NULL);
+		ConfMan.setInt("sfx_volume", (int)(v * 255));
+	} else if (setting == "SFX_MUSIC_VOLUME") {
+		double v = strtod(value.c_str(), NULL);
+		ConfMan.setInt("music_volume", (int)(v * 255));
+	} else if (setting == "SFX_SPEECH_VOLUME") {
+		double v = strtod(value.c_str(), NULL);
+		ConfMan.setInt("speech_volume", (int)(v * 255));
+	} else {
+		// All other settings are ignored
+	}
+}
+
 /**
  * Get the language code used by the game for each language it supports
  */
@@ -83,11 +176,30 @@ Common::String Sword25FileProxy::getLanguage() {
 	}
 }
 
-size_t Sword25FileProxy::read(void *ptr, size_t size, size_t count) {
-	size_t bytesRead = MIN(_readData.size() - _readPos, size * count);
-	memmove(ptr, &_readData.c_str()[_readPos], bytesRead);
-	_readPos += bytesRead;
-	return bytesRead / size;
+/**
+ * Set the language code fro the game
+ */
+void Sword25FileProxy::setLanguage(const Common::String &lang) {
+	if (lang == "en")
+		ConfMan.set("language", Common::getLanguageCode(Common::EN_ANY));
+	else if (lang == "de")
+		ConfMan.set("language", Common::getLanguageCode(Common::DE_DEU));
+	else if (lang == "es")
+		ConfMan.set("language", Common::getLanguageCode(Common::ES_ESP));
+	else if (lang == "fr")
+		ConfMan.set("language", Common::getLanguageCode(Common::FR_FRA));
+	else if (lang == "hr")
+		ConfMan.set("language", Common::getLanguageCode(Common::HU_HUN));
+	else if (lang == "it")
+		ConfMan.set("language", Common::getLanguageCode(Common::IT_ITA));
+	else if (lang == "pl")
+		ConfMan.set("language", Common::getLanguageCode(Common::PL_POL));
+	else if (lang == "pt")
+		ConfMan.set("language", Common::getLanguageCode(Common::PT_BRA));
+	else if (lang == "ru")
+		ConfMan.set("language", Common::getLanguageCode(Common::RU_RUS));
+	else
+		error("Unknown language encountered");
 }
 
 } // End of namespace Sword25
diff --git a/engines/sword25/util/lua/scummvm_file.h b/engines/sword25/util/lua/scummvm_file.h
index 8ecfd34..a4cbd2a 100644
--- a/engines/sword25/util/lua/scummvm_file.h
+++ b/engines/sword25/util/lua/scummvm_file.h
@@ -35,13 +35,20 @@ class Sword25FileProxy {
 private:
 	Common::String _readData;
 	uint _readPos;
+	Common::String _settings;
 
 	void setupConfigFile();
 	Common::String getLanguage();
+	void setLanguage(const Common::String &lang);
+	void writeSettings();
+	void updateSetting(const Common::String &setting, const Common::String &value);
 public:
 	Sword25FileProxy(const Common::String &filename, const Common::String &mode);
+	~Sword25FileProxy();
+
 	bool eof() const { return _readPos >= _readData.size(); }
 	size_t read(void *ptr, size_t size, size_t count);
+	size_t write(const char *ptr, size_t count);
 };
 
 } // End of namespace Sword25


Commit: 27a6d9b910d5f434f1b75c2c42bbd1675fa10e37
    https://github.com/scummvm/scummvm/commit/27a6d9b910d5f434f1b75c2c42bbd1675fa10e37
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-05-23T01:41:17-07:00

Commit Message:
SWORD25: Added detection entries for other languages

This is needed now, since changing the language in-game updates the ScummVM language setting, and there must be a matching detection entry for each language.

Changed paths:
    engines/sword25/detection.cpp



diff --git a/engines/sword25/detection.cpp b/engines/sword25/detection.cpp
index fd5820d..62c7f81 100644
--- a/engines/sword25/detection.cpp
+++ b/engines/sword25/detection.cpp
@@ -37,10 +37,8 @@ static const PlainGameDescriptor Sword25Game[] = {
 
 namespace Sword25 {
 
-// TODO: Need to decide whether we're going to implement code to detect all the various languages allowed,
-// both by the core data package, as well as the extra languages added by the patch file; also, I don't
-// think that all the languages supported by the game currently have constants in ScummVM
 static const ADGameDescription gameDescriptions[] = {
+	// These two versions represent the default languages available in the data file
 	{
 		"sword25",
 		"",
@@ -52,6 +50,80 @@ static const ADGameDescription gameDescriptions[] = {
 	},
 	{
 		"sword25",
+		"",
+		AD_ENTRY1s("lang_fr.b25c", "690caf157387e06d2c3d1ca53c43f428", 1006043),
+		Common::FR_FRA,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588),
+		Common::DE_DEU,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_hr.b25c", "e881054d1f8ec1e527422fc521c25405", 1273217),
+		Common::HU_HUN,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_it.b25c", "f3325666da0515cc2b42062e953c0889", 996197),
+		Common::IT_ITA,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_pl.b25c", "49dc1a20f95391a808e475c49be2bac0", 1281799),
+		Common::PL_POL,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_pt.b25c", "1df701432f9e13dcefe1adeb890b9c69", 993812),
+		Common::PT_BRA,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_ru.b25c", "deb33dd2f90a71ff60181918a8ce5063", 1235378),
+		Common::RU_RUS,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_es.b25c", "384c19072d83725f351bb9ecb4d3f02b", 987965),
+		Common::ES_ESP,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+
+	// Extracted version
+	{
+		"sword25",
 		"Extracted",
 		{{"_includes.lua", 0, 0, -1},
 		 {"boot.lua", 0, 0, -1},


Commit: 2ebacc64be623cf4c4e8bff9df9c363523660939
    https://github.com/scummvm/scummvm/commit/2ebacc64be623cf4c4e8bff9df9c363523660939
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-05-23T01:41:18-07:00

Commit Message:
SWORD25: Moved detection entries into detection_tables.h

Changed paths:
  A engines/sword25/detection_tables.h
    engines/sword25/detection.cpp



diff --git a/engines/sword25/detection.cpp b/engines/sword25/detection.cpp
index 62c7f81..edb8c30 100644
--- a/engines/sword25/detection.cpp
+++ b/engines/sword25/detection.cpp
@@ -24,6 +24,7 @@
 #include "engines/advancedDetector.h"
 
 #include "sword25/sword25.h"
+#include "sword25/detection_tables.h"
 #include "sword25/kernel/persistenceservice.h"
 
 namespace Sword25 {
@@ -35,110 +36,6 @@ static const PlainGameDescriptor Sword25Game[] = {
 	{0, 0}
 };
 
-namespace Sword25 {
-
-static const ADGameDescription gameDescriptions[] = {
-	// These two versions represent the default languages available in the data file
-	{
-		"sword25",
-		"",
-		AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588),
-		Common::EN_ANY,
-		Common::kPlatformUnknown,
-		ADGF_NO_FLAGS,
-		Common::GUIO_NONE
-	},
-	{
-		"sword25",
-		"",
-		AD_ENTRY1s("lang_fr.b25c", "690caf157387e06d2c3d1ca53c43f428", 1006043),
-		Common::FR_FRA,
-		Common::kPlatformUnknown,
-		ADGF_NO_FLAGS,
-		Common::GUIO_NONE
-	},
-	{
-		"sword25",
-		"",
-		AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588),
-		Common::DE_DEU,
-		Common::kPlatformUnknown,
-		ADGF_NO_FLAGS,
-		Common::GUIO_NONE
-	},
-	{
-		"sword25",
-		"",
-		AD_ENTRY1s("lang_hr.b25c", "e881054d1f8ec1e527422fc521c25405", 1273217),
-		Common::HU_HUN,
-		Common::kPlatformUnknown,
-		ADGF_NO_FLAGS,
-		Common::GUIO_NONE
-	},
-	{
-		"sword25",
-		"",
-		AD_ENTRY1s("lang_it.b25c", "f3325666da0515cc2b42062e953c0889", 996197),
-		Common::IT_ITA,
-		Common::kPlatformUnknown,
-		ADGF_NO_FLAGS,
-		Common::GUIO_NONE
-	},
-	{
-		"sword25",
-		"",
-		AD_ENTRY1s("lang_pl.b25c", "49dc1a20f95391a808e475c49be2bac0", 1281799),
-		Common::PL_POL,
-		Common::kPlatformUnknown,
-		ADGF_NO_FLAGS,
-		Common::GUIO_NONE
-	},
-	{
-		"sword25",
-		"",
-		AD_ENTRY1s("lang_pt.b25c", "1df701432f9e13dcefe1adeb890b9c69", 993812),
-		Common::PT_BRA,
-		Common::kPlatformUnknown,
-		ADGF_NO_FLAGS,
-		Common::GUIO_NONE
-	},
-	{
-		"sword25",
-		"",
-		AD_ENTRY1s("lang_ru.b25c", "deb33dd2f90a71ff60181918a8ce5063", 1235378),
-		Common::RU_RUS,
-		Common::kPlatformUnknown,
-		ADGF_NO_FLAGS,
-		Common::GUIO_NONE
-	},
-	{
-		"sword25",
-		"",
-		AD_ENTRY1s("lang_es.b25c", "384c19072d83725f351bb9ecb4d3f02b", 987965),
-		Common::ES_ESP,
-		Common::kPlatformUnknown,
-		ADGF_NO_FLAGS,
-		Common::GUIO_NONE
-	},
-
-	// Extracted version
-	{
-		"sword25",
-		"Extracted",
-		{{"_includes.lua", 0, 0, -1},
-		 {"boot.lua", 0, 0, -1},
-		 {"kernel.lua", 0, 0, -1},
-		 AD_LISTEND},
-		Common::EN_ANY,
-		Common::kPlatformUnknown,
-		GF_EXTRACTED,
-		Common::GUIO_NONE
-	},
-	AD_TABLE_END_MARKER
-};
-
-} // End of namespace Sword25
-
 static const char *directoryGlobs[] = {
 	"system", // Used by extracted dats
 	0
diff --git a/engines/sword25/detection_tables.h b/engines/sword25/detection_tables.h
new file mode 100644
index 0000000..ca586b4
--- /dev/null
+++ b/engines/sword25/detection_tables.h
@@ -0,0 +1,129 @@
+/* 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.
+ *
+ */
+
+namespace Sword25 {
+
+using Common::GUIO_NONE;
+using Common::GUIO_NOSPEECH;
+using Common::GUIO_NOSFX;
+using Common::GUIO_NOMUSIC;
+
+static const ADGameDescription gameDescriptions[] = {
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588),
+		Common::EN_ANY,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_fr.b25c", "690caf157387e06d2c3d1ca53c43f428", 1006043),
+		Common::FR_FRA,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588),
+		Common::DE_DEU,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_hr.b25c", "e881054d1f8ec1e527422fc521c25405", 1273217),
+		Common::HU_HUN,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_it.b25c", "f3325666da0515cc2b42062e953c0889", 996197),
+		Common::IT_ITA,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_pl.b25c", "49dc1a20f95391a808e475c49be2bac0", 1281799),
+		Common::PL_POL,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_pt.b25c", "1df701432f9e13dcefe1adeb890b9c69", 993812),
+		Common::PT_BRA,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_ru.b25c", "deb33dd2f90a71ff60181918a8ce5063", 1235378),
+		Common::RU_RUS,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+	{
+		"sword25",
+		"",
+		AD_ENTRY1s("lang_es.b25c", "384c19072d83725f351bb9ecb4d3f02b", 987965),
+		Common::ES_ESP,
+		Common::kPlatformUnknown,
+		ADGF_NO_FLAGS,
+		Common::GUIO_NONE
+	},
+
+	// Extracted version
+	{
+		"sword25",
+		"Extracted",
+		{{"_includes.lua", 0, 0, -1},
+		 {"boot.lua", 0, 0, -1},
+		 {"kernel.lua", 0, 0, -1},
+		 AD_LISTEND},
+		Common::EN_ANY,
+		Common::kPlatformUnknown,
+		GF_EXTRACTED,
+		Common::GUIO_NONE
+	},
+	AD_TABLE_END_MARKER
+};
+
+} // End of namespace Sword25






More information about the Scummvm-git-logs mailing list