From cf657a2ffbb9f1ac4c34e2c2348b8d5a4f2193a3 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sun, 1 Jan 2006 18:52:30 +0000 Subject: [project @ 2006-01-01 18:52:30 by jmb] Dump user options to stderr on abort. Dump box tree on failed assertion. Display Red/Yellow hourglass whilst dumping box tree (as this can take some time) svn path=/import/netsurf/; revision=1928 --- desktop/options.c | 36 +++++++++++++++++++++++++++++++++--- desktop/options.h | 1 + riscos/gui.c | 14 +++++++++++--- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/desktop/options.c b/desktop/options.c index fa2d29cfe..ad8f17042 100644 --- a/desktop/options.c +++ b/desktop/options.c @@ -221,6 +221,36 @@ void options_write(const char *path) fclose(fp); } +/** + * Dump user options to stderr + */ +void options_dump(void) +{ + unsigned int i; + + for (i = 0; i != option_table_entries; i++) { + fprintf(stderr, "%s:", option_table[i].key); + switch (option_table[i].type) { + case OPTION_BOOL: + fprintf(stderr, "%c", + *((bool *) option_table[i].p) ? + '1' : '0'); + break; + + case OPTION_INTEGER: + fprintf(stderr, "%i", + *((int *) option_table[i].p)); + break; + + case OPTION_STRING: + if (*((char **) option_table[i].p)) + fprintf(stderr, "%s", + *((char **) option_table[i].p)); + break; + } + fprintf(stderr, "\n"); + } +} /** * Loads a hotlist as a tree from a specified file. @@ -238,7 +268,7 @@ struct tree *options_load_tree(const char *filename) { warn_user("HotlistLoadError", messages_get("ParsingFail")); return NULL; } - + html = options_find_tree_element((xmlNode *) doc, "html"); body = options_find_tree_element(html, "body"); ul = options_find_tree_element(body, "ul"); @@ -277,7 +307,7 @@ void options_load_tree_directory(xmlNode *ul, struct node *directory) { char *title; struct node *dir; xmlNode *n; - + assert(ul); assert(directory); @@ -350,7 +380,7 @@ void options_load_tree_entry(xmlNode *li, struct node *directory) { "memory exhausted.)"); return; } - + data = url_store_find(url); if (!data) return; diff --git a/desktop/options.h b/desktop/options.h index b63d21ce7..ee9c48415 100644 --- a/desktop/options.h +++ b/desktop/options.h @@ -48,6 +48,7 @@ extern int option_expire_url; void options_read(const char *path); void options_write(const char *path); +void options_dump(void); struct tree *options_load_tree(const char *filename); bool options_save_tree(struct tree *tree, const char *filename, diff --git a/riscos/gui.c b/riscos/gui.c index c463e8f36..2edb13702 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -621,12 +621,20 @@ void gui_quit(void) void ro_gui_signal(int sig) { struct content *c; - if (sig == SIGFPE) { + if (sig == SIGFPE || sig == SIGABRT) { + os_colour old_sand, old_glass; + + xhourglass_on(); + xhourglass_colours(0x0000ffff, 0x000000ff, + &old_sand, &old_glass); for (c = content_list; c; c = c->next) if (c->type == CONTENT_HTML && c->data.html.layout) { LOG(("Dumping: '%s'", c->url)); box_dump(c->data.html.layout, 0); } + options_dump(); + xhourglass_colours(old_sand, old_glass, 0, 0); + xhourglass_off(); } ro_gui_cleanup(); raise(sig); @@ -838,7 +846,7 @@ void ro_gui_redraw_window_request(wimp_draw *redraw) if (ro_gui_wimp_event_redraw_window(redraw)) return; - + g = ro_gui_window_lookup(redraw->w); if (g) ro_gui_window_redraw(g, redraw); @@ -1055,7 +1063,7 @@ void ro_gui_keypress(wimp_key *key) bool handled = false; struct gui_window *g; os_error *error; - + if (ro_gui_wimp_event_keypress(key)) handled = true; else if ((g = ro_gui_window_lookup(key->w)) != NULL) -- cgit v1.2.3