From a683a420a9e43705c972b5e74d55e319729e1a81 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Thu, 29 Jul 2010 19:53:02 +0000 Subject: SWORD25: Importing original sources svn-id: r53171 --- engines/sword25/package/packagemanager.h | 188 +++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100755 engines/sword25/package/packagemanager.h (limited to 'engines/sword25/package/packagemanager.h') diff --git a/engines/sword25/package/packagemanager.h b/engines/sword25/package/packagemanager.h new file mode 100755 index 0000000000..67c97505c7 --- /dev/null +++ b/engines/sword25/package/packagemanager.h @@ -0,0 +1,188 @@ +// ----------------------------------------------------------------------------- +// 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 +// ----------------------------------------------------------------------------- + +/* + BS_PackageManager + ------------- + Dies ist das Package Manager Interface, dass alle Methoden enthält, die ein Package Manager + implementieren muss. + Beim Package Manager ist folgendes zu beachten: + 1. es wird ein komplett neuer (virtueller) Verzeichnisbaum erstellt, + in den Packages und Verzeichnisse gemounted werden können. + 2. zum Trennen von Elementen eines Verzeichnisspfades wird '/' statt '\' verwendet. + 3. LoadDirectoryAsPackage sollte nur zum Testen benutzt werden. Im Final Release sollen sich + alle Dateien in echten Packages befinden. + + Autor: Malte Thiesen, $author$ +*/ + +#ifndef BS_PACKAGE_MANAGER_H +#define BS_PACKAGE_MANAGER_H + +// Includes +#include "kernel/common.h" +#include "kernel/kernel.h" +#include "kernel/service.h" + +// Klassendefinition +/** + @brief Das Package Manager Interface + + Beim Package Manager ist folgendes zu beachten:
+ 1. es wird ein komplett neuer (virtueller) Verzeichnisbaum erstellt, + in den Packages und Verzeichnisse gemounted werden können.
+ 2. zum Trennen von Elementen eines Verzeichnisspfades wird '/' statt '\' verwendet.
+ 3. LoadDirectoryAsPackage sollte nur zum Testen benutzt werden. Im Final Release sollen sich + alle Dateien in echten Packages befinden. +*/ +class BS_PackageManager : public BS_Service +{ +public: + BS_PackageManager(BS_Kernel* pKernel); + virtual ~BS_PackageManager() {}; + + enum FILE_TYPES + { + FT_DIRECTORY = (1<<0), + FT_FILE = (1<<1) + }; + + /** + @brief Mit Instanzen dieses Objektes wird nach Dateien gesucht. + + Objekte diesen Types wird mit BS_PackageManager::CreateSearch erzeugt. + */ + class FileSearch + { + public: + virtual ~FileSearch(){}; + + /** + @brief Gibt den Dateinamen der aktuellen Datei zurück. + @return Gibt den Dateinamen der aktuellen Datei zurück. + */ + virtual std::string GetCurFileName() = 0; + /** + @brief Gibt den Typ der aktuellen Datei zurück. + @return Gibt den Typ der aktuellen Datei zurück.
+ Dieses ist entweder BS_PackageManager::FT_FILE oder BS_PackageManager::FT_DIRECTORY. + */ + virtual unsigned int GetCurFileType() = 0; + /** + @brief Gibt die Größe der aktuellen Datei zurück. + @return Gibt die Größe der aktuellen Datei zurück.
+ Bei Verzeichnissen ist dieser Wert immer 0. + */ + virtual unsigned int GetCurFileSize() = 0; + // Sucht die nächste Datei + // Gibt false zurück, falls keine weitere Datei gefunden wurde + /** + @brief Sucht die nächste Datei. + @return Gibt false zurück, falls keine weitere Datei die Suchkriterien erfüllte. + */ + virtual bool NextFile() = 0; + }; + + /** + @brief Mounted den Inhalt eines Packages in das angegebene Verzeichnis im virtuellen Verzeichnisbaum. + @param FileName der Dateiname des zu mountenden Packages + @param MountPosition der Verzeichnisname, unter dem das Package gemounted werden soll + @return Gibt true zurück falls das mounten erfolgreich war, andernfalls false. + */ + virtual bool LoadPackage(const std::string& FileName, const std::string& MountPosition) = 0; + /** + @brief Mounted den Inhalt eines Verzeichnisses in das angegebene Verzeichnis im virtuellen Verzeichnisbaum. + @param DirectoryName der Name des zu mountenden Verzeichnisses + @param MountPosition der Verzeichnisname, unter dem das Verzeichnis gemounted werden soll + @return Gibt true zurück falls das mounten erfolgreich war, andernfalls false. + */ + virtual bool LoadDirectoryAsPackage(const std::string& DirectoryName, const std::string& MountPosition) = 0; + /** + @brief Lädt eine Datei aus dem virtuellen Verzeichnisbaum. + @param FileName der Dateiname der zu ladenden Datei + @param pFileSize Pointer auf die Variable, die die Größe der geladenen Datei enthalten soll
+ Der Standardwert ist NULL. + @return Gibt einen Pointer auf die Dateidaten zürück, oder NULL, wenn die Datei nicht geladen werden konnte. + @remark Es darf nicht vergessen werden, die Dateidaten nach Benutzung mit BE_DELETE_A freizugeben. + */ + virtual void* GetFile(const std::string& FileName, unsigned int* pFileSize = NULL) = 0; + /** + @brief Gibt den Pfad zum aktuellen Verzeichnis zurück. + @return Gibt einen String zurück, der den Pfad zum aktuellen Verzeichnis enthält.
+ Falls der Pfad nicht bestimmt werden konnte wird ein leerer String zurückgegeben. + @remark Zum Trennen von Pfadelementen wird "/" und nicht "\" verwendet. + */ + virtual std::string GetCurrentDirectory() = 0; + /** + @brief Wechselt das aktuelle Verzeichnis. + @param Directory ein String der das Verzeichnis bezeichnet, in dass gewechselt werden soll.
+ Die Pfadangabe darf relativ sein. + @return Gibt true zurück, falls der Vorgang erfolgreich war, ansonsten false. + @remark Zum Trennen von Pfadelementen wird "/" und nicht "\" verwendet. + */ + virtual bool ChangeDirectory(const std::string& Directory) = 0; + /** + @brief Gibt den absoluten Pfad zu einer Datei im virtuellen Verzeichnisbaum zurück. + @param FileName der Dateiname der Datei, deren absoluter Pfad bestimmt werden soll.
+ Diese Parameter kann sowohl relative als auch absolute Pfadangaben beinhalten. + @return Gibt einen String zurück, der den absoluten Pfad zur übergebenen Datei enthält.
+ Falls der absolute Pfad nicht bestimmt werden konnte, wird ein leerer String zurückgegeben. + @remark Zum Trennen von Pfadelementen wird "/" und nicht "\" verwendet. + */ + virtual std::string GetAbsolutePath(const std::string& FileName) = 0; + /** + @brief Erstellt ein BS_PackageManager::FileSearch Objekt mit dem Nach Dateien gesucht werden kann. + @param Filter gibt den Suchstring an. Dieser darf die Wildcards '*' und '?' enthalten. + @param Path gibt das Verzeichnis an, welches durchsucht werden soll. + @param TypeFilter ist eine Kombination der Flags BS_PackageManager::FT_DIRECTORY und BS_PackageManager::FT_FILE.
+ Diese Flags geben an, ob nach Dateien oder Verzeichnissen oder beiden gesucht werden soll.
+ Der Standardwert ist BS_PackageManager::FT_DIRECTORY | BS_PackageManager::FT_FILE. + @return Gibt einen Pointer auf ein BS_PackageManager::FileSearch Objekt zurück, oder NULL wenn keine Datei gefunden wurde. + @remark Nicht vergessen, das Objekt nach Benutzung mit delete freizugeben. + */ + virtual FileSearch* CreateSearch(const std::string& Filter, const std::string& Path, unsigned int TypeFilter = FT_DIRECTORY | FT_FILE) = 0; + + /** + * @brief Gibt die Dateigröße zurück. + * @param FileName die Datei. + * @return die Dateigröße. Im Falle eines Fehlers wird 0xffffffff zurückgegeben. + * @remarks Bei komprimierten Containern wird die unkomprimierte Größe zurückgegeben. + **/ + virtual unsigned int GetFileSize(const std::string& FileName) = 0; + + /** + @brief Gibt den Typ einer Datei zurück. + @param FileName der Dateiname + @return Gibt den Dateityp zurück (BS_PackageManager::FT_DIRECTORY oder BS_PackageManager::FT_FILE).
+ Falls die Datei nicht gefunden wurde wird 0 zurückgegeben. + */ + virtual unsigned int GetFileType(const std::string & FileName) = 0; + + /** + @brief Bestimmt, ob eine Datei existiert. + @param FileName der Dateiname + @return Gibt true zurück, wenn die Datei existiert, ansonsten false. + */ + virtual bool FileExists(const std::string & FileName) = 0; + +private: + bool _RegisterScriptBindings(); +}; + +#endif -- cgit v1.2.3