--- 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 {
@@ -777,4 +790,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
@@ -298,6 +303,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 <langinfo.h>
 #endif
 
+#include "info.hpp"
+#include <windows.h>
 #include "cache.hpp"
 #include "asc_ctype.hpp"
 #include "config.hpp"
