diff --git a/source/src/main.cpp b/source/src/main.cpp index 1ab38703..d22bfbde 100644 --- a/source/src/main.cpp +++ b/source/src/main.cpp @@ -482,12 +482,10 @@ int main(int argc, char **argv) case '-': if(!strncmp(argv[i], "--home=", 7)) { - printf("Using home directory: %s\n", &argv[i][7]); sethomedir(&argv[i][7]); } else if(!strncmp(argv[i], "--mod=", 6)) { - printf("Adding package directory: %s\n", &argv[i][6]); addpackagedir(&argv[i][6]); } else if(!strcmp(argv[i], "--init")) diff --git a/source/src/tools.cpp b/source/src/tools.cpp index 6891c96f..d9c62a50 100644 --- a/source/src/tools.cpp +++ b/source/src/tools.cpp @@ -15,6 +15,30 @@ string homedir = ""; vector packagedirs; +#ifdef WIN32 +char *getregszvalue(HKEY root, const char *keystr, const char *query) +{ + HKEY key; + if(RegOpenKeyEx(HKEY_CURRENT_USER, keystr, 0, KEY_READ, &key)==ERROR_SUCCESS) + { + DWORD type = 0, len = 0; + if(RegQueryValueEx(key, query, 0, &type, 0, &len)==ERROR_SUCCESS && type==REG_SZ) + { + LPSTR val = new char[len]; + long result = RegQueryValueEx(key, query, 0, &type, (unsigned char *)val, &len); + if(result==ERROR_SUCCESS) + { + RegCloseKey(key); + return val; + } + else delete[] val; + } + RegCloseKey(key); + } + return NULL; +} +#endif + char *path(char *s) { for(char *t = s; (t = strpbrk(t, "/\\")); *t++ = PATHDIV); @@ -104,12 +128,30 @@ static void fixdir(char *dir) void sethomedir(const char *dir) { - fixdir(s_strcpy(homedir, dir)); + string tmpdir; + s_strcpy(tmpdir, dir); + +#ifdef WIN32 + const char substitute[] = "?MYDOCUMENTS?"; + if(!strncmp(dir, substitute, strlen(substitute))) + { + char *mydocuments = getregszvalue(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", "Personal"); + if(mydocuments) + { + s_sprintf(tmpdir)("%s%s", mydocuments, dir+strlen(substitute)); + DELETEP(mydocuments); + } + } +#endif + + printf("Using home directory: %s\n", tmpdir); + fixdir(s_strcpy(homedir, tmpdir)); createdir(homedir); } void addpackagedir(const char *dir) { + printf("Adding package directory: %s\n", dir); fixdir(packagedirs.add(newstringbuf(dir))); }