diff options
-rw-r--r-- | engines/sword25/kernel/debug/debugtools.cpp | 171 | ||||
-rw-r--r-- | engines/sword25/kernel/debug/debugtools.h | 67 | ||||
-rw-r--r-- | engines/sword25/kernel/kernel_script.cpp | 5 | ||||
-rw-r--r-- | engines/sword25/kernel/md5.cpp | 400 | ||||
-rw-r--r-- | engines/sword25/kernel/md5.h | 71 | ||||
-rw-r--r-- | engines/sword25/kernel/persistenceservice.cpp | 5 | ||||
-rw-r--r-- | engines/sword25/kernel/wincodegenerator.cpp | 87 | ||||
-rw-r--r-- | engines/sword25/kernel/wincodegenerator.h | 58 | ||||
-rw-r--r-- | engines/sword25/kernel/wincodegenerator_win32.cpp | 143 | ||||
-rw-r--r-- | engines/sword25/module.mk | 4 |
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 \ |