dvander@370: /** ds@653: * vim: set ts=4 : dvander@370: * =============================================================== dvander@370: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@370: * =============================================================== dvander@370: * dvander@370: * This file is not open source and may not be copied without explicit dvander@370: * written permission of AlliedModders LLC. This file may not be redistributed dvander@370: * in whole or significant part. dvander@370: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php dvander@370: * dvander@370: * Version: $Id$ dvander@370: */ dvander@370: dvander@141: #ifndef _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_ dvander@141: #define _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_ dvander@141: dvander@141: #include dvander@141: #include "sm_platform.h" dvander@141: dvander@141: using namespace SourceMod; dvander@141: dvander@141: #if defined PLATFORM_WINDOWS dvander@141: typedef HMODULE LibraryHandle; dvander@351: #elif defined PLATFORM_POSIX dvander@141: typedef void * LibraryHandle; dvander@141: #endif dvander@141: dvander@141: class CDirectory : public IDirectory dvander@141: { dvander@141: public: dvander@141: CDirectory(const char *path); dvander@141: ~CDirectory(); dvander@141: public: faluco@641: bool MoreFiles(); faluco@641: void NextEntry(); faluco@641: const char *GetEntryName(); faluco@641: bool IsEntryDirectory(); faluco@641: bool IsEntryFile(); faluco@641: bool IsEntryValid(); dvander@141: public: dvander@141: bool IsValid(); dvander@141: private: dvander@141: #if defined PLATFORM_WINDOWS dvander@141: HANDLE m_dir; dvander@141: WIN32_FIND_DATAA m_fd; dvander@351: #elif defined PLATFORM_POSIX dvander@141: DIR *m_dir; dvander@141: struct dirent *ep; dvander@141: char m_origpath[PLATFORM_MAX_PATH]; dvander@141: #endif dvander@141: }; dvander@141: dvander@141: class CLibrary : public ILibrary dvander@141: { dvander@141: public: dvander@141: CLibrary(LibraryHandle me); dvander@141: ~CLibrary(); dvander@141: public: faluco@641: void CloseLibrary(); faluco@641: void *GetSymbolAddress(const char *symname); dvander@141: private: dvander@141: LibraryHandle m_lib; dvander@141: }; dvander@141: dvander@145: class LibrarySystem : public ILibrarySys dvander@141: { dvander@141: public: ds@755: ILibrary *OpenLibrary(const char *path, char *error, size_t maxlength); faluco@641: IDirectory *OpenDirectory(const char *path); faluco@641: void CloseDirectory(IDirectory *dir); faluco@641: bool PathExists(const char *path); faluco@641: bool IsPathFile(const char *path); faluco@641: bool IsPathDirectory(const char *path); ds@755: void GetPlatformError(char *error, size_t maxlength); faluco@641: size_t PathFormat(char *buffer, size_t len, const char *fmt, ...); ds@794: const char *GetFileExtension(const char *filename); dvander@978: bool CreateDirectory(const char *path); dvander@978: size_t GetFileFromPath(char *buffer, size_t maxlength, const char *path); dvander@141: }; dvander@141: dvander@141: extern LibrarySystem g_LibSys; dvander@141: dvander@141: #endif //_INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_