Unify information databases

svn path=/trunk/netsurf/; revision=2519
This commit is contained in:
John Mark Bell 2006-04-09 23:21:13 +00:00
parent e5e1b982d5
commit c09eb457df
36 changed files with 2958 additions and 1837 deletions

View File

@ -1,366 +0,0 @@
/*
* 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 2006 John M Bell <jmb202@ecs.soton.ac.uk>
*/
/** \file
* HTTP authentication database (implementation)
*
* Authentication details are stored hashed by canonical root URI
* (absoluteURI with no abs_path part - see RFC 2617) for fast lookup.
*
* A protection space is specified by the root URI and a case sensitive
* realm match. User-agents may preemptively send authentication details
* for locations within a currently known protected space (i.e:
* Given a known realm URI of scheme://authority/path/to/realm/
* the URI scheme://authority/path/to/realm/foo/ can be assumed to
* be within the protection space.)
*
* In order to deal with realms within realms, the realm details are stored
* such that the most specific URI comes first (where "most specific" is
* classed as the one with the longest abs_path segment).
*
* Realms spanning domains are stored multiple times (once per domain).
*
* Where a higher level resource is found to be within a known realm, the
* existing match is replaced with the new one (i.e:
* Given a known realm of scheme://authority/path/to/realm/ (uri1)
* and the newly-acquired knowledge that scheme://authority/path/to/ (uri2)
* lies within the same realm, the realm details for uri1 are replaced with
* those for uri2. - in most cases, this is likely to be a simple
* replacement of the realm URI)
*
* There is currently no mechanism for retaining authentication details over
* sessions.
*/
#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include "netsurf/content/authdb.h"
#define NDEBUG
#include "netsurf/utils/log.h"
#include "netsurf/utils/url.h"
#define HASH_SIZE 77
struct realm_details {
char *realm; /**< Realm identifier */
char *url; /**< Base URL of realm */
char *auth; /**< Authentication details */
struct realm_details *next;
struct realm_details *prev;
};
struct auth_entry {
char *root_url; /**< Canonical root URL of realms */
struct realm_details *realms; /**< List of realms on this host */
struct auth_entry *next;
};
static struct auth_entry *auth_table[HASH_SIZE];
static unsigned int authdb_hash(const char *s);
static struct realm_details *authdb_get_rd(const char *canon,
const char *url, const char *realm);
static void authdb_dump(void);
/**
* Insert an entry into the database, potentially replacing any
* existing entry.
*
* \param url Absolute URL to resource
* \param realm Authentication realm containing resource
* \param auth Authentication details in form "username:password"
* \return true on success, false on error.
*/
bool authdb_insert(const char *url, const char *realm, const char *auth)
{
char *canon, *stripped;
unsigned int hash;
struct realm_details *rd;
struct auth_entry *entry;
url_func_result ret;
assert(url && realm && auth);
LOG(("Adding '%s' - '%s'", url, realm));
ret = url_canonical_root(url, &canon);
if (ret != URL_FUNC_OK)
return false;
LOG(("'%s'", canon));
ret = url_strip_lqf(url, &stripped);
if (ret != URL_FUNC_OK) {
free(canon);
return false;
}
hash = authdb_hash(canon);
/* Look for existing entry */
for (entry = auth_table[hash]; entry; entry = entry->next)
if (strcmp(entry->root_url, canon) == 0)
break;
rd = authdb_get_rd(canon, stripped, realm);
if (rd) {
/* We have a match */
if (strlen(stripped) < strlen(rd->url)) {
/* more generic, so update URL and move to
* appropriate location in list (s.t. the invariant
* that most specific URLs come first is maintained)
*/
struct realm_details *r, *s;
char *temp = strdup(auth);
if (!temp) {
free(temp);
free(stripped);
free(canon);
return false;
}
free(rd->url);
rd->url = stripped;
free(rd->auth);
rd->auth = temp;
for (r = rd->next; r; r = s) {
s = r->next;
if (strlen(r->url) > strlen(rd->url)) {
rd->next->prev = rd->prev;
if (rd->prev)
rd->prev->next = rd->next;
else
entry->realms = r;
rd->prev = r;
rd->next = r->next;
if (r->next)
r->next->prev = rd;
r->next = rd;
}
}
}
else if (strlen(stripped) == strlen(rd->url)) {
/* exact match, so replace auth details */
char *temp = strdup(auth);
if (!temp) {
free(stripped);
free(canon);
return false;
}
free(rd->auth);
rd->auth = temp;
free(stripped);
}
/* otherwise, nothing to do */
free(canon);
return true;
}
/* no existing entry => create one */
rd = malloc(sizeof(struct realm_details));
if (!rd) {
free(stripped);
free(canon);
return false;
}
rd->realm = strdup(realm);
rd->auth = strdup(auth);
rd->url = stripped;
rd->prev = 0;
if (!rd->realm || !rd->auth || ret != URL_FUNC_OK) {
free(rd->url);
free(rd->auth);
free(rd->realm);
free(rd);
free(canon);
return false;
}
if (entry) {
/* found => add to it */
rd->next = entry->realms;
if (entry->realms)
entry->realms->prev = rd;
entry->realms = rd;
free(canon);
return true;
}
/* not found => create new */
entry = malloc(sizeof(struct auth_entry));
if (!entry) {
free(rd->url);
free(rd->auth);
free(rd->realm);
free(rd);
free(canon);
return false;
}
rd->next = 0;
entry->root_url = canon;
entry->realms = rd;
entry->next = auth_table[hash];
auth_table[hash] = entry;
return true;
}
/**
* Find realm details entry
*
* \param canon Canonical root URL
* \param url Stripped URL to resource
* \param realm Realm containing resource
* \return Realm details or NULL if not found
*/
struct realm_details *authdb_get_rd(const char *canon, const char *url,
const char *realm)
{
struct auth_entry *entry;
struct realm_details *ret;
assert(canon && url);
for (entry = auth_table[authdb_hash(canon)]; entry;
entry = entry->next)
if (strcmp(entry->root_url, canon) == 0)
break;
if (!entry)
return NULL;
for (ret = entry->realms; ret; ret = ret->next) {
if (strcmp(ret->realm, realm))
/* skip realms that don't match */
continue;
if (strlen(url) >= strlen(ret->url) &&
!strncmp(url, ret->url, strlen(ret->url)))
/* If the requested URL is of equal or greater
* specificity than the stored one, but is within
* the same realm, then use the more generic details
*/
return ret;
else if (strncmp(url, ret->url, strlen(url)) == 0) {
/* We have a more general URL in the same realm */
return ret;
}
}
return NULL;
}
/**
* Retrieve authentication details for an URL from the database
*
* \param url Absolute URL to consider
* \return authentication details, or NULL if none found.
*/
const char *authdb_get(const char *url)
{
char *canon, *stripped;
struct auth_entry *entry;
struct realm_details *rd;
url_func_result ret;
assert(url);
LOG(("Searching for '%s'", url));
authdb_dump();
ret = url_canonical_root(url, &canon);
if (ret != URL_FUNC_OK)
return NULL;
ret = url_strip_lqf(url, &stripped);
if (ret != URL_FUNC_OK) {
free(canon);
return NULL;
}
/* Find auth entry */
for (entry = auth_table[authdb_hash(canon)]; entry;
entry = entry->next)
if (strcmp(entry->root_url, canon) == 0)
break;
if (!entry) {
free(stripped);
free(canon);
return NULL;
}
LOG(("Found entry"));
/* Find realm details */
for (rd = entry->realms; rd; rd = rd->next)
if (strlen(stripped) >= strlen(rd->url) &&
!strncmp(stripped, rd->url, strlen(rd->url)))
break;
if (!rd) {
free(stripped);
free(canon);
return NULL;
}
LOG(("Found realm"));
free(stripped);
free(canon);
return rd->auth;
}
/**
* Hash function for keys.
*/
unsigned int authdb_hash(const char *s)
{
unsigned int i, z = 0, m;
if (!s)
return 0;
m = strlen(s);
for (i = 0; i != m && s[i]; i++)
z += s[i] & 0x1f; /* lower 5 bits, case insensitive */
return z % HASH_SIZE;
}
/**
* Dump contents of auth db to stderr
*/
void authdb_dump(void)
{
#ifndef NDEBUG
int i;
struct auth_entry *e;
struct realm_details *r;
for (i = 0; i != HASH_SIZE; i++) {
LOG(("%d:", i));
for (e = auth_table[i]; e; e = e->next) {
LOG(("\t%s", e->root_url));
for (r = e->realms; r; r = r->next) {
LOG(("\t\t%s - %s", r->url, r->realm));
}
}
}
#endif
}

View File

@ -1,18 +0,0 @@
/*
* 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 2006 John M Bell <jmb202@ecs.soton.ac.uk>
*/
/** \file
* HTTP authentication database (interface)
*/
#ifndef _NETSURF_CONTENT_AUTHDB_H_
#define _NETSURF_CONTENT_AUTHDB_H_
bool authdb_insert(const char *url, const char *realm, const char *auth);
const char *authdb_get(const char *url);
#endif

View File

@ -1,154 +0,0 @@
/*
* 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 2006 John M Bell <jmb202@ecs.soton.ac.uk>
*/
/** \file
* HTTPS certificate verification database (implementation)
*
* URLs of servers with invalid SSL certificates are stored hashed by
* canonical root URI (absoluteURI with no abs_path part - see RFC 2617)
* for fast lookup.
*/
#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include "netsurf/utils/config.h"
#include "netsurf/content/certdb.h"
#define NDEBUG
#include "netsurf/utils/log.h"
#include "netsurf/utils/url.h"
#define HASH_SIZE 77
#ifdef WITH_SSL
struct cert_entry {
char *root_url; /**< Canonical root URL */
struct cert_entry *next;
};
static struct cert_entry *cert_table[HASH_SIZE];
static unsigned int certdb_hash(const char *s);
static void certdb_dump(void);
/**
* Insert an entry into the database
*
* \param url Absolute URL to resource
* \return true on success, false on error.
*/
bool certdb_insert(const char *url)
{
char *canon;
unsigned int hash;
struct cert_entry *entry;
url_func_result ret;
assert(url);
LOG(("Adding '%s'", url));
ret = url_canonical_root(url, &canon);
if (ret != URL_FUNC_OK)
return false;
LOG(("'%s'", canon));
hash = certdb_hash(canon);
/* Look for existing entry */
for (entry = cert_table[hash]; entry; entry = entry->next) {
if (strcmp(entry->root_url, canon) == 0) {
free(canon);
return true;
}
}
/* not found => create new */
entry = malloc(sizeof(struct cert_entry));
if (!entry) {
free(canon);
return false;
}
entry->root_url = canon;
entry->next = cert_table[hash];
cert_table[hash] = entry;
return true;
}
/**
* Retrieve certificate details for an URL from the database
*
* \param url Absolute URL to consider
* \return certificate details, or NULL if none found.
*/
const char *certdb_get(const char *url)
{
char *canon;
struct cert_entry *entry;
url_func_result ret;
assert(url);
LOG(("Searching for '%s'", url));
certdb_dump();
ret = url_canonical_root(url, &canon);
if (ret != URL_FUNC_OK)
return NULL;
/* Find cert entry */
for (entry = cert_table[certdb_hash(canon)]; entry;
entry = entry->next) {
if (strcmp(entry->root_url, canon) == 0) {
free(canon);
return entry->root_url;
}
}
return NULL;
}
/**
* Hash function for keys.
*/
unsigned int certdb_hash(const char *s)
{
unsigned int i, z = 0, m;
if (!s)
return 0;
m = strlen(s);
for (i = 0; i != m && s[i]; i++)
z += s[i] & 0x1f; /* lower 5 bits, case insensitive */
return z % HASH_SIZE;
}
/**
* Dump contents of auth db to stderr
*/
void certdb_dump(void)
{
#ifndef NDEBUG
int i;
struct cert_entry *e;
for (i = 0; i != HASH_SIZE; i++) {
LOG(("%d:", i));
for (e = cert_table[i]; e; e = e->next) {
LOG(("\t%s", e->root_url));
}
}
#endif
}
#endif

View File

@ -1,18 +0,0 @@
/*
* 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 2006 John M Bell <jmb202@ecs.soton.ac.uk>
*/
/** \file
* HTTPS certificate verification database (interface)
*/
#ifndef _NETSURF_CONTENT_CERTDB_H_
#define _NETSURF_CONTENT_CERTDB_H_
bool certdb_insert(const char *url);
const char *certdb_get(const char *url);
#endif

View File

