00001 /*
00002 * dcfp - definition and configuration file parser
00003 * Copyright (c) 2002 Mark Smulders <Mark@PIRnet.nl>
00004 *
00005 * This program is free software; you can redistribute it and/or modify
00006 * it under the terms of the GNU General Public License as published by
00007 * the Free Software Foundation; either version 2, or (at your option)
00008 * any later version.
00009 *
00010 * This program is distributed in the hope that it will be useful,
00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00013 * GNU General Public License for more details.
00014 *
00015 * You should have received a copy of the GNU General Public License
00016 * along with this program; if not, write to the
00017 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00018 * Boston, MA 02111-1307, USA.
00019 */
00020
00021 #ifndef _DCFP_H
00022 #define _DCFP_H
00023
00024 #include <stdio.h>
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00030 /* DCFP data struct explanation
00031 *
00032 * data (dcfp_data_struct *)
00033 * |
00034 * |-- globalvars (dcfp_var_struct *)
00035 * | |-- type (string, either "str" or "int")
00036 * | |-- key (string)
00037 * | |-- value (void pointer; either string or int)
00038 * | |-- next (dcfp_var_struct *)
00039 * | |
00040 * | |-- type [ETCETERA]
00041 * |
00042 * |-- sections (dcfp_section_struct *)
00043 * |
00044 * |-- name (string)
00045 * |-- globalvars (dcfp_var_struct *)
00046 * | |-- type
00047 * | |-- key
00048 * | |-- value
00049 * | |-- next [ETCETERA]
00050 * |
00051 * |-- subsections (dcfp_section_struct *)
00052 * | |-- name
00053 * | |-- globalvars (dcfp_var_struct *)
00054 * | |-- subsections (dcfp_section_struct *)
00055 * | |-- next [ETCETERA]
00056 * |
00057 * |-- next (dcfp_section_struct *) [ETCETERA]
00058 *
00059 */
00060
00061 /* Example conf file
00062 * ---------------------------------
00063 *
00064 * globalvar = "string value"
00065 * global_integer_var = 1234
00066 *
00067 * [SOMESECTION]
00068 * sectionvar = " value"
00069 *
00070 * [ASUBSECTION]
00071 * subsectvar = "another value"
00072 * [END ASUBSECTION]
00073 *
00074 * another_sectionvar = 5678
00075 * [END SOMESECTION]
00076 *
00077 * yet_another_global = "var"
00078 *
00079 * ---------------------------------
00080 */
00081
00082 /* // *** Typical Use *** //
00083 *
00084 * #define FILENAME "test.conf"
00085 * int main (void) {
00086 * dcfp_data_struct *data = NULL;
00087 * data = dcfp_parse_file(FILENAME);
00088 * //-> do something with the data ;-)
00089 * dcfp_destroy_data_struct(data);
00090 * return 0;
00091 * }
00092 *
00093 */
00094
00095
00096 /* dcfp data structures - data from file goes into these, dynamically */
00097 typedef struct dcfp_var_stype {
00098 char type[4];
00099 char *key;
00100 void *value;
00101 struct dcfp_var_stype *next;
00102 } dcfp_var_struct;
00103
00104 typedef struct dcfp_section_stype {
00105 char *name;
00106 dcfp_var_struct *globalvars;
00107 struct dcfp_section_stype *sections;
00108 struct dcfp_section_stype *next;
00109 } dcfp_section_struct;
00110
00111 typedef struct dcfp_data_stype {
00112 dcfp_var_struct *globalvars;
00113 dcfp_section_struct *sections;
00114 } dcfp_data_struct;
00115
00116 /* public interface */
00117 const dcfp_data_struct *dcfp_parse_file(const char *filename);
00118 void dcfp_destroy_data_struct(dcfp_data_struct *data);
00119 int dcfp_global_section_exist(const dcfp_data_struct *data, const char *sectionname);
00120 const dcfp_section_struct *dcfp_get_global_section_by_name(const dcfp_data_struct *data, const char *name);
00121 const dcfp_section_struct *dcfp_get_subsection_by_name(const dcfp_section_struct *parentsection, const char *name);
00122 const void *dcfp_get_global_var(const dcfp_data_struct *data, const char *varname);
00123 const void *dcfp_get_var_from_section(const dcfp_section_struct *section, const char *varname);
00124
00125 #ifdef __cplusplus
00126 }
00127 #endif
00128
00129 #endif
1.2.14 written by Dimitri van Heesch,
© 1997-2002