mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-12-30 17:44:44 +01:00
24cb244d43
This was a _ton_ of changes, made 15 years ago, so there are probably some problems to work out still. Among others: Engine/Base/Stream.* was mostly abandoned and will need to be re-ported. Still, this is a pretty good start, and probably holds a world record for lines of changes or something. :)
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 ...
|
|
|
|
|