/** * Main entry point from OS. */ int main(int argc, char** argv) { char *messages; char *options; /* check home directory is available */ nsgtk_check_homedir(); respaths = nsgtk_init_resource("${HOME}/.netsurf/:${NETSURFRES}:"GTK_RESPATH":./gtk/res"); gtk_init(&argc, &argv); /* set standard error to be non-buffering */ setbuf(stderr, NULL); options = filepath_find(respaths, "Choices"); messages = filepath_find(respaths, "Messages"); netsurf_init(&argc, &argv, options, messages); free(messages); free(options); gui_init(argc, argv, respaths); netsurf_main_loop(); /* Ensure all scaffoldings are destroyed before we go into exit */ while (scaf_list != NULL) nsgtk_scaffolding_destroy(scaf_list); netsurf_exit(); return 0; }
/** Entry point from OS. * * /param argc The number of arguments in the string vector. * /param argv The argument string vector. * /return The return code to the OS */ int main(int argc, char** argv) { struct browser_window *bw; char *options; char *messages; setbuf(stderr, NULL); respaths = fb_init_resource(NETSURF_FB_RESPATH":"NETSURF_FB_FONTPATH); options = filepath_find(respaths, "Choices"); messages = filepath_find(respaths, "messages"); netsurf_init(&argc, &argv, options, messages); free(messages); free(options); gui_init(argc, argv); LOG(("calling browser_window_create")); bw = browser_window_create(feurl, 0, 0, true, false); netsurf_main_loop(); browser_window_destroy(bw); netsurf_exit(); return 0; }
/* This is an ugly hack to just get the new-style throbber going. * It, along with the PNG throbber loader, need making more generic. */ static bool nsgtk_throbber_init(char **respath, int framec) { char **filenames; char targetname[PATH_MAX]; int frame_num; bool ret; filenames = calloc(framec, sizeof(char *)); if (filenames == NULL) return false; for (frame_num = 0; frame_num < framec; frame_num++) { snprintf(targetname, PATH_MAX, "throbber/throbber%d.png", frame_num); filenames[frame_num] = filepath_find(respath, targetname); } ret = nsgtk_throbber_initialise_from_png(frame_num, filenames); for (frame_num = 0; frame_num < framec; frame_num++) { free(filenames[frame_num]); } free(filenames); return ret; }
static char * nsgtk_new_ui(char **respath, const char *name, GtkBuilder **pglade) { GtkBuilder *builder; GError* error = NULL; char *filepath; char errorstr[NEW_GLADE_ERROR_SIZE]; char resname[PATH_MAX]; #if GTK_CHECK_VERSION(3,0,0) int gtkv = 3; #else int gtkv = 2; #endif snprintf(resname, PATH_MAX, "%s.gtk%d.ui", name, gtkv); filepath = filepath_find(respath, resname); if (filepath == NULL) { snprintf(errorstr, NEW_GLADE_ERROR_SIZE, "Unable to locate %s glade template file.\n", name); die(errorstr); } builder = gtk_builder_new(); if (!gtk_builder_add_from_file(builder, filepath, &error)) { g_warning ("Couldn't load builder file: %s", error->message); g_error_free (error); snprintf(errorstr, NEW_GLADE_ERROR_SIZE, "Unable to load glade %s window definitions.\n", name); die(errorstr); } gtk_builder_connect_signals(builder, NULL); LOG(("Using '%s' as %s ui template file", filepath, name)); if (pglade != NULL) { *pglade = builder; } return filepath; }
/** * Initialize GTK interface. */ static void gui_init(int argc, char** argv, char **respath) { char buf[PATH_MAX]; const char *addr = NETSURF_HOMEPAGE; char *resource_filename; /* check user options */ check_options(respath); /* find the languages file */ languages_file_location = filepath_find(respath, "languages"); if ((languages_file_location == NULL) || (strlen(languages_file_location) < 10)) { die("Unable to find resources.\n"); } /* Obtain resources path location. * * Uses the directory the languages file was found in, * @todo find and slaughter all references to this! */ res_dir_location = calloc(1, strlen(languages_file_location) - 8); memcpy(res_dir_location, languages_file_location, strlen(languages_file_location) - 9); LOG(("Using '%s' for resource path", res_dir_location)); /* initialise the glade templates */ nsgtk_init_glade(respath); /* set default icon if its available */ resource_filename = filepath_find(respath, "netsurf.xpm"); if (resource_filename != NULL) { gtk_window_set_default_icon_from_file(resource_filename, NULL); free(resource_filename); } /* Search engine sources */ search_engines_file_location = filepath_find(respath, "SearchEngines"); LOG(("Using '%s' as Search Engines file", search_engines_file_location)); /* Default Icon */ search_default_ico_location = filepath_find(respath, "default.ico"); LOG(("Using '%s' as default search ico", search_default_ico_location)); /* Default favicon */ resource_filename = filepath_find(respath, "favicon.png"); if (resource_filename != NULL) { favicon_pixbuf = gdk_pixbuf_new_from_file(resource_filename, NULL); free(resource_filename); if (favicon_pixbuf == NULL) { favicon_pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, false, 8, 16,16); } } /* Toolbar inicies file */ toolbar_indices_file_location = filepath_find(respath, "toolbarIndices"); LOG(("Using '%s' as custom toolbar settings file", toolbar_indices_file_location)); /* load throbber images */ if (nsgtk_throbber_init(respath, THROBBER_FRAMES) == false) die("Unable to load throbber image.\n"); /* Initialise completions - cannot fail */ nsgtk_completion_init(); filepath_sfinddef(respath, buf, "mime.types", "/etc/"); gtk_fetch_filetype_init(buf); urldb_load(nsoption_charp(url_file)); urldb_load_cookies(nsoption_charp(cookie_file)); /* The tree view system needs to know the screen's DPI, so we * find that out here, rather than when we create a first browser * window. */ nscss_screen_dpi = FLTTOFIX(gdk_screen_get_resolution( gdk_screen_get_default())); LOG(("Set CSS DPI to %f", FIXTOFLT(nscss_screen_dpi))); if (nsgtk_history_init(glade_file_location->history) == false) die("Unable to initialise history window.\n"); if (nsgtk_download_init(glade_file_location->downloads) == false) die("Unable to initialise download window.\n"); if (nsgtk_cookies_init(glade_file_location->cookies) == false) die("Unable to initialise cookies window.\n"); if (nsgtk_hotlist_init(glade_file_location->hotlist) == false) die("Unable to initialise hotlist window.\n"); sslcert_init(tree_content_icon_name); if (nsoption_charp(homepage_url) != NULL) { addr = nsoption_charp(homepage_url); } if (2 <= argc) addr = argv[1]; /* Last step of initialization. Opens the main browser window. */ browser_window_create(addr, 0, 0, true, false); }
/** Entry point from OS. * * /param argc The number of arguments in the string vector. * /param argv The argument string vector. * /return The return code to the OS */ int main(int argc, char** argv) { struct browser_window *bw; char *options; char *messages; nsurl *url; nserror ret; nsfb_t *nsfb; struct gui_table framebuffer_gui_table = { .browser = &framebuffer_browser_table, .window = &framebuffer_window_table, .clipboard = framebuffer_clipboard_table, .fetch = framebuffer_fetch_table, .utf8 = framebuffer_utf8_table, }; respaths = fb_init_resource(NETSURF_FB_RESPATH":"NETSURF_FB_FONTPATH); /* 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); /* common initialisation */ messages = filepath_find(respaths, "Messages"); ret = netsurf_init(messages, &framebuffer_gui_table); free(messages); 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); if (process_cmdline(argc,argv) != true) die("unable to process command line.\n"); 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 */ LOG(("calling browser_window_create")); 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 { netsurf_main_loop(); browser_window_destroy(bw); } netsurf_exit(); if (fb_font_finalise() == false) LOG(("Font finalisation failed.")); /* finalise options */ nsoption_finalise(nsoptions, nsoptions_default); return 0; }
/** * Initialize GTK interface. */ static nserror nsgtk_init(int argc, char** argv, char **respath) { char buf[PATH_MAX]; char *resource_filename; char *addr = NULL; nsurl *url; nserror error; error = nsgtk_builder_new_from_resname("warning", &warning_builder); if (error != NSERROR_OK) { LOG("Unable to initialise warning dialog"); return error; } gtk_builder_connect_signals(warning_builder, NULL); /* set default icon if its available */ error = nsgdk_pixbuf_new_from_resname("netsurf.xpm", &win_default_icon_pixbuf); if (error == NSERROR_OK) { LOG("Seting default window icon"); gtk_window_set_default_icon(win_default_icon_pixbuf); } /* Search engine sources */ resource_filename = filepath_find(respath, "SearchEngines"); search_web_init(resource_filename); if (resource_filename != NULL) { LOG("Using '%s' as Search Engines file", resource_filename); free(resource_filename); } /* Default favicon */ error = nsgdk_pixbuf_new_from_resname("favicon.png", &favicon_pixbuf); if (error != NSERROR_OK) { favicon_pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, false, 8, 16, 16); } /* arrow down icon */ error = nsgdk_pixbuf_new_from_resname("arrow_down_8x32.png", &arrow_down_pixbuf); if (error != NSERROR_OK) { arrow_down_pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, false, 8, 8, 32); } /* initialise throbber */ error = nsgtk_throbber_init(); if (error != NSERROR_OK) { LOG("Unable to initialise throbber."); return error; } /* Initialise completions - cannot fail */ nsgtk_completion_init(); filepath_sfinddef(respath, buf, "mime.types", "/etc/"); gtk_fetch_filetype_init(buf); save_complete_init(); urldb_load(nsoption_charp(url_file)); urldb_load_cookies(nsoption_charp(cookie_file)); /* The tree view system needs to know the screen's DPI, so we * find that out here, rather than when we create a first browser * window. */ browser_set_dpi(gdk_screen_get_resolution(gdk_screen_get_default())); LOG("Set CSS DPI to %d", browser_get_dpi()); /* Initialise top level UI elements */ error = nsgtk_download_init(); if (error != NSERROR_OK) { LOG("Unable to initialise download window."); return error; } /* If there is a url specified on the command line use it */ if (argc > 1) { struct stat fs; if (stat(argv[1], &fs) == 0) { size_t addrlen; char *rp = realpath(argv[1], NULL); assert(rp != NULL); /* calculate file url length including terminator */ addrlen = SLEN("file://") + strlen(rp) + 1; addr = malloc(addrlen); assert(addr != NULL); snprintf(addr, addrlen, "file://%s", rp); free(rp); } else { addr = strdup(argv[1]); } } if (addr != NULL) { /* managed to set up based on local launch */ } else if (nsoption_charp(homepage_url) != NULL) { addr = strdup(nsoption_charp(homepage_url)); } else { addr = strdup(NETSURF_HOMEPAGE); } /* create an initial browser window */ error = nsurl_create(addr, &url); if (error == NSERROR_OK) { error = browser_window_create(BW_CREATE_HISTORY, url, NULL, NULL, NULL); nsurl_unref(url); } free(addr); return error; }
/** * locate a resource * * The way GTK accesses resource files has changed greatly between * releases. This initilises the interface that hides all the * implementation details from the rest of the code. * * If the GResource is not enabled or the item cannot be found in the * compiled in resources the files will be loaded directly from disc * instead. * * \param respath A string vector containing the valid resource search paths * \param resource A resource entry to initialise */ static nserror init_resource(char **respath, struct nsgtk_resource_s *resource) { char *resname; #ifdef WITH_GRESOURCE int resnamelen; gboolean present; const gchar * const *langv; int langc = 0; langv = g_get_language_names(); while (langv[langc] != NULL) { resnamelen = snprintf(NULL, 0, "/org/netsurf/%s/%s", langv[langc], resource->name); resname = malloc(resnamelen + 1); if (resname == NULL) { return NSERROR_NOMEM; } snprintf(resname, resnamelen + 1, "/org/netsurf/%s/%s", langv[langc], resource->name); present = g_resources_get_info(resname, G_RESOURCE_LOOKUP_FLAGS_NONE, NULL, NULL, NULL); if (present == TRUE) { /* found an entry in the resources */ resource->path = resname; resource->type = NSGTK_RESOURCE_GLIB; LOG("Found gresource path %s", resource->path); return NSERROR_OK; } /*LOG("gresource \"%s\" not found", resname);*/ free(resname); langc++; } resnamelen = snprintf(NULL, 0, "/org/netsurf/%s", resource->name); resname = malloc(resnamelen + 1); if (resname == NULL) { return NSERROR_NOMEM; } snprintf(resname, resnamelen + 1, "/org/netsurf/%s", resource->name); present = g_resources_get_info(resname, G_RESOURCE_LOOKUP_FLAGS_NONE, NULL, NULL, NULL); if (present == TRUE) { /* found an entry in the resources */ resource->path = resname; resource->type = NSGTK_RESOURCE_GLIB; LOG("Found gresource path %s", resource->path); return NSERROR_OK; } /*LOG("gresource \"%s\" not found", resname);*/ free(resname); #endif resname = filepath_find(respath, resource->name); if (resname == NULL) { LOG("Unable to find resource %s on resource path", resource->name); return NSERROR_NOT_FOUND; } /* found an entry on the path */ resource->path = resname; resource->type = NSGTK_RESOURCE_FILE; LOG("Found file resource path %s", resource->path); return NSERROR_OK; }
/** * Entry point from operating system **/ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd) { char **argv = NULL; int argc = 0, argctemp = 0; size_t len; LPWSTR *argvw; char *messages; nserror ret; const char *addr; nsurl *url; nserror error; if (SLEN(lpcli) > 0) { argvw = CommandLineToArgvW(GetCommandLineW(), &argc); } setbuf(stderr, NULL); /* Construct a unix style argc/argv */ argv = malloc(sizeof(char *) * argc); while (argctemp < argc) { len = wcstombs(NULL, argvw[argctemp], 0) + 1; if (len > 0) { argv[argctemp] = malloc(len); } if (argv[argctemp] != NULL) { wcstombs(argv[argctemp], argvw[argctemp], len); /* alter windows-style forward slash flags to * hyphen flags. */ if (argv[argctemp][0] == '/') argv[argctemp][0] = '-'; } argctemp++; } respaths = nsws_init_resource("${APPDATA}\\NetSurf:${HOME}\\.netsurf:${NETSURFRES}:${PROGRAMFILES}\\NetSurf\\NetSurf\\:"NETSURF_WINDOWS_RESPATH); messages = filepath_find(respaths, "messages"); options_file_location = filepath_find(respaths, "preferences"); /* initialise netsurf */ netsurf_init(&argc, &argv, options_file_location, messages); free(messages); ret = nsws_create_main_class(hInstance); ret = nsws_create_drawable_class(hInstance); ret = nsws_create_localhistory_class(hInstance); nsoption_set_bool(target_blank, false); nsws_window_init_pointers(hInstance); /* If there is a url specified on the command line use it */ if (argc > 1) { addr = argv[1]; } else if (nsoption_charp(homepage_url) != NULL) { addr = nsoption_charp(homepage_url); } else { addr = NETSURF_HOMEPAGE; } LOG(("calling browser_window_create")); error = nsurl_create(addr, &url); if (error == NSERROR_OK) { error = browser_window_create(BROWSER_WINDOW_VERIFIABLE | BROWSER_WINDOW_HISTORY, url, NULL, NULL, NULL); nsurl_unref(url); } if (error != NSERROR_OK) { warn_user(messages_get_errorcode(error), 0); } else { netsurf_main_loop(); } netsurf_exit(); free(options_file_location); return 0; }
int main(int argc, char** argv) { struct browser_window *bw; char *options; char *messages; setbuf(stderr, NULL); freopen( "stderr.log", "w", stderr ); freopen( "stdout.log", "w", stdout ); char p[256]; char **z; z=0x20; strcpy(p, *z); __menuet__debug_out("PATH1...\n"); __menuet__debug_out(p); __menuet__debug_out("PATH1...\n"); *(strrchr(p, '/')+1)='\0'; strcpy(strrchr(p, '/')+1, "res/"); __menuet__debug_out("PATH1...\n"); __menuet__debug_out(p); __menuet__debug_out("PATH1...\n"); asm volatile ("int $0x40"::"a"(30), "b"(1), "c"(p)); LOG(("Registering surfaces for SDL and RAM..")); //extern nsfb_surface_rtns_t sdl_rtns; extern nsfb_surface_rtns_t ram_rtns; extern nsfb_surface_rtns_t able_rtns; extern nsfb_surface_rtns_t kolibri_rtns; //_nsfb_register_surface(NSFB_SURFACE_SDL, &sdl_rtns, "sdl"); _nsfb_register_surface(NSFB_SURFACE_RAM, &ram_rtns, "ram"); _nsfb_register_surface(NSFB_SURFACE_ABLE, &able_rtns, "able"); _nsfb_register_surface(NSFB_SURFACE_KOLIBRI, &kolibri_rtns, "kolibri"); //respaths = fb_init_resource("/kolibrios/:/hd0/1/res/:/bd0/1/res/:/tmp9/1/netsurf/res/:res/:fonts/:"); respaths = fb_init_resource(p); options = filepath_find(respaths, "Choices"); messages = filepath_find(respaths, "messages"); __menuet__debug_out("===path to msg\n"); __menuet__debug_out(messages); __menuet__debug_out("\n===path to msg\n"); //netsurf_init(&argc, &argv, options, "res/messages"); netsurf_init(&argc, &argv, options, messages); extern HTTP_INIT(); HTTP_INIT(); LOG(("NS init okay")); free(messages); free(options); LOG(("freed opts and msgs, start gui init")); gui_init(argc, argv); LOG(("calling browser_window_create in MAIN()")); bw = browser_window_create(feurl, 0, 0, true, false); LOG(("NS main loop...")); netsurf_main_loop(); browser_window_destroy(bw); netsurf_exit(); return 0; }