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

📄 zoom-opt.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* * $Id: zoom-opt.c,v 1.3 2003/01/06 08:20:29 adam Exp $ * * ZOOM layer for C, options handling */#include <assert.h>#include "zoom-p.h"#include <yaz/xmalloc.h>ZOOM_API(ZOOM_options)ZOOM_options_create_with_parent (ZOOM_options parent){    return ZOOM_options_create_with_parent2(parent, 0);}ZOOM_API(ZOOM_options)ZOOM_options_create (void){    return ZOOM_options_create_with_parent (0);}ZOOM_API(ZOOM_options)ZOOM_options_create_with_parent2 (ZOOM_options parent1, ZOOM_options parent2){    ZOOM_options opt = (ZOOM_options) xmalloc (sizeof(*opt));    opt->refcount = 1;    opt->callback_func = 0;    opt->callback_handle = 0;    opt->entries = 0;    opt->parent1= parent1;    if (parent1)	(parent1->refcount)++;    opt->parent2= parent2;    if (parent2)	(parent2->refcount)++;    return opt;}void ZOOM_options_addref (ZOOM_options opt){    (opt->refcount)++;}ZOOM_API(ZOOM_options_callback)ZOOM_options_set_callback (    ZOOM_options opt,    ZOOM_options_callback callback_func,    void *callback_handle){    ZOOM_options_callback callback_old;    assert (opt);    callback_old = opt->callback_func;    opt->callback_func = callback_func;    opt->callback_handle = callback_handle;    return callback_old;}ZOOM_API(void)ZOOM_options_destroy (ZOOM_options opt){    if (!opt)	return;    (opt->refcount)--;    if (opt->refcount == 0)    {	struct ZOOM_options_entry *e;		ZOOM_options_destroy (opt->parent1);	ZOOM_options_destroy (opt->parent2);	e = opt->entries;	while (e)	{	    struct ZOOM_options_entry *e0 = e;	    xfree (e->name);	    xfree (e->value);	    e = e->next;	    xfree (e0);	}	xfree (opt);    }}ZOOM_API(void)ZOOM_options_setl (ZOOM_options opt, const char *name, const char *value,                   int len){    struct ZOOM_options_entry **e;    e = &opt->entries;    while (*e)    {	if (!strcmp((*e)->name, name))	{	    xfree ((*e)->value);            (*e)->value = 0;            if (value)            {                (*e)->value = (char *) xmalloc (len+1);                memcpy ((*e)->value, value, len);                (*e)->value[len] = '\0';            }	    return;	}	e = &(*e)->next;    }    *e = (struct ZOOM_options_entry *) xmalloc (sizeof(**e));    (*e)->name = xstrdup (name);    (*e)->value = 0;    if (value)    {        (*e)->value = (char *) xmalloc (len+1);        memcpy ((*e)->value, value, len);        (*e)->value[len] = '\0';    }    (*e)->next = 0;}ZOOM_API(void)ZOOM_options_set (ZOOM_options opt, const char *name, const char *value){    ZOOM_options_setl (opt, name, value, value ? strlen(value): 0);}ZOOM_API(const char *)ZOOM_options_get (ZOOM_options opt, const char *name){    const char *v = 0;    if (!opt)	return 0;    if (opt->callback_func)	v = (*opt->callback_func)(opt->callback_handle, name);    if (!v)    {	struct ZOOM_options_entry *e;	for (e = opt->entries; e; e = e->next)	    if (!strcmp(e->name, name))	    {		v = e->value;		break;	    }    }    if (!v)	v = ZOOM_options_get(opt->parent1, name);    if (!v)	v = ZOOM_options_get(opt->parent2, name);    return v;}ZOOM_API(int)ZOOM_options_get_bool (ZOOM_options opt, const char *name, int defa){    const char *v = ZOOM_options_get (opt, name);    if (!v)	return defa;    if (!strcmp (v, "1") || !strcmp(v, "T"))	return 1;    return 0;}ZOOM_API(int)ZOOM_options_get_int (ZOOM_options opt, const char *name, int defa){    const char *v = ZOOM_options_get (opt, name);    if (!v || !*v)	return defa;    return atoi(v);}ZOOM_API(void)ZOOM_options_set_int(ZOOM_options opt, const char *name, int value){    char s[40];    sprintf (s, "%d", value);    ZOOM_options_set (opt, name, s);}

⌨️ 快捷键说明

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