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
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
24 - unsigned long lType;
\r
26 - unsigned char* szValue = NULL;
\r
27 - if( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Software\\Aiksaurus", 0, KEY_READ, &hKey) == ERROR_SUCCESS )
\r
29 - // Determine size of string
\r
30 - if( ::RegQueryValueEx( hKey, "Data_Dir", NULL, &lType, NULL, &dwSize) == ERROR_SUCCESS )
\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
40 +#ifndef HAVE_GETENV
\r
41 +#define HAVE_GETENV
\r
44 +#include <windows.h>
\r
45 +#define WIN32_LEAN_AND_MEAN
\r
47 +// Default aik_data_dir is local directory
\r
48 +std::string AIK_DATA_DIR(".\\");
\r
50 + std::string ReadRegString(HKEY hive, std::string key, std::string name)
\r
53 + // Reads a string from the Windows registry (used to get paths)
\r
56 + unsigned long lType;
\r
58 + unsigned char* szValue = NULL;
\r
60 + if (::RegOpenKeyEx(hive, key.c_str(), 0, KEY_READ, &hKey) == ERROR_SUCCESS)
\r
62 + if(::RegQueryValueEx(hKey, name.c_str(), NULL, &lType, NULL, &dwSize) == ERROR_SUCCESS)
\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
68 + return RegistryReturn;
\r
80 + // Check whether Aiksaurus is installed for the current user or for all users
\r
82 + std::string value;
\r
84 + if (ReadRegString(HKEY_LOCAL_MACHINE, "Software\\Aiksaurus", "Data Path") == "")
\r
86 + return HKEY_CURRENT_USER;
\r
88 + return HKEY_LOCAL_MACHINE;
\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
100 namespace AiksaurusImpl
\r
101 @@ -256,14 +289,25 @@
\r
106 + std::string base(AIK_DATA_DIR);
\r
107 + std::string value;
\r
110 + hive = GetRegHive();
\r
111 + value = (hive, "Software\\Aiksaurus", "Data Path");
\r
112 + if (value != "") base == value;
\r
114 - std::string base(AIK_DATA_DIR);
\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
124 + if (base.substr(base.length() - 1, 1) != "\\") base.append("\\");
\r
126 - std::string mfile(base + "meanings.dat");
\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