vaccinewars

be a doctor and try to vaccinate the world
git clone git://src.adamsgaard.dk/vaccinewars # fast
git clone https://src.adamsgaard.dk/vaccinewars.git # slow
Log | Files | Refs | README | LICENSE Back to index

commit 53f0a86cc9127b029d4d1933d4db6db256262d7e
parent 0e46ea041de2ddc184132b01bf9f5e6a0c526b8c
Author: Ben Webb <ben@salilab.org>
Date:   Mon, 27 Sep 2004 05:35:18 +0000

The Windows installer no longer hardcodes C:\Program Files, so should work
with non-English versions of Windows.


Diffstat:
MChangeLog | 2++
Mwin32/filelist | 2+-
Mwin32/setup.c | 7++++++-
Mwin32/util.c | 29+++++++++++++++++++++++++++++
Mwin32/util.h | 2++
5 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -10,6 +10,8 @@ cvs - Quique's Spanish translation is now available both in standard Spanish (es.po) and es_ES.po, which uses drugs slang from Spain - Fix for a trivial DOS of the server + - Windows installer no longer hardcodes 'C:\Program Files' so should + work with non-English versions of Windows 1.5.9 07-06-2003 - The messages window in the curses client can now be scrolled with the diff --git a/win32/filelist b/win32/filelist @@ -2,7 +2,7 @@ dopewars-1.5.9 [instdir] -C:\Program Files\dopewars-1.5.9 +dopewars-1.5.9 [NT Service] dopewars-server diff --git a/win32/setup.c b/win32/setup.c @@ -333,6 +333,7 @@ InstData *ReadInstData() InstFiles *lastinst = NULL, *lastextra = NULL, *lastkeep = NULL; InstLink *lastmenu = NULL, *lastdesktop = NULL; char *instdata, *pt, *filename, *line2, *line3, *line4; + bstr *idir; DWORD filesize; InstData *idata; @@ -351,7 +352,11 @@ InstData *ReadInstData() idata->product = bstrdup(pt); pt += strlen(pt) + 1; - idata->installdir = bstrdup(pt); + idir = bstr_new(); + bstr_assign_progfilesdir(idir); + bstr_appendpath(idir, pt); + idata->installdir = idir->text; + bstr_free(idir, FALSE); pt += strlen(pt) + 1; idata->startmenudir = bstrdup(pt); diff --git a/win32/util.c b/win32/util.c @@ -200,6 +200,35 @@ void bstr_assign_curdir(bstr *str) bstr_append_curdir(str); } +void bstr_assign_progfilesdir(bstr *str) +{ + bstr_setlength(str, 0); + bstr_append_progfilesdir(str); +} + +void bstr_append_progfilesdir(bstr *str) +{ + HKEY key; + int len; + static const *subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion"; + static const *subval = "ProgramFilesDir"; + BOOL ok = FALSE; + + len = str->bufsiz - str->length; + if (RegGetValue(HKEY_LOCAL_MACHINE, subkey, subval, RRF_RT_REG_SZ, NULL, + NULL, &len) == ERROR_SUCCESS) { + len += 5; + bstr_expandby(str, len); + if (RegGetValue(HKEY_LOCAL_MACHINE, subkey, subval, RRF_RT_REG_SZ, NULL, + str->text + str->length, &len) == ERROR_SUCCESS) { + ok = TRUE; + } + } + if (!ok) { + bstr_append(str, "C:\\Program Files"); + } +} + void bstr_append_dir(bstr *str, BOOL windir) { unsigned spaceleft; diff --git a/win32/util.h b/win32/util.h @@ -87,6 +87,8 @@ void bstr_append_windir(bstr *str); void bstr_append_curdir(bstr *str); void bstr_assign_windir(bstr *str); void bstr_assign_curdir(bstr *str); +void bstr_assign_progfilesdir(bstr *str); +void bstr_append_progfilesdir(bstr *str); void DisplayError(const char *errtext, BOOL addsyserr, BOOL fatal); void AddInstFiles(char *filename, DWORD filesize, InstFiles **lastpt,