summaryrefslogtreecommitdiff
path: root/frontends/amiga/gui.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2016-12-11 16:04:16 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2016-12-11 16:04:16 +0000
commit9d694f56bbe28ba61eeeffd7472a4b7962a513c0 (patch)
treeb4da0fc817380e16a9f54c4436aaad76076556c9 /frontends/amiga/gui.c
parent433418a8e9655fe19ab704129ee652b7316dc343 (diff)
downloadnetsurf-9d694f56bbe28ba61eeeffd7472a4b7962a513c0.tar.gz
netsurf-9d694f56bbe28ba61eeeffd7472a4b7962a513c0.tar.bz2
Tidy-up init a bit
Diffstat (limited to 'frontends/amiga/gui.c')
-rw-r--r--frontends/amiga/gui.c191
1 files changed, 107 insertions, 84 deletions
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index b97cb1006..dd1f4b6c2 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -217,7 +217,6 @@ static bool cli_force = false;
#define USERS_DIR "PROGDIR:Users"
static char *users_dir = NULL;
-static char *current_user = NULL;
static char *current_user_dir;
static char *current_user_faviconcache;
@@ -432,6 +431,8 @@ bool ami_locate_resource(char *fullpath, const char *file)
static bool ami_open_resources(void)
{
+
+ ami_object_init();
urlStringClass = MakeStringClass();
if(!(appport = AllocSysObjectTags(ASOT_PORT,
@@ -446,6 +447,11 @@ static bool ami_open_resources(void)
ASO_NoTrack, FALSE,
TAG_DONE))) return false;
+ if(ami_schedule_create(schedulermsgport) != NSERROR_OK) {
+ ami_misc_fatal_error("Failed to initialise scheduler");
+ return false;
+ }
+
return true;
}
@@ -906,11 +912,12 @@ static struct RDArgs *ami_gui_commandline(int *restrict argc, char ** argv,
return NULL;
}
-static void ami_gui_read_tooltypes(struct WBArg *wbarg)
+static char *ami_gui_read_tooltypes(struct WBArg *wbarg)
{
struct DiskObject *dobj;
STRPTR *toolarray;
char *s;
+ char *current_user = NULL;
if((*wbarg->wa_Name) && (dobj = GetDiskObject(wbarg->wa_Name))) {
toolarray = (STRPTR *)dobj->do_ToolTypes;
@@ -920,13 +927,16 @@ static void ami_gui_read_tooltypes(struct WBArg *wbarg)
FreeDiskObject(dobj);
}
+ return current_user;
}
-static void ami_gui_read_all_tooltypes(int argc, char **argv)
+static STRPTR ami_gui_read_all_tooltypes(int argc, char **argv)
{
struct WBStartup *WBenchMsg;
struct WBArg *wbarg;
char i = 0;
+ char *current_user = NULL;
+ char *cur_user = NULL;
if(argc == 0) { /* Started from WB */
WBenchMsg = (struct WBStartup *)argv;
@@ -935,11 +945,17 @@ static void ami_gui_read_all_tooltypes(int argc, char **argv)
if((wbarg->wa_Lock) && (*wbarg->wa_Name))
olddir = SetCurrentDir(wbarg->wa_Lock);
- ami_gui_read_tooltypes(wbarg);
+ cur_user = ami_gui_read_tooltypes(wbarg);
+ if(cur_user != NULL) {
+ if(current_user != NULL) FreeVec(current_user);
+ current_user = cur_user;
+ }
if(olddir !=-1) SetCurrentDir(olddir);
}
}
+
+ return current_user;
}
void ami_gui_set_default_gg(void)
@@ -5464,6 +5480,84 @@ uint32 ami_gui_get_app_id(void)
return ami_appid;
}
+/* Get current user directory for user-specific NetSurf data
+ * Returns NULL on error
+ */
+static char *ami_gui_get_user_dir(STRPTR current_user)
+{
+ BPTR lock = 0;
+ char temp[1024];
+ int32 user = 0;
+
+ if(current_user == NULL) {
+ user = GetVar("user", temp, 1024, GVF_GLOBAL_ONLY);
+ current_user = ASPrintf("%s", (user == -1) ? "Default" : temp);
+ }
+ LOG("User: %s", current_user);
+
+ if(users_dir == NULL) {
+ users_dir = ASPrintf("%s", USERS_DIR);
+ if(users_dir == NULL) {
+ ami_misc_fatal_error("Failed to allocate memory");
+ FreeVec(current_user);
+ return NULL;
+ }
+ }
+
+ if(LIB_IS_AT_LEAST((struct Library *)DOSBase, 51, 96)) {
+#ifdef __amigaos4__
+ struct InfoData *infodata = AllocDosObject(DOS_INFODATA, 0);
+ if(infodata == NULL) {
+ ami_misc_fatal_error("Failed to allocate memory");
+ FreeVec(current_user);
+ return NULL;
+ }
+ GetDiskInfoTags(GDI_StringNameInput, users_dir,
+ GDI_InfoData, infodata,
+ TAG_DONE);
+ if(infodata->id_DiskState == ID_DISKSTATE_WRITE_PROTECTED) {
+ FreeDosObject(DOS_INFODATA, infodata);
+ ami_misc_fatal_error("User directory MUST be on a writeable volume");
+ FreeVec(current_user);
+ return NULL;
+ }
+ FreeDosObject(DOS_INFODATA, infodata);
+#else
+#warning FIXME for OS3 and older OS4
+#endif
+ } else {
+//TODO: check volume write status using old API
+ }
+
+ int len = strlen(current_user);
+ FreeVec(current_user);
+
+ len += strlen(users_dir);
+ len += 2; /* for poss path sep and NULL term */
+
+ current_user_dir = malloc(len);
+ if(current_user_dir == NULL) {
+ ami_misc_fatal_error("Failed to allocate memory");
+ return NULL;
+ }
+
+ strlcpy(current_user_dir, users_dir, len);
+ AddPart(current_user_dir, current_user, len);
+ FreeVec(users_dir);
+
+ LOG("User dir: %s", current_user_dir);
+
+ if((lock = CreateDirTree(current_user_dir)))
+ UnLock(lock);
+
+ ami_nsoption_set_location(current_user_dir);
+
+ current_user_faviconcache = ASPrintf("%s/IconCache", current_user_dir);
+ if((lock = CreateDirTree(current_user_faviconcache))) UnLock(lock);
+
+ return current_user_dir;
+}
+
static struct gui_window_table amiga_window_table = {
.create = gui_window_create,
.destroy = gui_window_destroy,
@@ -5527,8 +5621,8 @@ int main(int argc, char** argv)
char script[1024];
char temp[1024];
STRPTR current_user_cache = NULL;
+ STRPTR current_user = NULL;
BPTR lock = 0;
- int32 user = 0;
nserror ret;
int nargc = 0;
char *nargv = NULL;
@@ -5575,8 +5669,6 @@ int main(int argc, char** argv)
struct Interupt *memhandler = ami_memory_init();
#endif
- ami_object_init();
-
if (ami_open_resources() == false) { /* alloc message ports */
ami_misc_fatal_error("Unable to allocate resources");
ami_gui_splash_close(splash_window);
@@ -5584,90 +5676,17 @@ int main(int argc, char** argv)
return RETURN_FAIL;
}
- if(ami_schedule_create(schedulermsgport) != NSERROR_OK) {
- ami_misc_fatal_error("Failed to initialise scheduler");
- ami_gui_splash_close(splash_window);
- ami_libs_close();
- return RETURN_FAIL;
- }
-
- ami_gui_read_all_tooltypes(argc, argv);
+ current_user = ami_gui_read_all_tooltypes(argc, argv);
struct RDArgs *args = ami_gui_commandline(&argc, argv, &nargc, &nargv);
- if(current_user == NULL) {
- user = GetVar("user", temp, 1024, GVF_GLOBAL_ONLY);
- current_user = ASPrintf("%s", (user == -1) ? "Default" : temp);
- }
- LOG("User: %s", current_user);
-
- if(users_dir == NULL) {
- users_dir = ASPrintf("%s", USERS_DIR);
- if(users_dir == NULL) {
- ami_misc_fatal_error("Failed to allocate memory");
- ami_schedule_free();
- ami_gui_splash_close(splash_window);
- ami_libs_close();
- return RETURN_FAIL;
- }
- }
-
- if(LIB_IS_AT_LEAST((struct Library *)DOSBase, 51, 96)) {
-#ifdef __amigaos4__
- struct InfoData *infodata = AllocDosObject(DOS_INFODATA, 0);
- if(infodata == NULL) {
- ami_misc_fatal_error("Failed to allocate memory");
- ami_schedule_free();
- ami_gui_splash_close(splash_window);
- ami_libs_close();
- return RETURN_FAIL;
- }
- GetDiskInfoTags(GDI_StringNameInput, users_dir,
- GDI_InfoData, infodata,
- TAG_DONE);
- if(infodata->id_DiskState == ID_DISKSTATE_WRITE_PROTECTED) {
- FreeDosObject(DOS_INFODATA, infodata);
- ami_misc_fatal_error("User directory MUST be on a writeable volume");
- ami_schedule_free();
- ami_gui_splash_close(splash_window);
- ami_libs_close();
- return RETURN_FAIL;
- }
- FreeDosObject(DOS_INFODATA, infodata);
-#else
-#warning FIXME for OS3 and older OS4
-#endif
- } else {
-//TODO: check volume write status using old API
- }
-
- int len = strlen(current_user);
- len += strlen(users_dir);
- len += 2; /* for poss path sep and NULL term */
-
- current_user_dir = malloc(len);
+ current_user_dir = ami_gui_get_user_dir(current_user);
if(current_user_dir == NULL) {
- ami_misc_fatal_error("Failed to allocate memory");
ami_schedule_free();
ami_gui_splash_close(splash_window);
ami_libs_close();
return RETURN_FAIL;
}
- strlcpy(current_user_dir, users_dir, len);
- AddPart(current_user_dir, current_user, len);
- FreeVec(users_dir);
- LOG("User dir: %s", current_user_dir);
-
- if((lock = CreateDirTree(current_user_dir)))
- UnLock(lock);
-
- ami_nsoption_set_location(current_user_dir);
- current_user_cache = ASPrintf("%s/Cache", current_user_dir);
- current_user_faviconcache = ASPrintf("%s/IconCache", current_user_dir);
-
- if((lock = CreateDirTree(current_user_cache))) UnLock(lock);
- if((lock = CreateDirTree(current_user_faviconcache))) UnLock(lock);
-
ami_mime_init("PROGDIR:Resources/mimetypes");
sprintf(temp, "%s/mimetypes.user", current_user_dir);
ami_mime_init(temp);
@@ -5707,7 +5726,13 @@ int main(int argc, char** argv)
ret = messages_add_from_file(messages);
+ current_user_cache = ASPrintf("%s/Cache", current_user_dir);
+ if((lock = CreateDirTree(current_user_cache))) UnLock(lock);
+
ret = netsurf_init(current_user_cache);
+
+ if(current_user_cache != NULL) FreeVec(current_user_cache);
+
if (ret != NSERROR_OK) {
ami_misc_fatal_error("NetSurf failed to initialise");
nsoption_finalise(nsoptions, nsoptions_default);
@@ -5717,7 +5742,6 @@ int main(int argc, char** argv)
return RETURN_FAIL;
}
- if(current_user_cache != NULL) FreeVec(current_user_cache);
ret = amiga_icon_init();
search_web_init(nsoption_charp(search_engines_file));
@@ -5766,7 +5790,6 @@ int main(int argc, char** argv)
ami_nsoption_free();
free(current_user_dir);
FreeVec(current_user_faviconcache);
- FreeVec(current_user);
#ifndef __amigaos4__
/* OS3 low memory handler */