Embarcadero/Borland
Posted: Tue Mar 06, 2012 1:41 pm
Since I saw some older messages, I successfully run IrrLicht with Embarcadero/Borland!
BTW: 3dsmax import (with the help of 3dsmax-sdk-help) works also perfect.
Just some small changes to compile the IrrLicht.DLL:
define
IRRLICHT_EXPORTS
for compiler.
IrrCompileConfig.h:
irrmath.h
CFileSystem.cpp:
BTW: 3dsmax import (with the help of 3dsmax-sdk-help) works also perfect.
Just some small changes to compile the IrrLicht.DLL:
define
IRRLICHT_EXPORTS
for compiler.
IrrCompileConfig.h:
Code: Select all
...
#ifdef __BORLANDC__
#define sqrtf(x) ((float)sqrt(x))
#endif
...
//Removed dx8:
#undef _IRR_COMPILE_WITH_DIRECT3D_8_
...
Code: Select all
//defined in IrrCompileConfig.h!
#ifdef sqrtf
#undef sqrtf
#endif
Code: Select all
//! Creates a list of files and directories in the current working directory
IFileList* CFileSystem::createFileList()
{
CFileList* r = 0;
io::path Path = getWorkingDirectory();
Path.replace('\\', '/');
if (Path.lastChar() != '/')
Path.append('/');
//! Construct from native filesystem
if (FileSystemType == FILESYSTEM_NATIVE)
{
// --------------------------------------------
//! Windows version
#ifdef _IRR_WINDOWS_API_
#if !defined ( _WIN32_WCE )
r = new CFileList(Path, true, false);
//BIRDIE
#ifndef __BORLANDC__
struct _tfinddata_t c_file;
long hFile;
if( (hFile = _tfindfirst( _T("*"), &c_file )) != -1L )
{
do
{
r->addItem(Path + c_file.name, c_file.size, (_A_SUBDIR & c_file.attrib) != 0, 0);
}
while( _tfindnext( hFile, &c_file ) == 0 );
_findclose( hFile );
}
#else
struct ffblk c_file;
long hFile;
if( (hFile = findfirst( _T("*"), &c_file, 0 )) != -1L )
{
do
{
r->addItem(Path + c_file.ff_name, c_file.ff_fsize, (_A_SUBDIR & c_file.ff_attrib) != 0, 0);
}
while( findnext( &c_file ) == 0 );
findclose( &c_file );
}
#endif
#endif
//TODO add drives
//entry.Name = "E:\\";
//entry.isDirectory = true;
//Files.push_back(entry);
#endif
// --------------------------------------------
//! Linux version
#if (defined(_IRR_POSIX_API_) || defined(_IRR_OSX_PLATFORM_))
r = new CFileList(Path, false, false);
r->addItem(Path + "..", 0, true, 0);
//! We use the POSIX compliant methods instead of scandir
DIR* dirHandle=opendir(Path.c_str());
if (dirHandle)
{
struct dirent *dirEntry;
while ((dirEntry=readdir(dirHandle)))
{
u32 size = 0;
bool isDirectory = false;
if((strcmp(dirEntry->d_name, ".")==0) ||
(strcmp(dirEntry->d_name, "..")==0))
{
continue;
}
struct stat buf;
if (stat(dirEntry->d_name, &buf)==0)
{
size = buf.st_size;
isDirectory = S_ISDIR(buf.st_mode);
}
#if !defined(_IRR_SOLARIS_PLATFORM_) && !defined(__CYGWIN__)
// only available on some systems
else
{
isDirectory = dirEntry->d_type == DT_DIR;
}
#endif
r->addItem(Path + dirEntry->d_name, size, isDirectory, 0);
}
closedir(dirHandle);
}
#endif
}
else
{
//! create file list for the virtual filesystem
r = new CFileList(Path, false, false);
//! add relative navigation
SFileListEntry e2;
SFileListEntry e3;
//! PWD
r->addItem(Path + ".", 0, true, 0);
//! parent
r->addItem(Path + "..", 0, true, 0);
//! merge archives
for (u32 i=0; i < FileArchives.size(); ++i)
{
const IFileList *merge = FileArchives[i]->getFileList();
for (u32 j=0; j < merge->getFileCount(); ++j)
{
if (core::isInSameDirectory(Path, merge->getFullFileName(j)) == 0)
{
r->addItem(merge->getFullFileName(j), merge->getFileSize(j), merge->isDirectory(j), 0);
}
}
}
}
if (r)
r->sort();
return r;
}