summaryrefslogtreecommitdiff
path: root/frontends/kolibrios/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/kolibrios/main.c')
-rw-r--r--frontends/kolibrios/main.c314
1 files changed, 314 insertions, 0 deletions
diff --git a/frontends/kolibrios/main.c b/frontends/kolibrios/main.c
new file mode 100644
index 000000000..818e5b025
--- /dev/null
+++ b/frontends/kolibrios/main.c
@@ -0,0 +1,314 @@
+#include <stdbool.h>
+#include <sys/types.h>
+
+#include "kolibrios/kolibri_debug.h"
+#include "kolibrios/kolibri_gui.h"
+
+#include "utils/errors.h"
+
+#include "utils/messages.h"
+#include "utils/filepath.h"
+#include "utils/nsoption.h"
+#include "utils/nsurl.h"
+
+#include "netsurf/window.h"
+#include "netsurf/misc.h"
+#include "netsurf/netsurf.h"
+#include "netsurf/bitmap.h"
+#include "netsurf/plot_style.h"
+
+#include "utils/file.h"
+#include "netsurf/utf8.h"
+#include "netsurf/search.h"
+#include "content/backing_store.h"
+
+#include "kolibrios/kolibri_http.h"
+#include <libnsfb.h>
+#include <libnsfb_plot.h>
+#include <libnsfb_event.h>
+
+#include "utils/utils.h"
+#include "utils/nsoption.h"
+#include "utils/filepath.h"
+#include "utils/log.h"
+#include "utils/messages.h"
+#include "desktop/textinput.h"
+#include "desktop/browser_history.h"
+
+#include "kolibrios/fb/gui.h"
+#include "kolibrios/fb/fbtk.h"
+#include "kolibrios/fb/framebuffer.h"
+#include "kolibrios/fb/schedule.h"
+#include "kolibrios/fb/findfile.h"
+#include "kolibrios/fb/image_data.h"
+#include "kolibrios/fb/font.h"
+#include "kolibrios/fb/clipboard.h"
+#include "kolibrios/fb/fetch.h"
+#include "kolibrios/fb/bitmap.h"
+
+/**************************************************
+Make life easier with these path specifiers here.
+***************************************************/
+/* #define KOLIBRI_FONTFILE "/usbhd0/1/kolibrios/res/sans.ttf" */
+/* #define KOLIBRI_RESPATH "/usbhd0/1/kolibrios/res/" */
+/* #define FILE_KOLIBRI_RESPATH "file:///usbhd0/1/kolibrios/res/" */
+/************************************************/
+
+char **respaths; /** resource search path vector */
+
+extern struct gui_browser_table framebuffer_browser_table;
+extern struct gui_window_table framebuffer_window_table ;
+extern struct gui_clipboard_table *framebuffer_clipboard_table ;
+extern struct gui_fetch_table *framebuffer_fetch_table ;
+extern struct gui_utf8_table *framebuffer_utf8_table ;
+extern struct gui_bitmap_table *framebuffer_bitmap_table ;
+
+extern const char *fename;
+extern int febpp;
+extern int fewidth;
+extern int feheight;
+extern const char *feurl;
+extern bool nslog_stream_configure(FILE *fptr);
+extern struct fbtk_bitmap pointer_image;
+extern fbtk_widget_t *fbtk;
+
+static void die(const char *error)
+{
+ debug_board_write_str(error);
+ debug_board_write_str('\n');
+ exit(1);
+}
+
+/* Inspired from monkey, but without the GTK bloat */
+static char **nskolibri_init_resource(const char *resource_path)
+{
+ char **langv = {"de", "en_US", "en", "C"};
+ char **pathv; /* resource path string vector */
+ char **respath; /* resource paths vector */
+
+ pathv = filepath_path_to_strvec(resource_path);
+ respath = filepath_generate(pathv, langv);
+ filepath_free_strvec(pathv);
+
+ return respath;
+}
+
+static nserror set_defaults(struct nsoption_s *defaults)
+{
+ /* Set defaults for absent option strings */
+ nsoption_setnull_charp(cookie_file, *respaths);
+ nsoption_setnull_charp(cookie_jar, *respaths);
+ //TODO: This creates an nsoptions error in macro expansion...
+
+ return NSERROR_OK;
+}
+
+/**
+ * Main entry point from Kolibri OS.
+ */
+extern struct http_msg;
+
+static struct gui_misc_table framebuffer_misc_table = {
+ .schedule = framebuffer_schedule,
+ .warning = fb_warn_user,
+
+ .quit = gui_quit,
+};
+
+int
+main(int argc, char** argv)
+{
+ struct browser_window *bw;
+ char *options;
+ char *messages;
+ nsurl *url;
+ nserror ret;
+ nsfb_t *nsfb;
+
+ struct netsurf_table kolibrios_table = {
+ .misc = &kolibrios_misc_table,
+ .window = &kolibrios_window_table,
+ .clipboard = kolibrios_clipboard_table,
+ .fetch = kolibrios_fetch_table,
+ .utf8 = kolibrios_utf8_table,
+ .bitmap = kolibrios_bitmap_table,
+ .layout = kolibrios_layout_table,
+ };
+
+ /* Initialize HTTP Library */
+ ret = kolibri_http_init();
+ if (ret == 0)
+ debug_board_write_str("Netsurf: KolibriOS HTTP Library Initialized.\n");
+ else {
+ debug_board_write_str("Netsurf: HTTP Library initialization failed..\n");
+ return ret;
+ }
+
+ /* Initialize BoxLib Library for GUI textboxes, etc */
+ ret = kolibri_gui_init();
+ if (ret == 0)
+ debug_board_write_str("Netsurf: KolibriOS BOXLIB Library Initialized.\n");
+ else {
+ debug_board_write_str("Netsurf: BOXLIB Library initialization failed..\n");
+ return ret;
+ }
+
+ /* End of KolibriOS specific libraries initialization phase */
+ debug_board_write_str("Netsurf: Trying to register nskolibri_table.\n");
+
+ ret = netsurf_register(&kolibrios_table);
+ if (ret != NSERROR_OK) {
+ die("NetSurf operation table failed registration");
+ }
+
+ /* Drop the last slash if caller provided it. */
+
+ char current_dir[100];
+ int i = 0;
+
+ for(i = strlen(argv[0]); i>=0; i--)
+ {
+ if(argv[0][i]=='/') {
+ strncpy(current_dir, argv[0], i+1);
+ i++;
+ current_dir[i++] = 'r';
+ current_dir[i++] = 'e';
+ current_dir[i++] = 's';
+ current_dir[i++] = '\0';
+ break;
+ }
+ }
+
+
+ respaths = (char **) malloc(sizeof(char **));
+ *respaths = malloc(i);
+ strcpy(*respaths, current_dir);
+
+ debug_board_write_str("\nCWD: ");
+ debug_board_write_str(*respaths);
+ debug_board_write_str("\n");
+
+ /* __asm__ __volatile__("int3"); */
+
+ /* initialise logging. Not fatal if it fails but not much we
+ * can do about it either.
+ */
+ nslog_init(nslog_stream_configure, &argc, argv);
+
+ /* user options setup */
+ ret = nsoption_init(set_defaults, &nsoptions, &nsoptions_default);
+ if (ret != NSERROR_OK) {
+ die("Options failed to initialise");
+ }
+ options = filepath_find(respaths, "Choices");
+ nsoption_read(options, nsoptions);
+ free(options);
+ nsoption_commandline(&argc, argv, nsoptions);
+
+ /* message init */
+ messages = filepath_find(respaths, "Messages");
+ ret = messages_add_from_file(messages);
+ free(messages);
+ if (ret != NSERROR_OK) {
+ debug_board_write_str("Message translations failed to load\n");
+ }
+
+ /* common initialisation */
+ ret = netsurf_init(NULL);
+ if (ret != NSERROR_OK) {
+ die("NetSurf failed to initialise");
+ }
+
+ /* Override, since we have no support for non-core SELECT menu */
+ nsoption_set_bool(core_select_menu, true);
+ /* Do we really need to parse command line in KolibriOS?
+ Most users will use the GUI to trigger NS .
+ TODO: Look at this later.
+ */
+
+ /* if (process_cmdline(argc,argv) != true) */
+ /* die("unable to process command line.\n"); */
+
+ /* Move the initialization stuff from process_cmdline() to here */
+ /* fename = "sdl"; */
+
+ extern nsfb_surface_rtns_t kolibri_rtns;
+ _nsfb_register_surface(NSFB_SURFACE_KOLIBRI, &kolibri_rtns, "kolibri");
+
+ extern nsfb_surface_rtns_t ram_rtns;
+ _nsfb_register_surface(NSFB_SURFACE_RAM, &ram_rtns, "ram");
+
+ /* fewidth = nsoption_int(window_width); */
+ /* if (fewidth <= 0) { */
+ /* fewidth = 800; */
+ /* } */
+
+ /* feheight = nsoption_int(window_height); */
+ /* if (feheight <= 0) { */
+ /* feheight = 600; */
+ /* } */
+
+ fename = "kolibri";
+ febpp = 32;
+ fewidth = 800;
+ feheight = 600;
+
+ // feurl = "board.kolibrios.org/ucp.php?i=pm&mode=compose";
+ feurl = "ashmew2.me";
+ /* feurl = "kolibrios.org"; */
+ /* feurl = "file://usbhd0/1/kolibrios/res/welcome.html"; */
+ nsfb = framebuffer_initialise(fename, fewidth, feheight, febpp);
+ if (nsfb == NULL)
+ die("Unable to initialise framebuffer");
+
+ framebuffer_set_cursor(&pointer_image);
+
+ if (fb_font_init() == false)
+ die("Unable to initialise the font system");
+
+ fbtk = fbtk_init(nsfb);
+
+ fbtk_enable_oskb(fbtk);
+
+ urldb_load_cookies(nsoption_charp(cookie_file));
+
+ /* create an initial browser window */
+
+ debug_board_write_str("calling browser_window_create\n");
+
+ ret = nsurl_create(feurl, &url);
+ if (ret == NSERROR_OK) {
+ ret = browser_window_create(BW_CREATE_HISTORY,
+ url,
+ NULL,
+ NULL,
+ &bw);
+ nsurl_unref(url);
+ }
+
+ if (ret != NSERROR_OK) {
+ warn_user(messages_get_errorcode(ret), 0);
+ } else {
+ debug_board_write_str("calling framebuffer run\n");
+
+ framebuffer_run();
+
+ debug_board_write_str("framebuffer run returned. \n");
+
+ debug_board_write_str("Killing browser window.\n");
+ browser_window_destroy(bw);
+ }
+
+ debug_board_write_str("Calling netsurf_exit()\n");
+ netsurf_exit();
+
+ if (fb_font_finalise() == false)
+ LOG("Font finalisation failed.");
+
+ /* finalise options */
+ nsoption_finalise(nsoptions, nsoptions_default);
+
+ free(*respaths);
+ free(respaths);
+ return 0;
+}