blob: 3f701367a46cb455711598f8b543fbc39a678314 [file] [log] [blame]
--- plplot-5.13.0/src/plctrl.c.orig
+++ plplot-5.13.0/src/plctrl.c
@@ -56,6 +56,10 @@
#include <errno.h>
#endif
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
// Random number generator (Mersenne Twister)
#include "mt19937ar.h"
@@ -68,6 +72,10 @@
// work even in the single precision floating point case.
#define FUZZ_EPSILON 1.e-4
+#ifdef _WIN32
+static HMODULE handle_dll;
+#endif
+
// Static functions
// Used by any external init code to suggest a path
@@ -124,6 +132,41 @@
#endif
#endif
+
+#ifdef _WIN32
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+ DWORD fdwReason,
+ LPVOID lpvReserved)
+{
+ switch (fdwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ handle_dll = (HMODULE) hinstDLL;
+ break;
+ }
+
+ return TRUE;
+}
+
+char * plGetWinInstallDir()
+{
+ char *path;
+ char *p;
+
+ path = (char*) malloc(MAX_PATH);
+
+ GetModuleFileName(handle_dll, path, MAX_PATH);
+
+ p = strrchr (path, '\\');
+ *p = '\0';
+ p = strrchr (path, '\\');
+ *p = '\0';
+
+ return path;
+}
+#endif
+
//--------------------------------------------------------------------------
// Routines that deal with colors & color maps.
@@ -2189,6 +2232,14 @@
return fs;
#endif
+#ifdef _WIN32
+ dn = plGetWinInstallDir();
+ plGetName( dn, "bin", fn, &fs );
+ free(dn);
+ if ( !plFindName( fs ) )
+ return fs;
+#endif
+
// Crapped out
free_mem( fs );
@@ -2323,6 +2374,15 @@
if ( file != NULL )
goto done;
#endif // macintosh
+
+#ifdef _WIN32
+ dn = plGetWinInstallDir();
+ plGetName( dn, "share\\plplot" PLPLOT_VERSION, fn, &fs );
+ free(dn);
+ if ( ( file = pdf_fopen( fs, "rb" ) ) != NULL )
+ goto done;
+ fprintf( stderr, "WININSTALLDIR =\"%s\" ; file=\"%s\"\n", dn, fs ); // what IS set?
+#endif
if ( plplotLibDir != NULL )
{