OSSP CVS Repository

ossp - ossp-pkg/cfg/cfg.h 1.2
Not logged in
[Honeypot]  [Browse]  [Directory]  [Home]  [Login
[Reports]  [Search]  [Ticket]  [Timeline
  [Raw

ossp-pkg/cfg/cfg.h 1.2
/*
**  OSSP cfg - Configuration Parsing
**  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
**  Copyright (c) 1999-2002 The OSSP Project (http://www.ossp.org/)
**  Copyright (c) 2001-2002 Cable & Wireless Deutschland (http://www.cw.com/de/)
**
**  This file is part of OSSP cfg, a configuration parsing
**  library which can be found at http://www.ossp.org/pkg/lib/cfg/.
**
**  Permission to use, copy, modify, and distribute this software for
**  any purpose with or without fee is hereby granted, provided that
**  the above copyright notice and this permission notice appear in all
**  copies.
**
**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRCFG, STRICT LIABILITY,
**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
**  SUCH DAMAGE.
**
**  cfg.h: master API
*/

#ifndef __CFG_H__
#define __CFG_H__

#include <stdarg.h>

/* ============================================================ */

/* general return codes */
typedef enum {
    CFG_OK = 0,
    CFG_ERR_ARG,
    CFG_ERR_USE,
    CFG_ERR_INT,
    CFG_ERR_SYS,
    CFG_ERR_SYN
} cfg_rc_t;

/* ============================================================ */

/* configuration handle */
struct cfg_st;
typedef struct cfg_st cfg_t;

/* configuration API */
cfg_rc_t   cfg_create      (cfg_t **cfg);
cfg_rc_t   cfg_destroy     (cfg_t  *cfg);

/* ============================================================ */

/* list of node types */
typedef enum {
    CFG_NODE_TYPE_NN = 0,     /* node unknown */
    CFG_NODE_TYPE_SEQ,        /* node represents a sequence */
    CFG_NODE_TYPE_DIR,        /* node represents a directive */
    CFG_NODE_TYPE_TOK         /* node represents a token */
} cfg_node_type_t;

/* list of node attributes */
typedef enum {
    CFG_NODE_ATTR_TYPE,       /* type of node */
    CFG_NODE_ATTR_PARENT,     /* pointer to parent node */
    CFG_NODE_ATTR_RBROTH,     /* pointer to right brother node */
    CFG_NODE_ATTR_CHILD1,     /* pointer to first child node */
    CFG_NODE_ATTR_TOKEN,      /* pointer to the node token string */
    CFG_NODE_ATTR_DATA        /* pointer to the node annotation data */
} cfg_node_attr_t;

/* list of node linking variants */
typedef enum {
    CFG_NODE_LINK_PARENT,
    CFG_NODE_LINK_RBROTH,
    CFG_NODE_LINK_CHILD1
} cfg_node_link_t;

/* configuration node type */
struct cfg_node_st;
typedef struct cfg_node_st cfg_node_t;

cfg_rc_t   cfg_node_create  (cfg_node_t **node);
cfg_rc_t   cfg_node_set     (cfg_node_t  *node, cfg_node_attr_t attr, ...);
cfg_rc_t   cfg_node_get     (cfg_node_t  *node, cfg_node_attr_t attr, ...);
cfg_rc_t   cfg_node_link    (cfg_node_t  *node, cfg_node_link_t id, cfg_node_t *node2);
cfg_rc_t   cfg_node_unlink  (cfg_node_t  *node);
cfg_rc_t   cfg_node_apply   (cfg_node_t  *node, void (*cb_fct)(void *, cfg_node_t *), void *cb_ctx);
cfg_rc_t   cfg_node_destroy (cfg_node_t  *node);

/* ============================================================ */

#endif /* __CFG_H__ */


CVSTrac 2.0.1