insert code for reading double numbers from ini-file

Fork of IniFileLib by rinosh 2

IniFile.h

Committer:
kokisan2000
Date:
2015-01-07
Revision:
3:1f40bfa093d0
Parent:
1:3601c7feb547

File content as of revision 3:1f40bfa093d0:

///////////////////////////////////////////////////////////////////////////////
// IniFile: .ini file parser   by rinos 2010
// 07.01.2015: DS: inserted code for double format
///////////////////////////////////////////////////////////////////////////////

// Ini file value (int/bool/string)
// Key1 = 123            -> 123         (int)
// Key2 = 0x123          -> 291         (int)
// Key3 = FALSE          -> false       (bool)
// Key4 = TRUE           -> true        (bool)
// Key5 = 123            -> true        (bool)
// key6 =   abc "def     -> 'abc "def'  (string)
// key7 = " ghi "jkl "   -> ' ghi "jkl '(string)
// #comment line

#ifndef __INI_FILE_H__
#define __INI_FILE_H__

#include "mbed.h"

class IniFile
{
    // defines /////////////////////////////////////////////////////////////////
public:
    // data type
    typedef enum {
        DTYPE_INT	= -1,
        DTYPE_BOOL	= -2,
        DTYPE_DOUBLE = -3,
        // other string
    } DataType;

    // For the multiple read
    struct IniList {
        const char* key;	// key name  (set NULL for list end)
        int   typelen;		// >0: buffer length, <0: DataType
        void* buf;			// return buffer
    };

    // error code
    typedef enum {
        S_SUCCESS,
        S_OPEN_ERROR,
        S_NOT_OPENED,
        S_NO_KEY,
        S_BUFFER_TOO_SHORT,
        S_FORMAT_ERROR,
    } Status;

    // internal member/method //////////////////////////////////////////////////
private:
    FILE* m_fp;

    // Invalid method
protected:
    IniFile(const IniFile& v);
    const IniFile& operator =(const IniFile& v);

public:
    IniFile(const char* file = 0);
    ~IniFile();

    // Access methods
    Status open(const char* file);
    Status close();

    Status get(const char* key, char* ret, int ret_size);
    Status get(const char* key, int&  ret);
    Status get(const char* key, double&  ret);
    Status get(const char* key, bool& ret);
    Status get(const IniList* inilist);

    // For easy acccess
    static Status getval(const char* inifile, const char* key, char* ret, int ret_size) {
        return IniFile(inifile).get(key, ret, ret_size);
    }
    static Status getval(const char* inifile, const char* key, int& ret) {
        return IniFile(inifile).get(key, ret);
    }
    static Status getval(const char* inifile, const char* key, bool& ret) {
        return IniFile(inifile).get(key, ret);
    }
    static Status getval(const char* inifile, const char* key, double& ret) {
        return IniFile(inifile).get(key, ret);
    }
    static Status getval(const char* inifile, const IniList* inilist) {
        return IniFile(inifile).get(inilist);
    }

    // for string triming
    static Status strtrim(char* dst, const char* src, int dst_size); // move to public
};

// for the table
#define INIFILE_INT(key,  val)		{key,	IniFile::DTYPE_INT,		&val}
#define INIFILE_BOOL(key, val)		{key,	IniFile::DTYPE_BOOL,	&val}
#define INIFILE_DOUBLE(key, val)	{key,	IniFile::DTYPE_DOUBLE,	&val}
#define INIFILE_STR(key, buf, size)	{key,	size,					buf}
#define INIFILE_END					0

#endif