Annotation of sbbs/xpdev/ini_file.h, revision 1.1.1.1

1.1       root        1: /* ini_file.h */
                      2: 
                      3: /* Functions to parse ini files */
                      4: 
                      5: /* $Id: ini_file.h,v 1.27 2004/10/22 02:25:23 rswindell Exp $ */
                      6: 
                      7: /****************************************************************************
                      8:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
                      9:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
                     10:  *                                                                                                                                                     *
                     11:  * Copyright 2004 Rob Swindell - http://www.synchro.net/copyright.html         *
                     12:  *                                                                                                                                                     *
                     13:  * This library is free software; you can redistribute it and/or                       *
                     14:  * modify it under the terms of the GNU Lesser General Public License          *
                     15:  * as published by the Free Software Foundation; either version 2                      *
                     16:  * of the License, or (at your option) any later version.                                      *
                     17:  * See the GNU Lesser General Public License for more details: lgpl.txt or     *
                     18:  * http://www.fsf.org/copyleft/lesser.html                                                                     *
                     19:  *                                                                                                                                                     *
                     20:  * Anonymous FTP access to the most recent released source is available at     *
                     21:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
                     22:  *                                                                                                                                                     *
                     23:  * Anonymous CVS access to the development source and modification history     *
                     24:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
                     25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
                     26:  *     (just hit return, no password is necessary)                                                     *
                     27:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
                     28:  *                                                                                                                                                     *
                     29:  * For Synchronet coding style and modification guidelines, see                                *
                     30:  * http://www.synchro.net/source.html                                                                          *
                     31:  *                                                                                                                                                     *
                     32:  * You are encouraged to submit any modifications (preferably in Unix diff     *
                     33:  * format) via e-mail to [email protected]                                                                      *
                     34:  *                                                                                                                                                     *
                     35:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
                     36:  ****************************************************************************/
                     37: 
                     38: #ifndef _INI_FILE_H
                     39: #define _INI_FILE_H
                     40: 
                     41: #include "genwrap.h"
                     42: #include "str_list.h"  /* strList_t */
                     43: 
                     44: #define INI_MAX_VALUE_LEN      1024            /* Maximum value length, includes '\0' */
                     45: #define ROOT_SECTION           NULL
                     46: 
                     47: typedef struct {
                     48:        ulong           bit;
                     49:        const char*     name;
                     50: } ini_bitdesc_t;
                     51: 
                     52: typedef struct {
                     53:        int                     key_len;
                     54:        const char* key_prefix;
                     55:        const char* section_separator;
                     56:        const char* value_separator;
                     57:        const char*     bit_separator;
                     58: } ini_style_t;
                     59: 
                     60: #if defined(__cplusplus)
                     61: extern "C" {
                     62: #endif
                     63: 
                     64: /* Read all section names and return as an allocated string list */
                     65: /* Optionally (if prefix!=NULL), returns a subset of section names */
                     66: str_list_t     iniReadSectionList(FILE*, const char* prefix);
                     67: /* Read all key names and return as an allocated string list */
                     68: str_list_t     iniReadKeyList(FILE*, const char* section);
                     69: /* Read all key and value pairs and return as a named string list */
                     70: named_string_t**
                     71:                        iniReadNamedStringList  (FILE*, const char* section);
                     72: 
                     73: /* These functions read a single key of the specified type */
                     74: char*          iniReadString(FILE*, const char* section, const char* key
                     75:                                        ,const char* deflt, char* value);
                     76: str_list_t     iniReadStringList(FILE*, const char* section, const char* key
                     77:                                        ,const char* sep, const char* deflt);
                     78: long           iniReadInteger(FILE*, const char* section, const char* key
                     79:                                        ,long deflt);
                     80: ushort         iniReadShortInt(FILE*, const char* section, const char* key
                     81:                                        ,ushort deflt);
                     82: ulong          iniReadIpAddress(FILE*, const char* section, const char* key
                     83:                                        ,ulong deflt);
                     84: double         iniReadFloat(FILE*, const char* section, const char* key
                     85:                                        ,double deflt);
                     86: BOOL           iniReadBool(FILE*, const char* section, const char* key
                     87:                                        ,BOOL deflt);
                     88: ulong          iniReadBitField(FILE*, const char* section, const char* key
                     89:                                        ,ini_bitdesc_t* bitdesc, ulong deflt);
                     90: 
                     91: /* Free string list returned from iniRead*List functions */
                     92: void*          iniFreeStringList(str_list_t list);
                     93: 
                     94: /* Free named string list returned from iniReadNamedStringList */
                     95: void*          iniFreeNamedStringList(named_string_t** list);
                     96: 
                     97: 
                     98: /* File I/O Functions */
                     99: char*          iniFileName(char* dest, size_t maxlen, const char* dir, const char* fname);
                    100: FILE*          iniOpenFile(const char* fname);
                    101: str_list_t     iniReadFile(FILE*);
                    102: BOOL           iniWriteFile(FILE*, const str_list_t);
                    103: BOOL           iniCloseFile(FILE*);
                    104: 
                    105: /* StringList functions */
                    106: str_list_t     iniGetSectionList(str_list_t* list, const char* prefix);
                    107: str_list_t     iniGetKeyList(str_list_t* list, const char* section);
                    108: named_string_t**
                    109:                        iniGetNamedStringList(str_list_t* list, const char* section);
                    110: 
                    111: char*          iniGetString(str_list_t*, const char* section, const char* key
                    112:                                        ,const char* deflt, char* value);
                    113: str_list_t     iniGetStringList(str_list_t*, const char* section, const char* key
                    114:                                        ,const char* sep, const char* deflt);
                    115: long           iniGetInteger(str_list_t*, const char* section, const char* key
                    116:                                        ,long deflt);
                    117: ushort         iniGetShortInt(str_list_t*, const char* section, const char* key
                    118:                                        ,ushort deflt);
                    119: ulong          iniGetIpAddress(str_list_t*, const char* section, const char* key
                    120:                                        ,ulong deflt);
                    121: double         iniGetFloat(str_list_t*, const char* section, const char* key
                    122:                                        ,double deflt);
                    123: BOOL           iniGetBool(str_list_t*, const char* section, const char* key
                    124:                                        ,BOOL deflt);
                    125: ulong          iniGetBitField(str_list_t*, const char* section, const char* key
                    126:                                        ,ini_bitdesc_t* bitdesc, ulong deflt);
                    127: 
                    128: 
                    129: char*          iniSetString(str_list_t*, const char* section, const char* key, const char* value
                    130:                                        ,ini_style_t*);
                    131: char*          iniSetInteger(str_list_t*, const char* section, const char* key, long value
                    132:                                        ,ini_style_t*);
                    133: char*          iniSetShortInt(str_list_t*, const char* section, const char* key, ushort value
                    134:                                        ,ini_style_t*);
                    135: char*          iniSetHexInt(str_list_t*, const char* section, const char* key, ulong value
                    136:                                        ,ini_style_t*);
                    137: char*          iniSetFloat(str_list_t*, const char* section, const char* key, double value
                    138:                                        ,ini_style_t*);
                    139: char*          iniSetIpAddress(str_list_t*, const char* section, const char* key, ulong value
                    140:                                        ,ini_style_t*);
                    141: char*          iniSetBool(str_list_t*, const char* section, const char* key, BOOL value
                    142:                                        ,ini_style_t*);
                    143: char*          iniSetBitField(str_list_t*, const char* section, const char* key, ini_bitdesc_t*, ulong value
                    144:                                        ,ini_style_t*);
                    145: char*          iniSetStringList(str_list_t*, const char* section, const char* key
                    146:                                        ,const char* sep, str_list_t value, ini_style_t*);
                    147: 
                    148: size_t         iniAddSection(str_list_t*, const char* section
                    149:                                        ,ini_style_t*);
                    150: 
                    151: BOOL           iniSectionExists(str_list_t*, const char* section);
                    152: BOOL           iniKeyExists(str_list_t*, const char* section, const char* key);
                    153: BOOL           iniValueExists(str_list_t*, const char* section, const char* key);
                    154: BOOL           iniRemoveKey(str_list_t*, const char* section, const char* key);
                    155: BOOL           iniRemoveValue(str_list_t*, const char* section, const char* key);
                    156: BOOL           iniRemoveSection(str_list_t*, const char* section);
                    157: BOOL           iniRenameSection(str_list_t*, const char* section, const char* newname);
                    158: 
                    159: #if defined(__cplusplus)
                    160: }
                    161: #endif
                    162: 
                    163: #endif /* Don't add anything after this line */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.