From 7c474c848ee97bf0c72e5e216c36aaf6b6a3be91 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Wed, 30 Jul 2003 13:06:22 +0000 Subject: [project @ 2003-07-30 13:06:22 by jmb] Add support for Acorn URI Protocol and URI files (Rob Jackson) svn path=/import/netsurf/; revision=242 --- riscos/uri.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 riscos/uri.c (limited to 'riscos/uri.c') diff --git a/riscos/uri.c b/riscos/uri.c new file mode 100644 index 000000000..46afa76a3 --- /dev/null +++ b/riscos/uri.c @@ -0,0 +1,87 @@ +/* + * This file is part of NetSurf, http://netsurf.sourceforge.net/ + * Licensed under the GNU General Public License, + * http://www.opensource.org/licenses/gpl-license + * Copyright 2003 Rob Jackson + */ + +#include +#include +#include "oslib/uri.h" +#include "oslib/wimp.h" +#include "netsurf/desktop/browser.h" +#include "netsurf/riscos/theme.h" +#include "netsurf/desktop/gui.h" +#include "netsurf/riscos/gui.h" +#include "netsurf/utils/log.h" +#include "netsurf/utils/utils.h" + +void ro_uri_message_received(uri_full_message_process*); + +extern ro_theme* current_theme; + +void ro_uri_message_received(uri_full_message_process* uri_message) +{ + uri_h uri_handle; + char* uri_requested; + char* temp; + + struct browser_window* bw; + int uri_length; + int i; + + uri_handle = uri_message->handle; + + LOG(("URI message... %s, handle = %d", uri_message->uri, + (int)uri_message->handle)); + + if ( (strspn(uri_message->uri, "http://") != strlen("http://")) && + (strspn(uri_message->uri, "https://") != strlen("https://")) && + (strspn(uri_message->uri, "file:/") != strlen("file:/")) ) + return; + + else LOG(("URI message deemed relevant")); + + uri_message->your_ref = uri_message->my_ref; + uri_message->action = message_URI_PROCESS_ACK; + + xwimp_send_message(wimp_USER_MESSAGE_ACKNOWLEDGE, + (wimp_message*)uri_message, + uri_message->sender); + + xuri_request_uri(0, 0, 0, uri_handle, &uri_length); + uri_requested = xcalloc(uri_length, sizeof(char)); + + if (uri_requested == NULL) + return; + + xuri_request_uri(0, uri_requested, uri_length, uri_handle, NULL); + + /* Kludge for file:/ URLs (changes them into file:/// URLs) */ + if( (strncasecmp(uri_requested, "file:/", 6) == 0) && + (strncasecmp(uri_requested, "file://", 7) != 0) ) { + + temp = xcalloc(strlen(uri_requested) + 5, sizeof(char)); + strcpy(temp, "file:///"); + for(i=6; i!=strlen(uri_requested); i++) { + + temp[i+2] = uri_message->uri[i]; + } + xfree(uri_requested); + uri_requested = strdup(temp); + xfree(temp); + } + + bw = create_browser_window(browser_TITLE | browser_TOOLBAR + | browser_SCROLL_X_ALWAYS | browser_SCROLL_Y_ALWAYS, 640, 480); + + gui_window_show(bw->window); + browser_window_open_location(bw, uri_requested); + + wimp_set_caret_position(bw->window->data.browser.toolbar, + ro_theme_icon(current_theme, THEME_TOOLBAR, "TOOLBAR_URL"), + 0,0,-1, (int) strlen(bw->window->url) - 1); + + + xfree(uri_requested); +} -- cgit v1.2.3