summaryrefslogtreecommitdiff
path: root/riscos/save.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2004-05-05 00:02:13 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2004-05-05 00:02:13 +0000
commit0f8e3e06e4bf946a932e77c0c27dd044cb1d9f4e (patch)
tree5f22ad8b0784912c403e302d719e84948cf7edac /riscos/save.c
parent88a5db22f965dae60f3bf8ba37de12bd93353b04 (diff)
downloadnetsurf-0f8e3e06e4bf946a932e77c0c27dd044cb1d9f4e.tar.gz
netsurf-0f8e3e06e4bf946a932e77c0c27dd044cb1d9f4e.tar.bz2
[project @ 2004-05-05 00:02:13 by jmb]
Implement saving of Links as URI, URL and Text Implement saving of page objects in their original format Implement export of page images as Sprite Fix NULL pointer causing ofla when extracting page charset from libxml svn path=/import/netsurf/; revision=826
Diffstat (limited to 'riscos/save.c')
-rw-r--r--riscos/save.c140
1 files changed, 116 insertions, 24 deletions
diff --git a/riscos/save.c b/riscos/save.c
index e36d85b85..79c79adfb 100644
--- a/riscos/save.c
+++ b/riscos/save.c
@@ -29,7 +29,12 @@
gui_save_type gui_current_save_type;
-void ro_gui_save_complete(struct content *c, char *path);
+extern struct content *save_content;
+extern char *save_link;
+
+static void ro_gui_save_complete(struct content *c, char *path);
+static void ro_gui_save_object_native(struct content *c, char *path);
+static void ro_gui_save_link(int format, char *path);
/**
@@ -133,7 +138,7 @@ void ro_gui_save_drag_end(wimp_dragged *drag)
void ro_gui_save_datasave_ack(wimp_message *message)
{
char *path = message->data.data_xfer.file_name;
- struct content *c = current_gui->data.browser.bw->current_content;
+ struct content *c = save_content;
os_error *error;
ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_PATH, path);
@@ -171,8 +176,48 @@ void ro_gui_save_datasave_ack(wimp_message *message)
save_as_text(c, path);
xosfile_set_type(path, 0xfff);
break;
+
+ case GUI_SAVE_OBJECT_ORIG:
+ if (!c)
+ return;
+ error = xosfile_save_stamped(path,
+ ro_content_filetype(c),
+ c->source_data,
+ c->source_data + c->source_size);
+ if (error) {
+ LOG(("xosfile_save_stamped: 0x%x: %s",
+ error->errnum, error->errmess));
+ warn_user(error->errmess);
+ }
+ break;
+
+ case GUI_SAVE_OBJECT_NATIVE:
+ if (!c)
+ return;
+ ro_gui_save_object_native(c, path);
+ break;
+
+ case GUI_SAVE_LINK_URI:
+ if (!save_link)
+ return;
+ ro_gui_save_link(1, path);
+ break;
+
+ case GUI_SAVE_LINK_URL:
+ if (!save_link)
+ return;
+ ro_gui_save_link(2, path);
+ break;
+
+ case GUI_SAVE_LINK_TEXT:
+ if (!save_link)
+ return;
+ ro_gui_save_link(3, path);
+ break;
}
+ if (save_link) xfree(save_link);
+ save_content = NULL;
wimp_create_menu(wimp_CLOSE_MENU, 0, 0);
}
@@ -230,29 +275,9 @@ void ro_gui_save_complete(struct content *c, char *path)
warn_user("Failed to acquire dirname");
return;
}
-/* snprintf(spritename, sizeof spritename, "%s", appname+1);
- area = malloc(SPRITE_SIZE);
- if (!area) {
- LOG(("malloc failed"));
- warn_user("No memory for sprite");
- return;
- }
- area->size = SPRITE_SIZE;
- area->sprite_count = 0;
- area->first = 16;
- area->used = 16;
- error = xosspriteop_create_sprite(osspriteop_NAME, area,
- spritename, false,
- WIDTH / 2, HEIGHT / 2, os_MODE8BPP90X90);
- if (error) {
- LOG(("Failed to create sprite"));
- warn_user("Failed to create iconsprite");
- free(area);
- return;
- }
-*/
+
area = thumbnail_initialise(34, 34, os_MODE8BPP90X90);
- if (!area) {
+ if (!area) {
LOG(("Iconsprite initialisation failed."));
return;
}
@@ -297,3 +322,70 @@ void ro_gui_save_complete(struct content *c, char *path)
save_complete(c, path);
}
+
+void ro_gui_save_object_native(struct content *c, char *path)
+{
+ os_error *error;
+ osspriteop_area *temp;
+
+ switch (c->type) {
+ case CONTENT_JPEG:
+ error = xosspriteop_save_sprite_file(osspriteop_USER_AREA, c->data.jpeg.sprite_area, path);
+ break;
+ case CONTENT_PNG:
+ error = xosspriteop_save_sprite_file(osspriteop_USER_AREA, c->data.png.sprite_area, path);
+ break;
+ case CONTENT_GIF:
+ /* create sprite area */
+ temp = calloc(c->data.gif.gif->frame_image->size+16,
+ sizeof(char));
+ temp->size = c->data.gif.gif->frame_image->size+16;
+ temp->sprite_count = 1;
+ temp->first = 16;
+ temp->used = c->data.gif.gif->frame_image->size+16;
+ memcpy((char*)temp+16,
+ (char*)c->data.gif.gif->frame_image,
+ c->data.gif.gif->frame_image->size);
+ /* ensure extra words for name are null */
+ memset((char*)temp+24, 0, 8);
+ error = xosspriteop_save_sprite_file(osspriteop_USER_AREA, temp, path);
+ free(temp);
+ break;
+ default:
+ break;
+ }
+}
+
+void ro_gui_save_link(int format, char *path)
+{
+ FILE *fp = fopen(path, "w");
+
+ if (!fp) return;
+
+ switch (format) {
+ case 1: /* URI */
+ fprintf(fp, "%s\t%s\n", "URI", "100");
+ fprintf(fp, "\t# NetSurf %s\n\n", netsurf_version);
+ fprintf(fp, "\t%s\n", save_link);
+ fprintf(fp, "\t*\n");
+ break;
+ case 2: /* URL */
+ case 3: /* Text */
+ fprintf(fp, "%s\n", save_link);
+ break;
+ }
+
+ fclose(fp);
+
+ switch (format) {
+ case 1: /* URI */
+ xosfile_set_type(path, 0xf91);
+ break;
+ case 2: /* URL */
+ xosfile_set_type(path, 0xb28);
+ break;
+ case 3: /* Text */
+ xosfile_set_type(path, 0xfff);
+ break;
+ }
+}