aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sword25/kernel/debug/debugtools.cpp171
-rw-r--r--engines/sword25/kernel/debug/debugtools.h67
-rw-r--r--engines/sword25/kernel/kernel_script.cpp5
-rw-r--r--engines/sword25/kernel/md5.cpp400
-rw-r--r--engines/sword25/kernel/md5.h71
-rw-r--r--engines/sword25/kernel/persistenceservice.cpp5
-rw-r--r--engines/sword25/kernel/wincodegenerator.cpp87
-rw-r--r--engines/sword25/kernel/wincodegenerator.h58
-rw-r--r--engines/sword25/kernel/wincodegenerator_win32.cpp143
-rw-r--r--engines/sword25/module.mk4
10 files changed, 6 insertions, 1005 deletions
diff --git a/engines/sword25/kernel/debug/debugtools.cpp b/engines/sword25/kernel/debug/debugtools.cpp
deleted file mode 100644
index 3391ef1ed4..0000000000
--- a/engines/sword25/kernel/debug/debugtools.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/* 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$
- *
- */
-
-/*
- * This code is based on Broken Sword 2.5 engine
- *
- * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer
- *
- * Licensed under GNU GPL v2
- *
- */
-
-// -----------------------------------------------------------------------------
-// Includes
-// -----------------------------------------------------------------------------
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-#include <vector>
-#include <string>
-#include <sstream>
-#include <fstream>
-using namespace std;
-
-#include "sword25/kernel/md5.h"
-#include "sword25/kernel/filesystemutil.h"
-#include "sword25/kernel/debug/debugtools.h"
-
-// -----------------------------------------------------------------------------
-// Konstanten und Hilfsfunktionen
-// -----------------------------------------------------------------------------
-
-namespace
-{
- const char * VERSION_ID_ERROR = "???";
- const unsigned int READBUFFER_SIZE = 1024 * 100;
-
- const char * SUBVERSION_ENTRIES_FILENAME = ".svn\\entries";
-
- // -------------------------------------------------------------------------
-
- unsigned int ParseUnsignedInt(const string & Str, bool & Success)
- {
- istringstream iss(Str);
-
- unsigned int Result = 0;
- iss >> Result;
-
- Success = !iss.fail();
-
- return Result;
- }
-}
-
-// -----------------------------------------------------------------------------
-
-const char * BS_Debugtools::GetVersionID()
-{
- // Falls die Versions-ID noch nicht bekannt ist, muss sie bestimmt werden
- static string VersionIDString;
- if (VersionIDString.size() == 0)
- {
- // Dateinamen der EXE-Datei bestimmen
- char FileName[MAX_PATH + 1];
- if (GetModuleFileName(0, FileName, sizeof(FileName)) == 0) return VERSION_ID_ERROR;
-
- // Datei öffnen
- HANDLE FileHandle = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
- if (INVALID_HANDLE_VALUE == FileHandle) return VERSION_ID_ERROR;
-
- // Datei stückchenweise Einlesen und MD5-Hash bilden
- BS_MD5 md5;
- std::vector<unsigned char> ReadBuffer(READBUFFER_SIZE);
- DWORD BytesRead = 0;
- do
- {
- // MD5-Hash für das eingelesene Dateistück berechnen.
- md5.Update(&ReadBuffer[0], BytesRead);
-
- if (ReadFile(FileHandle, &ReadBuffer[0], READBUFFER_SIZE, &BytesRead, 0) == FALSE)
- {
- CloseHandle(FileHandle);
- return VERSION_ID_ERROR;
- }
- } while (BytesRead > 0);
-
- // Datei schließen
- CloseHandle(FileHandle);
-
- // Falls sich das aktuelle Verzeichnis in einem Subversion-Repository befindet, wird auch die Subversion-Revision mit in die ID gehasht.
- // Dieses stellt im Beta-Test sicher, dass jede Änderung einer Datei, und nicht nur der EXE, zu einer neuen Versions-ID führt.
- unsigned int SubversionRevision = GetSubversionRevision();
- if (SubversionRevision != 0) md5.Update(reinterpret_cast<unsigned char *>(&SubversionRevision), sizeof(unsigned int));
-
- // MD5 abschließen
- unsigned char Digest[16];
- md5.GetDigest(Digest);
-
- // VersionsID-String erstellen
- std::ostringstream VersionIDBuf;
- VersionIDBuf << std::hex;
- for (unsigned int i = 0; i < sizeof(Digest); i++)
- {
- VersionIDBuf << (unsigned int) Digest[i];
- }
- VersionIDString = VersionIDBuf.str();
- }
-
- return VersionIDString.c_str();
-}
-
-// -----------------------------------------------------------------------------
-
-unsigned int BS_Debugtools::GetSubversionRevision()
-{
- // Existiert eine entries Datei?
- if (BS_FileSystemUtil::GetInstance().FileExists(SUBVERSION_ENTRIES_FILENAME))
- {
- bool Success;
- char Buffer[512];
-
- // entries Datei öffnen.
- ifstream File(SUBVERSION_ENTRIES_FILENAME);
- if (File.fail()) return 0;
-
- // Das Format auslesen und feststellen, ob wir es unterstützen.
- File.getline(Buffer, sizeof(Buffer), 0x0A);
- unsigned int FormatVersion = ParseUnsignedInt(Buffer, Success);
- if (File.fail() || !Success || FormatVersion < 7) return 0;
-
- // Den Namen des ersten Eintrages auslesen. Dieses muss ein leerer String sein und somit das aktuelle Verzeichnis benennen.
- File.getline(Buffer, sizeof(Buffer), 0x0A);
- if (File.fail() || strlen(Buffer) != 0) return 0;
-
- // Den Typ des Eintrages auslesen. Dieser muss "dir" sein.
- File.getline(Buffer, sizeof(Buffer), 0x0A);
- if (File.fail() || strcmp(Buffer, "dir") != 0) return 0;
-
- // Die Revision des Eintrages auslesen.
- File.getline(Buffer, sizeof(Buffer), 0x0A);
- unsigned int Revision = ParseUnsignedInt(Buffer, Success);
- if (File.fail() || !Success) return 0;
-
- return Revision;
- }
-
- return 0;
-}
diff --git a/engines/sword25/kernel/debug/debugtools.h b/engines/sword25/kernel/debug/debugtools.h
deleted file mode 100644
index 9ee9238c3a..0000000000
--- a/engines/sword25/kernel/debug/debugtools.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* 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$
- *
- */
-
-/*
- * This code is based on Broken Sword 2.5 engine
- *
- * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer
- *
- * Licensed under GNU GPL v2
- *
- */
-
-#ifndef SWORD25_DEBUGTOOLS_H
-#define SWORD25_DEBUGTOOLS_H
-
-class BS_Debugtools
-{
-public:
- /**
- @brief Gibt eine ID zurück, die die benutzte Programmversion eindeutig identifiziert.
-
- Um die Version zu ermitteln wird der MD5-Hash über die EXE-Datei gebildet.
- Falls die ausführende Datei in einem SVN-Repository liegt wird zusätzlich die Revision des Verzeichnisses gehasht.
-
- @return Gibt einen String zurück, der die Versions-ID des Programmes angibt.<br>
- Falls die Versions-ID nicht bestimmt werden konnte wird "???" zurückgegeben.
- @remark Diese Methode ist momentan nur für WIN32 implementiert.
- */
- static const char * GetVersionID();
-
- /**
-
- @brief Gibt die Subversion-Revisionsnummer der Engine zurück.
-
- Diese Funktion versucht die aktuelle Revision aus der SVN entries Datei für das aktuelle Verzeichnis zu extrahieren.
- Dabei werden die SVN entries Formatversionen 7 und größer unterstützt.
- Die neueste Version ist aktuell 9. Für folgende Versionen wird angenommen, dass sich das Format des Headers nicht mehr ändert.
-
- @return Gibt die Revisionsnummer zurück. Falls die ausführende Datei nicht in einem SVN-Repository liegt oder die Revision nicht
- festgestellt werden konnte wird 0 zurückgegeben.
- */
- static unsigned int GetSubversionRevision();
-};
-
-#endif
diff --git a/engines/sword25/kernel/kernel_script.cpp b/engines/sword25/kernel/kernel_script.cpp
index 0062e93f83..22ed32625b 100644
--- a/engines/sword25/kernel/kernel_script.cpp
+++ b/engines/sword25/kernel/kernel_script.cpp
@@ -225,7 +225,7 @@ static int CreateDirectory(lua_State * L)
static int GetWinCode(lua_State * L)
{
- lua_pushstring(L, BS_WinCodeGenerator::GetWinCode().c_str());
+ lua_pushstring(L, "ScummVM");
return 1;
}
@@ -233,7 +233,8 @@ static int GetWinCode(lua_State * L)
static int GetSubversionRevision(lua_State * L)
{
- lua_pushnumber(L, BS_Debugtools::GetSubversionRevision());
+ // ScummVM is 1337
+ lua_pushnumber(L, 1337);
return 1;
}
diff --git a/engines/sword25/kernel/md5.cpp b/engines/sword25/kernel/md5.cpp
deleted file mode 100644
index 2ad05b16ff..0000000000
--- a/engines/sword25/kernel/md5.cpp
+++ /dev/null
@@ -1,400 +0,0 @@
-/* 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$
- *
- */
-
-/*
- * This code is based on Broken Sword 2.5 engine
- *
- * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer
- *
- * Licensed under GNU GPL v2
- *
- */
-
-// The code in this file is based in part on code from Aladdin
-// Enterprises released under the following terms:
-//
-// Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved.
-//
-// This software is provided 'as-is', without any express or implied
-// warranty. In no event will the authors be held liable for any damages
-// arising from the use of this software.
-//
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-//
-// 1. The origin of this software must not be misrepresented; you must not
-// claim that you wrote the original software. If you use this software
-// in a product, an acknowledgment in the product documentation would be
-// appreciated but is not required.
-// 2. Altered source versions must be plainly marked as such, and must not be
-// misrepresented as being the original software.
-// 3. This notice may not be removed or altered from any source distribution.
-//
-// L. Peter Deutsch
-// ghost@aladdin.com
-
-#include "sword25/kernel/md5.h"
-
-#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */
-#ifdef ARCH_IS_BIG_ENDIAN
-# define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
-#else
-# define BYTE_ORDER 0
-#endif
-
-#define T_MASK ((md5_word_t)~0)
-#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
-#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
-#define T3 0x242070db
-#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)
-#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)
-#define T6 0x4787c62a
-#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)
-#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)
-#define T9 0x698098d8
-#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)
-#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)
-#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)
-#define T13 0x6b901122
-#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)
-#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)
-#define T16 0x49b40821
-#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)
-#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)
-#define T19 0x265e5a51
-#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)
-#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)
-#define T22 0x02441453
-#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)
-#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)
-#define T25 0x21e1cde6
-#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)
-#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)
-#define T28 0x455a14ed
-#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)
-#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)
-#define T31 0x676f02d9
-#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)
-#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)
-#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)
-#define T35 0x6d9d6122
-#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)
-#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)
-#define T38 0x4bdecfa9
-#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)
-#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)
-#define T41 0x289b7ec6
-#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)
-#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)
-#define T44 0x04881d05
-#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)
-#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)
-#define T47 0x1fa27cf8
-#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)
-#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)
-#define T50 0x432aff97
-#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)
-#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)
-#define T53 0x655b59c3
-#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)
-#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)
-#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)
-#define T57 0x6fa87e4f
-#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)
-#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)
-#define T60 0x4e0811a1
-#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)
-#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)
-#define T63 0x2ad7d2bb
-#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)
-
-
-static void
-md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
-{
- md5_word_t
- a = pms->abcd[0], b = pms->abcd[1],
- c = pms->abcd[2], d = pms->abcd[3];
- md5_word_t t;
-#if BYTE_ORDER > 0
- /* Define storage only for big-endian CPUs. */
- md5_word_t X[16];
-#else
- /* Define storage for little-endian or both types of CPUs. */
- md5_word_t xbuf[16];
- const md5_word_t *X;
-#endif
-
- {
-#if BYTE_ORDER == 0
- /*
- * Determine dynamically whether this is a big-endian or
- * little-endian machine, since we can use a more efficient
- * algorithm on the latter.
- */
- static const int w = 1;
-
- if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
-#endif
-#if BYTE_ORDER <= 0 /* little-endian */
- {
- /*
- * On little-endian machines, we can process properly aligned
- * data without copying it.
- */
- if (!((data - (const md5_byte_t *)0) & 3)) {
- /* data are properly aligned */
- X = (const md5_word_t *)data;
- } else {
- /* not aligned */
- memcpy(xbuf, data, 64);
- X = xbuf;
- }
- }
-#endif
-#if BYTE_ORDER == 0
- else /* dynamic big-endian */
-#endif
-#if BYTE_ORDER >= 0 /* big-endian */
- {
- /*
- * On big-endian machines, we must arrange the bytes in the
- * right order.
- */
- const md5_byte_t *xp = data;
- int i;
-
-# if BYTE_ORDER == 0
- X = xbuf; /* (dynamic only) */
-# else
-# define xbuf X /* (static only) */
-# endif
- for (i = 0; i < 16; ++i, xp += 4)
- xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
- }
-#endif
- }
-
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
-
- /* Round 1. */
- /* Let [abcd k s i] denote the operation
- a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
-#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
-#define SET(a, b, c, d, k, s, Ti)\
- t = a + F(b,c,d) + X[k] + Ti;\
- a = ROTATE_LEFT(t, s) + b
- /* Do the following 16 operations. */
- SET(a, b, c, d, 0, 7, T1);
- SET(d, a, b, c, 1, 12, T2);
- SET(c, d, a, b, 2, 17, T3);
- SET(b, c, d, a, 3, 22, T4);
- SET(a, b, c, d, 4, 7, T5);
- SET(d, a, b, c, 5, 12, T6);
- SET(c, d, a, b, 6, 17, T7);
- SET(b, c, d, a, 7, 22, T8);
- SET(a, b, c, d, 8, 7, T9);
- SET(d, a, b, c, 9, 12, T10);
- SET(c, d, a, b, 10, 17, T11);
- SET(b, c, d, a, 11, 22, T12);
- SET(a, b, c, d, 12, 7, T13);
- SET(d, a, b, c, 13, 12, T14);
- SET(c, d, a, b, 14, 17, T15);
- SET(b, c, d, a, 15, 22, T16);
-#undef SET
-
- /* Round 2. */
- /* Let [abcd k s i] denote the operation
- a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
-#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
-#define SET(a, b, c, d, k, s, Ti)\
- t = a + G(b,c,d) + X[k] + Ti;\
- a = ROTATE_LEFT(t, s) + b
- /* Do the following 16 operations. */
- SET(a, b, c, d, 1, 5, T17);
- SET(d, a, b, c, 6, 9, T18);
- SET(c, d, a, b, 11, 14, T19);
- SET(b, c, d, a, 0, 20, T20);
- SET(a, b, c, d, 5, 5, T21);
- SET(d, a, b, c, 10, 9, T22);
- SET(c, d, a, b, 15, 14, T23);
- SET(b, c, d, a, 4, 20, T24);
- SET(a, b, c, d, 9, 5, T25);
- SET(d, a, b, c, 14, 9, T26);
- SET(c, d, a, b, 3, 14, T27);
- SET(b, c, d, a, 8, 20, T28);
- SET(a, b, c, d, 13, 5, T29);
- SET(d, a, b, c, 2, 9, T30);
- SET(c, d, a, b, 7, 14, T31);
- SET(b, c, d, a, 12, 20, T32);
-#undef SET
-
- /* Round 3. */
- /* Let [abcd k s t] denote the operation
- a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define SET(a, b, c, d, k, s, Ti)\
- t = a + H(b,c,d) + X[k] + Ti;\
- a = ROTATE_LEFT(t, s) + b
- /* Do the following 16 operations. */
- SET(a, b, c, d, 5, 4, T33);
- SET(d, a, b, c, 8, 11, T34);
- SET(c, d, a, b, 11, 16, T35);
- SET(b, c, d, a, 14, 23, T36);
- SET(a, b, c, d, 1, 4, T37);
- SET(d, a, b, c, 4, 11, T38);
- SET(c, d, a, b, 7, 16, T39);
- SET(b, c, d, a, 10, 23, T40);
- SET(a, b, c, d, 13, 4, T41);
- SET(d, a, b, c, 0, 11, T42);
- SET(c, d, a, b, 3, 16, T43);
- SET(b, c, d, a, 6, 23, T44);
- SET(a, b, c, d, 9, 4, T45);
- SET(d, a, b, c, 12, 11, T46);
- SET(c, d, a, b, 15, 16, T47);
- SET(b, c, d, a, 2, 23, T48);
-#undef SET
-
- /* Round 4. */
- /* Let [abcd k s t] denote the operation
- a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
-#define I(x, y, z) ((y) ^ ((x) | ~(z)))
-#define SET(a, b, c, d, k, s, Ti)\
- t = a + I(b,c,d) + X[k] + Ti;\
- a = ROTATE_LEFT(t, s) + b
- /* Do the following 16 operations. */
- SET(a, b, c, d, 0, 6, T49);
- SET(d, a, b, c, 7, 10, T50);
- SET(c, d, a, b, 14, 15, T51);
- SET(b, c, d, a, 5, 21, T52);
- SET(a, b, c, d, 12, 6, T53);
- SET(d, a, b, c, 3, 10, T54);
- SET(c, d, a, b, 10, 15, T55);
- SET(b, c, d, a, 1, 21, T56);
- SET(a, b, c, d, 8, 6, T57);
- SET(d, a, b, c, 15, 10, T58);
- SET(c, d, a, b, 6, 15, T59);
- SET(b, c, d, a, 13, 21, T60);
- SET(a, b, c, d, 4, 6, T61);
- SET(d, a, b, c, 11, 10, T62);
- SET(c, d, a, b, 2, 15, T63);
- SET(b, c, d, a, 9, 21, T64);
-#undef SET
-
- /* Then perform the following additions. (That is increment each
- of the four registers by the value it had before this block
- was started.) */
- pms->abcd[0] += a;
- pms->abcd[1] += b;
- pms->abcd[2] += c;
- pms->abcd[3] += d;
-}
-
-void
-md5_init(md5_state_t *pms)
-{
- pms->count[0] = pms->count[1] = 0;
- pms->abcd[0] = 0x67452301;
- pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
- pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;
- pms->abcd[3] = 0x10325476;
-}
-
-void
-md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
-{
- const md5_byte_t *p = data;
- int left = nbytes;
- int offset = (pms->count[0] >> 3) & 63;
- md5_word_t nbits = (md5_word_t)(nbytes << 3);
-
- if (nbytes <= 0)
- return;
-
- /* Update the message length. */
- pms->count[1] += nbytes >> 29;
- pms->count[0] += nbits;
- if (pms->count[0] < nbits)
- pms->count[1]++;
-
- /* Process an initial partial block. */
- if (offset) {
- int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);
-
- memcpy(pms->buf + offset, p, copy);
- if (offset + copy < 64)
- return;
- p += copy;
- left -= copy;
- md5_process(pms, pms->buf);
- }
-
- /* Process full blocks. */
- for (; left >= 64; p += 64, left -= 64)
- md5_process(pms, p);
-
- /* Process a final partial block. */
- if (left)
- memcpy(pms->buf, p, left);
-}
-
-void
-md5_finish(md5_state_t *pms, md5_byte_t digest[16])
-{
- static const md5_byte_t pad[64] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
- md5_byte_t data[8];
- int i;
-
- /* Save the length before padding. */
- for (i = 0; i < 8; ++i)
- data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
- /* Pad to 56 bytes mod 64. */
- md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
- /* Append the length. */
- md5_append(pms, data, 8);
- for (i = 0; i < 16; ++i)
- digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
-}
-
-BS_MD5::BS_MD5()
-{
- md5_init(&m_state);
-}
-
-void BS_MD5::Update(const unsigned char * Buffer, unsigned int Length)
-{
- md5_append(&m_state, Buffer, Length);
-}
-
-void BS_MD5::GetDigest(unsigned char Digest[16])
-{
- md5_finish(&m_state, Digest);
-}
diff --git a/engines/sword25/kernel/md5.h b/engines/sword25/kernel/md5.h
deleted file mode 100644
index 6afbdad421..0000000000
--- a/engines/sword25/kernel/md5.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* 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$
- *
- */
-
-/*
- * This code is based on Broken Sword 2.5 engine
- *
- * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer
- *
- * Licensed under GNU GPL v2
- *
- */
-
-#ifndef SWORD25_MD5_H
-#define SWORD25_MD5_H
-
-// -----------------------------------------------------------------------------
-// Includes
-// -----------------------------------------------------------------------------
-
-#include "sword25/kernel/common.h"
-#include "sword25/kernel/bs_stdint.h"
-
-// -----------------------------------------------------------------------------
-// Klassendefinition
-// -----------------------------------------------------------------------------
-
-typedef uint8_t md5_byte_t; /* 8-bit byte */
-typedef uint32_t md5_word_t; /* 32-bit word */
-
-/* Define the state of the MD5 Algorithm. */
-typedef struct md5_state_s {
- md5_word_t count[2]; /* message length in bits, lsw first */
- md5_word_t abcd[4]; /* digest buffer */
- md5_byte_t buf[64]; /* accumulate block */
-} md5_state_t;
-
-class BS_MD5
-{
-public:
- BS_MD5();
-
- void Update(const unsigned char * Buffer, unsigned int Length);
- void GetDigest(unsigned char Digest[16]);
-
-private:
- md5_state_t m_state;
-};
-
-#endif
diff --git a/engines/sword25/kernel/persistenceservice.cpp b/engines/sword25/kernel/persistenceservice.cpp
index 9eeac1a009..c8007a88a5 100644
--- a/engines/sword25/kernel/persistenceservice.cpp
+++ b/engines/sword25/kernel/persistenceservice.cpp
@@ -71,6 +71,7 @@ namespace
const char * FILE_MARKER = "BS25SAVEGAME";
const unsigned int SLOT_COUNT = 18;
const unsigned int FILE_COPY_BUFFER_SIZE = 1024 * 10;
+ const char *VERSIONID = "1";
// -------------------------------------------------------------------------
@@ -186,7 +187,7 @@ struct BS_PersistenceService::Impl
// Der Slot wird als belegt markiert.
CurSavegameInfo.IsOccupied = true;
// Speichern, ob der Spielstand kompatibel mit der aktuellen Engine-Version ist.
- CurSavegameInfo.IsCompatible = (StoredVersionID == BS_Debugtools::GetVersionID());
+ CurSavegameInfo.IsCompatible = (StoredVersionID == string(VERSIONID));
// Dateinamen des Spielstandes speichern.
CurSavegameInfo.Filename = GenerateSavegameFilename(SlotID);
// Die Beschreibung des Spielstandes besteht aus einer textuellen Darstellung des Änderungsdatums der Spielstanddatei.
@@ -321,7 +322,7 @@ bool BS_PersistenceService::SaveGame(unsigned int SlotID, const std::string & Sc
// Spielstanddatei öffnen und die Headerdaten schreiben.
ofstream File(Filename.c_str(), ofstream::binary);
- File << string(FILE_MARKER) << " " << string(BS_Debugtools::GetVersionID()) << " ";
+ File << string(FILE_MARKER) << " " << string(VERSIONID) << " ";
if (!File.good())
{
BS_LOG_ERRORLN("Unable to write header data to savegame file \"%s\".", Filename.c_str());
diff --git a/engines/sword25/kernel/wincodegenerator.cpp b/engines/sword25/kernel/wincodegenerator.cpp
deleted file mode 100644
index cf36f22b15..0000000000
--- a/engines/sword25/kernel/wincodegenerator.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/* 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$
- *
- */
-
-/*
- * This code is based on Broken Sword 2.5 engine
- *
- * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer
- *
- * Licensed under GNU GPL v2
- *
- */
-
-// -----------------------------------------------------------------------------
-// Includes
-// -----------------------------------------------------------------------------
-
-#include "sword25/kernel/md5.h"
-#include "sword25/kernel/wincodegenerator.h"
-using namespace std;
-
-// -----------------------------------------------------------------------------
-// Hilfsfunktionen und Konstanten
-// -----------------------------------------------------------------------------
-
-namespace
-{
- const char SECRET[] = "LSZNRVWQJHITMIEGESJMZAYVKGTCDT";
-
- // -------------------------------------------------------------------------
-
- string EncodeValue(unsigned int Value)
- {
- string Result;
-
- for (unsigned int i = 0; i < 7; ++i)
- {
- Result.push_back(65 + Value % 26);
- Value /= 26;
- }
-
- return Result;
- }
-}
-
-// -----------------------------------------------------------------------------
-
-string BS_WinCodeGenerator::GetWinCode()
-{
- // Die System-ID generieren und als String codieren.
- string SystemID = EncodeValue(GetSystemID());
-
- // Den Hashwert der System-ID mit dem geheimen String berechnen.
- BS_MD5 md5;
- string HashData = SystemID + SECRET;
- md5.Update(reinterpret_cast<const unsigned char *>(&HashData[0]), HashData.size());
- unsigned char Digest[16];
- md5.GetDigest(Digest);
-
- // Die ersten 32-Bit des Digest werden aus dem Digest extrahiert. Zudem wird das oberste Bit ausmaskiert.
- // So ist es einfacher den Code serverseitig zu überprüfen, da viele Scriptsprachen mit 32-Bit signed integern rechnen.
- unsigned int ValidationHash = ((Digest[3] & 0x7f) << 24) + (Digest[2] << 16) + (Digest[1] << 8) + Digest[0];
-
- // Der Code besteht aus der codierten System-ID und dem codierten Hash.
- return SystemID + EncodeValue(ValidationHash);
-}
diff --git a/engines/sword25/kernel/wincodegenerator.h b/engines/sword25/kernel/wincodegenerator.h
deleted file mode 100644
index 5c3f14a2e2..0000000000
--- a/engines/sword25/kernel/wincodegenerator.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* 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$
- *
- */
-
-/*
- * This code is based on Broken Sword 2.5 engine
- *
- * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer
- *
- * Licensed under GNU GPL v2
- *
- */
-
-#ifndef SWORD25_WIN_CODE_GENERATOR_H
-#define SWORD25_WIN_CODE_GENERATOR_H
-
-// -----------------------------------------------------------------------------
-// Includes
-// -----------------------------------------------------------------------------
-
-#include <string>
-#include "sword25/kernel/common.h"
-
-// -----------------------------------------------------------------------------
-// Klassendefinition
-// -----------------------------------------------------------------------------
-
-class BS_WinCodeGenerator
-{
-public:
- static std::string GetWinCode();
-
-private:
- static unsigned int GetSystemID();
-};
-
-#endif
diff --git a/engines/sword25/kernel/wincodegenerator_win32.cpp b/engines/sword25/kernel/wincodegenerator_win32.cpp
deleted file mode 100644
index 7897fb4367..0000000000
--- a/engines/sword25/kernel/wincodegenerator_win32.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-/* 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$
- *
- */
-
-/*
- * This code is based on Broken Sword 2.5 engine
- *
- * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer
- *
- * Licensed under GNU GPL v2
- *
- */
-
-// -----------------------------------------------------------------------------
-// Includes
-// -----------------------------------------------------------------------------
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <LMCons.h>
-
-#include <vector>
-using namespace std;
-
-#include "sword25/kernel/md5.h"
-#include "sword25/kernel/wincodegenerator.h"
-
-// -----------------------------------------------------------------------------
-// Hilfsfunktionen
-// -----------------------------------------------------------------------------
-
-namespace
-{
- void AddedFixedDrivesEntropy(BS_MD5 & md5)
- {
- if (DWORD LogicalDrivesMask = ::GetLogicalDrives())
- {
- // Über alle Laufwerke iterieren.
- char CurrentDriveLetter[] = "A:\\";
- while (LogicalDrivesMask && CurrentDriveLetter[0] <= 'Z')
- {
- if (LogicalDrivesMask & 1)
- {
- // Nur feste Laufwerke werden betrachtet, ansonsten würde sich die System-ID ändern, wenn jemand einen USB-Stick ansteckt oder
- // eine CD einlegt.
- if (::GetDriveTypeA(CurrentDriveLetter) == DRIVE_FIXED)
- {
- // Laufwerksinformationen auslesen.
- CHAR VolumeNameBuffer[MAX_PATH + 1];
- DWORD SerialNumber;
- DWORD MaximumComponentLength;
- DWORD FileSystemFlags;
- CHAR FileSystemNameBuffer[MAX_PATH + 1];
- if (::GetVolumeInformationA(CurrentDriveLetter,
- VolumeNameBuffer, sizeof(VolumeNameBuffer),
- &SerialNumber,
- &MaximumComponentLength,
- &FileSystemFlags,
- FileSystemNameBuffer, sizeof(FileSystemNameBuffer)))
- {
- // Als Entropie werden genutzt: Laufwerksbuchstabe, Laufwerksbezeichnung, Seriennummer und Dateisystemname.
- md5.Update(reinterpret_cast<const unsigned char *>(CurrentDriveLetter), strlen(CurrentDriveLetter));
- md5.Update(reinterpret_cast<const unsigned char *>(VolumeNameBuffer), strlen(VolumeNameBuffer));
- md5.Update(reinterpret_cast<const unsigned char *>(&SerialNumber), sizeof(SerialNumber));
- md5.Update(reinterpret_cast<const unsigned char *>(FileSystemNameBuffer), strlen(FileSystemNameBuffer));
- }
- }
- }
-
- LogicalDrivesMask >>= 1;
- ++CurrentDriveLetter[0];
- }
- }
- }
-
- // -------------------------------------------------------------------------
-
- void AddUserNameEntropy(BS_MD5 & md5)
- {
- // Benutzernamen auslesen und als Entropie nutzen.
- DWORD UserNameLength = UNLEN + 1;
- CHAR UserName[UNLEN + 1];
- if (::GetUserNameA(UserName, &UserNameLength))
- {
- md5.Update(reinterpret_cast<const unsigned char *>(&UserName[0]), strlen(UserName));
- }
- }
-
- // -------------------------------------------------------------------------
-
- void AddOSVersionEntropy(BS_MD5 & md5)
- {
- // Windows-Version auslesen und in die Einzelkomponenten MajorVersion, MinorVersion und Build aufspalten.
- DWORD VersionInfo = ::GetVersion();
-
- DWORD MajorVersion = (DWORD)(LOBYTE(LOWORD(VersionInfo)));
- DWORD MinorVersion = (DWORD)(HIBYTE(LOWORD(VersionInfo)));
- DWORD Build = 0;
- if (VersionInfo < 0x80000000) Build = (DWORD)(HIWORD(VersionInfo));
-
- // Diese drei Informationen als Entropie nutzen.
- md5.Update(reinterpret_cast<const unsigned char *>(&MajorVersion), sizeof(DWORD));
- md5.Update(reinterpret_cast<const unsigned char *>(&MinorVersion), sizeof(DWORD));
- md5.Update(reinterpret_cast<const unsigned char *>(&Build), sizeof(DWORD));
- }
-}
-
-// -----------------------------------------------------------------------------
-
-unsigned int BS_WinCodeGenerator::GetSystemID()
-{
- BS_MD5 md5;
-
- AddedFixedDrivesEntropy(md5);
- AddUserNameEntropy(md5);
- AddOSVersionEntropy(md5);
-
- unsigned char Digest[16];
- md5.GetDigest(Digest);
-
- return (Digest[3] << 24) + (Digest[2] << 16) + (Digest[1] << 8) + Digest[0];
-}
diff --git a/engines/sword25/module.mk b/engines/sword25/module.mk
index a0268d742c..5bd81dd81e 100644
--- a/engines/sword25/module.mk
+++ b/engines/sword25/module.mk
@@ -46,13 +46,11 @@ MODULE_OBJS := \
input/inputengine_script.o \
input/stdwininput.o \
kernel/callbackregistry.o \
- kernel/debug/debugtools.o \
kernel/filesystemutil.o \
kernel/inputpersistenceblock.o \
kernel/kernel.o \
kernel/kernel_script.o \
kernel/log.o \
- kernel/md5.o \
kernel/memleaks.o \
kernel/outputpersistenceblock.o \
kernel/persistenceservice.o \
@@ -60,8 +58,6 @@ MODULE_OBJS := \
kernel/resource.o \
kernel/timer.o \
kernel/win32window.o \
- kernel/wincodegenerator.o \
- kernel/wincodegenerator_win32.o \
kernel/window.o \
math/geometry.o \
math/geometry_script.o \