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

📄 cqlutil.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* $Id: cqlutil.c,v 1.3 2003/03/03 19:57:35 adam Exp $   Copyright (C) 2002-2003   Index Data ApsThis file is part of the YAZ toolkit.See the file LICENSE.*/#include <stdlib.h>#include <string.h>#include <yaz/cql.h>void cql_fputs(const char *buf, void *client_data){    FILE *f = (FILE *) client_data;    fputs(buf, f);}struct cql_node *cql_node_dup (struct cql_node *cp){    struct cql_node *cn = 0;    if (!cp)        return 0;    switch (cp->which)    {    case CQL_NODE_ST:        cn = cql_node_mk_sc(cp->u.st.index,                            cp->u.st.relation,                            cp->u.st.term);        cn->u.st.modifiers = cql_node_dup(cp->u.st.modifiers);        cn->u.st.prefixes = cql_node_dup(cp->u.st.prefixes);        break;    case CQL_NODE_MOD:        cn = cql_node_mk_mod(cp->u.mod.name,                             cp->u.mod.value);        cn->u.mod.next = cql_node_dup(cp->u.mod.next);        break;    case CQL_NODE_BOOL:        cn = cql_node_mk_boolean(cp->u.boolean.value);        cn->u.boolean.left = cql_node_dup(cp->u.boolean.left);        cn->u.boolean.right = cql_node_dup(cp->u.boolean.right);        cn->u.boolean.prefixes = cql_node_dup(cp->u.boolean.prefixes);    }    return cn;}struct cql_node *cql_node_mk_sc(const char *index,                                const char *relation,                                const char *term){    struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));    p->which = CQL_NODE_ST;    p->u.st.index = 0;    if (index)        p->u.st.index = strdup(index);    p->u.st.term = 0;    if (term)        p->u.st.term = strdup(term);    p->u.st.relation = 0;    if (relation)        p->u.st.relation = strdup(relation);    p->u.st.modifiers = 0;    p->u.st.prefixes = 0;    return p;}struct cql_node *cql_node_mk_mod(const char *name,                                 const char *value){    struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));    p->which = CQL_NODE_MOD;    p->u.mod.name = 0;    if (name)        p->u.mod.name = strdup(name);    p->u.mod.value = 0;    if (value)        p->u.mod.value = strdup(value);    p->u.mod.next = 0;    return p;}struct cql_node *cql_node_mk_boolean(const char *op){    struct cql_node *p = (struct cql_node *) malloc(sizeof(*p));    p->which = CQL_NODE_BOOL;    p->u.boolean.value = 0;    if (op)        p->u.boolean.value = strdup(op);    p->u.boolean.left = 0;    p->u.boolean.right = 0;    p->u.boolean.modifiers = 0;    p->u.boolean.prefixes = 0;    return p;}struct cql_node *cql_node_prefix(struct cql_node *n, const char *prefix,                                 const char *uri){    struct cql_node **cpp = 0;    if (n->which == CQL_NODE_ST)    {        cpp = &n->u.st.prefixes;    }    else if (n->which == CQL_NODE_BOOL)    {        cpp = &n->u.boolean.prefixes;    }    if (cpp)    {        struct cql_node *cp = cql_node_mk_mod(prefix, uri);        cp->u.mod.next = *cpp;        *cpp = cp;    }    return n;}struct cql_node *cql_node_mk_proxargs(const char *relation,                                      const char *distance,                                      const char *unit,                                      const char *ordering){    struct cql_node *m = 0, *m1;    if (ordering && *ordering)        m = cql_node_mk_mod("ordering", ordering);    if (unit && *unit)    {        m1 = cql_node_mk_mod("unit", unit);        m1->u.mod.next = m;        m = m1;    }    if (distance && *distance)    {        m1 = cql_node_mk_mod("distance", distance);        m1->u.mod.next = m;        m = m1;    }    if (relation && *relation)    {        m1 = cql_node_mk_mod("relation", relation);        m1->u.mod.next = m;        m = m1;    }    return m;}void cql_node_destroy(struct cql_node *cn){    if (!cn)        return;    switch (cn->which)    {    case CQL_NODE_ST:        free (cn->u.st.index);        free (cn->u.st.relation);        free (cn->u.st.term);        cql_node_destroy(cn->u.st.modifiers);        cql_node_destroy(cn->u.st.prefixes);        break;    case CQL_NODE_MOD:        free (cn->u.mod.name);        free (cn->u.mod.value);        cql_node_destroy(cn->u.mod.next);        break;    case CQL_NODE_BOOL:        free (cn->u.boolean.value);        cql_node_destroy(cn->u.boolean.left);        cql_node_destroy(cn->u.boolean.right);        cql_node_destroy(cn->u.boolean.prefixes);    }    free (cn);}

⌨️ 快捷键说明

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