C:\home\SVGCats_src\src\inifile.h
1|/*********************************************************************** 2|* 1. <<< 初期化ファイル (IniFile) >>> 3|************************************************************************/ 4| 5|#ifndef __INIFILE_H 6|#define __INIFILE_H 7| 8|#ifndef USES_PRIORITY_HEADER 9|/*[START_OF_PRIORITY_HEADER]*/ 10| 11|#ifndef USES_INIFILE 12|#define USES_INIFILE 13| 14|#define STDLIBS_INCLUDE 15|#define STDLIBS_INCLUDE_STDIO_H 16|#define STDLIBS_INCLUDE_STDLIB_H 17|#define STDLIBS_INCLUDE_STRING_H 18|#define STDLIBS_INCLUDE_STDARG_H 19| 20|#endif 21| 22|/*[END_OF_PRIORITY_HEADER]*/ 23|#endif /* USES_PRIORITY_HEADER */ 24| 25|typedef struct _IniFile_Read IniFile_Read; 26|typedef struct _IniFile_Write IniFile_Write; 27| 28|#define IniFile_NotFoundSection (591) /* [Compone_GID:Errors_Code] */ 29|#define IniFile_Err_FewBuf (592) /* [Compone_GID:Errors_Code] */ 30|#define IniFile_Err_BadFormat (593) /* [Compone_GID:Errors_Code] */ 31|#define IniFile_Err_FewData (594) /* [Compone_GID:Errors_Code] */ 32|#define IniFile_Err_FewAttr (595) /* [Compone_GID:Errors_Code] */ 33|#define IniFile_Err_BadAttr (596) /* [Compone_GID:Errors_Code] */ 34|#define IniFile_Err_OtherApp (597) /* [Compone_GID:Errors_Code] */ 35|#define IniFile_Err_OtherVer (598) /* [Compone_GID:Errors_Code] */ 36| 37| 38|#ifdef __cplusplus 39|extern "C" { 40|#endif 41| 42| 43| 44|/*---------------------------------------------------------------------*/ 45|/* 2. <<< Interface Area --------------------------------------------->>> */ 46|/*---------------------------------------------------------------------*/ 47| 48| 49| 50|/*********************************************************************** 51|* 3. <<< [IniFile_Write] 初期化ファイル・書き込みツール >>> 52|*【補足】 53|*・この補足ファイルは、Windows の ini ファイルと完全互換です。 54|*・構造化エディタ(フリーソフト)に対応しています。 55|************************************************************************/ 56|struct _IniFile_Write { 57| FILE* file; 58| bool firstSection; 59|}; 60|void IniFile_Write_init( IniFile_Write*, const char* fname ); 61|void IniFile_Write_finish( IniFile_Write* ); 62| 63|void IniFile_Write_putSection( IniFile_Write*, const char* section ); 64|void IniFile_Write_putVar( IniFile_Write*, const char* attr_name, 65| const char* types, ... ); 66|void IniFile_Write_putLabel( IniFile_Write*, const char* label ); 67|void IniFile_Write_putMultiLine( IniFile_Write*, const char* attr_name, 68| const char* retStr, const char* s ); 69| 70|void IniFile_Write_putTypeInfo( IniFile_Write*, const char* appName, 71| int verNum ); 72| 73|#ifdef USES_STRV 74| void IniFile_Write_putMultiStrV( IniFile_Write*, const char* attr_name, 75| StrV_Set* strs ); 76| void IniFile_Write_putMultiStrVM( IniFile_Write*, const char* attr_name, 77| StrV_Mem* strs ); 78| void IniFile_Write_putMultiStrAV( IniFile_Write*, const char* attr_name, 79| ArrX_Able* strs ); 80|#endif 81| 82|void IniFile_Write_putPathes( IniFile_Write*, const char* section_name, 83| char** pathes, int nPath ); 84| 85| 86| 87|/*********************************************************************** 88|* 4. <<< [IniFile_Read] 初期化ファイル・読み込みツール >>> 89|************************************************************************/ 90|struct _IniFile_Read { 91| FILE* file; 92| char* lineBuf; 93| int lineBuf_sizeof; 94| int string_sizeof; 95| char path[_MAX_PATH]; 96|}; 97|void IniFile_Read_init( IniFile_Read*, const char* fname, 98| char* lineBuf, int lineBuf_sizeof ); 99|void IniFile_Read_finish( IniFile_Read* ); 100| 101|void IniFile_Read_reset( IniFile_Read* ); 102|void IniFile_Read_setStringSize( IniFile_Read*, int size ); 103|void IniFile_Read_setSection( IniFile_Read*, const char* section ); 104|long IniFile_Read_searchSection( IniFile_Read*, const char* section, 105| bool upward ); 106|void IniFile_Read_searchSection2( IniFile_Read*, const char* section, 107| const char* attr, const char* type, ... ); 108| 109|int IniFile_Read_getCount( IniFile_Read*, const char* attr_name ); 110|long IniFile_Read_getVar( IniFile_Read*, const char* attr_name, 111| const char* types, ... ); 112|int IniFile_Read_getNextCount( IniFile_Read* ); 113|long IniFile_Read_getNextVar( IniFile_Read*, char* attr_name, 114| const char* types, ... ); 115|void IniFile_Read_getVarByPos( IniFile_Read*, long pos, 116| const char* types, ... ); 117|void IniFile_Read_getPlusVar( IniFile_Read*, const char* attr_name, 118| const char* types, ... ); 119| 120|void IniFile_Read_checkTypeInfo( IniFile_Read*, const char* appName, 121| int verNum_start, int verNum_end ); 122| 123|#ifdef USES_STRX 124|long IniFile_Read_getVar2( IniFile_Read*, StrX_Mem* mem, 125| const char* attr_name, const char* types, ... ); 126|long IniFile_Read_getVar2s( IniFile_Read*, StrX_Mem* mem, 127| const char* attr_name, StrX_Set* set ); 128|void IniFile_Read_getPlusVar2( IniFile_Read*, StrX_Mem* mem, 129| const char* attr_name, const char* types, ... ); 130|#endif 131| 132|#ifdef USES_ARRX 133| #ifdef USES_STRV 134| void IniFile_Read_getVar2sv( IniFile_Read*, StrV_Mem* mem, 135| const char* attr_name, StrV_Set* set ); 136| void IniFile_Read_getVar2av( IniFile_Read*, const char* attr_name, 137| ArrX_Able* set ); 138| #endif 139| #ifdef USES_STRX 140| void IniFile_Read_getVars( IniFile_Read*, StrX_Mem* mem, ArrX_Buf* pmem, 141| const char* attr_name, const char* types, ArrX* arr ); 142| #ifdef USES_OFFSET 143| void IniFile_Read_getVars2( IniFile_Read*, StrX_Mem* mem, ArrX_Buf* pmem, 144| const char* attr_name, const char* types, ArrX* arr, int size, ... ); 145| #endif 146| #endif 147|#endif 148| 149|#ifdef USES_ARRX 150| #ifdef USES_STRX 151| void IniFile_Read_getPathes( IniFile_Read*, StrX_Mem* mem, 152| ArrX_Buf* pmem, const char* section_name, ArrX* arr ); 153| void IniFile_Read_getPathesS( IniFile_Read*, StrX_Mem* mem, 154| const char* section_name, StrX_Set* set ); 155| char* IniFile_Read_getMultiLine( IniFile_Read*, const char* attr_name, 156| char* retStr, char* buf, int buf_sizeof ); 157| void IniFile_Read_getMultiLineM( IniFile_Read*, StrX_Mem* mem, 158| const char* attr_name, char* retStr, char** var ); 159| void IniFile_Read_getMultiStr( IniFile_Read*, StrX_Mem* buf, 160| const char* attr_name, StrX_Set* set ); 161| void IniFile_Read_getMultiStrM( IniFile_Read*, const char* attr_name, 162| StrX_Mem* buf ); 163| #endif 164| #ifdef USES_STRV 165| void IniFile_Read_getMultiStrV( IniFile_Read*, StrV_Mem* buf, 166| const char* attr_name, StrV_Set* set ); 167| void IniFile_Read_getMultiStrAV( IniFile_Read*, 168| const char* attr_name, ArrX_Able* set ); 169| #endif 170|#endif 171| 172| 173|/* 内部用 */ 174|char* IniFile_Read_readAttrName( IniFile_Read*, const char* attr_name ); 175|void IniFile_Read_readVar( IniFile_Read*, char* buf, 176| const char* types, va_list va ); 177|#ifdef USES_STRX 178| void IniFile_Read_readVar2( IniFile_Read*, char* buf, 179| StrX_Mem* mem, const char* types, va_list va ); 180| void IniFile_Read_readVar2_subA( IniFile_Read*, char* vars, 181| StrX_Mem* mem, const char* types, va_list va ); 182| void IniFile_Read_readVar2_subS( IniFile_Read*, char* buf, 183| char** pp, StrX_Mem* mem ); 184|#endif 185| 186|#ifdef __cplusplus 187|} 188|#endif 189| 190| 191| 192|/*---------------------------------------------------------------------*/ 193|/* 5. <<< Mapping Area ----------------------------------------------->>> */ 194|/*---------------------------------------------------------------------*/ 195| 196| 197| 198|/*********************************************************************** 199|* 6. <<< [IniFile_Read_readVar2_subS] 文字列型を読み込むサブ関数(StrX_Mem使用) >>> 200|*【引数】 201|* ・char* buf; 文字列型の値('\0'で終わる) 202|* ・char** pp; 文字列ポインタを格納するアドレス 203|* ・StrX_Mem* mem; 文字列を格納する領域 204|************************************************************************/ 205|#define IniFile_Read_readVar2_subS( this, buf, pp, mem ) \ 206| { \ 207| if ( (int)strlen( buf ) > (this)->string_sizeof - 1 ) \ 208| (buf)[(this)->string_sizeof - 1] = '\0'; \ 209| *(pp) = StrX_Mem_alloc( mem ); \ 210| strcpy( *(pp), buf ); \ 211| } 212| 213| 214| 215|#endif /* __INIFILE_H */ 216| 217|