aboutsummaryrefslogtreecommitdiff
path: root/engines/sword25/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sword25/main.cpp')
-rwxr-xr-xengines/sword25/main.cpp212
1 files changed, 0 insertions, 212 deletions
diff --git a/engines/sword25/main.cpp b/engines/sword25/main.cpp
deleted file mode 100755
index ae9b3d0a2d..0000000000
--- a/engines/sword25/main.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-// -----------------------------------------------------------------------------
-// This file is part of Broken Sword 2.5
-// Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdörfer
-//
-// Broken Sword 2.5 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.
-//
-// Broken Sword 2.5 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 Broken Sword 2.5; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-// -----------------------------------------------------------------------------
-
-// -----------------------------------------------------------------------------
-// Includes
-// -----------------------------------------------------------------------------
-
-#include <string>
-#include <vector>
-#include <algorithm>
-#include <iostream>
-using namespace std;
-
-#include "sword25/kernel/common.h"
-#include "sword25/kernel/kernel.h"
-#include "sword25/kernel/filesystemutil.h"
-#include "sword25/script/script.h"
-#include "sword25/package/packagemanager.h"
-
-#define BS_LOG_PREFIX "MAIN"
-
-// -----------------------------------------------------------------------------
-
-namespace
-{
- const char * const PACKAGE_MANAGER = "physfs";
- const char * const DEFAULT_SCRIPT_FILE = "/system/boot.lua";
- const char * const MOUNT_DIR_PARAMETER = "-mount-dir";
-
- // -------------------------------------------------------------------------
-
- void LogToStdout(const char * Message)
- {
- printf("%s", Message);
- }
-
- // -------------------------------------------------------------------------
-
- bool LoadPackages()
- {
- BS_PackageManager * PackageManagerPtr = reinterpret_cast<BS_PackageManager *>(BS_Kernel::GetInstance()->GetService("package"));
- BS_ASSERT(PackageManagerPtr);
-
- // Das Hauptpaket laden.
- if (!PackageManagerPtr->LoadPackage("data.b25c", "/")) return false;
-
- // Den Inhalt des Programmverzeichnisses bestimmen und alphabetisch sortieren.
- vector<string> Filenames = BS_FileSystemUtil::GetInstance().GetFilesInDirectory(".");
- sort(Filenames.begin(), Filenames.end());
-
- // Alle Patch-Pakete identifizieren und mounten.
- // Die Dateinamen der Patch-Pakete besitzen die Form: patch???.b25c, wobei die Fragezeichen Platzhalter für Ziffern sind.
- // Da die Dateinamen sortiert wurden, werden Patches mit niedrigen Zahlen vor Patches mit hohen Zahlen gemounted.
- // Dies ist wichtig, da neu gemountete Pakete vorhandene Dateien im virtuellen Dateisystem überschreiben, wenn sie
- // gleichnamige Dateien beinhalten.
- for (vector<string>::const_iterator it = Filenames.begin(); it != Filenames.end(); ++it)
- {
- const string & CurFilename = *it;
-
- // Ist aktuelle Datei ein Patch-Paket?
- static const string PatchPattern = "patch???.b25c";
- if (CurFilename.size() == PatchPattern.size())
- {
- // Pattern Zeichen für Zeichen mit dem Dateinamen vergleichen.
- string::const_iterator PatchPatternIt = PatchPattern.begin();
- string::const_iterator CurFilenameIt = CurFilename.begin();
- for (; PatchPatternIt != PatchPattern.end(); ++PatchPatternIt, ++CurFilenameIt)
- {
- if (*PatchPatternIt == '?')
- {
- if (*CurFilenameIt < '0' || *CurFilenameIt > '9') break;
- }
- else
- {
- if (*PatchPatternIt != *CurFilenameIt) break;
- }
- }
-
- if (PatchPatternIt == PatchPattern.end())
- {
- // Pattern stimmt, Datei muss gemountet werden.
- if (!PackageManagerPtr->LoadPackage(CurFilename, "/")) return false;
- }
- }
- }
-
- // Alle Sprach-Pakete identifizieren und mounten.
- // Die Dateinamen der Sprach-Pakete besitzen die Form: lang_*.b25c (z.B. lang_de.b25c).
- for (vector<string>::const_iterator it = Filenames.begin(); it != Filenames.end(); ++it)
- {
- const string & CurFilename = *it;
-
- static const string Prefix = "lang_";
- static const string Suffix = ".b25c";
-
- if ((CurFilename.size() >= Prefix.size() && string(CurFilename.begin(), CurFilename.begin() + Prefix.size()) == Prefix) && // Präfix testen.
- (CurFilename.size() >= Suffix.size() && string(CurFilename.end() - Suffix.size(), CurFilename.end()) == Suffix) && // Suffix testen.
- (CurFilename.size() > Prefix.size() + Suffix.size())) // Sicherstellen, dass der Dateiname weitere Buchstaben zwischen Präfix und Suffix besitzt.
- {
- // Pattern stimmt, Datei muss gemountet werden.
- if (!PackageManagerPtr->LoadPackage(CurFilename, "/")) return false;
- }
- }
-
- return true;
- }
-}
-
-// -----------------------------------------------------------------------------
-
-bool AppStart(const vector<string> & CommandLineParameters)
-{
- // Alle Lognachrichten werden auch auf die Standardausgabe ausgegeben.
- BS_Log::RegisterLogListener(LogToStdout);
-
- // Kernel initialisieren.
- if (!BS_Kernel::GetInstance()->GetInitSuccess())
- {
- BS_LOG_ERRORLN("Kernel initialization failed.");
- return false;
- }
-
- // Package-Manager starten, damit die Packfiles geladen werden können.
- BS_PackageManager * PackageManagerPtr = static_cast<BS_PackageManager *>(BS_Kernel::GetInstance()->NewService("package", PACKAGE_MANAGER));
- if (!PackageManagerPtr)
- {
- BS_LOG_ERRORLN("Packagemanager initialization failed.");
- return false;
- }
-
- // Packages laden oder das aktuelle Verzeichnis mounten, wenn das über Kommandozeile angefordert wurde.
- if (find(CommandLineParameters.begin(), CommandLineParameters.end(), MOUNT_DIR_PARAMETER) != CommandLineParameters.end())
- {
- if (!PackageManagerPtr->LoadDirectoryAsPackage(".", "/")) return false;
- }
- else
- {
- if (!LoadPackages()) return false;
- }
-
- // Einen Pointer auf den Skript-Engine holen.
- BS_ScriptEngine * ScriptPtr = static_cast<BS_ScriptEngine *>(BS_Kernel::GetInstance()->GetService("script"));
- if (!ScriptPtr)
- {
- BS_LOG_ERRORLN("Skript intialization failed.");
- return false;
- }
-
- // Die Kommandozeilen-Parameter der Skriptumgebung zugänglich machen.
- ScriptPtr->SetCommandLine(CommandLineParameters);
-
- return true;
-}
-
-// -----------------------------------------------------------------------------
-
-bool AppEnd()
-{
- // Den Kernel herunterfahren und alle Subsysteme deinitialisieren.
- BS_Kernel::DeleteInstance();
-
- return true;
-}
-
-// -----------------------------------------------------------------------------
-
-bool AppMain()
-{
- // Das Hauptskript starten. Dieses Skript lädt alle anderen Skripte und startet das eigentliche Spiel.
- BS_ScriptEngine * ScriptPtr = static_cast<BS_ScriptEngine *>(BS_Kernel::GetInstance()->GetService("script"));
- BS_ASSERT(ScriptPtr);
- ScriptPtr->ExecuteFile(DEFAULT_SCRIPT_FILE);
-
- return true;
-}
-
-bool main2(int argc, char ** argv)
-{
- // Engine initialisieren.
- vector<string> CommandLineParameters;
- for (int i = 0; i < argc; ++i) CommandLineParameters.push_back(string(argv[i]));
- if (!AppStart(CommandLineParameters))
- {
- warning("A fatal error occured during engine startup.");
- AppEnd();
- return 1;
- }
-
- // Engine starten.
- bool RunSuccess = AppMain();
-
- // Engine deinitialisieren.
- bool DeinitSuccess = AppEnd();
-
- return (RunSuccess && DeinitSuccess) ? 0 : 1;
-}