2007-06-01 11:08:33 +00:00
# include <baselib/system.h>
2007-06-03 16:22:21 +00:00
# include <baselib/stream/file.h>
# include <baselib/stream/line.h>
2007-06-01 12:02:27 +00:00
2007-06-01 11:08:33 +00:00
# include <cstring>
# include <cstdio>
2007-06-03 16:22:21 +00:00
# include <cstdlib>
2007-06-01 11:08:33 +00:00
# include "config.h"
configuration config ;
2007-06-03 16:22:21 +00:00
using namespace baselib ;
2007-06-01 11:08:33 +00:00
void config_reset ( )
{
# define MACRO_CONFIG_INT(name,def,min,max) config.name = def;
# define MACRO_CONFIG_STR(name,len,def) strncpy(config.name, def, len);
2007-06-01 11:17:10 +00:00
# include "config_variables.h"
2007-06-01 11:08:33 +00:00
# undef MACRO_CONFIG_INT
# undef MACRO_CONFIG_STR
}
2007-06-01 12:15:38 +00:00
void config_set ( const char * line )
{
2007-06-03 16:22:21 +00:00
char var_str [ 256 ] ;
2007-06-10 17:42:53 +00:00
const char * val_str = strchr ( line , ' = ' ) ;
2007-06-01 12:15:38 +00:00
if ( val_str )
{
2007-07-13 13:40:04 +00:00
mem_copy ( var_str , line , val_str - line ) ;
2007-06-01 12:15:38 +00:00
var_str [ val_str - line ] = 0 ;
+ + val_str ;
# define MACRO_CONFIG_INT(name,def,min,max) { if (strcmp(#name, var_str) == 0) config_set_ ## name (&config, atoi(val_str)); }
# define MACRO_CONFIG_STR(name,len,def) { if (strcmp(#name, var_str) == 0) { config_set_ ## name (&config, val_str); } }
# include "config_variables.h"
# undef MACRO_CONFIG_INT
# undef MACRO_CONFIG_STR
}
}
2007-06-01 11:08:33 +00:00
void config_load ( const char * filename )
{
dbg_msg ( " config/load " , " loading %s " , filename ) ;
2007-06-01 12:02:27 +00:00
2007-06-03 16:22:21 +00:00
file_stream file ;
2007-06-01 12:02:27 +00:00
2007-06-03 16:22:21 +00:00
if ( file . open_r ( filename ) )
2007-06-01 12:02:27 +00:00
{
2007-06-03 16:22:21 +00:00
char * line ;
line_stream lstream ( & file ) ;
while ( ( line = lstream . get_line ( ) ) )
config_set ( line ) ;
2007-06-01 12:02:27 +00:00
file . close ( ) ;
}
2007-06-01 11:08:33 +00:00
}
2007-06-01 11:17:10 +00:00
void config_save ( const char * filename )
{
dbg_msg ( " config/save " , " saving config to %s " , filename ) ;
2007-06-01 12:02:27 +00:00
2007-06-03 16:22:21 +00:00
file_stream file ;
2007-06-01 12:02:27 +00:00
2007-06-03 16:22:21 +00:00
if ( file . open_w ( filename ) )
{
# define MACRO_CONFIG_INT(name,def,min,max) { char str[256]; sprintf(str, "%s=%i", #name, config.name); file.write(str, strlen(str)); file.write("\n", 1); }
# define MACRO_CONFIG_STR(name,len,def) { file.write(#name, strlen(#name)); file.write("=", 1); file.write(config.name, strlen(config.name)); file.write("\n", 1); }
2007-06-01 12:02:27 +00:00
2007-06-03 16:22:21 +00:00
# include "config_variables.h"
2007-06-01 12:02:27 +00:00
2007-06-03 16:22:21 +00:00
# undef MACRO_CONFIG_INT
# undef MACRO_CONFIG_STR
2007-06-01 12:02:27 +00:00
2007-06-03 16:22:21 +00:00
file . close ( ) ;
}
2007-06-01 11:17:10 +00:00
}
2007-06-01 12:24:13 +00:00
# define MACRO_CONFIG_INT(name,def,min,max) int config_get_ ## name (configuration *c) { return c->name; }
# define MACRO_CONFIG_STR(name,len,def) const char *config_get_ ## name (configuration *c) { return c->name; }
# include "config_variables.h"
# undef MACRO_CONFIG_INT
# undef MACRO_CONFIG_STR
2007-06-01 11:17:10 +00:00
# define MACRO_CONFIG_INT(name,def,min,max) void config_set_ ## name (configuration *c, int val) { if (val < min) val = min; if (max != 0 && val > max) val = max; c->name = val; }
2007-06-01 12:04:36 +00:00
# define MACRO_CONFIG_STR(name,len,def) void config_set_ ## name (configuration *c, const char *str) { strncpy(c->name, str, len-1); c->name[sizeof(c->name)-1] = 0; }
2007-06-01 11:17:10 +00:00
# include "config_variables.h"
2007-06-01 11:08:33 +00:00
# undef MACRO_CONFIG_INT
# undef MACRO_CONFIG_STR