diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e8dcf39..6ccfb687 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,10 @@ endif(WIN32 AND NOT CYGWIN) if(UNIX) add_definitions(-DHS_BUILD_FOR_UNIX) endif(UNIX) + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + add_definitions(-std=c++0x) +endif() # End HeadSpin Configuration set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") diff --git a/Sources/Plasma/Apps/plPythonPack/PythonInterface.cpp b/Sources/Plasma/Apps/plPythonPack/PythonInterface.cpp index 29553df0..fea64c96 100644 --- a/Sources/Plasma/Apps/plPythonPack/PythonInterface.cpp +++ b/Sources/Plasma/Apps/plPythonPack/PythonInterface.cpp @@ -55,7 +55,7 @@ void PythonInterface::initPython(std::string rootDir) { // initialize the Python stuff // let Python do some intialization... - Py_SetProgramName("plasma"); + Py_SetProgramName(const_cast("plasma")); Py_NoSiteFlag = 1; Py_IgnoreEnvironmentFlag = 1; Py_Initialize(); @@ -66,7 +66,7 @@ void PythonInterface::initPython(std::string rootDir) // plasmaMod = PyImport_ImportModule("Plasma"); // create the StringIO for the stdout and stderr file - PycStringIO = (struct PycStringIO_CAPI*)PyCObject_Import("cStringIO", "cStringIO_CAPI"); + PycStringIO = (struct PycStringIO_CAPI*)PyCObject_Import(const_cast("cStringIO"), const_cast("cStringIO_CAPI")); stdFile = (*PycStringIO->NewOutput)(20000); // if we need the builtins then find the builtin module PyObject* sysmod = PyImport_ImportModule("sys"); @@ -191,7 +191,7 @@ int PythonInterface::getOutputAndReset(char** line) int size = PyString_Size( pyStr ); // reset the file back to zero - PyObject_CallMethod(stdFile,"reset",""); + PyObject_CallMethod(stdFile, const_cast("reset"), const_cast("")); /* // check to see if the debug python module is loaded if ( dbgOut != nil ) diff --git a/Sources/Plasma/CoreLib/HeadSpin.cpp b/Sources/Plasma/CoreLib/HeadSpin.cpp index 156242b6..b80cacc9 100644 --- a/Sources/Plasma/CoreLib/HeadSpin.cpp +++ b/Sources/Plasma/CoreLib/HeadSpin.cpp @@ -169,8 +169,7 @@ void DebugMsg(const char fmt[], ...) OutputDebugStringA("\n"); #endif } else { - fprintf(stderr, msg); - fprintf(stderr, "\n"); + fprintf(stderr, "%s\n", msg); } } @@ -315,6 +314,7 @@ int hsMessageBoxWithOwner(hsWindowHndl owner, const char message[], const char c } #endif + return hsMBoxCancel; } int hsMessageBoxWithOwner(hsWindowHndl owner, const wchar_t message[], const wchar_t caption[], int kind, int icon) @@ -367,6 +367,7 @@ int hsMessageBoxWithOwner(hsWindowHndl owner, const wchar_t message[], const wch } #endif + return hsMBoxCancel; } int hsMessageBox(const char message[], const char caption[], int kind, int icon) diff --git a/Sources/Plasma/CoreLib/HeadSpin.h b/Sources/Plasma/CoreLib/HeadSpin.h index 08dc423e..80552eec 100644 --- a/Sources/Plasma/CoreLib/HeadSpin.h +++ b/Sources/Plasma/CoreLib/HeadSpin.h @@ -80,14 +80,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com # define NOMINMAX // Needed to prevent NxMath conflicts # endif # include +#endif - // Just some fun typedefs... - typedef HWND hsWindowHndl; - typedef HINSTANCE hsWindowInst; -#else - typedef int32_t* hsWindowHndl; - typedef int32_t* hsWindowInst; -#endif // HS_BUILD_FOR_WIN32 //====================================== // We don't want the Windows.h min/max! @@ -112,6 +106,18 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include +//====================================== +// Just some fun typedefs... +//====================================== +#ifdef HS_BUILD_FOR_WIN32 + typedef HWND hsWindowHndl; + typedef HINSTANCE hsWindowInst; +#else + typedef int32_t* hsWindowHndl; + typedef int32_t* hsWindowInst; +#endif // HS_BUILD_FOR_WIN32 + + //====================================== // Basic macros //====================================== diff --git a/Sources/Plasma/CoreLib/hsCpuID.cpp b/Sources/Plasma/CoreLib/hsCpuID.cpp index 12c99f9b..2944c3c4 100644 --- a/Sources/Plasma/CoreLib/hsCpuID.cpp +++ b/Sources/Plasma/CoreLib/hsCpuID.cpp @@ -40,7 +40,13 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com *==LICENSE==*/ -#include +#if defined(_MSC_VER) || ((defined(_WIN32) || defined(_WIN64)) && defined(__INTEL_COMPILER)) +# include +# define MSC_COMPATIBLE +#elif defined(__GNUC__) +# include +# define GCC_COMPATIBLE +#endif #include "hsCpuID.h" @@ -53,15 +59,43 @@ hsCpuId::hsCpuId() { const unsigned int sse42_flag = 1<<20; const unsigned int avx_flag = 1 << 28; - unsigned int cpu_info[4]; - __cpuid((int*)cpu_info, 1); - has_sse1 = (cpu_info[3] & sse1_flag) || false; - has_sse2 = (cpu_info[3] & sse2_flag) || false; - has_sse3 = (cpu_info[2] & sse3_flag) || false; - has_ssse3 = (cpu_info[2] & ssse3_flag) || false; - has_sse41 = (cpu_info[2] & sse41_flag) || false; - has_sse42 = (cpu_info[2] & sse42_flag) || false; - has_avx = (cpu_info[2] & avx_flag) || false; + unsigned int ax = 0, bx = 0, cx = 0, dx = 0; + + + /** + * Portable implementation of CPUID, successfully tested with: + * - Microsoft Visual Studio 2010, + * - GNU GCC 4.5, + * - Intel C++ Compiler 12.0 + * - Sun Studio 12, + * - AMD x86 Open64 Compiler Suite. + * + * Ref: http://primesieve.googlecode.com/svn-history/r388/trunk/soe/cpuid.h + */ + #if defined(MSC_COMPATIBLE) + int CPUInfo[4] = {ax, bx, cx, dx}; + __cpuid(CPUInfo, 0); + + // check if the CPU supports the cpuid instruction. + if (CPUInfo[0] != 0) { + __cpuid(CPUInfo, 1); + ax = CPUInfo[0]; + bx = CPUInfo[1]; + cx = CPUInfo[2]; + dx = CPUInfo[3]; + } + #elif defined(GCC_COMPATIBLE) + __get_cpuid(1, &ax, &bx, &cx, &dx); + #endif + + + has_sse1 = (dx & sse1_flag) || false; + has_sse2 = (dx & sse2_flag) || false; + has_sse3 = (cx & sse3_flag) || false; + has_ssse3 = (cx & ssse3_flag) || false; + has_sse41 = (cx & sse41_flag) || false; + has_sse42 = (cx & sse42_flag) || false; + has_avx = (cx & avx_flag) || false; } const hsCpuId& hsCpuId::instance() diff --git a/Sources/Plasma/CoreLib/hsWide.h b/Sources/Plasma/CoreLib/hsWide.h index e436f3dd..150348f4 100644 --- a/Sources/Plasma/CoreLib/hsWide.h +++ b/Sources/Plasma/CoreLib/hsWide.h @@ -98,7 +98,7 @@ struct hsWide { }; const hsWide kPosInfinity64 = { kPosInfinity32, 0xffffffff }; -const hsWide kNegInfinity64 = { kNegInfinity32, 0 }; +const hsWide kNegInfinity64 = { static_cast(kNegInfinity32), 0 }; /////////////////////// Inline implementations /////////////////////// diff --git a/Sources/Plasma/CoreLib/plString.cpp b/Sources/Plasma/CoreLib/plString.cpp index c60440c9..dedbf7d1 100644 --- a/Sources/Plasma/CoreLib/plString.cpp +++ b/Sources/Plasma/CoreLib/plString.cpp @@ -361,7 +361,7 @@ plStringBuffer plString::ToWchar() const plStringBuffer utf16 = ToUtf16(); return *reinterpret_cast*>(&utf16); #else - plStringBuffer result; + plStringBuffer result; if (IsEmpty()) return result; @@ -527,7 +527,7 @@ plString plString::IFormat(const char *fmt, va_list vptr) } } else if (chars >= 256) { va_copy(vptr, vptr_save); - std::auto_ptr bigbuffer(new char[chars+1]); + std::unique_ptr bigbuffer(new char[chars+1]); vsnprintf(bigbuffer.get(), chars+1, fmt, vptr); return plString::FromUtf8(bigbuffer.get(), chars); } diff --git a/Sources/Plasma/FeatureLib/pfAnimation/plLightModifier.cpp b/Sources/Plasma/FeatureLib/pfAnimation/plLightModifier.cpp index 249650b5..d0569982 100644 --- a/Sources/Plasma/FeatureLib/pfAnimation/plLightModifier.cpp +++ b/Sources/Plasma/FeatureLib/pfAnimation/plLightModifier.cpp @@ -90,7 +90,7 @@ void plLightModifier::AddTarget(plSceneObject* so) void plLightModifier::RemoveTarget(plSceneObject* so) { - if( so = fTarget ) + if (so == fTarget) fLight = nil; plSimpleModifier::RemoveTarget(so); } diff --git a/Sources/Plasma/PubUtilLib/plAudible/plWinAudible.cpp b/Sources/Plasma/PubUtilLib/plAudible/plWinAudible.cpp index b2663d0a..c329ec71 100644 --- a/Sources/Plasma/PubUtilLib/plAudible/plWinAudible.cpp +++ b/Sources/Plasma/PubUtilLib/plAudible/plWinAudible.cpp @@ -510,11 +510,11 @@ void plWinAudible::DeActivate() bool plWinAudible::MsgReceive(plMessage* msg) { - plGenRefMsg *refMsg; - if (refMsg = plGenRefMsg::ConvertNoRef(msg)) + plGenRefMsg *refMsg = plGenRefMsg::ConvertNoRef(msg); + if (refMsg) { - plSound *snd; - if (snd = plSound::ConvertNoRef(refMsg->GetRef())) + plSound *snd = plSound::ConvertNoRef(refMsg->GetRef()); + if (snd) { int index = refMsg->fWhich; if( refMsg->GetContext() & (plRefMsg::kOnCreate | plRefMsg::kOnRequest) ) diff --git a/Sources/Plasma/PubUtilLib/plDrawable/plDynaDecal.h b/Sources/Plasma/PubUtilLib/plDrawable/plDynaDecal.h index a9ec4135..41b2f544 100644 --- a/Sources/Plasma/PubUtilLib/plDrawable/plDynaDecal.h +++ b/Sources/Plasma/PubUtilLib/plDrawable/plDynaDecal.h @@ -94,6 +94,7 @@ protected: friend class plDynaDecalMgr; public: + virtual ~plDynaDecal() { } virtual bool Age(double t, float ramp, float decay, float life) = 0; }; diff --git a/Sources/Plasma/PubUtilLib/plDrawable/plSpaceTree.cpp b/Sources/Plasma/PubUtilLib/plDrawable/plSpaceTree.cpp index 547207b5..337e524c 100644 --- a/Sources/Plasma/PubUtilLib/plDrawable/plSpaceTree.cpp +++ b/Sources/Plasma/PubUtilLib/plDrawable/plSpaceTree.cpp @@ -291,7 +291,8 @@ void plSpaceTree::HarvestEnabledLeaves(plVolumeIsect* cull, const hsBitVector& c if( IsEmpty() ) return; - if( fCullFunc = cull ) + fCullFunc = cull; + if (fCullFunc) IHarvestAndCullEnabledLeaves(fRoot, cache, list); else IHarvestEnabledLeaves(fRoot, cache, list); @@ -372,7 +373,8 @@ void plSpaceTree::HarvestLeaves(plVolumeIsect* cull, hsBitVector& list) const { if( !IsEmpty() ) { - if( fCullFunc = cull ) + fCullFunc = cull; + if (fCullFunc) IHarvestAndCullLeaves(fTree[fRoot], scratchTotVec, list); else IHarvestLeaves(fTree[fRoot], scratchTotVec, list); diff --git a/Sources/Plasma/PubUtilLib/plGImage/plPNG.cpp b/Sources/Plasma/PubUtilLib/plGImage/plPNG.cpp index 68edd122..dba495c8 100644 --- a/Sources/Plasma/PubUtilLib/plGImage/plPNG.cpp +++ b/Sources/Plasma/PubUtilLib/plGImage/plPNG.cpp @@ -191,7 +191,7 @@ plMipmap* plPNG::ReadFromFile(const wchar_t* fileName) hsUNIXStream in; if (!in.Open(fileName, L"rb")) { - return false; + return nil; } plMipmap* ret = IRead(&in); diff --git a/Sources/Plasma/PubUtilLib/plGLight/plShadowSlave.h b/Sources/Plasma/PubUtilLib/plGLight/plShadowSlave.h index 3821dd70..e0fb9fd3 100644 --- a/Sources/Plasma/PubUtilLib/plGLight/plShadowSlave.h +++ b/Sources/Plasma/PubUtilLib/plGLight/plShadowSlave.h @@ -99,6 +99,8 @@ public: kPositional = 0x80 }; + virtual ~plShadowSlave() { } + void SetFlag(SlaveFlag f, bool on) { if(on) fFlags |= f; else fFlags &= ~f; } bool HasFlag(SlaveFlag f) const { return 0 != (fFlags & f); } diff --git a/Sources/Plasma/PubUtilLib/plJPEG/plJPEG.cpp b/Sources/Plasma/PubUtilLib/plJPEG/plJPEG.cpp index 93b25178..e7796b1b 100644 --- a/Sources/Plasma/PubUtilLib/plJPEG/plJPEG.cpp +++ b/Sources/Plasma/PubUtilLib/plJPEG/plJPEG.cpp @@ -246,7 +246,7 @@ plMipmap* plJPEG::ReadFromFile( const wchar_t *fileName ) hsRAMStream tempstream; hsUNIXStream in; if (!in.Open(fileName, L"rb")) - return false; + return nil; // The stream reader for JPEGs expects a 32-bit size at the start, // so insert that into the stream before passing it on diff --git a/Sources/Plasma/PubUtilLib/plPipeline/plPlates.cpp b/Sources/Plasma/PubUtilLib/plPipeline/plPlates.cpp index 5245d130..4e6a4561 100644 --- a/Sources/Plasma/PubUtilLib/plPipeline/plPlates.cpp +++ b/Sources/Plasma/PubUtilLib/plPipeline/plPlates.cpp @@ -551,7 +551,7 @@ void plGraphPlate::SetDataColors( const std::vector & hexColors ) //// SetLabelText //////////////////////////////////////////////////////////// -void plGraphPlate::SetLabelText( char *text1, char *text2, char *text3, char *text4 ) +void plGraphPlate::SetLabelText(const char *text1, const char *text2, const char *text3, const char *text4 ) { std::vector strings; if( text1 != nil ) diff --git a/Sources/Plasma/PubUtilLib/plPipeline/plPlates.h b/Sources/Plasma/PubUtilLib/plPipeline/plPlates.h index 0179c10b..6d92eaaa 100644 --- a/Sources/Plasma/PubUtilLib/plPipeline/plPlates.h +++ b/Sources/Plasma/PubUtilLib/plPipeline/plPlates.h @@ -170,7 +170,7 @@ class plGraphPlate : public plPlate void SetDataRange( uint32_t min, uint32_t max, uint32_t width ); void SetDataLabels( uint32_t min, uint32_t max ); - void SetLabelText( char *text1, char *text2 = nil, char *text3 = nil, char *text4 = nil ); + void SetLabelText(const char *text1, const char *text2 = nil, const char *text3 = nil, const char *text4 = nil ); void SetLabelText( const std::vector & text ); void ClearData( void ); diff --git a/Sources/Plasma/PubUtilLib/plResMgr/plResManager.cpp b/Sources/Plasma/PubUtilLib/plResMgr/plResManager.cpp index 5de1d7dc..f97756a4 100644 --- a/Sources/Plasma/PubUtilLib/plResMgr/plResManager.cpp +++ b/Sources/Plasma/PubUtilLib/plResMgr/plResManager.cpp @@ -244,7 +244,7 @@ plRegistryPageNode* plResManager::FindSinglePage(const char* path) const PageMap::const_iterator it; for (it = fAllPages.begin(); it != fAllPages.end(); it++) { - if (strcmpi((it->second)->GetPagePath(), path) == 0) + if (stricmp((it->second)->GetPagePath(), path) == 0) return it->second; } @@ -423,12 +423,18 @@ bool plResManager::IReadObject(plKeyImp* pKey, hsStream *stream) ko = hsKeyedObject::ConvertNoRef(cre); if (ko != nil) + { kResMgrLog(4, ILog(4, " ...Creatable read and valid")); + } else + { kResMgrLog(3, ILog(3, " ...Creatable read from stream not keyed object!")); + } if (fProgressProc != nil) + { fProgressProc(plKey::Make(pKey)); + } } else { @@ -1651,8 +1657,8 @@ plRegistryPageNode* plResManager::FindPage(const char* age, const char* page) co for (it = fAllPages.begin(); it != fAllPages.end(); ++it) { const plPageInfo& info = (it->second)->GetPageInfo(); - if (strcmpi(info.GetAge(), age) == 0 && - strcmpi(info.GetPage(), page) == 0) + if (stricmp(info.GetAge(), age) == 0 && + stricmp(info.GetPage(), page) == 0) return it->second; } @@ -1766,7 +1772,7 @@ bool plResManager::IteratePages(plRegistryPageIterator* iterator, const char* ag if (page->GetPageInfo().GetLocation() == plLocation::kGlobalFixedLoc) continue; - if (!ageToRestrictTo || strcmpi(page->GetPageInfo().GetAge(), ageToRestrictTo) == 0) + if (!ageToRestrictTo || stricmp(page->GetPageInfo().GetAge(), ageToRestrictTo) == 0) { if (!iterator->EatPage(page)) {