@ -31,13 +31,8 @@
#ifdef WITH_SSL #ifdef WITH_SSL
#include "openssl/ssl.h" #include "openssl/ssl.h"
#endif #endif
#ifdef WITH_AUTH
#include "netsurf/content/authdb.h"
#endif
#ifdef WITH_SSL
#include "netsurf/content/certdb.h"
#endif
#include "netsurf/content/fetch.h" #include "netsurf/content/fetch.h"
#include "netsurf/content/urldb.h"
#include "netsurf/desktop/options.h" #include "netsurf/desktop/options.h"
#include "netsurf/render/form.h" #include "netsurf/render/form.h"
#define NDEBUG #define NDEBUG
@ -158,7 +153,7 @@ static int fetch_cert_verify_callback(X509_STORE_CTX *x509_ctx, void *parm);
ring = 0; \ ring = 0; \
} \ } \
element->r_next = element->r_prev = 0 element->r_next = element->r_prev = 0
/** Find the element (by hostname) in the given ring, leave it in the /** Find the element (by hostname) in the given ring, leave it in the
* provided element variable * provided element variable
*/ */
@ -483,7 +478,7 @@ static bool ns_internal_initiate_fetch(struct fetch *fetch, CURL *handle)
fetch->curl_handle = 0; fetch->curl_handle = 0;
return false; return false;
} }
/* add to the global curl multi handle */ /* add to the global curl multi handle */
codem = curl_multi_add_handle(fetch_curl_multi, fetch->curl_handle); codem = curl_multi_add_handle(fetch_curl_multi, fetch->curl_handle);
assert(codem == CURLM_OK || codem == CURLM_CALL_MULTI_PERFORM); assert(codem == CURLM_OK || codem == CURLM_CALL_MULTI_PERFORM);
@ -649,7 +644,7 @@ CURLcode fetch_set_options(struct fetch *f)
SETOPT(CURLOPT_COOKIEJAR, 0); SETOPT(CURLOPT_COOKIEJAR, 0);
} }
#ifdef WITH_AUTH #ifdef WITH_AUTH
if ((auth = authdb_get(f->url)) != NULL) { if ((auth = urldb_get_auth_details(f->url)) != NULL) {
SETOPT(CURLOPT_HTTPAUTH, CURLAUTH_ANY); SETOPT(CURLOPT_HTTPAUTH, CURLAUTH_ANY);
SETOPT(CURLOPT_USERPWD, auth); SETOPT(CURLOPT_USERPWD, auth);
} else { } else {
@ -677,7 +672,7 @@ CURLcode fetch_set_options(struct fetch *f)
} }
#ifdef WITH_SSL #ifdef WITH_SSL
if (certdb_get(f->url) != NULL) { if (urldb_get_cert_permissions(f->url)) {
/* Disable certificate verification */ /* Disable certificate verification */
SETOPT(CURLOPT_SSL_VERIFYPEER, 0L); SETOPT(CURLOPT_SSL_VERIFYPEER, 0L);
SETOPT(CURLOPT_SSL_VERIFYHOST, 0L); SETOPT(CURLOPT_SSL_VERIFYHOST, 0L);

View File

@ -23,7 +23,6 @@
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/fetchcache.h" #include "netsurf/content/fetchcache.h"
#include "netsurf/content/fetch.h" #include "netsurf/content/fetch.h"
#include "netsurf/content/url_store.h"
#include "netsurf/utils/log.h" #include "netsurf/utils/log.h"
#include "netsurf/utils/messages.h" #include "netsurf/utils/messages.h"
#include "netsurf/utils/talloc.h" #include "netsurf/utils/talloc.h"

View File

@ -1,750 +0,0 @@
/*
* 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 2005 Richard Wilson <info@tinct.net>
*/
/** \file
* Central repository for URL data (implementation).
*/
#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "netsurf/content/url_store.h"
#include "netsurf/image/bitmap.h"
#include "netsurf/desktop/options.h"
#ifdef riscos
#include "netsurf/riscos/bitmap.h"
#endif
#include "netsurf/utils/log.h"
#include "netsurf/utils/url.h"
#include "netsurf/utils/utils.h"
#define ITERATIONS_BEFORE_TEST 32
#define MAXIMUM_URL_LENGTH 1024
struct hostname_data *url_store_hostnames = NULL;
static struct hostname_data *url_store_find_hostname(const char *url);
static struct hostname_data *url_store_match_hostname(
struct hostname_data *previous);
/* used for faster matching */
static size_t current_match_url_length;
static char *current_match_scheme;
static int current_match_scheme_length;
static char *current_match_hostname;
static int current_match_hostname_length;
static bool current_match_www_test;
/* used for faster searching */
static struct hostname_data *last_hostname_found = NULL;
/**
* Returns the hostname data for the specified URL. If no hostname
* data is currently available then it is created.
*
* \param url the url to find hostname data for
* \return the current hostname data, or NULL if memory exhausted
*/
struct hostname_data *url_store_find_hostname(const char *url)
{
struct hostname_data *first = url_store_hostnames;
struct hostname_data *search;
struct hostname_data *result;
url_func_result res;
char *hostname = NULL;
int hostname_length;
int compare;
int fast_exit_counter = ITERATIONS_BEFORE_TEST;
const char *host_test;
assert(url);
/* as the URL is normalised, we optimise the hostname finding for http:// */
if (!strncmp("http://", url, 7)) {
/* check for duplicate hostname calls */
if ((last_hostname_found) &&
(!strncmp(last_hostname_found->hostname, url + 7,
last_hostname_found->hostname_length))) {
/* ensure it isn't comparing 'foo.com' to 'foo.com.au' etc */
if (url[last_hostname_found->hostname_length + 7] != '.')
return last_hostname_found;
}
/* check for a hostname match */
for (host_test = url + 7;
((*host_test > 32) && (*host_test != '/'));
*host_test++);
hostname_length = host_test - url - 7;
host_test = url + 7;
if ((last_hostname_found) &&
(strncmp(host_test,
last_hostname_found->hostname,
hostname_length) > 0))
first = last_hostname_found;
for (search = first; search; search = search->next) {
if (search->hostname_length == hostname_length) {
compare = strncmp(host_test, search->hostname,
hostname_length);
if (compare == 0) {
last_hostname_found = search;
return search;
} else if (compare < 0)
break;
}
}
/* allocate a new hostname */
hostname = malloc(hostname_length + 1);
if (!hostname)
return NULL;
memcpy(hostname, host_test, hostname_length);
hostname[hostname_length] = '\0';
} else {
/* no quick match found, fallback */
res = url_host(url, &hostname);
switch (res) {
case URL_FUNC_OK:
break;
case URL_FUNC_NOMEM:
return NULL;
case URL_FUNC_FAILED:
hostname = strdup("file:/"); /* for 'file:/' */
if (!hostname)
return NULL;
break;
default:
assert(0);
}
hostname_length = strlen(hostname);
}
/* try to find a matching hostname fairly quickly */
if ((last_hostname_found) &&
(strcmp(hostname, last_hostname_found->hostname) > 0))
first = last_hostname_found;
for (search = first; search; search = search->next) {
if ((fast_exit_counter <= 0) ||
(search->hostname_length == hostname_length)) {
compare = strcmp(hostname, search->hostname);
if (compare == 0) {
free(hostname);
last_hostname_found = search;
return search;
} else if (compare < 0)
break;
fast_exit_counter = ITERATIONS_BEFORE_TEST;
} else {
fast_exit_counter--;
}
}
/* no hostname is available: create a new one */
result = malloc(sizeof *result);
if (!result) {
free(hostname);
return NULL;
}
result->hostname = hostname;
result->hostname_length = hostname_length;
result->url = 0;
result->previous = 0;
result->next = 0;
last_hostname_found = result;
/* simple case: no current hostnames */
if (!url_store_hostnames) {
url_store_hostnames = result;
return result;
}
/* worst case scenario: the place we need to link is within the last
* section of the hostname list so we have no reference to work back
* from. rather than slowing with the very common case of searching,
* we take a speed hit for this case and simply move to the very end
* of the hostname list ready to work backwards. */
if (!search)
for (search = url_store_hostnames; search->next;
search = search->next)
;
/* we can now simply scan backwards as we know roughly where we need
* to link to (we either had an early exit from the searching so we
* know we're in the block following where we need to link, or we're
* at the very end of the list as we were in the last block.) */
while ((search) && (strcmp(hostname, search->hostname) < 0))
search = search->previous;
/* simple case: our new hostname is the first in the list */
if (!search) {
result->next = url_store_hostnames;
url_store_hostnames->previous = result;
url_store_hostnames = result;
return result;
}
/* general case: link in after the found hostname */
result->previous = search;
result->next = search->next;
if (search->next)
search->next->previous = result;
search->next = result;
return result;
}
/**
* Returns the url data for the specified URL. If no url
* data is currently available then it is created.
*
* \param url a normalized url to find hostname data for
* \return the current hostname data, or NULL if memory exhausted
*/
struct url_content *url_store_find(const char *url) {
struct hostname_data *hostname_data;
struct url_data *search;
struct url_data *result;
size_t url_length;
int compare;
int fast_exit_counter = ITERATIONS_BEFORE_TEST;
assert(url);
/* find the corresponding hostname data */
hostname_data = url_store_find_hostname(url);
if (!hostname_data)
return NULL;
/* move to the start of the leafname */
url_length = strlen(url);
/* try to find a matching url fairly quickly */
for (search = hostname_data->url; search; search = search->next) {
if ((fast_exit_counter <= 0) ||
(search->data.url_length == url_length)) {
compare = strcmp(url, search->data.url);
if (compare == 0)
return &search->data;
else if (compare < 0)
break;
fast_exit_counter = ITERATIONS_BEFORE_TEST;
} else {
fast_exit_counter--;
}
}
/* no URL is available: create a new one */
result = calloc(1, sizeof(struct url_data));
if (!result)
return NULL;
result->data.url = malloc(url_length + 1);
if (!result->data.url) {
free(result);
return NULL;
}
memcpy(result->data.url, url, url_length + 1);
result->data.url_length = url_length;
result->parent = hostname_data;
/* simple case: no current URLs */
if (!hostname_data->url) {
hostname_data->url = result;
return &result->data;
}
/* worst case scenario: the place we need to link is within the last
* section of the URL list so we have no reference to work back
* from. rather than slowing with the very common case of searching,
* we take a speed hit for this case and simply move to the very end
* of the URL list ready to work backwards. */
if (!search)
for (search = hostname_data->url; search->next;
search = search->next)
;
/* we can now simply scan backwards as we know roughly where we need
* to link to (we either had an early exit from the searching so we
* know we're in the block following where we need to link, or we're
* at the very end of the list as we were in the last block.) */
while ((search) && (strcmp(url, search->data.url) < 0))
search = search->previous;
/* simple case: our new hostname is the first in the list */
if (!search) {
result->next = hostname_data->url;
hostname_data->url->previous = result;
hostname_data->url = result;
return &result->data;
}
/* general case: link in after the found hostname */
result->previous = search;
result->next = search->next;
if (search->next)
search->next->previous = result;
search->next = result;
return &result->data;
}
/**
* Returns the next hostname that matches a part of the specified URL.
*
* The following variables must be initialised prior to calling:
*
* - current_match_scheme
* - current_match_hostname
* - current_match_hostname_length;
*
* \param url a normalized url to find the next match for
* \param current the current hostname to search forward from, or NULL
* \return the next matching hostname, or NULL
*/
struct hostname_data *url_store_match_hostname(
struct hostname_data *current) {
int compare;
assert(current_match_hostname);
/* advance to the next hostname */
if (!current)
current = url_store_hostnames;
else
current = current->next;
/* skip past hostname data without URLs */
for (; current && (!current->url); current = current->next);
while (current) {
if (current->hostname_length >= current_match_hostname_length) {
compare = strncmp(current_match_hostname, current->hostname,
current_match_hostname_length);
if (compare == 0)
return current;
else if ((compare < 0) && !current_match_www_test)
break;
}
/* special case: if hostname is not www then try it */
if (current_match_www_test && ((current->hostname_length - 4) >=
current_match_hostname_length) &&
(!strncmp(current->hostname, "www.", 4)) &&
(!strncmp(current_match_hostname,
current->hostname + 4,
current_match_hostname_length)))
return current;
/* move to next hostname with URLs */
current = current->next;
for (; current && (!current->url); current = current->next);
}
return NULL;
}
/**
* Returns the complete URL for the next matched stored URL.
*
* \param url a normalized url to find the next match for
* \param reference internal reference (NULL for first call)
* \return the next URL that matches
*/
struct url_content *url_store_match(const char *url, struct url_data **reference) {
struct hostname_data *hostname;
struct url_data *search = NULL;
url_func_result res;
assert(url);
if (!url_store_hostnames)
return NULL;
/* find the scheme and first URL, not necessarily matching */
if (!*reference) {
/* the hostname match is constant throughout */
if (current_match_hostname)
free(current_match_hostname);
current_match_hostname = NULL;
res = url_host(url, &current_match_hostname);
switch (res) {
case URL_FUNC_OK:
break;
case URL_FUNC_NOMEM:
return NULL;
case URL_FUNC_FAILED:
/* for 'file:/' */
current_match_hostname = strdup("file:/");
if (!current_match_hostname)
return NULL;
break;
default:
assert(0);
}
current_match_hostname_length = strlen(current_match_hostname);
/* the scheme is constant throughout */
if (current_match_scheme)
free(current_match_scheme);
current_match_scheme = NULL;
res = url_scheme(url, &current_match_scheme);
if (res != URL_FUNC_OK)
return NULL;
current_match_scheme_length = strlen(current_match_scheme);
/* the url is constant throughout */
current_match_url_length = strlen(url);
current_match_www_test = (!strcmp(current_match_scheme, "http") &&
strncmp(url + 4 + 3, "www.", 4)); /* 'http' + '://' */
/* get our initial reference */
hostname = url_store_match_hostname(NULL);
if (!hostname)
return NULL;
} else {
search = *reference;
hostname = search->parent;
}
/* work through all our strings, ignoring the scheme and 'www.' */
while (hostname) {
/* get the next URL to test */
if (!search)
search = hostname->url;
else
search = search->next;
/* loop past end of list, or search */
if (!search) {
hostname = url_store_match_hostname(hostname);
if (!hostname)
return NULL;
} else if (search->data.visits > 0) {
/* straight match */
if ((search->data.url_length >= current_match_url_length) &&
(!strncmp(search->data.url, url,
current_match_url_length))) {
*reference = search;
return &search->data;
}
/* try with 'www.' inserted after the scheme */
if (current_match_www_test &&
((search->data.url_length - 4) >=
current_match_url_length) &&
(!strncmp(search->data.url,
current_match_scheme,
current_match_scheme_length)) &&
(!strncmp(search->data.url +
current_match_scheme_length + 3,
"www.", 4)) &&
(!strncmp(search->data.url +
current_match_scheme_length + 7,
url +
current_match_scheme_length + 3,
current_match_url_length -
current_match_scheme_length - 3))) {
*reference = search;
return &search->data;
}
}
}
return NULL;
}
/**
* Converts a text string into one suitable for URL matching.
*
* \param text the text to search with
* \return URL matching string allocated on heap, or NULL on error
*/
char *url_store_match_string(const char *text) {
url_func_result res;
char *url;
assert(text);
res = url_normalize(text, &url);
if (res != URL_FUNC_OK)
return NULL;
/* drop the '/' from the end if it was added when normalizing */
if ((url[strlen(url) - 1] == '/') && (text[strlen(text) - 1] != '/'))
url[strlen(url) - 1] = '\0';
return url;
}
/**
* Loads the current contents of the URL store from disk
*
* \param file the file to load options from
*/
void url_store_load(const char *file) {
char s[MAXIMUM_URL_LENGTH];
struct hostname_data *hostname;
struct url_data *result;
int urls;
int i;
int version;
int length;
FILE *fp;
LOG(("Loading URL file"));
fp = fopen(file, "r");
if (!fp) {
LOG(("Failed to open file '%s' for reading", file));
return;
}
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
return;
version = atoi(s);
if (version < 102) {
LOG(("Unsupported URL file version."));
return;
}
if (version > 105) {
LOG(("Unknown URL file version."));
return;
}
last_hostname_found = NULL;
while (fgets(s, MAXIMUM_URL_LENGTH, fp)) {
/* get the hostname */
length = strlen(s) - 1;
s[length] = '\0';
/* skip data that has ended up with a host of '' */
if (length == 0) {
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
urls = atoi(s);
for (i = 0; i < (6 * urls); i++)
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
continue;
}
/* add the host at the tail */
if (version == 105) {
hostname = malloc(sizeof *hostname);
if (!hostname)
die("Insufficient memory to create hostname");
hostname->hostname = malloc(length + 1);
if (!hostname->hostname)
die("Insufficient memory to create hostname");
memcpy(hostname->hostname, s, length + 1);
hostname->hostname_length = length;
hostname->url = 0;
hostname->previous = last_hostname_found;
if (!hostname->previous)
url_store_hostnames = hostname;
else
last_hostname_found->next = hostname;
hostname->next = 0;
last_hostname_found = hostname;
} else {
hostname = url_store_find_hostname(s);
if (!hostname)
break;
}
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
urls = atoi(s);
/* load the non-corrupt data */
for (i = 0; i < urls; i++) {
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
length = strlen(s) - 1;
s[length] = '\0';
result = calloc(1, sizeof(struct url_data));
if (!result)
die("Insufficient memory to create URL");
result->data.url_length = length;
result->data.url = malloc(length + 1);
if (!result->data.url)
die("Insufficient memory to create URL");
memcpy(result->data.url, s, length + 1);
result->parent = hostname;
result->next = hostname->url;
if (hostname->url)
hostname->url->previous = result;
hostname->url = result;
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
result->data.visits = atoi(s);
if (version == 102) {
/* ignore requests */
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
/* ignore thumbnail size */
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
/* set last visit as today to retain */
result->data.last_visit = time(NULL);
} else {
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
result->data.last_visit = atoi(s);
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
result->data.type = atoi(s);
}
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
#ifdef riscos
if (strlen(s) == 12) {
/* ensure filename is 'XX.XX.XX.XX' */
if ((s[2] == '.') && (s[5] == '.') &&
(s[8] == '.')) {
s[11] = '\0';
result->data.thumbnail =
bitmap_create_file(s);
}
}
#endif
if (version >= 104) {
if (!fgets(s, MAXIMUM_URL_LENGTH, fp))
break;
length = strlen(s) - 1;
if (length > 0) {
s[length] = '\0';
result->data.title = malloc(length + 1);
if (result->data.title)
memcpy(result->data.title, s,
length + 1);
}
}
}
}
fclose(fp);
LOG(("Successfully loaded URL file"));
}
/**
* Saves the current contents of the URL store to disk
*
* \param file the file to load options from
*/
void url_store_save(const char *file) {
struct hostname_data *search;
struct url_data *url;
int url_count;
const char *thumb_file;
char *s;
int i;
FILE *fp;
#ifdef riscos
struct bitmap *bitmap;
#endif
time_t min_date;
char *title;
fp = fopen(file, "w");
if (!fp) {
LOG(("Failed to open file '%s' for writing", file));
return;
}
/* get the minimum date for expiry */
min_date = time(NULL) - (60 * 60 * 24) * option_expire_url;
/* file format version number */
fprintf(fp, "105\n");
for (search = url_store_hostnames; search; search = search->next) {
url_count = 0;
for (url = search->url; url; url = url->next)
if ((url->data.last_visit > min_date) &&
(url->data.visits > 0) &&
(url->data.url_length <
MAXIMUM_URL_LENGTH)) {
url_count++;
}
if (url_count > 0) {
fprintf(fp, "%s\n%i\n", search->hostname, url_count);
for (url = search->url; url && url->next;
url = url->next);
for (; url; url = url->previous)
if ((url->data.last_visit > min_date) &&
(url->data.visits > 0) &&
(url->data.url_length <
MAXIMUM_URL_LENGTH)) {
thumb_file = "";
#ifdef riscos
bitmap = url->data.thumbnail;
if (bitmap)
thumb_file = bitmap->filename;
#endif
if (url->data.title) {
s = url->data.title;
for (i = 0; s[i] != '\0';
i++)
if (s[i] < 32)
s[i] = ' ';
for (--i;
((i > 0) &&
(s[i] == ' '));
i--)
s[i] = '\0';
title = url->data.title;
}
else
title = "";
fprintf(fp, "%s\n%i\n%i\n%i\n%s\n%s\n",
url->data.url,
url->data.visits,
(int) url->data.
last_visit,
url->data.type,
thumb_file,
title);
}
}
}
fclose(fp);
}
/**
* Associates a thumbnail with a specified URL.
*/
void url_store_add_thumbnail(const char *url, struct bitmap *bitmap) {
struct url_content *content;
content = url_store_find(url);
if (content) {
if (content->thumbnail)
bitmap_destroy(content->thumbnail);
content->thumbnail = bitmap;
}
}
/**
* Gets the thumbnail associated with a given URL.
*/
struct bitmap *url_store_get_thumbnail(const char *url) {
struct url_content *content;
content = url_store_find(url);
if (content)
return content->thumbnail;
return NULL;
}
int url_store_compare_last_visit(const void *a, const void *b) {
struct url_content * const *url_a = (struct url_content * const *)a;
struct url_content * const *url_b = (struct url_content * const *)b;
return ((*url_a)->last_visit - (*url_b)->last_visit);
}

View File

@ -1,61 +0,0 @@
/*
* 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 2005 Richard Wilson <info@tinct.net>
*/
/** \file
* Central repository for URL data (interface).
*/
#ifndef _NETSURF_CONTENT_URLSTORE_H_
#define _NETSURF_CONTENT_URLSTORE_H_
#include <time.h>
#include "netsurf/content/content_type.h"
struct bitmap;
struct hostname_data {
char *hostname; /**< Hostname (lowercase) */
int hostname_length; /**< Length of hostname */
struct url_data *url; /**< URLs for this host */
struct hostname_data *previous; /**< Previous hostname */
struct hostname_data *next; /**< Next hostname */
};
struct url_content {
struct bitmap *thumbnail; /**< Thumbnail, or NULL */
char *url; /**< URL (including hostname) */
char *title; /**< Page title */
size_t url_length; /**< Length of URL (including hostname) */
unsigned int visits; /**< Number of times visited */
time_t last_visit; /**< The time() of the last visit */
content_type type; /**< The content type */
};
struct url_data {
struct url_content data; /**< Stored URL content data */
struct url_data *previous; /**< Previous URL */
struct url_data *next; /**< Next URL */
struct hostname_data *parent; /**< Parent hostname data */
};
extern struct hostname_data *url_store_hostnames;
struct url_content *url_store_find(const char *url);
struct url_content *url_store_match(const char *url, struct url_data **reference);
char *url_store_match_string(const char *text);
void url_store_add_thumbnail(const char *url, struct bitmap *bitmap);
struct bitmap *url_store_get_thumbnail(const char *url);
void url_store_load(const char *file);
void url_store_save(const char *file);
int url_store_compare_last_visit(const void *, const void *);
#endif

2231
content/urldb.c Normal file

File diff suppressed because it is too large Load Diff

65
content/urldb.h Normal file
View File

@ -0,0 +1,65 @@
/*
* 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 2006 John M Bell <jmb202@ecs.soton.ac.uk>
*/
/** \file
* Unified URL information database (interface)
*/
#ifndef _NETSURF_CONTENT_URLDB_H_
#define _NETSURF_CONTENT_URLDB_H_
#include <stdbool.h>
#include <time.h>
#include "netsurf/content/content_type.h"
struct url_data {
const char *title; /**< Resource title */
unsigned int visits; /**< Visit count */
time_t last_visit; /**< Last visit time */
content_type type; /**< Type of resource */
};
struct bitmap;
/* Persistence support */
void urldb_load(const char *filename);
void urldb_save(const char *filename);
/* URL insertion */
bool urldb_add_url(const char *url);
/* URL data modification / lookup */
void urldb_set_url_title(const char *url, const char *title);
void urldb_set_url_content_type(const char *url, content_type type);
void urldb_update_url_visit_data(const char *url);
void urldb_reset_url_visit_data(const char *url);
const struct url_data *urldb_get_url_data(const char *url);
/* Authentication modification / lookup */
void urldb_set_auth_details(const char *url, const char *realm,
const char *auth);
const char *urldb_get_auth_details(const char *url);
/* SSL certificate permissions */
void urldb_set_cert_permissions(const char *url, bool permit);
bool urldb_get_cert_permissions(const char *url);
/* Thumbnail handling */
void urldb_set_thumbnail(const char *url, struct bitmap *bitmap);
const struct bitmap *urldb_get_thumbnail(const char *url);
/* URL completion */
void urldb_iterate_partial(const char *prefix,
bool (*callback)(const char *url));
/* Iteration */
void urldb_iterate_entries(bool (*callback)(const char *url));
/* Debug */
void urldb_dump(void);
#endif

View File

@ -13,6 +13,7 @@
#include "netsurf/content/fetch.h" #include "netsurf/content/fetch.h"
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/fetchcache.h" #include "netsurf/content/fetchcache.h"
#include "netsurf/content/urldb.h"
#include "netsurf/desktop/gui.h" #include "netsurf/desktop/gui.h"
#include "netsurf/desktop/options.h" #include "netsurf/desktop/options.h"
#include "netsurf/desktop/textinput.h" #include "netsurf/desktop/textinput.h"
@ -162,7 +163,7 @@ bool plugin_redraw(struct content *c, int x, int y,
int clip_x0, int clip_y0, int clip_x1, int clip_y1, int clip_x0, int clip_y0, int clip_x1, int clip_y1,
float scale, unsigned long background_colour) {return true;} float scale, unsigned long background_colour) {return true;}
void plugin_open(struct content *c, struct browser_window *bw, void plugin_open(struct content *c, struct browser_window *bw,
struct content *page, struct box *box, struct content *page, unsigned int index, struct box *box,
struct object_params *params) {} struct object_params *params) {}
void plugin_close(struct content *c) {} void plugin_close(struct content *c) {}
bool plugin_handleable(const char *mime_type) {return false;} bool plugin_handleable(const char *mime_type) {return false;}
@ -180,7 +181,8 @@ void tree_draw_line(int x, int y, int width, int height) {}
void tree_draw_node_element(struct tree *tree, struct node_element *element) {} void tree_draw_node_element(struct tree *tree, struct node_element *element) {}
void tree_draw_node_expansion(struct tree *tree, struct node *node) {} void tree_draw_node_expansion(struct tree *tree, struct node *node) {}
void tree_recalculate_node_element(struct node_element *element) {} void tree_recalculate_node_element(struct node_element *element) {}
void tree_update_URL_node(struct node *node, struct url_content *data) {} void tree_update_URL_node(struct node *node, const char *url,
const struct url_data *data) {}
void tree_resized(struct tree *tree) {} void tree_resized(struct tree *tree) {}
void tree_set_node_sprite_folder(struct node *node) {} void tree_set_node_sprite_folder(struct node *node) {}

189
depend
View File

@ -1,89 +1,100 @@
arm-riscos-aof/content.o arm-ncos-aof/content.o x86_64-linux-gnu-debug/content.o x86_64-linux-gnu-gtk/content.o : content/content.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/utils.h arm-riscos-aof/content.o arm-riscos-aof-small/content.o arm-ncos-aof/content.o i486-linux-debug/content.o i486-linux-gtk/content.o : content/content.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/utils.h
arm-riscos-aof/fetch.o arm-ncos-aof/fetch.o x86_64-linux-gnu-debug/fetch.o x86_64-linux-gnu-gtk/fetch.o : content/fetch.c content/content.h content/content_type.h content/fetch.h css/css.h css/css_enum.h desktop/401login.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/form.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h arm-riscos-aof/fetch.o arm-riscos-aof-small/fetch.o arm-ncos-aof/fetch.o i486-linux-debug/fetch.o i486-linux-gtk/fetch.o : content/fetch.c content/content_type.h content/fetch.h content/urldb.h desktop/options.h desktop/tree.h render/form.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h
arm-riscos-aof/fetchcache.o arm-ncos-aof/fetchcache.o x86_64-linux-gnu-debug/fetchcache.o x86_64-linux-gnu-gtk/fetchcache.o : content/fetchcache.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h content/url_store.h css/css.h css/css_enum.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h arm-riscos-aof/fetchcache.o arm-riscos-aof-small/fetchcache.o arm-ncos-aof/fetchcache.o i486-linux-debug/fetchcache.o i486-linux-gtk/fetchcache.o : content/fetchcache.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utils.h
arm-riscos-aof/url_store.o arm-ncos-aof/url_store.o x86_64-linux-gnu-debug/url_store.o x86_64-linux-gnu-gtk/url_store.o : content/url_store.c content/url_store.h image/bitmap.h riscos/bitmap.h utils/log.h utils/url.h arm-riscos-aof/urldb.o arm-riscos-aof-small/urldb.o arm-ncos-aof/urldb.o i486-linux-debug/urldb.o i486-linux-gtk/urldb.o : content/urldb.c content/content_type.h content/urldb.h desktop/options.h desktop/tree.h image/bitmap.h riscos/bitmap.h utils/config.h utils/log.h utils/url.h utils/utils.h
arm-riscos-aof/css.o arm-ncos-aof/css.o x86_64-linux-gnu-debug/css.o x86_64-linux-gnu-gtk/css.o : css/css.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h css/parser.h desktop/browser.h desktop/gui.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utils.h arm-riscos-aof/css.o arm-riscos-aof-small/css.o arm-ncos-aof/css.o i486-linux-debug/css.o i486-linux-gtk/css.o : css/css.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h css/parser.h desktop/browser.h desktop/gui.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utils.h
arm-riscos-aof/css_enum.o arm-ncos-aof/css_enum.o x86_64-linux-gnu-debug/css_enum.o x86_64-linux-gnu-gtk/css_enum.o : css/css_enum.c css/css_enum.h arm-riscos-aof/css_enum.o arm-riscos-aof-small/css_enum.o arm-ncos-aof/css_enum.o i486-linux-debug/css_enum.o i486-linux-gtk/css_enum.o : css/css_enum.c css/css_enum.h
arm-riscos-aof/parser.o arm-ncos-aof/parser.o x86_64-linux-gnu-debug/parser.o x86_64-linux-gnu-gtk/parser.o : css/parser.c css/css.h css/css_enum.h utils/utils.h arm-riscos-aof/parser.o arm-riscos-aof-small/parser.o arm-ncos-aof/parser.o i486-linux-debug/parser.o i486-linux-gtk/parser.o : css/parser.c css/css.h css/css_enum.h utils/utils.h
arm-riscos-aof/ruleset.o arm-ncos-aof/ruleset.o x86_64-linux-gnu-debug/ruleset.o x86_64-linux-gnu-gtk/ruleset.o : css/ruleset.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/url.h utils/utils.h arm-riscos-aof/ruleset.o arm-riscos-aof-small/ruleset.o arm-ncos-aof/ruleset.o i486-linux-debug/ruleset.o i486-linux-gtk/ruleset.o : css/ruleset.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/url.h utils/utils.h
arm-riscos-aof/scanner.o arm-ncos-aof/scanner.o x86_64-linux-gnu-debug/scanner.o x86_64-linux-gnu-gtk/scanner.o : css/scanner.c css/css.h css/css_enum.h css/parser.h arm-riscos-aof/scanner.o arm-riscos-aof-small/scanner.o arm-ncos-aof/scanner.o i486-linux-debug/scanner.o i486-linux-gtk/scanner.o : css/scanner.c css/css.h css/css_enum.h css/parser.h
arm-riscos-aof/debug_bitmap.o arm-ncos-aof/debug_bitmap.o x86_64-linux-gnu-debug/debug_bitmap.o x86_64-linux-gnu-gtk/debug_bitmap.o : debug/debug_bitmap.c image/bitmap.h arm-riscos-aof/debug_bitmap.o arm-riscos-aof-small/debug_bitmap.o arm-ncos-aof/debug_bitmap.o i486-linux-debug/debug_bitmap.o i486-linux-gtk/debug_bitmap.o : debug/debug_bitmap.c image/bitmap.h
arm-riscos-aof/filetyped.o arm-ncos-aof/filetyped.o x86_64-linux-gnu-debug/filetyped.o x86_64-linux-gnu-gtk/filetyped.o : debug/filetyped.c content/fetch.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/filetyped.o arm-riscos-aof-small/filetyped.o arm-ncos-aof/filetyped.o i486-linux-debug/filetyped.o i486-linux-gtk/filetyped.o : debug/filetyped.c content/fetch.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/fontd.o arm-ncos-aof/fontd.o x86_64-linux-gnu-debug/fontd.o x86_64-linux-gnu-gtk/fontd.o : debug/fontd.c css/css.h css/css_enum.h render/font.h arm-riscos-aof/fontd.o arm-riscos-aof-small/fontd.o arm-ncos-aof/fontd.o i486-linux-debug/fontd.o i486-linux-gtk/fontd.o : debug/fontd.c css/css.h css/css_enum.h render/font.h
arm-riscos-aof/netsurfd.o arm-ncos-aof/netsurfd.o x86_64-linux-gnu-debug/netsurfd.o x86_64-linux-gnu-gtk/netsurfd.o : debug/netsurfd.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/html.h riscos/draw.h riscos/plugin.h riscos/save_complete.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h arm-riscos-aof/netsurfd.o arm-riscos-aof-small/netsurfd.o arm-ncos-aof/netsurfd.o i486-linux-debug/netsurfd.o i486-linux-gtk/netsurfd.o : debug/netsurfd.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/options.h desktop/textinput.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/save_complete.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h
arm-riscos-aof/browser.o arm-ncos-aof/browser.o x86_64-linux-gnu-debug/browser.o x86_64-linux-gnu-gtk/browser.o : desktop/browser.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h content/url_store.h css/css.h css/css_enum.h desktop/401login.h desktop/browser.h desktop/gui.h desktop/options.h desktop/selection.h desktop/textinput.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h render/imagemap.h render/layout.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utf8.h utils/utils.h arm-riscos-aof/browser.o arm-riscos-aof-small/browser.o arm-ncos-aof/browser.o i486-linux-debug/browser.o i486-linux-gtk/browser.o : desktop/browser.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h content/urldb.h css/css.h css/css_enum.h desktop/401login.h desktop/browser.h desktop/gui.h desktop/history_core.h desktop/options.h desktop/selection.h desktop/textinput.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/font.h render/form.h render/html.h render/imagemap.h render/layout.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utf8.h utils/utils.h
arm-riscos-aof/loginlist.o arm-ncos-aof/loginlist.o x86_64-linux-gnu-debug/loginlist.o x86_64-linux-gnu-gtk/loginlist.o : desktop/loginlist.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/401login.h desktop/browser.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/url.h utils/utils.h arm-riscos-aof/history_core.o arm-riscos-aof-small/history_core.o arm-ncos-aof/history_core.o i486-linux-debug/history_core.o i486-linux-gtk/history_core.o : desktop/history_core.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/history_core.h desktop/plotters.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/font.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/url.h utils/utils.h
arm-riscos-aof/netsurf.o arm-ncos-aof/netsurf.o x86_64-linux-gnu-debug/netsurf.o x86_64-linux-gnu-gtk/netsurf.o : desktop/netsurf.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/buffer.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/talloc.h utils/url.h utils/utf8.h utils/utils.h arm-riscos-aof/netsurf.o arm-riscos-aof-small/netsurf.o arm-ncos-aof/netsurf.o i486-linux-debug/netsurf.o i486-linux-gtk/netsurf.o : desktop/netsurf.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/buffer.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/url.h utils/utf8.h utils/utils.h
arm-riscos-aof/options.o arm-ncos-aof/options.o x86_64-linux-gnu-debug/options.o x86_64-linux-gnu-gtk/options.o : desktop/options.c css/css.h css/css_enum.h desktop/options.h desktop/tree.h riscos/options.h riscos/tinct.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/options.o arm-riscos-aof-small/options.o arm-ncos-aof/options.o i486-linux-debug/options.o i486-linux-gtk/options.o : desktop/options.c content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/options.h desktop/tree.h riscos/options.h riscos/tinct.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/save_text.o arm-ncos-aof/save_text.o x86_64-linux-gnu-debug/save_text.o x86_64-linux-gnu-gtk/save_text.o : desktop/save_text.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/save_text.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/save_text.o arm-riscos-aof-small/save_text.o arm-ncos-aof/save_text.o i486-linux-debug/save_text.o i486-linux-gtk/save_text.o : desktop/save_text.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/save_text.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/selection.o arm-ncos-aof/selection.o x86_64-linux-gnu-debug/selection.o x86_64-linux-gnu-gtk/selection.o : desktop/selection.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/plotters.h desktop/selection.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/font.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/selection.o arm-riscos-aof-small/selection.o arm-ncos-aof/selection.o i486-linux-debug/selection.o i486-linux-gtk/selection.o : desktop/selection.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/plotters.h desktop/selection.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/utf8.h utils/utils.h
arm-riscos-aof/textinput.o arm-ncos-aof/textinput.o x86_64-linux-gnu-debug/textinput.o x86_64-linux-gnu-gtk/textinput.o : desktop/textinput.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/selection.h desktop/textinput.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/font.h render/form.h render/html.h render/layout.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/talloc.h utils/utf8.h utils/utils.h arm-riscos-aof/textinput.o arm-riscos-aof-small/textinput.o arm-ncos-aof/textinput.o i486-linux-debug/textinput.o i486-linux-gtk/textinput.o : desktop/textinput.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/selection.h desktop/textinput.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/font.h render/form.h render/html.h render/layout.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/talloc.h utils/utf8.h utils/utils.h
arm-riscos-aof/tree.o arm-ncos-aof/tree.o x86_64-linux-gnu-debug/tree.o x86_64-linux-gnu-gtk/tree.o : desktop/tree.c desktop/options.h desktop/tree.h utils/log.h utils/utils.h arm-riscos-aof/tree.o arm-riscos-aof-small/tree.o arm-ncos-aof/tree.o i486-linux-debug/tree.o i486-linux-gtk/tree.o : desktop/tree.c content/content_type.h content/urldb.h desktop/options.h desktop/tree.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/version.o arm-ncos-aof/version.o x86_64-linux-gnu-debug/version.o x86_64-linux-gnu-gtk/version.o : desktop/version.c arm-riscos-aof/version.o arm-riscos-aof-small/version.o arm-ncos-aof/version.o i486-linux-debug/version.o i486-linux-gtk/version.o : desktop/version.c
arm-riscos-aof/font_pango.o arm-ncos-aof/font_pango.o x86_64-linux-gnu-debug/font_pango.o x86_64-linux-gnu-gtk/font_pango.o : gtk/font_pango.c css/css.h css/css_enum.h render/font.h utils/log.h utils/utils.h arm-riscos-aof/font_pango.o arm-riscos-aof-small/font_pango.o arm-ncos-aof/font_pango.o i486-linux-debug/font_pango.o i486-linux-gtk/font_pango.o : gtk/font_pango.c css/css.h css/css_enum.h gtk/font_pango.h gtk/gtk_window.h render/font.h utils/log.h utils/utils.h
arm-riscos-aof/gtk_bitmap.o arm-ncos-aof/gtk_bitmap.o x86_64-linux-gnu-debug/gtk_bitmap.o x86_64-linux-gnu-gtk/gtk_bitmap.o : gtk/gtk_bitmap.c content/content.h content/content_type.h css/css.h css/css_enum.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h arm-riscos-aof/gtk_bitmap.o arm-riscos-aof-small/gtk_bitmap.o arm-ncos-aof/gtk_bitmap.o i486-linux-debug/gtk_bitmap.o i486-linux-gtk/gtk_bitmap.o : gtk/gtk_bitmap.c content/content.h content/content_type.h css/css.h css/css_enum.h gtk/gtk_window.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h
arm-riscos-aof/gtk_gui.o arm-ncos-aof/gtk_gui.o x86_64-linux-gnu-debug/gtk_gui.o x86_64-linux-gnu-gtk/gtk_gui.o : gtk/gtk_gui.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/401login.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/messages.h utils/utf8.h utils/utils.h arm-riscos-aof/gtk_gui.o arm-riscos-aof-small/gtk_gui.o arm-ncos-aof/gtk_gui.o i486-linux-debug/gtk_gui.o i486-linux-gtk/gtk_gui.o : gtk/gtk_gui.c content/content.h content/content_type.h content/fetch.h content/urldb.h css/css.h css/css_enum.h desktop/401login.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h gtk/gtk_gui.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utf8.h utils/utils.h
arm-riscos-aof/gtk_plotters.o arm-ncos-aof/gtk_plotters.o x86_64-linux-gnu-debug/gtk_plotters.o x86_64-linux-gnu-gtk/gtk_plotters.o : gtk/gtk_plotters.c css/css.h css/css_enum.h desktop/plotters.h render/font.h utils/log.h arm-riscos-aof/gtk_plotters.o arm-riscos-aof-small/gtk_plotters.o arm-ncos-aof/gtk_plotters.o i486-linux-debug/gtk_plotters.o i486-linux-gtk/gtk_plotters.o : gtk/gtk_plotters.c css/css.h css/css_enum.h desktop/plotters.h gtk/font_pango.h gtk/gtk_plotters.h gtk/gtk_window.h render/font.h utils/log.h
arm-riscos-aof/gtk_treeview.o arm-ncos-aof/gtk_treeview.o x86_64-linux-gnu-debug/gtk_treeview.o x86_64-linux-gnu-gtk/gtk_treeview.o : gtk/gtk_treeview.c desktop/tree.h arm-riscos-aof/gtk_schedule.o arm-riscos-aof-small/gtk_schedule.o arm-ncos-aof/gtk_schedule.o i486-linux-debug/gtk_schedule.o i486-linux-gtk/gtk_schedule.o : gtk/gtk_schedule.c desktop/browser.h
arm-riscos-aof/gtk_window.o arm-ncos-aof/gtk_window.o x86_64-linux-gnu-debug/gtk_window.o x86_64-linux-gnu-gtk/gtk_window.o : gtk/gtk_window.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/plotters.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/font.h render/form.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/messages.h utils/utils.h arm-riscos-aof/gtk_thumbnail.o arm-riscos-aof-small/gtk_thumbnail.o arm-ncos-aof/gtk_thumbnail.o i486-linux-debug/gtk_thumbnail.o i486-linux-gtk/gtk_thumbnail.o : gtk/gtk_thumbnail.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/plotters.h gtk/gtk_plotters.h gtk/gtk_window.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/font.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h
arm-riscos-aof/gif.o arm-ncos-aof/gif.o x86_64-linux-gnu-debug/gif.o x86_64-linux-gnu-gtk/gif.o : image/gif.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/gtk_treeview.o arm-riscos-aof-small/gtk_treeview.o arm-ncos-aof/gtk_treeview.o i486-linux-debug/gtk_treeview.o i486-linux-gtk/gtk_treeview.o : gtk/gtk_treeview.c desktop/tree.h
arm-riscos-aof/gifread.o arm-ncos-aof/gifread.o x86_64-linux-gnu-debug/gifread.o x86_64-linux-gnu-gtk/gifread.o : image/gifread.c image/bitmap.h utils/log.h arm-riscos-aof/gtk_window.o arm-riscos-aof-small/gtk_window.o arm-ncos-aof/gtk_window.o i486-linux-debug/gtk_window.o i486-linux-gtk/gtk_window.o : gtk/gtk_window.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/history_core.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/tree.h gtk/gtk_gui.h gtk/gtk_plotters.h gtk/gtk_window.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/font.h render/form.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/jpeg.o arm-ncos-aof/jpeg.o x86_64-linux-gnu-debug/jpeg.o x86_64-linux-gnu-gtk/jpeg.o : image/jpeg.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/plotters.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/bmp.o arm-riscos-aof-small/bmp.o arm-ncos-aof/bmp.o i486-linux-debug/bmp.o i486-linux-gtk/bmp.o : image/bmp.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/plotters.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/mng.o arm-ncos-aof/mng.o x86_64-linux-gnu-debug/mng.o x86_64-linux-gnu-gtk/mng.o : image/mng.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/bmpread.o arm-riscos-aof-small/bmpread.o arm-ncos-aof/bmpread.o i486-linux-debug/bmpread.o i486-linux-gtk/bmpread.o : image/bmpread.c image/bitmap.h image/bmpread.h utils/log.h
arm-riscos-aof/box.o arm-ncos-aof/box.o x86_64-linux-gnu-debug/box.o x86_64-linux-gnu-gtk/box.o : render/box.c content/content.h content/content_type.h css/css.h css/css_enum.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/talloc.h arm-riscos-aof/gif.o arm-riscos-aof-small/gif.o arm-ncos-aof/gif.o i486-linux-debug/gif.o i486-linux-gtk/gif.o : image/gif.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/box_construct.o arm-ncos-aof/box_construct.o x86_64-linux-gnu-debug/box_construct.o x86_64-linux-gnu-gtk/box_construct.o : render/box_construct.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utils.h arm-riscos-aof/gifread.o arm-riscos-aof-small/gifread.o arm-ncos-aof/gifread.o i486-linux-debug/gifread.o i486-linux-gtk/gifread.o : image/gifread.c image/bitmap.h utils/log.h
arm-riscos-aof/box_normalise.o arm-ncos-aof/box_normalise.o x86_64-linux-gnu-debug/box_normalise.o x86_64-linux-gnu-gtk/box_normalise.o : render/box_normalise.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/html.h render/table.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h arm-riscos-aof/ico.o arm-riscos-aof-small/ico.o arm-ncos-aof/ico.o i486-linux-debug/ico.o i486-linux-gtk/ico.o : image/ico.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/plotters.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/form.o arm-ncos-aof/form.o x86_64-linux-gnu-debug/form.o x86_64-linux-gnu-gtk/form.o : render/form.c render/box.h render/form.h utils/config.h utils/log.h utils/url.h utils/utf8.h utils/utils.h arm-riscos-aof/jpeg.o arm-riscos-aof-small/jpeg.o arm-ncos-aof/jpeg.o i486-linux-debug/jpeg.o i486-linux-gtk/jpeg.o : image/jpeg.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/plotters.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/html.o arm-ncos-aof/html.o x86_64-linux-gnu-debug/html.o x86_64-linux-gnu-gtk/html.o : render/html.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/font.h render/html.h render/imagemap.h render/layout.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utils.h arm-riscos-aof/mng.o arm-riscos-aof-small/mng.o arm-ncos-aof/mng.o i486-linux-debug/mng.o i486-linux-gtk/mng.o : image/mng.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/html_redraw.o arm-ncos-aof/html_redraw.o x86_64-linux-gnu-debug/html_redraw.o x86_64-linux-gnu-gtk/html_redraw.o : render/html_redraw.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/plotters.h desktop/selection.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/font.h render/form.h render/html.h render/layout.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/box.o arm-riscos-aof-small/box.o arm-ncos-aof/box.o i486-linux-debug/box.o i486-linux-gtk/box.o : render/box.c content/content.h content/content_type.h css/css.h css/css_enum.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/talloc.h
arm-riscos-aof/imagemap.o arm-ncos-aof/imagemap.o x86_64-linux-gnu-debug/imagemap.o x86_64-linux-gnu-gtk/imagemap.o : render/imagemap.c content/content.h content/content_type.h css/css.h css/css_enum.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/html.h render/imagemap.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/box_construct.o arm-riscos-aof-small/box_construct.o arm-ncos-aof/box_construct.o i486-linux-debug/box_construct.o i486-linux-gtk/box_construct.o : render/box_construct.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utils.h
arm-riscos-aof/layout.o arm-ncos-aof/layout.o x86_64-linux-gnu-debug/layout.o x86_64-linux-gnu-gtk/layout.o : render/layout.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/font.h render/html.h render/layout.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/talloc.h utils/utils.h arm-riscos-aof/box_normalise.o arm-riscos-aof-small/box_normalise.o arm-ncos-aof/box_normalise.o i486-linux-debug/box_normalise.o i486-linux-gtk/box_normalise.o : render/box_normalise.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/html.h render/table.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h
arm-riscos-aof/list.o arm-ncos-aof/list.o x86_64-linux-gnu-debug/list.o x86_64-linux-gnu-gtk/list.o : render/list.c css/css.h css/css_enum.h render/list.h utils/log.h arm-riscos-aof/form.o arm-riscos-aof-small/form.o arm-ncos-aof/form.o i486-linux-debug/form.o i486-linux-gtk/form.o : render/form.c render/box.h render/form.h utils/config.h utils/log.h utils/url.h utils/utf8.h utils/utils.h
arm-riscos-aof/table.o arm-ncos-aof/table.o x86_64-linux-gnu-debug/table.o x86_64-linux-gnu-gtk/table.o : render/table.c css/css.h css/css_enum.h render/box.h render/table.h utils/log.h utils/talloc.h arm-riscos-aof/html.o arm-riscos-aof-small/html.o arm-ncos-aof/html.o i486-linux-debug/html.o i486-linux-gtk/html.o : render/html.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/font.h render/html.h render/imagemap.h render/layout.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utils.h
arm-riscos-aof/textplain.o arm-ncos-aof/textplain.o x86_64-linux-gnu-debug/textplain.o x86_64-linux-gnu-gtk/textplain.o : render/textplain.c content/content.h content/content_type.h css/css.h css/css_enum.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/messages.h arm-riscos-aof/html_redraw.o arm-riscos-aof-small/html_redraw.o arm-ncos-aof/html_redraw.o i486-linux-debug/html_redraw.o i486-linux-gtk/html_redraw.o : render/html_redraw.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/plotters.h desktop/selection.h desktop/textinput.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/font.h render/form.h render/html.h render/layout.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/401login.o arm-ncos-aof/401login.o x86_64-linux-gnu-debug/401login.o x86_64-linux-gnu-gtk/401login.o : riscos/401login.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/401login.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h arm-riscos-aof/imagemap.o arm-riscos-aof-small/imagemap.o arm-ncos-aof/imagemap.o i486-linux-debug/imagemap.o i486-linux-gtk/imagemap.o : render/imagemap.c content/content.h content/content_type.h css/css.h css/css_enum.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/html.h render/imagemap.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/bitmap.o arm-ncos-aof/bitmap.o x86_64-linux-gnu-debug/bitmap.o x86_64-linux-gnu-gtk/bitmap.o : riscos/bitmap.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/bitmap.h riscos/draw.h riscos/filename.h riscos/image.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/tinct.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/layout.o arm-riscos-aof-small/layout.o arm-ncos-aof/layout.o i486-linux-debug/layout.o i486-linux-gtk/layout.o : render/layout.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/font.h render/html.h render/layout.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/talloc.h utils/utils.h
arm-riscos-aof/buffer.o arm-ncos-aof/buffer.o x86_64-linux-gnu-debug/buffer.o x86_64-linux-gnu-gtk/buffer.o : riscos/buffer.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/buffer.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/tinct.h riscos/wimp.h utils/config.h utils/log.h arm-riscos-aof/list.o arm-riscos-aof-small/list.o arm-ncos-aof/list.o i486-linux-debug/list.o i486-linux-gtk/list.o : render/list.c css/css.h css/css_enum.h render/list.h utils/log.h
arm-riscos-aof/debugwin.o arm-ncos-aof/debugwin.o x86_64-linux-gnu-debug/debugwin.o x86_64-linux-gnu-gtk/debugwin.o : riscos/debugwin.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/table.o arm-riscos-aof-small/table.o arm-ncos-aof/table.o i486-linux-debug/table.o i486-linux-gtk/table.o : render/table.c css/css.h css/css_enum.h render/box.h render/table.h utils/log.h utils/talloc.h
arm-riscos-aof/dialog.o arm-ncos-aof/dialog.o x86_64-linux-gnu-debug/dialog.o x86_64-linux-gnu-gtk/dialog.o : riscos/dialog.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/font.h render/html.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h arm-riscos-aof/textplain.o arm-riscos-aof-small/textplain.o arm-ncos-aof/textplain.o i486-linux-debug/textplain.o i486-linux-gtk/textplain.o : render/textplain.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/plotters.h desktop/selection.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/font.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/utf8.h utils/utils.h
arm-riscos-aof/download.o arm-ncos-aof/download.o x86_64-linux-gnu-debug/download.o x86_64-linux-gnu-gtk/download.o : riscos/download.c content/content.h content/content_type.h content/fetch.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/query.h riscos/sprite.h riscos/tinct.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utf8.h utils/utils.h arm-riscos-aof/401login.o arm-riscos-aof-small/401login.o arm-ncos-aof/401login.o i486-linux-debug/401login.o i486-linux-gtk/401login.o : riscos/401login.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/401login.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h
arm-riscos-aof/draw.o arm-ncos-aof/draw.o x86_64-linux-gnu-debug/draw.o x86_64-linux-gnu-gtk/draw.o : riscos/draw.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/artworks.o arm-riscos-aof-small/artworks.o arm-ncos-aof/artworks.o i486-linux-debug/artworks.o i486-linux-gtk/artworks.o : riscos/artworks.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/filename.o arm-ncos-aof/filename.o x86_64-linux-gnu-debug/filename.o x86_64-linux-gnu-gtk/filename.o : riscos/filename.c riscos/filename.h utils/log.h arm-riscos-aof/assert.o arm-riscos-aof-small/assert.o arm-ncos-aof/assert.o i486-linux-debug/assert.o i486-linux-gtk/assert.o : riscos/assert.c
arm-riscos-aof/filetype.o arm-ncos-aof/filetype.o x86_64-linux-gnu-debug/filetype.o x86_64-linux-gnu-gtk/filetype.o : riscos/filetype.c content/content.h content/content_type.h content/fetch.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/bitmap.o arm-riscos-aof-small/bitmap.o arm-ncos-aof/bitmap.o i486-linux-debug/bitmap.o i486-linux-gtk/bitmap.o : riscos/bitmap.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/bitmap.h riscos/draw.h riscos/filename.h riscos/image.h riscos/options.h riscos/palettes.h riscos/plugin.h riscos/sprite.h riscos/tinct.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/font.o arm-ncos-aof/font.o x86_64-linux-gnu-debug/font.o x86_64-linux-gnu-gtk/font.o : riscos/font.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/font.h render/html.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/tinct.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/buffer.o arm-riscos-aof-small/buffer.o arm-ncos-aof/buffer.o i486-linux-debug/buffer.o i486-linux-gtk/buffer.o : riscos/buffer.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/buffer.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/tinct.h riscos/wimp.h utils/config.h utils/log.h
arm-riscos-aof/global_history.o arm-ncos-aof/global_history.o x86_64-linux-gnu-debug/global_history.o x86_64-linux-gnu-gtk/global_history.o : riscos/global_history.c content/content.h content/content_type.h content/url_store.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/menus.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/treeview.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h arm-riscos-aof/configure.o arm-riscos-aof-small/configure.o arm-ncos-aof/configure.o i486-linux-debug/configure.o i486-linux-gtk/configure.o : riscos/configure.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/configure.h riscos/configure/configure.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/gui.o arm-ncos-aof/gui.o x86_64-linux-gnu-debug/gui.o x86_64-linux-gnu-gtk/gui.o : riscos/gui.c content/content.h content/content_type.h content/url_store.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/font.h render/html.h riscos/bitmap.h riscos/buffer.h riscos/draw.h riscos/filename.h riscos/global_history.h riscos/gui.h riscos/help.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/print.h riscos/query.h riscos/save_complete.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/treeview.h riscos/uri.h riscos/url_complete.h riscos/url_protocol.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/debugwin.o arm-riscos-aof-small/debugwin.o arm-ncos-aof/debugwin.o i486-linux-debug/debugwin.o i486-linux-gtk/debugwin.o : riscos/debugwin.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/wimp_event.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/help.o arm-ncos-aof/help.o x86_64-linux-gnu-debug/help.o x86_64-linux-gnu-gtk/help.o : riscos/help.c content/content.h content/content_type.h content/url_store.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/help.h riscos/menus.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/utf8.h utils/utils.h arm-riscos-aof/dialog.o arm-riscos-aof-small/dialog.o arm-ncos-aof/dialog.o i486-linux-debug/dialog.o i486-linux-gtk/dialog.o : riscos/dialog.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/font.h render/html.h render/textplain.h riscos/artworks.h riscos/configure.h riscos/dialog.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/save.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/url_complete.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h
arm-riscos-aof/history.o arm-ncos-aof/history.o x86_64-linux-gnu-debug/history.o x86_64-linux-gnu-gtk/history.o : riscos/history.c content/content.h content/content_type.h content/url_store.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/bitmap.h riscos/draw.h riscos/gui.h riscos/image.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/thumbnail.h riscos/tinct.h riscos/wimp.h utils/config.h utils/log.h utils/url.h utils/utils.h arm-riscos-aof/download.o arm-riscos-aof-small/download.o arm-ncos-aof/download.o i486-linux-debug/download.o i486-linux-gtk/download.o : riscos/download.c content/content.h content/content_type.h content/fetch.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/query.h riscos/save.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utf8.h utils/utils.h
arm-riscos-aof/hotlist.o arm-ncos-aof/hotlist.o x86_64-linux-gnu-debug/hotlist.o x86_64-linux-gnu-gtk/hotlist.o : riscos/hotlist.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/treeview.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h arm-riscos-aof/draw.o arm-riscos-aof-small/draw.o arm-ncos-aof/draw.o i486-linux-debug/draw.o i486-linux-gtk/draw.o : riscos/draw.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/image.o arm-ncos-aof/image.o x86_64-linux-gnu-debug/image.o x86_64-linux-gnu-gtk/image.o : riscos/image.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/image.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/tinct.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/filename.o arm-riscos-aof-small/filename.o arm-ncos-aof/filename.o i486-linux-debug/filename.o i486-linux-gtk/filename.o : riscos/filename.c riscos/filename.h utils/log.h
arm-riscos-aof/menus.o arm-ncos-aof/menus.o x86_64-linux-gnu-debug/menus.o x86_64-linux-gnu-gtk/menus.o : riscos/menus.c content/content.h content/content_type.h content/url_store.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/help.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/treeview.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utf8.h utils/utils.h arm-riscos-aof/filetype.o arm-riscos-aof-small/filetype.o arm-ncos-aof/filetype.o i486-linux-debug/filetype.o i486-linux-gtk/filetype.o : riscos/filetype.c content/content.h content/content_type.h content/fetch.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/mouseactions.o arm-ncos-aof/mouseactions.o x86_64-linux-gnu-debug/mouseactions.o x86_64-linux-gnu-gtk/mouseactions.o : riscos/mouseactions.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/tinct.h utils/config.h utils/log.h arm-riscos-aof/font.o arm-riscos-aof-small/font.o arm-ncos-aof/font.o i486-linux-debug/font.o i486-linux-gtk/font.o : riscos/font.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/font.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/tinct.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/plotters.o arm-ncos-aof/plotters.o x86_64-linux-gnu-debug/plotters.o x86_64-linux-gnu-gtk/plotters.o : riscos/plotters.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/font.h render/html.h riscos/bitmap.h riscos/draw.h riscos/gui.h riscos/image.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h arm-riscos-aof/global_history.o arm-riscos-aof-small/global_history.o arm-ncos-aof/global_history.o i486-linux-debug/global_history.o i486-linux-gtk/global_history.o : riscos/global_history.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/treeview.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h
arm-riscos-aof/plugin.o arm-ncos-aof/plugin.o x86_64-linux-gnu-debug/plugin.o x86_64-linux-gnu-gtk/plugin.o : riscos/plugin.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/html.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h arm-riscos-aof/gui.o arm-riscos-aof-small/gui.o arm-ncos-aof/gui.o i486-linux-debug/gui.o i486-linux-gtk/gui.o : riscos/gui.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/font.h render/html.h render/textplain.h riscos/artworks.h riscos/bitmap.h riscos/buffer.h riscos/dialog.h riscos/draw.h riscos/filename.h riscos/global_history.h riscos/gui.h riscos/help.h riscos/menus.h riscos/message.h riscos/options.h riscos/plugin.h riscos/print.h riscos/query.h riscos/save.h riscos/save_complete.h riscos/sprite.h riscos/textselection.h riscos/theme.h riscos/tinct.h riscos/treeview.h riscos/uri.h riscos/url_complete.h riscos/url_protocol.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h
arm-riscos-aof/print.o arm-ncos-aof/print.o x86_64-linux-gnu-debug/print.o x86_64-linux-gnu-gtk/print.o : riscos/print.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/font.h render/html.h render/layout.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/plugin.h riscos/print.h riscos/sprite.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/help.o arm-riscos-aof-small/help.o arm-ncos-aof/help.o i486-linux-debug/help.o i486-linux-gtk/help.o : riscos/help.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/help.h riscos/menus.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/utf8.h utils/utils.h
arm-riscos-aof/query.o arm-ncos-aof/query.o x86_64-linux-gnu-debug/query.o x86_64-linux-gnu-gtk/query.o : riscos/query.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/query.h riscos/sprite.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/history.o arm-riscos-aof-small/history.o arm-ncos-aof/history.o i486-linux-debug/history.o i486-linux-gtk/history.o : riscos/history.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/history_core.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/url.h utils/utils.h
arm-riscos-aof/save.o arm-ncos-aof/save.o x86_64-linux-gnu-debug/save.o x86_64-linux-gnu-gtk/save.o : riscos/save.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/save_text.h desktop/selection.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/html.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/save_complete.h riscos/save_draw.h riscos/sprite.h riscos/thumbnail.h riscos/tinct.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utf8.h utils/utils.h arm-riscos-aof/hotlist.o arm-riscos-aof-small/hotlist.o arm-ncos-aof/hotlist.o i486-linux-debug/hotlist.o i486-linux-gtk/hotlist.o : riscos/hotlist.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/treeview.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h
arm-riscos-aof/save_complete.o arm-ncos-aof/save_complete.o x86_64-linux-gnu-debug/save_complete.o x86_64-linux-gnu-gtk/save_complete.o : riscos/save_complete.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/save_complete.h riscos/sprite.h utils/config.h utils/log.h utils/url.h utils/utils.h arm-riscos-aof/image.o arm-riscos-aof-small/image.o arm-ncos-aof/image.o i486-linux-debug/image.o i486-linux-gtk/image.o : riscos/image.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/image.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/tinct.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/save_draw.o arm-ncos-aof/save_draw.o x86_64-linux-gnu-debug/save_draw.o x86_64-linux-gnu-gtk/save_draw.o : riscos/save_draw.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/plotters.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/font.h render/form.h render/html.h render/layout.h riscos/bitmap.h riscos/draw.h riscos/plugin.h riscos/save_draw.h riscos/sprite.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/menus.o arm-riscos-aof-small/menus.o arm-ncos-aof/menus.o i486-linux-debug/menus.o i486-linux-gtk/menus.o : riscos/menus.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/history_core.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h render/textplain.h riscos/artworks.h riscos/configure.h riscos/dialog.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/help.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/save.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/treeview.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utf8.h utils/utils.h
arm-riscos-aof/schedule.o arm-ncos-aof/schedule.o x86_64-linux-gnu-debug/schedule.o x86_64-linux-gnu-gtk/schedule.o : riscos/schedule.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h arm-riscos-aof/message.o arm-riscos-aof-small/message.o arm-ncos-aof/message.o i486-linux-debug/message.o i486-linux-gtk/message.o : riscos/message.c riscos/message.h utils/log.h utils/utils.h
arm-riscos-aof/search.o arm-ncos-aof/search.o x86_64-linux-gnu-debug/search.o x86_64-linux-gnu-gtk/search.o : riscos/search.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/selection.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/html.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/plugin.h riscos/sprite.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/mouseactions.o arm-riscos-aof-small/mouseactions.o arm-ncos-aof/mouseactions.o i486-linux-debug/mouseactions.o i486-linux-gtk/mouseactions.o : riscos/mouseactions.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/tinct.h utils/config.h utils/log.h
arm-riscos-aof/sprite.o arm-ncos-aof/sprite.o x86_64-linux-gnu-debug/sprite.o x86_64-linux-gnu-gtk/sprite.o : riscos/sprite.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/image.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/palettes.o arm-riscos-aof-small/palettes.o arm-ncos-aof/palettes.o i486-linux-debug/palettes.o i486-linux-gtk/palettes.o : riscos/palettes.c riscos/palettes.h
arm-riscos-aof/textselection.o arm-ncos-aof/textselection.o x86_64-linux-gnu-debug/textselection.o x86_64-linux-gnu-gtk/textselection.o : riscos/textselection.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/selection.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/utf8.h utils/utils.h arm-riscos-aof/plotters.o arm-riscos-aof-small/plotters.o arm-ncos-aof/plotters.o i486-linux-debug/plotters.o i486-linux-gtk/plotters.o : riscos/plotters.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/font.h render/html.h render/textplain.h riscos/artworks.h riscos/bitmap.h riscos/draw.h riscos/gui.h riscos/image.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h
arm-riscos-aof/theme.o arm-ncos-aof/theme.o x86_64-linux-gnu-debug/theme.o x86_64-linux-gnu-gtk/theme.o : riscos/theme.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/wimp.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/plugin.o arm-riscos-aof-small/plugin.o arm-ncos-aof/plugin.o i486-linux-debug/plugin.o i486-linux-gtk/plugin.o : riscos/plugin.c content/content.h content/content_type.h content/fetch.h content/fetchcache.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h
arm-riscos-aof/theme_install.o arm-ncos-aof/theme_install.o x86_64-linux-gnu-debug/theme_install.o x86_64-linux-gnu-gtk/theme_install.o : riscos/theme_install.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h arm-riscos-aof/print.o arm-riscos-aof-small/print.o arm-ncos-aof/print.o i486-linux-debug/print.o i486-linux-gtk/print.o : riscos/print.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/font.h render/html.h render/layout.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/plugin.h riscos/print.h riscos/sprite.h riscos/theme.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/thumbnail.o arm-ncos-aof/thumbnail.o x86_64-linux-gnu-debug/thumbnail.o x86_64-linux-gnu-gtk/thumbnail.o : riscos/thumbnail.c content/content.h content/content_type.h content/url_store.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/font.h render/html.h riscos/bitmap.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/thumbnail.h riscos/tinct.h utils/config.h utils/log.h arm-riscos-aof/query.o arm-riscos-aof-small/query.o arm-ncos-aof/query.o i486-linux-debug/query.o i486-linux-gtk/query.o : riscos/query.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/query.h riscos/sprite.h riscos/theme.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/treeview.o arm-ncos-aof/treeview.o x86_64-linux-gnu-debug/treeview.o x86_64-linux-gnu-gtk/treeview.o : riscos/treeview.c content/content.h content/content_type.h content/url_store.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/bitmap.h riscos/draw.h riscos/gui.h riscos/image.h riscos/menus.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/treeview.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/save.o arm-riscos-aof-small/save.o arm-ncos-aof/save.o i486-linux-debug/save.o i486-linux-gtk/save.o : riscos/save.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/save_text.h desktop/selection.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/save.h riscos/save_complete.h riscos/save_draw.h riscos/sprite.h riscos/textselection.h riscos/theme.h riscos/thumbnail.h riscos/tinct.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utf8.h utils/utils.h
arm-riscos-aof/ucstables.o arm-ncos-aof/ucstables.o x86_64-linux-gnu-debug/ucstables.o x86_64-linux-gnu-gtk/ucstables.o : riscos/ucstables.c riscos/ucstables.h utils/utf8.h utils/utils.h arm-riscos-aof/save_complete.o arm-riscos-aof-small/save_complete.o arm-ncos-aof/save_complete.o i486-linux-debug/save_complete.o i486-linux-gtk/save_complete.o : riscos/save_complete.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/save_complete.h riscos/sprite.h utils/config.h utils/log.h utils/url.h utils/utils.h
arm-riscos-aof/uri.o arm-ncos-aof/uri.o x86_64-linux-gnu-debug/uri.o x86_64-linux-gnu-gtk/uri.o : riscos/uri.c content/content.h content/content_type.h content/fetch.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/url_protocol.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/save_draw.o arm-riscos-aof-small/save_draw.o arm-ncos-aof/save_draw.o i486-linux-debug/save_draw.o i486-linux-gtk/save_draw.o : riscos/save_draw.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/bitmap.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/save_draw.h riscos/sprite.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/url_complete.o arm-ncos-aof/url_complete.o x86_64-linux-gnu-debug/url_complete.o x86_64-linux-gnu-gtk/url_complete.o : riscos/url_complete.c content/content.h content/content_type.h content/url_store.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/url_complete.h riscos/wimp.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/schedule.o arm-riscos-aof-small/schedule.o arm-ncos-aof/schedule.o i486-linux-debug/schedule.o i486-linux-gtk/schedule.o : riscos/schedule.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h
arm-riscos-aof/url_protocol.o arm-ncos-aof/url_protocol.o x86_64-linux-gnu-debug/url_protocol.o x86_64-linux-gnu-gtk/url_protocol.o : riscos/url_protocol.c content/content.h content/content_type.h content/fetch.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h riscos/uri.h riscos/url_protocol.h utils/config.h utils/log.h utils/utils.h arm-riscos-aof/search.o arm-riscos-aof-small/search.o arm-ncos-aof/search.o i486-linux-debug/search.o i486-linux-gtk/search.o : riscos/search.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/selection.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/wimp.o arm-ncos-aof/wimp.o x86_64-linux-gnu-debug/wimp.o x86_64-linux-gnu-gtk/wimp.o : riscos/wimp.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/html.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h riscos/wimp.h utils/config.h utils/log.h utils/utf8.h utils/utils.h arm-riscos-aof/sprite.o arm-riscos-aof-small/sprite.o arm-ncos-aof/sprite.o i486-linux-debug/sprite.o i486-linux-gtk/sprite.o : riscos/sprite.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/image.h riscos/plugin.h riscos/sprite.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/window.o arm-ncos-aof/window.o x86_64-linux-gnu-debug/window.o x86_64-linux-gnu-gtk/window.o : riscos/window.c content/content.h content/content_type.h content/url_store.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/textinput.h desktop/tree.h image/bitmap.h image/gif.h image/gifread.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h riscos/buffer.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/thumbnail.h riscos/tinct.h riscos/treeview.h riscos/ucstables.h riscos/url_complete.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utf8.h utils/utils.h arm-riscos-aof/sslcert.o arm-riscos-aof-small/sslcert.o arm-ncos-aof/sslcert.o i486-linux-debug/sslcert.o i486-linux-gtk/sslcert.o : riscos/sslcert.c content/content.h content/content_type.h content/fetch.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/wimp_event.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/memdebug.o arm-ncos-aof/memdebug.o x86_64-linux-gnu-debug/memdebug.o x86_64-linux-gnu-gtk/memdebug.o : utils/memdebug.c arm-riscos-aof/textselection.o arm-riscos-aof-small/textselection.o arm-ncos-aof/textselection.o i486-linux-debug/textselection.o i486-linux-gtk/textselection.o : riscos/textselection.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/selection.h desktop/textinput.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/message.h riscos/plugin.h riscos/save.h riscos/sprite.h riscos/textselection.h utils/config.h utils/log.h utils/utf8.h utils/utils.h
arm-riscos-aof/messages.o arm-ncos-aof/messages.o x86_64-linux-gnu-debug/messages.o x86_64-linux-gnu-gtk/messages.o : utils/messages.c utils/log.h utils/messages.h utils/utils.h arm-riscos-aof/theme.o arm-riscos-aof-small/theme.o arm-ncos-aof/theme.o i486-linux-debug/theme.o i486-linux-gtk/theme.o : riscos/theme.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/treeview.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/talloc.o arm-ncos-aof/talloc.o x86_64-linux-gnu-debug/talloc.o x86_64-linux-gnu-gtk/talloc.o : utils/talloc.c arm-riscos-aof/theme_install.o arm-riscos-aof-small/theme_install.o arm-ncos-aof/theme_install.o i486-linux-debug/theme_install.o i486-linux-gtk/theme_install.o : riscos/theme_install.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/url.h utils/utils.h
arm-riscos-aof/translit.o arm-ncos-aof/translit.o x86_64-linux-gnu-debug/translit.o x86_64-linux-gnu-gtk/translit.o : utils/translit.c utils/utils.h arm-riscos-aof/thumbnail.o arm-riscos-aof-small/thumbnail.o arm-ncos-aof/thumbnail.o i486-linux-debug/thumbnail.o i486-linux-gtk/thumbnail.o : riscos/thumbnail.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/font.h render/html.h render/textplain.h riscos/artworks.h riscos/bitmap.h riscos/draw.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/thumbnail.h riscos/tinct.h utils/config.h utils/log.h
arm-riscos-aof/url.o arm-ncos-aof/url.o x86_64-linux-gnu-debug/url.o x86_64-linux-gnu-gtk/url.o : utils/url.c utils/log.h utils/url.h utils/utils.h arm-riscos-aof/treeview.o arm-riscos-aof-small/treeview.o arm-ncos-aof/treeview.o i486-linux-debug/treeview.o i486-linux-gtk/treeview.o : riscos/treeview.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/bitmap.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/image.h riscos/menus.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/treeview.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/utf8.o arm-ncos-aof/utf8.o x86_64-linux-gnu-debug/utf8.o x86_64-linux-gnu-gtk/utf8.o : utils/utf8.c utils/log.h utils/utf8.h arm-riscos-aof/ucstables.o arm-riscos-aof-small/ucstables.o arm-ncos-aof/ucstables.o i486-linux-debug/ucstables.o i486-linux-gtk/ucstables.o : riscos/ucstables.c riscos/ucstables.h utils/log.h utils/utf8.h utils/utils.h
arm-riscos-aof/utils.o arm-ncos-aof/utils.o x86_64-linux-gnu-debug/utils.o x86_64-linux-gnu-gtk/utils.o : utils/utils.c utils/config.h utils/log.h utils/messages.h utils/utf8.h utils/utils.h arm-riscos-aof/uri.o arm-riscos-aof-small/uri.o arm-ncos-aof/uri.o i486-linux-debug/uri.o i486-linux-gtk/uri.o : riscos/uri.c content/content.h content/content_type.h content/fetch.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/url_protocol.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/url_complete.o arm-riscos-aof-small/url_complete.o arm-ncos-aof/url_complete.o i486-linux-debug/url_complete.o i486-linux-gtk/url_complete.o : riscos/url_complete.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/tinct.h riscos/url_complete.h riscos/wimp.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/url_protocol.o arm-riscos-aof-small/url_protocol.o arm-ncos-aof/url_protocol.o i486-linux-debug/url_protocol.o i486-linux-gtk/url_protocol.o : riscos/url_protocol.c content/content.h content/content_type.h content/fetch.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h riscos/uri.h riscos/url_protocol.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/wimp.o arm-riscos-aof-small/wimp.o arm-ncos-aof/wimp.o i486-linux-debug/wimp.o i486-linux-gtk/wimp.o : riscos/wimp.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/draw.h riscos/gui.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/wimp.h utils/config.h utils/log.h utils/utf8.h utils/utils.h
arm-riscos-aof/wimp_event.o arm-riscos-aof-small/wimp_event.o arm-ncos-aof/wimp_event.o i486-linux-debug/wimp_event.o i486-linux-gtk/wimp_event.o : riscos/wimp_event.c content/content.h content/content_type.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/html.h render/textplain.h riscos/artworks.h riscos/dialog.h riscos/draw.h riscos/gui.h riscos/menus.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/wimp.h riscos/wimp_event.h utils/config.h utils/log.h utils/utils.h
arm-riscos-aof/window.o arm-riscos-aof-small/window.o arm-ncos-aof/window.o i486-linux-debug/window.o i486-linux-gtk/window.o : riscos/window.c content/content.h content/content_type.h content/urldb.h css/css.h css/css_enum.h desktop/browser.h desktop/gui.h desktop/netsurf.h desktop/options.h desktop/plotters.h desktop/textinput.h desktop/tree.h image/bitmap.h image/bmp.h image/bmpread.h image/gif.h image/gifread.h image/ico.h image/jpeg.h image/mng.h render/box.h render/form.h render/html.h render/textplain.h riscos/artworks.h riscos/bitmap.h riscos/buffer.h riscos/dialog.h riscos/draw.h riscos/global_history.h riscos/gui.h riscos/menus.h riscos/options.h riscos/plugin.h riscos/sprite.h riscos/theme.h riscos/thumbnail.h riscos/tinct.h riscos/ucstables.h riscos/url_complete.h riscos/wimp.h utils/config.h utils/log.h utils/messages.h utils/talloc.h utils/url.h utils/utf8.h utils/utils.h
arm-riscos-aof/memdebug.o arm-riscos-aof-small/memdebug.o arm-ncos-aof/memdebug.o i486-linux-debug/memdebug.o i486-linux-gtk/memdebug.o : utils/memdebug.c
arm-riscos-aof/messages.o arm-riscos-aof-small/messages.o arm-ncos-aof/messages.o i486-linux-debug/messages.o i486-linux-gtk/messages.o : utils/messages.c utils/log.h utils/messages.h utils/utils.h
arm-riscos-aof/talloc.o arm-riscos-aof-small/talloc.o arm-ncos-aof/talloc.o i486-linux-debug/talloc.o i486-linux-gtk/talloc.o : utils/talloc.c
arm-riscos-aof/url.o arm-riscos-aof-small/url.o arm-ncos-aof/url.o i486-linux-debug/url.o i486-linux-gtk/url.o : utils/url.c utils/log.h utils/url.h utils/utils.h
arm-riscos-aof/utf8.o arm-riscos-aof-small/utf8.o arm-ncos-aof/utf8.o i486-linux-debug/utf8.o i486-linux-gtk/utf8.o : utils/utf8.c utils/log.h utils/utf8.h
arm-riscos-aof/utils.o arm-riscos-aof-small/utils.o arm-ncos-aof/utils.o i486-linux-debug/utils.o i486-linux-gtk/utils.o : utils/utils.c utils/config.h utils/log.h utils/messages.h utils/utf8.h utils/utils.h

View File

@ -23,7 +23,7 @@
#include "netsurf/utils/config.h" #include "netsurf/utils/config.h"
#include "netsurf/content/fetch.h" #include "netsurf/content/fetch.h"
#include "netsurf/content/fetchcache.h" #include "netsurf/content/fetchcache.h"
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/css/css.h" #include "netsurf/css/css.h"
#ifdef WITH_AUTH #ifdef WITH_AUTH
#include "netsurf/desktop/401login.h" #include "netsurf/desktop/401login.h"
@ -262,11 +262,9 @@ void browser_window_go_post(struct browser_window *bw, const char *url,
void browser_window_callback(content_msg msg, struct content *c, void browser_window_callback(content_msg msg, struct content *c,
intptr_t p1, intptr_t p2, union content_msg_data data) intptr_t p1, intptr_t p2, union content_msg_data data)
{ {
struct url_content *url_content;
struct browser_window *bw = (struct browser_window *) p1; struct browser_window *bw = (struct browser_window *) p1;
char status[40]; char status[40];
char url[256]; char url[256];
char *title;
switch (msg) { switch (msg) {
case CONTENT_MSG_LOADING: case CONTENT_MSG_LOADING:
@ -327,21 +325,14 @@ void browser_window_callback(content_msg msg, struct content *c,
browser_window_set_status(bw, c->status_message); browser_window_set_status(bw, c->status_message);
if (bw->history_add) { if (bw->history_add) {
history_add(bw->history, c, bw->frag_id); history_add(bw->history, c, bw->frag_id);
url_content = url_store_find(c->url); if (!urldb_add_url(c->url))
if (url_content) { LOG(("urldb_add_url failed"));
if (c->title)
title = strdup(c->title); urldb_set_url_title(c->url,
else c->title ? c->title : c->url);
title = strdup(c->url); urldb_update_url_visit_data(c->url);
if (title) { urldb_set_url_content_type(c->url, c->type);
free(url_content->title); global_history_add(c->url);
url_content->title = title;
}
url_content->visits++;
url_content->last_visit = time(NULL);
url_content->type = c->type;
global_history_add(url_content);
}
} }
switch (c->type) { switch (c->type) {
case CONTENT_HTML: case CONTENT_HTML:
@ -846,11 +837,11 @@ void browser_window_mouse_action_html(struct browser_window *bw,
* box with scrollbars */ * box with scrollbars */
box = c->data.html.layout; box = c->data.html.layout;
/* Consider the margins of the html page now */ /* Consider the margins of the html page now */
box_x = box->margin[LEFT]; box_x = box->margin[LEFT];
box_y = box->margin[TOP]; box_y = box->margin[TOP];
while ((next_box = box_at_point(box, x, y, &box_x, &box_y, &content)) != while ((next_box = box_at_point(box, x, y, &box_x, &box_y, &content)) !=
NULL) { NULL) {
box = next_box; box = next_box;
@ -2027,7 +2018,7 @@ struct box *browser_window_pick_text_box(struct browser_window *bw,
int box_x = 0, box_y = 0; int box_x = 0, box_y = 0;
struct content *content; struct content *content;
struct box *next_box; struct box *next_box;
/* Consider the margins of the html page now */ /* Consider the margins of the html page now */
box_x = box->margin[LEFT]; box_x = box->margin[LEFT];
box_y = box->margin[TOP]; box_y = box->margin[TOP];

View File

@ -16,7 +16,6 @@
#include <stdbool.h> #include <stdbool.h>
#include <stddef.h> #include <stddef.h>
#include <time.h> #include <time.h>
#include "netsurf/content/url_store.h"
struct box; struct box;
struct content; struct content;
@ -27,6 +26,8 @@ struct gui_window;
struct history; struct history;
struct selection; struct selection;
struct browser_window; struct browser_window;
struct url_data;
struct bitmap;
typedef void (*browser_caret_callback)(struct browser_window *bw, typedef void (*browser_caret_callback)(struct browser_window *bw,
@ -95,7 +96,7 @@ struct browser_window {
/** Current fetch is download */ /** Current fetch is download */
bool download; bool download;
/** Refresh interval (-1 if undefined) */ /** Refresh interval (-1 if undefined) */
int refresh_interval; int refresh_interval;
}; };
@ -154,7 +155,7 @@ void browser_window_redraw_rect(struct browser_window *bw, int x, int y,
void hotlist_visited(struct content *content); void hotlist_visited(struct content *content);
/* In platform specific global_history.c. */ /* In platform specific global_history.c. */
void global_history_add(struct url_content *data); void global_history_add(const char *url);
void global_history_add_recent(const char *url); void global_history_add_recent(const char *url);
char **global_history_get_recent(int *count); char **global_history_get_recent(int *count);

View File

@ -16,7 +16,7 @@
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/css/css.h" #include "netsurf/css/css.h"
#include "netsurf/desktop/gui.h" #include "netsurf/desktop/gui.h"
#include "netsurf/desktop/history_core.h" #include "netsurf/desktop/history_core.h"
@ -115,7 +115,7 @@ void history_add(struct history *history, struct content *content,
struct history_entry *entry; struct history_entry *entry;
char *url; char *url;
char *title; char *title;
struct bitmap *bitmap; const struct bitmap *bitmap;
assert(history); assert(history);
assert(content); assert(content);
@ -159,7 +159,7 @@ void history_add(struct history *history, struct content *content,
/* if we have a thumbnail, don't update until the page has finished /* if we have a thumbnail, don't update until the page has finished
* loading */ * loading */
bitmap = url_store_get_thumbnail(url); bitmap = urldb_get_thumbnail(url);
if (!bitmap) { if (!bitmap) {
bitmap = bitmap_create(WIDTH, HEIGHT, bitmap = bitmap_create(WIDTH, HEIGHT,
BITMAP_NEW | BITMAP_CLEAR_MEMORY | BITMAP_NEW | BITMAP_CLEAR_MEMORY |

View File

@ -21,6 +21,7 @@
#include <string.h> #include <string.h>
#include "libxml/HTMLparser.h" #include "libxml/HTMLparser.h"
#include "libxml/HTMLtree.h" #include "libxml/HTMLtree.h"
#include "netsurf/content/urldb.h"
#include "netsurf/css/css.h" #include "netsurf/css/css.h"
#include "netsurf/desktop/options.h" #include "netsurf/desktop/options.h"
#include "netsurf/desktop/tree.h" #include "netsurf/desktop/tree.h"
@ -92,7 +93,7 @@ char *option_homepage_url = 0;
/** Maximum simultaneous active fetchers */ /** Maximum simultaneous active fetchers */
int option_max_fetchers = 24; int option_max_fetchers = 24;
/** Maximum simultaneous active fetchers per host. /** Maximum simultaneous active fetchers per host.
* (<=option_max_fetchers else it makes no sense * (<=option_max_fetchers else it makes no sense
*/ */
int option_max_fetchers_per_host = 5; int option_max_fetchers_per_host = 5;
/** Maximum number of inactive fetchers cached. /** Maximum number of inactive fetchers cached.
@ -413,7 +414,7 @@ void options_load_tree_entry(xmlNode *li, struct node *directory) {
char *title = 0; char *title = 0;
struct node *entry; struct node *entry;
xmlNode *n; xmlNode *n;
struct url_content *data; const struct url_data *data;
for (n = li->children; n; n = n->next) { for (n = li->children; n; n = n->next) {
/* The li must contain an "a" element */ /* The li must contain an "a" element */
@ -430,12 +431,17 @@ void options_load_tree_entry(xmlNode *li, struct node *directory) {
return; return;
} }
data = url_store_find(url); data = urldb_get_url_data(url);
if (!data)
/* No entry in database, so add one */
urldb_add_url(url);
data = urldb_get_url_data(url);
if (!data) if (!data)
return; return;
if (!data->title) if (!data->title)
data->title = strdup(title); urldb_set_url_title(url, title);
entry = tree_create_URL_node(directory, data, title); entry = tree_create_URL_node(directory, url, data, title);
xmlFree(url); xmlFree(url);
xmlFree(title); xmlFree(title);
} }

View File

@ -14,23 +14,25 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/desktop/tree.h" #include "netsurf/desktop/tree.h"
#include "netsurf/desktop/options.h" #include "netsurf/desktop/options.h"
#include "netsurf/utils/log.h" #include "netsurf/utils/log.h"
#include "netsurf/utils/utils.h" #include "netsurf/utils/utils.h"
static void tree_draw_node(struct tree *tree, struct node *node, int clip_x, int clip_y, static void tree_draw_node(struct tree *tree, struct node *node, int clip_x,
int clip_width, int clip_height); int clip_y, int clip_width, int clip_height);
static struct node_element *tree_create_node_element(struct node *parent, node_element_data data); static struct node_element *tree_create_node_element(struct node *parent,
node_element_data data);
static int tree_get_node_width(struct node *node); static int tree_get_node_width(struct node *node);
static int tree_get_node_height(struct node *node); static int tree_get_node_height(struct node *node);
static void tree_handle_selection_area_node(struct tree *tree, struct node *node, int x, int y, static void tree_handle_selection_area_node(struct tree *tree,
int width, int height, bool invert); struct node *node, int x, int y, int width, int height,
bool invert);
static void tree_selected_to_processing(struct node *node); static void tree_selected_to_processing(struct node *node);
void tree_clear_processing(struct node *node); void tree_clear_processing(struct node *node);
struct node *tree_move_processing_node(struct node *node, struct node *link, bool before, struct node *tree_move_processing_node(struct node *node, struct node *link,
bool first); bool before, bool first);
static int tree_initialising = 0; static int tree_initialising = 0;
@ -873,55 +875,51 @@ void tree_delete_selected_nodes(struct tree *tree, struct node *node) {
void tree_delete_node(struct tree *tree, struct node *node, bool siblings) { void tree_delete_node(struct tree *tree, struct node *node, bool siblings) {
struct node *next; struct node *next;
struct node *parent; struct node *parent;
struct node_element *element; struct node_element *e, *f;
struct url_content *data;
assert(node); assert(node);
while (node) { if (tree->temp_selection == node)
if (tree->temp_selection == node) tree->temp_selection = NULL;
tree->temp_selection = NULL;
next = node->next; next = node->next;
if (node->child) if (node->child)
tree_delete_node(tree, node->child, true); tree_delete_node(tree, node->child, true);
node->child = NULL; node->child = NULL;
parent = node->parent; parent = node->parent;
tree_delink_node(node); tree_delink_node(node);
if (!node->retain_in_memory) {
for (element = &node->data; element; element = element->next) { if (!node->retain_in_memory) {
if (element->text) { for (e = &node->data; e; e = f) {
/* we don't free non-editable titles or URLs */ f = e->next;
if ((node->editable) ||
((node->data.data != TREE_ELEMENT_TITLE) && if (e->text) {
(node->data.data != TREE_ELEMENT_URL))) /* we don't free non-editable titles */
free(element->text); if (node->editable)
else if (node->data.data != TREE_ELEMENT_URL) { free(e->text);
else {
if (e->data == TREE_ELEMENT_URL) {
/* reset URL characteristics */ /* reset URL characteristics */
data = url_store_find(element->text); urldb_reset_url_visit_data(e->text);
if (data) {
data->last_visit = 0;
data->visits = 0;
}
} }
if (e->data != TREE_ELEMENT_TITLE)
free(e->text);
} }
if (element->sprite)
free(element->sprite); /* \todo platform specific bits */
} }
while (node->data.next) { if (e->sprite)
element = node->data.next->next; free(e->sprite); /* \todo platform specific bits */
free(node->data.next);
node->data.next = element; if (e != &node->data)
} free(e);
free(node);
} else {
node->deleted = true;
} }
if (!siblings) free(node);
node = NULL; } else {
else node->deleted = true;
node = next;
} }
if (siblings)
tree_delete_node(tree, next, true);
tree_recalculate_node_positions(tree->root); tree_recalculate_node_positions(tree->root);
tree_redraw_area(tree, 0, 0, 16384, 16384); /* \todo correct area */ tree_redraw_area(tree, 0, 0, 16384, 16384); /* \todo correct area */
tree_recalculate_size(tree); tree_recalculate_size(tree);
@ -986,11 +984,13 @@ struct node *tree_create_leaf_node(struct node *parent, const char *title) {
* *
* *
* \param parent the node to link to * \param parent the node to link to
* \param url the URL (copied)
* \param data the URL data to use * \param data the URL data to use
* \param title the custom title to use * \param title the custom title to use
* \return the node created, or NULL for failure * \return the node created, or NULL for failure
*/ */
struct node *tree_create_URL_node(struct node *parent, struct url_content *data, struct node *tree_create_URL_node(struct node *parent,
const char *url, const struct url_data *data,
const char *title) { const char *title) {
struct node *node; struct node *node;
struct node_element *element; struct node_element *element;
@ -998,10 +998,10 @@ struct node *tree_create_URL_node(struct node *parent, struct url_content *data,
assert(data); assert(data);
if (!title) { if (!title) {
if (data->title) if (data->title)
title = strdup(data->title); title = strdup(data->title);
else else
title = strdup(data->url); title = strdup(url);
if (!title) if (!title)
return NULL; return NULL;
} }
@ -1017,9 +1017,9 @@ struct node *tree_create_URL_node(struct node *parent, struct url_content *data,
tree_create_node_element(node, TREE_ELEMENT_LAST_VISIT); tree_create_node_element(node, TREE_ELEMENT_LAST_VISIT);
element = tree_create_node_element(node, TREE_ELEMENT_URL); element = tree_create_node_element(node, TREE_ELEMENT_URL);
if (element) if (element)
element->text = strdup(data->url); element->text = strdup(url);
tree_update_URL_node(node, NULL); tree_update_URL_node(node, url, NULL);
tree_recalculate_node(node, false); tree_recalculate_node(node, false);
return node; return node;
@ -1029,24 +1029,30 @@ struct node *tree_create_URL_node(struct node *parent, struct url_content *data,
/** /**
* Creates a tree entry for a URL, and links it into the tree. * Creates a tree entry for a URL, and links it into the tree.
* *
* All information is used directly from the url_content, and as such cannot be * All information is used directly from the url_data, and as such cannot be
* edited and should never be freed. * edited and should never be freed.
* *
* \param parent the node to link to * \param parent the node to link to
* \param url the URL (copied)
* \param data the URL data to use * \param data the URL data to use
* \return the node created, or NULL for failure * \return the node created, or NULL for failure
*/ */
struct node *tree_create_URL_node_shared(struct node *parent, struct url_content *data) { struct node *tree_create_URL_node_shared(struct node *parent,
const char *url, const struct url_data *data) {
struct node *node; struct node *node;
struct node_element *element; struct node_element *element;
char *title; char *title;
assert(data); assert(data);
/* If title isn't set, set it to the URL */
if (!data->title)
urldb_set_url_title(url, url);
if (data->title) if (data->title)
title = data->title; title = data->title;
else else
title = data->url; return NULL;
node = tree_create_leaf_node(parent, title); node = tree_create_leaf_node(parent, title);
if (!node) if (!node)
return NULL; return NULL;
@ -1061,9 +1067,9 @@ struct node *tree_create_URL_node_shared(struct node *parent, struct url_content
tree_create_node_element(node, TREE_ELEMENT_LAST_VISIT); tree_create_node_element(node, TREE_ELEMENT_LAST_VISIT);
element = tree_create_node_element(node, TREE_ELEMENT_URL); element = tree_create_node_element(node, TREE_ELEMENT_URL);
if (element) if (element)
element->text = data->url; element->text = strdup(url);
tree_update_URL_node(node, data); tree_update_URL_node(node, url, data);
tree_recalculate_node(node, false); tree_recalculate_node(node, false);
return node; return node;

View File

@ -13,7 +13,8 @@
#define _NETSURF_DESKTOP_TREE_H_ #define _NETSURF_DESKTOP_TREE_H_
#include <stdbool.h> #include <stdbool.h>
#include "netsurf/content/url_store.h"
struct url_data;
typedef enum { typedef enum {
TREE_ELEMENT_URL, TREE_ELEMENT_URL,
@ -117,9 +118,11 @@ struct node *tree_create_folder_node(struct node *parent, const char *title);
struct node *tree_create_leaf_node(struct node *parent, const char *title); struct node *tree_create_leaf_node(struct node *parent, const char *title);
void tree_set_node_sprite(struct node *node, const char *sprite, void tree_set_node_sprite(struct node *node, const char *sprite,
const char *expanded); const char *expanded);
struct node *tree_create_URL_node(struct node *parent, struct url_content *data, struct node *tree_create_URL_node(struct node *parent,
const char *url, const struct url_data *data,
const char *title); const char *title);
struct node *tree_create_URL_node_shared(struct node *parent, struct url_content *data); struct node *tree_create_URL_node_shared(struct node *parent,
const char *url, const struct url_data *data);
void tree_set_node_expanded(struct node *node, bool expanded); void tree_set_node_expanded(struct node *node, bool expanded);
void tree_set_node_selected(struct tree *tree, struct node *node, void tree_set_node_selected(struct tree *tree, struct node *node,
bool selected); bool selected);
@ -142,7 +145,8 @@ void tree_draw_line(int x, int y, int width, int height);
void tree_draw_node_element(struct tree *tree, struct node_element *element); void tree_draw_node_element(struct tree *tree, struct node_element *element);
void tree_draw_node_expansion(struct tree *tree, struct node *node); void tree_draw_node_expansion(struct tree *tree, struct node *node);
void tree_recalculate_node_element(struct node_element *element); void tree_recalculate_node_element(struct node_element *element);
void tree_update_URL_node(struct node *node, struct url_content *data); void tree_update_URL_node(struct node *node, const char *url,
const struct url_data *data);
void tree_resized(struct tree *tree); void tree_resized(struct tree *tree);
void tree_set_node_sprite_folder(struct node *node); void tree_set_node_sprite_folder(struct node *node);

View File

@ -18,7 +18,7 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/fetch.h" #include "netsurf/content/fetch.h"
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/desktop/401login.h" #include "netsurf/desktop/401login.h"
#include "netsurf/desktop/browser.h" #include "netsurf/desktop/browser.h"
#include "netsurf/desktop/gui.h" #include "netsurf/desktop/gui.h"
@ -128,23 +128,23 @@ void gui_init(int argc, char** argv)
find_resource(buf, "Default.css", "Default.css"); find_resource(buf, "Default.css", "Default.css");
default_stylesheet_url = path_to_url(buf); default_stylesheet_url = path_to_url(buf);
LOG(("Using '%s' as Default CSS URL", default_stylesheet_url)); LOG(("Using '%s' as Default CSS URL", default_stylesheet_url));
find_resource(buf, "AdBlock.css", "AdBlock.css"); find_resource(buf, "AdBlock.css", "AdBlock.css");
adblock_stylesheet_url = path_to_url(buf); adblock_stylesheet_url = path_to_url(buf);
LOG(("Using '%s' as AdBlock CSS URL", adblock_stylesheet_url)); LOG(("Using '%s' as AdBlock CSS URL", adblock_stylesheet_url));
} }
void gui_init2(int argc, char** argv) void gui_init2(int argc, char** argv)
{ {
const char *addr = "http://netsurf.sourceforge.net/"; const char *addr = "http://netsurf.sourceforge.net/";
if (option_homepage_url != NULL) if (option_homepage_url != NULL)
addr = option_homepage_url; addr = option_homepage_url;
if (argc > 1) addr = argv[1]; if (argc > 1) addr = argv[1];
browser_window_create(addr, 0, 0); browser_window_create(addr, 0, 0);
} }
@ -283,7 +283,7 @@ void gui_401login_open(struct browser_window *bw, struct content *c,
void gui_cert_verify(struct browser_window *bw, struct content *c, void gui_cert_verify(struct browser_window *bw, struct content *c,
const struct ssl_cert_info *certs, unsigned long num) {} const struct ssl_cert_info *certs, unsigned long num) {}
void global_history_add(struct url_content *data) {} void global_history_add(const char *url) {}
utf8_convert_ret utf8_to_local_encoding(const char *string, size_t len, utf8_convert_ret utf8_to_local_encoding(const char *string, size_t len,
char **result) char **result)

View File

@ -16,7 +16,7 @@
#include <assert.h> #include <assert.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/desktop/plotters.h" #include "netsurf/desktop/plotters.h"
#include "netsurf/desktop/browser.h" #include "netsurf/desktop/browser.h"
#include "netsurf/image/bitmap.h" #include "netsurf/image/bitmap.h"
@ -69,7 +69,7 @@ bool thumbnail_create(struct content *content, struct bitmap *bitmap,
content->width, content->width); content->width, content->width);
gdk_pixbuf_scale(big, pixbuf, 0, 0, width, height, 0, 0, gdk_pixbuf_scale(big, pixbuf, 0, 0, width, height, 0, 0,
(double)width / (double)content->width, (double)width / (double)content->width,
(double)height / (double)content->width, (double)height / (double)content->width,
GDK_INTERP_TILES); GDK_INTERP_TILES);
@ -79,7 +79,7 @@ bool thumbnail_create(struct content *content, struct bitmap *bitmap,
/* register the thumbnail with the URL */ /* register the thumbnail with the URL */
if (url) if (url)
url_store_add_thumbnail(url, bitmap); urldb_set_thumbnail(url, bitmap);
bitmap_modified(bitmap); bitmap_modified(bitmap);

View File

@ -82,7 +82,8 @@ void tree_recalculate_node_element(struct node_element *element) {
* *
* \param node the node to update * \param node the node to update
*/ */
void tree_update_URL_node(struct node *node, struct url_content *data) { void tree_update_URL_node(struct node *node, const char *url,
const struct url_data *data) {
} }

View File

@ -17,8 +17,7 @@
# "riscos", "riscos_small", "ncos", and "riscos_debug" can be compiled under # "riscos", "riscos_small", "ncos", and "riscos_debug" can be compiled under
# RISC OS, or cross-compiled using GCCSDK. # RISC OS, or cross-compiled using GCCSDK.
OBJECTS_COMMON = authdb.o certdb.o content.o fetch.o \ OBJECTS_COMMON = content.o fetch.o fetchcache.o urldb.o # content/
fetchcache.o url_store.o # content/
OBJECTS_COMMON += css.o css_enum.o parser.o ruleset.o scanner.o # css/ OBJECTS_COMMON += css.o css_enum.o parser.o ruleset.o scanner.o # css/
OBJECTS_COMMON += box.o box_construct.o box_normalise.o form.o \ OBJECTS_COMMON += box.o box_construct.o box_normalise.o form.o \
html.o html_redraw.o imagemap.o layout.o list.o \ html.o html_redraw.o imagemap.o layout.o list.o \
@ -57,9 +56,10 @@ OBJECTS_DEBUG += debug_bitmap.o filetyped.o fontd.o netsurfd.o # debug/
OBJECTS_DEBUGRO = $(OBJECTS_COMMON) $(OBJECTS_IMAGE) OBJECTS_DEBUGRO = $(OBJECTS_COMMON) $(OBJECTS_IMAGE)
OBJECTS_DEBUGRO += netsurfd.o # debug/ OBJECTS_DEBUGRO += netsurfd.o # debug/
OBJECTS_DEBUGRO += version.o # desktop/ OBJECTS_DEBUGRO += version.o # desktop/
OBJECTS_DEBUGRO += artworks.o bitmap.o draw.o filetype.o font.o \ OBJECTS_DEBUGRO += artworks.o awrender.o bitmap.o draw.o \
gif.o gifread.o image.o jpeg.o plotters.o save_complete.o \ filename.o filetype.o font.o gif.o gifread.o image.o \
schedule.o sprite.o # riscos/ jpeg.o palettes.o plotters.o save_complete.o schedule.o \
sprite.o # riscos/
OBJECTS_GTK = $(OBJECTS_COMMON) $(OBJECTS_IMAGE) OBJECTS_GTK = $(OBJECTS_COMMON) $(OBJECTS_IMAGE)
OBJECTS_GTK += filetyped.o # debug/ OBJECTS_GTK += filetyped.o # debug/
@ -112,7 +112,7 @@ WARNFLAGS = -W -Wall -Wundef -Wpointer-arith -Wcast-qual \
# CFLAGS have to appear after the inclusion of platform specific files as the # CFLAGS have to appear after the inclusion of platform specific files as the
# PLATFORM_CFLAGS variables are defined in them # PLATFORM_CFLAGS variables are defined in them
CFLAGS_RISCOS = -std=c9x -D_BSD_SOURCE -Driscos -DBOOL_DEFINED -O \ CFLAGS_RISCOS = -std=c9x -D_BSD_SOURCE -D_POSIX_C_SOURCE -Driscos -DBOOL_DEFINED -O \
$(WARNFLAGS) -I.. $(PLATFORM_CFLAGS_RISCOS) -mpoke-function-name \ $(WARNFLAGS) -I.. $(PLATFORM_CFLAGS_RISCOS) -mpoke-function-name \
# -include netsurf/utils/memdebug.h # -include netsurf/utils/memdebug.h
CFLAGS_RISCOS_SMALL = $(CFLAGS_RISCOS) -Dsmall CFLAGS_RISCOS_SMALL = $(CFLAGS_RISCOS) -Dsmall

View File

@ -7,13 +7,14 @@ ASM = $(GCCSDK_INSTALL_CROSSBIN)/gcc
PLATFORM_CFLAGS_RISCOS = -I$(GCCSDK_INSTALL_ENV)/include \ PLATFORM_CFLAGS_RISCOS = -I$(GCCSDK_INSTALL_ENV)/include \
-I$(GCCSDK_INSTALL_ENV)/include/libxml2 \ -I$(GCCSDK_INSTALL_ENV)/include/libxml2 \
-I$(GCCSDK_INSTALL_ENV)/include/libmng -I$(GCCSDK_INSTALL_ENV)/include/libmng \
#-finstrument-functions
PLATFORM_CFLAGS_DEBUG = -I/usr/include/libxml2 -I/riscos/src/OSLib \ PLATFORM_CFLAGS_DEBUG = -I/usr/include/libxml2 -I/riscos/src/OSLib \
-I/riscos/include/libjpeg -D_POSIX_C_SOURCE -I/riscos/include/libjpeg -D_POSIX_C_SOURCE
PLATFORM_AFLAGS_RISCOS = -I$(GCCSDK_INSTALL_ENV)/include PLATFORM_AFLAGS_RISCOS = -I$(GCCSDK_INSTALL_ENV)/include
LDFLAGS_RISCOS = -L$(GCCSDK_INSTALL_ENV)/lib -lxml2 -lz -lcurl -lssl -lcrypto \ LDFLAGS_RISCOS = -L$(GCCSDK_INSTALL_ENV)/lib -lxml2 -lz -lcurl -lssl -lcrypto \
-lcares -lmng -lOSLib32 -ljpeg -lrufl -lpencil -lcares -lmng -lOSLib32 -ljpeg -lrufl -lpencil #-lprof
LDFLAGS_SMALL = -L$(GCCSDK_INSTALL_ENV)/lib -lxml2 -lz -lucurl \ LDFLAGS_SMALL = -L$(GCCSDK_INSTALL_ENV)/lib -lxml2 -lz -lucurl \
-lcares -lmng -lOSLib32 -ljpeg -lrufl -lpencil -lcares -lmng -lOSLib32 -ljpeg -lrufl -lpencil
LDFLAGS_DEBUG = -L/usr/lib -lxml2 -lz -lm -lcurl -lssl -lcrypto -ldl -lmng \ LDFLAGS_DEBUG = -L/usr/lib -lxml2 -lz -lm -lcurl -lssl -lcrypto -ldl -lmng \

View File

@ -12,8 +12,8 @@
#include <string.h> #include <string.h>
#include "oslib/wimp.h" #include "oslib/wimp.h"
#include "netsurf/utils/config.h" #include "netsurf/utils/config.h"
#include "netsurf/content/authdb.h"
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/urldb.h"
#include "netsurf/desktop/browser.h" #include "netsurf/desktop/browser.h"
#include "netsurf/desktop/401login.h" #include "netsurf/desktop/401login.h"
#include "netsurf/desktop/gui.h" #include "netsurf/desktop/gui.h"
@ -187,11 +187,7 @@ bool ro_gui_401login_apply(wimp_w w)
sprintf(auth, "%s:%s", session->uname, session->pwd); sprintf(auth, "%s:%s", session->uname, session->pwd);
if (!authdb_insert(session->url, session->realm, auth)) { urldb_set_auth_details(session->url, session->realm, auth);
LOG(("failed"));
free(auth);
return false;
}
free(auth); free(auth);

View File

@ -17,7 +17,7 @@
#include <time.h> #include <time.h>
#include "oslib/wimp.h" #include "oslib/wimp.h"
#include "oslib/wimpspriteop.h" #include "oslib/wimpspriteop.h"
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/desktop/tree.h" #include "netsurf/desktop/tree.h"
#include "netsurf/riscos/dialog.h" #include "netsurf/riscos/dialog.h"
#include "netsurf/riscos/global_history.h" #include "netsurf/riscos/global_history.h"
@ -50,20 +50,19 @@ static void ro_gui_global_history_initialise_nodes(void);
static void ro_gui_global_history_initialise_node(const char *title, static void ro_gui_global_history_initialise_node(const char *title,
time_t base, int days_back); time_t base, int days_back);
static struct node *ro_gui_global_history_find(const char *url); static struct node *ro_gui_global_history_find(const char *url);
static bool global_history_iterate_callback(const char *url);
/* The history window, toolbar and plot origins /* The history window, toolbar and plot origins */
*/
static wimp_w global_history_window; static wimp_w global_history_window;
struct tree *global_history_tree; struct tree *global_history_tree;
void ro_gui_global_history_initialise(void) { /**
* Initialise global history tree
*/
void ro_gui_global_history_initialise(void)
{
char s[MAXIMUM_URL_LENGTH]; char s[MAXIMUM_URL_LENGTH];
FILE *fp; FILE *fp;
struct hostname_data *hostname;
struct url_data *url;
int url_count = 0;
struct url_content **url_block;
int i = 0;
/* create our window */ /* create our window */
global_history_window = ro_gui_dialog_create("tree"); global_history_window = ro_gui_dialog_create("tree");
@ -76,8 +75,7 @@ void ro_gui_global_history_initialise(void) {
ro_gui_wimp_event_register_mouse_click(global_history_window, ro_gui_wimp_event_register_mouse_click(global_history_window,
ro_gui_global_history_click); ro_gui_global_history_click);
/* Create an empty tree /* Create an empty tree */
*/
global_history_tree = calloc(sizeof(struct tree), 1); global_history_tree = calloc(sizeof(struct tree), 1);
if (!global_history_tree) { if (!global_history_tree) {
warn_user("NoMemory", 0); warn_user("NoMemory", 0);
@ -99,8 +97,7 @@ void ro_gui_global_history_initialise(void) {
ro_gui_wimp_event_register_keypress(global_history_window, ro_gui_wimp_event_register_keypress(global_history_window,
ro_gui_tree_keypress); ro_gui_tree_keypress);
/* Create our toolbar /* Create our toolbar */
*/
global_history_tree->toolbar = ro_gui_theme_create_toolbar(NULL, global_history_tree->toolbar = ro_gui_theme_create_toolbar(NULL,
THEME_HISTORY_TOOLBAR); THEME_HISTORY_TOOLBAR);
if (global_history_tree->toolbar) if (global_history_tree->toolbar)
@ -121,47 +118,29 @@ void ro_gui_global_history_initialise(void) {
fclose(fp); fclose(fp);
} }
/* count the number of URLs to add */
for (hostname = url_store_hostnames; hostname;
hostname = hostname->next)
for (url = hostname->url; url; url = url->next)
url_count++;
if (url_count == 0)
return;
/* place pointers to the URL data in a single block of memory so
* they can be quickly sorted */
url_block = (struct url_content **)malloc(
url_count * sizeof(struct url_content *));
if (!url_block) {
warn_user("NoMemory", 0);
LOG(("Insufficient memory for malloc()"));
return;
}
for (hostname = url_store_hostnames; hostname;
hostname = hostname->next)
for (url = hostname->url; url; url = url->next)
url_block[i++] = &url->data;
assert(i == url_count);
/* sort information by the last_visit information */
qsort(url_block, url_count, sizeof(struct url_content *),
url_store_compare_last_visit);
/* add URLs to the global history */
global_history_init = true; global_history_init = true;
for (i = 0; i < url_count; i++) urldb_iterate_entries(global_history_iterate_callback);
global_history_add(url_block[i]);
global_history_init = false; global_history_init = false;
free(url_block);
} }
/**
* Callback for urldb_iterate_entries
*
* \param url The URL
* \return true to continue iteration, false otherwise
*/
bool global_history_iterate_callback(const char *url)
{
global_history_add(url);
return true;
}
/** /**
* Initialises the base nodes * Initialises the base nodes
*/ */
static void ro_gui_global_history_initialise_nodes(void) { void ro_gui_global_history_initialise_nodes(void)
{
struct tm *full_time; struct tm *full_time;
time_t t; time_t t;
int weekday; int weekday;
@ -196,8 +175,12 @@ static void ro_gui_global_history_initialise_nodes(void) {
t, -weekday - 21); t, -weekday - 21);
} }
static void ro_gui_global_history_initialise_node(const char *title, /**
time_t base, int days_back) { * Create and initialise a node
*/
void ro_gui_global_history_initialise_node(const char *title,
time_t base, int days_back)
{
struct tm *full_time; struct tm *full_time;
char buffer[64]; char buffer[64];
struct node *node; struct node *node;
@ -225,7 +208,8 @@ static void ro_gui_global_history_initialise_node(const char *title,
/** /**
* Saves the global history's recent URL data. * Saves the global history's recent URL data.
*/ */
void ro_gui_global_history_save(void) { void ro_gui_global_history_save(void)
{
FILE *fp; FILE *fp;
int i; int i;
@ -249,8 +233,10 @@ void ro_gui_global_history_save(void) {
* Respond to a mouse click * Respond to a mouse click
* *
* \param pointer the pointer state * \param pointer the pointer state
* \return true to indicate click handled
*/ */
bool ro_gui_global_history_click(wimp_pointer *pointer) { bool ro_gui_global_history_click(wimp_pointer *pointer)
{
ro_gui_tree_click(pointer, global_history_tree); ro_gui_tree_click(pointer, global_history_tree);
if (pointer->buttons == wimp_CLICK_MENU) if (pointer->buttons == wimp_CLICK_MENU)
ro_gui_menu_create(global_history_menu, pointer->pos.x, ro_gui_menu_create(global_history_menu, pointer->pos.x,
@ -268,23 +254,32 @@ bool ro_gui_global_history_click(wimp_pointer *pointer) {
* \param y the x co-ordinate to give help for * \param y the x co-ordinate to give help for
* \return the message code index * \return the message code index
*/ */
int ro_gui_global_history_help(int x, int y) { int ro_gui_global_history_help(int x, int y)
{
return -1; return -1;
} }
/** /**
* Adds to the global history * Adds to the global history
*
* \param url The URL to add
*/ */
void global_history_add(struct url_content *data) { void global_history_add(const char *url)
{
int i, j; int i, j;
const struct url_data *data;
struct node *parent = NULL; struct node *parent = NULL;
struct node *link; struct node *link;
struct node *node; struct node *node;
bool before = false; bool before = false;
int visit_date; int visit_date;
assert(data); assert(url);
data = urldb_get_url_data(url);
if (!data)
return;
visit_date = data->last_visit; visit_date = data->last_visit;
@ -316,28 +311,27 @@ void global_history_add(struct url_content *data) {
if (!parent) if (!parent)
return; return;
/* find any previous occurance */ /* find any previous occurance */
if (!global_history_init) { if (!global_history_init) {
node = ro_gui_global_history_find(data->url); node = ro_gui_global_history_find(url);
if (node) { if (node) {
/* \todo: calculate old/new positions and redraw /* \todo: calculate old/new positions and redraw
* only the relevant portion */ * only the relevant portion */
tree_redraw_area(global_history_tree, tree_redraw_area(global_history_tree,
0, 0, 16384, 16384); 0, 0, 16384, 16384);
tree_update_URL_node(node, data); tree_update_URL_node(node, url, data);
tree_delink_node(node); tree_delink_node(node);
tree_link_node(parent, node, false); tree_link_node(parent, node, false);
tree_handle_node_changed(global_history_tree, tree_handle_node_changed(global_history_tree,
node, false, true); node, false, true);
/* ro_gui_tree_scroll_visible(hotlist_tree, /* ro_gui_tree_scroll_visible(hotlist_tree,
&node->data); &node->data);
*/ return; */ return;
} }
} }
/* Add the node at the bottom /* Add the node at the bottom */
*/ node = tree_create_URL_node_shared(parent, url, data);
node = tree_create_URL_node_shared(parent, data);
if ((!global_history_init) && (node)) { if ((!global_history_init) && (node)) {
tree_redraw_area(global_history_tree, tree_redraw_area(global_history_tree,
node->box.x - NODE_INSTEP, node->box.x - NODE_INSTEP,
@ -347,8 +341,14 @@ void global_history_add(struct url_content *data) {
} }
} }
/**
struct node *ro_gui_global_history_find(const char *url) { * Find an entry in the global history
*
* \param url The URL to find
* \return Pointer to node, or NULL if not found
*/
struct node *ro_gui_global_history_find(const char *url)
{
int i; int i;
struct node *node; struct node *node;
struct node_element *element; struct node_element *element;
@ -359,7 +359,7 @@ struct node *ro_gui_global_history_find(const char *url) {
node; node = node->next) { node; node = node->next) {
element = tree_find_element(node, element = tree_find_element(node,
TREE_ELEMENT_URL); TREE_ELEMENT_URL);
if ((element) && (url == element->text)) if ((element) && !strcmp(url, element->text))
return node; return node;
} }
} }
@ -369,38 +369,35 @@ struct node *ro_gui_global_history_find(const char *url) {
/** /**
* Adds a URL to the recently used list * Adds an URL to the recently used list
* *
* \param url the URL to add * \param url the URL to add (copied)
*/ */
void global_history_add_recent(const char *url) { void global_history_add_recent(const char *url)
struct url_content *data; {
int i; int i;
int j = -1; int j = -1;
char *current; char *current;
/* by using the url_store, we get a central char* of the string that
* isn't going anywhere unless we tell it to */
data = url_store_find(url);
if (!data)
return;
/* try to find a string already there */ /* try to find a string already there */
for (i = 0; i < global_history_recent_count; i++) for (i = 0; i < global_history_recent_count; i++)
if (global_history_recent_url[i] == data->url) if (global_history_recent_url[i] &&
!strcmp(global_history_recent_url[i], url))
j = i; j = i;
/* already at head of list */ /* already at head of list */
if (j == 0) if (j == 0)
return; return;
/* add to head of list */
if (j < 0) { if (j < 0) {
/* add to head of list */
free(global_history_recent_url[
GLOBAL_HISTORY_RECENT_URLS - 1]);
memmove(&global_history_recent_url[1], memmove(&global_history_recent_url[1],
&global_history_recent_url[0], &global_history_recent_url[0],
(GLOBAL_HISTORY_RECENT_URLS - 1) * (GLOBAL_HISTORY_RECENT_URLS - 1) *
sizeof(char *)); sizeof(char *));
global_history_recent_url[0] = data->url; global_history_recent_url[0] = strdup(url);
global_history_recent_count++; global_history_recent_count++;
if (global_history_recent_count > GLOBAL_HISTORY_RECENT_URLS) if (global_history_recent_count > GLOBAL_HISTORY_RECENT_URLS)
global_history_recent_count = global_history_recent_count =
@ -424,7 +421,8 @@ void global_history_add_recent(const char *url) {
* \param count set to the current number of entries in the URL array on exit * \param count set to the current number of entries in the URL array on exit
* \return the current URL array * \return the current URL array
*/ */
char **global_history_get_recent(int *count) { char **global_history_get_recent(int *count)
{
*count = global_history_recent_count; *count = global_history_recent_count;
return global_history_recent_url; return global_history_recent_url;
} }

View File

@ -12,8 +12,6 @@
#ifndef _NETSURF_RISCOS_GLOBALHISTORY_H_ #ifndef _NETSURF_RISCOS_GLOBALHISTORY_H_
#define _NETSURF_RISCOS_GLOBALHISTORY_H_ #define _NETSURF_RISCOS_GLOBALHISTORY_H_
#include "netsurf/content/url_store.h"
#define GLOBAL_HISTORY_RECENT_URLS 16 #define GLOBAL_HISTORY_RECENT_URLS 16
void ro_gui_global_history_initialise(void); void ro_gui_global_history_initialise(void);

View File

@ -39,7 +39,7 @@
#include "rufl.h" #include "rufl.h"
#include "netsurf/utils/config.h" #include "netsurf/utils/config.h"
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/desktop/gui.h" #include "netsurf/desktop/gui.h"
#include "netsurf/desktop/netsurf.h" #include "netsurf/desktop/netsurf.h"
#include "netsurf/desktop/options.h" #include "netsurf/desktop/options.h"
@ -366,7 +366,7 @@ void gui_init(int argc, char** argv)
ro_gui_choose_language(); ro_gui_choose_language();
bitmap_initialise_memory(); bitmap_initialise_memory();
url_store_load(option_url_path); urldb_load(option_url_path);
nsdir_temp = getenv("NetSurf$Dir"); nsdir_temp = getenv("NetSurf$Dir");
if (!nsdir_temp) if (!nsdir_temp)
@ -717,7 +717,7 @@ void gui_init2(int argc, char** argv)
void gui_quit(void) void gui_quit(void)
{ {
bitmap_quit(); bitmap_quit();
url_store_save(option_url_save); urldb_save(option_url_save);
ro_gui_window_quit(); ro_gui_window_quit();
ro_gui_global_history_save(); ro_gui_global_history_save();
ro_gui_hotlist_save(); ro_gui_hotlist_save();
@ -1467,7 +1467,7 @@ void ro_msg_dataload(wimp_message *message)
os_error *error; os_error *error;
int x, y; int x, y;
bool before; bool before;
struct url_content *data; const struct url_data *data;
g = ro_gui_window_lookup(message->data.data_xfer.w); g = ro_gui_window_lookup(message->data.data_xfer.w);
if (g) { if (g) {
@ -1525,14 +1525,17 @@ void ro_msg_dataload(wimp_message *message)
browser_window_go(g->bw, url, 0); browser_window_go(g->bw, url, 0);
} else if ((hotlist_tree) && ((wimp_w)hotlist_tree->handle == } else if ((hotlist_tree) && ((wimp_w)hotlist_tree->handle ==
message->data.data_xfer.w)) { message->data.data_xfer.w)) {
data = url_store_find(url); data = urldb_get_url_data(url);
if (!data)
urldb_add_url(url);
data = urldb_get_url_data(url);
if (data) { if (data) {
ro_gui_tree_get_tree_coordinates(hotlist_tree, ro_gui_tree_get_tree_coordinates(hotlist_tree,
message->data.data_xfer.pos.x, message->data.data_xfer.pos.x,
message->data.data_xfer.pos.y, message->data.data_xfer.pos.y,
&x, &y); &x, &y);
link = tree_get_link_details(hotlist_tree, x, y, &before); link = tree_get_link_details(hotlist_tree, x, y, &before);
node = tree_create_URL_node(NULL, data, title); node = tree_create_URL_node(NULL, url, data, title);
tree_link_node(link, node, before); tree_link_node(link, node, before);
tree_handle_node_changed(hotlist_tree, node, false, true); tree_handle_node_changed(hotlist_tree, node, false, true);
tree_redraw_area(hotlist_tree, node->box.x - NODE_INSTEP, 0, tree_redraw_area(hotlist_tree, node->box.x - NODE_INSTEP, 0,

View File

@ -17,6 +17,7 @@
#include "oslib/osfile.h" #include "oslib/osfile.h"
#include "oslib/wimp.h" #include "oslib/wimp.h"
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/urldb.h"
#include "netsurf/desktop/tree.h" #include "netsurf/desktop/tree.h"
#include "netsurf/riscos/dialog.h" #include "netsurf/riscos/dialog.h"
#include "netsurf/riscos/menus.h" #include "netsurf/riscos/menus.h"
@ -48,10 +49,24 @@ struct tree *hotlist_tree;
struct node *dialog_folder_node; struct node *dialog_folder_node;
struct node *dialog_entry_node; struct node *dialog_entry_node;
static const struct {
const char *url;
const char *msg_key;
} default_entries[] = {
{ "http://netsurf.sourceforge.net/", "HotlistHomepage" },
{ "http://netsurf.sourceforge.net/builds/", "HotlistTestBuild" },
{ "http://netsurf.sourceforge.net/docs", "HotlistDocumentation" },
{ "http://sourceforge.net/tracker/?atid=464312&group_id=51719",
"HotlistBugTracker" },
{ "http://sourceforge.net/tracker/?atid=464315&group_id=51719",
"HotlistFeatureRequest" }
};
#define ENTRIES_COUNT (sizeof(default_entries) / sizeof(default_entries[0]))
void ro_gui_hotlist_initialise(void) { void ro_gui_hotlist_initialise(void) {
FILE *fp; FILE *fp;
struct node *node; struct node *node;
struct url_content *data; const struct url_data *data;
/* create our window */ /* create our window */
hotlist_window = ro_gui_dialog_create("tree"); hotlist_window = ro_gui_dialog_create("tree");
@ -68,6 +83,8 @@ void ro_gui_hotlist_initialise(void) {
*/ */
fp = fopen(option_hotlist_path, "r"); fp = fopen(option_hotlist_path, "r");
if (!fp) { if (!fp) {
int i;
hotlist_tree = calloc(sizeof(struct tree), 1); hotlist_tree = calloc(sizeof(struct tree), 1);
if (!hotlist_tree) { if (!hotlist_tree) {
warn_user("NoMemory", 0); warn_user("NoMemory", 0);
@ -83,32 +100,18 @@ void ro_gui_hotlist_initialise(void) {
node = tree_create_folder_node(hotlist_tree->root, "NetSurf"); node = tree_create_folder_node(hotlist_tree->root, "NetSurf");
if (!node) if (!node)
node = hotlist_tree->root; node = hotlist_tree->root;
data = url_store_find("http://netsurf.sourceforge.net/");
if (data) { for (i = 0; i != ENTRIES_COUNT; i++) {
tree_create_URL_node(node, data, data = urldb_get_url_data(default_entries[i].url);
messages_get("HotlistHomepage")); if (!data)
} urldb_add_url(default_entries[i].url);
data = url_store_find("http://netsurf.sourceforge.net/builds/");
if (data) { data = urldb_get_url_data(default_entries[i].url);
tree_create_URL_node(node, data, if (data) {
messages_get("HotlistTestBuild")); tree_create_URL_node(node,
} default_entries[i].url, data,
data = url_store_find("http://netsurf.sourceforge.net/docs"); messages_get(default_entries[i].msg_key));
if (data) { }
tree_create_URL_node(node, data,
messages_get("HotlistDocumentation"));
}
data = url_store_find("http://sourceforge.net/tracker/"
"?atid=464312&group_id=51719");
if (data) {
tree_create_URL_node(node, data,
messages_get("HotlistBugTracker"));
}
data = url_store_find("http://sourceforge.net/tracker/"
"?atid=464315&group_id=51719");
if (data) {
tree_create_URL_node(node, data,
messages_get("HotlistFeatureRequest"));
} }
tree_initialise(hotlist_tree); tree_initialise(hotlist_tree);
} else { } else {
@ -196,7 +199,7 @@ void ro_gui_hotlist_visited(struct content *content, struct tree *tree,
element = tree_find_element(node, TREE_ELEMENT_URL); element = tree_find_element(node, TREE_ELEMENT_URL);
if ((element) && (!strcmp(element->text, if ((element) && (!strcmp(element->text,
content->url))) { content->url))) {
tree_update_URL_node(node, NULL); tree_update_URL_node(node, content->url, NULL);
tree_handle_node_changed(tree, node, true, tree_handle_node_changed(tree, node, true,
false); false);
} }
@ -270,7 +273,7 @@ bool ro_gui_hotlist_dialog_apply(wimp_w w) {
char *icon; char *icon;
char *url = NULL; char *url = NULL;
url_func_result res = URL_FUNC_OK; url_func_result res = URL_FUNC_OK;
struct url_content *data; const struct url_data *data;
/* get our data */ /* get our data */
if (w == dialog_entry) { if (w == dialog_entry) {
@ -305,16 +308,20 @@ bool ro_gui_hotlist_dialog_apply(wimp_w w) {
/* update/insert our data */ /* update/insert our data */
if (!node) { if (!node) {
if (url) { if (url) {
data = url_store_find(url); data = urldb_get_url_data(url);
if (!data)
urldb_add_url(url);
data = urldb_get_url_data(url);
if (!data) { if (!data) {
free(url); free(url);
free(title); free(title);
return false; return false;
} }
if (!data->title) if (!data->title)
data->title = strdup(title); urldb_set_url_title(url, title);
node = dialog_entry_node = tree_create_URL_node( node = dialog_entry_node = tree_create_URL_node(
hotlist_tree->root, data, title); hotlist_tree->root, url, data, title);
} else { } else {
node = dialog_folder_node = tree_create_folder_node( node = dialog_folder_node = tree_create_folder_node(

View File

@ -20,6 +20,7 @@
#include "oslib/osgbpb.h" #include "oslib/osgbpb.h"
#include "oslib/territory.h" #include "oslib/territory.h"
#include "oslib/wimp.h" #include "oslib/wimp.h"
#include "netsurf/content/urldb.h"
#include "netsurf/desktop/gui.h" #include "netsurf/desktop/gui.h"
#include "netsurf/desktop/history_core.h" #include "netsurf/desktop/history_core.h"
#include "netsurf/render/box.h" #include "netsurf/render/box.h"
@ -1368,7 +1369,7 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
struct node *node; struct node *node;
os_error *error; os_error *error;
char url[80]; char url[80];
struct url_content *data; const struct url_data *data;
ro_gui_menu_get_window_details(owner, &g, &bw, &c, &t, &tree); ro_gui_menu_get_window_details(owner, &g, &bw, &c, &t, &tree);
@ -1408,9 +1409,9 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
case HOTLIST_ADD_URL: case HOTLIST_ADD_URL:
if ((!hotlist_tree) || (!c) || (!c->url)) if ((!hotlist_tree) || (!c) || (!c->url))
return false; return false;
data = url_store_find(c->url); data = urldb_get_url_data(c->url);
if (data) { if (data) {
node = tree_create_URL_node(hotlist_tree->root, data, NULL); node = tree_create_URL_node(hotlist_tree->root, c->url, data, NULL);
if (node) { if (node) {
tree_redraw_area(hotlist_tree, tree_redraw_area(hotlist_tree,
node->box.x - NODE_INSTEP, 0, node->box.x - NODE_INSTEP, 0,

View File

@ -18,9 +18,9 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "oslib/wimp.h" #include "oslib/wimp.h"
#include "netsurf/content/certdb.h"
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/fetch.h" #include "netsurf/content/fetch.h"
#include "netsurf/content/urldb.h"
#include "netsurf/desktop/browser.h" #include "netsurf/desktop/browser.h"
#include "netsurf/desktop/gui.h" #include "netsurf/desktop/gui.h"
#include "netsurf/riscos/dialog.h" #include "netsurf/riscos/dialog.h"
@ -169,10 +169,7 @@ bool ro_gui_cert_apply(wimp_w w)
assert(session); assert(session);
if (!certdb_insert(session->url)) { urldb_set_cert_permissions(session->url, true);
LOG(("certdb_insert failed"));
return false;
}
browser_window_go(session->bw, session->url, 0); browser_window_go(session->bw, session->url, 0);

View File

@ -21,7 +21,7 @@
#include "oslib/osfile.h" #include "oslib/osfile.h"
#include "oslib/osspriteop.h" #include "oslib/osspriteop.h"
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/desktop/plotters.h" #include "netsurf/desktop/plotters.h"
#include "netsurf/image/bitmap.h" #include "netsurf/image/bitmap.h"
#include "netsurf/render/font.h" #include "netsurf/render/font.h"
@ -138,7 +138,7 @@ bool thumbnail_create(struct content *content, struct bitmap *bitmap,
/* register the thumbnail with the URL */ /* register the thumbnail with the URL */
if (url) if (url)
url_store_add_thumbnail(url, bitmap); urldb_set_thumbnail(url, bitmap);
bitmap_modified(bitmap); bitmap_modified(bitmap);
return true; return true;
} }

View File

@ -20,7 +20,7 @@
#include "oslib/osbyte.h" #include "oslib/osbyte.h"
#include "oslib/osspriteop.h" #include "oslib/osspriteop.h"
#include "oslib/wimp.h" #include "oslib/wimp.h"
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/desktop/browser.h" #include "netsurf/desktop/browser.h"
#include "netsurf/desktop/tree.h" #include "netsurf/desktop/tree.h"
#include "netsurf/riscos/bitmap.h" #include "netsurf/riscos/bitmap.h"
@ -204,14 +204,14 @@ void tree_draw_node_element(struct tree *tree, struct node_element *element) {
int temp; int temp;
int toolbar_height = 0; int toolbar_height = 0;
struct node_element *url_element; struct node_element *url_element;
struct bitmap *bitmap = NULL; const struct bitmap *bitmap = NULL;
struct node_update *update; struct node_update *update;
char *frame; char *frame;
assert(tree); assert(tree);
assert(element); assert(element);
assert(element->parent); assert(element->parent);
if (tree->toolbar) if (tree->toolbar)
toolbar_height = ro_gui_theme_toolbar_height(tree->toolbar); toolbar_height = ro_gui_theme_toolbar_height(tree->toolbar);
@ -294,11 +294,11 @@ void tree_draw_node_element(struct tree *tree, struct node_element *element) {
case NODE_ELEMENT_THUMBNAIL: case NODE_ELEMENT_THUMBNAIL:
url_element = tree_find_element(element->parent, TREE_ELEMENT_URL); url_element = tree_find_element(element->parent, TREE_ELEMENT_URL);
if (url_element) if (url_element)
bitmap = url_store_get_thumbnail(url_element->text); bitmap = urldb_get_thumbnail(url_element->text);
if (bitmap) { if (bitmap) {
frame = bitmap_get_buffer(bitmap); frame = bitmap_get_buffer(bitmap);
if (!frame) if (!frame)
url_store_add_thumbnail(url_element->text, NULL); urldb_set_thumbnail(url_element->text, NULL);
if ((!frame) || (element->box.width == 0)) { if ((!frame) || (element->box.width == 0)) {
update = calloc(sizeof(struct node_update), 1); update = calloc(sizeof(struct node_update), 1);
if (!update) if (!update)
@ -348,7 +348,7 @@ void tree_draw_node_element(struct tree *tree, struct node_element *element) {
void tree_handle_node_changed_callback(void *p) { void tree_handle_node_changed_callback(void *p) {
struct node_update *update = p; struct node_update *update = p;
tree_handle_node_changed(update->tree, update->node, true, false); tree_handle_node_changed(update->tree, update->node, true, false);
free(update); free(update);
} }
@ -420,7 +420,7 @@ void tree_recalculate_node_element(struct node_element *element) {
int sprite_width; int sprite_width;
int sprite_height; int sprite_height;
osspriteop_flags flags; osspriteop_flags flags;
struct bitmap *bitmap = NULL; const struct bitmap *bitmap = NULL;
struct node_element *url_element; struct node_element *url_element;
assert(element); assert(element);
@ -467,7 +467,7 @@ void tree_recalculate_node_element(struct node_element *element) {
case NODE_ELEMENT_THUMBNAIL: case NODE_ELEMENT_THUMBNAIL:
url_element = tree_find_element(element->parent, TREE_ELEMENT_URL); url_element = tree_find_element(element->parent, TREE_ELEMENT_URL);
if (url_element) if (url_element)
bitmap = url_store_get_thumbnail(url_element->text); bitmap = urldb_get_thumbnail(url_element->text);
if (bitmap) { if (bitmap) {
/* if ((bitmap->width == 0) && (bitmap->height == 0)) /* if ((bitmap->width == 0) && (bitmap->height == 0))
frame = bitmap_get_buffer(bitmap); frame = bitmap_get_buffer(bitmap);
@ -523,32 +523,37 @@ void tree_set_node_sprite_folder(struct node *node) {
* The internal node dimensions are not updated. * The internal node dimensions are not updated.
* *
* \param node the node to update * \param node the node to update
* \param url the URL
* \param data the data the node is linked to, or NULL for unlinked data * \param data the data the node is linked to, or NULL for unlinked data
*/ */
void tree_update_URL_node(struct node *node, struct url_content *data) { void tree_update_URL_node(struct node *node,
const char *url, const struct url_data *data) {
struct node_element *element; struct node_element *element;
char buffer[256]; char buffer[256];
assert(node); assert(node);
element = tree_find_element(node, TREE_ELEMENT_URL); element = tree_find_element(node, TREE_ELEMENT_URL);
if (!element) if (!element)
return; return;
if (data) { if (data) {
/* node is linked, update */ /* node is linked, update */
assert(!node->editable); assert(!node->editable);
if (data->title) if (!data->title)
node->data.text = data->title; urldb_set_url_title(url, url);
else
node->data.text = data->url; if (!data->title)
return;
node->data.text = data->title;
} else { } else {
/* node is not link, find data */ /* node is not linked, find data */
assert(node->editable); assert(node->editable);
data = url_store_find(element->text); data = urldb_get_url_data(element->text);
if (!data) if (!data)
return; return;
} }
if (element) { if (element) {
sprintf(buffer, "small_%.3x", ro_content_filetype_from_type(data->type)); sprintf(buffer, "small_%.3x", ro_content_filetype_from_type(data->type));
if (ro_gui_wimp_sprite_exists(buffer)) if (ro_gui_wimp_sprite_exists(buffer))
@ -615,7 +620,7 @@ void ro_gui_tree_redraw(wimp_draw *redraw) {
struct tree *tree; struct tree *tree;
osbool more; osbool more;
int clip_x0, clip_x1, clip_y0, clip_y1, origin_x, origin_y; int clip_x0, clip_x1, clip_y0, clip_y1, origin_x, origin_y;
tree = (struct tree *)ro_gui_wimp_event_get_user_data(redraw->w); tree = (struct tree *)ro_gui_wimp_event_get_user_data(redraw->w);
assert(tree); assert(tree);
@ -785,7 +790,7 @@ bool ro_gui_tree_click(wimp_pointer *pointer, struct tree *tree) {
element = &last->data; element = &last->data;
if (last->expanded) if (last->expanded)
for (; element->next; element = element->next); for (; element->next; element = element->next);
ro_gui_tree_scroll_visible(tree, element); ro_gui_tree_scroll_visible(tree, element);
ro_gui_tree_scroll_visible(tree, &node->data); ro_gui_tree_scroll_visible(tree, &node->data);
return true; return true;
} }
@ -926,7 +931,7 @@ bool ro_gui_tree_toolbar_click(wimp_pointer* pointer) {
struct tree *tree = struct tree *tree =
(struct tree *)ro_gui_wimp_event_get_user_data(toolbar->parent_handle); (struct tree *)ro_gui_wimp_event_get_user_data(toolbar->parent_handle);
assert(tree); assert(tree);
ro_gui_tree_stop_edit(tree); ro_gui_tree_stop_edit(tree);
if (pointer->buttons == wimp_CLICK_MENU) { if (pointer->buttons == wimp_CLICK_MENU) {
@ -937,7 +942,7 @@ bool ro_gui_tree_toolbar_click(wimp_pointer* pointer) {
if (tree->toolbar->editor) { if (tree->toolbar->editor) {
ro_gui_theme_toolbar_editor_click(tree->toolbar, pointer); ro_gui_theme_toolbar_editor_click(tree->toolbar, pointer);
return true; return true;
} }
switch (pointer->i) { switch (pointer->i) {
@ -1156,9 +1161,9 @@ void ro_gui_tree_open(wimp_open *open) {
int width; int width;
int height; int height;
int toolbar_height = 0; int toolbar_height = 0;
tree = (struct tree *)ro_gui_wimp_event_get_user_data(open->w); tree = (struct tree *)ro_gui_wimp_event_get_user_data(open->w);
if (!tree) if (!tree)
return; return;
if (tree->toolbar) if (tree->toolbar)
@ -1264,7 +1269,7 @@ void ro_gui_tree_selection_drag_end(wimp_dragged *drag) {
os_error *error; os_error *error;
int x0, y0, x1, y1; int x0, y0, x1, y1;
int toolbar_height = 0; int toolbar_height = 0;
if (ro_gui_tree_current_drag_tree->toolbar) if (ro_gui_tree_current_drag_tree->toolbar)
toolbar_height = ro_gui_theme_toolbar_height( toolbar_height = ro_gui_theme_toolbar_height(
ro_gui_tree_current_drag_tree->toolbar); ro_gui_tree_current_drag_tree->toolbar);

View File

@ -15,7 +15,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "oslib/wimp.h" #include "oslib/wimp.h"
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/utils/log.h" #include "netsurf/utils/log.h"
#include "netsurf/riscos/global_history.h" #include "netsurf/riscos/global_history.h"
#include "netsurf/riscos/gui.h" #include "netsurf/riscos/gui.h"
@ -27,7 +27,7 @@
#define MAXIMUM_VISIBLE_LINES 7 #define MAXIMUM_VISIBLE_LINES 7
static struct url_content **url_complete_matches = NULL; static char **url_complete_matches = NULL;
static int url_complete_matches_allocated = 0; static int url_complete_matches_allocated = 0;
static int url_complete_matches_available = 0; static int url_complete_matches_available = 0;
static char *url_complete_matched_string = NULL; static char *url_complete_matched_string = NULL;
@ -36,8 +36,9 @@ static int url_complete_keypress_selection = -1;
static wimp_w url_complete_parent = 0; static wimp_w url_complete_parent = 0;
static bool url_complete_matches_reset = false; static bool url_complete_matches_reset = false;
static char *url_complete_original_url = NULL; static char *url_complete_original_url = NULL;
static bool url_complete_memory_exhausted = false;
static struct url_content *url_complete_redraw[MAXIMUM_VISIBLE_LINES]; static char *url_complete_redraw[MAXIMUM_VISIBLE_LINES];
static char url_complete_icon_null[] = "\0"; static char url_complete_icon_null[] = "\0";
static char url_complete_icon_sprite[12]; static char url_complete_icon_sprite[12];
static wimp_icon url_complete_icon; static wimp_icon url_complete_icon;
@ -45,21 +46,26 @@ static wimp_icon url_complete_sprite;
static int mouse_x; static int mouse_x;
static int mouse_y; static int mouse_y;
static bool url_complete_callback(const char *url);
/** /**
* Should be called when the caret is placed into a URL completion icon. * Should be called when the caret is placed into a URL completion icon.
* *
* \param g the gui_window to initialise URL completion for * \param g the gui_window to initialise URL completion for
*/ */
void ro_gui_url_complete_start(struct gui_window *g) { void ro_gui_url_complete_start(struct gui_window *g)
char *url; {
char *url;
if ((!g->toolbar) || (!g->toolbar->display_url) || if ((!g->toolbar) || (!g->toolbar->display_url) ||
(g->window == url_complete_parent)) (g->window == url_complete_parent))
return; return;
ro_gui_url_complete_close(NULL, 0); ro_gui_url_complete_close(NULL, 0);
url = ro_gui_get_icon_string(g->toolbar->toolbar_handle, ICON_TOOLBAR_URL); url = ro_gui_get_icon_string(g->toolbar->toolbar_handle,
url_complete_matched_string = url_store_match_string(url); ICON_TOOLBAR_URL);
url_complete_matched_string = strdup(url);
if (url_complete_matched_string) if (url_complete_matched_string)
url_complete_parent = g->window; url_complete_parent = g->window;
} }
@ -70,14 +76,13 @@ void ro_gui_url_complete_start(struct gui_window *g) {
* *
* \param g the gui_window to update * \param g the gui_window to update
* \param key the key pressed * \param key the key pressed
* \return true to indicate keypress handled, false otherwise
*/ */
bool ro_gui_url_complete_keypress(struct gui_window *g, int key) { bool ro_gui_url_complete_keypress(struct gui_window *g, int key)
{
wimp_window_state state; wimp_window_state state;
struct url_content **array_extend;
struct url_data *reference = NULL;
char *match_url; char *match_url;
char *url; char *url;
struct url_content *output;
int i, lines; int i, lines;
int old_selection; int old_selection;
bool ignore_changes = false; bool ignore_changes = false;
@ -86,7 +91,8 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
bool currently_open; bool currently_open;
/* we must have a toolbar/url bar */ /* we must have a toolbar/url bar */
if ((!g->toolbar) || (!g->toolbar->display_url) || (!option_url_suggestion)) { if ((!g->toolbar) || (!g->toolbar->display_url) ||
(!option_url_suggestion)) {
ro_gui_url_complete_close(NULL, 0); ro_gui_url_complete_close(NULL, 0);
return false; return false;
} }
@ -107,12 +113,13 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
url_complete_matched_string = NULL; url_complete_matched_string = NULL;
} }
} }
/* get the text to match */ /* get the text to match */
url_complete_parent = g->window; url_complete_parent = g->window;
url = ro_gui_get_icon_string(g->toolbar->toolbar_handle, ICON_TOOLBAR_URL); url = ro_gui_get_icon_string(g->toolbar->toolbar_handle,
match_url = url_store_match_string(url); ICON_TOOLBAR_URL);
match_url = strdup(url);
if (!match_url) { if (!match_url) {
ro_gui_url_complete_close(NULL, 0); ro_gui_url_complete_close(NULL, 0);
return false; return false;
@ -121,7 +128,8 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
/* check if we should ignore text changes */ /* check if we should ignore text changes */
if ((url_complete_keypress_selection >= 0) && (url_complete_matches)) if ((url_complete_keypress_selection >= 0) && (url_complete_matches))
ignore_changes = !strcmp(url, ignore_changes = !strcmp(url,
url_complete_matches[url_complete_keypress_selection]->url); url_complete_matches[
url_complete_keypress_selection]);
/* if the text to match has changed then update it */ /* if the text to match has changed then update it */
if (!ignore_changes && ((!url_complete_matched_string) || if (!ignore_changes && ((!url_complete_matched_string) ||
@ -133,11 +141,13 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
lines = url_complete_matches_available; lines = url_complete_matches_available;
if (url_complete_matches) if (url_complete_matches)
for (i = 0; i < MAXIMUM_VISIBLE_LINES; i++) for (i = 0; i < MAXIMUM_VISIBLE_LINES; i++)
url_complete_redraw[i] = url_complete_matches[i]; url_complete_redraw[i] =
url_complete_matches[i];
/* our selection gets wiped */ /* our selection gets wiped */
error = xwimp_force_redraw(dialog_url_complete, error = xwimp_force_redraw(dialog_url_complete,
0, -(url_complete_matches_selection + 1) * 44, 0,
-(url_complete_matches_selection + 1) * 44,
65536, -url_complete_matches_selection * 44); 65536, -url_complete_matches_selection * 44);
if (error) { if (error) {
LOG(("xwimp_force_redraw: 0x%x: %s", LOG(("xwimp_force_redraw: 0x%x: %s",
@ -150,7 +160,14 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
free(url_complete_matched_string); free(url_complete_matched_string);
url_complete_matched_string = match_url; url_complete_matched_string = match_url;
url_complete_original_url = NULL; url_complete_original_url = NULL;
url_complete_matches_available = 0; if (url_complete_matches) {
for (; url_complete_matches_available > 0;
url_complete_matches_available--)
free(url_complete_matches[
url_complete_matches_available - 1]);
} else {
url_complete_matches_available = 0;
}
url_complete_matches_selection = -1; url_complete_matches_selection = -1;
url_complete_keypress_selection = -1; url_complete_keypress_selection = -1;
@ -164,25 +181,12 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
url_complete_matches_allocated = 64; url_complete_matches_allocated = 64;
} }
/* get all our matches */ /* find matches */
while ((output = url_store_match(match_url, &reference))) { url_complete_memory_exhausted = false;
url_complete_matches_available++; urldb_iterate_partial(match_url, url_complete_callback);
if (url_complete_matches_available > if (url_complete_memory_exhausted) {
url_complete_matches_allocated) { ro_gui_url_complete_close(NULL, 0);
return false;
array_extend = (struct url_content **)realloc(
url_complete_matches,
(url_complete_matches_allocated + 64) *
sizeof(struct url_content *));
if (!array_extend) {
ro_gui_url_complete_close(NULL, 0);
return false;
}
url_complete_matches = array_extend;
url_complete_matches_allocated += 64;
}
url_complete_matches[url_complete_matches_available - 1] =
output;
} }
/* update the window */ /* update the window */
@ -203,17 +207,19 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
if (lines > url_complete_matches_available) if (lines > url_complete_matches_available)
lines = url_complete_matches_available; lines = url_complete_matches_available;
for (i = 0; i < lines; i++) { for (i = 0; i < lines; i++) {
if (url_complete_redraw[i] != url_complete_matches[i]) { if (url_complete_redraw[i] !=
url_complete_matches[i]) {
error = xwimp_force_redraw(dialog_url_complete, error = xwimp_force_redraw(dialog_url_complete,
0, -(i + 1) * 44, 65536, -i * 44); 0, -(i + 1) * 44, 65536, -i * 44);
if (error) { if (error) {
LOG(("xwimp_force_redraw: 0x%x: %s", LOG(("xwimp_force_redraw: 0x%x: %s",
error->errnum, error->errmess)); error->errnum,
warn_user("WimpError", error->errmess); error->errmess));
warn_user("WimpError",
error->errmess);
} }
} }
} }
} else { } else {
free(match_url); free(match_url);
} }
@ -221,7 +227,9 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
/* handle keypresses */ /* handle keypresses */
if (!currently_open) if (!currently_open)
return false; return false;
old_selection = url_complete_matches_selection; old_selection = url_complete_matches_selection;
switch (key) { switch (key) {
case wimp_KEY_UP: case wimp_KEY_UP:
url_complete_matches_selection--; url_complete_matches_selection--;
@ -230,10 +238,12 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
url_complete_matches_selection++; url_complete_matches_selection++;
break; break;
case wimp_KEY_PAGE_UP: case wimp_KEY_PAGE_UP:
url_complete_matches_selection -= MAXIMUM_VISIBLE_LINES; url_complete_matches_selection -=
MAXIMUM_VISIBLE_LINES;
break; break;
case wimp_KEY_PAGE_DOWN: case wimp_KEY_PAGE_DOWN:
url_complete_matches_selection += MAXIMUM_VISIBLE_LINES; url_complete_matches_selection +=
MAXIMUM_VISIBLE_LINES;
break; break;
case wimp_KEY_CONTROL | wimp_KEY_UP: case wimp_KEY_CONTROL | wimp_KEY_UP:
url_complete_matches_selection = 0; url_complete_matches_selection = 0;
@ -242,8 +252,11 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
url_complete_matches_selection = 65536; url_complete_matches_selection = 65536;
break; break;
} }
if (url_complete_matches_selection > url_complete_matches_available - 1)
url_complete_matches_selection = url_complete_matches_available - 1; if (url_complete_matches_selection >
url_complete_matches_available - 1)
url_complete_matches_selection =
url_complete_matches_available - 1;
else if (url_complete_matches_selection < -1) else if (url_complete_matches_selection < -1)
url_complete_matches_selection = -1; url_complete_matches_selection = -1;
@ -251,12 +264,14 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
return false; return false;
error = xwimp_force_redraw(dialog_url_complete, error = xwimp_force_redraw(dialog_url_complete,
0, -(old_selection + 1) * 44, 65536, -old_selection * 44); 0, -(old_selection + 1) * 44,
65536, -old_selection * 44);
if (error) { if (error) {
LOG(("xwimp_force_redraw: 0x%x: %s", LOG(("xwimp_force_redraw: 0x%x: %s",
error->errnum, error->errmess)); error->errnum, error->errmess));
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
} }
error = xwimp_force_redraw(dialog_url_complete, error = xwimp_force_redraw(dialog_url_complete,
0, -(url_complete_matches_selection + 1) * 44, 0, -(url_complete_matches_selection + 1) * 44,
65536, -url_complete_matches_selection * 44); 65536, -url_complete_matches_selection * 44);
@ -265,6 +280,7 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
error->errnum, error->errmess)); error->errnum, error->errmess));
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
} }
if (old_selection == -1) { if (old_selection == -1) {
free(url_complete_original_url); free(url_complete_original_url);
url_complete_original_url = malloc(strlen(url) + 1); url_complete_original_url = malloc(strlen(url) + 1);
@ -272,6 +288,7 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
return false; return false;
strcpy(url_complete_original_url, url); strcpy(url_complete_original_url, url);
} }
if (url_complete_matches_selection == -1) { if (url_complete_matches_selection == -1) {
ro_gui_set_icon_string(g->toolbar->toolbar_handle, ro_gui_set_icon_string(g->toolbar->toolbar_handle,
ICON_TOOLBAR_URL, ICON_TOOLBAR_URL,
@ -279,7 +296,8 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
} else { } else {
ro_gui_set_icon_string(g->toolbar->toolbar_handle, ro_gui_set_icon_string(g->toolbar->toolbar_handle,
ICON_TOOLBAR_URL, ICON_TOOLBAR_URL,
url_complete_matches[url_complete_matches_selection]->url); url_complete_matches[
url_complete_matches_selection]);
} }
url_complete_keypress_selection = url_complete_matches_selection; url_complete_keypress_selection = url_complete_matches_selection;
@ -292,11 +310,15 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
return true; return true;
} }
if (state.yscroll < -(url_complete_matches_selection * 44)) if (state.yscroll < -(url_complete_matches_selection * 44))
state.yscroll = -(url_complete_matches_selection * 44); state.yscroll = -(url_complete_matches_selection * 44);
height = state.visible.y1 - state.visible.y0; height = state.visible.y1 - state.visible.y0;
if (state.yscroll - height > -((url_complete_matches_selection + 1) * 44)) if (state.yscroll - height >
state.yscroll = -((url_complete_matches_selection + 1) * 44) + height; -((url_complete_matches_selection + 1) * 44))
state.yscroll =
-((url_complete_matches_selection + 1) * 44) + height;
error = xwimp_open_window((wimp_open *)(&state)); error = xwimp_open_window((wimp_open *)(&state));
if (error) { if (error) {
LOG(("xwimp_open_window: 0x%x: %s", LOG(("xwimp_open_window: 0x%x: %s",
@ -308,6 +330,43 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
return true; return true;
} }
/**
* Callback function for urldb_iterate_partial
*
* \param url URL which matches
* \return true to continue iteration, false otherwise
*/
bool url_complete_callback(const char *url)
{
char **array_extend;
char *temp;
url_complete_matches_available++;
if (url_complete_matches_available >
url_complete_matches_allocated) {
array_extend = (char **)realloc(url_complete_matches,
(url_complete_matches_allocated + 64) *
sizeof(struct url_content *));
if (!array_extend) {
url_complete_memory_exhausted = true;
return false;
}
url_complete_matches = array_extend;
url_complete_matches_allocated += 64;
}
temp = strdup(url);
if (!temp) {
url_complete_memory_exhausted = true;
return false;
}
url_complete_matches[url_complete_matches_available - 1] = temp;
return true;
}
/** /**
* Move and resize the url completion window to match the toolbar. * Move and resize the url completion window to match the toolbar.
@ -315,7 +374,8 @@ bool ro_gui_url_complete_keypress(struct gui_window *g, int key) {
* \param g the gui_window to update * \param g the gui_window to update
* \param open the wimp_open request (updated on exit) * \param open the wimp_open request (updated on exit)
*/ */
void ro_gui_url_complete_resize(struct gui_window *g, wimp_open *open) { void ro_gui_url_complete_resize(struct gui_window *g, wimp_open *open)
{
os_box extent = { 0, 0, 0, 0 }; os_box extent = { 0, 0, 0, 0 };
wimp_icon_state url_state; wimp_icon_state url_state;
wimp_window_state toolbar_state; wimp_window_state toolbar_state;
@ -327,8 +387,9 @@ void ro_gui_url_complete_resize(struct gui_window *g, wimp_open *open) {
/* only react to our window */ /* only react to our window */
if (open->w != url_complete_parent) if (open->w != url_complete_parent)
return; return;
/* if there is no toolbar, or there is no URL bar shown, or there are
* no URL matches, close it */ /* if there is no toolbar, or there is no URL bar shown,
* or there are no URL matches, close it */
if ((!g->toolbar) || (!g->toolbar->display_url) || if ((!g->toolbar) || (!g->toolbar->display_url) ||
(!url_complete_matches) || (!url_complete_matches) ||
(url_complete_matches_available == 0)) { (url_complete_matches_available == 0)) {
@ -345,6 +406,7 @@ void ro_gui_url_complete_resize(struct gui_window *g, wimp_open *open) {
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
return; return;
} }
if (url_complete_matches_reset) if (url_complete_matches_reset)
state.yscroll = 0; state.yscroll = 0;
@ -357,6 +419,7 @@ void ro_gui_url_complete_resize(struct gui_window *g, wimp_open *open) {
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
return; return;
} }
url_state.w = g->toolbar->toolbar_handle; url_state.w = g->toolbar->toolbar_handle;
url_state.i = ICON_TOOLBAR_SURROUND; url_state.i = ICON_TOOLBAR_SURROUND;
error = xwimp_get_icon_state(&url_state); error = xwimp_get_icon_state(&url_state);
@ -366,6 +429,7 @@ void ro_gui_url_complete_resize(struct gui_window *g, wimp_open *open) {
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
return; return;
} }
lines = url_complete_matches_available; lines = url_complete_matches_available;
extent.y0 = -(lines * 44); extent.y0 = -(lines * 44);
extent.x1 = 65536; extent.x1 = 65536;
@ -376,6 +440,7 @@ void ro_gui_url_complete_resize(struct gui_window *g, wimp_open *open) {
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
return; return;
} }
state.next = open->next; state.next = open->next;
state.flags &= ~wimp_WINDOW_VSCROLL; state.flags &= ~wimp_WINDOW_VSCROLL;
state.flags &= ~(4095 << 16); /* clear bits 16-27 */ state.flags &= ~(4095 << 16); /* clear bits 16-27 */
@ -385,7 +450,8 @@ void ro_gui_url_complete_resize(struct gui_window *g, wimp_open *open) {
state.flags |= wimp_WINDOW_VSCROLL; state.flags |= wimp_WINDOW_VSCROLL;
} }
state.visible.x0 = open->visible.x0 + 2 + url_state.icon.extent.x0; state.visible.x0 = open->visible.x0 + 2 + url_state.icon.extent.x0;
state.visible.x1 = open->visible.x0 - 2 + url_state.icon.extent.x1 - scroll_v; state.visible.x1 = open->visible.x0 - 2 +
url_state.icon.extent.x1 - scroll_v;
state.visible.y1 = open->visible.y1 - url_state.icon.extent.y1 + 2; state.visible.y1 = open->visible.y1 - url_state.icon.extent.y1 + 2;
state.visible.y0 = state.visible.y1 - (lines * 44); state.visible.y0 = state.visible.y1 - (lines * 44);
if (state.visible.x1 + scroll_v > toolbar_state.visible.x1) if (state.visible.x1 + scroll_v > toolbar_state.visible.x1)
@ -398,7 +464,8 @@ void ro_gui_url_complete_resize(struct gui_window *g, wimp_open *open) {
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
} }
} else { } else {
error = xwimp_open_window_nested_with_flags(&state, (wimp_w)-1, 0); error = xwimp_open_window_nested_with_flags(&state,
(wimp_w)-1, 0);
if (error) { if (error) {
LOG(("xwimp_open_window: 0x%x: %s", LOG(("xwimp_open_window: 0x%x: %s",
error->errnum, error->errmess)); error->errnum, error->errmess));
@ -417,16 +484,24 @@ void ro_gui_url_complete_resize(struct gui_window *g, wimp_open *open) {
* \param i the icon the user clicked on to prompt the close * \param i the icon the user clicked on to prompt the close
* \return whether the window was closed * \return whether the window was closed
*/ */
bool ro_gui_url_complete_close(struct gui_window *g, wimp_i i) { bool ro_gui_url_complete_close(struct gui_window *g, wimp_i i)
{
os_error *error; os_error *error;
bool currently_open; bool currently_open;
if ((g && (i == ICON_TOOLBAR_URL) && (g->window == url_complete_parent))) if ((g && (i == ICON_TOOLBAR_URL) &&
(g->window == url_complete_parent)))
return false; return false;
currently_open = ((url_complete_parent) && currently_open = ((url_complete_parent) &&
(url_complete_matches_available > 0)); (url_complete_matches_available > 0));
if (url_complete_matches) {
for (; url_complete_matches_available > 0;
url_complete_matches_available--)
free(url_complete_matches[
url_complete_matches_available - 1]);
}
free(url_complete_matches); free(url_complete_matches);
free(url_complete_matched_string); free(url_complete_matched_string);
free(url_complete_original_url); free(url_complete_original_url);
@ -445,6 +520,7 @@ bool ro_gui_url_complete_close(struct gui_window *g, wimp_i i) {
error->errnum, error->errmess)); error->errnum, error->errmess));
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
} }
return currently_open; return currently_open;
} }
@ -453,13 +529,15 @@ bool ro_gui_url_complete_close(struct gui_window *g, wimp_i i) {
* Redraws a section of the URL completion window * Redraws a section of the URL completion window
* *
* \param redraw the area to redraw * \param redraw the area to redraw
* \param tree the tree to redraw
*/ */
void ro_gui_url_complete_redraw(wimp_draw *redraw) { void ro_gui_url_complete_redraw(wimp_draw *redraw)
{
osbool more; osbool more;
os_error *error; os_error *error;
int clip_y0, clip_y1, origin_y; int clip_y0, clip_y1, origin_y;
int first_line, last_line, line; int first_line, last_line, line;
const struct url_data *data;
int type;
/* initialise our icon */ /* initialise our icon */
url_complete_icon.flags = wimp_ICON_INDIRECTED | wimp_ICON_VCENTRED | url_complete_icon.flags = wimp_ICON_INDIRECTED | wimp_ICON_VCENTRED |
@ -468,23 +546,26 @@ void ro_gui_url_complete_redraw(wimp_draw *redraw) {
(wimp_COLOUR_WHITE << wimp_ICON_BG_COLOUR_SHIFT); (wimp_COLOUR_WHITE << wimp_ICON_BG_COLOUR_SHIFT);
url_complete_icon.extent.x0 = 50; url_complete_icon.extent.x0 = 50;
url_complete_icon.extent.x1 = 16384; url_complete_icon.extent.x1 = 16384;
url_complete_icon.data.indirected_text.validation = url_complete_icon_null; url_complete_icon.data.indirected_text.validation =
url_complete_icon_null;
url_complete_sprite.flags = wimp_ICON_TEXT | wimp_ICON_SPRITE | url_complete_sprite.flags = wimp_ICON_TEXT | wimp_ICON_SPRITE |
wimp_ICON_INDIRECTED | wimp_ICON_FILLED | wimp_ICON_INDIRECTED | wimp_ICON_FILLED |
wimp_ICON_HCENTRED | wimp_ICON_VCENTRED; wimp_ICON_HCENTRED | wimp_ICON_VCENTRED;
url_complete_sprite.extent.x0 = 0; url_complete_sprite.extent.x0 = 0;
url_complete_sprite.extent.x1 = 50; url_complete_sprite.extent.x1 = 50;
url_complete_sprite.data.indirected_text.text = url_complete_icon_null; url_complete_sprite.data.indirected_text.text =
url_complete_sprite.data.indirected_text.validation = url_complete_icon_sprite; url_complete_icon_null;
url_complete_sprite.data.indirected_text.validation =
url_complete_icon_sprite;
url_complete_sprite.data.indirected_text.size = 1; url_complete_sprite.data.indirected_text.size = 1;
/* no matches? no redraw */ /* no matches? no redraw */
if (!url_complete_matches) { if (!url_complete_matches) {
LOG(("Attempt to redraw with no matches made")); LOG(("Attempt to redraw with no matches made"));
ro_gui_user_redraw(redraw, false, NULL); ro_gui_user_redraw(redraw, false, NULL);
return; return;
} }
/* redraw */ /* redraw */
more = wimp_redraw_window(redraw); more = wimp_redraw_window(redraw);
while (more) { while (more) {
@ -497,32 +578,47 @@ void ro_gui_url_complete_redraw(wimp_draw *redraw) {
for (line = first_line; line < last_line; line++) { for (line = first_line; line < last_line; line++) {
if (line == url_complete_matches_selection) if (line == url_complete_matches_selection)
url_complete_icon.flags |= wimp_ICON_SELECTED; url_complete_icon.flags |=
wimp_ICON_SELECTED;
else else
url_complete_icon.flags &= ~wimp_ICON_SELECTED; url_complete_icon.flags &=
~wimp_ICON_SELECTED;
url_complete_icon.extent.y1 = -line * 44; url_complete_icon.extent.y1 = -line * 44;
url_complete_icon.extent.y0 = -(line + 1) * 44; url_complete_icon.extent.y0 = -(line + 1) * 44;
url_complete_icon.data.indirected_text.text = url_complete_icon.data.indirected_text.text =
url_complete_matches[line]->url; url_complete_matches[line];
url_complete_icon.data.indirected_text.size = url_complete_icon.data.indirected_text.size =
strlen(url_complete_matches[line]->url); strlen(url_complete_matches[line]);
error = xwimp_plot_icon(&url_complete_icon); error = xwimp_plot_icon(&url_complete_icon);
if (error) { if (error) {
LOG(("xwimp_plot_icon: 0x%x: %s", LOG(("xwimp_plot_icon: 0x%x: %s",
error->errnum, error->errmess)); error->errnum,
error->errmess));
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
} }
data = urldb_get_url_data(url_complete_matches[line]);
if (data)
type = ro_content_filetype_from_type(
data->type);
else
type = 0;
sprintf(url_complete_icon_sprite, "Ssmall_%.3x", sprintf(url_complete_icon_sprite, "Ssmall_%.3x",
ro_content_filetype_from_type( type);
url_complete_matches[line]->type));
if (!ro_gui_wimp_sprite_exists(url_complete_icon_sprite + 1)) if (!ro_gui_wimp_sprite_exists(
sprintf(url_complete_icon_sprite, "Ssmall_xxx"); url_complete_icon_sprite + 1))
sprintf(url_complete_icon_sprite,
"Ssmall_xxx");
url_complete_sprite.extent.y1 = -line * 44; url_complete_sprite.extent.y1 = -line * 44;
url_complete_sprite.extent.y0 = -(line + 1) * 44; url_complete_sprite.extent.y0 = -(line + 1) * 44;
error = xwimp_plot_icon(&url_complete_sprite); error = xwimp_plot_icon(&url_complete_sprite);
if (error) { if (error) {
LOG(("xwimp_plot_icon: 0x%x: %s", LOG(("xwimp_plot_icon: 0x%x: %s",
error->errnum, error->errmess)); error->errnum,
error->errmess));
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
} }
} }
@ -536,7 +632,8 @@ void ro_gui_url_complete_redraw(wimp_draw *redraw) {
* *
* \param pointer the pointer state * \param pointer the pointer state
*/ */
void ro_gui_url_complete_mouse_at(wimp_pointer *pointer) { void ro_gui_url_complete_mouse_at(wimp_pointer *pointer)
{
wimp_mouse_state current; wimp_mouse_state current;
current = pointer->buttons; current = pointer->buttons;
@ -552,7 +649,8 @@ void ro_gui_url_complete_mouse_at(wimp_pointer *pointer) {
* \param pointer the pointer state * \param pointer the pointer state
* \return whether the click was handled * \return whether the click was handled
*/ */
bool ro_gui_url_complete_click(wimp_pointer *pointer) { bool ro_gui_url_complete_click(wimp_pointer *pointer)
{
wimp_window_state state; wimp_window_state state;
os_error *error; os_error *error;
int selection, old_selection; int selection, old_selection;
@ -562,6 +660,7 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer) {
if ((mouse_x == pointer->pos.x) && (mouse_y == pointer->pos.y) && if ((mouse_x == pointer->pos.x) && (mouse_y == pointer->pos.y) &&
(!pointer->buttons)) (!pointer->buttons))
return false; return false;
mouse_x = pointer->pos.x; mouse_x = pointer->pos.x;
mouse_y = pointer->pos.y; mouse_y = pointer->pos.y;
@ -573,13 +672,15 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer) {
warn_user("WimpError", error->errmess); warn_user("WimpError", error->errmess);
return false; return false;
} }
selection = (state.visible.y1 - pointer->pos.y - state.yscroll) / 44; selection = (state.visible.y1 - pointer->pos.y - state.yscroll) / 44;
if (selection != url_complete_matches_selection) { if (selection != url_complete_matches_selection) {
if (url_complete_matches_selection == -1) { if (url_complete_matches_selection == -1) {
g = ro_gui_window_lookup(url_complete_parent); g = ro_gui_window_lookup(url_complete_parent);
if (!g) if (!g)
return false; return false;
url = ro_gui_get_icon_string(g->toolbar->toolbar_handle, url = ro_gui_get_icon_string(
g->toolbar->toolbar_handle,
ICON_TOOLBAR_URL); ICON_TOOLBAR_URL);
free(url_complete_original_url); free(url_complete_original_url);
url_complete_original_url = malloc(strlen(url) + 1); url_complete_original_url = malloc(strlen(url) + 1);
@ -590,7 +691,8 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer) {
old_selection = url_complete_matches_selection; old_selection = url_complete_matches_selection;
url_complete_matches_selection = selection; url_complete_matches_selection = selection;
error = xwimp_force_redraw(dialog_url_complete, error = xwimp_force_redraw(dialog_url_complete,
0, -(old_selection + 1) * 44, 65536, -old_selection * 44); 0, -(old_selection + 1) * 44,
65536, -old_selection * 44);
if (error) { if (error) {
LOG(("xwimp_force_redraw: 0x%x: %s", LOG(("xwimp_force_redraw: 0x%x: %s",
error->errnum, error->errmess)); error->errnum, error->errmess));
@ -607,7 +709,7 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer) {
} }
if (!pointer->buttons) if (!pointer->buttons)
return true; return true;
/* find owning window */ /* find owning window */
g = ro_gui_window_lookup(url_complete_parent); g = ro_gui_window_lookup(url_complete_parent);
if (!g) if (!g)
@ -617,18 +719,22 @@ bool ro_gui_url_complete_click(wimp_pointer *pointer) {
if (pointer->buttons == wimp_CLICK_SELECT) { if (pointer->buttons == wimp_CLICK_SELECT) {
ro_gui_set_icon_string(g->toolbar->toolbar_handle, ro_gui_set_icon_string(g->toolbar->toolbar_handle,
ICON_TOOLBAR_URL, ICON_TOOLBAR_URL,
url_complete_matches[url_complete_matches_selection]->url); url_complete_matches[
url_complete_matches_selection]);
browser_window_go(g->bw, browser_window_go(g->bw,
url_complete_matches[url_complete_matches_selection]->url, url_complete_matches[
url_complete_matches_selection],
0); 0);
global_history_add_recent(url_complete_matches[url_complete_matches_selection]->url); global_history_add_recent(url_complete_matches[
url_complete_matches_selection]);
ro_gui_url_complete_close(NULL, 0); ro_gui_url_complete_close(NULL, 0);
/* Adjust just sets the text */ /* Adjust just sets the text */
} else if (pointer->buttons == wimp_CLICK_ADJUST) { } else if (pointer->buttons == wimp_CLICK_ADJUST) {
ro_gui_set_icon_string(g->toolbar->toolbar_handle, ro_gui_set_icon_string(g->toolbar->toolbar_handle,
ICON_TOOLBAR_URL, ICON_TOOLBAR_URL,
url_complete_matches[url_complete_matches_selection]->url); url_complete_matches[
url_complete_matches_selection]);
ro_gui_url_complete_keypress(g, 0); ro_gui_url_complete_keypress(g, 0);
} }
return true; return true;

View File

@ -30,7 +30,7 @@
#include "oslib/wimpspriteop.h" #include "oslib/wimpspriteop.h"
#include "netsurf/utils/config.h" #include "netsurf/utils/config.h"
#include "netsurf/content/content.h" #include "netsurf/content/content.h"
#include "netsurf/content/url_store.h" #include "netsurf/content/urldb.h"
#include "netsurf/css/css.h" #include "netsurf/css/css.h"
#include "netsurf/desktop/browser.h" #include "netsurf/desktop/browser.h"
#include "netsurf/desktop/plotters.h" #include "netsurf/desktop/plotters.h"
@ -2015,6 +2015,10 @@ bool ro_gui_window_keypress(struct gui_window *g, int key, bool toolbar)
} }
return true; return true;
case wimp_KEY_CONTROL + wimp_KEY_F9:
urldb_dump();
return true;
case wimp_KEY_CONTROL + wimp_KEY_SHIFT + wimp_KEY_F9: case wimp_KEY_CONTROL + wimp_KEY_SHIFT + wimp_KEY_F9:
talloc_report_full(0, stderr); talloc_report_full(0, stderr);
return true; return true;

View File

@ -617,6 +617,65 @@ url_func_result url_strip_lqf(const char *url, char **result)
} }
/**
* Extract path, leafname and query segments from an URL
*
* \param url an absolute URL
* \param result pointer to pointer to buffer to hold result
* \return URL_FUNC_OK on success
*/
url_func_result url_plq(const char *url, char **result)
{
int m, path_len = 0, query_len = 0;
regmatch_t match[10];
(*result) = 0;
m = regexec(&url_re, url, 10, match, 0);
if (m) {
LOG(("url '%s' failed to match regex", url));
return URL_FUNC_FAILED;
}
if (match[URL_RE_SCHEME].rm_so == -1 ||
match[URL_RE_AUTHORITY].rm_so == -1)
return URL_FUNC_FAILED;
if (match[URL_RE_PATH].rm_so != -1)
path_len = match[URL_RE_PATH].rm_eo -
match[URL_RE_PATH].rm_so;
if (match[URL_RE_QUERY].rm_so != -1)
query_len = match[URL_RE_QUERY].rm_eo -
match[URL_RE_QUERY].rm_so;
(*result) = malloc((path_len ? path_len : 1) + query_len + 1 + 1);
if (!(*result)) {
LOG(("malloc failed"));
return URL_FUNC_NOMEM;
}
m = 0;
if (path_len) {
strncpy((*result), url + match[URL_RE_PATH].rm_so,
path_len);
m += path_len;
}
else
(*result)[m++] = '/';
if (query_len) {
(*result)[m++] = '?';
strncpy((*result) + m, url + match[URL_RE_QUERY].rm_so,
query_len);
m += query_len;
}
(*result)[m] = '\0';
return URL_FUNC_OK;
}
/** /**
* Attempt to find a nice filename for a URL. * Attempt to find a nice filename for a URL.
* *

View File

@ -29,6 +29,7 @@ url_func_result url_nice(const char *url, char **result,
url_func_result url_escape(const char *unescaped, char **result); url_func_result url_escape(const char *unescaped, char **result);
url_func_result url_canonical_root(const char *url, char **result); url_func_result url_canonical_root(const char *url, char **result);
url_func_result url_strip_lqf(const char *url, char **result); url_func_result url_strip_lqf(const char *url, char **result);
url_func_result url_plq(const char *url, char **result);
char *path_to_url(const char *path); char *path_to_url(const char *path);
char *url_to_path(const char *url); char *url_to_path(const char *url);