--- aspell-0.60.7-20110707/common/info.cpp.orig 2004-11-10 06:18:45.000000000 +0000 +++ aspell-0.60.7-20110707/common/info.cpp 2014-03-20 14:46:13.395537900 +0000 @@ -39,6 +39,19 @@ #include "gettext.h" +#ifdef ENABLE_W32_PREFIX +extern "C" { +static HINSTANCE dll_hinstance; + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + if (fdwReason == DLL_PROCESS_ATTACH) + dll_hinstance = hinstDLL; + return TRUE; +} +} +#endif + namespace acommon { class Dir { @@ -778,4 +789,60 @@ return data; } +#ifdef ENABLE_W32_PREFIX + +const char * +get_w32_prefix () +{ + + static char *wprefix = NULL; + +/* + Entry * next; + String key; + String value; + String file; +*/ + if (wprefix == NULL) + { + DWORD bsize = MAX_PATH; + DWORD l = bsize; + char *bslash, *slash; + char *buf = (char *) malloc (bsize); + while (l == bsize) + { + l = GetModuleFileNameA (dll_hinstance, buf, bsize); + if (l == 0) + { + DebugBreak (); + abort (); + } + if (l == bsize) + { + buf = (char *) realloc ((void *) buf, bsize * 2); + bsize *= 2; + l = bsize; + } + } + bslash = strrchr (buf, '\\'); + slash = strrchr (buf, '/'); + if (bslash > slash) + slash = bslash; + slash[0] = '\0'; + l = strlen (buf); + if (l > 3 && strcmp (&buf[l - 3], "bin") == 0) + { + bslash = strrchr (buf, '\\'); + slash = strrchr (buf, '/'); + if (bslash > slash) + slash = bslash; + slash[0] = '\0'; + } + wprefix = buf; + + } + return wprefix; +} +#endif + } --- aspell-0.60.7-20110707/common/info.hpp.orig 2004-05-30 10:49:17.000000000 +0000 +++ aspell-0.60.7-20110707/common/info.hpp 2014-03-20 14:45:24.476325900 +0000 @@ -140,8 +140,7 @@ }; - - + const char * get_w32_prefix (); } #endif /* ASPELL_INFO__HPP */ --- aspell-0.60.7-20110707/common/config.cpp.orig 2014-03-20 13:52:58.851882300 +0000 +++ aspell-0.60.7-20110707/common/config.cpp 2014-03-20 14:17:49.116621900 +0000 @@ -310,6 +310,14 @@ const Entry * res = 0; const Entry * cur = first_; +#ifdef ENABLE_W32_PREFIX + if (key == "prefix") + { + Entry *e = new Config::Entry(); + e->value = get_w32_prefix (); + return e; + } +#endif while (cur) { if (cur->key == key && cur->action != NoOp) res = cur; cur = cur->next; --- aspell-0.60.7-20110707/common/config.cpp.orig 2014-03-20 15:11:29.935614000 +0000 +++ aspell-0.60.7-20110707/common/config.cpp 2014-03-20 15:22:47.619168900 +0000 @@ -22,6 +22,8 @@ # include #endif +#include "info.hpp" +#include #include "cache.hpp" #include "asc_ctype.hpp" #include "config.hpp"