moved all initialization code out of main and made it compile.

This commit is contained in:
Enno Rehling 2010-02-21 20:28:14 +00:00
parent d0b1f8ac77
commit f37430e3c1
21 changed files with 149 additions and 78 deletions

View File

@ -2,39 +2,26 @@
#include <util/log.h> #include <util/log.h>
#include <eressea.h> #include <eressea.h>
#include <gmtool.h>
#include <kernel/config.h> #include <kernel/config.h>
#include <iniparser/iniparser.h> #include <iniparser/iniparser.h>
static void static const char * luafile = "init.lua";
load_inifile(const char * filename) static const char * entry_point = NULL;
static int memdebug = 0;
static void load_config(const char * filename)
{ {
dictionary * d = iniparser_new(filename); dictionary * d = iniparser_new(filename);
if (d) { if (d) {
const char * str; load_inifile(d);
g_basedir = iniparser_getstring(d, "eressea:base", g_basedir);
lomem = iniparser_getint(d, "eressea:lomem", lomem)?1:0;
memdebug = iniparser_getint(d, "eressea:memcheck", memdebug); memdebug = iniparser_getint(d, "eressea:memcheck", memdebug);
str = iniparser_getstring(d, "eressea:encoding", NULL);
if (str) enc_gamedata = xmlParseCharEncoding(str);
verbosity = iniparser_getint(d, "eressea:verbose", 2);
sqlpatch = iniparser_getint(d, "eressea:sqlpatch", false);
battledebug = iniparser_getint(d, "eressea:debug", battledebug)?1:0;
entry_point = iniparser_getstring(d, "eressea:run", entry_point); entry_point = iniparser_getstring(d, "eressea:run", entry_point);
luafile = iniparser_getstring(d, "eressea:load", luafile); luafile = iniparser_getstring(d, "eressea:load", luafile);
g_reportdir = iniparser_getstring(d, "eressea:report", g_reportdir);
str = iniparser_getstring(d, "eressea:locales", "de,en");
make_locales(str);
/* only one value in the [editor] section */ /* only one value in the [editor] section */
force_color = iniparser_getint(d, "editor:color", force_color); force_color = iniparser_getint(d, "editor:color", force_color);
/* excerpt from [config] (the rest is used in bindings.c) */
game_name = iniparser_getstring(d, "config:game", game_name);
} }
global.inifile = d; global.inifile = d;
} }
@ -43,7 +30,7 @@ int main(int argc, char ** argv)
{ {
int err; int err;
load_inifile("eressea.ini"); load_config("eressea.ini");
err = eressea_init(); err = eressea_init();
if (err) { if (err) {

View File

@ -25,6 +25,31 @@
#include <bindings/bind_unit.h> #include <bindings/bind_unit.h>
#endif // BINDINGS_TOLUA #endif // BINDINGS_TOLUA
#if MUSEUM_MODULE
#include <modules/museum.h>
#endif
#if ARENA_MODULE
#include <modules/arena.h>
#endif
#include <triggers/triggers.h>
#include <util/language.h>
#include <kernel/xmlreader.h>
#include <kernel/reports.h>
#include <kernel/item.h>
#include <kernel/names.h>
#include <kernel/reports.h>
#include <kernel/building.h>
#include <modules/wormhole.h>
#include <modules/gmcmd.h>
#include <modules/xmas.h>
#include <gamecode/archetype.h>
#include <gamecode/report.h>
#include <gamecode/items.h>
#include <gamecode/creport.h>
#include <gamecode/xmlreport.h>
#include <races/races.h>
#include <items/itemtypes.h>
#include <attributes/attributes.h>
static const struct { static const struct {
@ -108,13 +133,13 @@ game_done(void)
static void static void
game_init(void) game_init(void)
{ {
init_triggers(); register_triggers();
init_xmas(); register_xmas();
reports_init(); register_reports();
report_init(); register_nr();
creport_init(); register_cr();
xmlreport_init(); register_xr();
debug_language("locales.log"); debug_language("locales.log");
register_races(); register_races();

View File

@ -1572,7 +1572,7 @@ crwritemap(const char * filename)
} }
void void
creport_init(void) register_cr(void)
{ {
tsf_register("report", &cr_ignore); tsf_register("report", &cr_ignore);
tsf_register("string", &cr_string); tsf_register("string", &cr_string);

View File

@ -18,7 +18,7 @@ extern "C" {
#include <time.h> #include <time.h>
extern void creport_cleanup(void); extern void creport_cleanup(void);
extern void creport_init(void); extern void register_cr(void);
extern int crwritemap(const char * filename); extern int crwritemap(const char * filename);

View File

@ -2426,7 +2426,7 @@ kann_finden(faction * f1, faction * f2)
/******* end summary ******/ /******* end summary ******/
void void
report_init(void) register_nr(void)
{ {
if (!nocr) register_reporttype("nr", &report_plaintext, 1<<O_REPORT); if (!nocr) register_reporttype("nr", &report_plaintext, 1<<O_REPORT);
if (!nonr) register_reporttype("txt", &report_template, 1<<O_ZUGVORLAGE); if (!nonr) register_reporttype("txt", &report_template, 1<<O_ZUGVORLAGE);

View File

@ -15,7 +15,7 @@
extern "C" { extern "C" {
#endif #endif
extern void report_init(void); extern void register_nr(void);
extern void report_cleanup(void); extern void report_cleanup(void);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -732,7 +732,7 @@ report_xml(const char * filename, report_context * ctx, const char * encoding)
} }
void void
xmlreport_init(void) register_xr(void)
{ {
register_reporttype("xml", &report_xml, 1<<O_XML); register_reporttype("xml", &report_xml, 1<<O_XML);
#ifdef USE_ICONV #ifdef USE_ICONV

View File

@ -16,7 +16,7 @@ extern "C" {
#include <time.h> #include <time.h>
extern void xmlreport_cleanup(void); extern void xmlreport_cleanup(void);
extern void xmlreport_init(void); extern void register_xr(void);
extern int crwritemap(const char * filename); extern int crwritemap(const char * filename);

View File

@ -68,10 +68,6 @@
#include <string.h> #include <string.h>
#include <locale.h> #include <locale.h>
extern const char * g_reportdir;
extern const char * g_datadir;
extern const char * g_basedir;
static int g_quit; static int g_quit;
int force_color = 0; int force_color = 0;

View File

@ -96,9 +96,6 @@ typedef enum combatmagic {
DO_POSTCOMBATSPELL DO_POSTCOMBATSPELL
} combatmagic_t; } combatmagic_t;
/* external variables */
boolean battledebug = true;
/* globals */ /* globals */
static int obs_count = 0; static int obs_count = 0;

View File

@ -76,6 +76,8 @@
#include <libxml/tree.h> #include <libxml/tree.h>
#include <libxml/xpath.h> #include <libxml/xpath.h>
#include <iniparser/iniparser.h>
/* libc includes */ /* libc includes */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -101,6 +103,7 @@ FILE *logfile;
FILE *updatelog; FILE *updatelog;
const struct race * new_race[MAXRACES]; const struct race * new_race[MAXRACES];
boolean sqlpatch = false; boolean sqlpatch = false;
boolean battledebug = false;
int turn = 0; int turn = 0;
#if XECMD_MODULE #if XECMD_MODULE
@ -586,15 +589,6 @@ skill_limit(faction * f, skill_t sk)
return m; return m;
} }
const char * g_basedir;
const char *
basepath(void)
{
if (g_basedir) return g_basedir;
return ".";
}
int int
count_skill(faction * f, skill_t sk) count_skill(faction * f, skill_t sk)
{ {
@ -2152,6 +2146,52 @@ get_param_int(const struct param * p, const char * key, int def)
return def; return def;
} }
static const char * g_datadir;
const char *
datapath(void)
{
static char zText[MAX_PATH];
if (g_datadir) return g_datadir;
return strcat(strcpy(zText, basepath()), "/data");
}
void
set_datapath(const char * path)
{
g_datadir = path;
}
static const char * g_reportdir;
const char *
reportpath(void)
{
static char zText[MAX_PATH];
if (g_reportdir) return g_reportdir;
return strcat(strcpy(zText, basepath()), "/reports");
}
void
set_reportpath(const char * path)
{
g_reportdir = path;
}
static const char * g_basedir;
const char *
basepath(void)
{
if (g_basedir) return g_basedir;
return ".";
}
void
set_basepath(const char * path)
{
g_basedir = path;
}
float float
get_param_flt(const struct param * p, const char * key, float def) get_param_flt(const struct param * p, const char * key, float def)
{ {
@ -3211,3 +3251,39 @@ free_gamedata(void)
} }
++global.cookie; /* readgame() already does this, but sjust in case */ ++global.cookie; /* readgame() already does this, but sjust in case */
} }
void
load_inifile(dictionary * d)
{
const char * reportdir = reportpath();
const char * datadir = datapath();
const char * basedir = basepath();
const char * str;
assert(d);
str = iniparser_getstring(d, "eressea:base", basedir);
if (str!=basedir) set_basepath(str);
str = iniparser_getstring(d, "eressea:report", reportdir);
if (str!=reportdir) set_reportpath(str);
str = iniparser_getstring(d, "eressea:data", datadir);
if (str!=datadir) set_datapath(str);
lomem = iniparser_getint(d, "eressea:lomem", lomem)?1:0;
str = iniparser_getstring(d, "eressea:encoding", NULL);
if (str) enc_gamedata = xmlParseCharEncoding(str);
verbosity = iniparser_getint(d, "eressea:verbose", 2);
sqlpatch = iniparser_getint(d, "eressea:sqlpatch", false);
battledebug = iniparser_getint(d, "eressea:debug", battledebug)?1:0;
str = iniparser_getstring(d, "eressea:locales", "de,en");
make_locales(str);
/* excerpt from [config] (the rest is used in bindings.c) */
game_name = iniparser_getstring(d, "config:game", game_name);
global.inifile = d;
}

View File

@ -28,6 +28,8 @@ extern "C" {
/* this should always be the first thing included after platform.h */ /* this should always be the first thing included after platform.h */
#include "types.h" #include "types.h"
typedef struct _dictionary_ dictionary;
/* experimental gameplay features (that don't affect the savefile) */ /* experimental gameplay features (that don't affect the savefile) */
/* TODO: move these settings to settings.h or into configuration files */ /* TODO: move these settings to settings.h or into configuration files */
#define GOBLINKILL /* Goblin-Spezialklau kann tödlich enden */ #define GOBLINKILL /* Goblin-Spezialklau kann tödlich enden */
@ -363,7 +365,16 @@ enum {
}; };
extern int movewhere(const struct unit *u, const char * token, struct region * r, struct region** resultp); extern int movewhere(const struct unit *u, const char * token, struct region * r, struct region** resultp);
extern const char * datapath(void);
extern void set_datapath(const char * path);
extern const char * basepath(void); extern const char * basepath(void);
extern void set_basepath(const char *);
void load_inifile(dictionary * d);
extern const char * reportpath(void);
extern void set_reportpath(const char *);
extern void kernel_init(void); extern void kernel_init(void);
extern void kernel_done(void); extern void kernel_done(void);
@ -385,7 +396,7 @@ typedef struct settings {
void * vm_state; void * vm_state;
float producexpchance; float producexpchance;
int cookie; int cookie;
struct _dictionary_ * inifile; dictionary * inifile;
struct global_functions { struct global_functions {
int (*wage)(const struct region *r, const struct faction * f, const struct race * rc, int in_turn); int (*wage)(const struct region *r, const struct faction * f, const struct race * rc, int in_turn);
@ -396,6 +407,7 @@ extern settings global;
extern int produceexp(struct unit * u, skill_t sk, int n); extern int produceexp(struct unit * u, skill_t sk, int n);
extern boolean battledebug;
extern boolean sqlpatch; extern boolean sqlpatch;
extern boolean lomem; /* save memory */ extern boolean lomem; /* save memory */

View File

@ -73,7 +73,6 @@ boolean nocr = false;
boolean nonr = false; boolean nonr = false;
boolean noreports = false; boolean noreports = false;
const char * g_reportdir;
const char * visibility[] = { const char * visibility[] = {
"none", "none",
"neighbour", "neighbour",
@ -94,14 +93,6 @@ const char *coasts[MAXDIRECTIONS] =
"coast::w" "coast::w"
}; };
const char *
reportpath(void)
{
static char zText[MAX_PATH];
if (g_reportdir) return g_reportdir;
return strcat(strcpy(zText, basepath()), "/reports");
}
static char * static char *
groupid(const struct group * g, const struct faction * f) groupid(const struct group * g, const struct faction * f)
{ {
@ -2143,7 +2134,7 @@ report_action(region * r, unit * actor, message * msg, int flags)
void void
reports_init(void) register_reports(void)
{ {
/* register datatypes for the different message objects */ /* register datatypes for the different message objects */
register_argtype("alliance", NULL, NULL, VAR_VOIDPTR); register_argtype("alliance", NULL, NULL, VAR_VOIDPTR);

View File

@ -99,11 +99,10 @@ extern void register_reporttype(const char * extension, report_fun write, int fl
extern int bufunit(const struct faction * f, const struct unit * u, int indent, int mode, char * buf, size_t size); extern int bufunit(const struct faction * f, const struct unit * u, int indent, int mode, char * buf, size_t size);
extern const char * reportpath(void);
extern const char * trailinto(const struct region * r, const struct locale * lang); extern const char * trailinto(const struct region * r, const struct locale * lang);
extern const char * report_kampfstatus(const struct unit * u, const struct locale * lang); extern const char * report_kampfstatus(const struct unit * u, const struct locale * lang);
extern void reports_init(void); extern void register_reports(void);
extern int update_nmrs(void); extern int update_nmrs(void);
extern int * nmrs; extern int * nmrs;

View File

@ -90,7 +90,6 @@
/* exported symbols symbols */ /* exported symbols symbols */
const char * game_name = "eressea"; const char * game_name = "eressea";
const char * g_datadir;
int firstx = 0, firsty = 0; int firstx = 0, firsty = 0;
int enc_gamedata = 0; int enc_gamedata = 0;
@ -512,14 +511,6 @@ create_backup(char *file)
#endif #endif
} }
const char *
datapath(void)
{
static char zText[MAX_PATH];
if (g_datadir) return g_datadir;
return strcat(strcpy(zText, basepath()), "/data");
}
void void
read_items(struct storage * store, item **ilist) read_items(struct storage * store, item **ilist)
{ {

View File

@ -55,8 +55,6 @@ extern void write_items(struct storage * store, struct item *it);
extern void write_unit(struct storage * store, const struct unit * u); extern void write_unit(struct storage * store, const struct unit * u);
extern struct unit * read_unit(struct storage * store); extern struct unit * read_unit(struct storage * store);
extern const char * datapath(void);
extern int a_readint(struct attrib * a, struct storage * store); extern int a_readint(struct attrib * a, struct storage * store);
extern void a_writeint(const struct attrib * a, struct storage * store); extern void a_writeint(const struct attrib * a, struct storage * store);
extern int a_readshorts(struct attrib * a, struct storage * store); extern int a_readshorts(struct attrib * a, struct storage * store);

View File

@ -75,7 +75,7 @@ trigger_xmasgate(building * b)
} }
void void
init_xmas(void) register_xmas(void)
{ {
tt_register(&tt_xmasgate); tt_register(&tt_xmasgate);
} }

View File

@ -21,7 +21,7 @@ struct unit;
extern struct trigger *trigger_xmasgate(struct building * b); extern struct trigger *trigger_xmasgate(struct building * b);
extern void init_xmas(void); extern void register_xmas(void);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -42,7 +42,7 @@
#include <stdio.h> #include <stdio.h>
void void
init_triggers(void) register_triggers(void)
{ {
if (verbosity>=2) printf("- registering triggers\n"); if (verbosity>=2) printf("- registering triggers\n");
tt_register(&tt_changefaction); tt_register(&tt_changefaction);

View File

@ -18,7 +18,7 @@
extern "C" { extern "C" {
#endif #endif
void init_triggers(void); void register_triggers(void);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -28,7 +28,6 @@
/* initialization - TODO: init in separate module */ /* initialization - TODO: init in separate module */
#include <attributes/attributes.h> #include <attributes/attributes.h>
#include <triggers/triggers.h>
#include <items/itemtypes.h> #include <items/itemtypes.h>
#include <races/races.h> #include <races/races.h>