Read GOG.com and Steam Duke3D install paths from the registry instead of hard-coding the default paths.

git-svn-id: https://svn.eduke32.com/eduke32@3615 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2013-03-27 01:39:18 +00:00
parent f96788866c
commit 7e22c6d81c
4 changed files with 40 additions and 9 deletions

View file

@ -58,7 +58,7 @@ CFLAGS= /MT /J /nologo $(flags_cl) \
/W2 $(ENGINEOPTS) \
/I$(VORBISSDK)\include /DRENDERTYPEWIN=1
LIBS=user32.lib gdi32.lib shell32.lib winmm.lib ws2_32.lib comctl32.lib \
LIBS=user32.lib gdi32.lib shell32.lib winmm.lib ws2_32.lib comctl32.lib shlwapi.lib \
vorbisfile_static.lib vorbis_static.lib ogg_static.lib dsound.lib advapi32.lib
LIBS=/NODEFAULTLIB:glu32.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib /NODEFAULTLIB:libcmt.lib \

View file

@ -106,7 +106,7 @@ ifeq ($(PLATFORM),WINDOWS)
SDL_FRAMEWORK=1
BUILDCOMMONFLAGS+= -DHAVE_INTTYPES
EXESUFFIX=.exe
BUILDLIBS+= -Wl,--enable-auto-import -mwindows -lmingwex -lcomctl32 -lwinmm $(L_SSP) -lwsock32 -lws2_32
BUILDLIBS+= -Wl,--enable-auto-import -mwindows -lmingwex -lcomctl32 -lwinmm $(L_SSP) -lwsock32 -lws2_32 -lshlwapi
#-lshfolder
#BUILDLIBDIRS+= -L$(ENETROOT)
#STDCPPLIB:=-lstdc++

View file

@ -318,27 +318,41 @@ int32_t addsearchpath(const char *p)
struct Bstat st;
char *s;
searchpath_t *srch;
char *path = Bstrdup(p);
if (Bstat(p, &st) < 0)
if (path[Bstrlen(path)-1] == '\\')
path[Bstrlen(path)-1] = 0; // hack for stat() returning ENOENT on paths ending in \
if (Bstat(path, &st) < 0)
{
Bfree(path);
if (errno == ENOENT) return -2;
return -1;
}
if (!(st.st_mode & BS_IFDIR)) return -1;
if (!(st.st_mode & BS_IFDIR))
{
Bfree(path);
return -1;
}
srch = (searchpath_t *)Bmalloc(sizeof(searchpath_t));
if (!srch) return -1;
if (!srch)
{
Bfree(path);
return -1;
}
srch->next = searchpathhead;
srch->pathlen = Bstrlen(p)+1;
srch->pathlen = Bstrlen(path)+1;
srch->path = (char *)Bmalloc(srch->pathlen + 1);
if (!srch->path)
{
Bfree(path);
Bfree(srch);
return -1;
}
Bstrcpy(srch->path, p);
Bstrcpy(srch->path, path);
for (s=srch->path; *s; s++)
{
/* do nothing */
@ -355,6 +369,7 @@ int32_t addsearchpath(const char *p)
initprintf("Using %s for game data\n", srch->path);
Bfree(path);
return 0;
}

View file

@ -12,6 +12,7 @@
#ifdef _WIN32
# include "winbits.h"
#include <shlwapi.h>
#endif
#include "common.h"
@ -227,8 +228,23 @@ void G_AddSearchPaths(void)
addsearchpath("/Library/Application Support/JFDuke3D");
addsearchpath("/Library/Application Support/EDuke32");
#elif defined (_WIN32)
addsearchpath_ProgramFiles("GOG.com/Duke Nukem 3D");
addsearchpath_ProgramFiles("Steam/SteamApps/common/Duke Nukem 3D/gameroot");
// detect Steam and GOG versions of Duke3D
char buf[BMAX_PATH];
int32_t siz = BMAX_PATH, ret;
ret = SHGetValueA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App 225140", "InstallLocation", NULL, buf, (LPDWORD)&siz);
if (ret == ERROR_SUCCESS)
Bstrcat(buf, "/gameroot");
else
{
siz = BMAX_PATH;
ret = SHGetValueA(HKEY_LOCAL_MACHINE, "SOFTWARE\\GOG.com\\GOGDUKE3D", "PATH", NULL, buf, (LPDWORD)&siz);
}
if (ret == ERROR_SUCCESS)
addsearchpath(buf);
#endif
}