/* inifile.h:
 *
 * vim:smartindent ts=8:sts=2:sta:et:ai:shiftwidth=2
 ****************************************************************
 * Copyright (C) 2005 Canonical Limited
 * 	Authors: Robert Collins <robert.collins@canonical.com>
 *
 * See the file "COPYING" for further information about
 * the copyright and warranty status of this work.
 */

#ifndef INCLUDE__LIBINIFILE__INIFILE_H
#define INCLUDE__LIBINIFILE__INIFILE_H

#include "libawk/relational.h"

typedef struct inifile_
{
  rel_table content;
} inifile_t;

typedef enum inifile_line_type_
{
    INIFILE_COMMENT,
    INIFILE_SECTION,
    INIFILE_KEY
} inifile_line_type_t;

extern void inifile_init  (inifile_t *inifile);
extern void inifile_finalise (inifile_t *inifile);
extern int inifile_load (inifile_t *inifile, t_uchar const *filename);
extern int inifile_save_merge (inifile_t *inifile, int merge_index, t_uchar const *filename);
extern int inifile_process_text (inifile_t *inifile, t_uchar const *content);
extern t_uchar *inifile_get_text (inifile_t *inifile);
extern t_uchar *inifile_get_text_merge (inifile_t *inifile, int merge_index);
extern rel_table inifile_get_section (inifile_t *inifile, t_uchar const *section);
extern rel_table inifile_get_key_values (inifile_t *inifile, t_uchar const *section, t_uchar const *key);
extern void inifile_add_key (inifile_t *inifile, t_uchar const *section, t_uchar const *key, t_uchar const * value, t_uchar const * comment);
extern void inifile_update_key (inifile_t *inifile, t_uchar const *section, t_uchar const *key, int index, t_uchar const * value, t_uchar const * comment);
extern void inifile_remove_key (inifile_t *inifile, t_uchar const *section, t_uchar const *key, int index);
extern t_uchar * inifile_get_single_string (inifile_t *inifile, t_uchar const * section, t_uchar const * key, t_uchar const * default_value);
extern void inifile_set_single_string (inifile_t *inifile, t_uchar const * section, t_uchar const * key, t_uchar const * value, t_uchar const * comment);
/* internals exposed solely for testing */
extern inifile_line_type_t inifile_line_type (t_uchar const *line);
extern t_uchar * inifile_section_name (t_uchar const *line);
extern t_uchar * inifile_key_name (t_uchar const *line);
extern t_uchar * inifile_value (t_uchar const *line);
extern t_uchar * inifile_comment (t_uchar const *line);

#endif /* INCLUDE__LIBINIFILE__INIFILE_H */


syntax highlighted by Code2HTML, v. 0.9.1