]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkUtilities.cxx
#3212 BBTK Feature New Normal - vtk8itk4wx3-mingw64
[bbtk.git] / kernel / src / bbtkUtilities.cxx
index 747f772fdcf67fa7fa0f94c593f39c95b752df68..c7cce8103712581dc28b29f8e712352fd1266dac 100644 (file)
 
 
 
+#include "creaSystem.h"
 #include "bbtkUtilities.h"
 #include "bbtkMessageManager.h"
 
+//EED 2018-07-16
+#if defined(_WIN32) 
+       #include <shlwapi.h>
+#endif
+
 #if defined(MACOSX) // assume this is OSX 
 # include <sys/param.h>
 # include <mach-o/dyld.h> // _NSGetExecutablePath : must add -framework CoreFoundation to link line 
@@ -282,8 +288,10 @@ namespace bbtk
        libname += pkgname;
 #if defined(MACOSX)
          libname += ".dylib";
-#else
-         libname += ".so";
+#elif defined(WIN32)                 // mingw      
+         libname += ".dll";
+#else                                // Linux
+         libname += ".so";
 #endif 
          
 #elif defined(_WIN32)
@@ -332,12 +340,8 @@ namespace bbtk
   /// Returns the user settings dir, e.g. /home/username/.bbtk
   std::string Utilities::GetUserSettingsDir()
   {
-#if defined(__GNUC__)
-    std::string str_home(getenv("HOME"));
-#elif defined(_WIN32)
-    std::string str_home(getenv("USERPROFILE"));
-#endif
-    std::string fullname = str_home + "/.bbtk";
+    std::string str_Home=Utilities::GetEnvHome();
+    std::string fullname = str_Home + "/.bbtk";
     MakeValidFileName(fullname);
     return fullname;
   }
@@ -348,11 +352,7 @@ namespace bbtk
   /// in user settings dir, e.g. /home/username/.bbtk/
   std::string Utilities::MakeUserSettingsFullFileName(const std::string& name)
   {
-#if defined(__GNUC__)
-    std::string str_home(getenv("HOME"));
-#elif defined(_WIN32)
-    std::string str_home(getenv("USERPROFILE"));
-#endif
+    std::string str_home=Utilities::GetEnvHome();
     std::string fullname = str_home + "/.bbtk/" + name;
     MakeValidFileName(fullname);
     return fullname;
@@ -619,11 +619,39 @@ namespace bbtk
   }
   //=========================================================================  
   
+  
+  
+  
+//=====================================================================================
+/*  http://forums.codeguru.com/showthread.php?336106-WCHAR*-to-CHAR*
+|| ::DESCRIPTION::
+|| This function will convert a WCHAR string to a CHAR string.
+||
+|| Param 1 :: Pointer to a buffer that will contain the converted string. Ensure this
+||            buffer is large enough; if not, buffer overrun errors will occur.
+|| Param 2 :: Constant pointer to a source WCHAR string to be converted to CHAR
+*/
+/*
+void wtoc(const WCHAR* Source,CHAR* Dest)
+{
+    int i = 0;
+    while(Source[i] != '\0')
+    {
+        Dest[i] = (CHAR)Source[i];
+        ++i;
+    } // while
+}
+*/
+  
+  
+  
+  
   //=========================================================================  
   // From http://www.fltk.org/newsgroups.php?gfltk.general+v:22083
   //
   int get_app_path (char *pname, size_t pathsize)
   {
+
 #ifdef LINUX
     /* Oddly, the readlink(2) man page says no NULL is appended. */
     /* So you have to do it yourself, based on the return value: */
@@ -641,7 +669,12 @@ namespace bbtk
 #endif /* LINUX */
     
 #ifdef WIN32
-    long result = GetModuleFileName(NULL, pname, pathsize);
+
+//2018-07-06 mingw64
+    wchar_t pname2[512];
+    long result = GetModuleFileName(NULL, pname2, pathsize);
+       crea::System::wtoc(pname2,pname);
+//    long result = GetModuleFileName(NULL, pname, pathsize);
     if (result > 0)
       {
        /* fix up the dir slashes... */
@@ -739,6 +772,7 @@ namespace bbtk
     free (given_path);
     return status;
 #endif /* MACOSX */
+
     
     return -1; /* Path Lookup Failed */
   } 
@@ -751,22 +785,50 @@ namespace bbtk
   {
     char name[PATH_MAX];
     int err = get_app_path(name, PATH_MAX);
+       
     if (err) 
-      {
-       bbtkGlobalError("Could not determine current executable path ?");  
-      }
-    
+    {
+               try 
+               {
+                       bbtkGlobalError("Could not determine current executable path ?");  
+               }
+               catch (bbtk::Exception e)
+               {
+                       std::cerr << e.GetErrorMessage() << std::endl;
+               }
+    }
+             
     // remove the exe name
     char *slash;               
     slash = strrchr(name, VALID_FILE_SEPARATOR_CHAR);
     if (slash)
-      {
-       *slash = 0;
-      }
+    {
+               *slash = 0;
+    }
     return name;
   }
   //=========================================================================
 
+
+std::string Utilities::GetEnvHome()
+{
+#if defined(_WIN32)
+       std::string strHome( getenv("USERPROFILE") );
+#elif defined(__GNUC__)
+       std::string strHome;
+    char *envHome=getenv("HOME");
+    if (envHome!=NULL)  
+       { 
+               strHome=envHome; 
+       } else {
+               strHome = "/var/www/testwtdbg/docroot";
+       } // if
+#endif
+       return strHome;
+}   
+
+
+
 //TAD Arbol CFT