/*
Copyright (C) 1998,1999,2000,2001
T. Scott Dattalo and Ralf Forsberg
This file is part of gpsim.
gpsim is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
gpsim is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with gpsim; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "settings_exdbm.h"
SettingsEXdbm::SettingsEXdbm(const char *appl_name)
{
int ret;
char *homedir;
string path;
ret = eXdbmInit();
if (ret == -1)
{
puts(eXdbmGetErrorString(eXdbmGetLastError()));
}
homedir = getenv("HOME");
if (homedir == 0)
homedir = ".";
path = string(homedir) + "/." + appl_name;
ret = eXdbmOpenDatabase((char *)path.c_str(), &dbid);
if(ret == -1)
{
int error = eXdbmGetLastError();
if(error == DBM_OPEN_FILE)
{
ret = eXdbmNewDatabase((char *)path.c_str(), &dbid);
if (ret == -1)
puts(eXdbmGetErrorString(eXdbmGetLastError()));
else
{
ret = eXdbmUpdateDatabase(dbid);
if(ret == -1)
puts(eXdbmGetErrorString(eXdbmGetLastError()));
}
}
else
puts(eXdbmGetErrorString(eXdbmGetLastError()));
}
}
bool SettingsEXdbm::set(const char *module, const char *entry, const char *str)
{
int ret;
DB_LIST list;
list = eXdbmGetList(dbid, 0, (char *)module);
if (list == false)
{
ret = eXdbmCreateList(dbid, 0, (char *)module, 0);
if(ret == -1)
{
puts(eXdbmGetErrorString(eXdbmGetLastError()));
return false;
}
list = eXdbmGetList(dbid, 0, (char *)module);
if (list == 0)
{
puts(eXdbmGetErrorString(eXdbmGetLastError()));
return false;
}
}
// We have the list
ret = eXdbmChangeVarString(dbid, list, (char *)entry, (char *)str);
if (ret == -1)
{
ret = eXdbmCreateVarString(dbid, list, (char *)entry, 0, (char *)str);
if (ret == -1)
{
puts("\n\n\n\ndidn't work");
puts(eXdbmGetErrorString(eXdbmGetLastError()));
puts("\n\n\n\n");
return false;
}
}
ret = eXdbmUpdateDatabase(dbid);
if (ret == -1)
{
puts(eXdbmGetErrorString(eXdbmGetLastError()));
return false;
}
return true;
}
bool SettingsEXdbm::set(const char *module, const char *entry, int value)
{
int ret;
DB_LIST list;
if(!module || !entry)
return false;
list = eXdbmGetList(dbid, 0, (char *)module);
if (list == 0)
{
ret = eXdbmCreateList(dbid, 0, (char *)module, 0);
if (ret == -1)
{
puts(eXdbmGetErrorString(eXdbmGetLastError()));
return false;
}
list = eXdbmGetList(dbid, 0, (char *)module);
if (list == 0)
{
puts(eXdbmGetErrorString(eXdbmGetLastError()));
return false;
}
}
// We have the list
ret = eXdbmChangeVarInt(dbid, list, (char *)entry, value);
if (ret == -1)
{
ret = eXdbmCreateVarInt(dbid, list, (char *)entry, 0, value);
if (ret == -1)
{
puts("\n\n\n\ndidn't work");
puts(eXdbmGetErrorString(eXdbmGetLastError()));
puts("\n\n\n\n");
return false;
}
}
ret = eXdbmUpdateDatabase(dbid);
if (ret == -1)
{
puts(eXdbmGetErrorString(eXdbmGetLastError()));
return false;
}
return true;
}
bool SettingsEXdbm::get(const char *module, const char *entry, char **str)
{
int ret;
DB_LIST list;
list = eXdbmGetList(dbid, 0, (char *)module);
if (list == 0)
return false;
// We have the list
ret = eXdbmGetVarString(dbid, list, (char *)entry, str);
if (ret == -1)
return false;
return true;
}
bool SettingsEXdbm::get(const char *module, const char *entry, int *value)
{
int ret;
DB_LIST list;
list = eXdbmGetList(dbid, 0, (char *)module);
if (list == 0)
return false;
// We have the list
ret = eXdbmGetVarInt(dbid, list, (char *)entry, value);
if (ret == -1)
return false;
return true;
}
bool SettingsEXdbm::remove(const char *module, const char *entry)
{
int ret;
DB_LIST list;
list = eXdbmGetList(dbid, 0, (char *)module);
if (list == false)
{
ret = eXdbmCreateList(dbid, 0, (char *)module, 0);
if(ret == -1)
{
puts(eXdbmGetErrorString(eXdbmGetLastError()));
return false;
}
list = eXdbmGetList(dbid, 0, (char *)module);
if (list == 0)
{
puts(eXdbmGetErrorString(eXdbmGetLastError()));
return false;
}
}
// We have the list
ret = eXdbmDeleteEntry(dbid, list, (char *)entry);
if (ret == -1)
{
return false;
}
ret = eXdbmUpdateDatabase(dbid);
if (ret == -1)
{
puts(eXdbmGetErrorString(eXdbmGetLastError()));
return false;
}
return true;
}
syntax highlighted by Code2HTML, v. 0.9.1