mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-12-28 00:14:51 +01:00
122 lines
2.7 KiB
C++
122 lines
2.7 KiB
C++
|
/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */
|
||
|
|
||
|
/* rcg10072001 Implemented. */
|
||
|
|
||
|
// !!! FIXME: rcg10142001 This should really be using CTStrings...
|
||
|
|
||
|
#include <io.h>
|
||
|
|
||
|
#include <Engine/Engine.h>
|
||
|
#include <Engine/Base/FileSystem.h>
|
||
|
|
||
|
ENGINE_API CFileSystem *_pFileSystem = NULL;
|
||
|
|
||
|
|
||
|
class CWin32FileSystem : public CFileSystem
|
||
|
{
|
||
|
public:
|
||
|
CWin32FileSystem(const char *argv0, const char *gamename);
|
||
|
virtual ~CWin32FileSystem(void);
|
||
|
virtual void GetExecutablePath(char *buf, ULONG bufSize);
|
||
|
virtual void GetUserDirectory(char *buf, ULONG bufSize);
|
||
|
virtual CDynamicArray<CTString> *FindFiles(const char *dir,
|
||
|
const char *wildcard);
|
||
|
|
||
|
protected:
|
||
|
char *exePath;
|
||
|
char *userDir;
|
||
|
};
|
||
|
|
||
|
|
||
|
const char *CFileSystem::GetDirSeparator(void)
|
||
|
{
|
||
|
return("\\");
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL CFileSystem::IsDummyFile(const char *fname)
|
||
|
{
|
||
|
return( (strcmp(fname, ".") == 0) || (strcmp(fname, "..") == 0) );
|
||
|
}
|
||
|
|
||
|
BOOL CFileSystem::Exists(const char *fname)
|
||
|
{
|
||
|
ASSERTALWAYS("Write me!");
|
||
|
}
|
||
|
|
||
|
BOOL CFileSystem::IsDirectory(const char *fname)
|
||
|
{
|
||
|
ASSERTALWAYS("Write me!");
|
||
|
}
|
||
|
|
||
|
CFileSystem *CFileSystem::GetInstance(const char *argv0, const char *gamename)
|
||
|
{
|
||
|
return(new CWin32FileSystem(argv0, gamename));
|
||
|
}
|
||
|
|
||
|
|
||
|
CWin32FileSystem::CWin32FileSystem(const char *argv0, const char *gamename)
|
||
|
: exePath(NULL),
|
||
|
: userDir(NULL)
|
||
|
{
|
||
|
char buf[MAX_PATH];
|
||
|
memset(buf, '\0', sizeof (buf));
|
||
|
GetModuleFileName(NULL, buf, sizeof (buf) - 1);
|
||
|
|
||
|
exePath = new char[strlen(buf) + 1];
|
||
|
strcpy(exePath, buf);
|
||
|
|
||
|
userDir = new char[strlen(buf) + 1];
|
||
|
strcpy(userDir, buf);
|
||
|
ASSERTALWAYS("We need to chop \\bin\\debug off the string if it's there.\n");
|
||
|
}
|
||
|
|
||
|
|
||
|
CWin32FileSystem::~CWin32FileSystem(void)
|
||
|
{
|
||
|
delete[] exePath;
|
||
|
delete[] userDir;
|
||
|
}
|
||
|
|
||
|
|
||
|
void CWin32FileSystem::GetExecutablePath(char *buf, ULONG bufSize)
|
||
|
{
|
||
|
strncpy(buf, exePath, bufSize);
|
||
|
buf[bufSize - 1] = '\0'; // just in case.
|
||
|
}
|
||
|
|
||
|
|
||
|
void CWin32FileSystem::GetUserDirectory(char *buf, ULONG bufSize)
|
||
|
{
|
||
|
strncpy(buf, userDir, bufSize);
|
||
|
buf[bufSize - 1] = '\0'; // just in case.
|
||
|
}
|
||
|
|
||
|
|
||
|
CDynamicArray<CTString> CWin32FileSystem::FindFiles(const char *dir,
|
||
|
const char *wildcard)
|
||
|
{
|
||
|
CDynamicArray<CTString> *retval = new CDynamicArray<CTString>;
|
||
|
|
||
|
CTString str(dir);
|
||
|
if (dir[strlen(dir) - 1] != '\\')
|
||
|
str += "\\";
|
||
|
|
||
|
struct _finddata_t c_file;
|
||
|
long hFile = _findfirst( (const char *)(str+wildcard), &c_file );
|
||
|
|
||
|
for (BOOL bFileExists = hFile!=-1;
|
||
|
bFileExists;
|
||
|
bFileExists = _findnext( hFile, &c_file )==0)
|
||
|
{
|
||
|
*retval->New() = c_file.name;
|
||
|
}
|
||
|
|
||
|
_findclose(hFile);
|
||
|
return(retval);
|
||
|
}
|
||
|
|
||
|
// end of Win32FileSystem.cpp ...
|
||
|
|
||
|
|