core/systems/LibrarySys.h
author David Anderson <dvander@alliedmods.net>
Mon Jun 18 07:04:22 2007 +0000 (2007-06-18)
changeset 978 54782a83a1ef
parent 794 5947b0ee60bb
child 1192 94ee3f012044
permissions -rw-r--r--
- removed OnServerCfg in favor of OnConfigsExecuted
- added AutoExecConfig() which automates safe config execution
dvander@370
     1
/**
ds@653
     2
 * vim: set ts=4 :
dvander@370
     3
 * ===============================================================
dvander@370
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@370
     5
 * ===============================================================
dvander@370
     6
 *
dvander@370
     7
 * This file is not open source and may not be copied without explicit
dvander@370
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@370
     9
 * in whole or significant part.
dvander@370
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@370
    11
 *
dvander@370
    12
 * Version: $Id$
dvander@370
    13
 */
dvander@370
    14
dvander@141
    15
#ifndef _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_
dvander@141
    16
#define _INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_
dvander@141
    17
dvander@141
    18
#include <ILibrarySys.h>
dvander@141
    19
#include "sm_platform.h"
dvander@141
    20
dvander@141
    21
using namespace SourceMod;
dvander@141
    22
dvander@141
    23
#if defined PLATFORM_WINDOWS
dvander@141
    24
typedef HMODULE		LibraryHandle;
dvander@351
    25
#elif defined PLATFORM_POSIX
dvander@141
    26
typedef void *		LibraryHandle;
dvander@141
    27
#endif
dvander@141
    28
dvander@141
    29
class CDirectory : public IDirectory
dvander@141
    30
{
dvander@141
    31
public:
dvander@141
    32
	CDirectory(const char *path);
dvander@141
    33
	~CDirectory();
dvander@141
    34
public:
faluco@641
    35
	bool MoreFiles();
faluco@641
    36
	void NextEntry();
faluco@641
    37
	const char *GetEntryName();
faluco@641
    38
	bool IsEntryDirectory();
faluco@641
    39
	bool IsEntryFile();
faluco@641
    40
	bool IsEntryValid();
dvander@141
    41
public:
dvander@141
    42
	bool IsValid();
dvander@141
    43
private:
dvander@141
    44
#if defined PLATFORM_WINDOWS
dvander@141
    45
	HANDLE m_dir;
dvander@141
    46
	WIN32_FIND_DATAA m_fd;
dvander@351
    47
#elif defined PLATFORM_POSIX
dvander@141
    48
	DIR *m_dir;
dvander@141
    49
	struct dirent *ep;
dvander@141
    50
	char m_origpath[PLATFORM_MAX_PATH];
dvander@141
    51
#endif
dvander@141
    52
};
dvander@141
    53
dvander@141
    54
class CLibrary : public ILibrary
dvander@141
    55
{
dvander@141
    56
public:
dvander@141
    57
	CLibrary(LibraryHandle me);
dvander@141
    58
	~CLibrary();
dvander@141
    59
public:
faluco@641
    60
	void CloseLibrary();
faluco@641
    61
	void *GetSymbolAddress(const char *symname);
dvander@141
    62
private:
dvander@141
    63
	LibraryHandle m_lib;
dvander@141
    64
};
dvander@141
    65
dvander@145
    66
class LibrarySystem : public ILibrarySys
dvander@141
    67
{
dvander@141
    68
public:
ds@755
    69
	ILibrary *OpenLibrary(const char *path, char *error, size_t maxlength);
faluco@641
    70
	IDirectory *OpenDirectory(const char *path);
faluco@641
    71
	void CloseDirectory(IDirectory *dir);
faluco@641
    72
	bool PathExists(const char *path);
faluco@641
    73
	bool IsPathFile(const char *path);
faluco@641
    74
	bool IsPathDirectory(const char *path);
ds@755
    75
	void GetPlatformError(char *error, size_t maxlength);
faluco@641
    76
	size_t PathFormat(char *buffer, size_t len, const char *fmt, ...);
ds@794
    77
	const char *GetFileExtension(const char *filename);
dvander@978
    78
	bool CreateDirectory(const char *path);
dvander@978
    79
	size_t GetFileFromPath(char *buffer, size_t maxlength, const char *path);
dvander@141
    80
};
dvander@141
    81
dvander@141
    82
extern LibrarySystem g_LibSys;
dvander@141
    83
dvander@141
    84
#endif //_INCLUDE_SOURCEMOD_SYSTEM_LIBRARY_H_