diff --git a/src/xpdev/ini_file.c b/src/xpdev/ini_file.c index 6d10b4222fabb85d94f4d279b85fb01dc00b63f5..743cf45febc06fd5f5b004cb9eb053a198e4e474 100644 --- a/src/xpdev/ini_file.c +++ b/src/xpdev/ini_file.c @@ -387,6 +387,15 @@ char* iniSetShortInt(str_list_t* list, const char* section, const char* key, ush return iniSetString(list, section, key, str, style); } +char* iniSetLongInt(str_list_t* list, const char* section, const char* key, ulong value + ,ini_style_t* style) +{ + char str[INI_MAX_VALUE_LEN]; + + SAFEPRINTF(str,"%lu",value); + return iniSetString(list, section, key, str, style); +} + char* iniSetHexInt(str_list_t* list, const char* section, const char* key, ulong value ,ini_style_t* style) { @@ -424,13 +433,34 @@ char* iniSetBool(str_list_t* list, const char* section, const char* key, BOOL va char* iniSetEnum(str_list_t* list, const char* section, const char* key, str_list_t names, unsigned value ,ini_style_t* style) { - char str[INI_MAX_VALUE_LEN]; - if(value < strListCount(names)) return iniSetString(list, section, key, names[value], style); - SAFEPRINTF(str,"%u",value); - return iniSetString(list, section, key, str, style); + return iniSetLongInt(list, section, key, value, style); +} + +char* iniSetNamedInt(str_list_t* list, const char* section, const char* key, named_long_t* names + ,long value, ini_style_t* style) +{ + size_t i; + + for(i=0;names[i].name!=NULL;i++) + if(names[i].value==value) + return iniSetString(list, section, key, names[i].name, style); + + return iniSetInteger(list, section, key, value, style); +} + +char* iniSetNamedFloat(str_list_t* list, const char* section, const char* key, named_double_t* names + ,double value, ini_style_t* style) +{ + size_t i; + + for(i=0;names[i].name!=NULL;i++) + if(names[i].value==value) + return iniSetString(list, section, key, names[i].name, style); + + return iniSetFloat(list, section, key, value, style); } char* iniSetBitField(str_list_t* list, const char* section, const char* key @@ -856,6 +886,32 @@ ushort iniGetShortInt(str_list_t list, const char* section, const char* key, ush return((ushort)iniGetInteger(list, section, key, deflt)); } +ulong iniReadLongInt(FILE* fp, const char* section, const char* key, ulong deflt) +{ + char* value; + char buf[INI_MAX_VALUE_LEN]; + + if((value=read_value(fp,section,key,buf))==NULL) + return(deflt); + + if(*value==0) /* blank value */ + return(deflt); + + return(strtoul(value,NULL,0)); +} + +ulong iniGetLongInt(str_list_t list, const char* section, const char* key, ulong deflt) +{ + char value[INI_MAX_VALUE_LEN]; + + get_value(list, section, key, value); + + if(*value==0) /* blank value or missing key */ + return(deflt); + + return(strtoul(value,NULL,0)); +} + #if !defined(NO_SOCKET_SUPPORT) static ulong parseIpAddress(const char* value) @@ -1034,6 +1090,84 @@ unsigned iniGetEnum(str_list_t list, const char* section, const char* key, str_l return(parseEnum(value,names)); } +static long parseNamedInt(const char* value, named_long_t* names) +{ + unsigned i; + + for(i=0;names[i].name!=NULL;i++) + if(stricmp(names[i].name,value)==0) + return(names[i].value); + + return(strtol(value,NULL,0)); +} + +long iniReadNamedInt(FILE* fp, const char* section, const char* key + ,named_long_t* names, long deflt) +{ + char buf[INI_MAX_VALUE_LEN]; + char* value; + + if((value=read_value(fp,section,key,buf))==NULL) + return(deflt); + + if(*value==0) /* blank value */ + return(deflt); + + return(parseNamedInt(value,names)); +} + +long iniGetNamedInt(str_list_t list, const char* section, const char* key + ,named_long_t* names, long deflt) +{ + char value[INI_MAX_VALUE_LEN]; + + get_value(list, section, key, value); + + if(*value==0) /* blank value or missing key */ + return(deflt); + + return(parseNamedInt(value,names)); +} + +static double parseNamedFloat(const char* value, named_double_t* names) +{ + unsigned i; + + for(i=0;names[i].name!=NULL;i++) + if(stricmp(names[i].name,value)==0) + return(names[i].value); + + return(atof(value)); +} + +double iniReadNamedFloat(FILE* fp, const char* section, const char* key + ,named_double_t* names, double deflt) +{ + char buf[INI_MAX_VALUE_LEN]; + char* value; + + if((value=read_value(fp,section,key,buf))==NULL) + return(deflt); + + if(*value==0) /* blank value */ + return(deflt); + + return(parseNamedFloat(value,names)); +} + +double iniGetNamedFloat(str_list_t list, const char* section, const char* key + ,named_double_t* names, double deflt) +{ + char value[INI_MAX_VALUE_LEN]; + + get_value(list, section, key, value); + + if(*value==0) /* blank value or missing key */ + return(deflt); + + return(parseNamedFloat(value,names)); +} + static ulong parseBitField(char* value, ini_bitdesc_t* bitdesc) { int i; diff --git a/src/xpdev/ini_file.h b/src/xpdev/ini_file.h index 489726bb318722f6763fa75f9deacae1ed42dc70..e513fd3f9495b4e0181b0ef5ff52ec4c77ab5df5 100644 --- a/src/xpdev/ini_file.h +++ b/src/xpdev/ini_file.h @@ -79,6 +79,8 @@ long iniReadInteger(FILE*, const char* section, const char* key ,long deflt); ushort iniReadShortInt(FILE*, const char* section, const char* key ,ushort deflt); +ulong iniReadLongInt(FILE*, const char* section, const char* key + ,ulong deflt); ulong iniReadIpAddress(FILE*, const char* section, const char* key ,ulong deflt); double iniReadFloat(FILE*, const char* section, const char* key @@ -87,6 +89,10 @@ BOOL iniReadBool(FILE*, const char* section, const char* key ,BOOL deflt); unsigned iniReadEnum(FILE*, const char* section, const char* key ,str_list_t names, unsigned deflt); +long iniReadNamedInt(FILE*, const char* section, const char* key + ,named_long_t*, long deflt); +double iniReadNamedFloat(FILE*, const char* section, const char* key + ,named_double_t*, double deflt); ulong iniReadBitField(FILE*, const char* section, const char* key ,ini_bitdesc_t* bitdesc, ulong deflt); @@ -119,6 +125,8 @@ long iniGetInteger(str_list_t, const char* section, const char* key ,long deflt); ushort iniGetShortInt(str_list_t, const char* section, const char* key ,ushort deflt); +ulong iniGetLongInt(str_list_t, const char* section, const char* key + ,ulong deflt); ulong iniGetIpAddress(str_list_t, const char* section, const char* key ,ulong deflt); double iniGetFloat(str_list_t, const char* section, const char* key @@ -127,16 +135,21 @@ BOOL iniGetBool(str_list_t, const char* section, const char* key ,BOOL deflt); unsigned iniGetEnum(str_list_t, const char* section, const char* key ,str_list_t names, unsigned deflt); +long iniGetNamedInt(str_list_t, const char* section, const char* key + ,named_long_t*, long deflt); +double iniGetNamedFloat(str_list_t, const char* section, const char* key + ,named_double_t*, double deflt); ulong iniGetBitField(str_list_t, const char* section, const char* key ,ini_bitdesc_t* bitdesc, ulong deflt); - char* iniSetString(str_list_t*, const char* section, const char* key, const char* value ,ini_style_t*); char* iniSetInteger(str_list_t*, const char* section, const char* key, long value ,ini_style_t*); char* iniSetShortInt(str_list_t*, const char* section, const char* key, ushort value ,ini_style_t*); +char* iniSetLongInt(str_list_t*, const char* section, const char* key, ulong value + ,ini_style_t*); char* iniSetHexInt(str_list_t*, const char* section, const char* key, ulong value ,ini_style_t*); char* iniSetFloat(str_list_t*, const char* section, const char* key, double value @@ -147,6 +160,10 @@ char* iniSetBool(str_list_t*, const char* section, const char* key, BOOL value ,ini_style_t*); char* iniSetEnum(str_list_t*, const char* section, const char* key, str_list_t names ,unsigned value, ini_style_t*); +char* iniSetNamedInt(str_list_t*, const char* section, const char* key, named_long_t* + ,long value, ini_style_t*); +char* iniSetNamedFloat(str_list_t*, const char* section, const char* key, named_double_t* + ,double value, ini_style_t*); char* iniSetBitField(str_list_t*, const char* section, const char* key, ini_bitdesc_t*, ulong value ,ini_style_t*); char* iniSetStringList(str_list_t*, const char* section, const char* key