summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2011-09-19 20:31:10 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2011-09-19 20:31:10 (GMT)
commitf535f8dce4e8c86a361003c55b03f88c73b85ed1 (patch)
treedfae95c326269c783c122a90ea26233ebad77e28 /src
parent23dcec9d07cb61e0e808137c395cdf1fc873240f (diff)
downloadpowder-f535f8dce4e8c86a361003c55b03f88c73b85ed1.zip
powder-f535f8dce4e8c86a361003c55b03f88c73b85ed1.tar.gz
Game installer launches game with data directory for Windows (AppData)
Diffstat (limited to 'src')
-rw-r--r--src/misc.c80
1 files changed, 67 insertions, 13 deletions
diff --git a/src/misc.c b/src/misc.c
index 8983f1f..7004416 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -12,6 +12,8 @@
#include <icondoc.h>
#include <update.h>
#if defined WIN32
+#include <Shlobj.h>
+#include <Shlwapi.h>
#include <windows.h>
#else
#include <unistd.h>
@@ -467,80 +469,132 @@ char * clipboard_pull_text()
int register_extension()
{
#if defined WIN32
+ int returnval;
LONG rresult;
HKEY newkey;
char *currentfilename = exe_name();
char *iconname = NULL;
char *opencommand = NULL;
+ char AppDataPath[MAX_PATH];
iconname = malloc(strlen(currentfilename)+6);
- opencommand = malloc(strlen(currentfilename)+13);
sprintf(iconname, "%s,-102", currentfilename);
- sprintf(opencommand, "\"%s\" open \"%%1\"", currentfilename);
+
+ //Create Roaming application data folder
+ if(!SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA|CSIDL_FLAG_CREATE, NULL, 0, AppDataPath)))
+ {
+ returnval = 0;
+ goto finalise;
+ }
+
+ //Move Game executable into application data folder
+ //TODO: Implement
+
+ opencommand = malloc(strlen(currentfilename)+53+strlen(AppDataPath));
+ if((strlen(AppDataPath)+strlen(APPDATA_SUBDIR "\\Powder Toy"))<MAX_PATH)
+ {
+ strappend(AppDataPath, APPDATA_SUBDIR);
+#ifdef WIN32
+ if(_mkdir(AppDataPath))
+#else
+ if(mkdir(AppDataPath, 0755))
+#endif
+ {
+ returnval = 0;
+ goto finalise;
+ }
+ strappend(AppDataPath, "\\Powder Toy");
+#ifdef WIN32
+ if(_mkdir(AppDataPath))
+#else
+ if(mkdir(AppDataPath, 0755))
+#endif
+ {
+ returnval = 0;
+ goto finalise;
+ }
+ } else {
+ returnval = 0;
+ goto finalise;
+ }
+ sprintf(opencommand, "\"%s\" open \"%%1\" ddir \"%s\"", currentfilename, AppDataPath);
//Create extension entry
rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\.cps", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL);
if (rresult != ERROR_SUCCESS) {
- return 0;
+ returnval = 0;
+ goto finalise;
}
rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"PowderToySave", strlen("PowderToySave")+1);
if (rresult != ERROR_SUCCESS) {
RegCloseKey(newkey);
- return 0;
+ returnval = 0;
+ goto finalise;
}
RegCloseKey(newkey);
rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\.stm", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL);
if (rresult != ERROR_SUCCESS) {
- return 0;
+ returnval = 0;
+ goto finalise;
}
rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"PowderToySave", strlen("PowderToySave")+1);
if (rresult != ERROR_SUCCESS) {
RegCloseKey(newkey);
- return 0;
+ returnval = 0;
+ goto finalise;
}
RegCloseKey(newkey);
//Create program entry
rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL);
if (rresult != ERROR_SUCCESS) {
- return 0;
+ returnval = 0;
+ goto finalise;
}
rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)"Powder Toy Save", strlen("Powder Toy Save")+1);
if (rresult != ERROR_SUCCESS) {
RegCloseKey(newkey);
- return 0;
+ returnval = 0;
+ goto finalise;
}
RegCloseKey(newkey);
//Set DefaultIcon
rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave\\DefaultIcon", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL);
if (rresult != ERROR_SUCCESS) {
- return 0;
+ returnval = 0;
+ goto finalise;
}
rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)iconname, strlen(iconname)+1);
if (rresult != ERROR_SUCCESS) {
RegCloseKey(newkey);
- return 0;
+ returnval = 0;
+ goto finalise;
}
RegCloseKey(newkey);
//Set Launch command
rresult = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\Classes\\PowderToySave\\shell\\open\\command", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &newkey, NULL);
if (rresult != ERROR_SUCCESS) {
- return 0;
+ returnval = 0;
+ goto finalise;
}
rresult = RegSetValueEx(newkey, 0, 0, REG_SZ, (LPBYTE)opencommand, strlen(opencommand)+1);
if (rresult != ERROR_SUCCESS) {
RegCloseKey(newkey);
- return 0;
+ returnval = 0;
+ goto finalise;
}
RegCloseKey(newkey);
+
+ returnval = 1;
+ finalise:
if(iconname) free(iconname);
if(opencommand) free(opencommand);
if(currentfilename) free(currentfilename);
- return 1;
+ return returnval;
#elif defined(LIN32) || defined(LIN64)
char *currentfilename = exe_name();
FILE *f;