uconfig.c
来自「网络爬虫程序」· C语言 代码 · 共 1,533 行 · 第 1/3 页
C
1,533 行
/***************************************************************************//* This code is part of WWW grabber called pavuk *//* Copyright (c) 1997 - 2001 Stefan Ondrejicka *//* Distributed under GPL 2 or later *//***************************************************************************/#include "config.h"#include "gui.h"#include <fcntl.h>#include <stdio.h>#include <string.h>#include <sys/stat.h>#include <time.h>#include <unistd.h>#ifdef I_FACE#include "authinfo.h"#include "cookie.h"#include "ftp.h"#include "html.h"#include "http.h"#include "jstrans.h"#include "lfname.h"#include "log.h"#include "net.h"#include "re.h"#include "times.h"#include "tools.h"#include "uconfig.h"#ifdef GTK_FACE/*****************************************************************************//* GTK GUI abstracion macros *//*****************************************************************************/#define SET_FTPHSLIST(w, l)\{\ dllist *ptr;\ gtk_clist_freeze(GTK_CLIST(w));\ gtk_clist_clear(GTK_CLIST(w));\ for (ptr = l; ptr; ptr = ptr->next)\ {\ char *pp[2];\ char pom[512];\ ftp_handshake_info *fhi = (ftp_handshake_info *) ptr->data;\ if (*fhi->host) sprintf(pom, "%s:%hu", fhi->host, fhi->port);\ else pom[0] = '\0';\ pp[0] = pom;\ pp[1] = ftp_handshake_info_data_dump(fhi);\ gtk_clist_append(GTK_CLIST(w), pp);\ _free(pp[1]);\ }\ gtk_clist_thaw(GTK_CLIST(w));\}#define SET_URLLIST(w, l)\{\ dllist *p = l;\ gtk_clist_freeze(GTK_CLIST(w));\ gtk_clist_clear(GTK_CLIST(w));\ while(p)\ {\ url_info *ui = (url_info *)p->data;\ int row;\ char *pp[2];\ pp[0] = ui->urlstr;\ pp[1] = ui->localname;\ row = gtk_clist_append(GTK_CLIST(w), pp);\ if (ui->type == URLI_FORM || ui->localname)\ {\ ui = url_info_duplicate(ui);\ gtk_clist_set_row_data_full(GTK_CLIST(w), row, ui,\ (GtkDestroyNotify)url_info_free);\ }\ p = p->next;\ }\ gtk_clist_thaw(GTK_CLIST(w));\}#define SET_PROXYLIST(w, l)\{\ dllist *p = l;\ char pm[1024];\ char *xp = pm;\ gtk_clist_freeze(GTK_CLIST(w));\ gtk_clist_clear(GTK_CLIST(w));\ while(p)\ {\ int row;\ http_proxy *pr = (http_proxy *)p->data;\ sprintf(pm, "%s:%hu", pr->addr, pr->port);\ row = gtk_clist_append(GTK_CLIST(w), &xp);\ http_proxy_ref(pr);\ gtk_clist_set_row_data_full(GTK_CLIST(w), row, pr,\ (GtkDestroyNotify) http_proxy_unref);\ p = p->next;\ }\ gtk_clist_thaw(GTK_CLIST(w));\}#define SET_LIST(w,l) \{\ char **p = l;\ gtk_clist_freeze(GTK_CLIST(w));\ gtk_clist_clear(GTK_CLIST(w));\ if (p) while(*p)\ {\ gtk_clist_append(GTK_CLIST(w), p);\ p++;\ }\ gtk_clist_thaw(GTK_CLIST(w));\}#define SET_DLLIST(w,l) \{\ dllist *p = l;\ gtk_clist_freeze(GTK_CLIST(w));\ gtk_clist_clear(GTK_CLIST(w));\ while(p)\ {\ gtk_clist_append(GTK_CLIST(w), (char **)&p->data);\ p = p->next;\ }\ gtk_clist_thaw(GTK_CLIST(w));\}#define SET_DOUBLE SET_NUM#define SET_NUM(w,v) \ gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), (gfloat)v);\ gtk_signal_emit_by_name(GTK_OBJECT(gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(w))), "value_changed");#define SET_TEXT(w,t) \ if (t) gtk_entry_set_text(GTK_ENTRY(w), t);\ else gtk_entry_set_text(GTK_ENTRY(w), "");#ifdef NO__CYGWIN__#define SET_PATH(w,t) \ if (t) \ { \ char *p = cvt_unix_to_win32_path(t); \ gtk_entry_set_text(GTK_ENTRY(w), p); \ _free(p); \ } \ else gtk_entry_set_text(GTK_ENTRY(w), "");#else#define SET_PATH SET_TEXT#endif#define SET_BOOL(w,v) \ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w), v);#define SET_HTML_TAGS \{\ GList *chlist;\ int *statpointer;\ \ for(chlist = GTK_BOX(gui_cfg.html_tags)->children ; chlist ; chlist = chlist->next)\ {\ statpointer = gtk_object_get_user_data(\ GTK_OBJECT(((struct _GtkBoxChild *)chlist->data)->widget));\ \ SET_BOOL(((struct _GtkBoxChild *)chlist->data)->widget ,\ !(*statpointer & LINK_DISABLED));\ }\}#define SET_COMBO_IDX(w, i) \ gtk_option_menu_set_history(GTK_OPTION_MENU(w), i);#define SET_ENUM(w, v) \ {\ GList *ch;\ int i;\ for (i = 0, ch = GTK_MENU_SHELL(GTK_OPTION_MENU(w)->menu)->children; ch; i++, ch = ch->next)\ if (v == (int)gtk_object_get_user_data(GTK_OBJECT(ch->data)))\ {\ gtk_option_menu_set_history(GTK_OPTION_MENU(w), i);\ break;\ }\ }#define SET_CALENDAR(w, ltime) \ gtk_calendar_select_month(GTK_CALENDAR(w), \ ltime->tm_mon, ltime->tm_year);\ gtk_calendar_select_day(GTK_CALENDAR(w), \ ltime->tm_mday);#define SET_C_EXTRAS \ SET_BOOL(gui_cfg.ftpmodegr[(int)cfg.ftp_activec], TRUE);#ifdef USE_SSL#define SET_SSL_VER \ if (gui_cfg.ssl_version[0]) SET_BOOL(gui_cfg.ssl_version[cfg.ssl_version - 1], TRUE);#else#define SET_SSL_VER#endif#ifdef HAVE_REGEX#define SET_JST(w, l) \ { \ dllist *ptr; \ gtk_clist_clear(GTK_CLIST(w));\ for (ptr = l; ptr; ptr = ptr->next) \ { \ char *pp[5]; \ js_transform_t *jt = (js_transform_t *) ptr->data; \ pp[0] = jt->re->pattern; \ pp[1] = jt->transform; \ pp[2] = jt->tag; \ pp[3] = jt->attrib; \ pp[4] = jt->type ? "X" : " "; \ gtk_clist_append(GTK_CLIST(w), pp); \ } \ }#else#define SET_JST(w, l)#endif#define SET_NUMLIST(w, l)\{ \ dllist *ptr; \ char *p = NULL; \ char pom[16]; \ for (ptr = l; ptr; ptr = ptr->next) \ { \ if (p) sprintf(pom, ",%d", (int)ptr->data); \ else sprintf(pom, "%d", (int)ptr->data); \ p = tl_str_concat(p, pom, NULL); \ } \ gtk_entry_set_text(GTK_ENTRY(w), p ? p : ""); \ _free(p); \}#define SET_PAT(w,l)\{\ char pom[4096];\ char **pp;\ pom[0] = '\0';\ for (pp = l ; pp && *pp ; pp++)\ {\ if (pp != l)\ {\ strcat(pom, ",");\ strcat(pom, *pp);\ }\ else strcpy(pom, *pp);\ }\ SET_TEXT(w, pom);\}#define SET_REPAT(w,l)\{\ dllist *ptr;\ char pom2[PATH_MAX];\ pom[0] = '\0';\ for (ptr = l ; ptr ; ptr = ptr->next)\ {\ char *p = escape_str(((re_entry *)ptr->data)->pattern, "\\\"");\ sprintf(pom2, "\"%s\" ", p);\ strcat(pom, pom2);\ _free(p);\ }\ SET_TEXT (w, pom);\}#define GETFTPHS_LIST(w,l) \{\ int n;\ for (; l; l = dllist_remove_entry(l,l))\ ftp_handshake_info_free((ftp_handshake_info *) l->data);\ l = NULL;\ for (n = 0; n < GTK_CLIST(w)->rows ; n++)\ {\ char *pp[2];\ ftp_handshake_info *fhi;\ gtk_clist_get_text(GTK_CLIST(w), n, 0, &pp[0]);\ gtk_clist_get_text(GTK_CLIST(w), n, 1, &pp[1]);\ fhi = ftp_handshake_info_parse(pp[0], pp[1]);\ if (fhi)\ l = dllist_append(l, (dllist_t) fhi);\ }\}#define GET_LIST(w,l) \{\ char **p=l;\ int n;\ \ while(l && *p) _free(*p);\ _free(l);\ l = NULL;\ for (n = 0 ; n < GTK_CLIST(w)->rows ; n++)\ {\ char *xp;\ l = (char **)_realloc(l, (n + 2) * sizeof(char *));\ gtk_clist_get_text(GTK_CLIST(w), n, 0, &xp);\ l[n] = tl_strdup(xp);\ l[n+1] = NULL;\ }\}#define GET_URLLIST(w,l) \{\ int n;\ \ while(l) {url_info_free((url_info *)l->data) ; l = dllist_remove_entry(l, l);}\ for (n = 0 ; n < GTK_CLIST(w)->rows ; n++)\ {\ char *xp;\ url_info *ui = (url_info *)gtk_clist_get_row_data(GTK_CLIST(w), n);\ gtk_clist_get_text(GTK_CLIST(w), n, 0, &xp);\ if (ui) ui = url_info_duplicate(ui);\ else ui = url_info_new(xp);\ l = dllist_append(l, (dllist_t) ui);\ }\}#define GET_PROXYLIST(w,ol) \{\ int n;\ dllist *l = NULL;\ \ cfg.last_used_proxy_node = NULL;\ for (n = 0 ; n < GTK_CLIST(w)->rows ; n++)\ {\ char *xp;\ http_proxy *pr;\ http_proxy *pro;\ gtk_clist_get_text(GTK_CLIST(w), n, 0, &xp);\ pro = (http_proxy *)gtk_clist_get_row_data(GTK_CLIST(w), n);\ pr = http_proxy_parse(xp);\ if (pro)\ {\ pr->penault = pro->penault;\ pr->fails = pro->fails;\ pr->is_10 = pro->is_10;\ }\ l = dllist_append(l, (dllist_t) pr);\ }\ LOCK_PROXY;\ while (ol) {http_proxy_free((http_proxy *)ol->data);\ ol = dllist_remove_entry(ol, ol);}\ ol = l;\ UNLOCK_PROXY;\}#define GET_DLLIST(w,l) \{\ int n;\ \ while(l) {if(l->data) free((void *)l->data); l = dllist_remove_entry(l, l);}\ for (n = 0 ; n < GTK_CLIST(w)->rows ; n++)\ {\ char *xp;\ gtk_clist_get_text(GTK_CLIST(w), n, 0, &xp);\ l = dllist_append(l, (dllist_t) tl_strdup(xp));\ }\}#define GET_BOOL(w,v) \ (v = GTK_TOGGLE_BUTTON(w)->active)#define GET_NUM(w,v) \ (v = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w)))#define GET_DOUBLE(w,v) \ (v = (double) gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(w)))#define GET_STR(w,s) \ _free(s);\ s = tl_strdup(gtk_entry_get_text (GTK_ENTRY(w)));\ if (!(s && *s))\ {\ _free(s);\ }#ifdef NO__CYGWIN__#define GET_PATH(w,s) \ _free(s);\ s = cvt_win32_to_unix_path(gtk_entry_get_text (GTK_ENTRY(w)));\ if (!(s && *s))\ {\ _free(s);\ }#else#define GET_PATH GET_STR#endif#define GET_S_STR(w,s) \ s = tl_strdup(gtk_entry_get_text (GTK_ENTRY(w)));\ if (!(s && *s))\ {\ _free(s);\ }#ifdef NO__CYGWIN__#define GET_S_PATH(w,s) \ s = cvt_win32_to_unix_path(gtk_entry_get_text (GTK_ENTRY(w)));\ if (!(s && *s))\ {\ _free(s);\ }#else#define GET_S_PATH GET_S_STR#endif#define GET_HTML_TAGS \{\ GList *chlist;\ int *statpointer;\ \ for(chlist = GTK_BOX(gui_cfg.html_tags)->children ; chlist ; chlist = chlist->next)\ {\ statpointer = gtk_object_get_user_data(\ GTK_OBJECT(((struct _GtkBoxChild *)chlist->data)->widget));\ \ if (GET_BOOL(((struct _GtkBoxChild *)chlist->data)->widget, b))\ *statpointer &= ~LINK_DISABLED;\ else\ *statpointer |= LINK_DISABLED;\ }\}#define GET_COMBO_IDX(w, i) \ i = GTK_OPTION_MENU(w)->menu_item ? \ (int) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(w)->menu_item)) : 0;#define GET_ENUM(w, v) \ v = (gint)(GTK_OPTION_MENU(w)->menu_item ? \ (gint) gtk_object_get_user_data(GTK_OBJECT(GTK_OPTION_MENU(w)->menu_item)) : 0);#define GET_DATE(w, ftm) \ gtk_calendar_get_date(GTK_CALENDAR(w) ,\ &ftm.tm_year, &ftm.tm_mon, &ftm.tm_mday);\ ftm.tm_year -= 1900;#define GET_C_EXTRAS \ GET_BOOL(gui_cfg.ftpmodegr[1], cfg.ftp_activec);#ifdef USE_SSL#define GET_SSL_VER \ if (gui_cfg.ssl_version[0])\ {\ if (GET_BOOL(gui_cfg.ssl_version[0], cfg.ssl_version))\ cfg.ssl_version = 1;\ else if (GET_BOOL(gui_cfg.ssl_version[1], cfg.ssl_version))\ cfg.ssl_version = 2;\ else if (GET_BOOL(gui_cfg.ssl_version[2], cfg.ssl_version))\ cfg.ssl_version = 3;\ else if (GET_BOOL(gui_cfg.ssl_version[3], cfg.ssl_version))\ cfg.ssl_version = 4;\ }#else#define GET_SSL_VER#endif#ifdef HAVE_REGEX#define GET_JST(w, l) \ { \ js_transform_t *jt; \ int i,j; \ char *pp[5]; \ while (l) {js_transform_free((js_transform_t *) l->data); \ l = dllist_remove_entry(l,l);} \ for (i = 0; i < GTK_CLIST(w)->rows; i++) \ { \ for (j = 0; j < 5; j++) \ gtk_clist_get_text(GTK_CLIST(w), i, j, &pp[j]); \ jt = js_transform_new(pp[0], pp[1], pp[2], pp[3], pp[4][0] == 'X'); \ if (jt) \ l = dllist_append(l, (dllist_t) jt); \ } \ }#else#define GET_JST(w, l)#endif#define GET_NUMLIST(w, l) \{ \ char *p; \ l = dllist_remove_entry(l, l); \ GET_S_STR(w, p); \ if (p) l = tl_numlist_split(p, ","); \ _free(p); \}#define GET_PAT(w,l)\{ \ char *p = NULL;\ int i;\ GET_STR(w, p);\ for(i = 0; l && l[i] ; i++)\ _free(l[i]);\ _free(l);\ l = tl_str_split(p, ",");\ _free(p);\}#define GET_REPAT(w,l)\{\ dllist *ptr;\ char *p;\ p = NULL;\ GET_STR(w, p);\
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?