
#ifndef CONFIG_H
#define CONFIG_H

/*
** Poniezj sa definicje funkcji/struktur do operacji na plikach
** konfiguracyjnych, pliki te moga sluzyc do zapamietywania jakis
** zmiennych itp. wartosci, pliki wygladaja tak:
**
** SNazwa1 = wartosc1  // oznacza, ze pole Nazwa1 ma argument jako string
** NNazwa2 = wartosc2  // Nazwa2 wa argument jako liczba (long)
**
*/

/* Simple Config (tm ;) definitions */

struct ConfigNode
{
    struct ConfigNode *cn_Next;
    struct ConfigNode *cn_Prev;
    char              *cn_Name;
    char              *cn_SValue;
    long               cn_NValue;
};

struct SimpleConfig
{
    BPTR   sc_File;
    char  *sc_FileName;

    struct List *sc_Entries;
};

/*
** stworz nowy SimpleConfig
** name - nazwa pliku
*/
extern struct SimpleConfig *cfg_create_simpleconfig(char *name);

extern struct SimpleConfig *cfg_open_simpleconfig(char *name);

/*
** dodaj nowe pole typu string
*/
extern int cfg_add_string_entry(struct SimpleConfig *cfg, char *name, char *value);

/*
** dodaj nowe pole typu number
*/
extern int cfg_add_number_entry(struct SimpleConfig *cfg, char *name, long value);

/*
** zmodyfikuj pole typu string
*/
extern int cfg_mod_number_entry(struct SimpleConfig *cfg, char *name, long value);

/*
** zmodyfikuj pole typu number
*/
extern int cfg_mod_string_entry(struct SimpleConfig *cfg, char *name, char *value);

/*
** usun pole
** name - szukaj wg. nazwy
** num  - wedlug pola ('name' musi byc wtedy NULL)
*/
extern int cfg_rem_entry(struct SimpleConfig *cfg, char *name, long num);

/*
** pobierz wartosc pole typu number
*/
extern long cfg_get_number_entry(struct SimpleConfig *cfg, char *name);

/*
** pobierz wartosc pola typu string
*/
extern char *cfg_get_string_entry(struct SimpleConfig *cfg, char *name);

/*
** zapisz SimpleConfig
*/
extern void cfg_save_simpleconfig(struct SimpleConfig *sc);

/*
** zwolnij pamiec po SimpleConfig
*/
extern void cfg_free_simpleconfig(struct SimpleConfig *sc);

#endif
