]> git.lyx.org Git - lyx.git/blob - development/Win32/patches/aiksaurus-june06.patch
tiny encoding fix for LyXWinInstaller
[lyx.git] / development / Win32 / patches / aiksaurus-june06.patch
1 Index: base/Aiksaurus.cpp\r
2 ===================================================================\r
3 RCS file: /cvsroot/aiksaurus/base/Aiksaurus.cpp,v\r
4 retrieving revision 1.5\r
5 diff -u -r1.5 Aiksaurus.cpp\r
6 --- base/Aiksaurus.cpp  3 Apr 2005 19:10:55 -0000       1.5\r
7 +++ base/Aiksaurus.cpp  12 Jul 2006 21:00:20 -0000\r
8 @@ -36,36 +36,69 @@\r
9  using namespace std;\r
10  \r
11  #if defined WIN32\r
12 +\r
13  #ifdef AIK_DATA_DIR\r
14  #undef AIK_DATA_DIR\r
15  #endif\r
16 -       #include <windows.h>\r
17 -       #define WIN32_LEAN_AND_MEAN\r
18 -       // Default aik_data_dir is local directory\r
19 -       std::string AIK_DATA_DIR(".\\");\r
20 -       // Regestry Reading for AIK_DATA_DIR\r
21 -       void ReadRegistry()\r
22 -       {\r
23 -               HKEY hKey;\r
24 -               unsigned long lType;    \r
25 -               DWORD dwSize;\r
26 -               unsigned char* szValue = NULL;\r
27 -               if( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Software\\Aiksaurus", 0, KEY_READ, &hKey) == ERROR_SUCCESS )\r
28 -               {\r
29 -                       // Determine size of string\r
30 -                       if( ::RegQueryValueEx( hKey, "Data_Dir", NULL, &lType, NULL, &dwSize) == ERROR_SUCCESS )\r
31 -                       {\r
32 -                               szValue = new unsigned char[dwSize + 1];\r
33 -                               ::RegQueryValueEx( hKey, "Data_Dir", NULL, &lType, szValue, &dwSize);\r
34 -                               AIK_DATA_DIR = (char*) szValue;\r
35 -                               delete[] szValue;\r
36 -                       }\r
37 -               }\r
38 -       }\r
39 +\r
40 +#ifndef HAVE_GETENV\r
41 +#define HAVE_GETENV\r
42 +#endif\r
43 +\r
44 +#include <windows.h>\r
45 +#define WIN32_LEAN_AND_MEAN\r
46 +       \r
47 +// Default aik_data_dir is local directory\r
48 +std::string AIK_DATA_DIR(".\\");\r
49 +       \r
50 +       std::string ReadRegString(HKEY hive, std::string key, std::string name)\r
51 +    {\r
52 +\r
53 +        // Reads a string from the Windows registry (used to get paths)\r
54 +\r
55 +        HKEY hKey;\r
56 +        unsigned long lType;\r
57 +        DWORD dwSize;\r
58 +        unsigned char* szValue = NULL;\r
59 +\r
60 +        if (::RegOpenKeyEx(hive, key.c_str(), 0, KEY_READ, &hKey) == ERROR_SUCCESS)\r
61 +        {\r
62 +            if(::RegQueryValueEx(hKey, name.c_str(), NULL, &lType, NULL, &dwSize) == ERROR_SUCCESS)\r
63 +            {\r
64 +                szValue = new unsigned char[dwSize + 1];\r
65 +                ::RegQueryValueEx(hKey, name.c_str(), NULL, &lType, szValue, &dwSize);\r
66 +                std::string RegistryReturn((char*)szValue);\r
67 +                delete[] szValue;\r
68 +                return RegistryReturn;\r
69 +            } else {\r
70 +                return "";\r
71 +            }\r
72 +        } else {\r
73 +            return "";\r
74 +        }\r
75 +    }\r
76 +\r
77 +    HKEY GetRegHive()\r
78 +    {\r
79 +\r
80 +        // Check whether Aiksaurus is installed for the current user or for all users\r
81 +\r
82 +        std::string value;\r
83 +\r
84 +        if (ReadRegString(HKEY_LOCAL_MACHINE, "Software\\Aiksaurus", "Data Path") == "")\r
85 +        {\r
86 +            return HKEY_CURRENT_USER;\r
87 +        } else {\r
88 +            return HKEY_LOCAL_MACHINE;\r
89 +        }\r
90 +\r
91 +    }\r
92 +       \r
93         #if defined _DLL_BUILD\r
94                 //Add a DllMain Entry point\r
95                 BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; }\r
96         #endif\r
97 +\r
98  #endif\r
99  \r
100  namespace AiksaurusImpl\r
101 @@ -256,14 +289,25 @@\r
102      try\r
103      {\r
104  #if defined WIN32\r
105 -               ReadRegistry();\r
106 +        std::string base(AIK_DATA_DIR);\r
107 +        std::string value;\r
108 +        HKEY hive;\r
109 +\r
110 +        hive = GetRegHive();\r
111 +        value = (hive, "Software\\Aiksaurus", "Data Path");\r
112 +        if (value != "") base == value;\r
113  #endif\r
114 -       std::string base(AIK_DATA_DIR);\r
115 +               \r
116  #ifdef HAVE_GETENV\r
117 -       char * aikdatadir_envvar = getenv ("AIK_DATA_DIR");\r
118 -       if (aikdatadir_envvar) base = std::string(aikdatadir_envvar);\r
119 +        char * aikdatadir_envvar = getenv ("AIK_DATA_DIR");\r
120 +        if (aikdatadir_envvar) base = std::string(aikdatadir_envvar);\r
121 +#endif\r
122 +\r
123 +#if defined WIN32\r
124 +        if (base.substr(base.length() - 1, 1) != "\\") base.append("\\");\r
125  #endif\r
126 -       std::string mfile(base + "meanings.dat");\r
127 +\r
128 +        std::string mfile(base + "meanings.dat");\r
129          std::string wfile(base + "words.dat");\r
130          d_impl_ptr = new ThesaurusImpl(mfile.c_str(), wfile.c_str());\r
131      }\r