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 + -
显示快捷键?