⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Linux系统下采用Gtk 2图形库开发的代理搜索验证软件.采用Glib线程池,多线程并发搜索验证,支持国际化,具备中文英文两种语言.
💻 C
字号:
/*************************************************************************** *            main.c * *  Fri Aug 24 09:11:56 2007 *  Copyright  2007  hunbuso *  hunbuso@gmail.com ****************************************************************************/#ifdef HAVE_CONFIG_H#  include <config.h>#endif#include "main.h"#include "logger.h"#include "configrc.h"#include "gui.h"#include "libproxyfish.h"ProxyFishApp*			app = NULL;			///主程序static ProxyFishConf	cfg;typedef struct proxyfish_cfg_nument_t {    char const *ie_vname;    gint *ie_vloc;    gboolean ie_wrt;} proxyfish_cfg_nument;static proxyfish_cfg_nument proxyfish_numents[] = {	{"ck_port_to", &cfg.ck_port_to, TRUE},};static gint ncfgient = G_N_ELEMENTS(proxyfish_numents);/* 默认配置 */ProxyFishConf	proxyfish_default_config = {		6,			/* 检测端口超时 */};static void	proxyfish_usage (void){	fprintf(stderr, "/**********************************************************\n");	fprintf(stderr, " * %s %s \n * Copyright (C) 2007 ToFree organization, www.tofree.org.\n", PACKAGE, VERSION);	fprintf(stderr, " * Authors and E-mail: \n %s\n", AUTHORS);	fprintf(stderr, " * Welcome to our forum\n");	fprintf(stderr, " * http://www.tofree.org/Forum/index.php\n");	fprintf(stderr, " **********************************************************/\n");	return;}static void app_init(int argc, char *argv[]){	g_thread_init(NULL);		if(!g_thread_supported()) {        g_printerr(_("Sorry, threads isn't supported on your platform.\n\n"                     "If you're on a libc5 based linux system and installed Glib & GTK+ before you\n"                     "installed LinuxThreads you need to recompile Glib & GTK+.\n"));        exit(EXIT_FAILURE);	  	}		gdk_threads_init ();	#ifdef ENABLE_NLS	gchar*	zh_cn_path = g_build_filename(PACKAGE_SOURCE_DIR, "/po/zh_CN/LC_MESSAGES/proxyfish.mo", NULL);	gchar*	po_path = g_build_filename(PACKAGE_SOURCE_DIR, "/po", NULL);	if (g_file_test(zh_cn_path,				\			G_FILE_TEST_IS_REGULAR |G_FILE_TEST_EXISTS)) {		bindtextdomain (GETTEXT_PACKAGE, po_path);	}	else {		bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);	}	g_free(zh_cn_path);	g_free(po_path);	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");	textdomain (GETTEXT_PACKAGE);#endif		gtk_set_locale ();	gtk_init (&argc, &argv);		add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps");	add_pixmap_directory (PACKAGE_SOURCE_DIR "/pixmaps");		/**	初始化线程池 */	app->env.thread_pool = proxy_fish_thread_pool_init();	g_assert(app->env.thread_pool != NULL);		/** 创建主窗口 */	app->gui.window_main = create_window_main ();		/** 主窗口界面的初始化 */	window_main_init();		gtk_widget_show (app->gui.window_main);}void	app_exit (void){}static void make_directory(const gchar * path, mode_t mode){    if (mkdir(path, mode) == 0)        return;    if (errno == EEXIST)        return;    g_printerr(_("Could not create directory (%s): %s"), path,               g_strerror(errno));}static void app_make_user_dir (void){	const mode_t mode755 = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;	make_directory(app->env.rcpaths.proxyfish_user_dir, mode755);}static void app_free_path (void){	g_free(app->env.rcpaths.proxyfish_user_dir);	g_free(app->env.rcpaths.proxyfish_config_filename);	g_free(app->env.rcpaths.proxyfish_log_filename);}static void app_init_paths(void){		app->env.rcpaths.proxyfish_user_dir = g_build_filename(g_get_home_dir(), \												PROXYFISH_RCPATH, NULL);	app->env.rcpaths.proxyfish_config_filename = g_build_filename(app->env.rcpaths.proxyfish_user_dir, \														PROXYFISH_CONFIG_BASENAME, NULL);	app->env.rcpaths.proxyfish_log_filename = g_build_filename(app->env.rcpaths.proxyfish_user_dir, \												PROXYFISH_LOG_BASENAME, NULL);		g_atexit(app_free_path);}static voidproxyfish_setup_logger(void){    if (!proxyfish_logger_start(app->env.rcpaths.proxyfish_log_filename))        return;    g_atexit(proxyfish_logger_stop);}static voidsegfault_handler(gint sig){    g_printerr(_("\nReceived SIGSEGV\n\n"                 "This could be a bug in ProxyFish. If you don't know why this happened, "                 "send a mail to us at hunbuso@gmail.com\n\n"));		GtkWidget	*window_message_warning;		window_message_warning = gtk_message_dialog_new(GTK_WINDOW(app->gui.window_main), GTK_DIALOG_MODAL, 				GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, 				_("\nReceived SIGSEGV\n\n"                 "This could be a bug in ProxyFish. If you don't know why this happened, "                 "send a mail to us at hunbuso@gmail.com\n\n"));		GTK_WINDOW (window_message_warning)->type = GTK_WINDOW_POPUP;		gtk_dialog_run(GTK_DIALOG(window_message_warning));		gtk_widget_destroy (window_message_warning);	#ifdef HANDLE_SIGSEGV    exit(EXIT_FAILURE);#else    abort();#endif}voidproxyfish_config_load(void){    ConfigDb *db;    gint i;    memcpy(&app->conf, &proxyfish_default_config, sizeof(ProxyFishConf));		db = proxyfish_cfg_db_open();	    for (i = 0; i < ncfgient; ++i) {        proxyfish_cfg_db_get_int(db, NULL,                           proxyfish_numents[i].ie_vname,                           proxyfish_numents[i].ie_vloc);    }		proxyfish_cfg_db_close(db);}intmain (int argc, char *argv[]){	app = g_new0(ProxyFishApp, 1);		signal(SIGSEGV, segfault_handler);		///捕捉段错误信号	signal(SIGPIPE, SIG_IGN);				///忽略broken pipe信号		proxyfish_usage();		app_init_paths();		app_make_user_dir();		proxyfish_setup_logger();		proxyfish_config_load();		app_init(argc, argv);		g_atexit(app_exit);		gdk_threads_enter();	gtk_main ();	gdk_threads_leave();		return EXIT_SUCCESS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -