From 752b6526bd8a7bb77668ef285a4ff00791007358 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 19 Dec 2016 20:55:36 +0100 Subject: [PATCH 01/84] replace submodules --- .gitmodules | 9 +++------ clibs | 1 + critbit | 1 - quicklist | 1 - 4 files changed, 4 insertions(+), 8 deletions(-) create mode 160000 clibs delete mode 160000 critbit delete mode 160000 quicklist diff --git a/.gitmodules b/.gitmodules index 2242a8068..e9ea1e3ed 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,12 +4,6 @@ [submodule "cmake"] path = cmake url = https://github.com/ennorehling/cmake.git -[submodule "quicklist"] - path = quicklist - url = https://github.com/ennorehling/quicklist.git -[submodule "critbit"] - path = critbit - url = https://github.com/ennorehling/critbit.git [submodule "dlmalloc"] path = dlmalloc url = https://github.com/ennorehling/dlmalloc.git @@ -26,3 +20,6 @@ path = storage url = https://github.com/ennorehling/storage.git branch = master +[submodule "clibs"] + path = clibs + url = https://github.com/ennorehling/clibs diff --git a/clibs b/clibs new file mode 160000 index 000000000..f44b3e4e5 --- /dev/null +++ b/clibs @@ -0,0 +1 @@ +Subproject commit f44b3e4e5f08633e21e701b9af70927b707f38ab diff --git a/critbit b/critbit deleted file mode 160000 index 971836241..000000000 --- a/critbit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 971836241277e37274aa3110344836499816ff21 diff --git a/quicklist b/quicklist deleted file mode 160000 index f837dd31e..000000000 --- a/quicklist +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f837dd31e5fcf13c706db1ac2c86b7de3e706578 From 20fe039b1622e05b55563019c6c0f54afba86606 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 19 Dec 2016 21:35:02 +0100 Subject: [PATCH 02/84] use joint clibs directory instead of quicklist/critbit. --- CMakeLists.txt | 3 +-- clibs | 2 +- src/CMakeLists.txt | 9 +++------ 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d60d3d721..cc7e8173d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,8 +68,7 @@ add_subdirectory (cutest) add_subdirectory (cJSON) add_subdirectory (storage) add_subdirectory (iniparser) -add_subdirectory (quicklist) -add_subdirectory (critbit) +add_subdirectory (clibs) add_subdirectory (process) add_subdirectory (src eressea) install(DIRECTORY res conf DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.xml") diff --git a/clibs b/clibs index f44b3e4e5..67e60390a 160000 --- a/clibs +++ b/clibs @@ -1 +1 @@ -Subproject commit f44b3e4e5f08633e21e701b9af70927b707f38ab +Subproject commit 67e60390a2e324c4b0a015bda3ca9a956c98343f diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8a4445b55..ea76d4dbb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,10 +2,9 @@ cmake_minimum_required(VERSION 2.8) project (server C) include_directories (${CMAKE_CURRENT_SOURCE_DIR}) -include_directories (${CRITBIT_INCLUDE_DIR}) include_directories (${CJSON_INCLUDE_DIR}) +include_directories (${CLIBS_INCLUDE_DIR}) include_directories (${STORAGE_INCLUDE_DIR}) -include_directories (${QUICKLIST_INCLUDE_DIR}) include_directories (${CUTEST_INCLUDE_DIR}) include_directories (${LUA_INCLUDE_DIR}) include_directories (${TOLUA_INCLUDE_DIR}) @@ -181,9 +180,8 @@ target_link_libraries(eressea game ${TOLUA_LIBRARIES} ${LUA_LIBRARIES} - ${QUICKLIST_LIBRARIES} ${STORAGE_LIBRARIES} - ${CRITBIT_LIBRARIES} + ${CLIBS_LIBRARIES} ${CJSON_LIBRARIES} ${INIPARSER_LIBRARIES} ) @@ -239,9 +237,8 @@ target_link_libraries(test_eressea game ${CUTEST_LIBRARIES} ${LUA_LIBRARIES} - ${QUICKLIST_LIBRARIES} + ${CLIBS_LIBRARIES} ${STORAGE_LIBRARIES} - ${CRITBIT_LIBRARIES} ${CJSON_LIBRARIES} ${INIPARSER_LIBRARIES} ) From 2f52c226f0a2d9a01f98a2aabacda0bd593b28ab Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 22 Dec 2016 07:07:06 +0100 Subject: [PATCH 03/84] clibs MSVC compilation --- clibs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clibs b/clibs index 67e60390a..bce9b6568 160000 --- a/clibs +++ b/clibs @@ -1 +1 @@ -Subproject commit 67e60390a2e324c4b0a015bda3ca9a956c98343f +Subproject commit bce9b6568d4e9ace26c95a7740140cd71029b21f From f5419a7f456b6491d5482ef696e8c6f3ea0bdf48 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 6 Jan 2017 22:47:50 +0100 Subject: [PATCH 04/84] remove superfluous quicklist includes. --- src/bind_faction.c | 2 -- src/bind_monsters.c | 2 -- src/creport.test.c | 1 - src/kernel/config.c | 1 - src/kernel/equipment.test.c | 2 -- src/kernel/spell.test.c | 1 - src/kernel/spellbook.test.c | 1 - src/report.test.c | 1 - src/spy.c | 2 -- 9 files changed, 13 deletions(-) diff --git a/src/bind_faction.c b/src/bind_faction.c index 36da798c1..109814717 100644 --- a/src/bind_faction.c +++ b/src/bind_faction.c @@ -32,8 +32,6 @@ without prior permission by the authors of Eressea. #include #include -#include - #include #include diff --git a/src/bind_monsters.c b/src/bind_monsters.c index 3e3f24bee..54a9d0ba6 100644 --- a/src/bind_monsters.c +++ b/src/bind_monsters.c @@ -12,8 +12,6 @@ #include -#include - #include #include diff --git a/src/creport.test.c b/src/creport.test.c index 72669e99f..21a6c09b7 100644 --- a/src/creport.test.c +++ b/src/creport.test.c @@ -18,7 +18,6 @@ #include #include -#include #include #include diff --git a/src/kernel/config.c b/src/kernel/config.c index f33303ead..2b1ae678d 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -63,7 +63,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include -#include #include #include #include diff --git a/src/kernel/equipment.test.c b/src/kernel/equipment.test.c index 2911af1ea..a82f86674 100644 --- a/src/kernel/equipment.test.c +++ b/src/kernel/equipment.test.c @@ -7,8 +7,6 @@ #include #include -#include - #include #include diff --git a/src/kernel/spell.test.c b/src/kernel/spell.test.c index f61c0fffe..6bb2ac449 100644 --- a/src/kernel/spell.test.c +++ b/src/kernel/spell.test.c @@ -6,7 +6,6 @@ #include #include -#include #include #include diff --git a/src/kernel/spellbook.test.c b/src/kernel/spellbook.test.c index 2f78fd87d..8b997557b 100644 --- a/src/kernel/spellbook.test.c +++ b/src/kernel/spellbook.test.c @@ -2,7 +2,6 @@ #include #include -#include #include #include diff --git a/src/report.test.c b/src/report.test.c index 202458db5..555d39408 100644 --- a/src/report.test.c +++ b/src/report.test.c @@ -18,7 +18,6 @@ #include #include -#include #include #include diff --git a/src/spy.c b/src/spy.c index 22c548d68..86476bec7 100644 --- a/src/spy.c +++ b/src/spy.c @@ -49,8 +49,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include -#include - /* libc includes */ #include #include From 3ff5a3155e5a058a415a46e7b77a5143ef947d03 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 10 Jan 2017 12:54:49 +0100 Subject: [PATCH 05/84] do not update submodules before each build. add tolua to .gitignore, it's not a proper submodule. --- .gitignore | 81 +++++++++++++++++++++++++++--------------------------- s/build | 2 -- 2 files changed, 41 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index 24219490f..4e63f5d9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,40 +1,41 @@ -.vscode/ -*.orig -eressea.ini -Debug -Release - -# SlickEdit -*.vtg -*.vpwhistu - -# Microsoft Visual Studio build artefacts -src/Debug/ -src/Release/ -src/*.vcproj.*.user -Debug/ -Release/ -ipch/ -*.ipch -*.ncb -*.opensdf -*.pdb -*.sdf -*.suo -*.user - -*~ -*.bak -bin/ -build*/ -*.log -*.log.* -tags -Thumbs.db -.gdb_history -*.cfg -*.cmd -tmp/ -tests/config.lua -tests/reports/ -tests/data/185.dat +tolua/ +.vscode/ +*.orig +eressea.ini +Debug +Release + +# SlickEdit +*.vtg +*.vpwhistu + +# Microsoft Visual Studio build artefacts +src/Debug/ +src/Release/ +src/*.vcproj.*.user +Debug/ +Release/ +ipch/ +*.ipch +*.ncb +*.opensdf +*.pdb +*.sdf +*.suo +*.user + +*~ +*.bak +bin/ +build*/ +*.log +*.log.* +tags +Thumbs.db +.gdb_history +*.cfg +*.cmd +tmp/ +tests/config.lua +tests/reports/ +tests/data/185.dat diff --git a/s/build b/s/build index b59804626..01acc1ae2 100755 --- a/s/build +++ b/s/build @@ -33,8 +33,6 @@ if [ ! -d $ROOT/$BUILD ]; then exit fi -git submodule update - echo "build eressea" cd $ROOT/$BUILD VERSION=$(git describe --match 'v*.*.*' --tags | sed 's/^v//') From 955997d58c66cd21775f6b99573cd9c76a69ea8a Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 26 Jan 2017 06:00:01 +0100 Subject: [PATCH 06/84] WIP: use latest clibs with selist. adding a transitional quicklist.c module to reduce work. --- clibs | 2 +- src/CMakeLists.txt | 1 + src/donations.c | 4 ++-- src/quicklist.c | 4 ++++ src/quicklist.h | 14 ++++++++++++++ 5 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 src/quicklist.c create mode 100644 src/quicklist.h diff --git a/clibs b/clibs index bce9b6568..339ac5680 160000 --- a/clibs +++ b/clibs @@ -1 +1 @@ -Subproject commit bce9b6568d4e9ace26c95a7740140cd71029b21f +Subproject commit 339ac5680ec9027c88c4516c72b9da8233b6f3e3 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ea76d4dbb..06af86c8b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -88,6 +88,7 @@ set (ERESSEA_SRC move.c piracy.c spells.c + quicklist.c battle.c alchemy.c academy.c diff --git a/src/donations.c b/src/donations.c index 8f820df2b..c6e4308ac 100644 --- a/src/donations.c +++ b/src/donations.c @@ -54,8 +54,8 @@ void add_donation(faction * f1, faction * f2, int amount, region * r) } void free_donations(void) { - ql_foreach(transfers, free); - ql_free(transfers); + selist_foreach(transfers, free); + selist_free(transfers); transfers = 0; } diff --git a/src/quicklist.c b/src/quicklist.c new file mode 100644 index 000000000..75d7b8641 --- /dev/null +++ b/src/quicklist.c @@ -0,0 +1,4 @@ +#include "quicklist.h" + +bool ql_set_insert_ex(struct quicklist **qlp, void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); +bool ql_set_find_ex(struct quicklist **qlp, int *qip, const void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); diff --git a/src/quicklist.h b/src/quicklist.h new file mode 100644 index 000000000..fe2f26991 --- /dev/null +++ b/src/quicklist.h @@ -0,0 +1,14 @@ +#pragma once + +#define selist quicklist +#define selist_free ql_free +#define selist_get ql_get +#define selist_push ql_push +#define selist_empty ql_empty +#define selist_advance ql_advance +#include +#include + +typedef void(*ql_cb)(void *); +bool ql_set_insert_ex(struct quicklist **qlp, void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); +bool ql_set_find_ex(struct quicklist **qlp, int *qip, const void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); From d9213c8f253decc10ea788569bd6365f8ad5d932 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 26 Jan 2017 10:12:12 +0100 Subject: [PATCH 07/84] WIP: still converting to clibs/selist --- clibs | 2 +- src/donations.c | 24 ++++++++++-------------- src/kernel/curse.c | 2 +- src/kernel/spell.c | 2 +- src/quicklist.c | 30 ++++++++++++++++++++++++++++-- src/quicklist.h | 5 +++++ src/travelthru.c | 28 ++++++++++++++++++++-------- src/util/message.c | 2 +- 8 files changed, 67 insertions(+), 28 deletions(-) diff --git a/clibs b/clibs index 339ac5680..daa9de083 160000 --- a/clibs +++ b/clibs @@ -1 +1 @@ -Subproject commit 339ac5680ec9027c88c4516c72b9da8233b6f3e3 +Subproject commit daa9de08314a75a4d77ef4e08c713088a96a5ca5 diff --git a/src/donations.c b/src/donations.c index c6e4308ac..0b1413a5f 100644 --- a/src/donations.c +++ b/src/donations.c @@ -59,22 +59,18 @@ void free_donations(void) { transfers = 0; } -static void report_transfer(faction *f1, faction *f2, region *r, int amount) { - struct message *msg = msg_message("donation", - "from to amount", f1, f2, amount); - r_addmessage(r, f1, msg); - r_addmessage(r, f2, msg); - msg_release(msg); +static void report_transfer(void *data) { + transfer *tf = (transfer *)data; + if (tf->amount > 0) { + struct message *msg = msg_message("donation", + "from to amount", tf->f1, tf->f2, tf->amount); + r_addmessage(tf->r, tf->f1, msg); + r_addmessage(tf->r, tf->f2, msg); + msg_release(msg); + } } void report_donations(void) { - ql_iter qli = qli_init(&transfers); - - while (qli_more(qli)) { - transfer *tf = (transfer *)qli_next(&qli); - if (tf->amount > 0) { - report_transfer(tf->f1, tf->f2, tf->r, tf->amount); - } - } + selist_foreach(transfers, report_transfer); } diff --git a/src/kernel/curse.c b/src/kernel/curse.c index 123f858f5..5e2086476 100644 --- a/src/kernel/curse.c +++ b/src/kernel/curse.c @@ -308,7 +308,7 @@ void ct_register(const curse_type * ct) unsigned int hash = tolower(ct->cname[0]) & 0xFF; quicklist **ctlp = cursetypes + hash; - ql_set_insert(ctlp, (void *)ct); + selist_set_insert(ctlp, (void *)ct, NULL); ++ct_changes; } diff --git a/src/kernel/spell.c b/src/kernel/spell.c index 8e14ec2c0..2644f341f 100644 --- a/src/kernel/spell.c +++ b/src/kernel/spell.c @@ -57,7 +57,7 @@ void free_spells(void) { void add_spell(struct quicklist **slistp, spell * sp) { - if (!ql_set_insert(slistp, sp)) { + if (!selist_set_insert(slistp, sp, NULL)) { log_error("add_spell: the list already contains the spell '%s'.\n", sp->sname); } } diff --git a/src/quicklist.c b/src/quicklist.c index 75d7b8641..2b760019c 100644 --- a/src/quicklist.c +++ b/src/quicklist.c @@ -1,4 +1,30 @@ #include "quicklist.h" +#include -bool ql_set_insert_ex(struct quicklist **qlp, void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); -bool ql_set_find_ex(struct quicklist **qlp, int *qip, const void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); +bool ql_set_remove(struct quicklist **qlp, const void *data) +{ + int qi, qn; + quicklist *ql = *qlp; + + if (!ql) + return false; + + qn = selist_length(ql); + for (qi = 0; qi != qn; ++qi) { + void *qd = selist_get(ql, qi); + if (qd == data) { + return selist_delete(qlp, qi) == 0; + } + } + return false; +} + +bool ql_set_insert(struct quicklist **qlp, void *data) +{ + return selist_set_insert(qlp, data, NULL); +} + +bool ql_set_find(struct quicklist **qlp, int *qip, const void *data) +{ + return selist_set_find(qlp, qip, data, NULL); +} diff --git a/src/quicklist.h b/src/quicklist.h index fe2f26991..c0446b471 100644 --- a/src/quicklist.h +++ b/src/quicklist.h @@ -2,7 +2,11 @@ #define selist quicklist #define selist_free ql_free +#define selist_delete ql_delete +#define selist_foreach ql_foreach #define selist_get ql_get +#define selist_replace ql_replace +#define selist_length ql_length #define selist_push ql_push #define selist_empty ql_empty #define selist_advance ql_advance @@ -12,3 +16,4 @@ typedef void(*ql_cb)(void *); bool ql_set_insert_ex(struct quicklist **qlp, void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); bool ql_set_find_ex(struct quicklist **qlp, int *qip, const void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); + diff --git a/src/travelthru.c b/src/travelthru.c index 5e6cac41b..04ca6cee5 100644 --- a/src/travelthru.c +++ b/src/travelthru.c @@ -99,18 +99,30 @@ bool travelthru_cansee(const struct region *r, const struct faction *f, const st return false; } -void travelthru_map(region * r, void(*cb)(region *, struct unit *, void *), void *cbdata) +struct cb_data { + void(*call)(region *, struct unit *, void *); + void *data; + struct region *r; +}; + +void cb_map(void *data, void *ex) { + struct cb_data *cb = (struct cb_data *)ex; + struct unit *u = (struct unit *)data; + cb->call(cb->r, u, cb->data); +} + +void travelthru_map(region * r, void(*cb)(region *, struct unit *, void *), void *data) { attrib *a; + struct cb_data cbdata; + assert(r); + cbdata.call = cb; + cbdata.data = data; + cbdata.r = r; a = a_find(r->attribs, &at_travelunit); if (a) { - quicklist *ql; - ql_iter qi; - ql = (quicklist *)a->data.v; - for (qi = qli_init(&ql); qli_more(qi);) { - unit *u = (unit *)qli_next(&qi); - cb(r, u, cbdata); - } + quicklist *ql = (quicklist *)a->data.v; + selist_foreach_ex(ql, cb_map, &cbdata); } } diff --git a/src/util/message.c b/src/util/message.c index f19fc3313..46bfec969 100644 --- a/src/util/message.c +++ b/src/util/message.c @@ -215,7 +215,7 @@ const message_type *mt_register(message_type * type) unsigned int hash = hashstring(type->name) % MT_MAXHASH; quicklist **qlp = messagetypes + hash; - if (ql_set_insert(qlp, type)) { + if (selist_set_insert(qlp, type, NULL)) { type->key = mt_id(type); } return type; From 138258310968652cab4a6a7b0da14047902f5597 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 26 Jan 2017 10:15:26 +0100 Subject: [PATCH 08/84] fix compilation (but not linking). --- src/sqlite.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sqlite.c b/src/sqlite.c index 42bfdb3b5..99c72d9ec 100644 --- a/src/sqlite.c +++ b/src/sqlite.c @@ -136,10 +136,12 @@ static void update_faction(sqlite3 *db, const faction *f) { int db_update_factions(sqlite3 * db, bool force, int game_id) { quicklist *ql = read_factions(db, game_id); faction *f; + if (!ql) return SQLITE_OK; sqlite3_exec(db, "BEGIN", 0, 0, 0); for (f = factions; f; f = f->next) { bool update = force; db_faction *dbf = 0; +#ifdef SELIST_TODO ql_iter it = qli_init(&ql); while (qli_more(it)) { db_faction *df = (db_faction*)qli_next(&it); @@ -151,6 +153,7 @@ int db_update_factions(sqlite3 * db, bool force, int game_id) { break; } } +#endif if (dbf) { if (dbf->uid != f->subscription) { log_warning("faction %s(%d) not found in database, but matches %d\n", itoa36(f->no), f->subscription, dbf->uid); From c72b050a4235ea0aa84f0cdc8e67a7704beed06c Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 26 Jan 2017 10:53:52 +0100 Subject: [PATCH 09/84] WIP: quicklist->selist shim can compile and link, but tests crash --- src/donations.c | 12 ++++++------ src/quicklist.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/quicklist.h | 19 +++++++++---------- src/reports.c | 2 +- 4 files changed, 61 insertions(+), 17 deletions(-) diff --git a/src/donations.c b/src/donations.c index 0b1413a5f..4dee36444 100644 --- a/src/donations.c +++ b/src/donations.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include @@ -15,7 +15,7 @@ typedef struct transfer { int amount; } transfer; -static quicklist *transfers = 0; +static selist *transfers = 0; int cmp_transfer(const void *v1, const void *v2) { const transfer *t1 = (const transfer *)v1; @@ -35,22 +35,22 @@ int cmp_transfer(const void *v1, const void *v2) { void add_donation(faction * f1, faction * f2, int amount, region * r) { transfer tr, *tf; - quicklist *ql = transfers; + selist *ql = transfers; int qi = 0; tr.r = r; tr.f1 = f1; tr.f2 = f2; tr.amount = amount; - if (ql_set_find_ex(&ql, &qi, &tr, cmp_transfer)) { - tf = (transfer *)ql_get(ql, qi); + if (selist_set_find(&ql, &qi, &tr, cmp_transfer)) { + tf = (transfer *)selist_get(ql, qi); tf->amount += amount; } else { tf = malloc(sizeof(transfer)); memcpy(tf, &tr, sizeof(transfer)); } - ql_set_insert_ex(&transfers, tf, cmp_transfer); + selist_set_insert(&transfers, tf, cmp_transfer); } void free_donations(void) { diff --git a/src/quicklist.c b/src/quicklist.c index 2b760019c..6fb567a64 100644 --- a/src/quicklist.c +++ b/src/quicklist.c @@ -1,6 +1,51 @@ #include "quicklist.h" #include +void ql_push(struct quicklist **qlp, void *el) +{ + selist_push(qlp, el); +} + +int ql_length(const struct quicklist *ql) +{ + return selist_length(ql); +} + +void * ql_replace(struct quicklist *ql, int index, void *el) +{ + return selist_replace(ql, index, el); +} + +void *ql_get(struct quicklist *ql, int index) +{ + return selist_get(ql, index); +} + +int ql_delete(struct quicklist **qlp, int index) +{ + return selist_delete(qlp, index); +} + +bool ql_empty(const struct quicklist *ql) +{ + return selist_empty(ql); +} + +void ql_foreach(struct quicklist *ql, selist_cb cb) +{ + selist_foreach(ql, cb); +} + +int ql_advance(struct quicklist **qlp, int *index, int stride) +{ + return selist_advance(qlp, index, stride); +} + +void ql_free(struct quicklist *ql) +{ + selist_free(ql); +} + bool ql_set_remove(struct quicklist **qlp, const void *data) { int qi, qn; diff --git a/src/quicklist.h b/src/quicklist.h index c0446b471..f5a85a354 100644 --- a/src/quicklist.h +++ b/src/quicklist.h @@ -1,18 +1,17 @@ #pragma once #define selist quicklist -#define selist_free ql_free -#define selist_delete ql_delete -#define selist_foreach ql_foreach -#define selist_get ql_get -#define selist_replace ql_replace -#define selist_length ql_length -#define selist_push ql_push -#define selist_empty ql_empty -#define selist_advance ql_advance #include -#include +int ql_advance(struct quicklist **qlp, int *index, int stride); +void ql_foreach(struct quicklist *ql, selist_cb cb); +void ql_free(struct quicklist *ql); +int ql_delete(struct quicklist **qlp, int index); +void ql_push(struct quicklist **qlp, void *el); +int ql_length(const struct quicklist *ql); +void * ql_replace(struct quicklist *ql, int index, void *el); +void *ql_get(struct quicklist *ql, int index); +bool ql_empty(const struct quicklist *ql); typedef void(*ql_cb)(void *); bool ql_set_insert_ex(struct quicklist **qlp, void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); bool ql_set_find_ex(struct quicklist **qlp, int *qip, const void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); diff --git a/src/reports.c b/src/reports.c index a8b9e5cfb..3e139fdda 100644 --- a/src/reports.c +++ b/src/reports.c @@ -989,7 +989,7 @@ int cmp_faction(const void *lhs, const void *rhs) { } static void add_seen_faction_i(struct quicklist **flist, faction *f) { - ql_set_insert_ex(flist, f, cmp_faction); + selist_set_insert(flist, f, cmp_faction); } void add_seen_faction(faction *self, faction *seen) { From 2ace44d385ab00cfb0c5f1d91e1ea719781a9e30 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 26 Jan 2017 16:05:44 +0100 Subject: [PATCH 10/84] fix duplicate cutest library conflict and crash --- .gitmodules | 3 --- CMakeLists.txt | 1 - clibs | 2 +- cutest | 1 - src/CMakeLists.txt | 3 +-- 5 files changed, 2 insertions(+), 8 deletions(-) delete mode 160000 cutest diff --git a/.gitmodules b/.gitmodules index e9ea1e3ed..7dff5ab6a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,9 +7,6 @@ [submodule "dlmalloc"] path = dlmalloc url = https://github.com/ennorehling/dlmalloc.git -[submodule "cutest"] - path = cutest - url = https://github.com/ennorehling/cutest.git [submodule "iniparser"] path = iniparser url = https://github.com/ennorehling/iniparser.git diff --git a/CMakeLists.txt b/CMakeLists.txt index cc7e8173d..f6b931e61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,7 +64,6 @@ INCLUDE_DIRECTORIES (${CMAKE_BINARY_DIR}/include) ## skip compiler/libc detection and force cmake autoconf: #add_definitions(-DUSE_AUTOCONF) -add_subdirectory (cutest) add_subdirectory (cJSON) add_subdirectory (storage) add_subdirectory (iniparser) diff --git a/clibs b/clibs index daa9de083..1052905e0 160000 --- a/clibs +++ b/clibs @@ -1 +1 @@ -Subproject commit daa9de08314a75a4d77ef4e08c713088a96a5ca5 +Subproject commit 1052905e08314de8778750d7585474182723111e diff --git a/cutest b/cutest deleted file mode 160000 index 6e268687d..000000000 --- a/cutest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6e268687dbf6ae55afb63210c3753530d216a622 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 06af86c8b..6eacaae0b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,7 +5,6 @@ include_directories (${CMAKE_CURRENT_SOURCE_DIR}) include_directories (${CJSON_INCLUDE_DIR}) include_directories (${CLIBS_INCLUDE_DIR}) include_directories (${STORAGE_INCLUDE_DIR}) -include_directories (${CUTEST_INCLUDE_DIR}) include_directories (${LUA_INCLUDE_DIR}) include_directories (${TOLUA_INCLUDE_DIR}) include_directories (${BSON_INCLUDE_DIR}) @@ -236,7 +235,7 @@ set(TESTS_SRC add_executable(test_eressea ${TESTS_SRC}) target_link_libraries(test_eressea game - ${CUTEST_LIBRARIES} + cutest ${LUA_LIBRARIES} ${CLIBS_LIBRARIES} ${STORAGE_LIBRARIES} From a4badc0a75695d044b8ed5be798a525cab28f0a6 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 26 Jan 2017 17:41:21 +0100 Subject: [PATCH 11/84] remove quicklist shim, use selist everywhere --- src/CMakeLists.txt | 1 - src/battle.c | 44 +++++++++++----------- src/battle.h | 12 +++--- src/bind_unit.c | 8 ++-- src/bindings.c | 42 ++++++++++----------- src/bindings.h | 6 +-- src/creport.c | 16 ++++---- src/kernel/alliance.c | 19 +++++----- src/kernel/alliance.h | 3 +- src/kernel/alliance.test.c | 6 +-- src/kernel/building.c | 22 +++++------ src/kernel/building.h | 2 +- src/kernel/connection.c | 12 +++--- src/kernel/curse.c | 28 +++++++------- src/kernel/equipment.c | 14 +++---- src/kernel/equipment.h | 2 +- src/kernel/faction.c | 12 +++--- src/kernel/faction.h | 3 +- src/kernel/faction.test.c | 6 +-- src/kernel/pathfinder.c | 8 ++-- src/kernel/pathfinder.h | 2 +- src/kernel/save.c | 4 +- src/kernel/ship.c | 22 +++++------ src/kernel/ship.h | 2 +- src/kernel/spell.c | 20 +++++----- src/kernel/spell.h | 6 +-- src/kernel/spellbook.c | 30 +++++++-------- src/kernel/spellbook.h | 4 +- src/kernel/types.h | 2 +- src/laws.c | 8 ++-- src/magic.c | 30 +++++++-------- src/magic.h | 4 +- src/magic.test.c | 12 +++--- src/market.c | 16 ++++---- src/modules/autoseed.c | 42 ++++++++++----------- src/monsters.c | 10 ++--- src/quicklist.c | 75 -------------------------------------- src/quicklist.h | 18 --------- src/report.c | 10 ++--- src/reports.c | 53 +++++++++++++-------------- src/reports.h | 8 ++-- src/reports.test.c | 14 +++---- src/spells/combatspells.c | 66 ++++++++++++++++----------------- src/sqlite.c | 20 +++++----- src/travelthru.c | 14 +++---- src/util/message.c | 18 ++++----- src/wormhole.c | 20 +++++----- src/wormhole.test.c | 12 +++--- 48 files changed, 360 insertions(+), 448 deletions(-) delete mode 100644 src/quicklist.c delete mode 100644 src/quicklist.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6eacaae0b..a3f81e1a2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -87,7 +87,6 @@ set (ERESSEA_SRC move.c piracy.c spells.c - quicklist.c battle.c alchemy.c academy.c diff --git a/src/battle.c b/src/battle.c index 7aa3e4cfa..28a08c6f3 100644 --- a/src/battle.c +++ b/src/battle.c @@ -64,7 +64,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include -#include +#include #include #include @@ -1248,7 +1248,7 @@ terminate(troop dt, troop at, int type, const char *damage, bool missile) rda = 0; else { int qi; - quicklist *ql; + selist *ql; unsigned int i = 0; if (u_race(du)->battle_flags & BF_RES_PIERCE) @@ -1262,8 +1262,8 @@ terminate(troop dt, troop at, int type, const char *damage, bool missile) rda /= 2; /* Schilde */ - for (qi = 0, ql = b->meffects; ql; ql_advance(&ql, &qi, 1)) { - meffect *me = (meffect *)ql_get(ql, qi); + for (qi = 0, ql = b->meffects; ql; selist_advance(&ql, &qi, 1)) { + meffect *me = (meffect *)selist_get(ql, qi); if (meffect_protection(b, me, ds) != 0) { assert(0 <= rda); /* rda sollte hier immer mindestens 0 sein */ /* jeder Schaden wird um effect% reduziert bis der Schild duration @@ -1603,11 +1603,11 @@ static troop select_opponent(battle * b, troop at, int mindist, int maxdist) return dt; } -quicklist *fighters(battle * b, const side * vs, int minrow, int maxrow, +selist *fighters(battle * b, const side * vs, int minrow, int maxrow, int mask) { side *s; - quicklist *fightervp = 0; + selist *fightervp = 0; assert(vs != NULL); @@ -1629,7 +1629,7 @@ quicklist *fighters(battle * b, const side * vs, int minrow, int maxrow, for (fig = s->fighters; fig; fig = fig->next) { int row = get_unitrow(fig, vs); if (row >= minrow && row <= maxrow) { - ql_push(&fightervp, fig); + selist_push(&fightervp, fig); } } } @@ -1801,7 +1801,7 @@ static void do_combatspell(troop at) unit *caster = fi->unit; battle *b = fi->side->battle; region *r = b->region; - quicklist *ql; + selist *ql; int level, qi; double power; int fumblechance = 0; @@ -1830,8 +1830,8 @@ static void do_combatspell(troop at) return; } - for (qi = 0, ql = b->meffects; ql; ql_advance(&ql, &qi, 1)) { - meffect *mblock = (meffect *)ql_get(ql, qi); + for (qi = 0, ql = b->meffects; ql; selist_advance(&ql, &qi, 1)) { + meffect *mblock = (meffect *)selist_get(ql, qi); if (mblock->typ == SHIELD_BLOCK) { if (meffect_blocked(b, mblock, fi->side) != 0) { fumblechance += mblock->duration; @@ -2341,11 +2341,11 @@ static void add_tactics(tactics * ta, fighter * fig, int value) if (value == 0 || value < ta->value) return; if (value > ta->value) { - ql_free(ta->fighters); + selist_free(ta->fighters); ta->fighters = 0; } - ql_push(&ta->fighters, fig); - ql_push(&fig->side->battle->leaders, fig); + selist_push(&ta->fighters, fig); + selist_push(&fig->side->battle->leaders, fig); ta->value = value; } @@ -3091,7 +3091,7 @@ static void print_stats(battle * b) b->max_tactics = 0; for (s = b->sides; s != b->sides + b->nsides; ++s) { - if (!ql_empty(s->leader.fighters)) { + if (!selist_empty(s->leader.fighters)) { b->max_tactics = _max(b->max_tactics, s->leader.value); } } @@ -3099,11 +3099,11 @@ static void print_stats(battle * b) if (b->max_tactics > 0) { for (s = b->sides; s != b->sides + b->nsides; ++s) { if (s->leader.value == b->max_tactics) { - quicklist *ql; + selist *ql; int qi; - for (qi = 0, ql = s->leader.fighters; ql; ql_advance(&ql, &qi, 1)) { - fighter *tf = (fighter *)ql_get(ql, qi); + for (qi = 0, ql = s->leader.fighters; ql; selist_advance(&ql, &qi, 1)) { + fighter *tf = (fighter *)selist_get(ql, qi); unit *u = tf->unit; message *m = NULL; if (!is_attacker(tf)) { @@ -3599,7 +3599,7 @@ battle *make_battle(region * r) static void free_side(side * si) { - ql_free(si->leader.fighters); + selist_free(si->leader.fighters); } static void free_fighter(fighter * fig) @@ -3647,9 +3647,9 @@ void free_battle(battle * b) free(bf); } - ql_free(b->leaders); - ql_foreach(b->meffects, free); - ql_free(b->meffects); + selist_free(b->leaders); + selist_foreach(b->meffects, free); + selist_free(b->meffects); battle_free(b); } @@ -4242,7 +4242,7 @@ void do_battle(region * r) freset(sh, SF_DAMAGED); /* Gibt es eine Taktikrunde ? */ - if (!ql_empty(b->leaders)) { + if (!selist_empty(b->leaders)) { b->turn = 0; b->has_tactics_turn = true; } diff --git a/src/battle.h b/src/battle.h index 007bda008..cee894b6c 100644 --- a/src/battle.h +++ b/src/battle.h @@ -25,6 +25,9 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. extern "C" { #endif + struct message; + struct selist; + /** more defines **/ #define FS_ENEMY 1 #define FS_HELP 2 @@ -43,7 +46,6 @@ extern "C" { #define LAST_ROW FLEE_ROW #define MAXSIDES 192 /* if there are ever more than this, we're fucked. */ - struct message; typedef struct bfaction { struct bfaction *next; @@ -53,7 +55,7 @@ extern "C" { } bfaction; typedef struct tactics { - struct quicklist *fighters; + struct selist *fighters; int value; } tactics; @@ -86,7 +88,7 @@ extern "C" { } side; typedef struct battle { - struct quicklist *leaders; + struct selist *leaders; struct region *region; struct plane *plane; bfaction *factions; @@ -94,7 +96,7 @@ extern "C" { int nfighters; side sides[MAXSIDES]; int nsides; - struct quicklist *meffects; + struct selist *meffects; int max_tactics; int turn; bool has_tactics_turn; @@ -253,7 +255,7 @@ extern "C" { extern int hits(troop at, troop dt, weapon * awp); extern void damage_building(struct battle *b, struct building *bldg, int damage_abs); - struct quicklist *fighters(struct battle *b, const struct side *vs, + struct selist *fighters(struct battle *b, const struct side *vs, int minrow, int maxrow, int mask); int count_allies(const struct side *as, int minrow, int maxrow, int select, int allytype); diff --git a/src/bind_unit.c b/src/bind_unit.c index 42fafae39..1983e0f62 100755 --- a/src/bind_unit.c +++ b/src/bind_unit.c @@ -46,7 +46,7 @@ without prior permission by the authors of Eressea. #include #include #include -#include +#include #include @@ -753,12 +753,12 @@ static int tolua_unit_get_spells(lua_State * L) unit *self = (unit *) tolua_tousertype(L, 1, 0); sc_mage *mage = self ? get_mage(self) : 0; spellbook *sb = mage ? mage->spellbook : 0; - quicklist *slist = 0; + selist *slist = 0; if (sb) { - quicklist **slist_ptr = &sb->spells; + selist **slist_ptr = &sb->spells; slist = *slist_ptr; } - return tolua_quicklist_push(L, "spellbook", "spell_entry", slist); + return tolua_selist_push(L, "spellbook", "spell_entry", slist); } static int tolua_unit_get_orders(lua_State * L) diff --git a/src/bindings.c b/src/bindings.c index aa2e177c1..53eafdcb4 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -66,7 +66,7 @@ without prior permission by the authors of Eressea. #include #include #include -#include +#include #include #include #include @@ -114,16 +114,16 @@ int tolua_orderlist_next(lua_State * L) return 0; } -static int tolua_quicklist_iter(lua_State * L) +static int tolua_selist_iter(lua_State * L) { - quicklist **qlp = (quicklist **)lua_touserdata(L, lua_upvalueindex(1)); - quicklist *ql = *qlp; + selist **qlp = (selist **)lua_touserdata(L, lua_upvalueindex(1)); + selist *ql = *qlp; if (ql != NULL) { int index = (int)lua_tointeger(L, lua_upvalueindex(2)); const char *type = lua_tostring(L, lua_upvalueindex(3)); - void *data = ql_get(ql, index); + void *data = selist_get(ql, index); tolua_pushusertype(L, data, TOLUA_CAST type); - ql_advance(qlp, &index, 1); + selist_advance(qlp, &index, 1); lua_pushinteger(L, index); lua_replace(L, lua_upvalueindex(2)); return 1; @@ -131,18 +131,18 @@ static int tolua_quicklist_iter(lua_State * L) return 0; } -int tolua_quicklist_push(struct lua_State *L, const char *list_type, - const char *elem_type, struct quicklist *list) +int tolua_selist_push(struct lua_State *L, const char *list_type, + const char *elem_type, struct selist *list) { if (list) { - quicklist **qlist_ptr = - (quicklist **)lua_newuserdata(L, sizeof(quicklist *)); + selist **qlist_ptr = + (selist **)lua_newuserdata(L, sizeof(selist *)); *qlist_ptr = list; luaL_getmetatable(L, list_type); lua_setmetatable(L, -2); lua_pushinteger(L, 0); lua_pushstring(L, elem_type); - lua_pushcclosure(L, tolua_quicklist_iter, 3); /* OBS: this closure has multiple upvalues (list, index, type_name) */ + lua_pushcclosure(L, tolua_selist_iter, 3); /* OBS: this closure has multiple upvalues (list, index, type_name) */ } else { lua_pushnil(L); @@ -671,7 +671,7 @@ static int tolua_get_factions(lua_State * L) static int tolua_get_alliance_factions(lua_State * L) { alliance *self = (alliance *)tolua_tousertype(L, 1, 0); - return tolua_quicklist_push(L, "faction_list", "faction", self->members); + return tolua_selist_push(L, "faction_list", "faction", self->members); } static int tolua_get_alliance_id(lua_State * L) @@ -697,11 +697,11 @@ static int tolua_set_alliance_name(lua_State * L) static int config_get_ships(lua_State * L) { - quicklist *ql; + selist *ql; int qi, i = 0; - lua_createtable(L, ql_length(shiptypes), 0); - for (qi = 0, ql = shiptypes; ql; ql_advance(&ql, &qi, 1)) { - ship_type *stype = (ship_type *)ql_get(ql, qi); + lua_createtable(L, selist_length(shiptypes), 0); + for (qi = 0, ql = shiptypes; ql; selist_advance(&ql, &qi, 1)) { + ship_type *stype = (ship_type *)selist_get(ql, qi); tolua_pushstring(L, TOLUA_CAST stype->_name); lua_rawseti(L, -2, ++i); } @@ -710,11 +710,11 @@ static int config_get_ships(lua_State * L) static int config_get_buildings(lua_State * L) { - quicklist *ql; + selist *ql; int qi, i = 0; - lua_createtable(L, ql_length(buildingtypes), 0); - for (qi = 0, ql = buildingtypes; ql; ql_advance(&ql, &qi, 1)) { - building_type *btype = (building_type *)ql_get(ql, qi); + lua_createtable(L, selist_length(buildingtypes), 0); + for (qi = 0, ql = buildingtypes; ql; selist_advance(&ql, &qi, 1)) { + building_type *btype = (building_type *)selist_get(ql, qi); tolua_pushstring(L, TOLUA_CAST btype->_name); lua_rawseti(L, -2, ++i); } @@ -936,7 +936,7 @@ static int tolua_get_spell_entry_level(lua_State * L) static int tolua_get_spells(lua_State * L) { - return tolua_quicklist_push(L, "spell_list", "spell", spells); + return tolua_selist_push(L, "spell_list", "spell", spells); } static int init_data(const char *filename, const char *catalog) diff --git a/src/bindings.h b/src/bindings.h index 6c71ecf94..8eda1178b 100755 --- a/src/bindings.h +++ b/src/bindings.h @@ -15,15 +15,15 @@ extern "C" { #endif struct lua_State; - struct quicklist; + struct selist; int tolua_sqlite_open(struct lua_State *L); int tolua_bindings_open(struct lua_State *L); int tolua_spelllist_next(struct lua_State *L); int tolua_itemlist_next(struct lua_State *L); int tolua_orderlist_next(struct lua_State *L); - int tolua_quicklist_push(struct lua_State *L, const char *list_type, - const char *elem_type, struct quicklist *list); + int tolua_selist_push(struct lua_State *L, const char *list_type, + const char *elem_type, struct selist *list); int log_lua_error(struct lua_State *L); diff --git a/src/creport.c b/src/creport.c index eeb2a1202..6cd9b7a27 100644 --- a/src/creport.c +++ b/src/creport.c @@ -68,7 +68,7 @@ without prior permission by the authors of Eressea. #include #include #include -#include +#include #include #include @@ -712,11 +712,11 @@ static void cr_output_spells(stream *out, const unit * u, int maxlevel) if (book) { const faction * f = u->faction; - quicklist *ql; + selist *ql; int qi, header = 0; - for (ql = book->spells, qi = 0; ql; ql_advance(&ql, &qi, 1)) { - spellbook_entry * sbe = (spellbook_entry *)ql_get(ql, qi); + for (ql = book->spells, qi = 0; ql; selist_advance(&ql, &qi, 1)) { + spellbook_entry * sbe = (spellbook_entry *)selist_get(ql, qi); if (sbe->level <= maxlevel) { spell * sp = sbe->sp; const char *name = translate(mkname("spell", sp->sname), spell_name(sp, f->locale)); @@ -1027,12 +1027,12 @@ static void show_alliances_cr(FILE * F, const faction * f) /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ /* this is a copy of laws.c->find_address output changed. */ -static void cr_find_address(FILE * F, const faction * uf, quicklist * addresses) +static void cr_find_address(FILE * F, const faction * uf, selist * addresses) { int i = 0; - quicklist *flist = addresses; + selist *flist = addresses; while (flist) { - const faction *f = (const faction *)ql_get(flist, i); + const faction *f = (const faction *)selist_get(flist, i); if (uf != f) { fprintf(F, "PARTEI %d\n", f->no); fprintf(F, "\"%s\";Parteiname\n", f->name); @@ -1045,7 +1045,7 @@ static void cr_find_address(FILE * F, const faction * uf, quicklist * addresses) fprintf(F, "%d;alliance\n", f->alliance->id); } } - ql_advance(&flist, &i, 1); + selist_advance(&flist, &i, 1); } } diff --git a/src/kernel/alliance.c b/src/kernel/alliance.c index 36d054323..32c58e246 100644 --- a/src/kernel/alliance.c +++ b/src/kernel/alliance.c @@ -31,10 +31,11 @@ without prior permission by the authors of Eressea. #include #include #include -#include #include #include +#include + /* libc includes */ #include #include @@ -49,7 +50,7 @@ void free_alliances(void) alliances = al->next; free(al->name); if (al->members) { - ql_free(al->members); + selist_free(al->members); } free(al); } @@ -115,7 +116,7 @@ faction *alliance_get_leader(alliance * al) { if (!al->_leader) { if (al->members) { - al->_leader = (faction *)ql_get(al->members, 0); + al->_leader = (faction *)selist_get(al->members, 0); } } return al->_leader; @@ -356,19 +357,19 @@ void setalliance(faction * f, alliance * al) return; if (f->alliance != NULL) { int qi; - quicklist **flistp = &f->alliance->members; + selist **flistp = &f->alliance->members; - for (qi = 0; *flistp; ql_advance(flistp, &qi, 1)) { - faction *data = (faction *)ql_get(*flistp, qi); + for (qi = 0; *flistp; selist_advance(flistp, &qi, 1)) { + faction *data = (faction *)selist_get(*flistp, qi); if (data == f) { - ql_delete(flistp, qi); + selist_delete(flistp, qi); break; } } if (f->alliance->_leader == f) { if (f->alliance->members) { - f->alliance->_leader = (faction *)ql_get(f->alliance->members, 0); + f->alliance->_leader = (faction *)selist_get(f->alliance->members, 0); } else { f->alliance->_leader = NULL; @@ -378,7 +379,7 @@ void setalliance(faction * f, alliance * al) f->alliance = al; f->alliance_joindate = turn; if (al != NULL) { - ql_push(&al->members, f); + selist_push(&al->members, f); if (al->_leader == NULL) { al->_leader = f; } diff --git a/src/kernel/alliance.h b/src/kernel/alliance.h index 907fc65f7..fac2dfd38 100644 --- a/src/kernel/alliance.h +++ b/src/kernel/alliance.h @@ -27,6 +27,7 @@ extern "C" { struct unit; struct faction; struct region; + struct selist; enum { ALLIANCE_KICK, @@ -46,7 +47,7 @@ extern "C" { typedef struct alliance { struct alliance *next; struct faction *_leader; - struct quicklist *members; + struct selist *members; int flags; int id; char *name; diff --git a/src/kernel/alliance.test.c b/src/kernel/alliance.test.c index 72a31a42c..c0ec03fbc 100644 --- a/src/kernel/alliance.test.c +++ b/src/kernel/alliance.test.c @@ -7,7 +7,7 @@ #include "alliance.h" #include #include -#include +#include #include @@ -76,10 +76,10 @@ static void test_alliance_dead_faction(CuTest *tc) { setalliance(f, al); setalliance(f2, al); CuAssertPtrEquals(tc, f, alliance_get_leader(al)); - CuAssertIntEquals(tc, 2, ql_length(al->members)); + CuAssertIntEquals(tc, 2, selist_length(al->members)); CuAssertPtrEquals(tc, al, f->alliance); destroyfaction(&factions); - CuAssertIntEquals(tc, 1, ql_length(al->members)); + CuAssertIntEquals(tc, 1, selist_length(al->members)); CuAssertPtrEquals(tc, f2, alliance_get_leader(al)); CuAssertPtrEquals(tc, NULL, f->alliance); CuAssertTrue(tc, !f->_alive); diff --git a/src/kernel/building.c b/src/kernel/building.c index 8d76df030..b445019de 100644 --- a/src/kernel/building.c +++ b/src/kernel/building.c @@ -41,7 +41,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include -#include +#include #include #include @@ -62,18 +62,18 @@ typedef struct building_typelist { building_type *type; } building_typelist; -quicklist *buildingtypes = NULL; +selist *buildingtypes = NULL; /* Returns a building type for the (internal) name */ static building_type *bt_find_i(const char *name) { - quicklist *ql; + selist *ql; int qi; assert(name); - for (qi = 0, ql = buildingtypes; ql; ql_advance(&ql, &qi, 1)) { - building_type *btype = (building_type *)ql_get(ql, qi); + for (qi = 0, ql = buildingtypes; ql; selist_advance(&ql, &qi, 1)) { + building_type *btype = (building_type *)selist_get(ql, qi); if (strcmp(btype->_name, name) == 0) return btype; } @@ -102,7 +102,7 @@ void bt_register(building_type * type) if (type->init) { type->init(type); } - ql_push(&buildingtypes, (void *)type); + selist_push(&buildingtypes, (void *)type); ++bt_changes; } @@ -115,8 +115,8 @@ static void free_buildingtype(void *ptr) { } void free_buildingtypes(void) { - ql_foreach(buildingtypes, free_buildingtype); - ql_free(buildingtypes); + selist_foreach(buildingtypes, free_buildingtype); + selist_free(buildingtypes); buildingtypes = 0; ++bt_changes; } @@ -314,15 +314,15 @@ const building_type *findbuildingtype(const char *name, bn = bn->next; } if (!bn) { - quicklist *ql = buildingtypes; + selist *ql = buildingtypes; int qi; bn = (local_names *)calloc(sizeof(local_names), 1); bn->next = bnames; bn->lang = lang; - for (qi = 0, ql = buildingtypes; ql; ql_advance(&ql, &qi, 1)) { - building_type *btype = (building_type *)ql_get(ql, qi); + for (qi = 0, ql = buildingtypes; ql; selist_advance(&ql, &qi, 1)) { + building_type *btype = (building_type *)selist_get(ql, qi); const char *n = LOC(lang, btype->_name); type.v = (void *)btype; diff --git a/src/kernel/building.h b/src/kernel/building.h index 92b006b98..754f38f07 100644 --- a/src/kernel/building.h +++ b/src/kernel/building.h @@ -80,7 +80,7 @@ extern "C" { struct attrib *attribs; } building_type; - extern struct quicklist *buildingtypes; + extern struct selist *buildingtypes; extern struct attrib_type at_building_action; building_type *bt_get_or_create(const char *name); diff --git a/src/kernel/connection.c b/src/kernel/connection.c index 6eccf1f0c..082039f1b 100644 --- a/src/kernel/connection.c +++ b/src/kernel/connection.c @@ -29,7 +29,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include -#include +#include #include #include @@ -345,7 +345,7 @@ attrib_type at_countdown = { void age_borders(void) { - quicklist *deleted = NULL, *ql; + selist *deleted = NULL, *ql; int i; for (i = 0; i != BORDER_MAXHASH; ++i) { @@ -355,17 +355,17 @@ void age_borders(void) for (; b; b = b->next) { if (b->type->age) { if (b->type->age(b) == AT_AGE_REMOVE) { - ql_push(&deleted, b); + selist_push(&deleted, b); } } } } } - for (ql = deleted, i = 0; ql; ql_advance(&ql, &i, 1)) { - connection *b = (connection *)ql_get(ql, i); + for (ql = deleted, i = 0; ql; selist_advance(&ql, &i, 1)) { + connection *b = (connection *)selist_get(ql, i); erase_border(b); } - ql_free(deleted); + selist_free(deleted); } /******** diff --git a/src/kernel/curse.c b/src/kernel/curse.c index 5e2086476..c0e353b4f 100644 --- a/src/kernel/curse.c +++ b/src/kernel/curse.c @@ -287,10 +287,10 @@ attrib_type at_curse = { /* Spruch identifizieren */ #include -#include +#include #define MAXCTHASH 128 -static quicklist *cursetypes[MAXCTHASH]; +static selist *cursetypes[MAXCTHASH]; static int ct_changes = 1; bool ct_changed(int *cache) @@ -306,7 +306,7 @@ bool ct_changed(int *cache) void ct_register(const curse_type * ct) { unsigned int hash = tolower(ct->cname[0]) & 0xFF; - quicklist **ctlp = cursetypes + hash; + selist **ctlp = cursetypes + hash; selist_set_insert(ctlp, (void *)ct, NULL); ++ct_changes; @@ -315,16 +315,16 @@ void ct_register(const curse_type * ct) void ct_remove(const char *c) { unsigned int hash = tolower(c[0]); - quicklist *ctl = cursetypes[hash]; + selist *ctl = cursetypes[hash]; if (ctl) { int qi; - for (qi = 0; ctl; ql_advance(&ctl, &qi, 1)) { - curse_type *type = (curse_type *)ql_get(ctl, qi); + for (qi = 0; ctl; selist_advance(&ctl, &qi, 1)) { + curse_type *type = (curse_type *)selist_get(ctl, qi); if (strcmp(c, type->cname) == 0) { - ql_delete(&ctl, qi); + selist_delete(&ctl, qi); ++ct_changes; break; } @@ -335,14 +335,14 @@ void ct_remove(const char *c) const curse_type *ct_find(const char *c) { unsigned int hash = tolower(c[0]); - quicklist *ctl = cursetypes[hash]; + selist *ctl = cursetypes[hash]; if (ctl) { size_t c_len = strlen(c); int qi; - for (qi = 0; ctl; ql_advance(&ctl, &qi, 1)) { - curse_type *type = (curse_type *)ql_get(ctl, qi); + for (qi = 0; ctl; selist_advance(&ctl, &qi, 1)) { + curse_type *type = (curse_type *)selist_get(ctl, qi); if (strcmp(c, type->cname) == 0) { return type; @@ -360,12 +360,12 @@ const curse_type *ct_find(const char *c) void ct_checknames(void) { int i, qi; - quicklist *ctl; + selist *ctl; for (i = 0; i < MAXCTHASH; ++i) { ctl = cursetypes[i]; - for (qi = 0; ctl; ql_advance(&ctl, &qi, 1)) { - curse_type *type = (curse_type *)ql_get(ctl, qi); + for (qi = 0; ctl; selist_advance(&ctl, &qi, 1)) { + curse_type *type = (curse_type *)selist_get(ctl, qi); curse_name(type, default_locale); } @@ -847,7 +847,7 @@ double destr_curse(curse * c, int cast_level, double force) void curses_done(void) { int i; for (i = 0; i != MAXCTHASH; ++i) { - ql_free(cursetypes[i]); + selist_free(cursetypes[i]); cursetypes[i] = 0; } ++ct_changes; diff --git a/src/kernel/equipment.c b/src/kernel/equipment.c index 8266ada9a..de539223f 100644 --- a/src/kernel/equipment.c +++ b/src/kernel/equipment.c @@ -28,7 +28,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "spell.h" /* util includes */ -#include +#include #include #include @@ -99,7 +99,7 @@ void equipment_addspell(equipment * eq, const char * name, int level) ls->sp = NULL; ls->level = level; ls->name = _strdup(name); - ql_push(&eq->spells, ls); + selist_push(&eq->spells, ls); } } @@ -156,12 +156,12 @@ void equip_unit_mask(struct unit *u, const struct equipment *eq, int mask) if (mask & EQUIP_SPELLS) { if (eq->spells) { - quicklist * ql = eq->spells; + selist * ql = eq->spells; int qi; sc_mage * mage = get_mage(u); - for (qi = 0; ql; ql_advance(&ql, &qi, 1)) { - lazy_spell *sbe = (lazy_spell *)ql_get(ql, qi); + for (qi = 0; ql; selist_advance(&ql, &qi, 1)) { + lazy_spell *sbe = (lazy_spell *)selist_get(ql, qi); if (!sbe->sp) { sbe->sp = find_spell(sbe->name); free(sbe->name); @@ -250,8 +250,8 @@ void equipment_done(void) { *eqp = eq->next; free(eq->name); if (eq->spells) { - ql_foreach(eq->spells, free_ls); - ql_free(eq->spells); + selist_foreach(eq->spells, free_ls); + selist_free(eq->spells); } while (eq->items) { itemdata *next = eq->items->next; diff --git a/src/kernel/equipment.h b/src/kernel/equipment.h index 5c7b3407b..4081ab748 100644 --- a/src/kernel/equipment.h +++ b/src/kernel/equipment.h @@ -48,7 +48,7 @@ extern "C" { char *name; struct itemdata *items; char *skills[MAXSKILLS]; - struct quicklist *spells; + struct selist *spells; struct subset *subsets; struct equipment *next; void(*callback) (const struct equipment *, struct unit *); diff --git a/src/kernel/faction.c b/src/kernel/faction.c index d332bf604..4d2e6ae7b 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -51,7 +51,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include -#include +#include #include /* libc includes */ @@ -102,7 +102,7 @@ static void free_faction(faction * f) free(f->_password); free(f->name); if (f->seen_factions) { - ql_free(f->seen_factions); + selist_free(f->seen_factions); f->seen_factions = 0; } @@ -366,7 +366,7 @@ void destroyfaction(faction ** fp) } if (f->seen_factions) { - ql_free(f->seen_factions); + selist_free(f->seen_factions); f->seen_factions = 0; } @@ -593,11 +593,11 @@ static int allied_skillcount(const faction * f, skill_t sk) { int num = 0; alliance *a = f_get_alliance(f); - quicklist *members = a->members; + selist *members = a->members; int qi; - for (qi = 0; members; ql_advance(&members, &qi, 1)) { - faction *m = (faction *)ql_get(members, qi); + for (qi = 0; members; selist_advance(&members, &qi, 1)) { + faction *m = (faction *)selist_get(members, qi); num += count_skill(m, sk); } return num; diff --git a/src/kernel/faction.h b/src/kernel/faction.h index 82ae89ea4..d6419dd2f 100644 --- a/src/kernel/faction.h +++ b/src/kernel/faction.h @@ -31,6 +31,7 @@ extern "C" { struct seen_region; struct attrib_type; struct gamedata; + struct selist; extern struct attrib_type at_maxmagicians; @@ -95,7 +96,7 @@ extern "C" { struct message_list *msgs; } *battles; struct item *items; /* items this faction can claim */ - struct quicklist *seen_factions; + struct selist *seen_factions; bool _alive; /* enno: sollte ein flag werden */ } faction; diff --git a/src/kernel/faction.test.c b/src/kernel/faction.test.c index 75ced96df..596c92907 100644 --- a/src/kernel/faction.test.c +++ b/src/kernel/faction.test.c @@ -13,7 +13,7 @@ #include "monster.h" #include #include -#include +#include #include #include @@ -47,10 +47,10 @@ static void test_remove_empty_factions_alliance(CuTest *tc) { al = makealliance(0, "Hodor"); setalliance(f, al); CuAssertPtrEquals(tc, f, alliance_get_leader(al)); - CuAssertIntEquals(tc, 1, ql_length(al->members)); + CuAssertIntEquals(tc, 1, selist_length(al->members)); remove_empty_factions(); CuAssertPtrEquals(tc, 0, al->_leader); - CuAssertIntEquals(tc, 0, ql_length(al->members)); + CuAssertIntEquals(tc, 0, selist_length(al->members)); test_cleanup(); } diff --git a/src/kernel/pathfinder.c b/src/kernel/pathfinder.c index 8ae9bf128..ba45f926c 100644 --- a/src/kernel/pathfinder.c +++ b/src/kernel/pathfinder.c @@ -18,7 +18,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include -#include +#include #include "pathfinder.h" #include "region.h" @@ -102,10 +102,10 @@ static void free_nodes(node * root) } } -struct quicklist *regions_in_range(struct region *start, int maxdist, +struct selist *regions_in_range(struct region *start, int maxdist, bool(*allowed) (const struct region *, const struct region *)) { - quicklist * rlist = NULL; + selist * rlist = NULL; node *root = new_node(start, 0, NULL); node **end = &root->next; node *n = root; @@ -127,7 +127,7 @@ struct quicklist *regions_in_range(struct region *start, int maxdist, continue; /* can't go there */ /* add the region to the list of available ones. */ - ql_push(&rlist, rn); + selist_push(&rlist, rn); /* make sure we don't go here again, and put the region into the set for further BFS'ing */ diff --git a/src/kernel/pathfinder.h b/src/kernel/pathfinder.h index 81692e835..682fa4d25 100644 --- a/src/kernel/pathfinder.h +++ b/src/kernel/pathfinder.h @@ -34,7 +34,7 @@ extern "C" { const struct region *target); extern bool allowed_walk(const struct region *src, const struct region *target); - extern struct quicklist *regions_in_range(struct region *src, int maxdist, + extern struct selist *regions_in_range(struct region *src, int maxdist, bool(*allowed) (const struct region *, const struct region *)); extern void pathfinder_cleanup(void); diff --git a/src/kernel/save.c b/src/kernel/save.c index 2f157af41..68c89070c 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -71,7 +71,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include -#include +#include #include #include #include @@ -1266,7 +1266,7 @@ faction *read_faction(struct gamedata * data) assert(!al->members || !"non-allied dummy-alliance has more than one member"); } - ql_push(&al->members, f); + selist_push(&al->members, f); } else if (rule_region_owners()) { /* compat fix for non-allied factions */ diff --git a/src/kernel/ship.c b/src/kernel/ship.c index 6898630ff..1790afb5d 100644 --- a/src/kernel/ship.c +++ b/src/kernel/ship.c @@ -38,7 +38,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include -#include +#include #include #include @@ -51,7 +51,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include -quicklist *shiptypes = NULL; +selist *shiptypes = NULL; static local_names *snames; @@ -66,15 +66,15 @@ const ship_type *findshiptype(const char *name, const struct locale *lang) sn = sn->next; } if (!sn) { - quicklist *ql; + selist *ql; int qi; sn = (local_names *)calloc(sizeof(local_names), 1); sn->next = snames; sn->lang = lang; - for (qi = 0, ql = shiptypes; ql; ql_advance(&ql, &qi, 1)) { - ship_type *stype = (ship_type *)ql_get(ql, qi); + for (qi = 0, ql = shiptypes; ql; selist_advance(&ql, &qi, 1)) { + ship_type *stype = (ship_type *)selist_get(ql, qi); variant var2; const char *n = LOC(lang, stype->_name); var2.v = (void *)stype; @@ -89,11 +89,11 @@ const ship_type *findshiptype(const char *name, const struct locale *lang) static ship_type *st_find_i(const char *name) { - quicklist *ql; + selist *ql; int qi; - for (qi = 0, ql = shiptypes; ql; ql_advance(&ql, &qi, 1)) { - ship_type *stype = (ship_type *)ql_get(ql, qi); + for (qi = 0, ql = shiptypes; ql; selist_advance(&ql, &qi, 1)) { + ship_type *stype = (ship_type *)selist_get(ql, qi); if (strcmp(stype->_name, name) == 0) { return stype; } @@ -111,7 +111,7 @@ ship_type *st_get_or_create(const char * name) { st = (ship_type *)calloc(sizeof(ship_type), 1); st->_name = _strdup(name); st->storm = 1.0; - ql_push(&shiptypes, (void *)st); + selist_push(&shiptypes, (void *)st); } return st; } @@ -250,8 +250,8 @@ static void free_shiptype(void *ptr) { } void free_shiptypes(void) { - ql_foreach(shiptypes, free_shiptype); - ql_free(shiptypes); + selist_foreach(shiptypes, free_shiptype); + selist_free(shiptypes); shiptypes = 0; } diff --git a/src/kernel/ship.h b/src/kernel/ship.h index 964ee2124..285c29cc0 100644 --- a/src/kernel/ship.h +++ b/src/kernel/ship.h @@ -63,7 +63,7 @@ extern "C" { struct construction *construction; /* how to build a ship */ } ship_type; - extern struct quicklist *shiptypes; + extern struct selist *shiptypes; /* Alte Schiffstypen: */ diff --git a/src/kernel/spell.c b/src/kernel/spell.c index 2644f341f..4540029e2 100644 --- a/src/kernel/spell.c +++ b/src/kernel/spell.c @@ -26,7 +26,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include -#include +#include /* libc includes */ #include @@ -34,7 +34,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include static critbit_tree cb_spells; -quicklist * spells; +selist * spells; static void free_spell(spell *sp) { free(sp->syntax); @@ -50,12 +50,12 @@ static void free_spell_cb(void *cbdata) { void free_spells(void) { cb_clear(&cb_spells); - ql_foreach(spells, free_spell_cb); - ql_free(spells); + selist_foreach(spells, free_spell_cb); + selist_free(spells); spells = 0; } -void add_spell(struct quicklist **slistp, spell * sp) +void add_spell(struct selist **slistp, spell * sp) { if (!selist_set_insert(slistp, sp, NULL)) { log_error("add_spell: the list already contains the spell '%s'.\n", sp->sname); @@ -123,19 +123,19 @@ spell *find_spell(const char *name) spell *find_spellbyid(unsigned int id) { - quicklist *ql; + selist *ql; int qi; if (id == 0) return NULL; - for (qi = 0, ql = spells; ql; ql_advance(&ql, &qi, 1)) { - spell *sp = (spell *)ql_get(ql, qi); + for (qi = 0, ql = spells; ql; selist_advance(&ql, &qi, 1)) { + spell *sp = (spell *)selist_get(ql, qi); if (sp->id == id) { return sp; } } - for (qi = 0, ql = spells; ql; ql_advance(&ql, &qi, 1)) { - spell *sp = (spell *)ql_get(ql, qi); + for (qi = 0, ql = spells; ql; selist_advance(&ql, &qi, 1)) { + spell *sp = (spell *)selist_get(ql, qi); unsigned int hashid = hashstring(sp->sname); if (hashid == id) { return sp; diff --git a/src/kernel/spell.h b/src/kernel/spell.h index b447f51d4..f74fda6e2 100644 --- a/src/kernel/spell.h +++ b/src/kernel/spell.h @@ -27,7 +27,7 @@ extern "C" { struct region; struct spell; struct spell_component; - struct quicklist; + struct selist; struct attrib_type; typedef int(*spell_f)(struct castorder * co); @@ -50,13 +50,13 @@ extern "C" { struct spell * create_spell(const char * name, unsigned int id); struct spell * find_spell(const char *name); struct spell * find_spellbyid(unsigned int i); - void add_spell(struct quicklist **slistp, spell * sp); + void add_spell(struct selist **slistp, spell * sp); void free_spells(void); /** globals **/ extern struct attrib_type at_unitdissolve; extern struct attrib_type at_wdwpyramid; - extern struct quicklist * spells; + extern struct selist * spells; #ifdef __cplusplus } #endif diff --git a/src/kernel/spellbook.c b/src/kernel/spellbook.c index da8fcd563..7673324f8 100644 --- a/src/kernel/spellbook.c +++ b/src/kernel/spellbook.c @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include @@ -58,12 +58,12 @@ void read_spellbook(spellbook **bookp, gamedata *data, int(*get_level)(const spe void write_spellbook(const struct spellbook *book, struct storage *store) { - quicklist *ql; + selist *ql; int qi; if (book) { - for (ql = book->spells, qi = 0; ql; ql_advance(&ql, &qi, 1)) { - spellbook_entry *sbe = (spellbook_entry *)ql_get(ql, qi); + for (ql = book->spells, qi = 0; ql; selist_advance(&ql, &qi, 1)) { + spellbook_entry *sbe = (spellbook_entry *)selist_get(ql, qi); WRITE_TOK(store, sbe->sp->sname); WRITE_INT(store, sbe->level); } @@ -84,30 +84,30 @@ void spellbook_add(spellbook *sb, struct spell * sp, int level) sbe = (spellbook_entry *)malloc(sizeof(spellbook_entry)); sbe->sp = sp; sbe->level = level; - ql_push(&sb->spells, sbe); + selist_push(&sb->spells, sbe); } void spellbook_clear(spellbook *sb) { - quicklist *ql; + selist *ql; int qi; assert(sb); - for (qi = 0, ql = sb->spells; ql; ql_advance(&ql, &qi, 1)) { - spellbook_entry *sbe = (spellbook_entry *)ql_get(ql, qi); + for (qi = 0, ql = sb->spells; ql; selist_advance(&ql, &qi, 1)) { + spellbook_entry *sbe = (spellbook_entry *)selist_get(ql, qi); free(sbe); } - ql_free(sb->spells); + selist_free(sb->spells); free(sb->name); } int spellbook_foreach(spellbook *sb, int(*callback)(spellbook_entry *, void *), void * data) { - quicklist *ql; + selist *ql; int qi; - for (qi = 0, ql = sb->spells; ql; ql_advance(&ql, &qi, 1)) { - spellbook_entry *sbe = (spellbook_entry *)ql_get(ql, qi); + for (qi = 0, ql = sb->spells; ql; selist_advance(&ql, &qi, 1)) { + spellbook_entry *sbe = (spellbook_entry *)selist_get(ql, qi); int result = callback(sbe, data); if (result) { return result; @@ -119,11 +119,11 @@ int spellbook_foreach(spellbook *sb, int(*callback)(spellbook_entry *, void *), spellbook_entry * spellbook_get(spellbook *sb, const struct spell * sp) { if (sb) { - quicklist *ql; + selist *ql; int qi; - for (qi = 0, ql = sb->spells; ql; ql_advance(&ql, &qi, 1)) { - spellbook_entry *sbe = (spellbook_entry *)ql_get(ql, qi); + for (qi = 0, ql = sb->spells; ql; selist_advance(&ql, &qi, 1)) { + spellbook_entry *sbe = (spellbook_entry *)selist_get(ql, qi); if (sp == sbe->sp) { return sbe; } diff --git a/src/kernel/spellbook.h b/src/kernel/spellbook.h index 84ec0ce5f..75a420c06 100644 --- a/src/kernel/spellbook.h +++ b/src/kernel/spellbook.h @@ -26,7 +26,7 @@ extern "C" { struct spell; struct storage; struct gamedata; - struct quicklist; + struct selist; typedef struct spellbook_entry { struct spell * sp; @@ -36,7 +36,7 @@ extern "C" { typedef struct spellbook { char * name; - struct quicklist * spells; + struct selist * spells; } spellbook; spellbook * create_spellbook(const char * name); diff --git a/src/kernel/types.h b/src/kernel/types.h index da4fefecf..2b63f7e07 100644 --- a/src/kernel/types.h +++ b/src/kernel/types.h @@ -43,7 +43,7 @@ struct luxury_type; struct order; struct plane; struct potion_type; -struct quicklist; +struct selist; struct race; struct region; struct region_list; diff --git a/src/laws.c b/src/laws.c index 3fe53237e..5a68c72f0 100644 --- a/src/laws.c +++ b/src/laws.c @@ -89,7 +89,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include -#include +#include #include /* libc includes */ #include @@ -3478,10 +3478,10 @@ static void copy_spells(const spellbook * src, spellbook * dst, int maxlevel) { assert(dst); if (src && src->spells) { - quicklist *ql; + selist *ql; int qi; - for (qi = 0, ql = src->spells; ql; ql_advance(&ql, &qi, 1)) { - spellbook_entry * sbe = (spellbook_entry *)ql_get(ql, qi); + for (qi = 0, ql = src->spells; ql; selist_advance(&ql, &qi, 1)) { + spellbook_entry * sbe = (spellbook_entry *)selist_get(ql, qi); if (sbe->level <= maxlevel) { if (!spellbook_get(dst, sbe->sp)) { spellbook_add(dst, sbe->sp, sbe->level); diff --git a/src/magic.c b/src/magic.c index 2299e6523..dbdc1abe8 100644 --- a/src/magic.c +++ b/src/magic.c @@ -58,7 +58,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include -#include +#include #include #include #include @@ -231,7 +231,7 @@ bool FactionSpells(void) return rule != 0; } -void read_spells(struct quicklist **slistp, magic_t mtype, +void read_spells(struct selist **slistp, magic_t mtype, struct storage *store) { for (;;) { @@ -305,13 +305,13 @@ static int read_mage(attrib * a, void *owner, struct gamedata *data) return AT_READ_OK; } -void write_spells(struct quicklist *slist, struct storage *store) +void write_spells(struct selist *slist, struct storage *store) { - quicklist *ql; + selist *ql; int qi; - for (ql = slist, qi = 0; ql; ql_advance(&ql, &qi, 1)) { - spell *sp = (spell *)ql_get(ql, qi); + for (ql = slist, qi = 0; ql; selist_advance(&ql, &qi, 1)) { + spell *sp = (spell *)selist_get(ql, qi); WRITE_TOK(store, sp->sname); } WRITE_TOK(store, "end"); @@ -424,11 +424,11 @@ static bool already_seen(const faction * f, const spell * sp) void show_new_spells(faction * f, int level, const spellbook *book) { if (book) { - quicklist *ql = book->spells; + selist *ql = book->spells; int qi; - for (qi = 0; ql; ql_advance(&ql, &qi, 1)) { - spellbook_entry *sbe = (spellbook_entry *)ql_get(ql, qi); + for (qi = 0; ql; selist_advance(&ql, &qi, 1)) { + spellbook_entry *sbe = (spellbook_entry *)selist_get(ql, qi); if (sbe->level <= level) { if (!already_seen(f, sbe->sp)) { @@ -451,14 +451,14 @@ void pick_random_spells(faction * f, int level, spellbook * book, int num_spells { spellbook_entry *commonspells[MAXSPELLS]; int qi, numspells = 0; - quicklist *ql; + selist *ql; if (level <= f->max_spelllevel) { return; } - for (qi = 0, ql = book->spells; ql; ql_advance(&ql, &qi, 1)) { - spellbook_entry * sbe = (spellbook_entry *)ql_get(ql, qi); + for (qi = 0, ql = book->spells; ql; selist_advance(&ql, &qi, 1)) { + spellbook_entry * sbe = (spellbook_entry *)selist_get(ql, qi); if (sbe->level <= level) { commonspells[numspells++] = sbe; } @@ -2956,14 +2956,14 @@ const char *curse_name(const curse_type * ctype, const struct locale *lang) } static void select_spellbook(void **tokens, spellbook *sb, const struct locale * lang) { - quicklist * ql; + selist * ql; int qi; assert(sb); assert(lang); - for (qi = 0, ql = sb->spells; ql; ql_advance(&ql, &qi, 1)) { - spellbook_entry *sbe = (spellbook_entry *)ql_get(ql, qi); + for (qi = 0, ql = sb->spells; ql; selist_advance(&ql, &qi, 1)) { + spellbook_entry *sbe = (spellbook_entry *)selist_get(ql, qi); spell *sp = sbe->sp; const char *n = spell_name(sp, lang); diff --git a/src/magic.h b/src/magic.h index 59ef92475..d1ae286d0 100644 --- a/src/magic.h +++ b/src/magic.h @@ -348,8 +348,8 @@ extern "C" { struct order *ord, const struct spllprm *spobj); bool FactionSpells(void); - void write_spells(struct quicklist *slist, struct storage *store); - void read_spells(struct quicklist **slistp, magic_t mtype, + void write_spells(struct selist *slist, struct storage *store); + void read_spells(struct selist **slistp, magic_t mtype, struct storage *store); struct spellbook * get_spellbook(const char * name); diff --git a/src/magic.test.c b/src/magic.test.c index 4ba867b96..befd1986d 100644 --- a/src/magic.test.c +++ b/src/magic.test.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include @@ -41,7 +41,7 @@ void test_updatespells(CuTest * tc) CuAssertPtrEquals(tc, 0, f->spellbook); pick_random_spells(f, 1, book, 1); CuAssertPtrNotNull(tc, f->spellbook); - CuAssertIntEquals(tc, 1, ql_length(f->spellbook->spells)); + CuAssertIntEquals(tc, 1, selist_length(f->spellbook->spells)); CuAssertPtrNotNull(tc, spellbook_get(f->spellbook, sp)); free_spellbook(book); test_cleanup(); @@ -370,10 +370,10 @@ void test_hasspell(CuTest * tc) test_cleanup(); } -static quicklist * casts; +static selist * casts; static int cast_fireball(struct castorder * co) { - ql_push(&casts, co); + selist_push(&casts, co); return 0; } @@ -401,8 +401,8 @@ void test_multi_cast(CuTest *tc) { CuAssertPtrEquals(tc, casts, 0); magic(); CuAssertPtrNotNull(tc, casts); - CuAssertIntEquals(tc, 2, ql_length(casts)); - ql_free(casts); + CuAssertIntEquals(tc, 2, selist_length(casts)); + selist_free(casts); test_cleanup(); } diff --git a/src/market.c b/src/market.c index cef84b9b2..42819325f 100644 --- a/src/market.c +++ b/src/market.c @@ -17,7 +17,7 @@ without prior permission by the authors of Eressea. #include #include -#include +#include #include #include @@ -92,7 +92,7 @@ bool markets_module(void) void do_markets(void) { - quicklist *traders = 0; + selist *traders = 0; unit *markets[MAX_MARKETS]; region *r; for (r = regions; r; r = r->next) { @@ -124,7 +124,7 @@ void do_markets(void) attrib *a = a_find(u->attribs, &at_market); if (a == NULL) { a = a_add(&u->attribs, a_new(&at_market)); - ql_push(&traders, u); + selist_push(&traders, u); } items = (item *)a->data.v; i_change(&items, lux, 1); @@ -138,7 +138,7 @@ void do_markets(void) attrib *a = a_find(u->attribs, &at_market); if (a == NULL) { a = a_add(&u->attribs, a_new(&at_market)); - ql_push(&traders, u); + selist_push(&traders, u); } items = (item *)a->data.v; i_change(&items, herb, 1); @@ -151,10 +151,10 @@ void do_markets(void) } if (traders) { - quicklist *qliter = traders; + selist *qliter = traders; int qli = 0; - for (qli = 0; qliter; ql_advance(&qliter, &qli, 1)) { - unit *u = (unit *)ql_get(qliter, qli); + for (qli = 0; qliter; selist_advance(&qliter, &qli, 1)) { + unit *u = (unit *)selist_get(qliter, qli); attrib *a = a_find(u->attribs, &at_market); item *items = (item *)a->data.v; @@ -176,6 +176,6 @@ void do_markets(void) a_remove(&u->attribs, a); } - ql_free(traders); + selist_free(traders); } } diff --git a/src/modules/autoseed.c b/src/modules/autoseed.c index 5420406c0..925fae349 100644 --- a/src/modules/autoseed.c +++ b/src/modules/autoseed.c @@ -38,7 +38,7 @@ #include #include #include -#include +#include #include #include @@ -295,17 +295,17 @@ static bool virgin_region(const region * r) return true; } -static quicklist * get_island(region * root) +static selist * get_island(region * root) { - quicklist * ql, *result = 0; + selist * ql, *result = 0; int qi = 0; fset(root, RF_MARK); - ql_push(&result, root); + selist_push(&result, root); - for (ql = result, qi = 0; ql; ql_advance(&ql, &qi, 1)) { + for (ql = result, qi = 0; ql; selist_advance(&ql, &qi, 1)) { int dir; - region *r = (region *)ql_get(ql, qi); + region *r = (region *)selist_get(ql, qi); region * next[MAXDIRECTIONS]; get_neighbours(r, next); @@ -314,13 +314,13 @@ static quicklist * get_island(region * root) region *rn = next[dir]; if (rn != NULL && rn->land && !fval(rn, RF_MARK)) { fset(rn, RF_MARK); - ql_push(&result, rn); + selist_push(&result, rn); } } } - for (ql = result, qi = 0; ql; ql_advance(&ql, &qi, 1)) { - region *r = (region *)ql_get(ql, qi); + for (ql = result, qi = 0; ql; selist_advance(&ql, &qi, 1)) { + region *r = (region *)selist_get(ql, qi); freset(r, RF_MARK); } return result; @@ -330,14 +330,14 @@ static void get_island_info(region * root, int *size_p, int *inhabited_p, int *maxage_p) { int qi, size = 0, maxage = 0, inhabited = 0; - quicklist *ql, *island = NULL; + selist *ql, *island = NULL; - ql_push(&island, root); + selist_push(&island, root); fset(root, RF_MARK); - for (ql = island, qi = 0; ql; ql_advance(&ql, &qi, 1)) { + for (ql = island, qi = 0; ql; selist_advance(&ql, &qi, 1)) { int d; - region *r = (region *)ql_get(ql, qi); + region *r = (region *)selist_get(ql, qi); if (r->units) { unit *u; for (u = r->units; u; u = u->next) { @@ -351,16 +351,16 @@ get_island_info(region * root, int *size_p, int *inhabited_p, int *maxage_p) for (d = 0; d != MAXDIRECTIONS; ++d) { region *rn = rconnect(r, d); if (rn && !fval(rn, RF_MARK) && rn->land) { - ql_push(&island, rn); + selist_push(&island, rn); fset(rn, RF_MARK); } } } - for (ql = island, qi = 0; ql; ql_advance(&ql, &qi, 1)) { - region *r = (region *)ql_get(ql, qi); + for (ql = island, qi = 0; ql; selist_advance(&ql, &qi, 1)) { + region *r = (region *)selist_get(ql, qi); freset(r, RF_MARK); } - ql_free(island); + selist_free(island); if (size_p) *size_p = size; if (inhabited_p) @@ -502,11 +502,11 @@ int autoseed(newfaction ** players, int nsize, int max_agediff) } if (rmin != NULL) { faction *f; - quicklist *ql, *rlist = get_island(rmin); + selist *ql, *rlist = get_island(rmin); int qi; - for (ql = rlist, qi = 0; ql; ql_advance(&ql, &qi, 1)) { - region *r = (region *)ql_get(ql, qi); + for (ql = rlist, qi = 0; ql; selist_advance(&ql, &qi, 1)) { + region *r = (region *)selist_get(ql, qi); unit *u; for (u = r->units; u; u = u->next) { f = u->faction; @@ -516,7 +516,7 @@ int autoseed(newfaction ** players, int nsize, int max_agediff) } } } - ql_free(rlist); + selist_free(rlist); if (psize > 0) { for (f = factions; f; f = f->next) { freset(f, FFL_MARK); diff --git a/src/monsters.c b/src/monsters.c index cea817589..6e6630fe8 100644 --- a/src/monsters.c +++ b/src/monsters.c @@ -65,7 +65,7 @@ #include #include -#include +#include /* libc includes */ #include @@ -428,11 +428,11 @@ static attrib *set_new_dragon_target(unit * u, region * r, int range) { int max_affinity = 0; region *max_region = NULL; - quicklist *ql, *rlist = regions_in_range(r, range, allowed_dragon); + selist *ql, *rlist = regions_in_range(r, range, allowed_dragon); int qi; - for (qi = 0, ql = rlist; ql; ql_advance(&ql, &qi, 1)) { - region *r2 = (region *)ql_get(ql, qi); + for (qi = 0, ql = rlist; ql; selist_advance(&ql, &qi, 1)) { + region *r2 = (region *)selist_get(ql, qi); int affinity = dragon_affinity_value(r2, u); if (affinity > max_affinity) { max_affinity = affinity; @@ -440,7 +440,7 @@ static attrib *set_new_dragon_target(unit * u, region * r, int range) } } - ql_free(rlist); + selist_free(rlist); if (max_region && max_region != r) { attrib *a = a_find(u->attribs, &at_targetregion); diff --git a/src/quicklist.c b/src/quicklist.c deleted file mode 100644 index 6fb567a64..000000000 --- a/src/quicklist.c +++ /dev/null @@ -1,75 +0,0 @@ -#include "quicklist.h" -#include - -void ql_push(struct quicklist **qlp, void *el) -{ - selist_push(qlp, el); -} - -int ql_length(const struct quicklist *ql) -{ - return selist_length(ql); -} - -void * ql_replace(struct quicklist *ql, int index, void *el) -{ - return selist_replace(ql, index, el); -} - -void *ql_get(struct quicklist *ql, int index) -{ - return selist_get(ql, index); -} - -int ql_delete(struct quicklist **qlp, int index) -{ - return selist_delete(qlp, index); -} - -bool ql_empty(const struct quicklist *ql) -{ - return selist_empty(ql); -} - -void ql_foreach(struct quicklist *ql, selist_cb cb) -{ - selist_foreach(ql, cb); -} - -int ql_advance(struct quicklist **qlp, int *index, int stride) -{ - return selist_advance(qlp, index, stride); -} - -void ql_free(struct quicklist *ql) -{ - selist_free(ql); -} - -bool ql_set_remove(struct quicklist **qlp, const void *data) -{ - int qi, qn; - quicklist *ql = *qlp; - - if (!ql) - return false; - - qn = selist_length(ql); - for (qi = 0; qi != qn; ++qi) { - void *qd = selist_get(ql, qi); - if (qd == data) { - return selist_delete(qlp, qi) == 0; - } - } - return false; -} - -bool ql_set_insert(struct quicklist **qlp, void *data) -{ - return selist_set_insert(qlp, data, NULL); -} - -bool ql_set_find(struct quicklist **qlp, int *qip, const void *data) -{ - return selist_set_find(qlp, qip, data, NULL); -} diff --git a/src/quicklist.h b/src/quicklist.h deleted file mode 100644 index f5a85a354..000000000 --- a/src/quicklist.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#define selist quicklist -#include - -int ql_advance(struct quicklist **qlp, int *index, int stride); -void ql_foreach(struct quicklist *ql, selist_cb cb); -void ql_free(struct quicklist *ql); -int ql_delete(struct quicklist **qlp, int index); -void ql_push(struct quicklist **qlp, void *el); -int ql_length(const struct quicklist *ql); -void * ql_replace(struct quicklist *ql, int index, void *el); -void *ql_get(struct quicklist *ql, int index); -bool ql_empty(const struct quicklist *ql); -typedef void(*ql_cb)(void *); -bool ql_set_insert_ex(struct quicklist **qlp, void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); -bool ql_set_find_ex(struct quicklist **qlp, int *qip, const void *data, int (*cmp_cb)(const void *lhs, const void *rhs)); - diff --git a/src/report.c b/src/report.c index dd6b29525..e754c3fb2 100644 --- a/src/report.c +++ b/src/report.c @@ -82,7 +82,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include -#include +#include #include #include #include @@ -1733,16 +1733,16 @@ static void rpline(struct stream *out) swrite(line, sizeof(line), 1, out); } -static void list_address(struct stream *out, const faction * uf, quicklist * seenfactions) +static void list_address(struct stream *out, const faction * uf, selist * seenfactions) { int qi = 0; - quicklist *flist = seenfactions; + selist *flist = seenfactions; centre(out, LOC(uf->locale, "nr_addresses"), false); newline(out); while (flist != NULL) { - const faction *f = (const faction *)ql_get(flist, qi); + const faction *f = (const faction *)selist_get(flist, qi); if (!is_monsters(f)) { char buf[8192]; char label = '-'; @@ -1757,7 +1757,7 @@ static void list_address(struct stream *out, const faction * uf, quicklist * see label = '+'; paragraph(out, buf, 4, 0, label); } - ql_advance(&flist, &qi, 1); + selist_advance(&flist, &qi, 1); } newline(out); rpline(out); diff --git a/src/reports.c b/src/reports.c index 3e139fdda..8ffb823a5 100644 --- a/src/reports.c +++ b/src/reports.c @@ -57,7 +57,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include -#include +#include /* libc includes */ #include @@ -659,15 +659,15 @@ size_t size) spellbook *book = unit_get_spellbook(u); if (book) { - quicklist *ql = book->spells; + selist *ql = book->spells; int qi, header, maxlevel = effskill(u, SK_MAGIC, 0); int result = _snprintf(bufp, size, ". Aura %d/%d", get_spellpoints(u), max_spellpoints(u->region, u)); if (wrptr(&bufp, &size, result) != 0) { WARN_STATIC_BUFFER(); } - for (header = 0, qi = 0; ql; ql_advance(&ql, &qi, 1)) { - spellbook_entry * sbe = (spellbook_entry *)ql_get(ql, qi); + for (header = 0, qi = 0; ql; selist_advance(&ql, &qi, 1)) { + spellbook_entry * sbe = (spellbook_entry *)selist_get(ql, qi); if (sbe->level <= maxlevel) { int result = 0; if (!header) { @@ -973,8 +973,7 @@ int stealth_modifier(seen_mode mode) } } -void transfer_seen(quicklist ** dst, quicklist ** src) -{ +static void transfer_seen(selist ** dst, selist ** src) { assert(!*dst); *dst = *src; *src = NULL; @@ -988,7 +987,7 @@ int cmp_faction(const void *lhs, const void *rhs) { return -1; } -static void add_seen_faction_i(struct quicklist **flist, faction *f) { +static void add_seen_faction_i(struct selist **flist, faction *f) { selist_set_insert(flist, f, cmp_faction); } @@ -998,7 +997,7 @@ void add_seen_faction(faction *self, faction *seen) { typedef struct address_data { faction *f, *lastf; - quicklist **flist; + selist **flist; int stealthmod; } address_data; @@ -1020,7 +1019,7 @@ static void cb_add_address(region *r, unit *ut, void *cbdata) { } } -static void add_travelthru_addresses(region *r, faction *f, quicklist **flist, int stealthmod) { +static void add_travelthru_addresses(region *r, faction *f, selist **flist, int stealthmod) { // for each traveling unit: add the faction of any unit is can see address_data cbdata = { 0 }; cbdata.f = f; @@ -1034,18 +1033,18 @@ static void get_addresses(report_context * ctx) /* "TODO: travelthru" */ region *r; const faction *lastf = NULL; - quicklist *flist = 0; + selist *flist = 0; transfer_seen(&flist, &ctx->f->seen_factions); ctx->f->seen_factions = NULL; /* do not delete it twice */ - ql_push(&flist, ctx->f); + selist_push(&flist, ctx->f); if (f_get_alliance(ctx->f)) { - quicklist *ql = ctx->f->alliance->members; + selist *ql = ctx->f->alliance->members; int qi; - for (qi = 0; ql; ql_advance(&ql, &qi, 1)) { - add_seen_faction_i(&flist, (faction *)ql_get(ql, qi)); + for (qi = 0; ql; selist_advance(&ql, &qi, 1)) { + add_seen_faction_i(&flist, (faction *)selist_get(ql, qi)); } } @@ -1130,31 +1129,31 @@ void reports_done(void) { } } -static quicklist *get_regions_distance(region * root, int radius) +static selist *get_regions_distance(region * root, int radius) { - quicklist *ql, *rlist = NULL; + selist *ql, *rlist = NULL; int qi = 0; - ql_push(&rlist, root); + selist_push(&rlist, root); fset(root, RF_MARK); ql = rlist; while (ql) { - region *r = (region *)ql_get(ql, qi); + region *r = (region *)selist_get(ql, qi); region * next[MAXDIRECTIONS]; int d; get_neighbours(r, next); for (d = 0; d != MAXDIRECTIONS; ++d) { if (next[d] && !fval(next[d], RF_MARK) && distance(next[d], root) <= radius) { - ql_push(&rlist, next[d]); + selist_push(&rlist, next[d]); fset(next[d], RF_MARK); } } - ql_advance(&ql, &qi, 1); + selist_advance(&ql, &qi, 1); } - for (ql = rlist, qi = 0; ql; ql_advance(&ql, &qi, 1)) { - region *r = (region *)ql_get(ql, qi); + for (ql = rlist, qi = 0; ql; selist_advance(&ql, &qi, 1)) { + region *r = (region *)selist_get(ql, qi); freset(r, RF_MARK); } return rlist; @@ -1190,16 +1189,16 @@ static void add_seen_nb(faction *f, region *r, seen_mode mode) { */ static void prepare_lighthouse(faction *f, region *r, int range) { - quicklist *ql, *rlist = get_regions_distance(r, range); + selist *ql, *rlist = get_regions_distance(r, range); int qi; - for (ql = rlist, qi = 0; ql; ql_advance(&ql, &qi, 1)) { - region *rl = (region *)ql_get(ql, qi); + for (ql = rlist, qi = 0; ql; selist_advance(&ql, &qi, 1)) { + region *rl = (region *)selist_get(ql, qi); if (!fval(rl->terrain, FORBIDDEN_REGION)) { add_seen_nb(f, rl, seen_lighthouse); } } - ql_free(rlist); + selist_free(rlist); } void reorder_units(region * r) @@ -1393,7 +1392,7 @@ void prepare_report(report_context *ctx, faction *f) void finish_reports(report_context *ctx) { region *r; - ql_free(ctx->addresses); + selist_free(ctx->addresses); for (r = ctx->first; r != ctx->last; r = r->next) { r->seen.mode = seen_none; } diff --git a/src/reports.h b/src/reports.h index e5fd976e3..d69b9a88b 100644 --- a/src/reports.h +++ b/src/reports.h @@ -25,12 +25,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include -struct stream; -struct seen_region; #ifdef __cplusplus extern "C" { #endif + struct selist; + struct stream; + struct seen_region; + /* Alter, ab dem der Score angezeigt werden soll: */ #define DISPLAYSCORE 12 /* Breite einer Reportzeile: */ @@ -71,7 +73,7 @@ extern "C" { typedef struct report_context { struct faction *f; - struct quicklist *addresses; + struct selist *addresses; struct region *first, *last; void *userdata; time_t report_time; diff --git a/src/reports.test.c b/src/reports.test.c index c9fe39c19..1794f1cff 100644 --- a/src/reports.test.c +++ b/src/reports.test.c @@ -23,7 +23,7 @@ #include #include -#include +#include #include #include @@ -108,14 +108,14 @@ static void test_seen_faction(CuTest *tc) { f1 = test_create_faction(rc); f2 = test_create_faction(rc); add_seen_faction(f1, f2); - CuAssertPtrEquals(tc, f2, ql_get(f1->seen_factions, 0)); - CuAssertIntEquals(tc, 1, ql_length(f1->seen_factions)); + CuAssertPtrEquals(tc, f2, selist_get(f1->seen_factions, 0)); + CuAssertIntEquals(tc, 1, selist_length(f1->seen_factions)); add_seen_faction(f1, f2); - CuAssertIntEquals(tc, 1, ql_length(f1->seen_factions)); + CuAssertIntEquals(tc, 1, selist_length(f1->seen_factions)); add_seen_faction(f1, f1); - CuAssertIntEquals(tc, 2, ql_length(f1->seen_factions)); - f2 = (faction *)ql_get(f1->seen_factions, 1); - f1 = (faction *)ql_get(f1->seen_factions, 0); + CuAssertIntEquals(tc, 2, selist_length(f1->seen_factions)); + f2 = (faction *)selist_get(f1->seen_factions, 1); + f1 = (faction *)selist_get(f1->seen_factions, 0); CuAssertTrue(tc, f1->no < f2->no); test_cleanup(); } diff --git a/src/spells/combatspells.c b/src/spells/combatspells.c index da7e7085a..10f1711ef 100644 --- a/src/spells/combatspells.c +++ b/src/spells/combatspells.c @@ -38,7 +38,7 @@ #include #include -#include +#include /* libc includes */ #include @@ -295,15 +295,15 @@ int sp_stun(struct castorder * co) /** randomly shuffle an array * for correctness, see Donald E. Knuth, The Art of Computer Programming */ -static void scramble_fighters(quicklist * ql) +static void scramble_fighters(selist * ql) { - int qi, qlen = ql_length(ql); + int qi, qlen = selist_length(ql); for (qi = 0; qi != qlen; ++qi) { int qj = qi + (rng_int() % (qlen - qi)); - void *a = ql_get(ql, qi); - void *b = ql_replace(ql, qj, a); - ql_replace(ql, qi, b); + void *a = selist_get(ql, qi); + void *b = selist_replace(ql, qj, a); + selist_replace(ql, qi, b); } } @@ -314,7 +314,7 @@ int sp_combatrosthauch(struct castorder * co) int level = co->level; double power = co->force; battle *b = fi->side->battle; - quicklist *ql, *fgs; + selist *ql, *fgs; int force = lovar(power * 15); int qi, k = 0; @@ -329,8 +329,8 @@ int sp_combatrosthauch(struct castorder * co) fgs = fighters(b, fi->side, FIGHT_ROW, BEHIND_ROW - 1, FS_ENEMY); scramble_fighters(fgs); - for (qi = 0, ql = fgs; ql; ql_advance(&ql, &qi, 1)) { - fighter *df = (fighter *)ql_get(ql, qi); + for (qi = 0, ql = fgs; ql; selist_advance(&ql, &qi, 1)) { + fighter *df = (fighter *)selist_get(ql, qi); if (df->alive == 0) continue; @@ -378,7 +378,7 @@ int sp_combatrosthauch(struct castorder * co) } } } - ql_free(fgs); + selist_free(fgs); if (k == 0) { /* keine Waffen mehr da, die zerst�rt werden k�nnten */ @@ -720,7 +720,7 @@ int sp_immolation(struct castorder * co) troop at; int force, qi, killed = 0; const char *damage; - quicklist *fgs, *ql; + selist *fgs, *ql; message *m; /* 2d4 HP */ @@ -740,8 +740,8 @@ int sp_immolation(struct castorder * co) at.index = 0; fgs = fighters(b, fi->side, FIGHT_ROW, AVOID_ROW, FS_ENEMY); - for (qi = 0, ql = fgs; ql; ql_advance(&ql, &qi, 1)) { - fighter *df = (fighter *)ql_get(ql, qi); + for (qi = 0, ql = fgs; ql; selist_advance(&ql, &qi, 1)) { + fighter *df = (fighter *)selist_get(ql, qi); int n = df->alive - df->removed; troop dt; @@ -755,7 +755,7 @@ int sp_immolation(struct castorder * co) if (force == 0) break; } - ql_free(fgs); + selist_free(fgs); m = msg_message("battle::combatspell", "mage spell killed", fi->unit, sp, @@ -987,7 +987,7 @@ int sp_chaosrow(struct castorder * co) const spell * sp = co->sp; battle *b = fi->side->battle; unit *mage = fi->unit; - quicklist *fgs, *ql; + selist *fgs, *ql; message *m; const char *mtype; int qi, k = 0; @@ -1007,8 +1007,8 @@ int sp_chaosrow(struct castorder * co) fgs = fighters(b, fi->side, FIGHT_ROW, NUMROWS, FS_ENEMY); scramble_fighters(fgs); - for (qi = 0, ql = fgs; ql; ql_advance(&ql, &qi, 1)) { - fighter *df = (fighter *)ql_get(ql, qi); + for (qi = 0, ql = fgs; ql; selist_advance(&ql, &qi, 1)) { + fighter *df = (fighter *)selist_get(ql, qi); int n = df->unit->number; if (df->alive == 0) @@ -1052,7 +1052,7 @@ int sp_chaosrow(struct castorder * co) } power = _max(0, power - n); } - ql_free(fgs); + selist_free(fgs); if (sp->id == SPL_CHAOSROW) { mtype = (k > 0) ? "sp_chaosrow_effect_1" : "sp_chaosrow_effect_0"; @@ -1077,7 +1077,7 @@ int sp_flee(struct castorder * co) const spell * sp = co->sp; battle *b = fi->side->battle; unit *mage = fi->unit; - quicklist *fgs, *ql; + selist *fgs, *ql; int force, n, qi; int panik = 0; message *msg; @@ -1106,8 +1106,8 @@ int sp_flee(struct castorder * co) fgs = fighters(b, fi->side, FIGHT_ROW, AVOID_ROW, FS_ENEMY); scramble_fighters(fgs); - for (qi = 0, ql = fgs; ql; ql_advance(&ql, &qi, 1)) { - fighter *df = (fighter *)ql_get(ql, qi); + for (qi = 0, ql = fgs; ql; selist_advance(&ql, &qi, 1)) { + fighter *df = (fighter *)selist_get(ql, qi); for (n = 0; n != df->alive; ++n) { if (force < 0) @@ -1128,7 +1128,7 @@ int sp_flee(struct castorder * co) } } } - ql_free(fgs); + selist_free(fgs); msg = msg_message("sp_flee_effect_1", "mage spell amount", mage, sp, panik); message_all(b, msg); @@ -1457,7 +1457,7 @@ static void do_meffect(fighter * af, int typ, int effect, int duration) { battle *b = af->side->battle; meffect *me = (meffect *)malloc(sizeof(struct meffect)); - ql_push(&b->meffects, me); + selist_push(&b->meffects, me); me->magician = af; me->typ = typ; me->effect = effect; @@ -1654,13 +1654,13 @@ int sp_keeploot(struct castorder * co) return level; } -static int heal_fighters(quicklist * fgs, int *power, bool heal_monsters) +static int heal_fighters(selist * fgs, int *power, bool heal_monsters) { int healhp = *power, healed = 0, qi; - quicklist *ql; + selist *ql; - for (qi = 0, ql = fgs; ql; ql_advance(&ql, &qi, 1)) { - fighter *df = (fighter *)ql_get(ql, qi); + for (qi = 0, ql = fgs; ql; selist_advance(&ql, &qi, 1)) { + fighter *df = (fighter *)selist_get(ql, qi); if (healhp <= 0) break; @@ -1705,7 +1705,7 @@ int sp_healing(struct castorder * co) unit *mage = fi->unit; int j = 0; int healhp = (int)power * 200; - quicklist *fgs; + selist *fgs; message *msg; bool use_item = has_ao_healing(mage); @@ -1723,7 +1723,7 @@ int sp_healing(struct castorder * co) scramble_fighters(fgs); j += heal_fighters(fgs, &healhp, false); j += heal_fighters(fgs, &healhp, true); - ql_free(fgs); + selist_free(fgs); if (j <= 0) { level = j; @@ -1750,7 +1750,7 @@ int sp_undeadhero(struct castorder * co) battle *b = fi->side->battle; unit *mage = fi->unit; region *r = b->region; - quicklist *fgs, *ql; + selist *fgs, *ql; int qi, n, undead = 0; message *msg; int force = (int)get_force(power, 0); @@ -1760,8 +1760,8 @@ int sp_undeadhero(struct castorder * co) fgs = fighters(b, fi->side, FIGHT_ROW, AVOID_ROW, FS_ENEMY | FS_HELP); scramble_fighters(fgs); - for (qi = 0, ql = fgs; ql; ql_advance(&ql, &qi, 1)) { - fighter *df = (fighter *)ql_get(ql, qi); + for (qi = 0, ql = fgs; ql; selist_advance(&ql, &qi, 1)) { + fighter *df = (fighter *)selist_get(ql, qi); unit *du = df->unit; if (force <= 0) @@ -1832,7 +1832,7 @@ int sp_undeadhero(struct castorder * co) } } } - ql_free(fgs); + selist_free(fgs); level = _min(level, undead); if (undead == 0) { diff --git a/src/sqlite.c b/src/sqlite.c index 99c72d9ec..6acaf4116 100644 --- a/src/sqlite.c +++ b/src/sqlite.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include @@ -72,10 +72,10 @@ typedef struct db_faction { char *name; } db_faction; -static struct quicklist * +static struct selist * read_factions(sqlite3 * db, int game_id) { int res; - quicklist *result = 0; + selist *result = 0; const char * sql = "SELECT f.id, fd.code, fd.name, fd.email FROM faction f" " LEFT OUTER JOIN faction_data fd" @@ -97,7 +97,7 @@ read_factions(sqlite3 * db, int game_id) { if (text) dbf->name = _strdup(text); text = (const char *)sqlite3_column_text(stmt, 3); if (text) dbf->email = _strdup(text); - ql_push(&result, dbf); + selist_push(&result, dbf); res = sqlite3_step(stmt); } sqlite3_finalize(stmt); @@ -134,7 +134,7 @@ static void update_faction(sqlite3 *db, const faction *f) { } int db_update_factions(sqlite3 * db, bool force, int game_id) { - quicklist *ql = read_factions(db, game_id); + selist *ql = read_factions(db, game_id); faction *f; if (!ql) return SQLITE_OK; sqlite3_exec(db, "BEGIN", 0, 0, 0); @@ -142,7 +142,7 @@ int db_update_factions(sqlite3 * db, bool force, int game_id) { bool update = force; db_faction *dbf = 0; #ifdef SELIST_TODO - ql_iter it = qli_init(&ql); + selist_iter it = qli_init(&ql); while (qli_more(it)) { db_faction *df = (db_faction*)qli_next(&it); if (f->no == df->no || strcmp(f->email, df->email) == 0 || strcmp(f->name, df->name) == 0) { @@ -178,12 +178,12 @@ int db_update_factions(sqlite3 * db, bool force, int game_id) { int db_update_scores(sqlite3 * db, bool force) { /* - const char *sql_ins = + const char *sselist_ins = "INSERT OR FAIL INTO score (value,faction_id,turn) VALUES (?,?,?)"; - sqlite3_stmt *stmt_ins = stmt_cache_get(db, sql_ins); - const char *sql_upd = + sqlite3_stmt *stmt_ins = stmt_cache_get(db, sselist_ins); + const char *sselist_upd = "UPDATE score set value=? WHERE faction_id=? AND turn=?"; - sqlite3_stmt *stmt_upd = stmt_cache_get(db, sql_upd); + sqlite3_stmt *stmt_upd = stmt_cache_get(db, sselist_upd); faction *f; sqlite3_exec(db, "BEGIN", 0, 0, 0); for (f = factions; f; f = f->next) { diff --git a/src/travelthru.c b/src/travelthru.c index 04ca6cee5..a546c976c 100644 --- a/src/travelthru.c +++ b/src/travelthru.c @@ -33,14 +33,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include -#include +#include #include #include static void travel_done(attrib *a) { - quicklist *ql = (quicklist *)a->data.v; - ql_free(ql); + selist *ql = (selist *)a->data.v; + selist_free(ql); } /*********************/ @@ -67,7 +67,7 @@ void travelthru_add(region * r, unit * u) region *next[MAXDIRECTIONS]; int d; attrib *a; - quicklist *ql; + selist *ql; assert(r); assert(u); @@ -76,10 +76,10 @@ void travelthru_add(region * r, unit * u) if (!a) { a = a_add(&r->attribs, a_new(&at_travelunit)); } - ql = (quicklist *)a->data.v; + ql = (selist *)a->data.v; fset(r, RF_TRAVELUNIT); - ql_push(&ql, u); + selist_push(&ql, u); a->data.v = ql; /* the first and last region of the faction gets reset, because travelthrough @@ -122,7 +122,7 @@ void travelthru_map(region * r, void(*cb)(region *, struct unit *, void *), void cbdata.r = r; a = a_find(r->attribs, &at_travelunit); if (a) { - quicklist *ql = (quicklist *)a->data.v; + selist *ql = (selist *)a->data.v; selist_foreach_ex(ql, cb_map, &cbdata); } } diff --git a/src/util/message.c b/src/util/message.c index 46bfec969..f76409e53 100644 --- a/src/util/message.c +++ b/src/util/message.c @@ -16,7 +16,7 @@ #include "strings.h" #include "log.h" -#include "quicklist.h" +#include "selist.h" /* libc includes */ #include @@ -160,7 +160,7 @@ message *msg_create(const struct message_type *mtype, variant args[]) } #define MT_MAXHASH 1021 -static quicklist *messagetypes[MT_MAXHASH]; +static selist *messagetypes[MT_MAXHASH]; static void mt_free(void *val) { message_type *mtype = (message_type *)val; @@ -177,9 +177,9 @@ static void mt_free(void *val) { void mt_clear(void) { int i; for (i = 0; i != MT_MAXHASH; ++i) { - quicklist *ql = messagetypes[i]; - ql_foreach(ql, mt_free); - ql_free(ql); + selist *ql = messagetypes[i]; + selist_foreach(ql, mt_free); + selist_free(ql); messagetypes[i] = 0; } } @@ -187,11 +187,11 @@ void mt_clear(void) { const message_type *mt_find(const char *name) { unsigned int hash = hashstring(name) % MT_MAXHASH; - quicklist *ql = messagetypes[hash]; + selist *ql = messagetypes[hash]; int qi; - for (qi = 0; ql; ql_advance(&ql, &qi, 1)) { - message_type *data = (message_type *)ql_get(ql, qi); + for (qi = 0; ql; selist_advance(&ql, &qi, 1)) { + message_type *data = (message_type *)selist_get(ql, qi); if (strcmp(data->name, name) == 0) { return data; } @@ -213,7 +213,7 @@ static unsigned int mt_id(const message_type * mtype) const message_type *mt_register(message_type * type) { unsigned int hash = hashstring(type->name) % MT_MAXHASH; - quicklist **qlp = messagetypes + hash; + selist **qlp = messagetypes + hash; if (selist_set_insert(qlp, type, NULL)) { type->key = mt_id(type); diff --git a/src/wormhole.c b/src/wormhole.c index 6a115a9f7..dd105b302 100644 --- a/src/wormhole.c +++ b/src/wormhole.c @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include @@ -155,8 +155,8 @@ make_wormhole(const building_type * bt_wormhole, region * r1, region * r2) #define WORMHOLE_CHANCE 10000 -static void select_wormhole_regions(quicklist **rlistp, int *countp) { - quicklist *rlist = 0; +static void select_wormhole_regions(selist **rlistp, int *countp) { + selist *rlist = 0; region *r = regions; int count = 0; @@ -170,7 +170,7 @@ static void select_wormhole_regions(quicklist **rlistp, int *countp) { } if (r == NULL) break; - ql_push(&rlist, r); + selist_push(&rlist, r); ++count; r = r->next; } @@ -179,12 +179,12 @@ static void select_wormhole_regions(quicklist **rlistp, int *countp) { *rlistp = rlist; } -void sort_wormhole_regions(quicklist *rlist, region **match, int count) { - quicklist *ql; +void sort_wormhole_regions(selist *rlist, region **match, int count) { + selist *ql; int qi, i = 0; - for (ql = rlist, qi = 0; i != count; ql_advance(&ql, &qi, 1)) { - match[i++] = (region *)ql_get(ql, qi); + for (ql = rlist, qi = 0; i != count; selist_advance(&ql, &qi, 1)) { + match[i++] = (region *)selist_get(ql, qi); } qsort(match, count, sizeof(region *), cmp_age); } @@ -200,7 +200,7 @@ void make_wormholes(region **match, int count, const building_type *bt_wormhole) void wormholes_update(void) { const building_type *bt_wormhole = bt_find("wormhole"); - quicklist *rlist = 0; + selist *rlist = 0; int count = 0; region **match; @@ -214,7 +214,7 @@ void wormholes_update(void) } match = (region **)malloc(sizeof(region *) * count); sort_wormhole_regions(rlist, match, count); - ql_free(rlist); + selist_free(rlist); make_wormholes(match, count, bt_wormhole); free(match); } diff --git a/src/wormhole.test.c b/src/wormhole.test.c index ec93c5b4c..4f3036200 100644 --- a/src/wormhole.test.c +++ b/src/wormhole.test.c @@ -10,11 +10,11 @@ #include -#include +#include #include -void sort_wormhole_regions(quicklist *rlist, region **match, int count); +void sort_wormhole_regions(selist *rlist, region **match, int count); void make_wormholes(region **match, int count, const building_type *bt_wormhole); static void test_make_wormholes(CuTest *tc) { @@ -42,7 +42,7 @@ static void test_make_wormholes(CuTest *tc) { static void test_sort_wormhole_regions(CuTest *tc) { region *r1, *r2, *match[2]; terrain_type *t_plain; - quicklist *rlist = 0; + selist *rlist = 0; test_setup(); t_plain = test_create_terrain("plain", LAND_REGION); @@ -50,12 +50,12 @@ static void test_sort_wormhole_regions(CuTest *tc) { r2 = test_create_region(1, 0, t_plain); r1->age = 4; r2->age = 2; - ql_push(&rlist, r1); - ql_push(&rlist, r2); + selist_push(&rlist, r1); + selist_push(&rlist, r2); sort_wormhole_regions(rlist, match, 2); CuAssertPtrEquals(tc, r2, match[0]); CuAssertPtrEquals(tc, r1, match[1]); - ql_free(rlist); + selist_free(rlist); test_cleanup(); } From d42f1767ff67be1d7dec0000847ad708dc389d2f Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 11 Dec 2016 21:21:50 +0100 Subject: [PATCH 12/84] add a test for teach-messages. vheck that they are generated for students and teachers. --- src/study.test.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/study.test.c b/src/study.test.c index 47976930d..54e32bf28 100644 --- a/src/study.test.c +++ b/src/study.test.c @@ -2,6 +2,7 @@ #include "study.h" +#include #include #include #include @@ -10,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -483,6 +485,7 @@ static void test_teach_one_to_many(CuTest *tc) { static void test_teach_many_to_one(CuTest *tc) { unit *u, *u1, *u2; + test_setup(); init_resources(); u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); @@ -505,6 +508,47 @@ static void test_teach_many_to_one(CuTest *tc) { test_cleanup(); } +static void test_teach_message(CuTest *tc) { + unit *u, *u1, *u2; + attrib *a; + ally *al; + teaching_info *teach; + + test_setup(); + init_resources(); + u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); + scale_number(u, 20); + u->thisorder = create_order(K_STUDY, u->faction->locale, "CROSSBOW"); + u1 = test_create_unit(test_create_faction(0), u->region); + set_level(u1, SK_CROSSBOW, TEACHDIFFERENCE); + u1->thisorder = create_order(K_TEACH, u->faction->locale, itoa36(u->no)); + u2 = test_create_unit(test_create_faction(0), u->region); + al = ally_add(&u->faction->allies, u2->faction); + al->status = HELP_GUARD; + set_level(u2, SK_CROSSBOW, TEACHDIFFERENCE); + u2->thisorder = create_order(K_TEACH, u->faction->locale, itoa36(u->no)); + CuAssertTrue(tc, !alliedunit(u, u1->faction, HELP_GUARD)); + CuAssertTrue(tc, alliedunit(u, u2->faction, HELP_GUARD)); + teach_cmd(u1, u1->thisorder); + teach_cmd(u2, u2->thisorder); + a = a_find(u->attribs, &at_learning); + CuAssertPtrNotNull(tc, a); + CuAssertPtrNotNull(tc, a->data.v); + teach = (teaching_info *)a->data.v; + CuAssertPtrNotNull(tc, teach->teachers); + CuAssertIntEquals(tc, 600, teach->value); + CuAssertPtrEquals(tc, u1, teach->teachers[0]); + CuAssertPtrEquals(tc, u2, teach->teachers[1]); + CuAssertPtrEquals(tc, NULL, teach->teachers[2]); + study_cmd(u, u->thisorder); + CuAssertPtrEquals(tc, NULL, test_find_messagetype(u1->faction->msgs, "teach_teacher")); + CuAssertPtrNotNull(tc, test_find_messagetype(u2->faction->msgs, "teach_teacher")); + CuAssertPtrNotNull(tc, test_find_messagetype(u->faction->msgs, "teach_student")); + a = a_find(u->attribs, &at_learning); + CuAssertPtrEquals(tc, NULL, a); + test_cleanup(); +} + static void test_teach_many_to_many(CuTest *tc) { unit *s1, *s2, *t1, *t2; region *r; @@ -554,6 +598,7 @@ CuSuite *get_study_suite(void) SUITE_ADD_TEST(suite, test_teach_one_to_many); SUITE_ADD_TEST(suite, test_teach_many_to_one); SUITE_ADD_TEST(suite, test_teach_many_to_many); + SUITE_ADD_TEST(suite, test_teach_message); SUITE_ADD_TEST(suite, test_teach_two_skills); SUITE_ADD_TEST(suite, test_learn_skill_single); SUITE_ADD_TEST(suite, test_learn_skill_multi); From 61f3585ad7ba9f1d91aaeb74e3c4b34def4debc7 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 11 Dec 2016 21:29:07 +0100 Subject: [PATCH 13/84] unlimited teachers. quicklist replaces fixed array. --- src/study.c | 25 +++++++------------------ src/study.h | 4 ++-- src/study.test.c | 10 ++++++---- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/src/study.c b/src/study.c index 1dd4da8b8..f3372334a 100644 --- a/src/study.c +++ b/src/study.c @@ -53,6 +53,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include +#include + /* libc includes */ #include #include @@ -216,24 +218,11 @@ teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk, n = _min(n, nteaching); if (n != 0) { - int index = 0; - if (teach == NULL) { a = a_add(&student->attribs, a_new(&at_learning)); teach = (teaching_info *)a->data.v; } - else { - while (teach->teachers[index] && index != MAXTEACHERS) - ++index; - } - if (index < MAXTEACHERS) - teach->teachers[index++] = teacher; - if (index < MAXTEACHERS) { - teach->teachers[index] = NULL; - } - else { - log_error("MAXTEACHERS=%d is too low for student %s, teacher %s", MAXTEACHERS, unitname(student), unitname(teacher)); - } + ql_push(&teach->teachers, teacher); teach->value += n; if (student->building && teacher->building == student->building) { @@ -717,7 +706,7 @@ int study_cmd(unit * u, order * ord) a = a_add(&u->attribs, a_new(&at_learning)); teach = (teaching_info *)a->data.v; assert(teach); - teach->teachers[0] = 0; + teach->teachers = NULL; } if (money > 0) { use_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, money); @@ -766,9 +755,9 @@ int study_cmd(unit * u, order * ord) learn_skill(u, sk, days); if (a != NULL) { - int index = 0; - while (teach->teachers[index] && index != MAXTEACHERS) { - unit *teacher = teach->teachers[index++]; + ql_iter qli = qli_init(&teach->teachers); + while (qli_more(qli)) { + unit *teacher = (unit *)qli_next(&qli); if (teacher->faction != u->faction) { bool feedback = alliedunit(u, teacher->faction, HELP_GUARD); if (feedback) { diff --git a/src/study.h b/src/study.h index 20903583a..8067bc9bd 100644 --- a/src/study.h +++ b/src/study.h @@ -27,6 +27,7 @@ extern "C" { #endif struct unit; + struct quicklist; int teach_cmd(struct unit *u, struct order *ord); int study_cmd(struct unit *u, struct order *ord); @@ -45,10 +46,9 @@ extern "C" { void demon_skillchange(struct unit *u); -#define MAXTEACHERS 32 #define TEACHNUMBER 10 typedef struct teaching_info { - struct unit *teachers[MAXTEACHERS]; + struct quicklist *teachers; int value; } teaching_info; diff --git a/src/study.test.c b/src/study.test.c index 54e32bf28..4c1e5f171 100644 --- a/src/study.test.c +++ b/src/study.test.c @@ -18,9 +18,11 @@ #include #include +#include +#include + #include -#include #define MAXLOG 4 typedef struct log_entry { @@ -537,9 +539,9 @@ static void test_teach_message(CuTest *tc) { teach = (teaching_info *)a->data.v; CuAssertPtrNotNull(tc, teach->teachers); CuAssertIntEquals(tc, 600, teach->value); - CuAssertPtrEquals(tc, u1, teach->teachers[0]); - CuAssertPtrEquals(tc, u2, teach->teachers[1]); - CuAssertPtrEquals(tc, NULL, teach->teachers[2]); + CuAssertIntEquals(tc, 2, ql_length(teach->teachers)); + CuAssertPtrEquals(tc, u1, ql_get(teach->teachers, 0)); + CuAssertPtrEquals(tc, u2, ql_get(teach->teachers, 1)); study_cmd(u, u->thisorder); CuAssertPtrEquals(tc, NULL, test_find_messagetype(u1->faction->msgs, "teach_teacher")); CuAssertPtrNotNull(tc, test_find_messagetype(u2->faction->msgs, "teach_teacher")); From 70dfe20e6208f8c9d9b7feceb2128760ece8d09a Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 11 Dec 2016 22:40:06 +0100 Subject: [PATCH 14/84] small edit (int->bool) --- src/guard.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/guard.c b/src/guard.c index ee26e467b..4b0c63e22 100644 --- a/src/guard.c +++ b/src/guard.c @@ -128,7 +128,7 @@ bool is_guard(const struct unit * u) unit *is_guarded(region * r, unit * u) { unit *u2; - int noguards = 1; + bool noguards = true; if (!fval(r, RF_GUARDED)) { return NULL; @@ -140,7 +140,7 @@ unit *is_guarded(region * r, unit * u) for (u2 = r->units; u2; u2 = u2->next) { if (is_guardian_r(u2)) { - noguards = 0; + noguards = false; if (is_guardian_u(u2, u)) { /* u2 is our guard. stop processing (we might have to go further next time) */ return u2; From 5cb67e1da09a016fe9a9bf994522248a94ecf658 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 16 Dec 2016 07:29:43 +0100 Subject: [PATCH 15/84] start writing a test (WIP). --- src/move.c | 2 +- src/move.h | 2 ++ src/move.test.c | 26 +++++++++++++++++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/move.c b/src/move.c index b6a908837..e6469cc4a 100644 --- a/src/move.c +++ b/src/move.c @@ -571,7 +571,7 @@ direction_t reldirection(const region * from, const region * to) return NODIRECTION; } -static void leave_trail(ship * sh, region * from, region_list * route) +void leave_trail(ship * sh, region * from, region_list * route) { region *r = from; diff --git a/src/move.h b/src/move.h index 6363fe2f9..14c040493 100644 --- a/src/move.h +++ b/src/move.h @@ -63,6 +63,8 @@ extern "C" { int enoughsailors(const struct ship *sh, int sumskill); bool canswim(struct unit *u); bool canfly(struct unit *u); + void leave_trail(struct ship *sh, struct region *from, + struct region_list *route); struct ship *move_ship(struct ship *sh, struct region *from, struct region *to, struct region_list *route); int walkingcapacity(const struct unit *u); diff --git a/src/move.test.c b/src/move.test.c index bc93ec124..bdd4a62a8 100644 --- a/src/move.test.c +++ b/src/move.test.c @@ -478,7 +478,7 @@ static void test_drifting_ships(CuTest *tc) { region *r1, *r2, *r3; terrain_type *t_ocean, *t_plain; ship_type *st_boat; - test_cleanup(); + test_setup(); t_ocean = test_create_terrain("ocean", SEA_REGION); t_plain = test_create_terrain("plain", LAND_REGION); r1 = test_create_region(0, 0, t_ocean); @@ -491,11 +491,35 @@ static void test_drifting_ships(CuTest *tc) { test_cleanup(); } +static void test_ship_leave_trail(CuTest *tc) { + ship *s1, *s2; + region *r1, *r2; + terrain_type *t_ocean; + ship_type *st_boat; + region_list *route = NULL; + + test_setup(); + t_ocean = test_create_terrain("ocean", SEA_REGION); + r1 = test_create_region(0, 0, t_ocean); + add_regionlist(&route, r2 = test_create_region(1, 0, t_ocean)); + add_regionlist(&route, test_create_region(2, 0, t_ocean)); + st_boat = test_create_shiptype("boat"); + s1 = test_create_ship(r1, st_boat); + s2 = test_create_ship(r1, st_boat); + leave_trail(s1, r1, route); + leave_trail(s2, r1, route); +// CuAssertPtrNotNull(tc, r1->attribs); + CuAssertPtrNotNull(tc, r2->attribs); + free_regionlist(route); + test_cleanup(); +} + CuSuite *get_move_suite(void) { CuSuite *suite = CuSuiteNew(); SUITE_ADD_TEST(suite, test_walkingcapacity); SUITE_ADD_TEST(suite, test_ship_not_allowed_in_coast); + SUITE_ADD_TEST(suite, test_ship_leave_trail); SUITE_ADD_TEST(suite, test_ship_allowed_without_harbormaster); SUITE_ADD_TEST(suite, test_ship_blocked_by_harbormaster); SUITE_ADD_TEST(suite, test_ship_has_harbormaster_contact); From 13128be0aa6db3803081cd0f9e182febb67fb946 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 16 Dec 2016 17:16:10 +0100 Subject: [PATCH 16/84] add a failing test for bug 2266 --- src/lighthouse.c | 2 +- src/lighthouse.h | 2 +- src/move.test.c | 13 ++++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/lighthouse.c b/src/lighthouse.c index d962b9b76..09c9b7d11 100644 --- a/src/lighthouse.c +++ b/src/lighthouse.c @@ -14,7 +14,7 @@ #include #include -const attrib_type at_lighthouse = { +attrib_type at_lighthouse = { "lighthouse" /* Rest ist NULL; tempor�res, nicht alterndes Attribut */ }; diff --git a/src/lighthouse.h b/src/lighthouse.h index 518b05b5a..3bf970bf1 100644 --- a/src/lighthouse.h +++ b/src/lighthouse.h @@ -29,7 +29,7 @@ extern "C" { struct building; struct attrib; - extern const struct attrib_type at_lighthouse; + extern struct attrib_type at_lighthouse; /* leuchtturm */ bool check_leuchtturm(struct region *r, struct faction *f); void update_lighthouse(struct building *lh); diff --git a/src/move.test.c b/src/move.test.c index bdd4a62a8..6a2a0e7db 100644 --- a/src/move.test.c +++ b/src/move.test.c @@ -3,6 +3,7 @@ #include "move.h" #include "keyword.h" +#include "lighthouse.h" #include #include @@ -501,15 +502,21 @@ static void test_ship_leave_trail(CuTest *tc) { test_setup(); t_ocean = test_create_terrain("ocean", SEA_REGION); r1 = test_create_region(0, 0, t_ocean); - add_regionlist(&route, r2 = test_create_region(1, 0, t_ocean)); add_regionlist(&route, test_create_region(2, 0, t_ocean)); + add_regionlist(&route, r2 = test_create_region(1, 0, t_ocean)); st_boat = test_create_shiptype("boat"); s1 = test_create_ship(r1, st_boat); s2 = test_create_ship(r1, st_boat); leave_trail(s1, r1, route); + a_add(&r1->attribs, a_new(&at_lighthouse)); leave_trail(s2, r1, route); -// CuAssertPtrNotNull(tc, r1->attribs); - CuAssertPtrNotNull(tc, r2->attribs); + a_add(&r2->attribs, a_new(&at_lighthouse)); + CuAssertPtrEquals(tc, &at_shiptrail, (void *)r1->attribs->type); + CuAssertPtrEquals(tc, &at_shiptrail, (void *)r1->attribs->next->type); + CuAssertPtrEquals(tc, &at_lighthouse, (void *)r1->attribs->next->next->type); + CuAssertPtrEquals(tc, &at_shiptrail, (void *)r2->attribs->type); + CuAssertPtrEquals(tc, &at_shiptrail, (void *)r2->attribs->next->type); + CuAssertPtrEquals(tc, &at_lighthouse, (void *)r2->attribs->next->next->type); free_regionlist(route); test_cleanup(); } From 129f6fb68af8651008bd14e542bff5774846561b Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 16 Dec 2016 17:17:04 +0100 Subject: [PATCH 17/84] fix bug 2266 --- src/move.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/move.c b/src/move.c index e6469cc4a..f1b2311f1 100644 --- a/src/move.c +++ b/src/move.c @@ -595,7 +595,7 @@ void leave_trail(ship * sh, region * from, region_list * route) a = a->next; } - if (a == NULL) { + if (a == NULL || a->type != &at_shiptrail) { a = a_add(&(r->attribs), a_new(&at_shiptrail)); td = (traveldir *)a->data.v; td->no = sh->no; From f297d89958ed5c59a9b668320e9befc2765b1e26 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 23 Dec 2016 18:05:38 +0100 Subject: [PATCH 18/84] merge monster.c and monsters.c move RCF_DESERT handling to monsters.c --- src/CMakeLists.txt | 1 - src/battle.c | 2 +- src/bind_monsters.c | 1 - src/bindings.c | 2 +- src/chaos.c | 2 +- src/economy.c | 2 +- src/guard.c | 2 +- src/guard.test.c | 2 +- src/kernel/faction.test.c | 2 +- src/laws.c | 2 +- src/laws.test.c | 2 +- src/monster.c | 224 -------------------------------------- src/monster.h | 39 ------- src/monsters.c | 193 +++++++++++++++++++++++++++++++- src/monsters.h | 49 ++++++++- src/monsters.test.c | 1 - src/move.c | 2 +- src/races/zombies.c | 2 +- src/randenc.c | 19 +--- src/report.c | 2 +- src/spells.c | 2 +- src/study.c | 2 +- src/summary.c | 2 +- src/teleport.c | 2 +- src/upkeep.c | 2 +- 25 files changed, 249 insertions(+), 312 deletions(-) delete mode 100644 src/monster.c delete mode 100644 src/monster.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a3f81e1a2..39d290560 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -112,7 +112,6 @@ set (ERESSEA_SRC magic.c market.c morale.c - monster.c randenc.c renumber.c volcano.c diff --git a/src/battle.c b/src/battle.c index 28a08c6f3..9d2d09cc0 100644 --- a/src/battle.c +++ b/src/battle.c @@ -23,7 +23,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "chaos.h" #include "guard.h" #include "laws.h" -#include "monster.h" +#include "monsters.h" #include "move.h" #include "skill.h" diff --git a/src/bind_monsters.c b/src/bind_monsters.c index 54a9d0ba6..53a569311 100644 --- a/src/bind_monsters.c +++ b/src/bind_monsters.c @@ -1,6 +1,5 @@ #include #include "spells/shipcurse.h" -#include "monster.h" #include "monsters.h" #include diff --git a/src/bindings.c b/src/bindings.c index 53eafdcb4..13b562af6 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -54,7 +54,7 @@ without prior permission by the authors of Eressea. #include "summary.h" #include "teleport.h" #include "laws.h" -#include "monster.h" +#include "monsters.h" #include "market.h" #include diff --git a/src/chaos.c b/src/chaos.c index 942fb87bc..58cd7af73 100644 --- a/src/chaos.c +++ b/src/chaos.c @@ -19,7 +19,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include "chaos.h" -#include "monster.h" +#include "monsters.h" #include "move.h" #include diff --git a/src/economy.c b/src/economy.c index d3f6189fc..01954ff54 100644 --- a/src/economy.c +++ b/src/economy.c @@ -31,7 +31,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "spy.h" #include "study.h" #include "move.h" -#include "monster.h" +#include "monsters.h" #include "morale.h" #include "reports.h" #include "calendar.h" diff --git a/src/guard.c b/src/guard.c index 4b0c63e22..07640452c 100644 --- a/src/guard.c +++ b/src/guard.c @@ -21,7 +21,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include "guard.h" #include "laws.h" -#include "monster.h" +#include "monsters.h" #include #include diff --git a/src/guard.test.c b/src/guard.test.c index 60e5453c6..c5bffeab5 100644 --- a/src/guard.test.c +++ b/src/guard.test.c @@ -2,7 +2,7 @@ #include "guard.h" #include "laws.h" -#include "monster.h" +#include "monsters.h" #include #include diff --git a/src/kernel/faction.test.c b/src/kernel/faction.test.c index 596c92907..3bfc36ca8 100644 --- a/src/kernel/faction.test.c +++ b/src/kernel/faction.test.c @@ -10,7 +10,7 @@ #include #include -#include "monster.h" +#include "monsters.h" #include #include #include diff --git a/src/laws.c b/src/laws.c index 5a68c72f0..d311f698e 100644 --- a/src/laws.c +++ b/src/laws.c @@ -29,7 +29,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "keyword.h" #include "market.h" #include "morale.h" -#include "monster.h" +#include "monsters.h" #include "move.h" #include "randenc.h" #include "renumber.h" diff --git a/src/laws.test.c b/src/laws.test.c index 69e9f5e04..1bec0e6b4 100644 --- a/src/laws.test.c +++ b/src/laws.test.c @@ -2,7 +2,7 @@ #include "laws.h" #include "battle.h" #include "guard.h" -#include "monster.h" +#include "monsters.h" #include #include diff --git a/src/monster.c b/src/monster.c deleted file mode 100644 index 301b1b132..000000000 --- a/src/monster.c +++ /dev/null @@ -1,224 +0,0 @@ -/* -Copyright (c) 1998-2015, Enno Rehling -Katja Zedel - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -**/ - -#include -#include -#include "monster.h" - -/* gamecode includes */ -#include "economy.h" -#include "give.h" -#include "move.h" - -/* attributes includes */ -#include -#include -#include - -/* kernel includes */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* util includes */ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* libc includes */ -#include -#include -#include - -#define MOVECHANCE 25 /* chance fuer bewegung */ - -#define MAXILLUSION_TEXTS 3 - -bool monster_is_waiting(const unit * u) -{ - int test = fval(u_race(u), RCF_ATTACK_MOVED) ? UFL_ISNEW : UFL_ISNEW | UFL_MOVED; - if (fval(u, test)) - return true; - return false; -} - -static void eaten_by_monster(unit * u) -{ - /* adjustment for smaller worlds */ - double multi = RESOURCE_QUANTITY * newterrain(T_PLAIN)->size / 10000.0; - int n = 0; - int horse = -1; - const resource_type *rhorse = get_resourcetype(R_HORSE); - const race *rc = u_race(u); - attrib *a; - - a = a_find(rc->attribs, &at_scare); - if (a) { - n = rng_int() & a->data.i * u->number; - } else { - n = rng_int() % (u->number / 20 + 1); - horse = 0; - } - horse = horse ? i_get(u->items, rhorse->itype) : 0; - - n = (int)(n * multi); - if (n > 0) { - n = lovar(n); - n = _min(rpeasants(u->region), n); - - if (n > 0) { - deathcounts(u->region, n); - rsetpeasants(u->region, rpeasants(u->region) - n); - ADDMSG(&u->region->msgs, msg_message("eatpeasants", "unit amount", u, n)); - } - } - if (horse > 0) { - i_change(&u->items, rhorse->itype, -horse); - ADDMSG(&u->region->msgs, msg_message("eathorse", "unit amount", u, horse)); - } -} - -static void absorbed_by_monster(unit * u) -{ - int n = rng_int() % (u->number / 20 + 1); - - if (n > 0) { - n = lovar(n); - n = _min(rpeasants(u->region), n); - if (n > 0) { - rsetpeasants(u->region, rpeasants(u->region) - n); - scale_number(u, u->number + n); - ADDMSG(&u->region->msgs, msg_message("absorbpeasants", - "unit race amount", u, u_race(u), n)); - } - } -} - -static int scareaway(region * r, int anzahl) -{ - int n, p, diff = 0, emigrants[MAXDIRECTIONS]; - direction_t d; - - anzahl = _min(_max(1, anzahl), rpeasants(r)); - - /* Wandern am Ende der Woche (normal) oder wegen Monster. Die - * Wanderung wird erst am Ende von demographics () ausgefuehrt. - * emigrants[] ist local, weil r->newpeasants durch die Monster - * vielleicht schon hochgezaehlt worden ist. */ - - for (d = 0; d != MAXDIRECTIONS; d++) - emigrants[d] = 0; - - p = rpeasants(r); - assert(p >= 0 && anzahl >= 0); - for (n = _min(p, anzahl); n; n--) { - direction_t dir = (direction_t)(rng_int() % MAXDIRECTIONS); - region *rc = rconnect(r, dir); - - if (rc && fval(rc->terrain, LAND_REGION)) { - ++diff; - rc->land->newpeasants++; - emigrants[dir]++; - } - } - rsetpeasants(r, p - diff); - assert(p >= diff); - return diff; -} - -static void scared_by_monster(unit * u) -{ - int n; - const race *rc = u_race(u); - attrib *a; - a = a_find(rc->attribs, &at_scare); - if (a) { - n = rng_int() & a->data.i * u->number; - } else { - n = rng_int() % (u->number / 4 + 1); - } - if (n > 0) { - n = lovar(n); - n = _min(rpeasants(u->region), n); - if (n > 0) { - n = scareaway(u->region, n); - if (n > 0) { - ADDMSG(&u->region->msgs, msg_message("fleescared", - "amount unit", n, u)); - } - } - } -} - -void monster_kills_peasants(unit * u) -{ - if (!monster_is_waiting(u)) { - if (u_race(u)->flags & RCF_SCAREPEASANTS) { - scared_by_monster(u); - } - if (u_race(u)->flags & RCF_KILLPEASANTS) { - eaten_by_monster(u); - } - if (u_race(u)->flags & RCF_ABSORBPEASANTS) { - absorbed_by_monster(u); - } - } -} - -faction *get_or_create_monsters(void) -{ - faction *f = findfaction(MONSTER_ID); - if (!f) { - const race *rc = rc_get_or_create("dragon"); - const char *email = config_get("monster.email"); - f = addfaction(email ? email : "noreply@eressea.de", NULL, rc, default_locale, 0); - renumber_faction(f, MONSTER_ID); - faction_setname(f, "Monster"); - fset(f, FFL_NPC | FFL_NOIDLEOUT); - } - return f; -} - -faction *get_monsters(void) { - return get_or_create_monsters(); -} - -void make_zombie(unit * u) -{ - u_setfaction(u, get_monsters()); - scale_number(u, 1); - u->hp = unit_max_hp(u) * u->number; - u_setrace(u, get_race(RC_ZOMBIE)); - u->irace = NULL; -} diff --git a/src/monster.h b/src/monster.h deleted file mode 100644 index 0f936b17d..000000000 --- a/src/monster.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright (c) 1998-2015, Enno Rehling -Katja Zedel - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -**/ - -#ifndef H_GC_MONSTER -#define H_GC_MONSTER -#ifdef __cplusplus -extern "C" { -#endif - - struct unit; - - void monster_kills_peasants(struct unit *u); - bool monster_is_waiting(const struct unit *u); - struct faction *get_monsters(void); - struct faction *get_or_create_monsters(void); - void make_zombie(struct unit * u); - -#define MONSTER_ID 666 -#define is_monsters(f) ((f->flags & FFL_NPC) && f==get_monsters()) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src/monsters.c b/src/monsters.c index 6e6630fe8..ea80b9740 100644 --- a/src/monsters.c +++ b/src/monsters.c @@ -26,12 +26,12 @@ #include "chaos.h" #include "give.h" #include "guard.h" -#include "monster.h" #include "laws.h" #include "keyword.h" #include "study.h" /* attributes includes */ +#include #include #include @@ -72,8 +72,8 @@ #include #include -#define MOVECHANCE .25 /* chance fuer bewegung */ -#define DRAGON_RANGE 20 /* Max. Distanz zum nächsten Drachenziel */ +#define DRAGON_RANGE 20 /* max. Distanz zum nächsten Drachenziel */ +#define MOVE_PERCENT 25 /* chance fuer bewegung */ #define MAXILLUSION_TEXTS 3 static double attack_chance; /* rules.monsters.attack_chance, or default 0.4 */ @@ -85,12 +85,12 @@ static void give_peasants(unit *u, const item_type *itype, int reduce) { } static double random_move_chance(void) { - static double rule; + static int rule; static int config; if (config_changed(&config)) { - rule = config_get_flt("rules.monsters.random_move_chance", MOVECHANCE); + rule = config_get_flt("rules.monsters.random_move_percent", MOVE_PERCENT); } - return rule; + return rule * 0.01; } static void reduce_weight(unit * u) @@ -165,6 +165,29 @@ static order *monster_attack(unit * u, const unit * target) return create_order(K_ATTACK, u->faction->locale, "%i", target->no); } +void monsters_desert(struct faction *monsters) +{ + region *r; + + assert(monsters!=NULL); + for (r = regions; r; r = r->next) { + unit *u; + + for (u = r->units; u; u = u->next) { + if (u->faction!=monsters + && (u_race(u)->flags & RCF_DESERT)) { + if (fval(u, UFL_ISNEW)) + continue; + if (rng_int() % 100 < 5) { + ADDMSG(&u->faction->msgs, msg_message("desertion", + "unit region", u, r)); + u_setfaction(u, monsters); + } + } + } + } +} + int monster_attacks(unit * monster, bool respect_buildings, bool rich_only) { region *r = monster->region; @@ -973,3 +996,161 @@ void spawn_undead(void) } } } + +bool monster_is_waiting(const unit * u) +{ + int test = fval(u_race(u), RCF_ATTACK_MOVED) ? UFL_ISNEW : UFL_ISNEW | UFL_MOVED; + if (fval(u, test)) + return true; + return false; +} + +static void eaten_by_monster(unit * u) +{ + /* adjustment for smaller worlds */ + double multi = RESOURCE_QUANTITY * newterrain(T_PLAIN)->size / 10000.0; + int n = 0; + int horse = -1; + const resource_type *rhorse = get_resourcetype(R_HORSE); + const race *rc = u_race(u); + attrib *a; + + a = a_find(rc->attribs, &at_scare); + if (a) { + n = rng_int() & a->data.i * u->number; + } else { + n = rng_int() % (u->number / 20 + 1); + horse = 0; + } + horse = horse ? i_get(u->items, rhorse->itype) : 0; + + n = (int)(n * multi); + if (n > 0) { + n = lovar(n); + n = _min(rpeasants(u->region), n); + + if (n > 0) { + deathcounts(u->region, n); + rsetpeasants(u->region, rpeasants(u->region) - n); + ADDMSG(&u->region->msgs, msg_message("eatpeasants", "unit amount", u, n)); + } + } + if (horse > 0) { + i_change(&u->items, rhorse->itype, -horse); + ADDMSG(&u->region->msgs, msg_message("eathorse", "unit amount", u, horse)); + } +} + +static void absorbed_by_monster(unit * u) +{ + int n = rng_int() % (u->number / 20 + 1); + + if (n > 0) { + n = lovar(n); + n = _min(rpeasants(u->region), n); + if (n > 0) { + rsetpeasants(u->region, rpeasants(u->region) - n); + scale_number(u, u->number + n); + ADDMSG(&u->region->msgs, msg_message("absorbpeasants", + "unit race amount", u, u_race(u), n)); + } + } +} + +static int scareaway(region * r, int anzahl) +{ + int n, p, diff = 0, emigrants[MAXDIRECTIONS]; + direction_t d; + + anzahl = _min(_max(1, anzahl), rpeasants(r)); + + /* Wandern am Ende der Woche (normal) oder wegen Monster. Die + * Wanderung wird erst am Ende von demographics () ausgefuehrt. + * emigrants[] ist local, weil r->newpeasants durch die Monster + * vielleicht schon hochgezaehlt worden ist. */ + + for (d = 0; d != MAXDIRECTIONS; d++) + emigrants[d] = 0; + + p = rpeasants(r); + assert(p >= 0 && anzahl >= 0); + for (n = _min(p, anzahl); n; n--) { + direction_t dir = (direction_t)(rng_int() % MAXDIRECTIONS); + region *rc = rconnect(r, dir); + + if (rc && fval(rc->terrain, LAND_REGION)) { + ++diff; + rc->land->newpeasants++; + emigrants[dir]++; + } + } + rsetpeasants(r, p - diff); + assert(p >= diff); + return diff; +} + +static void scared_by_monster(unit * u) +{ + int n; + const race *rc = u_race(u); + attrib *a; + a = a_find(rc->attribs, &at_scare); + if (a) { + n = rng_int() & a->data.i * u->number; + } else { + n = rng_int() % (u->number / 4 + 1); + } + if (n > 0) { + n = lovar(n); + n = _min(rpeasants(u->region), n); + if (n > 0) { + n = scareaway(u->region, n); + if (n > 0) { + ADDMSG(&u->region->msgs, msg_message("fleescared", + "amount unit", n, u)); + } + } + } +} + +void monster_kills_peasants(unit * u) +{ + if (!monster_is_waiting(u)) { + if (u_race(u)->flags & RCF_SCAREPEASANTS) { + scared_by_monster(u); + } + if (u_race(u)->flags & RCF_KILLPEASANTS) { + eaten_by_monster(u); + } + if (u_race(u)->flags & RCF_ABSORBPEASANTS) { + absorbed_by_monster(u); + } + } +} + +faction *get_or_create_monsters(void) +{ + faction *f = findfaction(MONSTER_ID); + if (!f) { + const race *rc = rc_get_or_create("dragon"); + const char *email = config_get("monster.email"); + f = addfaction(email ? email : "noreply@eressea.de", NULL, rc, default_locale, 0); + renumber_faction(f, MONSTER_ID); + faction_setname(f, "Monster"); + fset(f, FFL_NPC | FFL_NOIDLEOUT); + } + return f; +} + +faction *get_monsters(void) { + return get_or_create_monsters(); +} + +void make_zombie(unit * u) +{ + u_setfaction(u, get_monsters()); + scale_number(u, 1); + u->hp = unit_max_hp(u) * u->number; + u_setrace(u, get_race(RC_ZOMBIE)); + u->irace = NULL; +} diff --git a/src/monsters.h b/src/monsters.h index 02e41c0a4..52e9ebf37 100644 --- a/src/monsters.h +++ b/src/monsters.h @@ -1,8 +1,45 @@ -#pragma once +/* +Copyright (c) 1998-2015, Enno Rehling +Katja Zedel -struct unit; -struct region; -struct faction; +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. -struct unit *spawn_seaserpent(struct region *r, struct faction *f); -void spawn_dragons(void); +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +**/ + +#ifndef H_GC_MONSTER +#define H_GC_MONSTER +#ifdef __cplusplus +extern "C" { +#endif + + struct unit; + struct region; + struct faction; + + struct unit *spawn_seaserpent(struct region *r, struct faction *f); + void spawn_dragons(void); + void monsters_desert(struct faction *monsters); + + void monster_kills_peasants(struct unit *u); + bool monster_is_waiting(const struct unit *u); + struct faction *get_monsters(void); + struct faction *get_or_create_monsters(void); + void make_zombie(struct unit * u); + +#define MONSTER_ID 666 +#define is_monsters(f) ((f->flags & FFL_NPC) && f==get_monsters()) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/monsters.test.c b/src/monsters.test.c index ca793891c..e0eaa3ccc 100644 --- a/src/monsters.test.c +++ b/src/monsters.test.c @@ -10,7 +10,6 @@ #include #include -#include "monster.h" #include "monsters.h" #include "guard.h" #include "reports.h" diff --git a/src/move.c b/src/move.c index f1b2311f1..126557d58 100644 --- a/src/move.c +++ b/src/move.c @@ -27,7 +27,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "alchemy.h" #include "travelthru.h" #include "vortex.h" -#include "monster.h" +#include "monsters.h" #include "lighthouse.h" #include "piracy.h" diff --git a/src/races/zombies.c b/src/races/zombies.c index d7f871dac..3e9303b38 100644 --- a/src/races/zombies.c +++ b/src/races/zombies.c @@ -24,7 +24,7 @@ /* util iclude */ #include -#include "monster.h" +#include "monsters.h" /* libc includes */ #include diff --git a/src/randenc.c b/src/randenc.c index a3c5ce303..536210b1f 100644 --- a/src/randenc.c +++ b/src/randenc.c @@ -22,7 +22,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "volcano.h" #include "economy.h" -#include "monster.h" +#include "monsters.h" #include "move.h" #include "chaos.h" #include "study.h" @@ -826,22 +826,7 @@ void randomevents(void) /* monster-einheiten desertieren */ if (monsters) { - for (r = regions; r; r = r->next) { - unit *u; - - for (u = r->units; u; u = u->next) { - if (u->faction && !is_monsters(u->faction) - && (u_race(u)->flags & RCF_DESERT)) { - if (fval(u, UFL_ISNEW)) - continue; - if (rng_int() % 100 < 5) { - ADDMSG(&u->faction->msgs, msg_message("desertion", - "unit region", u, r)); - u_setfaction(u, monsters); - } - } - } - } + monsters_desert(monsters); } chaos_update(); diff --git a/src/report.c b/src/report.c index e754c3fb2..34da143de 100644 --- a/src/report.c +++ b/src/report.c @@ -26,7 +26,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "guard.h" #include "laws.h" #include "market.h" -#include "monster.h" +#include "monsters.h" #include "travelthru.h" /* modules includes */ diff --git a/src/spells.c b/src/spells.c index 57b1da3a5..7e7b5669a 100644 --- a/src/spells.c +++ b/src/spells.c @@ -22,7 +22,7 @@ #include "spells.h" #include "direction.h" #include "randenc.h" -#include "monster.h" +#include "monsters.h" #include "teleport.h" #include diff --git a/src/study.c b/src/study.c index f3372334a..58cd068f2 100644 --- a/src/study.c +++ b/src/study.c @@ -24,7 +24,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "study.h" #include "laws.h" #include "move.h" -#include "monster.h" +#include "monsters.h" #include "alchemy.h" #include "academy.h" diff --git a/src/summary.c b/src/summary.c index 2311b1994..8a3ee3c41 100644 --- a/src/summary.c +++ b/src/summary.c @@ -14,7 +14,7 @@ #include "summary.h" #include "laws.h" -#include "monster.h" +#include "monsters.h" #include "calendar.h" #include diff --git a/src/teleport.c b/src/teleport.c index 74176f6af..f81f2f9f0 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -34,7 +34,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include "skill.h" -#include "monster.h" +#include "monsters.h" /* libc includes */ #include diff --git a/src/upkeep.c b/src/upkeep.c index 198ce73df..1cf41011f 100644 --- a/src/upkeep.c +++ b/src/upkeep.c @@ -16,7 +16,7 @@ #include "alchemy.h" #include "economy.h" -#include "monster.h" +#include "monsters.h" #include "donations.h" #include From 8c045d7a78263394fff96c7f4bd9f181adad0aa3 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 23 Dec 2016 23:58:24 +0100 Subject: [PATCH 19/84] fix flt/int compilation bug. --- src/monsters.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/monsters.c b/src/monsters.c index ea80b9740..829c1ed35 100644 --- a/src/monsters.c +++ b/src/monsters.c @@ -88,7 +88,7 @@ static double random_move_chance(void) { static int rule; static int config; if (config_changed(&config)) { - rule = config_get_flt("rules.monsters.random_move_percent", MOVE_PERCENT); + rule = config_get_int("rules.monsters.random_move_percent", MOVE_PERCENT); } return rule * 0.01; } From 0c865dca57337b18d141402a2e300e5cb863a245 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 31 Dec 2016 19:56:55 +0100 Subject: [PATCH 20/84] failing test for name_unit. --- src/kernel/unit.test.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/kernel/unit.test.c b/src/kernel/unit.test.c index c4b1f46ed..752627144 100644 --- a/src/kernel/unit.test.c +++ b/src/kernel/unit.test.c @@ -468,6 +468,24 @@ static void test_renumber_unit(CuTest *tc) { test_cleanup(); } +static void gen_name(unit *u) +{ + unit_setname(u, "Hodor"); +} + +static void test_name_unit(CuTest *tc) { + race *rc; + unit * u; + + test_setup(); + rc = test_create_race("skeleton"); + u = test_create_unit(test_create_faction(rc), test_create_region(0, 0, 0)); + rc->generate_name = gen_name; + name_unit(u); + CuAssertStrEquals(tc, "Hodor", unit_getname(u)); + test_cleanup(); +} + CuSuite *get_unit_suite(void) { CuSuite *suite = CuSuiteNew(); @@ -491,5 +509,6 @@ CuSuite *get_unit_suite(void) SUITE_ADD_TEST(suite, test_inside_building); SUITE_ADD_TEST(suite, test_limited_skills); SUITE_ADD_TEST(suite, test_renumber_unit); + SUITE_ADD_TEST(suite, test_name_unit); return suite; } From 51bebfdb6b9592bd666d844f474084d171f85bc9 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 31 Dec 2016 20:03:50 +0100 Subject: [PATCH 21/84] fix undead name generation. --- src/kernel/race.c | 7 ------- src/kernel/race.h | 1 - src/kernel/unit.c | 12 +++--------- src/names.test.c | 2 +- 4 files changed, 4 insertions(+), 18 deletions(-) diff --git a/src/kernel/race.c b/src/kernel/race.c index f28c5ed2f..decc3b7bb 100644 --- a/src/kernel/race.c +++ b/src/kernel/race.c @@ -369,10 +369,3 @@ void register_race_description_function(race_desc_func func, const char *name) { void register_race_name_function(race_name_func func, const char *name) { register_function((pf_generic)func, name); } - -char * race_namegen(const struct race *rc, struct unit *u) { - if (rc->generate_name) { - rc->generate_name(u); - } - return NULL; -} diff --git a/src/kernel/race.h b/src/kernel/race.h index 022d09c86..6673676bd 100644 --- a/src/kernel/race.h +++ b/src/kernel/race.h @@ -252,7 +252,6 @@ extern "C" { const char *raceprefix(const struct unit *u); void register_race_name_function(race_name_func, const char *); void register_race_description_function(race_desc_func, const char *); - char * race_namegen(const struct race *rc, struct unit *u); #ifdef __cplusplus } diff --git a/src/kernel/unit.c b/src/kernel/unit.c index 4aff7d118..f06c4c252 100644 --- a/src/kernel/unit.c +++ b/src/kernel/unit.c @@ -1480,15 +1480,9 @@ void default_name(const unit *u, char name[], int len) { void name_unit(unit * u) { - if (u_race(u)->generate_name) { - char *gen_name = race_namegen(u_race(u), u); - if (gen_name) { - free(u->_name); - u->_name = gen_name; - } - else { - unit_setname(u, racename(u->faction->locale, u, u_race(u))); - } + const race *rc = u_race(u); + if (rc->generate_name) { + rc->generate_name(u); } else { char name[32]; diff --git a/src/names.test.c b/src/names.test.c index f50937f17..1fc41f340 100644 --- a/src/names.test.c +++ b/src/names.test.c @@ -24,7 +24,7 @@ static void test_names(CuTest * tc) locale_setstring(default_locale, "undead_postfix_0", "Kobolde"); CuAssertPtrNotNull(tc, foo = (race_name_func)get_function("nameundead")); rc->generate_name = foo; - race_namegen(rc, u); + rc->generate_name(u); CuAssertStrEquals(tc, "Graue Kobolde", u->_name); CuAssertPtrNotNull(tc, get_function("nameskeleton")); CuAssertPtrNotNull(tc, get_function("namezombie")); From e49d350348e754f24ba3a57bdde119829b56633c Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 31 Dec 2016 20:12:13 +0100 Subject: [PATCH 22/84] test that monsters with "namegeneric" hook get a NULL name (WIP) --- src/names.test.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/names.test.c b/src/names.test.c index 1fc41f340..176a12a68 100644 --- a/src/names.test.c +++ b/src/names.test.c @@ -36,9 +36,25 @@ static void test_names(CuTest * tc) test_cleanup(); } +static void test_monster_names(CuTest *tc) { + unit *u; + race *rc; + + test_setup(); + register_names(); + rc = test_create_race("irongolem"); + u = test_create_unit(test_create_faction(rc), test_create_region(0, 0, 0)); + CuAssertPtrNotNull(tc, u->_name); + rc->generate_name = (race_name_func)get_function("namegeneric"); + rc->generate_name(u); + CuAssertPtrEquals(tc, 0, u->_name); + test_cleanup(); +} + CuSuite *get_names_suite(void) { CuSuite *suite = CuSuiteNew(); SUITE_ADD_TEST(suite, test_names); + SUITE_ADD_TEST(suite, test_monster_names); return suite; } From b8bccd723845ea0d55e670dbd9487ea861004e76 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 31 Dec 2016 20:17:02 +0100 Subject: [PATCH 23/84] monster name pluralization changes with u->number. --- src/names.c | 6 +----- src/names.test.c | 6 ++++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/names.c b/src/names.c index 99c21a05e..cf1cdb910 100644 --- a/src/names.c +++ b/src/names.c @@ -221,11 +221,7 @@ const char *silbe3[SIL3] = { static void generic_name(unit * u) { - const char * name = rc_name_s(u_race(u), (u->number == 1) ? NAME_SINGULAR : NAME_PLURAL); - name = LOC(u->faction->locale, name); - if (name) { - unit_setname(u, name); - } + unit_setname(u, NULL); } static void dragon_name(unit * u) diff --git a/src/names.test.c b/src/names.test.c index 176a12a68..8109fc2d4 100644 --- a/src/names.test.c +++ b/src/names.test.c @@ -42,12 +42,18 @@ static void test_monster_names(CuTest *tc) { test_setup(); register_names(); + default_locale = test_create_locale(); + locale_setstring(default_locale, "race::irongolem", "Eisengolem"); + locale_setstring(default_locale, "race::irongolem_p", "Eisengolems"); rc = test_create_race("irongolem"); u = test_create_unit(test_create_faction(rc), test_create_region(0, 0, 0)); CuAssertPtrNotNull(tc, u->_name); rc->generate_name = (race_name_func)get_function("namegeneric"); rc->generate_name(u); CuAssertPtrEquals(tc, 0, u->_name); + CuAssertStrEquals(tc, "Eisengolem", unit_getname(u)); + u->number = 2; + CuAssertStrEquals(tc, "Eisengolems", unit_getname(u)); test_cleanup(); } From d4dd9b4bc62147e5bc2aaf7d44704dec84beec98 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 31 Dec 2016 21:21:23 +0100 Subject: [PATCH 24/84] enable PAY NOT in E2 --- conf/e2/config.json | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/e2/config.json b/conf/e2/config.json index 217cfffe9..ce823a33d 100644 --- a/conf/e2/config.json +++ b/conf/e2/config.json @@ -5,7 +5,6 @@ "e2/terrains.json" ], "disabled": [ - "pay", "jsreport" ], "settings": { From 47c8b20f680fd208b5dbe696f778ef7c562a158a Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 6 Jan 2017 20:54:57 +0100 Subject: [PATCH 25/84] add a happy test for mt_new. refactor to not use strncpy. --- src/test_eressea.c | 1 + src/util/CMakeLists.txt | 2 +- src/util/message.c | 20 +++++++++++--------- src/util/message.test.c | 29 +++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 src/util/message.test.c diff --git a/src/test_eressea.c b/src/test_eressea.c index 71cf008f2..6d2dead3f 100644 --- a/src/test_eressea.c +++ b/src/test_eressea.c @@ -65,6 +65,7 @@ int RunAllTests(int argc, char *argv[]) ADD_SUITE(direction); ADD_SUITE(skill); ADD_SUITE(keyword); + ADD_SUITE(message); ADD_SUITE(order); ADD_SUITE(race); /* util */ diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index 7eda87132..842bcf58c 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -14,7 +14,7 @@ gamedata.test.c language.test.c # lists.test.c # log.test.c -# message.test.c +message.test.c # nrmessage.test.c parser.test.c password.test.c diff --git a/src/util/message.c b/src/util/message.c index f76409e53..23f81e095 100644 --- a/src/util/message.c +++ b/src/util/message.c @@ -87,19 +87,21 @@ message_type *mt_new(const char *name, const char *args[]) for (i = 0; args[i]; ++i) { const char *x = args[i]; const char *spos = strchr(x, ':'); - if (spos == NULL) { - mtype->pnames[i] = _strdup(x); - mtype->types[i] = NULL; + struct arg_type *atype = NULL; + if (spos != NULL) { + atype = find_argtype(spos + 1); + } + if (!atype) { + log_error("unknown argument type %s for message type %s\n", spos + 1, mtype->name); + assert(atype); } else { - char *cp = strncpy((char *)malloc(spos - x + 1), x, spos - x); + char *cp; + cp = malloc(spos - x + 1); + memcpy(cp, x, spos - x); cp[spos - x] = '\0'; mtype->pnames[i] = cp; - mtype->types[i] = find_argtype(spos + 1); - if (mtype->types[i] == NULL) { - log_error("unknown argument type %s for message type %s\n", spos + 1, mtype->name); - } - assert(mtype->types[i]); + mtype->types[i] = atype; } } } diff --git a/src/util/message.test.c b/src/util/message.test.c new file mode 100644 index 000000000..d114e33f2 --- /dev/null +++ b/src/util/message.test.c @@ -0,0 +1,29 @@ +#include +#include "message.h" + +#include +#include + +static void test_mt_new(CuTest *tc) +{ + message_type *mt; + test_setup(); + mt = mt_new_va("test", "name:string", "number:int", NULL); + CuAssertPtrNotNull(tc, mt); + CuAssertStrEquals(tc, "test", mt->name); + CuAssertIntEquals(tc, 2, mt->nparameters); + CuAssertPtrNotNull(tc, mt->pnames); + CuAssertStrEquals(tc, "name", mt->pnames[0]); + CuAssertStrEquals(tc, "number", mt->pnames[1]); + CuAssertPtrNotNull(tc, mt->types); + CuAssertStrEquals(tc, "string", mt->types[0]->name); + CuAssertStrEquals(tc, "int", mt->types[1]->name); + test_cleanup(); +} + +CuSuite *get_message_suite(void) +{ + CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_mt_new); + return suite; +} From d71d5e413a1eeba0e509397a1ba97969fd233fc9 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 6 Jan 2017 21:08:49 +0100 Subject: [PATCH 26/84] eliminate unnecessary strncpy use. --- src/report.c | 3 ++- src/reports.c | 6 +----- src/util/language.c | 25 ++++++++++++++++--------- src/util/language.test.c | 11 +++++++++++ 4 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/report.c b/src/report.c index 34da143de..4e12f1261 100644 --- a/src/report.c +++ b/src/report.c @@ -413,7 +413,8 @@ void nr_spell_syntax(struct stream *out, spellbook_entry * sbe, const struct loc } else { char substr[32]; - strncpy(substr, syntaxp, cstr - syntaxp); + assert(sizeof(substr) > (cstr - syntaxp)); + memcpy(substr, syntaxp, cstr - syntaxp); substr[cstr - syntaxp] = 0; locp = LOC(lang, mkname("spellpar", substr)); syntaxp = substr + 1; diff --git a/src/reports.c b/src/reports.c index 8ffb823a5..fa8a722d9 100644 --- a/src/reports.c +++ b/src/reports.c @@ -849,10 +849,6 @@ const struct unit * u, struct skill * sv, int *dh, int days) void split_paragraph(strlist ** SP, const char *s, unsigned int indent, unsigned int width, char mark) { - - /* Die Liste SP wird mit dem String s aufgefuellt, mit indent und einer - * mark, falls angegeben. SP wurde also auf 0 gesetzt vor dem Aufruf. - * Vgl. spunit (). */ bool firstline; static char buf[REPORTWIDTH + 1]; // FIXME: static buffer, artificial limit size_t len = strlen(s); @@ -883,7 +879,7 @@ void split_paragraph(strlist ** SP, const char *s, unsigned int indent, unsigned if (!cut) { cut = s + _min(len, REPORTWIDTH); } - strncpy(buf + indent, s, cut - s); + memcpy(buf + indent, s, cut - s); buf[indent + (cut - s)] = 0; addstrlist(SP, buf); // TODO: too much string copying, cut out this function while (*cut == ' ') { diff --git a/src/util/language.c b/src/util/language.c index d8b899742..cb91d7419 100644 --- a/src/util/language.c +++ b/src/util/language.c @@ -101,16 +101,23 @@ locale *get_or_create_locale(const char *name) void make_locales(const char *str) { const char *tok = str; - while (*tok) { - char zText[32]; - while (*tok && *tok != ',') - ++tok; - strncpy(zText, str, tok - str); - zText[tok - str] = 0; - get_or_create_locale(zText); - if (*tok) { - str = ++tok; + while (tok) { + char zText[16]; + size_t len; + + tok = strchr(str, ','); + if (tok) { + len = tok - str; + assert(sizeof(zText) > len); + memcpy(zText, str, len); + str = tok + 1; } + else { + len = strlen(str); + memcpy(zText, str, len); + } + zText[len] = 0; + get_or_create_locale(zText); } } diff --git a/src/util/language.test.c b/src/util/language.test.c index 236eac497..40a6775fa 100644 --- a/src/util/language.test.c +++ b/src/util/language.test.c @@ -16,9 +16,20 @@ static void test_language(CuTest *tc) test_cleanup(); } +static void test_make_locales(CuTest *tc) +{ + test_setup(); + make_locales("aa,bb,cc"); + CuAssertPtrNotNull(tc, get_locale("aa")); + CuAssertPtrNotNull(tc, get_locale("bb")); + CuAssertPtrNotNull(tc, get_locale("cc")); + test_cleanup(); +} + CuSuite *get_language_suite(void) { CuSuite *suite = CuSuiteNew(); SUITE_ADD_TEST(suite, test_language); + SUITE_ADD_TEST(suite, test_make_locales); return suite; } From 2422e63af21aa44cb4d27f9119365bdbb08cc860 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 6 Jan 2017 21:24:31 +0100 Subject: [PATCH 27/84] never use strncpy, anywhere. --- src/bind_config.c | 3 ++- src/helpers.c | 2 +- src/util/log.test.c | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/bind_config.c b/src/bind_config.c index 3959cc22c..929e4cca0 100644 --- a/src/bind_config.c +++ b/src/bind_config.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -45,7 +46,7 @@ int config_parse(const char *json) if (xp >= ep) break; } xp = (ep > json + 10) ? ep - 10 : json; - strncpy(buffer, xp, sizeof(buffer)); + strlcpy(buffer, xp, sizeof(buffer)); buffer[9] = 0; log_error("json parse error in line %d, position %d, near `%s`\n", line, ep - lp, buffer); } diff --git a/src/helpers.c b/src/helpers.c index aa9bc12eb..e9502e075 100644 --- a/src/helpers.c +++ b/src/helpers.c @@ -167,7 +167,7 @@ static int lua_callspell(castorder * co) if (hashpos != NULL) { ptrdiff_t len = hashpos - fname; assert(len < (ptrdiff_t) sizeof(fbuf)); - strncpy(fbuf, fname, len); + memcpy(fbuf, fname, len); fbuf[len] = '\0'; fname = fbuf; } diff --git a/src/util/log.test.c b/src/util/log.test.c index 95cbefa96..55616c026 100644 --- a/src/util/log.test.c +++ b/src/util/log.test.c @@ -12,7 +12,7 @@ void log_string(void *data, int level, const char *module, const char *format, v unused_arg(format); unused_arg(module); unused_arg(level); - strncpy(str, arg, 32); + strcpy(str, arg); } static void test_logging(CuTest * tc) From 9351a1960e973ce414dd1a25fec897dcb2875805 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 6 Jan 2017 21:37:52 +0100 Subject: [PATCH 28/84] gcc warning eliminated --- src/report.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/report.c b/src/report.c index 4e12f1261..553e6cb94 100644 --- a/src/report.c +++ b/src/report.c @@ -413,9 +413,10 @@ void nr_spell_syntax(struct stream *out, spellbook_entry * sbe, const struct loc } else { char substr[32]; - assert(sizeof(substr) > (cstr - syntaxp)); - memcpy(substr, syntaxp, cstr - syntaxp); - substr[cstr - syntaxp] = 0; + size_t len = cstr - syntaxp; + assert(sizeof(substr) > len); + memcpy(substr, syntaxp, len); + substr[len] = 0; locp = LOC(lang, mkname("spellpar", substr)); syntaxp = substr + 1; } From fd759e7ff69e06b32e67fe4e103ebd21e56e4ed1 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 7 Jan 2017 20:20:13 +0100 Subject: [PATCH 29/84] remove old & unused fix_famililar repair code. --- src/bind_monsters.c | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/src/bind_monsters.c b/src/bind_monsters.c index 53a569311..4ac15aa24 100644 --- a/src/bind_monsters.c +++ b/src/bind_monsters.c @@ -56,34 +56,6 @@ static int tolua_spawn_undead(lua_State * L) return 0; } -static int fix_familiars(struct lua_State *L) -{ - faction *f; - for (f = factions; f; f = f->next) { - unit *u; - for (u = f->units; u; u = u->nextF) { - struct sc_mage *mage = get_mage(u); - if (mage && is_familiar(u)) { - if (mage->spellbook && mage->magietyp == M_GRAY) { - equipment *eq; - char buffer[64]; - - spellbook_clear(mage->spellbook); - free(mage->spellbook); - mage->spellbook = 0; - - _snprintf(buffer, sizeof(buffer), "%s_familiar", u_race(u)->_name); - eq = get_equipment(buffer); - if (eq) { - equip_unit_mask(u, eq, EQUIP_SPELLS); - } - } - } - } - } - return 0; -} - void bind_monsters(struct lua_State *L) { tolua_module(L, NULL, 0); @@ -93,7 +65,6 @@ void bind_monsters(struct lua_State *L) tolua_function(L, TOLUA_CAST "plan_monsters", tolua_planmonsters); tolua_function(L, TOLUA_CAST "spawn_undead", tolua_spawn_undead); tolua_function(L, TOLUA_CAST "spawn_dragons", tolua_spawn_dragons); - tolua_function(L, TOLUA_CAST "fix_familiars", fix_familiars); tolua_function(L, TOLUA_CAST "get_monsters", tolua_get_monsters); } tolua_endmodule(L); From 03def6ae5e552278ed5619ec7d74f81db3bb264a Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 7 Jan 2017 21:09:39 +0100 Subject: [PATCH 30/84] replace snprintf and the like. you cannot trust _snprintf in MSVC (no zero-termination). --- src/bind_storage.c | 4 +++- src/gmtool.c | 2 +- src/json.c | 6 +++--- src/kernel/item.c | 5 ++++- src/kernel/jsonconf.c | 7 ++++++- src/util/bsdstring.c | 2 +- 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/bind_storage.c b/src/bind_storage.c index a81a3baeb..6b582e815 100644 --- a/src/bind_storage.c +++ b/src/bind_storage.c @@ -100,7 +100,9 @@ static int tolua_storage_tostring(lua_State * L) { gamedata *data = (gamedata *)tolua_tousertype(L, 1, 0); char name[64]; - _snprintf(name, sizeof(name), "", (void *)data, data->version); + // safe to use sprintf here, because: + // %p is at most 16 characters, %d 20, text is 16, comes to 53 with \0 + sprintf(name, "", (void *)data, data->version); lua_pushstring(L, name); return 1; } diff --git a/src/gmtool.c b/src/gmtool.c index 7aab2fea7..b1b9a1bc1 100644 --- a/src/gmtool.c +++ b/src/gmtool.c @@ -1167,7 +1167,7 @@ static void handlekey(state * st, int c) region *first = (mr && mr->r && mr->r->next) ? mr->r->next : regions; if (findmode == 'f') { - snprintf(sbuffer, sizeof(sbuffer), "find-faction: %s", locate); + slprintf(sbuffer, sizeof(sbuffer), "find-faction: %s", locate); statusline(st->wnd_status->handle, sbuffer); f = findfaction(atoi36(locate)); if (f == NULL) { diff --git a/src/json.c b/src/json.c index 10322fe3f..2c27b9947 100644 --- a/src/json.c +++ b/src/json.c @@ -67,13 +67,13 @@ int json_export(stream * out, int flags) { cJSON *json, *root = cJSON_CreateObject(); assert(out && out->api); if (regions && (flags & EXPORT_REGIONS)) { - char id[32]; + char id[32]; // TODO: static_assert(INT_MAX < 10^32) region * r; plane * p; cJSON_AddItemToObject(root, "planes", json = cJSON_CreateObject()); for (p = planes; p; p = p->next) { cJSON *data; - _snprintf(id, sizeof(id), "%d", p->id); + sprintf(id, "%d", p->id); // safe, unless int is bigger than 64 bit cJSON_AddItemToObject(json, id, data = cJSON_CreateObject()); cJSON_AddNumberToObject(data, "x", p->minx); cJSON_AddNumberToObject(data, "y", p->miny); @@ -85,7 +85,7 @@ int json_export(stream * out, int flags) { cJSON_AddItemToObject(root, "regions", json = cJSON_CreateObject()); for (r = regions; r; r = r->next) { cJSON *data; - _snprintf(id, sizeof(id), "%d", r->uid); + sprintf(id, "%d", r->uid); // safe, unless int is bigger than 64 bit cJSON_AddItemToObject(json, id, data = cJSON_CreateObject()); cJSON_AddNumberToObject(data, "x", r->x); cJSON_AddNumberToObject(data, "y", r->y); diff --git a/src/kernel/item.c b/src/kernel/item.c index 53fff79ab..9956f2a4a 100644 --- a/src/kernel/item.c +++ b/src/kernel/item.c @@ -156,7 +156,10 @@ const char *resourcename(const resource_type * rtype, int flags) } if (flags & NMF_PLURAL) { static char name[64]; // FIXME: static return value - _snprintf(name, sizeof(name), "%s_p", rtype->_name); + size_t len = strlen(rtype->_name); + assert(len <= sizeof(name) - 3); + memcpy(name, rtype->_name, len); + strcpy(name + len, "_p"); return name; } return rtype->_name; diff --git a/src/kernel/jsonconf.c b/src/kernel/jsonconf.c index d12238566..dccfbb68a 100644 --- a/src/kernel/jsonconf.c +++ b/src/kernel/jsonconf.c @@ -523,6 +523,8 @@ static void disable_feature(const char *str) { char name[32]; int k; skill_t sk; + size_t len; + sk = findskill(str); if (sk != NOSKILL) { enable_skill(sk, false); @@ -534,7 +536,10 @@ static void disable_feature(const char *str) { enable_keyword(k, false); return; } - _snprintf(name, sizeof(name), "%s.enabled", str); + len = strlen(str); + assert(len <= sizeof(name) - 9); + memcpy(name, str, len); + strcpy(name+len, ".enabled"); log_info("disable feature %s\n", name); config_set(name, "0"); } diff --git a/src/util/bsdstring.c b/src/util/bsdstring.c index 98d2d00f5..4fc56ce4e 100644 --- a/src/util/bsdstring.c +++ b/src/util/bsdstring.c @@ -13,7 +13,7 @@ int wrptr(char **ptr, size_t * size, int result) { size_t bytes = (size_t)result; if (result < 0) { - // _snprintf buffer was too small + // buffer was too small if (*size > 0) { **ptr = 0; *size = 0; From ae3bfc952b06f3d538d5f1cc7539cf64bb847e42 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 7 Jan 2017 21:19:58 +0100 Subject: [PATCH 31/84] create_order takes variable arguments! more snprintf removal. --- src/give.test.c | 12 +++--------- src/kernel/jsonconf.c | 4 ++-- src/kernel/unit.test.c | 13 +++++-------- src/laws.test.c | 4 +--- 4 files changed, 11 insertions(+), 22 deletions(-) diff --git a/src/give.test.c b/src/give.test.c index f2b0d60a9..029ee7c44 100644 --- a/src/give.test.c +++ b/src/give.test.c @@ -233,7 +233,6 @@ static void test_give_men_requires_contact(CuTest * tc) { struct give env = { 0 }; message * msg; order *ord; - char cmd[32]; test_setup_ex(tc); env.f1 = test_create_faction(0); @@ -244,8 +243,7 @@ static void test_give_men_requires_contact(CuTest * tc) { CuAssertIntEquals(tc, 1, env.dst->number); CuAssertIntEquals(tc, 1, env.src->number); - _snprintf(cmd, sizeof(cmd), "%s ALLES PERSONEN", itoa36(env.dst->no)); - ord = create_order(K_GIVE, env.f1->locale, cmd); + ord = create_order(K_GIVE, env.f1->locale, "%s ALLES PERSONEN", itoa36(env.dst->no)); test_clear_messages(env.f1); give_cmd(env.src, ord); CuAssertPtrEquals(tc, 0, test_find_messagetype(env.f1->msgs, "give_person")); @@ -307,7 +305,6 @@ static void test_give(CuTest * tc) { static void test_give_cmd(CuTest * tc) { struct give env = { 0 }; struct order *ord; - char cmd[32]; test_setup_ex(tc); env.lang = test_create_locale(); @@ -316,8 +313,7 @@ static void test_give_cmd(CuTest * tc) { i_change(&env.src->items, env.itype, 10); - _snprintf(cmd, sizeof(cmd), "%s 5 %s", itoa36(env.dst->no), LOC(env.f1->locale, env.itype->rtype->_name)); - ord = create_order(K_GIVE, env.f1->locale, cmd); + ord = create_order(K_GIVE, env.f1->locale, "%s 5 %s", itoa36(env.dst->no), LOC(env.f1->locale, env.itype->rtype->_name)); assert(ord); give_cmd(env.src, ord); CuAssertIntEquals(tc, 5, i_get(env.src->items, env.itype)); @@ -330,7 +326,6 @@ static void test_give_cmd(CuTest * tc) { static void test_give_herbs(CuTest * tc) { struct give env = { 0 }; struct order *ord; - char cmd[32]; test_setup_ex(tc); test_create_world(); @@ -338,8 +333,7 @@ static void test_give_herbs(CuTest * tc) { setup_give(&env); i_change(&env.src->items, env.itype, 10); - _snprintf(cmd, sizeof(cmd), "%s %s", itoa36(env.dst->no), LOC(env.f1->locale, parameters[P_HERBS])); - ord = create_order(K_GIVE, env.f1->locale, cmd); + ord = create_order(K_GIVE, env.f1->locale, "%s %s", itoa36(env.dst->no), LOC(env.f1->locale, parameters[P_HERBS])); assert(ord); give_cmd(env.src, ord); diff --git a/src/kernel/jsonconf.c b/src/kernel/jsonconf.c index dccfbb68a..69e02c3a0 100644 --- a/src/kernel/jsonconf.c +++ b/src/kernel/jsonconf.c @@ -801,10 +801,10 @@ static void json_settings(cJSON *json) { else { char value[32]; if (child->type == cJSON_Number && child->valuedouble && child->valueintvaluedouble) { - _snprintf(value, sizeof(value), "%f", child->valuedouble); + sprintf(value, "%f", child->valuedouble); } else { - _snprintf(value, sizeof(value), "%d", child->valueint); + sprintf(value, "%d", child->valueint); } config_set(child->string, value); } diff --git a/src/kernel/unit.test.c b/src/kernel/unit.test.c index 752627144..1a481960d 100644 --- a/src/kernel/unit.test.c +++ b/src/kernel/unit.test.c @@ -140,37 +140,34 @@ static void test_scale_number(CuTest *tc) { static void test_unit_name(CuTest *tc) { unit *u; - char name[32]; test_cleanup(); test_create_world(); u = test_create_unit(test_create_faction(test_create_race("human")), findregion(0, 0)); + renumber_unit(u, 666); unit_setname(u, "Hodor"); - _snprintf(name, sizeof(name), "Hodor (%s)", itoa36(u->no)); - CuAssertStrEquals(tc, name, unitname(u)); + CuAssertStrEquals(tc, "Hodor (ii)", unitname(u)); test_cleanup(); } static void test_unit_name_from_race(CuTest *tc) { unit *u; - char name[32]; struct locale *lang; test_cleanup(); test_create_world(); u = test_create_unit(test_create_faction(test_create_race("human")), findregion(0, 0)); + renumber_unit(u, 666); unit_setname(u, NULL); lang = get_or_create_locale("de"); locale_setstring(lang, rc_name_s(u->_race, NAME_SINGULAR), "Mensch"); locale_setstring(lang, rc_name_s(u->_race, NAME_PLURAL), "Menschen"); - _snprintf(name, sizeof(name), "Mensch (%s)", itoa36(u->no)); - CuAssertStrEquals(tc, name, unitname(u)); + CuAssertStrEquals(tc, "Mensch (ii)", unitname(u)); CuAssertStrEquals(tc, "Mensch", unit_getname(u)); u->number = 2; - _snprintf(name, sizeof(name), "Menschen (%s)", itoa36(u->no)); - CuAssertStrEquals(tc, name, unitname(u)); + CuAssertStrEquals(tc, "Menschen (ii)", unitname(u)); CuAssertStrEquals(tc, "Menschen", unit_getname(u)); test_cleanup(); diff --git a/src/laws.test.c b/src/laws.test.c index 1bec0e6b4..d4753ec19 100644 --- a/src/laws.test.c +++ b/src/laws.test.c @@ -521,7 +521,6 @@ static void test_pay_cmd_other_building(CuTest *tc) { order *ord; faction *f; building *b; - char cmd[32]; test_setup(); setup_pay_cmd(&fix); @@ -531,8 +530,7 @@ static void test_pay_cmd_other_building(CuTest *tc) { config_set("rules.region_owner_pay_building", "lighthouse"); update_owners(b->region); - _snprintf(cmd, sizeof(cmd), "NOT %s", itoa36(b->no)); - ord = create_order(K_PAY, f->locale, cmd); + ord = create_order(K_PAY, f->locale, "NOT %s", itoa36(b->no)); assert(ord); CuAssertPtrEquals(tc, fix.u1, building_owner(b)); CuAssertIntEquals(tc, 0, pay_cmd(fix.u1, ord)); From d94cde67a4e3ca32fc65c3f1832a74280354b8c2 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 10 Jan 2017 16:31:05 +0100 Subject: [PATCH 32/84] kill autoconf.h, replace platform.h for C99 compatibility work --- CMakeLists.txt | 50 ---------- autoconf.h.in | 36 ------- src/academy.c | 2 +- src/alchemy.c | 10 +- src/attributes/dict.c | 8 +- src/attributes/hate.c | 2 +- src/attributes/moved.c | 2 +- src/attributes/movement.c | 2 +- src/attributes/racename.c | 4 +- src/attributes/raceprefix.c | 4 +- src/battle.c | 66 ++++++------- src/battle.h | 1 + src/bind_building.c | 2 +- src/bind_dict.c | 2 +- src/bind_gmtool.c | 6 +- src/bind_region.c | 2 +- src/bind_ship.c | 2 +- src/building_action.c | 10 +- src/creport.c | 8 +- src/economy.c | 64 ++++++------- src/give.c | 4 +- src/gmtool.c | 4 +- src/guard.h | 3 + src/items.c | 2 +- src/items/artrewards.c | 2 +- src/items/demonseye.c | 4 +- src/items/speedsail.c | 4 +- src/items/weapons.c | 2 +- src/items/xerewards.c | 2 +- src/kernel/alliance.c | 4 +- src/kernel/ally.c | 6 +- src/kernel/build.c | 34 +++---- src/kernel/building.c | 10 +- src/kernel/building.h | 2 + src/kernel/building.test.c | 2 +- src/kernel/config.c | 13 +-- src/kernel/config.h | 1 + src/kernel/connection.c | 68 ++++++------- src/kernel/connection.h | 2 +- src/kernel/curse.c | 20 ++-- src/kernel/curse.h | 2 + src/kernel/equipment.c | 8 +- src/kernel/faction.c | 10 +- src/kernel/faction.h | 2 + src/kernel/group.c | 4 +- src/kernel/item.c | 22 ++--- src/kernel/jsonconf.c | 6 +- src/kernel/messages.c | 4 +- src/kernel/order.c | 2 +- src/kernel/plane.c | 2 +- src/kernel/pool.c | 10 +- src/kernel/race.c | 4 +- src/kernel/region.c | 16 ++-- src/kernel/region.h | 1 + src/kernel/resources.c | 4 +- src/kernel/save.c | 24 ++--- src/kernel/save.test.c | 8 +- src/kernel/ship.c | 10 +- src/kernel/spell.c | 2 +- src/kernel/spellbook.c | 2 +- src/kernel/terrain.c | 2 +- src/kernel/unit.c | 18 ++-- src/kernel/unit.test.c | 8 +- src/kernel/xmlreader.c | 24 ++--- src/laws.c | 86 ++++++++--------- src/laws.h | 1 + src/lighthouse.c | 4 +- src/lighthouse.h | 2 + src/listbox.c | 2 +- src/magic.c | 42 ++++---- src/magic.h | 1 + src/market.test.c | 2 +- src/modules/arena.c | 14 +-- src/modules/autoseed.c | 10 +- src/modules/museum.c | 8 +- src/modules/score.c | 2 +- src/monsters.c | 16 ++-- src/morale.c | 2 +- src/move.c | 24 ++--- src/move.h | 5 +- src/names.c | 6 +- src/platform.h | 180 ++--------------------------------- src/prefix.c | 2 +- src/races/dragons.c | 2 +- src/races/races.c | 2 +- src/races/zombies.c | 8 +- src/randenc.c | 4 +- src/report.c | 80 ++++++++-------- src/report.test.c | 6 +- src/reports.c | 44 ++++----- src/skill.h | 2 +- src/spells.c | 103 ++++++++++---------- src/spells/borders.c | 8 +- src/spells/borders.h | 3 + src/spells/buildingcurse.c | 2 +- src/spells/combatspells.c | 30 +++--- src/spells/flyingship.h | 2 + src/spells/regioncurse.c | 28 +++--- src/spells/shipcurse.c | 6 +- src/spells/unitcurse.c | 16 ++-- src/spy.c | 6 +- src/sqlite.c | 4 +- src/study.c | 18 ++-- src/summary.c | 8 +- src/test_eressea.c | 2 +- src/travelthru.test.c | 2 +- src/triggers/changefaction.c | 2 +- src/triggers/changerace.c | 2 +- src/triggers/clonedied.c | 2 +- src/triggers/createcurse.c | 2 +- src/triggers/createunit.c | 2 +- src/triggers/gate.c | 2 +- src/triggers/giveitem.c | 2 +- src/triggers/killunit.c | 2 +- src/triggers/shock.c | 6 +- src/triggers/timeout.c | 2 +- src/triggers/unitmessage.c | 6 +- src/upkeep.c | 12 +-- src/util/attrib.c | 2 +- src/util/attrib.h | 2 + src/util/attrib.test.c | 2 +- src/util/crmessage.c | 10 +- src/util/event.c | 4 +- src/util/goodies.c | 2 +- src/util/language.c | 8 +- src/util/language.h | 2 +- src/util/lists.c | 2 +- src/util/log.test.c | 6 +- src/util/message.c | 2 +- src/util/nrmessage.c | 6 +- src/util/translation.c | 12 +-- src/vortex.c | 14 +-- src/vortex.h | 5 + src/wormhole.c | 2 +- 134 files changed, 683 insertions(+), 902 deletions(-) delete mode 100644 autoconf.h.in diff --git a/CMakeLists.txt b/CMakeLists.txt index f6b931e61..c08e16c20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,56 +14,6 @@ find_package (Curses) find_package (Lua REQUIRED) find_package (ToLua REQUIRED) -INCLUDE (CheckIncludeFiles) -INCLUDE (CheckSymbolExists) -CHECK_INCLUDE_FILES (stdbool.h HAVE_STDBOOL_H) -CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H) -CHECK_INCLUDE_FILES (io.h HAVE_IO_H) -CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H) -CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H) -IF (HAVE_IO_H) -CHECK_SYMBOL_EXISTS (_access "io.h" HAVE__ACCESS) -ENDIF (HAVE_IO_H) -IF (HAVE_WINDOWS_H) -CHECK_SYMBOL_EXISTS (_sleep "windows.h" HAVE__SLEEP) -ENDIF(HAVE_WINDOWS_H) -IF(HAVE_STDBOOL_H) -CHECK_SYMBOL_EXISTS (_Bool "stdbool.h" HAVE__BOOL) -ENDIF(HAVE_STDBOOL_H) -IF(HAVE_UNISTD_H) -CHECK_SYMBOL_EXISTS (sleep "unistd.h" HAVE_SLEEP) -CHECK_SYMBOL_EXISTS (usleep "unistd.h" HAVE_USLEEP) -CHECK_SYMBOL_EXISTS (access "unistd.h" HAVE_ACCESS) -ENDIF(HAVE_UNISTD_H) -CHECK_SYMBOL_EXISTS (strlcpy "string.h" HAVE_STRLCPY) -CHECK_SYMBOL_EXISTS (strlcat "string.h" HAVE_STRLCAT) -CHECK_SYMBOL_EXISTS (slprintf "string.h" HAVE_SLPRINTF) -CHECK_SYMBOL_EXISTS (strcasecmp "string.h" HAVE_STRCASECMP) -CHECK_SYMBOL_EXISTS (strncasecmp "string.h" HAVE_STRNCASECMP) -CHECK_SYMBOL_EXISTS (_strlwr "string.h" HAVE__STRLWR) -CHECK_SYMBOL_EXISTS (_strcmpl "string.h" HAVE__STRCMPL) -CHECK_SYMBOL_EXISTS (_strdup "string.h" HAVE__STRDUP) -CHECK_SYMBOL_EXISTS (_stricmp "string.h" HAVE__STRICMP) -CHECK_SYMBOL_EXISTS (_memicmp "string.h" HAVE__MEMICMP) -CHECK_SYMBOL_EXISTS (strcmpl "string.h" HAVE_STRCMPL) -CHECK_SYMBOL_EXISTS (strdup "string.h" HAVE_STRDUP) -CHECK_SYMBOL_EXISTS (stricmp "string.h" HAVE_STRICMP) -CHECK_SYMBOL_EXISTS (memicmp "string.h" HAVE_MEMICMP) -CHECK_SYMBOL_EXISTS (strlwr "string.h" HAVE_STRLWR) -CHECK_SYMBOL_EXISTS (snprintf "stdio.h" HAVE_SNPRINTF) -CHECK_SYMBOL_EXISTS (_snprintf "stdio.h" HAVE__SNPRINTF) -CHECK_SYMBOL_EXISTS (mkdir "sys/stat.h" HAVE_SYS_STAT_MKDIR) -CHECK_SYMBOL_EXISTS (mkdir "direct.h" HAVE_DIRECT_MKDIR) -CHECK_SYMBOL_EXISTS (_mkdir "direct.h" HAVE_DIRECT__MKDIR) - -CONFIGURE_FILE ( - ${CMAKE_CURRENT_SOURCE_DIR}/autoconf.h.in - ${CMAKE_BINARY_DIR}/include/autoconf.h) -INCLUDE_DIRECTORIES (${CMAKE_BINARY_DIR}/include) - -## skip compiler/libc detection and force cmake autoconf: -#add_definitions(-DUSE_AUTOCONF) - add_subdirectory (cJSON) add_subdirectory (storage) add_subdirectory (iniparser) diff --git a/autoconf.h.in b/autoconf.h.in deleted file mode 100644 index f3f197db1..000000000 --- a/autoconf.h.in +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once -#ifndef CMAKE_AUTOCONF_H -#define CMAKE_AUTOCONF_H -#cmakedefine HAVE_STDBOOL_H 1 -#cmakedefine HAVE_STRINGS_H 1 -#cmakedefine HAVE_WINDOWS_H 1 -#cmakedefine HAVE_IO_H 1 -#cmakedefine HAVE_UNISTD_H 1 -#cmakedefine HAVE__BOOL 1 -#cmakedefine HAVE_STRCASECMP 1 -#cmakedefine HAVE_STRNCASECMP 1 -#cmakedefine HAVE__STRICMP 1 -#cmakedefine HAVE_SNPRINTF 1 -#cmakedefine HAVE__SNPRINTF 1 -#cmakedefine HAVE_ACCESS 1 -#cmakedefine HAVE__ACCESS 1 -#cmakedefine HAVE_SLEEP 1 -#cmakedefine HAVE_USLEEP 1 -#cmakedefine HAVE__SLEEP 1 -#cmakedefine HAVE_STRDUP 1 -#cmakedefine HAVE__STRDUP 1 -#cmakedefine HAVE_STRICMP 1 -#cmakedefine HAVE__STRCMPL 1 -#cmakedefine HAVE_STRCMPL 1 -#cmakedefine HAVE__MEMICMP 1 -#cmakedefine HAVE_MEMICMP 1 -#cmakedefine HAVE__STRLWR 1 -#cmakedefine HAVE_STRLWR 1 -#cmakedefine HAVE_STRLCPY 1 -#cmakedefine HAVE_STRLCAT 1 -#cmakedefine HAVE_SLPRINTF 1 -#cmakedefine HAVE_SYS_STAT_MKDIR 1 -#cmakedefine HAVE_DIRECT_MKDIR 1 -#cmakedefine HAVE_DIRECT__MKDIR 1 - -#endif diff --git a/src/academy.c b/src/academy.c index f6b70873e..496c1ef8e 100644 --- a/src/academy.c +++ b/src/academy.c @@ -35,7 +35,7 @@ bool academy_can_teach(unit *teacher, unit *student, skill_t sk) { const struct building_type *btype = bt_find("academy"); if (active_building(teacher, btype) && active_building(student, btype)) { int j = study_cost(student, sk); - j = _max(50, j * 2); + j = MAX(50, j * 2); /* kann Einheit das zahlen? */ return get_pooled(student, get_resourcetype(R_SILVER), GET_DEFAULT, j) >= j; /* sonst nehmen sie nicht am Unterricht teil */ diff --git a/src/alchemy.c b/src/alchemy.c index 9bc180700..ddbe46b8e 100644 --- a/src/alchemy.c +++ b/src/alchemy.c @@ -73,12 +73,12 @@ void herbsearch(unit * u, int max) } if (max) - max = _min(max, rherbs(r)); + max = MIN(max, rherbs(r)); else max = rherbs(r); herbsfound = ntimespprob(effsk * u->number, (double)rherbs(r) / 100.0F, -0.01F); - herbsfound = _min(herbsfound, max); + herbsfound = MIN(herbsfound, max); rsetherbs(r, (short) (rherbs(r) - herbsfound)); if (herbsfound) { @@ -156,7 +156,7 @@ static int potion_water_of_life(unit * u, region *r, int amount) { } static int potion_healing(unit * u, int amount) { - u->hp = _min(unit_max_hp(u) * u->number, u->hp + 400 * amount); + u->hp = MIN(unit_max_hp(u) * u->number, u->hp + 400 * amount); return amount; } @@ -182,7 +182,7 @@ static int potion_power(unit *u, int amount) { amount = use; } /* Verf�nffacht die HP von max. 10 Personen in der Einheit */ - u->hp += _min(u->number, 10 * amount) * unit_max_hp(u) * 4; + u->hp += MIN(u->number, 10 * amount) * unit_max_hp(u) * 4; return amount; } @@ -248,7 +248,7 @@ static void free_potiondelay(attrib * a) { static int age_potiondelay(attrib * a, void *owner) { potiondelay *pd = (potiondelay *)a->data.v; - unused_arg(owner); + UNUSED_ARG(owner); pd->amount = do_potion(pd->u, pd->r, pd->ptype, pd->amount); return AT_AGE_REMOVE; } diff --git a/src/attributes/dict.c b/src/attributes/dict.c index 2bba9ea7b..a3f034145 100644 --- a/src/attributes/dict.c +++ b/src/attributes/dict.c @@ -103,7 +103,7 @@ static int dict_read(attrib * a, void *owner, gamedata *data) float flt; READ_STR(store, name, sizeof(name)); - dd->name = _strdup(name); + dd->name = strdup(name); READ_INT(store, &n); dd->type = (dict_type)n; switch (dd->type) { @@ -122,7 +122,7 @@ static int dict_read(attrib * a, void *owner, gamedata *data) break; case TSTRING: READ_STR(store, name, sizeof(name)); - dd->data.str = _strdup(name); + dd->data.str = strdup(name); break; case TBUILDING: result = @@ -199,7 +199,7 @@ struct attrib *dict_create(const char *name, dict_type type, variant value) { attrib *a = a_new(&at_dict); dict_data *data = (dict_data *)a->data.v; - data->name = _strdup(name); + data->name = strdup(name); dict_set(a, type, value); return a; @@ -214,7 +214,7 @@ void dict_set(attrib * a, dict_type type, variant value) data->type = type; switch (type) { case TSTRING: - data->data.str = value.v ? _strdup(value.v) : NULL; + data->data.str = value.v ? strdup(value.v) : NULL; break; case TINTEGER: data->data.i = value.i; diff --git a/src/attributes/hate.c b/src/attributes/hate.c index 98a36a029..17155fc71 100644 --- a/src/attributes/hate.c +++ b/src/attributes/hate.c @@ -30,7 +30,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. static int verify_hate(attrib * a, void *owner) { - unused_arg(owner); + UNUSED_ARG(owner); if (a->data.v == NULL) { return 0; } diff --git a/src/attributes/moved.c b/src/attributes/moved.c index 3da2a4c3b..c66a5489c 100644 --- a/src/attributes/moved.c +++ b/src/attributes/moved.c @@ -27,7 +27,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. static int age_moved(attrib * a, void *owner) { - unused_arg(owner); + UNUSED_ARG(owner); --a->data.i; return a->data.i > 0; } diff --git a/src/attributes/movement.c b/src/attributes/movement.c index 874da5eb3..4d79039ef 100644 --- a/src/attributes/movement.c +++ b/src/attributes/movement.c @@ -67,7 +67,7 @@ void set_movement(attrib ** alist, int type) static int age_speedup(attrib * a, void *owner) { - unused_arg(owner); + UNUSED_ARG(owner); if (a->data.sa[0] > 0) { assert(a->data.sa[0] - a->data.sa[1] >= SHRT_MIN); assert(a->data.sa[0] - a->data.sa[1] <= SHRT_MAX); diff --git a/src/attributes/racename.c b/src/attributes/racename.c index b408cbf6a..c45fa3815 100644 --- a/src/attributes/racename.c +++ b/src/attributes/racename.c @@ -43,7 +43,7 @@ void set_racename(attrib ** palist, const char *name) attrib *a = a_find(*palist, &at_racename); if (!a && name) { a = a_add(palist, a_new(&at_racename)); - a->data.v = _strdup(name); + a->data.v = strdup(name); } else if (a && !name) { a_remove(palist, a); @@ -51,7 +51,7 @@ void set_racename(attrib ** palist, const char *name) else if (a) { if (strcmp(a->data.v, name) != 0) { free(a->data.v); - a->data.v = _strdup(name); + a->data.v = strdup(name); } } } diff --git a/src/attributes/raceprefix.c b/src/attributes/raceprefix.c index 15f0036c1..a87edfb80 100644 --- a/src/attributes/raceprefix.c +++ b/src/attributes/raceprefix.c @@ -41,7 +41,7 @@ void set_prefix(attrib ** ap, const char *str) free(a->data.v); } assert(a->type == &at_raceprefix); - a->data.v = _strdup(str); + a->data.v = strdup(str); } const char *get_prefix(attrib * a) @@ -53,7 +53,7 @@ const char *get_prefix(attrib * a) str = (char *)a->data.v; /* conversion of old prefixes */ if (strncmp(str, "prefix_", 7) == 0) { - ((attrib *)a)->data.v = _strdup(str + 7); + ((attrib *)a)->data.v = strdup(str + 7); free(str); str = (char *)a->data.v; } diff --git a/src/battle.c b/src/battle.c index 9d2d09cc0..550449ddd 100644 --- a/src/battle.c +++ b/src/battle.c @@ -440,7 +440,7 @@ static int get_row(const side * s, int row, const side * vs) /* every entry in the size[] array means someone trying to defend us. * 'retreat' is the number of rows falling. */ - result = _max(FIRST_ROW, row - retreat); + result = MAX(FIRST_ROW, row - retreat); return result; } @@ -600,12 +600,12 @@ weapon_skill(const weapon_type * wtype, const unit * u, bool attacking) if (u_race(u) == get_race(RC_ORC)) { int sword = effskill(u, SK_MELEE, 0); int spear = effskill(u, SK_SPEAR, 0); - skill = _max(sword, spear) - 3; + skill = MAX(sword, spear) - 3; if (attacking) { - skill = _max(skill, u_race(u)->at_default); + skill = MAX(skill, u_race(u)->at_default); } else { - skill = _max(skill, u_race(u)->df_default); + skill = MAX(skill, u_race(u)->df_default); } } else { @@ -685,7 +685,7 @@ static int CavalryBonus(const unit * u, troop enemy, int type) /* only half against trolls */ if (skl > 0) { if (type == BONUS_SKILL) { - int dmg = _min(skl, 8); + int dmg = MIN(skl, 8); if (u_race(enemy.fighter->unit) == get_race(RC_TROLL)) { dmg = dmg / 4; } @@ -696,7 +696,7 @@ static int CavalryBonus(const unit * u, troop enemy, int type) } else { skl = skl / 2; - return _min(skl, 4); + return MIN(skl, 4); } } } @@ -1008,7 +1008,7 @@ static void vampirism(troop at, int damage) if (gain > 0) { int maxhp = unit_max_hp(at.fighter->unit); at.fighter->person[at.index].hp = - _min(gain + at.fighter->person[at.index].hp, maxhp); + MIN(gain + at.fighter->person[at.index].hp, maxhp); } } } @@ -1203,15 +1203,15 @@ terminate(troop dt, troop at, int type, const char *damage, bool missile) /* TODO not sure if res could be > 1 here */ if (magic) { - da = (int)(_max(da * res, 0)); + da = (int)(MAX(da * res, 0)); } if (type != AT_COMBATSPELL && type != AT_SPELL) { if (rule_damage & DAMAGE_CRITICAL) { double kritchance = (sk * 3 - sd) / 200.0; - kritchance = _max(kritchance, 0.005); - kritchance = _min(0.9, kritchance); + kritchance = MAX(kritchance, 0.005); + kritchance = MIN(0.9, kritchance); while (chance(kritchance)) { if (bdebug) { @@ -1238,11 +1238,11 @@ terminate(troop dt, troop at, int type, const char *damage, bool missile) /* Skilldifferenzbonus */ if (rule_damage & DAMAGE_SKILL_BONUS) { - da += _max(0, (sk - sd) / DAMAGE_QUOTIENT); + da += MAX(0, (sk - sd) / DAMAGE_QUOTIENT); } } - rda = _max(da - ar, 0); + rda = MAX(da - ar, 0); if ((u_race(du)->battle_flags & BF_INV_NONMAGIC) && !magic) rda = 0; @@ -1275,7 +1275,7 @@ terminate(troop dt, troop at, int type, const char *damage, bool missile) } /* gibt R�stung +effect f�r duration Treffer */ if (me->typ == SHIELD_ARMOR) { - rda = _max(rda - me->effect, 0); + rda = MAX(rda - me->effect, 0); me->duration--; } } @@ -1474,7 +1474,7 @@ troop select_enemy(fighter * af, int minrow, int maxrow, int select) minrow = FIGHT_ROW; maxrow = BEHIND_ROW; } - minrow = _max(minrow, FIGHT_ROW); + minrow = MAX(minrow, FIGHT_ROW); enemies = count_enemies(b, af, minrow, maxrow, select); @@ -1574,7 +1574,7 @@ static troop select_opponent(battle * b, troop at, int mindist, int maxdist) dt = select_enemy(at.fighter, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE); } else { - mindist = _max(mindist, FIGHT_ROW); + mindist = MAX(mindist, FIGHT_ROW); dt = select_enemy(at.fighter, mindist, maxdist, SELECT_ADVANCE); } @@ -1735,7 +1735,7 @@ void do_combatmagic(battle * b, combatmagic_t was) level = eff_spelllevel(mage, sp, level, 1); if (sl > 0) - level = _min(sl, level); + level = MIN(sl, level); if (level < 0) { report_failed_spell(b, mage, sp); free_order(ord); @@ -1822,7 +1822,7 @@ static void do_combatspell(troop at) level = eff_spelllevel(caster, sp, fi->magic, 1); if ((sl = get_combatspelllevel(caster, 1)) > 0) - level = _min(level, sl); + level = MIN(level, sl); if (fumble(r, caster, sp, level)) { report_failed_spell(b, caster, sp); @@ -2056,7 +2056,7 @@ void dazzle(battle * b, troop * td) void damage_building(battle * b, building * bldg, int damage_abs) { - bldg->size = _max(1, bldg->size - damage_abs); + bldg->size = MAX(1, bldg->size - damage_abs); /* Wenn Burg, dann gucken, ob die Leute alle noch in das Geb�ude passen. */ @@ -2332,7 +2332,7 @@ void do_regenerate(fighter * af) while (ta.index--) { struct person *p = af->person + ta.index; p->hp += effskill(au, SK_STAMINA, 0); - p->hp = _min(unit_max_hp(au), p->hp); + p->hp = MIN(unit_max_hp(au), p->hp); } } @@ -2391,10 +2391,10 @@ double fleechance(unit * u) if (u_race(u) == get_race(RC_HALFLING)) { c += 0.20; - c = _min(c, 0.90); + c = MIN(c, 0.90); } else { - c = _min(c, 0.75); + c = MIN(c, 0.75); } if (a != NULL) @@ -2518,7 +2518,7 @@ static void loot_items(fighter * corpse) float lootfactor = (float)dead / (float)u->number; /* only loot the dead! */ int maxloot = (int)((float)itm->number * lootfactor); if (maxloot > 0) { - int i = _min(10, maxloot); + int i = MIN(10, maxloot); for (; i != 0; --i) { int loot = maxloot / i; @@ -2599,7 +2599,7 @@ static void battle_effects(battle * b, int dead_players) { region *r = b->region; int dead_peasants = - _min(rpeasants(r), (int)(dead_players * PopulationDamage())); + MIN(rpeasants(r), (int)(dead_players * PopulationDamage())); if (dead_peasants) { deathcounts(r, dead_peasants + dead_players); add_chaoscount(r, dead_peasants / 2); @@ -3092,7 +3092,7 @@ static void print_stats(battle * b) for (s = b->sides; s != b->sides + b->nsides; ++s) { if (!selist_empty(s->leader.fighters)) { - b->max_tactics = _max(b->max_tactics, s->leader.value); + b->max_tactics = MAX(b->max_tactics, s->leader.value); } } @@ -3258,7 +3258,7 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack) /* change_effect wird in ageing gemacht */ /* Effekte von Artefakten */ - strongmen = _min(fig->unit->number, trollbelts(u)); + strongmen = MIN(fig->unit->number, trollbelts(u)); /* Hitpoints, Attack- und Defence-Boni f�r alle Personen */ for (i = 0; i < fig->alive; i++) { @@ -3448,7 +3448,7 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack) else p_bonus += 3; } while (rnd >= 97); - bonus = _max(p_bonus, bonus); + bonus = MAX(p_bonus, bonus); } tactics += bonus; } @@ -3519,11 +3519,11 @@ static const char *simplename(region * r) const char *cp = rname(r, default_locale); for (i = 0; *cp && i != 16; ++i, ++cp) { int c = *(unsigned char *)cp; - while (c && !isalpha(c) && !isxspace(c)) { + while (c && !isalpha(c) && !isspace(c)) { ++cp; c = *(unsigned char *)cp; } - if (isxspace(c)) + if (isspace(c)) name[i] = '_'; else name[i] = *cp; @@ -3546,10 +3546,10 @@ battle *make_battle(region * r) bld->sizeleft = bld->size; if (battledebug) { - char zText[MAX_PATH]; - char zFilename[MAX_PATH]; + char zText[4096]; + char zFilename[4096]; join_path(basepath(), "battles", zText, sizeof(zText)); - if (_mkdir(zText) != 0) { + if (mkdir(zText, 0777) != 0) { log_error("could not create subdirectory for battle logs: %s", zText); battledebug = false; } @@ -4104,7 +4104,7 @@ static void battle_flee(battle * b) troop dt; int runners = 0; /* Flucht nicht bei mehr als 600 HP. Damit Wyrme t�tbar bleiben. */ - int runhp = _min(600, (int)(0.9 + unit_max_hp(u) * hpflee(u->status))); + int runhp = MIN(600, (int)(0.9 + unit_max_hp(u) * hpflee(u->status))); if (u->ship && fval(u->region->terrain, SEA_REGION)) { /* keine Flucht von Schiffen auf hoher See */ @@ -4147,7 +4147,7 @@ static void battle_flee(battle * b) if (fig->person[dt.index].flags & FL_PANICED) { ispaniced = EFFECT_PANIC_SPELL; } - if (chance(_min(fleechance(u) + ispaniced, 0.90))) { + if (chance(MIN(fleechance(u) + ispaniced, 0.90))) { ++runners; flee(dt); } diff --git a/src/battle.h b/src/battle.h index cee894b6c..dbdc7e1cb 100644 --- a/src/battle.h +++ b/src/battle.h @@ -20,6 +20,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define H_KRNL_BATTLE #include +#include #ifdef __cplusplus extern "C" { diff --git a/src/bind_building.c b/src/bind_building.c index 3724d4db5..f8cf4e6df 100644 --- a/src/bind_building.c +++ b/src/bind_building.c @@ -92,7 +92,7 @@ static int tolua_building_set_info(lua_State * L) const char *info = tolua_tostring(L, 2, 0); free(self->display); if (info) - self->display = _strdup(info); + self->display = strdup(info); else self->display = NULL; return 0; diff --git a/src/bind_dict.c b/src/bind_dict.c index 32d3c498d..40f73690f 100644 --- a/src/bind_dict.c +++ b/src/bind_dict.c @@ -106,7 +106,7 @@ static int tolua_dict_set_string(lua_State * L) attrib *a = a_find(*self, &at_dict); variant val; - val.v = _strdup(value); + val.v = strdup(value); for (; a && a->type == &at_dict; a = a->next) { if (strcmp(dict_name(a), name) == 0) { diff --git a/src/bind_gmtool.c b/src/bind_gmtool.c index 3c07bb3b7..e4ae939f9 100644 --- a/src/bind_gmtool.c +++ b/src/bind_gmtool.c @@ -133,14 +133,14 @@ static int tolua_selected_regions(lua_State * L) static int tolua_state_open(lua_State * L) { - unused_arg(L); + UNUSED_ARG(L); state_open(); return 0; } static int tolua_state_close(lua_State * L) { - unused_arg(L); + UNUSED_ARG(L); state_close(current_state); return 0; } @@ -188,7 +188,7 @@ static void lua_paint_info(struct window *wnd, const struct state *st) break; else { size_t len = end - str; - int bytes = _min((int)len, size); + int bytes = MIN((int)len, size); mvwaddnstr(win, line++, 1, str, bytes); wclrtoeol(win); str = end + 1; diff --git a/src/bind_region.c b/src/bind_region.c index 1296e4a65..2e328dc96 100644 --- a/src/bind_region.c +++ b/src/bind_region.c @@ -615,7 +615,7 @@ static int tolua_plane_set_name(lua_State * L) const char *str = tolua_tostring(L, 2, 0); free(self->name); if (str) - self->name = _strdup(str); + self->name = strdup(str); else self->name = 0; return 0; diff --git a/src/bind_ship.c b/src/bind_ship.c index f1c1c412a..95006cf5f 100644 --- a/src/bind_ship.c +++ b/src/bind_ship.c @@ -94,7 +94,7 @@ static int tolua_ship_set_display(lua_State * L) { ship *self = (ship *)tolua_tousertype(L, 1, 0); free(self->display); - self->display = _strdup(tolua_tostring(L, 2, 0)); + self->display = strdup(tolua_tostring(L, 2, 0)); return 0; } diff --git a/src/building_action.c b/src/building_action.c index 5c533f4d0..f72af4412 100644 --- a/src/building_action.c +++ b/src/building_action.c @@ -93,7 +93,7 @@ lc_write(const struct attrib *a, const void *owner, struct storage *store) const char *fname = data->fname; const char *fparam = data->param; - unused_arg(owner); + UNUSED_ARG(owner); WRITE_TOK(store, fname); WRITE_TOK(store, fparam ? fparam : NULLSTRING); } @@ -116,7 +116,7 @@ static int lc_read(struct attrib *a, void *owner, gamedata *data) b = 0; } else { - bd->fname = _strdup(name); + bd->fname = strdup(name); } READ_TOK(store, name, sizeof(name)); if (strcmp(name, "tnnL") == 0) { @@ -127,7 +127,7 @@ static int lc_read(struct attrib *a, void *owner, gamedata *data) if (strcmp(name, NULLSTRING) == 0) bd->param = 0; else { - bd->param = _strdup(name); + bd->param = strdup(name); } if (result == 0 && !b) { return AT_READ_FAIL; @@ -146,8 +146,8 @@ void building_addaction(building * b, const char *fname, const char *param) { attrib *a = a_add(&b->attribs, a_new(&at_building_action)); building_action *data = (building_action *)a->data.v; - data->fname = _strdup(fname); + data->fname = strdup(fname); if (param) { - data->param = _strdup(param); + data->param = strdup(param); } } diff --git a/src/creport.c b/src/creport.c index 6cd9b7a27..5e01433d4 100644 --- a/src/creport.c +++ b/src/creport.c @@ -125,7 +125,7 @@ static const char *translate(const char *key, const char *value) } else t = malloc(sizeof(translation)); - t->key = _strdup(key); + t->key = strdup(key); t->value = value; t->next = translation_table[kk]; translation_table[kk] = t; @@ -361,7 +361,7 @@ static int cr_race(variant var, char *buffer, const void *userdata) static int cr_alliance(variant var, char *buffer, const void *userdata) { const alliance *al = (const alliance *)var.v; - unused_arg(userdata); + UNUSED_ARG(userdata); if (al != NULL) { sprintf(buffer, "%d", al->id); } @@ -372,7 +372,7 @@ static int cr_skill(variant var, char *buffer, const void *userdata) { const faction *report = (const faction *)userdata; skill_t sk = (skill_t)var.i; - unused_arg(userdata); + UNUSED_ARG(userdata); if (sk != NOSKILL) sprintf(buffer, "\"%s\"", translate(mkname("skill", skillnames[sk]), skillname(sk, @@ -385,7 +385,7 @@ static int cr_skill(variant var, char *buffer, const void *userdata) static int cr_order(variant var, char *buffer, const void *userdata) { order *ord = (order *)var.v; - unused_arg(userdata); + UNUSED_ARG(userdata); if (ord != NULL) { char cmd[ORDERSIZE]; char *wp = buffer; diff --git a/src/economy.c b/src/economy.c index 01954ff54..7edbbcb12 100644 --- a/src/economy.c +++ b/src/economy.c @@ -337,11 +337,11 @@ static int do_recruiting(recruitment * recruits, int available) int number, dec; double multi = 2.0 * rc->recruit_multi; - number = _min(req->qty, (int)(get / multi)); + number = MIN(req->qty, (int)(get / multi)); if (rc->recruitcost) { int afford = get_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, number * rc->recruitcost) / rc->recruitcost; - number = _min(number, afford); + number = MIN(number, afford); } if (u->number + number > UNIT_MAXSIZE) { ADDMSG(&u->faction->msgs, msg_feedback(u, req->ord, "error_unit_size", @@ -551,7 +551,7 @@ static void recruit(unit * u, struct order *ord, request ** recruitorders) if (recruitcost > 0) { int pooled = get_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, recruitcost * n); - n = _min(n, pooled / recruitcost); + n = MIN(n, pooled / recruitcost); } u->wants = n; @@ -990,12 +990,12 @@ static void allocate_resource(unit * u, const resource_type * rtype, int want) rring = get_resourcetype(R_RING_OF_NIMBLEFINGER); if (rring) { int dm = i_get(u->items, rring->itype); - amount += skill * _min(u->number, dm) * (roqf_factor() - 1); + amount += skill * MIN(u->number, dm) * (roqf_factor() - 1); } /* Schaffenstrunk: */ if ((dm = get_effect(u, oldpotiontype[P_DOMORE])) != 0) { - dm = _min(dm, u->number); + dm = MIN(dm, u->number); change_effect(u, oldpotiontype[P_DOMORE], -dm); amount += dm * skill; /* dm Personen produzieren doppelt */ } @@ -1091,7 +1091,7 @@ leveled_allocation(const resource_type * rtype, region * r, allocation * alist) } need = norders; - avail = _min(avail, norders); + avail = MIN(avail, norders); if (need > 0) { int use = 0; for (al = alist; al; al = al->next) @@ -1106,7 +1106,7 @@ leveled_allocation(const resource_type * rtype, region * r, allocation * alist) use += x; norders -= want; need -= x; - al->get = _min(al->want, al->get + (int)(x / al->save)); + al->get = MIN(al->want, al->get + (int)(x / al->save)); } } if (use) { @@ -1139,7 +1139,7 @@ attrib_allocation(const resource_type * rtype, region * r, allocation * alist) avail = 0; } - avail = _min(avail, norders); + avail = MIN(avail, norders); for (al = alist; al; al = al->next) { if (avail > 0) { int want = required(al->want, al->save); @@ -1149,7 +1149,7 @@ attrib_allocation(const resource_type * rtype, region * r, allocation * alist) ++x; avail -= x; norders -= want; - al->get = _min(al->want, (int)(x / al->save)); + al->get = MIN(al->want, (int)(x / al->save)); if (rdata->produce) { int use = required(al->get, al->save); if (use) @@ -1625,7 +1625,7 @@ static void buy(unit * u, request ** buyorders, struct order *ord) k -= a->data.i; } - n = _min(n, k); + n = MIN(n, k); if (!n) { cmistake(u, ord, 102, MSG_COMMERCE); @@ -1936,7 +1936,7 @@ static bool sell(unit * u, request ** sellorders, struct order *ord) /* Ein Händler kann nur 10 Güter pro Talentpunkt verkaufen. */ - n = _min(n, u->number * 10 * effskill(u, SK_TRADE, 0)); + n = MIN(n, u->number * 10 * effskill(u, SK_TRADE, 0)); if (!n) { cmistake(u, ord, 54, MSG_COMMERCE); @@ -1966,11 +1966,11 @@ static bool sell(unit * u, request ** sellorders, struct order *ord) if (o->type.ltype == ltype && o->unit->faction == u->faction) { int fpool = o->qty - get_pooled(o->unit, itype->rtype, GET_RESERVE, INT_MAX); - available -= _max(0, fpool); + available -= MAX(0, fpool); } } - n = _min(n, available); + n = MIN(n, available); if (n <= 0) { cmistake(u, ord, 264, MSG_COMMERCE); @@ -1995,7 +1995,7 @@ static bool sell(unit * u, request ** sellorders, struct order *ord) k -= a->data.i; } - n = _min(n, k); + n = MIN(n, k); assert(n >= 0); /* die Menge der verkauften Güter merken */ a->data.i += n; @@ -2052,7 +2052,7 @@ static void expandstealing(region * r, request * stealorders) n = 10; } if (n > 0) { - n = _min(n, g_requests[j].unit->wants); + n = MIN(n, g_requests[j].unit->wants); use_pooled(u, rsilver, GET_ALL, n); g_requests[j].unit->n = n; change_money(g_requests[j].unit, n); @@ -2106,8 +2106,8 @@ static void plant(unit * u, int raw) return; } - n = _min(skill * u->number, n); - n = _min(raw, n); + n = MIN(skill * u->number, n); + n = MIN(raw, n); /* Für jedes Kraut Talent*10% Erfolgschance. */ for (i = n; i > 0; i--) { if (rng_int() % 10 < skill) @@ -2152,14 +2152,14 @@ static void planttrees(unit * u, int raw) } /* wenn eine Anzahl angegeben wurde, nur soviel verbrauchen */ - raw = _min(raw, skill * u->number); + raw = MIN(raw, skill * u->number); n = get_pooled(u, rtype, GET_DEFAULT, raw); if (n == 0) { ADDMSG(&u->faction->msgs, msg_feedback(u, u->thisorder, "resource_missing", "missing", rtype)); return; } - n = _min(raw, n); + n = MIN(raw, n); /* Für jeden Samen Talent*10% Erfolgschance. */ for (i = n; i > 0; i--) { @@ -2209,7 +2209,7 @@ static void breedtrees(unit * u, int raw) } /* wenn eine Anzahl angegeben wurde, nur soviel verbrauchen */ - raw = _min(skill * u->number, raw); + raw = MIN(skill * u->number, raw); n = get_pooled(u, rtype, GET_DEFAULT, raw); /* Samen prüfen */ if (n == 0) { @@ -2217,7 +2217,7 @@ static void breedtrees(unit * u, int raw) msg_feedback(u, u->thisorder, "resource_missing", "missing", rtype)); return; } - n = _min(raw, n); + n = MIN(raw, n); /* Für jeden Samen Talent*5% Erfolgschance. */ for (i = n; i > 0; i--) { @@ -2259,7 +2259,7 @@ static void breedhorses(unit * u) } effsk = effskill(u, SK_HORSE_TRAINING, 0); n = u->number * effsk; - n = _min(n, horses); + n = MIN(n, horses); for (c = 0; c < n; c++) { if (rng_int() % 100 < effsk) { @@ -2508,7 +2508,7 @@ static void steal_cmd(unit * u, struct order *ord, request ** stealorders) } } - i = _min(u->number, i_get(u->items, rring->itype)); + i = MIN(u->number, i_get(u->items, rring->itype)); if (i > 0) { n *= STEALINCOME * (u->number + i * (roqf_factor() - 1)); } @@ -2530,7 +2530,7 @@ static void steal_cmd(unit * u, struct order *ord, request ** stealorders) /* Nur soviel PRODUCEEXP wie auch tatsaechlich gemacht wurde */ - produceexp(u, SK_STEALTH, _min(n, u->number)); + produceexp(u, SK_STEALTH, MIN(n, u->number)); } /* ------------------------------------------------------------- */ @@ -2554,7 +2554,7 @@ static void expandentertainment(region * r) entertaining -= o->qty; /* Nur soviel PRODUCEEXP wie auch tatsächlich gemacht wurde */ - produceexp(u, SK_ENTERTAINMENT, _min(u->n, u->number)); + produceexp(u, SK_ENTERTAINMENT, MIN(u->n, u->number)); add_income(u, IC_ENTERTAIN, o->qty, u->n); fset(u, UFL_LONGACTION | UFL_NOTMOVING); } @@ -2605,7 +2605,7 @@ void entertain_cmd(unit * u, struct order *ord) max_e = getuint(); if (max_e != 0) { - u->wants = _min(u->wants, max_e); + u->wants = MIN(u->wants, max_e); } o = nextentertainer++; o->unit = u; @@ -2665,7 +2665,7 @@ expandwork(region * r, request * work_begin, request * work_end, int maxwork) if (blessedharvest_ct) { int happy = (int)curse_geteffect(get_curse(r->attribs, blessedharvest_ct)); - happy = _min(happy, jobs); + happy = MIN(happy, jobs); earnings += happy; } } @@ -2819,10 +2819,10 @@ void tax_cmd(unit * u, struct order *ord, request ** taxorders) max = INT_MAX; } if (!playerrace(u_race(u))) { - u->wants = _min(income(u), max); + u->wants = MIN(income(u), max); } else { - u->wants = _min(n * effskill(u, SK_TAXING, 0) * taxperlevel, max); + u->wants = MIN(n * effskill(u, SK_TAXING, 0) * taxperlevel, max); } u2 = is_guarded(r, u); @@ -2893,12 +2893,12 @@ void loot_cmd(unit * u, struct order *ord, request ** lootorders) max = INT_MAX; } if (!playerrace(u_race(u))) { - u->wants = _min(income(u), max); + u->wants = MIN(income(u), max); } else { /* For player start with 20 Silver +10 every 5 level of close combat skill*/ - int skbonus = (_max(effskill(u, SK_MELEE, 0), effskill(u, SK_SPEAR, 0)) * 2 / 10) + 2; - u->wants = _min(n * skbonus * 10, max); + int skbonus = (MAX(effskill(u, SK_MELEE, 0), effskill(u, SK_SPEAR, 0)) * 2 / 10) + 2; + u->wants = MIN(n * skbonus * 10, max); } o = (request *)calloc(1, sizeof(request)); diff --git a/src/give.c b/src/give.c index 524a27017..4f8417bf2 100644 --- a/src/give.c +++ b/src/give.c @@ -156,7 +156,7 @@ struct order *ord) assert(itype != NULL); n = get_pooled(src, item2resource(itype), GET_SLACK | GET_POOLED_SLACK, want); - n = _min(want, n); + n = MIN(want, n); r = n; if (dest && src->faction != dest->faction && src->faction->age < GiveRestriction()) { @@ -772,7 +772,7 @@ void give_cmd(unit * u, order * ord) msg_feedback(u, ord, "race_noregroup", "race", u_race(u))); return; } - n = _min(u->number, n); + n = MIN(u->number, n); msg = u2 ? give_men(n, u, u2, ord) : disband_men(n, u, ord); if (msg) { ADDMSG(&u->faction->msgs, msg); diff --git a/src/gmtool.c b/src/gmtool.c index b1b9a1bc1..3db673731 100644 --- a/src/gmtool.c +++ b/src/gmtool.c @@ -427,7 +427,7 @@ static void paint_info_region(window * wnd, const state * st) int line = 0, maxline = getmaxy(win) - 2; map_region *mr = cursor_region(&st->display, &st->cursor); - unused_arg(st); + UNUSED_ARG(st); werase(win); wxborder(win); if (mr && mr->r) { @@ -1398,7 +1398,7 @@ int curses_readline(struct lua_State *L, char *buffer, size_t size, const char *prompt) { - unused_arg(L); + UNUSED_ARG(L); askstring(hstatus, prompt, buffer, size); return buffer[0] != 0; } diff --git a/src/guard.h b/src/guard.h index 4fb6cbf56..101369f40 100644 --- a/src/guard.h +++ b/src/guard.h @@ -2,6 +2,9 @@ #ifndef H_GUARD #define H_GUARD + +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/items.c b/src/items.c index 6fbf957b3..6e995edaa 100644 --- a/src/items.c +++ b/src/items.c @@ -122,7 +122,7 @@ struct order *ord) double force; spell *sp = find_spell("antimagiczone"); attrib **ap = &r->attribs; - unused_arg(ord); + UNUSED_ARG(ord); assert(sp); /* Reduziert die Stärke jedes Spruchs um effect */ diff --git a/src/items/artrewards.c b/src/items/artrewards.c index 602841d23..23ab2119e 100644 --- a/src/items/artrewards.c +++ b/src/items/artrewards.c @@ -45,7 +45,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. static int age_peaceimmune(attrib * a, void *owner) { - unused_arg(owner); + UNUSED_ARG(owner); return (--a->data.i > 0) ? AT_AGE_KEEP : AT_AGE_REMOVE; } diff --git a/src/items/demonseye.c b/src/items/demonseye.c index ffc1c5179..563a16047 100644 --- a/src/items/demonseye.c +++ b/src/items/demonseye.c @@ -38,8 +38,8 @@ summon_igjarjuk(struct unit *u, const struct item_type *itype, int amount, struct order *ord) { struct plane *p = rplane(u->region); - unused_arg(amount); - unused_arg(itype); + UNUSED_ARG(amount); + UNUSED_ARG(itype); if (p != NULL) { ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "use_realworld_only", "")); return EUNUSABLE; diff --git a/src/items/speedsail.c b/src/items/speedsail.c index 8bdaa41ab..cb40e9a8c 100644 --- a/src/items/speedsail.c +++ b/src/items/speedsail.c @@ -42,8 +42,8 @@ use_speedsail(struct unit *u, const struct item_type *itype, int amount, struct order *ord) { struct plane *p = rplane(u->region); - unused_arg(amount); - unused_arg(itype); + UNUSED_ARG(amount); + UNUSED_ARG(itype); if (p != NULL) { ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "use_realworld_only", "")); } diff --git a/src/items/weapons.c b/src/items/weapons.c index 1806e61a0..a23110a81 100644 --- a/src/items/weapons.c +++ b/src/items/weapons.c @@ -106,7 +106,7 @@ int *casualties) } enemies = count_enemies(b, af, FIGHT_ROW, FIGHT_ROW, SELECT_ADVANCE); - enemies = _min(enemies, CATAPULT_ATTACKS); + enemies = MIN(enemies, CATAPULT_ATTACKS); if (enemies == 0) { return true; /* allow further attacks */ } diff --git a/src/items/xerewards.c b/src/items/xerewards.c index ab5226a32..a6d1ad2ea 100644 --- a/src/items/xerewards.c +++ b/src/items/xerewards.c @@ -72,7 +72,7 @@ struct order *ord) } for (i = 0; i != amount; ++i) { - sp += _max(25, max_spellpoints(u->region, u) / 2); + sp += MAX(25, max_spellpoints(u->region, u) / 2); change_spellpoints(u, sp); } diff --git a/src/kernel/alliance.c b/src/kernel/alliance.c index 32c58e246..0feb8407d 100644 --- a/src/kernel/alliance.c +++ b/src/kernel/alliance.c @@ -83,7 +83,7 @@ alliance *new_alliance(int id, const char *name) { al = calloc(1, sizeof(alliance)); al->id = id; if (name) { - al->name = _strdup(name); + al->name = strdup(name); } else { al->flags |= ALF_NON_ALLIED; @@ -447,7 +447,7 @@ void alliance_setname(alliance * self, const char *name) { free(self->name); if (name) - self->name = _strdup(name); + self->name = strdup(name); else self->name = NULL; } diff --git a/src/kernel/ally.c b/src/kernel/ally.c index 5a5a5b1c3..759d556f4 100644 --- a/src/kernel/ally.c +++ b/src/kernel/ally.c @@ -76,7 +76,7 @@ int AllianceAuto(void) const char *str = config_get("alliance.auto"); value = 0; if (str != NULL) { - char *sstr = _strdup(str); + char *sstr = strdup(str); char *tok = strtok(sstr, " "); while (tok) { value |= ally_flag(tok, -1); @@ -136,7 +136,7 @@ int HelpMask(void) if (config_changed(&config)) { const char *str = config_get("rules.help.mask"); if (str != NULL) { - char *sstr = _strdup(str); + char *sstr = strdup(str); char *tok = strtok(sstr, " "); while (tok) { rule |= ally_flag(tok, -1); @@ -156,7 +156,7 @@ static int AllianceRestricted(void) const char *str = config_get("alliance.restricted"); int rule = 0; if (str != NULL) { - char *sstr = _strdup(str); + char *sstr = strdup(str); char *tok = strtok(sstr, " "); while (tok) { rule |= ally_flag(tok, -1); diff --git a/src/kernel/build.c b/src/kernel/build.c index b5a1b3417..dff51cf6c 100644 --- a/src/kernel/build.c +++ b/src/kernel/build.c @@ -123,11 +123,11 @@ static void destroy_road(unit * u, int nmax, struct order *ord) } road = rroad(r, d); - n = _min(n, road); + n = MIN(n, road); if (n != 0) { region *r2 = rconnect(r, d); int willdo = effskill(u, SK_ROAD_BUILDING, 0) * u->number; - willdo = _min(willdo, n); + willdo = MIN(willdo, n); if (willdo == 0) { /* TODO: error message */ } @@ -327,7 +327,7 @@ void build_road(unit * u, int size, direction_t d) } if (size > 0) - left = _min(size, left); + left = MIN(size, left); /* baumaximum anhand der rohstoffe */ if (u_race(u) == get_race(RC_STONEGOLEM)) { n = u->number * GOLEM_STONE; @@ -339,7 +339,7 @@ void build_road(unit * u, int size, direction_t d) return; } } - left = _min(n, left); + left = MIN(n, left); /* n = maximum by skill. try to maximize it */ n = u->number * effsk; @@ -347,7 +347,7 @@ void build_road(unit * u, int size, direction_t d) const resource_type *ring = get_resourcetype(R_RING_OF_NIMBLEFINGER); item *itm = ring ? *i_find(&u->items, ring->itype) : 0; if (itm != NULL && itm->number > 0) { - int rings = _min(u->number, itm->number); + int rings = MIN(u->number, itm->number); n = n * ((roqf_factor() - 1) * rings + u->number) / u->number; } } @@ -355,15 +355,15 @@ void build_road(unit * u, int size, direction_t d) int dm = get_effect(u, oldpotiontype[P_DOMORE]); if (dm != 0) { int todo = (left - n + effsk - 1) / effsk; - todo = _min(todo, u->number); - dm = _min(dm, todo); + todo = MIN(todo, u->number); + dm = MIN(dm, todo); change_effect(u, oldpotiontype[P_DOMORE], -dm); n += dm * effsk; } /* Auswirkung Schaffenstrunk */ } /* make minimum of possible and available: */ - n = _min(left, n); + n = MIN(left, n); /* n is now modified by several special effects, so we have to * minimize it again to make sure the road will not grow beyond @@ -380,7 +380,7 @@ void build_road(unit * u, int size, direction_t d) else { use_pooled(u, get_resourcetype(R_STONE), GET_DEFAULT, n); /* Nur soviel PRODUCEEXP wie auch tatsaechlich gemacht wurde */ - produceexp(u, SK_ROAD_BUILDING, _min(n, u->number)); + produceexp(u, SK_ROAD_BUILDING, MIN(n, u->number)); } ADDMSG(&u->faction->msgs, msg_message("buildroad", "region unit size", r, u, n)); @@ -486,7 +486,7 @@ int build(unit * u, const construction * ctype, int completed, int want) if (dm != 0) { /* Auswirkung Schaffenstrunk */ - dm = _min(dm, u->number); + dm = MIN(dm, u->number); change_effect(u, oldpotiontype[P_DOMORE], -dm); skills += dm * effsk; } @@ -545,7 +545,7 @@ int build(unit * u, const construction * ctype, int completed, int want) item *itm = ring ? *i_find(&u->items, ring->itype) : 0; int i = itm ? itm->number : 0; if (i > 0) { - int rings = _min(u->number, i); + int rings = MIN(u->number, i); n = n * ((roqf_factor() - 1) * rings + u->number) / u->number; } } @@ -553,7 +553,7 @@ int build(unit * u, const construction * ctype, int completed, int want) if (want < n) n = want; if (type->maxsize > 0) { - n = _min(type->maxsize - completed, n); + n = MIN(type->maxsize - completed, n); if (type->improvement == NULL) { want = n; } @@ -626,7 +626,7 @@ int build(unit * u, const construction * ctype, int completed, int want) completed = completed + n; } /* Nur soviel PRODUCEEXP wie auch tatsaechlich gemacht wurde */ - produceexp(u, ctype->skill, _min(made, u->number)); + produceexp(u, ctype->skill, MIN(made, u->number)); return made; } @@ -671,7 +671,7 @@ int maxbuild(const unit * u, const construction * cons) return 0; } else - maximum = _min(maximum, have / need); + maximum = MIN(maximum, have / need); } return maximum; } @@ -879,7 +879,7 @@ static void build_ship(unit * u, ship * sh, int want) } if (sh->damage && can) { - int repair = _min(sh->damage, can * DAMAGE_SCALE); + int repair = MIN(sh->damage, can * DAMAGE_SCALE); n += repair / DAMAGE_SCALE; if (repair % DAMAGE_SCALE) ++n; @@ -923,7 +923,7 @@ order * ord) return; } if (want > 0) - want = _min(want, msize); + want = MIN(want, msize); else want = msize; @@ -982,7 +982,7 @@ void continue_ship(unit * u, int want) return; } if (want > 0) - want = _min(want, msize); + want = MIN(want, msize); else want = msize; diff --git a/src/kernel/building.c b/src/kernel/building.c index b445019de..f2c9c9fd2 100644 --- a/src/kernel/building.c +++ b/src/kernel/building.c @@ -127,7 +127,7 @@ building_type *bt_get_or_create(const char *name) building_type *btype = bt_find_i(name); if (btype == NULL) { btype = calloc(sizeof(building_type), 1); - btype->_name = _strdup(name); + btype->_name = strdup(name); btype->auraregen = 1.0; btype->maxsize = -1; btype->capacity = 1; @@ -143,7 +143,7 @@ int buildingcapacity(const building * b) { if (b->type->capacity >= 0) { if (b->type->maxcapacity >= 0) { - return _min(b->type->maxcapacity, b->size * b->type->capacity); + return MIN(b->type->maxcapacity, b->size * b->type->capacity); } return b->size * b->type->capacity; } @@ -420,7 +420,7 @@ building *new_building(const struct building_type * btype, region * r, } assert(bname); slprintf(buffer, sizeof(buffer), "%s %s", bname, itoa36(b->no)); - b->name = _strdup(bname); + b->name = strdup(bname); return b; } @@ -619,7 +619,7 @@ void building_setname(building * self, const char *name) { free(self->name); if (name) - self->name = _strdup(name); + self->name = strdup(name); else self->name = NULL; } @@ -779,7 +779,7 @@ default_wage(const region * r, const faction * f, const race * rc, int in_turn) /* Godcurse: Income -10 */ ctype = ct_find("godcursezone"); if (ctype && curse_active(get_curse(r->attribs, ctype))) { - wage = _max(0, wage - 10); + wage = MAX(0, wage - 10); } /* Bei einer D�rre verdient man nur noch ein Viertel */ diff --git a/src/kernel/building.h b/src/kernel/building.h index 754f38f07..a6936d90d 100644 --- a/src/kernel/building.h +++ b/src/kernel/building.h @@ -23,6 +23,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/kernel/building.test.c b/src/kernel/building.test.c index d15c82c8e..3b296a6fe 100644 --- a/src/kernel/building.test.c +++ b/src/kernel/building.test.c @@ -22,7 +22,7 @@ static void test_register_building(CuTest * tc) test_cleanup(); btype = (building_type *)calloc(sizeof(building_type), 1); - btype->_name = _strdup("herp"); + btype->_name = strdup("herp"); CuAssertIntEquals(tc, true, bt_changed(&cache)); CuAssertIntEquals(tc, false, bt_changed(&cache)); bt_register(btype); diff --git a/src/kernel/config.c b/src/kernel/config.c index 2b1ae678d..d369d0ecd 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -91,6 +91,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include struct settings global = { "Eressea", /* gamename */ @@ -361,7 +362,7 @@ void init_locale(struct locale *lang) str = "gwyrrd illaun draig cerddor tybied"; } - sstr = _strdup(str); + sstr = strdup(str); tok = strtok(sstr, " "); while (tok) { const char *name; @@ -472,7 +473,7 @@ int check_param(const struct param *p, const char *key, const char *searchvalue) if (!value) { return 0; } - char *p_value = _strdup(value); + char *p_value = strdup(value); const char *delimiter = " ,;"; char *v = strtok(p_value, delimiter); @@ -535,7 +536,7 @@ static const char * relpath(char *buf, size_t sz, const char *path) { static const char *g_datadir; const char *datapath(void) { - static char zText[MAX_PATH]; + static char zText[4096]; if (g_datadir) return g_datadir; return relpath(zText, sizeof(zText), "data"); @@ -549,7 +550,7 @@ void set_datapath(const char *path) static const char *g_reportdir; const char *reportpath(void) { - static char zText[MAX_PATH]; + static char zText[4096]; if (g_reportdir) return g_reportdir; return relpath(zText, sizeof(zText), "reports"); @@ -562,12 +563,12 @@ void set_reportpath(const char *path) int create_directories(void) { int err; - err = _mkdir(datapath()); + err = mkdir(datapath(), 0777); if (err) { if (errno == EEXIST) errno = 0; else return err; } - err = _mkdir(reportpath()); + err = mkdir(reportpath(), 0777); if (err && errno == EEXIST) { errno = 0; } diff --git a/src/kernel/config.h b/src/kernel/config.h index 91d5d576f..096d54da4 100644 --- a/src/kernel/config.h +++ b/src/kernel/config.h @@ -25,6 +25,7 @@ extern "C" { /* this should always be the first thing included after platform.h */ #include +#include #include "types.h" struct param; diff --git a/src/kernel/connection.c b/src/kernel/connection.c index 082039f1b..5b2615bcc 100644 --- a/src/kernel/connection.c +++ b/src/kernel/connection.c @@ -131,7 +131,7 @@ static connection **get_borders_i(const region * r1, const region * r2) int key = reg_hashkey(r1); int k2 = reg_hashkey(r2); - key = _min(k2, key) % BORDER_MAXHASH; + key = MIN(k2, key) % BORDER_MAXHASH; bp = &borders[key]; while (*bp) { connection *b = *bp; @@ -258,31 +258,31 @@ void b_write(const connection * b, storage * store) bool b_transparent(const connection * b, const struct faction *f) { - unused_arg(b); - unused_arg(f); + UNUSED_ARG(b); + UNUSED_ARG(f); return true; } bool b_opaque(const connection * b, const struct faction * f) { - unused_arg(b); - unused_arg(f); + UNUSED_ARG(b); + UNUSED_ARG(f); return false; } bool b_blockall(const connection * b, const unit * u, const region * r) { - unused_arg(u); - unused_arg(r); - unused_arg(b); + UNUSED_ARG(u); + UNUSED_ARG(r); + UNUSED_ARG(b); return true; } bool b_blocknone(const connection * b, const unit * u, const region * r) { - unused_arg(u); - unused_arg(r); - unused_arg(b); + UNUSED_ARG(u); + UNUSED_ARG(r); + UNUSED_ARG(b); return false; } @@ -294,39 +294,39 @@ bool b_rvisible(const connection * b, const region * r) bool b_fvisible(const connection * b, const struct faction * f, const region * r) { - unused_arg(r); - unused_arg(f); - unused_arg(b); + UNUSED_ARG(r); + UNUSED_ARG(f); + UNUSED_ARG(b); return true; } bool b_uvisible(const connection * b, const unit * u) { - unused_arg(u); - unused_arg(b); + UNUSED_ARG(u); + UNUSED_ARG(b); return true; } bool b_rinvisible(const connection * b, const region * r) { - unused_arg(r); - unused_arg(b); + UNUSED_ARG(r); + UNUSED_ARG(b); return false; } bool b_finvisible(const connection * b, const struct faction * f, const region * r) { - unused_arg(r); - unused_arg(f); - unused_arg(b); + UNUSED_ARG(r); + UNUSED_ARG(f); + UNUSED_ARG(b); return false; } bool b_uinvisible(const connection * b, const unit * u) { - unused_arg(u); - unused_arg(b); + UNUSED_ARG(u); + UNUSED_ARG(b); return false; } @@ -380,9 +380,9 @@ static const char *b_namewall(const connection * b, const region * r, { const char *bname = "wall"; - unused_arg(f); - unused_arg(r); - unused_arg(b); + UNUSED_ARG(f); + UNUSED_ARG(r); + UNUSED_ARG(b); if (gflags & GF_ARTICLE) bname = "a_wall"; if (gflags & GF_PURE) @@ -421,9 +421,9 @@ border_type bt_noway = { static const char *b_namefogwall(const connection * b, const region * r, const struct faction *f, int gflags) { - unused_arg(f); - unused_arg(b); - unused_arg(r); + UNUSED_ARG(f); + UNUSED_ARG(b); + UNUSED_ARG(r); if (gflags & GF_PURE) return "fogwall"; if (gflags & GF_ARTICLE) @@ -434,7 +434,7 @@ static const char *b_namefogwall(const connection * b, const region * r, static bool b_blockfogwall(const connection * b, const unit * u, const region * r) { - unused_arg(b); + UNUSED_ARG(b); if (!u) return true; return (bool)(effskill(u, SK_PERCEPTION, r) > 4); /* Das ist die alte Nebelwand */ @@ -459,8 +459,8 @@ static const char *b_nameillusionwall(const connection * b, const region * r, const struct faction *f, int gflags) { int fno = b->data.i; - unused_arg(b); - unused_arg(r); + UNUSED_ARG(b); + UNUSED_ARG(r); if (gflags & GF_PURE) return (f && fno == f->no) ? "illusionwall" : "wall"; if (gflags & GF_ARTICLE) { @@ -496,7 +496,7 @@ static const char *b_nameroad(const connection * b, const region * r, int local = (r == b->from) ? b->data.sa[0] : b->data.sa[1]; static char buffer[64]; - unused_arg(f); + UNUSED_ARG(f); if (gflags & GF_PURE) return "road"; if (gflags & GF_ARTICLE) { @@ -512,7 +512,7 @@ static const char *b_nameroad(const connection * b, const region * r, } } else { - int percent = _max(1, 100 * local / r->terrain->max_road); + int percent = MAX(1, 100 * local / r->terrain->max_road); if (local) { slprintf(buffer, sizeof(buffer), LOC(f->locale, mkname("border", "a_road_percent")), percent); diff --git a/src/kernel/connection.h b/src/kernel/connection.h index 7eef0f52a..80177c638 100644 --- a/src/kernel/connection.h +++ b/src/kernel/connection.h @@ -20,7 +20,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define H_KRNL_BORDER #include - +#include #ifdef __cplusplus extern "C" { #endif diff --git a/src/kernel/curse.c b/src/kernel/curse.c index c0e353b4f..7df567940 100644 --- a/src/kernel/curse.c +++ b/src/kernel/curse.c @@ -109,7 +109,7 @@ int curse_age(attrib * a, void *owner) curse *c = (curse *)a->data.v; int result = 0; - unused_arg(owner); + UNUSED_ARG(owner); c_clearflag(c, CURSE_ISNEW); if (c_flags(c) & CURSE_NOAGE) { @@ -122,7 +122,7 @@ int curse_age(attrib * a, void *owner) c->duration = 0; } else if (c->duration != INT_MAX) { - c->duration = _max(0, c->duration - 1); + c->duration = MAX(0, c->duration - 1); } return (c->duration > 0) ? AT_AGE_KEEP : AT_AGE_REMOVE; } @@ -348,7 +348,7 @@ const curse_type *ct_find(const char *c) return type; } else { - size_t k = _min(c_len, strlen(type->cname)); + size_t k = MIN(c_len, strlen(type->cname)); if (!memcmp(c, type->cname, k)) { return type; } @@ -507,7 +507,7 @@ int get_cursedmen(unit * u, const curse * c) cursedmen = c->data.i; } - return _min(u->number, cursedmen); + return MIN(u->number, cursedmen); } /* setzt die Anzahl der betroffenen Personen auf cursedmen */ @@ -596,7 +596,7 @@ curse *create_curse(unit * magician, attrib ** ap, const curse_type * ct, /* es gibt schon eins diese Typs */ if (c && ct->mergeflags != NO_MERGE) { if (ct->mergeflags & M_DURATION) { - c->duration = _max(c->duration, duration); + c->duration = MAX(c->duration, duration); } if (ct->mergeflags & M_SUMDURATION) { c->duration += duration; @@ -605,10 +605,10 @@ curse *create_curse(unit * magician, attrib ** ap, const curse_type * ct, c->effect += effect; } if (ct->mergeflags & M_MAXEFFECT) { - c->effect = _max(c->effect, effect); + c->effect = MAX(c->effect, effect); } if (ct->mergeflags & M_VIGOUR) { - c->vigour = _max(vigour, c->vigour); + c->vigour = MAX(vigour, c->vigour); } if (ct->mergeflags & M_VIGOUR_ADD) { c->vigour = vigour + c->vigour; @@ -792,9 +792,9 @@ message *cinfo_simple(const void *obj, objtype_t typ, const struct curse * c, { struct message *msg; - unused_arg(typ); - unused_arg(self); - unused_arg(obj); + UNUSED_ARG(typ); + UNUSED_ARG(self); + UNUSED_ARG(obj); msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no); if (msg == NULL) { diff --git a/src/kernel/curse.h b/src/kernel/curse.h index 29498f4d2..4cff4f9a1 100644 --- a/src/kernel/curse.h +++ b/src/kernel/curse.h @@ -22,6 +22,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include "objtypes.h" +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/kernel/equipment.c b/src/kernel/equipment.c index de539223f..349a87448 100644 --- a/src/kernel/equipment.c +++ b/src/kernel/equipment.c @@ -47,7 +47,7 @@ equipment *create_equipment(const char *eqname) int i = eq ? strcmp(eq->name, eqname) : 1; if (i > 0) { eq = (equipment *)calloc(1, sizeof(equipment)); - eq->name = _strdup(eqname); + eq->name = strdup(eqname); eq->next = *eqp; memset(eq->skills, 0, sizeof(eq->skills)); *eqp = eq; @@ -78,7 +78,7 @@ void equipment_setskill(equipment * eq, skill_t sk, const char *value) { if (eq != NULL) { if (value != NULL) { - eq->skills[sk] = _strdup(value); + eq->skills[sk] = strdup(value); } else if (eq->skills[sk]) { free(eq->skills[sk]); @@ -98,7 +98,7 @@ void equipment_addspell(equipment * eq, const char * name, int level) lazy_spell *ls = malloc(sizeof(lazy_spell)); ls->sp = NULL; ls->level = level; - ls->name = _strdup(name); + ls->name = strdup(name); selist_push(&eq->spells, ls); } } @@ -115,7 +115,7 @@ equipment_setitem(equipment * eq, const item_type * itype, const char *value) if (idata == NULL) { idata = (itemdata *)malloc(sizeof(itemdata)); idata->itype = itype; - idata->value = _strdup(value); + idata->value = strdup(value); idata->next = eq->items; eq->items = idata; } diff --git a/src/kernel/faction.c b/src/kernel/faction.c index 4d2e6ae7b..811321f14 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -274,7 +274,7 @@ faction *addfaction(const char *email, const char *password, fhash(f); slprintf(buf, sizeof(buf), "%s %s", LOC(loc, "factiondefault"), itoa36(f->no)); - f->name = _strdup(buf); + f->name = strdup(buf); if (!f->race) { log_warning("creating a faction that has no race", itoa36(f->no)); @@ -523,7 +523,7 @@ void faction_setname(faction * self, const char *name) { free(self->name); if (name) - self->name = _strdup(name); + self->name = strdup(name); } const char *faction_getemail(const faction * self) @@ -535,7 +535,7 @@ void faction_setemail(faction * self, const char *email) { free(self->email); if (email) - self->email = _strdup(email); + self->email = strdup(email); } const char *faction_getbanner(const faction * self) @@ -547,7 +547,7 @@ void faction_setbanner(faction * self, const char *banner) { free(self->banner); if (banner) - self->banner = _strdup(banner); + self->banner = strdup(banner); } void faction_setpassword(faction * f, const char *pwhash) @@ -555,7 +555,7 @@ void faction_setpassword(faction * f, const char *pwhash) assert(pwhash); // && pwhash[0] == '$'); free(f->_password); - f->_password = _strdup(pwhash); + f->_password = strdup(pwhash); } bool valid_race(const struct faction *f, const struct race *rc) diff --git a/src/kernel/faction.h b/src/kernel/faction.h index d6419dd2f..757449bd8 100644 --- a/src/kernel/faction.h +++ b/src/kernel/faction.h @@ -22,6 +22,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "skill.h" #include "types.h" #include +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/kernel/group.c b/src/kernel/group.c index 8753531a3..06f2f9f49 100755 --- a/src/kernel/group.c +++ b/src/kernel/group.c @@ -57,8 +57,8 @@ group *new_group(faction * f, const char *name, int gid) gp = &(*gp)->next; *gp = g; - maxgid = _max(gid, maxgid); - g->name = _strdup(name); + maxgid = MAX(gid, maxgid); + g->name = strdup(name); g->gid = gid; g->nexthash = ghash[index]; diff --git a/src/kernel/item.c b/src/kernel/item.c index 9956f2a4a..34a0e1875 100644 --- a/src/kernel/item.c +++ b/src/kernel/item.c @@ -189,7 +189,7 @@ resource_type *rt_get_or_create(const char *name) { perror("resource_type allocation failed"); } else { - rtype->_name = _strdup(name); + rtype->_name = strdup(name); rt_register(rtype); return rt_find(name); } @@ -285,8 +285,8 @@ weapon_type *new_weapontype(item_type * itype, wtype = calloc(sizeof(weapon_type), 1); if (damage) { - wtype->damage[0] = _strdup(damage[0]); - wtype->damage[1] = _strdup(damage[1]); + wtype->damage[0] = strdup(damage[0]); + wtype->damage[1] = strdup(damage[1]); } wtype->defmod = defmod; wtype->flags |= wflags; @@ -345,7 +345,7 @@ void it_set_appearance(item_type *itype, const char *appearance) { assert(itype); assert(itype->rtype); if (appearance) { - itype->_appearance[0] = _strdup(appearance); + itype->_appearance[0] = strdup(appearance); itype->_appearance[1] = strcat(strcpy((char *)malloc(strlen((char *)appearance) + 3), (char *)appearance), "_p"); } else { itype->_appearance[0] = 0; @@ -679,9 +679,9 @@ struct order *ord) direction_t d; message *msg = msg_message("meow", ""); - unused_arg(ord); - unused_arg(amount); - unused_arg(itype); + UNUSED_ARG(ord); + UNUSED_ARG(amount); + UNUSED_ARG(itype); add_message(&u->region->msgs, msg); for (d = 0; d < MAXDIRECTIONS; d++) { @@ -720,7 +720,7 @@ struct order *ord) c = create_curse(u, &u->attribs, ct_find("skillmod"), power, duration, effect, u->number); c->data.i = SK_TACTICS; - unused_arg(ord); + UNUSED_ARG(ord); } use_pooled(u, itype->rtype, GET_DEFAULT, amount); ADDMSG(&u->faction->msgs, msg_message("use_tacticcrystal", @@ -749,14 +749,14 @@ mod_elves_only(const unit * u, const region * r, skill_t sk, int value) { if (u_race(u) == get_race(RC_ELF)) return value; - unused_arg(r); + UNUSED_ARG(r); return -118; } static int mod_dwarves_only(const unit * u, const region * r, skill_t sk, int value) { - unused_arg(r); + UNUSED_ARG(r); if (u_race(u) == get_race(RC_DWARF) || (u_race(u)->flags & RCF_IRONGOLEM)) { return value; } @@ -767,7 +767,7 @@ static int heal(unit * user, int effect) { int req = unit_max_hp(user) * user->number - user->hp; if (req > 0) { - req = _min(req, effect); + req = MIN(req, effect); effect -= req; user->hp += req; } diff --git a/src/kernel/jsonconf.c b/src/kernel/jsonconf.c index 69e02c3a0..414704309 100644 --- a/src/kernel/jsonconf.c +++ b/src/kernel/jsonconf.c @@ -224,7 +224,7 @@ static void json_terrain_production(cJSON *json, terrain_production *prod) { if (dst) { free(*dst); assert(child->type == cJSON_String); - *dst = _strdup(child->valuestring); + *dst = strdup(child->valuestring); } } } @@ -453,7 +453,7 @@ static void json_race(cJSON *json, race *rc) { switch (child->type) { case cJSON_String: if (strcmp(child->string, "damage") == 0) { - rc->def_damage = _strdup(child->valuestring); + rc->def_damage = strdup(child->valuestring); } break; case cJSON_Number: @@ -599,7 +599,7 @@ static void json_spells(cJSON *json) { sp->fumble = (fumble_f)get_function(item->valuestring); } else if (strcmp(item->string, "syntax") == 0) { - sp->syntax = _strdup(item->valuestring); + sp->syntax = strdup(item->valuestring); } } } diff --git a/src/kernel/messages.c b/src/kernel/messages.c index 566e9bdef..89278624f 100644 --- a/src/kernel/messages.c +++ b/src/kernel/messages.c @@ -212,7 +212,7 @@ caddmessage(region * r, faction * f, const char *s, msg_t mtype, int level) { message *m = NULL; - unused_arg(level); + UNUSED_ARG(level); switch (mtype) { case MSG_INCOME: assert(f); @@ -275,7 +275,7 @@ message * msg_error(const unit * u, struct order *ord, int mno) { message * cmistake(const unit * u, struct order *ord, int mno, int mtype) { message * result; - unused_arg(mtype); + UNUSED_ARG(mtype); result = msg_error(u, ord, mno); ADDMSG(&u->faction->msgs, result); return result; diff --git a/src/kernel/order.c b/src/kernel/order.c index 3fd1dc92f..776190b67 100644 --- a/src/kernel/order.c +++ b/src/kernel/order.c @@ -405,7 +405,7 @@ order *parse_order(const char *s, const struct locale * lang) } } if (kwd != NOKEYWORD) { - while (isxspace(*(unsigned char *)sptr)) ++sptr; + while (isspace(*(unsigned char *)sptr)) ++sptr; s = sptr; return create_order_i(kwd, s, persistent, lang); } diff --git a/src/kernel/plane.c b/src/kernel/plane.c index 7e9650d13..0b2fdc0d3 100644 --- a/src/kernel/plane.c +++ b/src/kernel/plane.c @@ -234,7 +234,7 @@ plane *create_new_plane(int id, const char *name, int minx, int maxx, int miny, pl->next = NULL; pl->id = id; if (name) - pl->name = _strdup(name); + pl->name = strdup(name); pl->minx = minx; pl->maxx = maxx; pl->miny = miny; diff --git a/src/kernel/pool.c b/src/kernel/pool.c index 5609d211f..702f86e0f 100644 --- a/src/kernel/pool.c +++ b/src/kernel/pool.c @@ -168,7 +168,7 @@ int count) use = have; else if (rtype->itype && mode & (GET_SLACK | GET_RESERVE)) { int reserve = get_reservation(u, rtype->itype); - int slack = _max(0, have - reserve); + int slack = MAX(0, have - reserve); if (mode & GET_RESERVE) use = have - slack; else if (mode & GET_SLACK) @@ -209,18 +209,18 @@ use_pooled(unit * u, const resource_type * rtype, unsigned int mode, int count) } if ((mode & GET_SLACK) && (mode & GET_RESERVE)) { - n = _min(use, have); + n = MIN(use, have); } else if (rtype->itype) { int reserve = get_reservation(u, rtype->itype); - int slack = _max(0, have - reserve); + int slack = MAX(0, have - reserve); if (mode & GET_RESERVE) { n = have - slack; - n = _min(use, n); + n = MIN(use, n); change_reservation(u, rtype->itype, -n); } else if (mode & GET_SLACK) { - n = _min(use, slack); + n = MIN(use, slack); } } if (n > 0) { diff --git a/src/kernel/race.c b/src/kernel/race.c index decc3b7bb..a78a9e340 100644 --- a/src/kernel/race.c +++ b/src/kernel/race.c @@ -241,7 +241,7 @@ race *rc_create(const char *zName) log_error("race '%s' has an invalid name. remove spaces\n", zName); assert(strchr(zName, ' ') == NULL); } - rc->_name = _strdup(zName); + rc->_name = strdup(zName); rc->precombatspell = NULL; rc->attack[0].type = AT_COMBATSPELL; @@ -288,7 +288,7 @@ const char* rc_name(const race * rc, name_t n, char *name, size_t size) { default: assert(!"invalid name_t enum in rc_name_s"); } if (postfix) { - _snprintf(name, size, "race::%s%s", rc->_name, postfix); + snprintf(name, size, "race::%s%s", rc->_name, postfix); return name; } return NULL; diff --git a/src/kernel/region.c b/src/kernel/region.c index d937f8b68..cade135c7 100644 --- a/src/kernel/region.c +++ b/src/kernel/region.c @@ -138,7 +138,7 @@ int region_maxworkers(const region *r) { int size = production(r); int treespace = (rtrees(r, 2) + rtrees(r, 1) / 2) * TREESIZE; - return _max(size - treespace, _min(size / 10, 200)); + return MAX(size - treespace, MIN(size / 10, 200)); } int deathcount(const region * r) @@ -403,7 +403,7 @@ koor_distance_wrap_xy(int x1, int y1, int x2, int y2, int width, int height) int dx = x1 - x2; int dy = y1 - y2; int result, dist; - int mindist = _min(width, height) >> 1; + int mindist = MIN(width, height) >> 1; /* Bei negativem dy am Ursprung spiegeln, das veraendert * den Abstand nicht @@ -426,13 +426,13 @@ koor_distance_wrap_xy(int x1, int y1, int x2, int y2, int width, int height) if (result <= mindist) return result; } - dist = _max(dx, height - dy); + dist = MAX(dx, height - dy); if (dist >= 0 && dist < result) { result = dist; if (result <= mindist) return result; } - dist = _max(width - dx, dy); + dist = MAX(width - dx, dy); if (dist >= 0 && dist < result) result = dist; return result; @@ -1215,7 +1215,7 @@ void terraform_region(region * r, const terrain_type * terrain) if (!fval(r, RF_CHAOTIC)) { int peasants; peasants = (region_maxworkers(r) * (20 + dice_rand("6d10"))) / 100; - rsetpeasants(r, _max(100, peasants)); + rsetpeasants(r, MAX(100, peasants)); rsetmoney(r, rpeasants(r) * ((wage(r, NULL, NULL, INT_MAX) + 1) + rng_int() % 5)); } @@ -1395,7 +1395,7 @@ faction *update_owners(region * r) else if (f || new_owner->faction != region_get_last_owner(r)) { alliance *al = region_get_alliance(r); if (al && new_owner->faction->alliance == al) { - int morale = _max(0, region_get_morale(r) - MORALE_TRANSFER); + int morale = MAX(0, region_get_morale(r) - MORALE_TRANSFER); region_set_morale(r, morale, turn); } else { @@ -1418,7 +1418,7 @@ faction *update_owners(region * r) void region_setinfo(struct region *r, const char *info) { free(r->display); - r->display = info ? _strdup(info) : 0; + r->display = info ? strdup(info) : 0; } const char *region_getinfo(const region * r) @@ -1430,7 +1430,7 @@ void region_setname(struct region *r, const char *name) { if (r->land) { free(r->land->name); - r->land->name = name ? _strdup(name) : 0; + r->land->name = name ? strdup(name) : 0; } } diff --git a/src/kernel/region.h b/src/kernel/region.h index fcc5f08b0..9fa1a2daa 100644 --- a/src/kernel/region.h +++ b/src/kernel/region.h @@ -20,6 +20,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define H_KRNL_REGION #include +#include #include "types.h" #include "direction.h" diff --git a/src/kernel/resources.c b/src/kernel/resources.c index e064150e6..e32c7ad55 100644 --- a/src/kernel/resources.c +++ b/src/kernel/resources.c @@ -111,7 +111,7 @@ static void terraform_default(struct rawmaterial *res, const region * r) res->amount = (int)(res->amount * modifier); /* random adjustment, +/- 91% */ if (res->amount < 1) res->amount = 1; - unused_arg(r); + UNUSED_ARG(r); } #ifdef RANDOM_CHANGE @@ -205,7 +205,7 @@ struct rawmaterial_type *rmt_create(const struct resource_type *rtype, const char *name) { rawmaterial_type *rmtype = malloc(sizeof(rawmaterial_type)); - rmtype->name = _strdup(name); + rmtype->name = strdup(name); rmtype->rtype = rtype; rmtype->terraform = terraform_default; rmtype->update = NULL; diff --git a/src/kernel/save.c b/src/kernel/save.c index 68c89070c..1139b5f1f 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -436,7 +436,7 @@ void read_planes(gamedata *data) { } pl->id = id; READ_STR(store, name, sizeof(name)); - pl->name = _strdup(name); + pl->name = strdup(name); READ_INT(store, &pl->minx); READ_INT(store, &pl->maxx); READ_INT(store, &pl->miny); @@ -668,7 +668,7 @@ unit *read_unit(struct gamedata *data) if (unicode_utf8_trim(obuf)!=0) { log_warning("trim unit %s name to '%s'", itoa36(u->no), obuf); } - u->_name = obuf[0] ? _strdup(obuf) : 0; + u->_name = obuf[0] ? strdup(obuf) : 0; if (lomem) { READ_STR(data->store, NULL, 0); } @@ -677,7 +677,7 @@ unit *read_unit(struct gamedata *data) if (unicode_utf8_trim(obuf)!=0) { log_warning("trim unit %s info to '%s'", itoa36(u->no), obuf); } - u->display = obuf[0] ? _strdup(obuf) : 0; + u->display = obuf[0] ? strdup(obuf) : 0; } READ_INT(data->store, &number); set_number(u, number); @@ -933,7 +933,7 @@ static region *readregion(struct gamedata *data, int x, int y) if (unicode_utf8_trim(name)!=0) { log_warning("trim region %d name to '%s'", uid, name); }; - r->land->name = _strdup(name); + r->land->name = strdup(name); } if (r->land) { int i; @@ -1034,7 +1034,7 @@ static region *readregion(struct gamedata *data, int x, int y) read_items(data->store, &r->land->items); if (data->version >= REGIONOWNER_VERSION) { READ_INT(data->store, &n); - region_set_morale(r, _max(0, (short)n), -1); + region_set_morale(r, MAX(0, (short)n), -1); read_owner(data, &r->land->ownership); } } @@ -1192,7 +1192,7 @@ static char * getpasswd(int fno) { assert(line[slen] == '\n'); line[slen] = 0; fclose(F); - return _strdup(line + len + 1); + return strdup(line + len + 1); } } fclose(F); @@ -1285,12 +1285,12 @@ faction *read_faction(struct gamedata * data) if (unicode_utf8_trim(name)!=0) { log_warning("trim faction %s name to '%s'", itoa36(f->no), name); }; - f->name = _strdup(name); + f->name = strdup(name); READ_STR(data->store, name, sizeof(name)); if (unicode_utf8_trim(name)!=0) { log_warning("trim faction %s banner to '%s'", itoa36(f->no), name); }; - f->banner = _strdup(name); + f->banner = strdup(name); log_debug(" - Lese Partei %s (%s)", f->name, itoa36(f->no)); @@ -1528,7 +1528,7 @@ struct building *read_building(gamedata *data) { if (unicode_utf8_trim(name)!=0) { log_warning("trim building %s name to '%s'", itoa36(b->no), name); } - b->name = _strdup(name); + b->name = strdup(name); if (lomem) { READ_STR(store, NULL, 0); } @@ -1537,7 +1537,7 @@ struct building *read_building(gamedata *data) { if (unicode_utf8_trim(name)!=0) { log_warning("trim building %s info to '%s'", itoa36(b->no), name); } - b->display = _strdup(name); + b->display = strdup(name); } READ_INT(store, &b->size); READ_STR(store, name, sizeof(name)); @@ -1581,7 +1581,7 @@ ship *read_ship(struct gamedata *data) if (unicode_utf8_trim(name)!=0) { log_warning("trim ship %s name to '%s'", itoa36(sh->no), name); } - sh->name = _strdup(name); + sh->name = strdup(name); if (lomem) { READ_STR(store, NULL, 0); } @@ -1590,7 +1590,7 @@ ship *read_ship(struct gamedata *data) if (unicode_utf8_trim(name)!=0) { log_warning("trim ship %s info to '%s'", itoa36(sh->no), name); } - sh->display = _strdup(name); + sh->display = strdup(name); } READ_STR(store, name, sizeof(name)); sh->type = st_find(name); diff --git a/src/kernel/save.test.c b/src/kernel/save.test.c index 6a2758a1d..c05ce4455 100644 --- a/src/kernel/save.test.c +++ b/src/kernel/save.test.c @@ -91,7 +91,7 @@ static void test_readwrite_faction(CuTest * tc) test_setup(); f = test_create_faction(0); free(f->name); - f->name = _strdup(" Hodor "); + f->name = strdup(" Hodor "); CuAssertStrEquals(tc, " Hodor ", f->name); mstream_init(&data.strm); gamedata_init(&data, &store, RELEASE_VERSION); @@ -120,7 +120,7 @@ static void test_readwrite_region(CuTest * tc) test_setup(); r = test_create_region(0, 0, 0); free(r->land->name); - r->land->name = _strdup(" Hodor "); + r->land->name = strdup(" Hodor "); CuAssertStrEquals(tc, " Hodor ", r->land->name); mstream_init(&data.strm); gamedata_init(&data, &store, RELEASE_VERSION); @@ -150,7 +150,7 @@ static void test_readwrite_building(CuTest * tc) r = test_create_region(0, 0, 0); b = test_create_building(r, 0); free(b->name); - b->name = _strdup(" Hodor "); + b->name = strdup(" Hodor "); CuAssertStrEquals(tc, " Hodor ", b->name); mstream_init(&data.strm); gamedata_init(&data, &store, RELEASE_VERSION); @@ -183,7 +183,7 @@ static void test_readwrite_ship(CuTest * tc) r = test_create_region(0, 0, 0); sh = test_create_ship(r, 0); free(sh->name); - sh->name = _strdup(" Hodor "); + sh->name = strdup(" Hodor "); CuAssertStrEquals(tc, " Hodor ", sh->name); mstream_init(&data.strm); gamedata_init(&data, &store, RELEASE_VERSION); diff --git a/src/kernel/ship.c b/src/kernel/ship.c index 1790afb5d..b9ac0b170 100644 --- a/src/kernel/ship.c +++ b/src/kernel/ship.c @@ -109,7 +109,7 @@ ship_type *st_get_or_create(const char * name) { ship_type * st = st_find_i(name); if (!st) { st = (ship_type *)calloc(sizeof(ship_type), 1); - st->_name = _strdup(name); + st->_name = strdup(name); st->storm = 1.0; selist_push(&shiptypes, (void *)st); } @@ -202,7 +202,7 @@ ship *new_ship(const ship_type * stype, region * r, const struct locale *lang) } assert(sname); slprintf(buffer, sizeof(buffer), "%s %s", sname, itoa36(sh->no)); - sh->name = _strdup(buffer); + sh->name = strdup(buffer); shash(sh); if (r) { addlist(&r->ships, sh); @@ -333,8 +333,8 @@ int shipspeed(const ship * sh, const unit * u) int crew = crew_skill(sh); int crew_bonus = (crew / sh->type->sumskill / 2) - 1; if (crew_bonus > 0) { - bonus = _min(bonus, crew_bonus); - bonus = _min(bonus, sh->type->range_max - sh->type->range); + bonus = MIN(bonus, crew_bonus); + bonus = MIN(bonus, sh->type->range_max - sh->type->range); } else { bonus = 0; @@ -458,7 +458,7 @@ void write_ship_reference(const struct ship *sh, struct storage *store) void ship_setname(ship * self, const char *name) { free(self->name); - self->name = name ? _strdup(name) : 0; + self->name = name ? strdup(name) : 0; } const char *ship_getname(const ship * self) diff --git a/src/kernel/spell.c b/src/kernel/spell.c index 4540029e2..5415c4a0e 100644 --- a/src/kernel/spell.c +++ b/src/kernel/spell.c @@ -78,7 +78,7 @@ spell * create_spell(const char * name, unsigned int id) len = cb_new_kv(name, len, &sp, sizeof(sp), buffer); if (cb_insert(&cb_spells, buffer, len) == CB_SUCCESS) { sp->id = id ? id : hashstring(name); - sp->sname = _strdup(name); + sp->sname = strdup(name); add_spell(&spells, sp); return sp; } diff --git a/src/kernel/spellbook.c b/src/kernel/spellbook.c index 7673324f8..bb060eaee 100644 --- a/src/kernel/spellbook.c +++ b/src/kernel/spellbook.c @@ -16,7 +16,7 @@ spellbook * create_spellbook(const char * name) { spellbook *result = (spellbook *)malloc(sizeof(spellbook)); - result->name = name ? _strdup(name) : 0; + result->name = name ? strdup(name) : 0; result->spells = 0; return result; } diff --git a/src/kernel/terrain.c b/src/kernel/terrain.c index ac4a49fe9..ca72e3060 100644 --- a/src/kernel/terrain.c +++ b/src/kernel/terrain.c @@ -110,7 +110,7 @@ terrain_type * get_or_create_terrain(const char *name) { if (!terrain) { terrain = (terrain_type *)calloc(sizeof(terrain_type), 1); if (terrain) { - terrain->_name = _strdup(name); + terrain->_name = strdup(name); terrain->next = registered_terrains; registered_terrains = terrain; if (strcmp("plain", name) == 0) { diff --git a/src/kernel/unit.c b/src/kernel/unit.c index f06c4c252..29766d4ef 100644 --- a/src/kernel/unit.c +++ b/src/kernel/unit.c @@ -123,7 +123,7 @@ unit *findunitr(const region * r, int n) // TODO: deprecated, replace with findunit(n) unit *findunitg(int n, const region * hint) { - unused_arg(hint); + UNUSED_ARG(hint); /* Abfangen von Syntaxfehlern. */ if (n <= 0) return NULL; @@ -511,7 +511,7 @@ int a_readprivate(attrib * a, void *owner, gamedata *data) struct storage *store = data->store; char lbuf[DISPLAYSIZE]; READ_STR(store, lbuf, sizeof(lbuf)); - a->data.v = _strdup(lbuf); + a->data.v = strdup(lbuf); return (a->data.v) ? AT_READ_OK : AT_READ_FAIL; } @@ -562,7 +562,7 @@ void usetprivate(unit * u, const char *str) if (a->data.v) { free(a->data.v); } - a->data.v = _strdup(str); + a->data.v = strdup(str); } /*********************/ @@ -809,8 +809,8 @@ void set_level(unit * u, skill_t sk, int value) static int leftship_age(struct attrib *a, void *owner) { /* must be aged, so it doesn't affect report generation (cansee) */ - unused_arg(a); - unused_arg(owner); + UNUSED_ARG(a); + UNUSED_ARG(owner); return AT_AGE_REMOVE; /* remove me */ } @@ -1390,7 +1390,7 @@ int invisible(const unit * target, const unit * viewer) else { int hidden = item_invis(target); if (hidden) { - hidden = _min(hidden, target->number); + hidden = MIN(hidden, target->number); if (viewer) { const resource_type *rtype = get_resourcetype(R_AMULET_OF_TRUE_SEEING); hidden -= i_get(viewer->items, rtype->itype); @@ -1533,7 +1533,7 @@ unit *create_unit(region * r, faction * f, int number, const struct race *urace, u->hp = unit_max_hp(u) * number; if (dname) { - u->_name = _strdup(dname); + u->_name = strdup(dname); } else if (urace->generate_name || playerrace(urace)) { name_unit(u); @@ -1640,7 +1640,7 @@ void unit_setname(unit * u, const char *name) { free(u->_name); if (name && name[0]) - u->_name = _strdup(name); + u->_name = strdup(name); else u->_name = NULL; } @@ -1654,7 +1654,7 @@ void unit_setinfo(unit * u, const char *info) { free(u->display); if (info) - u->display = _strdup(info); + u->display = strdup(info); else u->display = NULL; } diff --git a/src/kernel/unit.test.c b/src/kernel/unit.test.c index 1a481960d..b0a2891c5 100644 --- a/src/kernel/unit.test.c +++ b/src/kernel/unit.test.c @@ -240,9 +240,9 @@ static void test_default_name(CuTest *tc) { } static int cb_skillmod(const unit *u, const region *r, skill_t sk, int level) { - unused_arg(u); - unused_arg(r); - unused_arg(sk); + UNUSED_ARG(u); + UNUSED_ARG(r); + UNUSED_ARG(sk); return level + 3; } @@ -395,7 +395,7 @@ static void test_unit_description(CuTest *tc) { u = test_create_unit(test_create_faction(rc), test_create_region(0,0,0)); CuAssertPtrEquals(tc, 0, u->display); CuAssertStrEquals(tc, 0, u_description(u, u->faction->locale)); - u->display = _strdup("Hodor"); + u->display = strdup("Hodor"); CuAssertStrEquals(tc, "Hodor", u_description(u, NULL)); CuAssertStrEquals(tc, "Hodor", u_description(u, u->faction->locale)); test_cleanup(); diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index 640a28940..2f38cdab3 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -94,8 +94,8 @@ static xmlChar *xml_cleanup_string(xmlChar * str) while (*read) { /* eat leading whitespace */ - if (*read && isxspace(*read)) { - while (*read && isxspace(*read)) { + if (*read && isspace(*read)) { + while (*read && isspace(*read)) { ++read; } *write++ = ' '; @@ -379,7 +379,7 @@ static int parse_calendar(xmlDocPtr doc) first_turn = xml_ivalue(calendar, "start", first_turn); if (propValue) { free(agename); - agename = _strdup(mkname("calendar", (const char *)propValue)); + agename = strdup(mkname("calendar", (const char *)propValue)); xmlFree(propValue); } @@ -398,7 +398,7 @@ static int parse_calendar(xmlDocPtr doc) xmlNodePtr week = nsetWeeks->nodeTab[i]; xmlChar *propValue = xmlGetProp(week, BAD_CAST "name"); if (propValue) { - weeknames[i] = _strdup(mkname("calendar", (const char *)propValue)); + weeknames[i] = strdup(mkname("calendar", (const char *)propValue)); weeknames2[i] = malloc(strlen(weeknames[i]) + 3); sprintf(weeknames2[i], "%s_d", weeknames[i]); xmlFree(propValue); @@ -421,7 +421,7 @@ static int parse_calendar(xmlDocPtr doc) xmlChar *propValue = xmlGetProp(season, BAD_CAST "name"); if (propValue) { seasonnames[i] = - _strdup(mkname("calendar", (const char *)propValue)); + strdup(mkname("calendar", (const char *)propValue)); xmlFree(propValue); } } @@ -451,7 +451,7 @@ static int parse_calendar(xmlDocPtr doc) xmlFree(newyear); newyear = NULL; } - monthnames[i] = _strdup(mkname("calendar", (const char *)propValue)); + monthnames[i] = strdup(mkname("calendar", (const char *)propValue)); xmlFree(propValue); } if (nsetSeasons) { @@ -663,7 +663,7 @@ static weapon_type *xml_readweapon(xmlXPathContextPtr xpath, item_type * itype) xmlFree(propValue); propValue = xmlGetProp(node, BAD_CAST "value"); - wtype->damage[pos] = _strdup((const char *)propValue); // TODO: this is a memory leak + wtype->damage[pos] = strdup((const char *)propValue); // TODO: this is a memory leak if (k == 0) wtype->damage[1 - pos] = wtype->damage[pos]; xmlFree(propValue); @@ -1426,13 +1426,13 @@ static int parse_spells(xmlDocPtr doc) propValue = xmlGetProp(node, BAD_CAST "parameters"); if (propValue) { - sp->parameter = _strdup((const char *)propValue); + sp->parameter = strdup((const char *)propValue); xmlFree(propValue); } propValue = xmlGetProp(node, BAD_CAST "syntax"); if (propValue) { - sp->syntax = _strdup((const char *)propValue); + sp->syntax = strdup((const char *)propValue); xmlFree(propValue); } #ifdef TODO /* no longer need it, spellbooks! */ @@ -1628,7 +1628,7 @@ static int parse_races(xmlDocPtr doc) propValue = xmlGetProp(node, BAD_CAST "damage"); assert(propValue != NULL); - rc->def_damage = _strdup((const char *)propValue); + rc->def_damage = strdup((const char *)propValue); xmlFree(propValue); rc->magres = (float)xml_fvalue(node, "magres", rc->magres); @@ -1869,7 +1869,7 @@ static int parse_races(xmlDocPtr doc) propValue = xmlGetProp(node, BAD_CAST "damage"); if (propValue != NULL) { - attack->data.dice = _strdup((const char *)propValue); + attack->data.dice = strdup((const char *)propValue); xmlFree(propValue); } else { @@ -1932,7 +1932,7 @@ static int parse_messages(xmlDocPtr doc) (const char *)propType); xmlFree(propName); xmlFree(propType); - argv[k] = _strdup(zBuffer); + argv[k] = strdup(zBuffer); } argv[result->nodesetval->nodeNr] = NULL; } diff --git a/src/laws.c b/src/laws.c index d311f698e..bbf1a200b 100644 --- a/src/laws.c +++ b/src/laws.c @@ -209,7 +209,7 @@ static void live(region * r) } /* bestes Talent raussuchen */ if (sb != NULL) { - int weeks = _min(effect, u->number); + int weeks = MIN(effect, u->number); reduce_skill(u, sb, weeks); ADDMSG(&u->faction->msgs, msg_message("dumbeffect", "unit weeks skill", u, weeks, (skill_t)sb->id)); @@ -267,7 +267,7 @@ static void calculate_emigration(region * r) int max_emigration = MAX_EMIGRATION(rp2 - maxp2); if (max_emigration > 0) { - max_emigration = _min(max_emigration, max_immigrants); + max_emigration = MIN(max_emigration, max_immigrants); r->land->newpeasants += max_emigration; rc->land->newpeasants -= max_emigration; max_immigrants -= max_emigration; @@ -318,7 +318,7 @@ int peasant_luck_effect(int peasants, int luck, int maxp, double variance) double mean; if (luck == 0) return 0; - mean = peasant_luck_factor() * peasant_growth_factor() * _min(luck, peasants); + mean = peasant_luck_factor() * peasant_growth_factor() * MIN(luck, peasants); mean *= ((peasants / (double)maxp < .9) ? 1 : PEASANTFORCE); births = RAND_ROUND(normalvariate(mean, variance * mean)); @@ -357,7 +357,7 @@ static void peasants(region * r) /* Alle werden satt, oder halt soviele für die es auch Geld gibt */ - satiated = _min(peasants, money / maintenance_cost(NULL)); + satiated = MIN(peasants, money / maintenance_cost(NULL)); rsetmoney(r, money - satiated * maintenance_cost(NULL)); /* Von denjenigen, die nicht satt geworden sind, verhungert der @@ -366,7 +366,7 @@ static void peasants(region * r) /* Es verhungert maximal die unterernährten Bevölkerung. */ - n = _min(peasants - satiated, rpeasants(r)); + n = MIN(peasants - satiated, rpeasants(r)); dead += (int)(0.5 + n * PEASANT_STARVATION_CHANCE); if (dead > 0) { @@ -447,7 +447,7 @@ static void horses(region * r) /* Logistisches Wachstum, Optimum bei halbem Maximalbesatz. */ maxhorses = region_maxworkers(r) / 10; - maxhorses = _max(0, maxhorses); + maxhorses = MAX(0, maxhorses); horses = rhorses(r); if (horses > 0) { if (is_cursed(r->attribs, C_CURSED_BY_THE_GODS, 0)) { @@ -481,7 +481,7 @@ static void horses(region * r) if (r2 && fval(r2->terrain, WALK_INTO)) { int pt = (rhorses(r) * HORSEMOVE) / 100; pt = (int)normalvariate(pt, pt / 4.0); - pt = _max(0, pt); + pt = MAX(0, pt); if (fval(r2, RF_MIGRATION)) rsethorses(r2, rhorses(r2) + pt); else { @@ -594,7 +594,7 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) a = a_find(r->attribs, &at_germs); if (a && last_weeks_season == SEASON_SPRING) { /* ungekeimte Samen bleiben erhalten, Sprößlinge wachsen */ - sprout = _min(a->data.sa[1], rtrees(r, 1)); + sprout = MIN(a->data.sa[1], rtrees(r, 1)); /* aus dem gesamt Sprößlingepool abziehen */ rsettrees(r, 1, rtrees(r, 1) - sprout); /* zu den Bäumen hinzufügen */ @@ -614,7 +614,7 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) /* Grundchance 1.0% */ /* Jeder Elf in der Region erhöht die Chance marginal */ - elves = _min(elves, production(r) / 8); + elves = MIN(elves, production(r) / 8); if (elves) { seedchance += 1.0 - pow(0.99999, elves * RESOURCE_QUANTITY); } @@ -680,7 +680,7 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) /* Raubbau abfangen, es dürfen nie mehr Samen wachsen, als aktuell * in der Region sind */ - seeds = _min(a->data.sa[0], rtrees(r, 0)); + seeds = MIN(a->data.sa[0], rtrees(r, 0)); sprout = 0; for (i = 0; i < seeds; i++) { @@ -700,7 +700,7 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) * der Region entfernt werden können, da Jungbäume in der gleichen * Runde nachwachsen, wir also nicht mehr zwischen diesjährigen und * 'alten' Jungbäumen unterscheiden könnten */ - sprout = _min(a->data.sa[1], rtrees(r, 1)); + sprout = MIN(a->data.sa[1], rtrees(r, 1)); grownup_trees = 0; for (i = 0; i < sprout; i++) { @@ -740,7 +740,7 @@ void immigration(void) for (r = regions; r; r = r->next) { if (r->land && r->land->newpeasants) { int rp = rpeasants(r) + r->land->newpeasants; - rsetpeasants(r, _max(0, rp)); + rsetpeasants(r, MAX(0, rp)); } /* Genereate some (0-6 depending on the income) peasants out of nothing */ /* if less than 50 are in the region and there is space and no monster or demon units in the region */ @@ -843,7 +843,7 @@ void demographics(void) calculate_emigration(r); peasants(r); if (r->age > 20) { - double mwp = _max(region_maxworkers(r), 1); + double mwp = MAX(region_maxworkers(r), 1); double prob = pow(rpeasants(r) / (mwp * wage(r, NULL, NULL, turn) * 0.13), 4.0) * PLAGUE_CHANCE; @@ -1280,7 +1280,7 @@ static void remove_idle_players(void) } log_info(" - beseitige Spieler, die sich nach der Anmeldung nicht gemeldet haben..."); - age = calloc(_max(4, turn + 1), sizeof(int)); + age = calloc(MAX(4, turn + 1), sizeof(int)); for (fp = &factions; *fp;) { faction *f = *fp; if (!is_monsters(f)) { @@ -1621,7 +1621,7 @@ int display_cmd(unit * u, struct order *ord) free(*s); if (s2) { - *s = _strdup(s2); + *s = strdup(s2); if (strlen(s2) >= DISPLAYSIZE) { (*s)[DISPLAYSIZE] = 0; } @@ -1665,7 +1665,7 @@ static int rename_cmd(unit * u, order * ord, char **s, const char *s2) unicode_utf8_trim(name); free(*s); - *s = _strdup(name); + *s = strdup(name); return 0; } @@ -2154,7 +2154,7 @@ int banner_cmd(unit * u, struct order *ord) const char * s = getstrtoken(); free(u->faction->banner); - u->faction->banner = s ? _strdup(s) : 0; + u->faction->banner = s ? strdup(s) : 0; add_message(&u->faction->msgs, msg_message("changebanner", "value", u->faction->banner)); @@ -2356,23 +2356,23 @@ static void display_race(unit * u, const race * rc) } } if (rc->battle_flags & BF_EQUIPMENT) { - if (wrptr(&bufp, &size, _snprintf(bufp, size, " %s", LOC(f->locale, "stat_equipment"))) != 0) + if (wrptr(&bufp, &size, snprintf(bufp, size, " %s", LOC(f->locale, "stat_equipment"))) != 0) WARN_STATIC_BUFFER(); } if (rc->battle_flags & BF_RES_PIERCE) { - if (wrptr(&bufp, &size, _snprintf(bufp, size, " %s", LOC(f->locale, "stat_pierce"))) != 0) + if (wrptr(&bufp, &size, snprintf(bufp, size, " %s", LOC(f->locale, "stat_pierce"))) != 0) WARN_STATIC_BUFFER(); } if (rc->battle_flags & BF_RES_CUT) { - if (wrptr(&bufp, &size, _snprintf(bufp, size, " %s", LOC(f->locale, "stat_cut"))) != 0) + if (wrptr(&bufp, &size, snprintf(bufp, size, " %s", LOC(f->locale, "stat_cut"))) != 0) WARN_STATIC_BUFFER(); } if (rc->battle_flags & BF_RES_BASH) { - if (wrptr(&bufp, &size, _snprintf(bufp, size, " %s", LOC(f->locale, "stat_bash"))) != 0) + if (wrptr(&bufp, &size, snprintf(bufp, size, " %s", LOC(f->locale, "stat_bash"))) != 0) WARN_STATIC_BUFFER(); } - if (wrptr(&bufp, &size, _snprintf(bufp, size, " %d %s", at_count, LOC(f->locale, (at_count == 1) ? "stat_attack" : "stat_attacks"))) != 0) + if (wrptr(&bufp, &size, snprintf(bufp, size, " %d %s", at_count, LOC(f->locale, (at_count == 1) ? "stat_attack" : "stat_attacks"))) != 0) WARN_STATIC_BUFFER(); for (a = 0; a < RACE_ATTACKS; a++) { @@ -2385,12 +2385,12 @@ static void display_race(unit * u, const race * rc) switch (rc->attack[a].type) { case AT_STANDARD: bytes = - (size_t)_snprintf(bufp, size, "%s (%s)", + (size_t)snprintf(bufp, size, "%s (%s)", LOC(f->locale, "attack_standard"), rc->def_damage); break; case AT_NATURAL: bytes = - (size_t)_snprintf(bufp, size, "%s (%s)", + (size_t)snprintf(bufp, size, "%s (%s)", LOC(f->locale, "attack_natural"), rc->attack[a].data.dice); break; case AT_SPELL: @@ -2398,11 +2398,11 @@ static void display_race(unit * u, const race * rc) case AT_DRAIN_ST: case AT_DRAIN_EXP: case AT_DAZZLE: - bytes = (size_t)_snprintf(bufp, size, "%s", LOC(f->locale, "attack_magical")); + bytes = (size_t)snprintf(bufp, size, "%s", LOC(f->locale, "attack_magical")); break; case AT_STRUCTURAL: bytes = - (size_t)_snprintf(bufp, size, "%s (%s)", + (size_t)snprintf(bufp, size, "%s (%s)", LOC(f->locale, "attack_structural"), rc->attack[a].data.dice); break; default: @@ -2670,7 +2670,7 @@ int combatspell_cmd(unit * u, struct order *ord) if (findparam(s, u->faction->locale) == P_LEVEL) { /* Merken, setzen kommt erst später */ level = getint(); - level = _max(0, level); + level = MAX(0, level); s = gettoken(token, sizeof(token)); } @@ -2903,14 +2903,14 @@ static void age_stonecircle(building *b) { float effect = 100; /* the mage reactivates the circle */ c = create_curse(mage, &rt->attribs, ct_astralblock, - (float)_max(1, sk), _max(1, sk / 2), effect, 0); + (float)MAX(1, sk), MAX(1, sk / 2), effect, 0); ADDMSG(&r->msgs, msg_message("astralshield_activate", "region unit", r, mage)); } else { int sk = effskill(mage, SK_MAGIC, 0); - c->duration = _max(c->duration, sk / 2); - c->vigour = _max(c->vigour, (float)sk); + c->duration = MAX(c->duration, sk / 2); + c->vigour = MAX(c->vigour, (float)sk); } } } @@ -2955,12 +2955,12 @@ static void ageing(void) /* Goliathwasser */ int i = get_effect(u, oldpotiontype[P_STRONG]); if (i > 0) { - change_effect(u, oldpotiontype[P_STRONG], -1 * _min(u->number, i)); + change_effect(u, oldpotiontype[P_STRONG], -1 * MIN(u->number, i)); } /* Berserkerblut */ i = get_effect(u, oldpotiontype[P_BERSERK]); if (i > 0) { - change_effect(u, oldpotiontype[P_BERSERK], -1 * _min(u->number, i)); + change_effect(u, oldpotiontype[P_BERSERK], -1 * MIN(u->number, i)); } if (is_cursed(u->attribs, C_OLDRACE, 0)) { @@ -3034,7 +3034,7 @@ static int maxunits(const faction * f) if (flimit == 0) { return alimit; } - return _min(alimit, flimit); + return MIN(alimit, flimit); } int checkunitnumber(const faction * f, int add) @@ -3130,7 +3130,7 @@ void new_units(void) s = gettoken(token, sizeof(token)); if (s && s[0]) { - name = _strdup(s); + name = strdup(s); } u2 = create_unit(r, u->faction, 0, u->faction->race, alias, name, u); if (name != NULL) @@ -3361,7 +3361,7 @@ void monthly_healing(void) p *= heal_factor(u); if (u->hp < umhp) { - double maxheal = _max(u->number, umhp / 20.0); + double maxheal = MAX(u->number, umhp / 20.0); int addhp; if (active_building(u, bt_find("inn"))) { p *= 1.5; @@ -3376,7 +3376,7 @@ void monthly_healing(void) ++addhp; /* Aufaddieren der geheilten HP. */ - u->hp = _min(u->hp + addhp, umhp); + u->hp = MIN(u->hp + addhp, umhp); /* soll man an negativer regeneration sterben können? */ assert(u->hp > 0); @@ -3701,7 +3701,7 @@ int claim_cmd(unit * u, struct order *ord) if (itype) { item **iclaim = i_find(&u->faction->items, itype); if (iclaim && *iclaim) { - n = _min(n, (*iclaim)->number); + n = MIN(n, (*iclaim)->number); i_change(iclaim, itype, -n); i_change(&u->items, itype, n); } @@ -3962,7 +3962,7 @@ int armedmen(const unit * u, bool siege_weapons) if (n >= u->number) break; } - n = _min(n, u->number); + n = MIN(n, u->number); } } return n; @@ -3998,9 +3998,9 @@ int siege_cmd(unit * u, order * ord) rt_catapult = rt_find("catapult"); d = i_get(u->items, rt_catapult->itype); - d = _min(u->number, d); + d = MIN(u->number, d); pooled = get_pooled(u, rt_catapultammo, GET_DEFAULT, d); - d = _min(pooled, d); + d = MIN(pooled, d); if (effskill(u, SK_CATAPULT, 0) >= 1) { katapultiere = d; d *= effskill(u, SK_CATAPULT, 0); @@ -4027,11 +4027,11 @@ int siege_cmd(unit * u, order * ord) * einheiten wieder abgesucht werden muessen! */ usetsiege(u, b); - b->besieged += _max(bewaffnete, katapultiere); + b->besieged += MAX(bewaffnete, katapultiere); /* definitiver schaden eingeschraenkt */ - d = _min(d, b->size - 1); + d = MIN(d, b->size - 1); /* meldung, schaden anrichten */ if (d && !curse_active(get_curse(b->attribs, magicwalls_ct))) { @@ -4270,7 +4270,7 @@ void processorders(void) void update_subscriptions(void) { FILE *F; - char zText[MAX_PATH]; + char zText[4096]; join_path(basepath(), "subscriptions", zText, sizeof(zText)); F = fopen(zText, "r"); diff --git a/src/laws.h b/src/laws.h index 0adb010d2..f05c11ab4 100755 --- a/src/laws.h +++ b/src/laws.h @@ -20,6 +20,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define H_GC_LAWS #include +#include #ifdef __cplusplus extern "C" { diff --git a/src/lighthouse.c b/src/lighthouse.c index 09c9b7d11..d29d58b71 100644 --- a/src/lighthouse.c +++ b/src/lighthouse.c @@ -83,8 +83,8 @@ int lighthouse_range(const building * b, const faction * f) } else if (f == NULL || u->faction == f) { int sk = effskill(u, SK_PERCEPTION, 0) / 3; - d = _max(d, sk); - d = _min(maxd, d); + d = MAX(d, sk); + d = MIN(maxd, d); if (d == maxd) break; } diff --git a/src/lighthouse.h b/src/lighthouse.h index 3bf970bf1..f2974ddf1 100644 --- a/src/lighthouse.h +++ b/src/lighthouse.h @@ -19,6 +19,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #ifndef LIGHTHOUSE_H #define LIGHTHOUSE_H +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/listbox.c b/src/listbox.c index 332041454..057240fad 100644 --- a/src/listbox.c +++ b/src/listbox.c @@ -27,7 +27,7 @@ insert_selection(list_selection ** p_sel, list_selection * prev, const char *str, void *payload) { list_selection *sel = calloc(sizeof(list_selection), 1); - sel->str = _strdup(str); + sel->str = strdup(str); sel->data = payload; if (*p_sel) { list_selection *s; diff --git a/src/magic.c b/src/magic.c index dbdc1abe8..f2992538c 100644 --- a/src/magic.c +++ b/src/magic.c @@ -118,7 +118,7 @@ static double MagicPower(double force) if (force > 0) { const char *str = config_get("magic.power"); double value = str ? atof(str) : 1.0; - return _max(value * force, 1.0f); + return MAX(value * force, 1.0f); } return 0; } @@ -146,7 +146,7 @@ static void a_writeicastle(const attrib * a, const void *owner, struct storage *store) { icastle_data *data = (icastle_data *)a->data.v; - unused_arg(owner); + UNUSED_ARG(owner); WRITE_TOK(store, data->type->_name); WRITE_INT(store, data->time); } @@ -543,7 +543,7 @@ int get_combatspelllevel(const unit * u, int nr) assert(nr < MAXCOMBATSPELLS); if (m) { int level = effskill(u, SK_MAGIC, 0); - return _min(m->combatspells[nr].level, level); + return MIN(m->combatspells[nr].level, level); } return -1; } @@ -679,7 +679,7 @@ int change_spellpoints(unit * u, int mp) } /* verhindere negative Magiepunkte */ - sp = _max(m->spellpoints + mp, 0); + sp = MAX(m->spellpoints + mp, 0); m->spellpoints = sp; return sp; @@ -739,7 +739,7 @@ int max_spellpoints(const region * r, const unit * u) if (n > 0) { msp = (msp * n) / 100; } - return _max((int)msp, 0); + return MAX((int)msp, 0); } int change_maxspellpoints(unit * u, int csp) @@ -774,7 +774,7 @@ int countspells(unit * u, int step) count = m->spellcount + step; /* negative Werte abfangen. */ - m->spellcount = _max(0, count); + m->spellcount = MAX(0, count); return m->spellcount; } @@ -867,7 +867,7 @@ int eff_spelllevel(unit * u, const spell * sp, int cast_level, int range) } else if (sp->components[k].cost == SPC_LEVEL) { costtyp = SPC_LEVEL; - cast_level = _min(cast_level, maxlevel); + cast_level = MIN(cast_level, maxlevel); /* bei Typ Linear müssen die Kosten in Höhe der Stufe vorhanden * sein, ansonsten schlägt der Spruch fehl */ } @@ -885,7 +885,7 @@ int eff_spelllevel(unit * u, const spell * sp, int cast_level, int range) if (sb) { spellbook_entry * sbe = spellbook_get(sb, sp); if (sbe) { - return _min(cast_level, sbe->level); + return MIN(cast_level, sbe->level); } } log_error("spell %s is not in the spellbook for %s\n", sp->sname, unitname(u)); @@ -1103,7 +1103,7 @@ spellpower(region * r, unit * u, const spell * sp, int cast_level, struct order } } } - return _max(force, 0); + return MAX(force, 0); } /* ------------------------------------------------------------- */ @@ -1278,8 +1278,8 @@ target_resists_magic(unit * magician, void *obj, int objtyp, int t_bonus) break; } - probability = _max(0.02, probability + t_bonus * 0.01); - probability = _min(0.98, probability); + probability = MAX(0.02, probability + t_bonus * 0.01); + probability = MIN(0.98, probability); /* gibt true, wenn die Zufallszahl kleiner als die chance ist und * false, wenn sie gleich oder größer ist, dh je größer die @@ -1421,7 +1421,7 @@ static void do_fumble(castorder * co) case 2: /* temporary skill loss */ - duration = _max(rng_int() % level / 2, 2); + duration = MAX(rng_int() % level / 2, 2); effect = level / -2.0; c = create_curse(u, &u->attribs, ct_find("skillmod"), level, duration, effect, 1); @@ -1529,14 +1529,14 @@ void regenerate_aura(void) reg_aura -= regen; if (chance(reg_aura)) ++regen; - regen = _max(1, regen); - regen = _min((auramax - aura), regen); + regen = MAX(1, regen); + regen = MIN((auramax - aura), regen); aura += regen; ADDMSG(&u->faction->msgs, msg_message("regenaura", "unit region amount", u, r, regen)); } - set_spellpoints(u, _min(aura, auramax)); + set_spellpoints(u, MIN(aura, auramax)); } } } @@ -1853,7 +1853,7 @@ static int addparam_string(const char *const param[], spllprm ** spobjp) spobj->flag = 0; spobj->typ = SPP_STRING; - spobj->data.xs = _strdup(param[0]); + spobj->data.xs = strdup(param[0]); return 1; } @@ -2428,7 +2428,7 @@ static int age_unit(attrib * a, void *owner) /* if unit is gone or dead, remove the attribute */ { unit *u = (unit *)a->data.v; - unused_arg(owner); + UNUSED_ARG(owner); return (u != NULL && u->number > 0) ? AT_AGE_KEEP : AT_AGE_REMOVE; } @@ -2567,7 +2567,7 @@ static castorder *cast_cmd(unit * u, order * ord) /* für Syntax ' STUFE x REGION y z ' */ if (param == P_LEVEL) { int p = getint(); - level = _min(p, level); + level = MIN(p, level); if (level < 1) { /* Fehler "Das macht wenig Sinn" */ syntax_error(u, ord); @@ -2597,7 +2597,7 @@ static castorder *cast_cmd(unit * u, order * ord) * hier nach REGION nochmal auf STUFE prüfen */ if (param == P_LEVEL) { int p = getint(); - level = _min(p, level); + level = MIN(p, level); if (level < 1) { /* Fehler "Das macht wenig Sinn" */ syntax_error(u, ord); @@ -2728,7 +2728,7 @@ static castorder *cast_cmd(unit * u, order * ord) * löschen, zaubern kann er noch */ range *= 2; set_order(&caster->thisorder, NULL); - level = _min(level, effskill(caster, SK_MAGIC, 0) / 2); + level = MIN(level, effskill(caster, SK_MAGIC, 0) / 2); } } /* Weitere Argumente zusammenbasteln */ @@ -2751,7 +2751,7 @@ static castorder *cast_cmd(unit * u, order * ord) break; } } - params[p++] = _strdup(s); + params[p++] = strdup(s); } params[p] = 0; args = diff --git a/src/magic.h b/src/magic.h index d1ae286d0..f62c533bd 100644 --- a/src/magic.h +++ b/src/magic.h @@ -20,6 +20,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define H_KRNL_MAGIC #include +#include #ifdef __cplusplus extern "C" { diff --git a/src/market.test.c b/src/market.test.c index 43e070b5e..6f1d74b88 100644 --- a/src/market.test.c +++ b/src/market.test.c @@ -46,7 +46,7 @@ static void test_market_curse(CuTest * tc) config_set("rules.region_owners", "1"); btype = (building_type *)calloc(1, sizeof(building_type)); - btype->_name = _strdup("market"); + btype->_name = strdup("market"); bt_register(btype); terrain = get_terrain("plain"); diff --git a/src/modules/arena.c b/src/modules/arena.c index a912d273a..fbc3f0673 100644 --- a/src/modules/arena.c +++ b/src/modules/arena.c @@ -99,9 +99,9 @@ order * ord) if (u->building != arena_tower(u->faction->magiegebiet) && leave_fail(u)) { return -1; } - unused_arg(amount); - unused_arg(ord); - unused_arg(itype); + UNUSED_ARG(amount); + UNUSED_ARG(ord); + UNUSED_ARG(itype); assert(!"not implemented"); return 0; } @@ -120,9 +120,9 @@ enter_arena(unit * u, const item_type * itype, int amount, order * ord) region *r = u->region; unit *u2; int fee = 2000; - unused_arg(ord); - unused_arg(amount); - unused_arg(itype); + UNUSED_ARG(ord); + UNUSED_ARG(amount); + UNUSED_ARG(itype); if (u->faction->score > fee * 5) { score_t score = u->faction->score / 5; if (score < INT_MAX) { @@ -212,7 +212,7 @@ static int caldera_handle(trigger * t, void *data) else { log_error("could not perform caldera::handle()\n"); } - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/modules/autoseed.c b/src/modules/autoseed.c index 925fae349..1e2d2d23f 100644 --- a/src/modules/autoseed.c +++ b/src/modules/autoseed.c @@ -199,7 +199,7 @@ newfaction *read_newfactions(const char *filename) free(nf); continue; } - nf->password = _strdup(password); + nf->password = strdup(password); nf->race = rc_find(race); nf->subscription = subscription; if (alliances != NULL) { @@ -962,8 +962,8 @@ int build_island_e3(newfaction ** players, int x, int y, int numfactions, int mi q = region_quality(r, rn); if (q >= MIN_QUALITY && nfactions < numfactions && *players) { starting_region(players, r, rn); - minq = _min(minq, q); - maxq = _max(maxq, q); + minq = MIN(minq, q); + maxq = MAX(maxq, q); ++nfactions; } } @@ -977,8 +977,8 @@ int build_island_e3(newfaction ** players, int x, int y, int numfactions, int mi q = region_quality(r, rn); if (q >= MIN_QUALITY * 4 / 3 && nfactions < numfactions && *players) { starting_region(players, r, rn); - minq = _min(minq, q); - maxq = _max(maxq, q); + minq = MIN(minq, q); + maxq = MAX(maxq, q); ++nfactions; } } diff --git a/src/modules/museum.c b/src/modules/museum.c index e934a71a4..af37019d0 100644 --- a/src/modules/museum.c +++ b/src/modules/museum.c @@ -310,7 +310,7 @@ order * ord) unit *warden = findunit(atoi36("mwar")); int unit_cookie; - unused_arg(amount); + UNUSED_ARG(amount); /* Prüfen ob in Eingangshalle */ if (u->region->x != 9525 || u->region->y != 9525) { @@ -365,7 +365,7 @@ order * ord) region *r = u->region; plane *pl = rplane(r); - unused_arg(amount); + UNUSED_ARG(amount); /* Pruefen ob in normaler Plane und nur eine Person */ if (pl != get_homeplane()) { @@ -417,8 +417,8 @@ static const char *b_namequestportal(const connection * b, const region * r, { const char *bname; int lock = b->data.i; - unused_arg(b); - unused_arg(r); + UNUSED_ARG(b); + UNUSED_ARG(r); if (gflags & GF_ARTICLE) { if (lock > 0) { diff --git a/src/modules/score.c b/src/modules/score.c index 8213b8985..0776d6507 100644 --- a/src/modules/score.c +++ b/src/modules/score.c @@ -67,7 +67,7 @@ void score(void) region *r; faction *fc; score_t allscores = 0; - char path[MAX_PATH]; + char path[4096]; for (fc = factions; fc; fc = fc->next) fc->score = 0; diff --git a/src/monsters.c b/src/monsters.c index 829c1ed35..bba1cbd50 100644 --- a/src/monsters.c +++ b/src/monsters.c @@ -100,7 +100,7 @@ static void reduce_weight(unit * u) int horses = get_resource(u, get_resourcetype(R_HORSE)); if (horses > 0) { - horses = _min(horses, (u->number * 2)); + horses = MIN(horses, (u->number * 2)); change_resource(u, get_resourcetype(R_HORSE), -horses); } @@ -129,7 +129,7 @@ static void reduce_weight(unit * u) if (itype->weight >= 10 && itype->rtype->wtype == 0 && itype->rtype->atype == 0) { if (itype->capacity < itype->weight) { - int reduce = _min(itm->number, -((capacity - weight) / itype->weight)); + int reduce = MIN(itm->number, -((capacity - weight) / itype->weight)); give_peasants(u, itm->type, reduce); weight -= reduce * itype->weight; } @@ -144,7 +144,7 @@ static void reduce_weight(unit * u) const item_type *itype = itm->type; weight += itm->number * itype->weight; if (itype->capacity < itype->weight) { - int reduce = _min(itm->number, -((capacity - weight) / itype->weight)); + int reduce = MIN(itm->number, -((capacity - weight) / itype->weight)); give_peasants(u, itm->type, reduce); weight -= reduce * itype->weight; } @@ -1027,7 +1027,7 @@ static void eaten_by_monster(unit * u) n = (int)(n * multi); if (n > 0) { n = lovar(n); - n = _min(rpeasants(u->region), n); + n = MIN(rpeasants(u->region), n); if (n > 0) { deathcounts(u->region, n); @@ -1047,7 +1047,7 @@ static void absorbed_by_monster(unit * u) if (n > 0) { n = lovar(n); - n = _min(rpeasants(u->region), n); + n = MIN(rpeasants(u->region), n); if (n > 0) { rsetpeasants(u->region, rpeasants(u->region) - n); scale_number(u, u->number + n); @@ -1062,7 +1062,7 @@ static int scareaway(region * r, int anzahl) int n, p, diff = 0, emigrants[MAXDIRECTIONS]; direction_t d; - anzahl = _min(_max(1, anzahl), rpeasants(r)); + anzahl = MIN(MAX(1, anzahl), rpeasants(r)); /* Wandern am Ende der Woche (normal) oder wegen Monster. Die * Wanderung wird erst am Ende von demographics () ausgefuehrt. @@ -1074,7 +1074,7 @@ static int scareaway(region * r, int anzahl) p = rpeasants(r); assert(p >= 0 && anzahl >= 0); - for (n = _min(p, anzahl); n; n--) { + for (n = MIN(p, anzahl); n; n--) { direction_t dir = (direction_t)(rng_int() % MAXDIRECTIONS); region *rc = rconnect(r, dir); @@ -1102,7 +1102,7 @@ static void scared_by_monster(unit * u) } if (n > 0) { n = lovar(n); - n = _min(rpeasants(u->region), n); + n = MIN(rpeasants(u->region), n); if (n > 0) { n = scareaway(u->region, n); if (n > 0) { diff --git a/src/morale.c b/src/morale.c index 8dc22ccb5..1bdf2363d 100644 --- a/src/morale.c +++ b/src/morale.c @@ -73,7 +73,7 @@ void morale_update(region *r) { void morale_change(region *r, int value) { int morale = region_get_morale(r); if (morale > 0) { - morale = _max(0, morale - value); + morale = MAX(0, morale - value); region_set_morale(r, morale, turn); } } diff --git a/src/move.c b/src/move.c index 126557d58..62300beb1 100644 --- a/src/move.c +++ b/src/move.c @@ -151,8 +151,8 @@ static void shiptrail_finalize(attrib * a) static int shiptrail_age(attrib * a, void *owner) { traveldir *t = (traveldir *)(a->data.v); - unused_arg(owner); + (void)owner; t->age--; return (t->age > 0) ? AT_AGE_KEEP : AT_AGE_REMOVE; } @@ -267,12 +267,12 @@ static int ridingcapacity(unit * u) ** tragen nichts (siehe walkingcapacity). Ein Wagen zählt nur, wenn er ** von zwei Pferden gezogen wird */ - animals = _min(animals, effskill(u, SK_RIDING, 0) * u->number * 2); + animals = MIN(animals, effskill(u, SK_RIDING, 0) * u->number * 2); if (fval(u_race(u), RCF_HORSE)) animals += u->number; /* maximal diese Pferde können zum Ziehen benutzt werden */ - vehicles = _min(animals / HORSESNEEDED, vehicles); + vehicles = MIN(animals / HORSESNEEDED, vehicles); return vehicles * vcap + animals * acap; } @@ -291,7 +291,7 @@ int walkingcapacity(const struct unit *u) /* Das Gewicht, welches die Pferde tragen, plus das Gewicht, welches * die Leute tragen */ - pferde_fuer_wagen = _min(animals, effskill(u, SK_RIDING, 0) * u->number * 4); + pferde_fuer_wagen = MIN(animals, effskill(u, SK_RIDING, 0) * u->number * 4); if (fval(u_race(u), RCF_HORSE)) { animals += u->number; people = 0; @@ -301,7 +301,7 @@ int walkingcapacity(const struct unit *u) } /* maximal diese Pferde können zum Ziehen benutzt werden */ - wagen_mit_pferden = _min(vehicles, pferde_fuer_wagen / HORSESNEEDED); + wagen_mit_pferden = MIN(vehicles, pferde_fuer_wagen / HORSESNEEDED); n = wagen_mit_pferden * vcap; @@ -311,7 +311,7 @@ int walkingcapacity(const struct unit *u) wagen_ohne_pferde = vehicles - wagen_mit_pferden; /* Genug Trolle, um die Restwagen zu ziehen? */ - wagen_mit_trollen = _min(u->number / 4, wagen_ohne_pferde); + wagen_mit_trollen = MIN(u->number / 4, wagen_ohne_pferde); /* Wagenkapazität hinzuzählen */ n += wagen_mit_trollen * vcap; @@ -335,7 +335,7 @@ int walkingcapacity(const struct unit *u) int belts = i_get(u->items, rbelt->itype); if (belts) { int multi = config_get_int("rules.trollbelt.multiplier", STRENGTHMULTIPLIER); - n += _min(people, belts) * (multi - 1) * u_race(u)->capacity; + n += MIN(people, belts) * (multi - 1) * u_race(u)->capacity; } } @@ -366,7 +366,7 @@ static int canwalk(unit * u) effsk = effskill(u, SK_RIDING, 0); maxwagen = effsk * u->number * 2; if (u_race(u) == get_race(RC_TROLL)) { - maxwagen = _max(maxwagen, u->number / 4); + maxwagen = MAX(maxwagen, u->number / 4); } maxpferde = effsk * u->number * 4 + u->number; @@ -505,7 +505,7 @@ static double overload(const region * r, ship * sh) double ovl = n / (double)sh->type->cargo; if (mcabins) - ovl = _max(ovl, p / (double)mcabins); + ovl = MAX(ovl, p / (double)mcabins); return ovl; } } @@ -752,7 +752,7 @@ double damage_overload(double overload) badness = overload - overload_worse(); if (badness >= 0) { assert(overload_worst() > overload_worse() || !"overload.worst must be > overload.worse"); - damage += _min(badness, overload_worst() - overload_worse()) * + damage += MIN(badness, overload_worst() - overload_worse()) * (overload_max_damage() - damage) / (overload_worst() - overload_worse()); } @@ -946,7 +946,7 @@ static unit *bewegung_blockiert_von(unit * reisender, region * r) guard_count += u->number; double prob_u = (sk - stealth) * skill_prob; /* amulet counts at most once */ - prob_u += _min(1, _min(u->number, i_get(u->items, ramulet->itype))) * amulet_prob; + prob_u += MIN(1, MIN(u->number, i_get(u->items, ramulet->itype))) * amulet_prob; if (u->building && (u->building->type == castle_bt) && u == building_owner(u->building)) prob_u += castle_prob*buildingeffsize(u->building, 0); if (prob_u >= prob) { @@ -1985,7 +1985,7 @@ static void sail(unit * u, order * ord, region_list ** routep, bool drifting) const luxury_type *ltype = resource2luxury(itm->type->rtype); if (ltype != NULL && itm->number > 0) { int st = itm->number * effskill(harbourmaster, SK_TRADE, 0) / 50; - st = _min(itm->number, st); + st = MIN(itm->number, st); if (st > 0) { i_change(&u2->items, itm->type, -st); diff --git a/src/move.h b/src/move.h index 14c040493..4d0b4e9f2 100644 --- a/src/move.h +++ b/src/move.h @@ -16,11 +16,12 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. **/ +#include "direction.h" +#include + #ifndef H_KRNL_MOVEMENT #define H_KRNL_MOVEMENT -#include "direction.h" - #ifdef __cplusplus extern "C" { #endif diff --git a/src/names.c b/src/names.c index cf1cdb910..248084828 100644 --- a/src/names.c +++ b/src/names.c @@ -365,7 +365,7 @@ static void dracoid_name(unit * u) size_t sz; /* ignore u */ - unused_arg(u); + UNUSED_ARG(u); /* Wieviele Mittelteile? */ mid_syllabels = rng_int() % 4; @@ -425,8 +425,8 @@ const char *abkz(const char *s, char *buf, size_t buflen, size_t maxchars) } } - /* Buchstaben pro Teilkürzel = _max(1,max/AnzWort) */ - bpt = (c > 0) ? _max(1, maxchars / c) : 1; + /* Buchstaben pro Teilkürzel = MAX(1,max/AnzWort) */ + bpt = (c > 0) ? MAX(1, maxchars / c) : 1; /* Einzelne Wörter anspringen und jeweils die ersten BpT kopieren */ diff --git a/src/platform.h b/src/platform.h index c781021ae..2f114cec5 100644 --- a/src/platform.h +++ b/src/platform.h @@ -1,179 +1,15 @@ -/* -Copyright (c) 1998-2015, Enno Rehling - Katja Zedel +#pragma once -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. +#ifndef UNILIB_H +#define UNILIB_H -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -**/ - -#ifndef PLATFORM_H -#define PLATFORM_H - -#ifdef NDEBUG -#define LOMEM +#ifndef MAX_PATH +# define MAX_PATH 4096 #endif -// enable X/Open 7 extensions (like strdup): -#ifndef _XOPEN_SOURCE -#define _XOPEN_SOURCE 700 -#endif +#define UNUSED_ARG(a) (void)(a) -// enable bsd string extensions, since glibc 2.12 (_BSD_SOURCE is dead): -#ifndef _POSIX_C_SOURCE -#define _POSIX_C_SOURCE 200809L -#endif - -#ifndef USE_AUTOCONF -#define USE_AUTOCONF - -#ifdef _MSC_VER -#undef USE_AUTOCONF -#define HAVE_STDBOOL_H -#define HAVE_DIRECT__MKDIR -#define HAVE__ACCESS - -#define VC_EXTRALEAN -#define WIN32_LEAN_AND_MEAN -#pragma warning(push) -#pragma warning(disable:4820 4255 4668) -# include -# include -#pragma warning(pop) -# undef MOUSE_MOVED -# define STDIO_CP 1252 /* log.c, convert to console character set */ -# pragma warning (disable: 4201 4214 4514 4115 4711) -#if _MSC_VER >= 1900 -# pragma warning(disable: 4710) -/* warning C4710: function not inlined */ -# pragma warning(disable: 4456) -/* warning C4456 : declaration of hides previous local declaration */ -# pragma warning(disable: 4457) -/* warning C4457: declaration of hides function parameter */ -# pragma warning(disable: 4459) -/* warning C4459: declaration of hides global declaration */ -#endif -# pragma warning(disable: 4056) -/* warning C4056: overflow in floating point constant arithmetic */ -# pragma warning(disable: 4201) -/* warning C4201: nonstandard extension used : nameless struct/union */ -# pragma warning(disable: 4214) -/* warning C4214: nonstandard extension used : bit field types other than int */ -# pragma warning(disable: 4100) -/* warning C4100: : unreferenced formal parameter */ -# pragma warning(disable: 4996) -/* is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' */ -# pragma warning(disable: 4668) -/* : bytes padding after data member */ -# pragma warning(disable: 4820) - -/* warning C4100: was declared deprecated */ -#ifndef _CRT_SECURE_NO_DEPRECATE -#define _CRT_SECURE_NO_DEPRECATE -#endif - -/* - * http://msdn2.microsoft.com/en-us/library/ms235505(VS.80).aspx - * Defining _CRT_DISABLE_PERFCRIT_LOCKS forces all I/O operations to assume a - * single-threaded I/O model and use the _nolock forms of the functions. - */ -#ifndef _CRT_DISABLE_PERFCRIT_LOCKS -#define _CRT_DISABLE_PERFCRIT_LOCKS -#endif - -#elif __GNUC__ -#undef USE_AUTOCONF -#define HAVE_SNPRINTF -#define HAVE_SYS_STAT_MKDIR -#define HAVE_STRDUP -#define HAVE_UNISTD_H -#endif -#endif - -#ifdef USE_AUTOCONF -// unknown toolchain, using autoconf -#include -#endif - -#define unused_arg (void) - -#define iswxspace(c) (c==160 || iswspace(c)) -#define isxspace(c) (c==160 || isspace(c)) - -#define TOLUA_CAST (char*) - -#if !defined(MAX_PATH) -#if defined(PATH_MAX) -# define MAX_PATH PATH_MAX -#else -# define MAX_PATH 256 -#endif -#endif - -#ifdef HAVE_UNISTD_H -#include -#endif - -#if defined(HAVE_STDBOOL_H) -# include -#else -# ifndef HAVE__BOOL -# ifdef __cplusplus -typedef bool _Bool; -# else -typedef unsigned char _Bool; -# endif -# endif -# define bool _Bool -# define false 0 -# define true 1 -# define __bool_true_false_are_defined 1 -#endif - -#ifndef HAVE__ACCESS -#ifdef HAVE_ACCESS -#define _access(path, mode) access(path, mode) -#endif -#endif - -#if defined(HAVE_DIRECT__MKDIR) -#include -#elif defined(HAVE_DIRECT_MKDIR) -#include -#define _mkdir(a) mkdir(a) -#elif defined(HAVE_SYS_STAT_MKDIR) -#include -#define _mkdir(a) mkdir(a, 0777) -#endif - -#ifndef _min -#define _min(a,b) ((a) < (b) ? (a) : (b)) -#endif -#ifndef _max -#define _max(a,b) ((a) > (b) ? (a) : (b)) -#endif - -#if !defined(HAVE__STRDUP) -#if defined(HAVE_STRDUP) -#undef _strdup -#define _strdup strdup -#endif -#endif - -#if !defined(HAVE__SNPRINTF) -#if defined(HAVE_SNPRINTF) -#define _snprintf snprintf -#endif -#endif +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) #endif - diff --git a/src/prefix.c b/src/prefix.c index a6564b6e8..1a22e6982 100644 --- a/src/prefix.c +++ b/src/prefix.c @@ -30,7 +30,7 @@ int add_raceprefix(const char *prefix) race_prefixes = tmp; size *= 2; } - race_prefixes[next++] = _strdup(prefix); + race_prefixes[next++] = strdup(prefix); race_prefixes[next] = NULL; return 0; } diff --git a/src/races/dragons.c b/src/races/dragons.c index 222d63c89..aa79a783a 100644 --- a/src/races/dragons.c +++ b/src/races/dragons.c @@ -22,7 +22,7 @@ /* util includes */ #include -#define age_chance(a,b,p) (_max(0,a-b)*p) +#define age_chance(a,b,p) (MAX(0,a-b)*p) #define DRAGONAGE 27 #define WYRMAGE 68 diff --git a/src/races/races.c b/src/races/races.c index 2c6cfffa9..8af9cf2ed 100644 --- a/src/races/races.c +++ b/src/races/races.c @@ -42,7 +42,7 @@ static void oldfamiliars(unit * u) char fname[64]; /* these familiars have no special skills. */ - _snprintf(fname, sizeof(fname), "%s_familiar", u_race(u)->_name); + snprintf(fname, sizeof(fname), "%s_familiar", u_race(u)->_name); create_mage(u, M_GRAY); equip_unit(u, get_equipment(fname)); } diff --git a/src/races/zombies.c b/src/races/zombies.c index 3e9303b38..ea26298b2 100644 --- a/src/races/zombies.c +++ b/src/races/zombies.c @@ -33,7 +33,7 @@ #define UNDEAD_BREAKUP 25 /* chance dafuer */ #define UNDEAD_BREAKUP_FRACTION (25+rng_int()%70) /* anteil der weg geht */ -#define age_chance(a,b,p) (_max(0,a-b)*p) +#define age_chance(a,b,p) (MAX(0,a-b)*p) void make_undead_unit(unit * u) { @@ -70,7 +70,7 @@ void age_undead(unit * u) void age_skeleton(unit * u) { if (is_monsters(u->faction) && rng_int() % 100 < age_chance(u->age, 27, 1)) { - int n = _max(1, u->number / 2); + int n = MAX(1, u->number / 2); double q = (double)u->hp / (double)(unit_max_hp(u) * u->number); u_setrace(u, get_race(RC_SKELETON_LORD)); u->irace = NULL; @@ -82,7 +82,7 @@ void age_skeleton(unit * u) void age_zombie(unit * u) { if (is_monsters(u->faction) && rng_int() % 100 < age_chance(u->age, 27, 1)) { - int n = _max(1, u->number / 2); + int n = MAX(1, u->number / 2); double q = (double)u->hp / (double)(unit_max_hp(u) * u->number); u_setrace(u, get_race(RC_ZOMBIE_LORD)); u->irace = NULL; @@ -94,7 +94,7 @@ void age_zombie(unit * u) void age_ghoul(unit * u) { if (is_monsters(u->faction) && rng_int() % 100 < age_chance(u->age, 27, 1)) { - int n = _max(1, u->number / 2); + int n = MAX(1, u->number / 2); double q = (double)u->hp / (double)(unit_max_hp(u) * u->number); u_setrace(u, get_race(RC_GHOUL_LORD)); u->irace = NULL; diff --git a/src/randenc.c b/src/randenc.c index 536210b1f..ab51d64b1 100644 --- a/src/randenc.c +++ b/src/randenc.c @@ -785,7 +785,7 @@ static void rotting_herbs(void) if (fval(itm->type, ITF_HERB)) { double nv = normalvariate(k, k / 4); int inv = (int)nv; - int delta = _min(n, inv); + int delta = MIN(n, inv); if (!i_change(itmp, itm->type, -delta)) { continue; } @@ -814,7 +814,7 @@ void randomevents(void) while (*blist) { building *b = *blist; if (fval(b->type, BTF_DECAY) && !building_owner(b)) { - b->size -= _max(1, (b->size * 20) / 100); + b->size -= MAX(1, (b->size * 20) / 100); if (b->size == 0) { remove_building(blist, r->buildings); } diff --git a/src/report.c b/src/report.c index 553e6cb94..503f12732 100644 --- a/src/report.c +++ b/src/report.c @@ -269,17 +269,17 @@ void nr_spell_syntax(struct stream *out, spellbook_entry * sbe, const struct loc /* Reihenfolge beachten: Erst REGION, dann STUFE! */ if (sp->sptyp & FARCASTING) { - bytes = _snprintf(bufp, size, " [%s x y]", LOC(lang, parameters[P_REGION])); + bytes = snprintf(bufp, size, " [%s x y]", LOC(lang, parameters[P_REGION])); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } if (sp->sptyp & SPELLLEVEL) { - bytes = _snprintf(bufp, size, " [%s n]", LOC(lang, parameters[P_LEVEL])); + bytes = snprintf(bufp, size, " [%s n]", LOC(lang, parameters[P_LEVEL])); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } - bytes = (int)_snprintf(bufp, size, " \"%s\"", spell_name(sp, lang)); + bytes = (int)snprintf(bufp, size, " \"%s\"", spell_name(sp, lang)); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -305,12 +305,12 @@ void nr_spell_syntax(struct stream *out, spellbook_entry * sbe, const struct loc if (cp == 'u') { targetp = targets + 1; locp = LOC(lang, targetp->vars); - bytes = (int)_snprintf(bufp, size, " <%s>", locp); + bytes = (int)snprintf(bufp, size, " <%s>", locp); if (*params == '+') { ++params; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)_snprintf(bufp, size, " [<%s> ...]", locp); + bytes = (int)snprintf(bufp, size, " [<%s> ...]", locp); } if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -318,12 +318,12 @@ void nr_spell_syntax(struct stream *out, spellbook_entry * sbe, const struct loc else if (cp == 's') { targetp = targets + 2; locp = LOC(lang, targetp->vars); - bytes = (int)_snprintf(bufp, size, " <%s>", locp); + bytes = (int)snprintf(bufp, size, " <%s>", locp); if (*params == '+') { ++params; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)_snprintf(bufp, size, " [<%s> ...]", locp); + bytes = (int)snprintf(bufp, size, " [<%s> ...]", locp); } if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -342,12 +342,12 @@ void nr_spell_syntax(struct stream *out, spellbook_entry * sbe, const struct loc else if (cp == 'b') { targetp = targets + 3; locp = LOC(lang, targetp->vars); - bytes = (int)_snprintf(bufp, size, " <%s>", locp); + bytes = (int)snprintf(bufp, size, " <%s>", locp); if (*params == '+') { ++params; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)_snprintf(bufp, size, " [<%s> ...]", locp); + bytes = (int)snprintf(bufp, size, " [<%s> ...]", locp); } if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -382,17 +382,17 @@ void nr_spell_syntax(struct stream *out, spellbook_entry * sbe, const struct loc if (targetp->param && targetp->vars) { locp = LOC(lang, targetp->vars); bytes = - (int)_snprintf(bufp, size, " %s <%s>", parameters[targetp->param], + (int)snprintf(bufp, size, " %s <%s>", parameters[targetp->param], locp); if (multi) { if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); - bytes = (int)_snprintf(bufp, size, " [<%s> ...]", locp); + bytes = (int)snprintf(bufp, size, " [<%s> ...]", locp); } } else { bytes = - (int)_snprintf(bufp, size, " %s", parameters[targetp->param]); + (int)snprintf(bufp, size, " %s", parameters[targetp->param]); } if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -422,10 +422,10 @@ void nr_spell_syntax(struct stream *out, spellbook_entry * sbe, const struct loc } if (*params == '?') { ++params; - bytes = (int)_snprintf(bufp, size, " [<%s>]", locp); + bytes = (int)snprintf(bufp, size, " [<%s>]", locp); } else { - bytes = (int)_snprintf(bufp, size, " <%s>", locp); + bytes = (int)snprintf(bufp, size, " <%s>", locp); } if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -494,18 +494,18 @@ void nr_spell(struct stream *out, spellbook_entry * sbe, const struct locale *la bufp = buf; if (sp->sptyp & SPELLLEVEL) { bytes = - _snprintf(bufp, size, " %d %s", itemanz, LOC(lang, resourcename(rtype, + snprintf(bufp, size, " %d %s", itemanz, LOC(lang, resourcename(rtype, itemanz != 1))); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (costtyp == SPC_LEVEL || costtyp == SPC_LINEAR) { - bytes = _snprintf(bufp, size, " * %s", LOC(lang, "nr_level")); + bytes = snprintf(bufp, size, " * %s", LOC(lang, "nr_level")); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } } else { - bytes = _snprintf(bufp, size, "%d %s", itemanz, LOC(lang, resourcename(rtype, itemanz != 1))); + bytes = snprintf(bufp, size, "%d %s", itemanz, LOC(lang, resourcename(rtype, itemanz != 1))); if (wrptr(&bufp, &size, bytes) != 0) { WARN_STATIC_BUFFER(); } @@ -929,7 +929,7 @@ static void describe(struct stream *out, const region * r, faction * f) } if (!e) { e = calloc(sizeof(struct edge), 1); - e->name = _strdup(name); + e->name = strdup(name); e->transparent = transparent; e->next = edges; edges = e; @@ -945,13 +945,13 @@ static void describe(struct stream *out, const region * r, faction * f) WARN_STATIC_BUFFER(); if (r->seen.mode == seen_travel) { - bytes = _snprintf(bufp, size, " (%s)", LOC(f->locale, "see_travel")); + bytes = snprintf(bufp, size, " (%s)", LOC(f->locale, "see_travel")); } else if (r->seen.mode == seen_neighbour) { - bytes = _snprintf(bufp, size, " (%s)", LOC(f->locale, "see_neighbour")); + bytes = snprintf(bufp, size, " (%s)", LOC(f->locale, "see_neighbour")); } else if (r->seen.mode == seen_lighthouse) { - bytes = _snprintf(bufp, size, " (%s)", LOC(f->locale, "see_lighthouse")); + bytes = snprintf(bufp, size, " (%s)", LOC(f->locale, "see_lighthouse")); } else { bytes = 0; @@ -974,7 +974,7 @@ static void describe(struct stream *out, const region * r, faction * f) saplings = rtrees(r, 1); if (production(r)) { if (trees > 0 || saplings > 0) { - bytes = _snprintf(bufp, size, ", %d/%d ", trees, saplings); + bytes = snprintf(bufp, size, ", %d/%d ", trees, saplings); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -1004,7 +1004,7 @@ static void describe(struct stream *out, const region * r, faction * f) for (n = 0; n < numresults; ++n) { if (result[n].number >= 0 && result[n].level >= 0) { - bytes = _snprintf(bufp, size, ", %d %s/%d", result[n].number, + bytes = snprintf(bufp, size, ", %d %s/%d", result[n].number, LOC(f->locale, result[n].name), result[n].level); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -1015,14 +1015,14 @@ static void describe(struct stream *out, const region * r, faction * f) /* peasants & silver */ if (rpeasants(r)) { int n = rpeasants(r); - bytes = _snprintf(bufp, size, ", %d", n); + bytes = snprintf(bufp, size, ", %d", n); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); if (r->land->ownership) { const char *str = LOC(f->locale, mkname("morale", itoa10(region_get_morale(r)))); - bytes = _snprintf(bufp, size, " %s", str); + bytes = snprintf(bufp, size, " %s", str); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -1041,7 +1041,7 @@ static void describe(struct stream *out, const region * r, faction * f) } } if (rmoney(r) && r->seen.mode >= seen_travel) { - bytes = _snprintf(bufp, size, ", %d ", rmoney(r)); + bytes = snprintf(bufp, size, ", %d ", rmoney(r)); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); bytes = @@ -1053,7 +1053,7 @@ static void describe(struct stream *out, const region * r, faction * f) /* Pferde */ if (rhorses(r)) { - bytes = _snprintf(bufp, size, ", %d ", rhorses(r)); + bytes = snprintf(bufp, size, ", %d ", rhorses(r)); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); bytes = @@ -1141,7 +1141,7 @@ static void describe(struct stream *out, const region * r, faction * f) if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); f_regionid(r2, f, regname, sizeof(regname)); - bytes = _snprintf(bufp, size, trailinto(r2, f->locale), regname); + bytes = snprintf(bufp, size, trailinto(r2, f->locale), regname); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -1453,7 +1453,7 @@ report_template(const char *filename, report_context * ctx, const char *bom) bufp = buf; size = sizeof(buf) - 1; - bytes = _snprintf(bufp, size, "%s %s; %s [%d,%d$", + bytes = snprintf(bufp, size, "%s %s; %s [%d,%d$", LOC(u->faction->locale, parameters[P_UNIT]), itoa36(u->no), unit_getname(u), u->number, get_money(u)); if (wrptr(&bufp, &size, bytes) != 0) @@ -1631,7 +1631,7 @@ static void allies(struct stream *out, const faction * f) if (f->allies) { int bytes; size_t size = sizeof(buf); - bytes = _snprintf(buf, size, "%s ", LOC(f->locale, "faction_help")); + bytes = snprintf(buf, size, "%s ", LOC(f->locale, "faction_help")); size -= bytes; show_allies(f, f->allies, buf + bytes, size); paragraph(out, buf, 0, 0, 0); @@ -1642,7 +1642,7 @@ static void allies(struct stream *out, const faction * f) if (g->allies) { int bytes; size_t size = sizeof(buf); - bytes = _snprintf(buf, size, "%s %s ", g->name, LOC(f->locale, "group_help")); + bytes = snprintf(buf, size, "%s %s ", g->name, LOC(f->locale, "group_help")); size -= bytes; show_allies(f, g->allies, buf + bytes, size); paragraph(out, buf, 0, 0, 0); @@ -1781,12 +1781,12 @@ nr_ship(struct stream *out, const region *r, const ship * sh, const faction * f, getshipweight(sh, &n, &p); n = (n + 99) / 100; /* 1 Silber = 1 GE */ - bytes = _snprintf(bufp, size, "%s, %s, (%d/%d)", shipname(sh), + bytes = snprintf(bufp, size, "%s, %s, (%d/%d)", shipname(sh), LOC(f->locale, sh->type->_name), n, shipcapacity(sh) / 100); } else { bytes = - _snprintf(bufp, size, "%s, %s", shipname(sh), LOC(f->locale, + snprintf(bufp, size, "%s, %s", shipname(sh), LOC(f->locale, sh->type->_name)); } if (wrptr(&bufp, &size, bytes) != 0) @@ -1794,7 +1794,7 @@ nr_ship(struct stream *out, const region *r, const ship * sh, const faction * f, assert(sh->type->construction->improvement == NULL); /* sonst ist construction::size nicht ship_type::maxsize */ if (sh->size != sh->type->construction->maxsize) { - bytes = _snprintf(bufp, size, ", %s (%d/%d)", + bytes = snprintf(bufp, size, ", %s (%d/%d)", LOC(f->locale, "nr_undercons"), sh->size, sh->type->construction->maxsize); if (wrptr(&bufp, &size, bytes) != 0) @@ -1803,7 +1803,7 @@ nr_ship(struct stream *out, const region *r, const ship * sh, const faction * f, if (sh->damage) { int percent = ship_damage_percent(sh); bytes = - _snprintf(bufp, size, ", %d%% %s", percent, LOC(f->locale, "nr_damaged")); + snprintf(bufp, size, ", %d%% %s", percent, LOC(f->locale, "nr_damaged")); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -1852,7 +1852,7 @@ nr_building(struct stream *out, const region *r, const building *b, const factio lang = f->locale; newline(out); bytes = - _snprintf(bufp, size, "%s, %s %d, ", buildingname(b), LOC(lang, + snprintf(bufp, size, "%s, %s %d, ", buildingname(b), LOC(lang, "nr_size"), b->size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); @@ -1867,7 +1867,7 @@ nr_building(struct stream *out, const region *r, const building *b, const factio if (owner && owner->faction == f) { /* illusion. report real type */ name = LOC(lang, bname); - bytes = _snprintf(bufp, size, " (%s)", name); + bytes = snprintf(bufp, size, " (%s)", name); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); } @@ -2168,7 +2168,7 @@ report_plaintext(const char *filename, report_context * ctx, bufp = buf; size = sizeof(buf) - 1; - bytes = _snprintf(buf, size, "%s:", LOC(f->locale, "nr_options")); + bytes = snprintf(buf, size, "%s:", LOC(f->locale, "nr_options")); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); for (op = 0; op != MAXOPTIONS; op++) { @@ -2220,14 +2220,14 @@ report_plaintext(const char *filename, report_context * ctx, newline(out); centre(out, LOC(f->locale, pname), true); - _snprintf(buf, sizeof(buf), "%s %d", LOC(f->locale, "nr_level"), + snprintf(buf, sizeof(buf), "%s %d", LOC(f->locale, "nr_level"), ptype->level); centre(out, buf, true); newline(out); bufp = buf; size = sizeof(buf) - 1; - bytes = _snprintf(bufp, size, "%s: ", LOC(f->locale, "nr_herbsrequired")); + bytes = snprintf(bufp, size, "%s: ", LOC(f->locale, "nr_herbsrequired")); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); diff --git a/src/report.test.c b/src/report.test.c index 555d39408..aa3c52695 100644 --- a/src/report.test.c +++ b/src/report.test.c @@ -139,7 +139,7 @@ static void cleanup_spell_fixture(spell_fixture *spf) { static void set_parameter(spell_fixture spell, char *value) { free(spell.sp->parameter); - spell.sp->parameter = _strdup(value); + spell.sp->parameter = strdup(value); } static void check_spell_syntax(CuTest *tc, char *msg, spell_fixture *spell, char *syntax) { @@ -210,14 +210,14 @@ static void test_write_spell_syntax(CuTest *tc) { set_parameter(spell, "bc"); free(spell.sp->syntax); - spell.sp->syntax = _strdup("hodor"); + spell.sp->syntax = strdup("hodor"); check_spell_syntax(tc, "bc hodor", &spell, " ZAUBERE \"Testzauber\" "); free(spell.sp->syntax); spell.sp->syntax = 0; set_parameter(spell, "c?"); free(spell.sp->syntax); - spell.sp->syntax = _strdup("hodor"); + spell.sp->syntax = strdup("hodor"); check_spell_syntax(tc, "c?", &spell, " ZAUBERE \"Testzauber\" []"); free(spell.sp->syntax); spell.sp->syntax = 0; diff --git a/src/reports.c b/src/reports.c index fa8a722d9..a9695145b 100644 --- a/src/reports.c +++ b/src/reports.c @@ -529,7 +529,7 @@ size_t size) if (a_otherfaction && alliedunit(u, f, HELP_FSTEALTH)) { faction *f = get_otherfaction(a_otherfaction); int result = - _snprintf(bufp, size, ", %s (%s)", factionname(f), + snprintf(bufp, size, ", %s (%s)", factionname(f), factionname(u->faction)); if (wrptr(&bufp, &size, result) != 0) WARN_STATIC_BUFFER(); @@ -544,7 +544,7 @@ size_t size) bufp = STRLCPY(bufp, ", ", size); - if (wrptr(&bufp, &size, _snprintf(bufp, size, "%d ", u->number))) + if (wrptr(&bufp, &size, snprintf(bufp, size, "%d ", u->number))) WARN_STATIC_BUFFER(); pzTmp = get_racename(u->attribs); @@ -641,7 +641,7 @@ size_t size) bufp = STRLCPY(bufp, ", ", size); if (!dh) { - result = _snprintf(bufp, size, "%s: ", LOC(f->locale, "nr_inventory")); + result = snprintf(bufp, size, "%s: ", LOC(f->locale, "nr_inventory")); if (wrptr(&bufp, &size, result) != 0) WARN_STATIC_BUFFER(); dh = 1; @@ -650,7 +650,7 @@ size_t size) bufp = STRLCPY(bufp, ic, size); } else { - if (wrptr(&bufp, &size, _snprintf(bufp, size, "%d %s", in, ic))) + if (wrptr(&bufp, &size, snprintf(bufp, size, "%d %s", in, ic))) WARN_STATIC_BUFFER(); } } @@ -661,7 +661,7 @@ size_t size) if (book) { selist *ql = book->spells; int qi, header, maxlevel = effskill(u, SK_MAGIC, 0); - int result = _snprintf(bufp, size, ". Aura %d/%d", get_spellpoints(u), max_spellpoints(u->region, u)); + int result = snprintf(bufp, size, ". Aura %d/%d", get_spellpoints(u), max_spellpoints(u->region, u)); if (wrptr(&bufp, &size, result) != 0) { WARN_STATIC_BUFFER(); } @@ -671,7 +671,7 @@ size_t size) if (sbe->level <= maxlevel) { int result = 0; if (!header) { - result = _snprintf(bufp, size, ", %s: ", LOC(f->locale, "nr_spells")); + result = snprintf(bufp, size, ", %s: ", LOC(f->locale, "nr_spells")); header = 1; } else { @@ -690,7 +690,7 @@ size_t size) } if (i != MAXCOMBATSPELLS) { int result = - _snprintf(bufp, size, ", %s: ", LOC(f->locale, "nr_combatspells")); + snprintf(bufp, size, ", %s: ", LOC(f->locale, "nr_combatspells")); if (wrptr(&bufp, &size, result) != 0) WARN_STATIC_BUFFER(); @@ -708,7 +708,7 @@ size_t size) int sl = get_combatspelllevel(u, i); bufp = STRLCPY(bufp, spell_name(sp, u->faction->locale), size); if (sl > 0) { - result = _snprintf(bufp, size, " (%d)", sl); + result = snprintf(bufp, size, " (%d)", sl); if (wrptr(&bufp, &size, result) != 0) WARN_STATIC_BUFFER(); } @@ -819,13 +819,13 @@ const struct unit * u, struct skill * sv, int *dh, int days) if (sv->id == SK_STEALTH && fval(u, UFL_STEALTH)) { i = u_geteffstealth(u); if (i >= 0) { - if (wrptr(&bufp, &size, _snprintf(bufp, size, "%d/", i)) != 0) + if (wrptr(&bufp, &size, snprintf(bufp, size, "%d/", i)) != 0) WARN_STATIC_BUFFER(); } } effsk = eff_skill(u, sv, 0); - if (wrptr(&bufp, &size, _snprintf(bufp, size, "%d", effsk)) != 0) + if (wrptr(&bufp, &size, snprintf(bufp, size, "%d", effsk)) != 0) WARN_STATIC_BUFFER(); if (u->faction->options & want(O_SHOWSKCHANGE)) { @@ -836,11 +836,11 @@ const struct unit * u, struct skill * sv, int *dh, int days) oldeff = sv->old + get_modifier(u, sv->id, sv->old, u->region, false); } - oldeff = _max(0, oldeff); + oldeff = MAX(0, oldeff); diff = effsk - oldeff; if (diff != 0) { - if (wrptr(&bufp, &size, _snprintf(bufp, size, " (%s%d)", (diff > 0) ? "+" : "", diff)) != 0) + if (wrptr(&bufp, &size, snprintf(bufp, size, " (%s%d)", (diff > 0) ? "+" : "", diff)) != 0) WARN_STATIC_BUFFER(); } } @@ -877,7 +877,7 @@ void split_paragraph(strlist ** SP, const char *s, unsigned int indent, unsigned firstline = false; } if (!cut) { - cut = s + _min(len, REPORTWIDTH); + cut = s + MIN(len, REPORTWIDTH); } memcpy(buf + indent, s, cut - s); buf[indent + (cut - s)] = 0; @@ -1411,7 +1411,7 @@ int write_reports(faction * f, time_t ltime) int error = 0; do { char filename[32]; - char path[MAX_PATH]; + char path[4096]; sprintf(filename, "%d-%s.%s", turn, itoa36(f->no), rtype->extension); join_path(reportpath(), filename, path, sizeof(path)); @@ -1481,7 +1481,7 @@ int reports(void) FILE *mailit; time_t ltime = time(NULL); int retval = 0; - char path[MAX_PATH]; + char path[4096]; const char * rpath = reportpath(); log_info("Writing reports for turn %d:", turn); @@ -1508,7 +1508,7 @@ int reports(void) static variant var_copy_string(variant x) { - x.v = x.v ? _strdup((const char *)x.v) : 0; + x.v = x.v ? strdup((const char *)x.v) : 0; return x; } @@ -1612,7 +1612,7 @@ f_regionid(const region * r, const faction * f, char *buffer, size_t size) pnormalize(&nx, &ny, pl); adjust_coordinates(f, &nx, &ny, pl); len = strlcpy(buffer, rname(r, f ? f->locale : 0), size); - _snprintf(buffer + len, size - len, " (%d,%d%s%s)", nx, ny, named ? "," : "", (named) ? name : ""); + snprintf(buffer + len, size - len, " (%d,%d%s%s)", nx, ny, named ? "," : "", (named) ? name : ""); buffer[size - 1] = 0; len = strlen(buffer); } @@ -1863,7 +1863,7 @@ static void eval_order(struct opstack **stack, const void *userdata) size_t len; variant var; - unused_arg(userdata); + UNUSED_ARG(userdata); write_order(ord, buf, sizeof(buf)); len = strlen(buf); var.v = strcpy(balloc(len + 1), buf); @@ -1883,7 +1883,7 @@ static void eval_resources(struct opstack **stack, const void *userdata) while (res != NULL && size > 4) { const char *rname = resourcename(res->type, (res->number != 1) ? NMF_PLURAL : 0); - int result = _snprintf(bufp, size, "%d %s", res->number, LOC(lang, rname)); + int result = snprintf(bufp, size, "%d %s", res->number, LOC(lang, rname)); if (wrptr(&bufp, &size, result) != 0 || size < sizeof(buf) / 2) { WARN_STATIC_BUFFER(); break; @@ -1947,7 +1947,7 @@ static void eval_trail(struct opstack **stack, const void *userdata) variant var; char *bufp = buf; #ifdef _SECURECRT_ERRCODE_VALUES_DEFINED - /* stupid MS broke _snprintf */ + /* stupid MS broke snprintf */ int eold = errno; #endif @@ -1958,7 +1958,7 @@ static void eval_trail(struct opstack **stack, const void *userdata) const char *trail = trailinto(r, lang); const char *rn = f_regionid_s(r, report); - if (wrptr(&bufp, &size, _snprintf(bufp, size, trail, rn)) != 0) + if (wrptr(&bufp, &size, snprintf(bufp, size, trail, rn)) != 0) WARN_STATIC_BUFFER(); if (i + 2 < end) { @@ -2014,7 +2014,7 @@ static void eval_int36(struct opstack **stack, const void *userdata) var.v = strcpy(balloc(len + 1), c); opush(stack, var); - unused_arg(userdata); + UNUSED_ARG(userdata); } /*** END MESSAGE RENDERING ***/ diff --git a/src/skill.h b/src/skill.h index 8b0c0c155..24f96a844 100644 --- a/src/skill.h +++ b/src/skill.h @@ -3,7 +3,7 @@ #ifndef H_SKILL_H #define H_SKILL_H -#include +#include struct locale; typedef enum { diff --git a/src/spells.c b/src/spells.c index 7e7b5669a..6ed38d022 100644 --- a/src/spells.c +++ b/src/spells.c @@ -60,6 +60,7 @@ #include #include #include +#include #include #include #include @@ -149,7 +150,7 @@ static void magicanalyse_region(region * r, unit * mage, double force) * mehr als 100% probability und damit immer ein Erfolg. */ probability = curse_chance(c, force); mon = c->duration + (rng_int() % 10) - 5; - mon = _max(1, mon); + mon = MAX(1, mon); found = true; if (chance(probability)) { /* Analyse geglueckt */ @@ -190,7 +191,7 @@ static void magicanalyse_unit(unit * u, unit * mage, double force) * mehr als 100% probability und damit immer ein Erfolg. */ probability = curse_chance(c, force); mon = c->duration + (rng_int() % 10) - 5; - mon = _max(1, mon); + mon = MAX(1, mon); if (chance(probability)) { /* Analyse geglueckt */ if (c_flags(c) & CURSE_NOAGE) { @@ -231,7 +232,7 @@ static void magicanalyse_building(building * b, unit * mage, double force) * mehr als 100% probability und damit immer ein Erfolg. */ probability = curse_chance(c, force); mon = c->duration + (rng_int() % 10) - 5; - mon = _max(1, mon); + mon = MAX(1, mon); if (chance(probability)) { /* Analyse geglueckt */ if (c_flags(c) & CURSE_NOAGE) { @@ -272,7 +273,7 @@ static void magicanalyse_ship(ship * sh, unit * mage, double force) * mehr als 100% probability und damit immer ein Erfolg. */ probability = curse_chance(c, force); mon = c->duration + (rng_int() % 10) - 5; - mon = _max(1, mon); + mon = MAX(1, mon); if (chance(probability)) { /* Analyse geglueckt */ if (c_flags(c) & CURSE_NOAGE) { @@ -704,7 +705,7 @@ static int sp_destroy_magic(castorder * co) "unit region command", mage, mage->region, co->order)); } - return _max(succ, 1); + return MAX(succ, 1); } /* ------------------------------------------------------------- */ @@ -773,7 +774,7 @@ static int sp_transferaura(castorder * co) return 0; } - gain = _min(aura, scm_src->spellpoints) / multi; + gain = MIN(aura, scm_src->spellpoints) / multi; scm_src->spellpoints -= gain * multi; scm_dst->spellpoints += gain; @@ -912,7 +913,7 @@ static int sp_summonent(castorder * co) return 0; } - ents = _min((int)(power * power), rtrees(r, 2)); + ents = MIN((int)(power * power), rtrees(r, 2)); u = create_unit(r, mage->faction, ents, get_race(RC_TREEMAN), 0, NULL, mage); @@ -1304,7 +1305,7 @@ static int sp_rosthauch(castorder * co) for (; iweapon != NULL; iweapon = iweapon->next) { item **ip = i_find(&u->items, iweapon->type); if (*ip) { - float chance = (float)_min((*ip)->number, force); + float chance = (float)MIN((*ip)->number, force); if (iweapon->chance < 1.0) { chance *= iweapon->chance; } @@ -1343,7 +1344,7 @@ static int sp_rosthauch(castorder * co) * unguenstigsten Fall kann pro Stufe nur eine Waffe verzaubert werden, * darum wird hier nur fuer alle Faelle in denen noch weniger Waffen * betroffen wurden ein Kostennachlass gegeben */ - return _min(success, cast_level); + return MIN(success, cast_level); } /* ------------------------------------------------------------- */ @@ -1373,7 +1374,7 @@ static int sp_kaelteschutz(castorder * co) unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; - int duration = _max(cast_level, (int)force) + 1; + int duration = MAX(cast_level, (int)force) + 1; spellparameter *pa = co->par; double effect; @@ -2137,8 +2138,8 @@ static int sp_drought(castorder * co) */ c = get_curse(r->attribs, ct_find("drought")); if (c) { - c->vigour = _max(c->vigour, power); - c->duration = _max(c->duration, (int)power); + c->vigour = MAX(c->vigour, power); + c->duration = MAX(c->duration, (int)power); } else { double effect = 4.0; @@ -2335,8 +2336,8 @@ static int sp_earthquake(castorder * co) if (burg->size != 0 && !is_cursed(burg->attribs, C_MAGICWALLS, 0)) { /* Magieresistenz */ if (!target_resists_magic(mage, burg, TYP_BUILDING, 0)) { - kaputt = _min(10 * cast_level, burg->size / 4); - kaputt = _max(kaputt, 1); + kaputt = MIN(10 * cast_level, burg->size / 4); + kaputt = MAX(kaputt, 1); burg->size -= kaputt; if (burg->size == 0) { /* TODO: sollten die Insassen nicht Schaden nehmen? */ @@ -2501,7 +2502,7 @@ static int sp_forest_fire(castorder * co) * das Zaubern. Patzer werden warscheinlicher. * Jeder Zauber muss erst gegen den Wiederstand des Fluchs gezaubert * werden und schwaecht dessen Antimagiewiederstand um 1. - * Wirkt _max(Stufe(Magier) - Stufe(Ziel), rand(3)) Wochen + * Wirkt MAX(Stufe(Magier) - Stufe(Ziel), rand(3)) Wochen * Patzer: * Magier wird selbst betroffen * @@ -2529,7 +2530,7 @@ static int sp_fumblecurse(castorder * co) rx = rng_int() % 3; sx = cast_level - effskill(target, SK_MAGIC, 0); - duration = _max(sx, rx) + 1; + duration = MAX(sx, rx) + 1; effect = force / 2; c = create_curse(mage, &target->attribs, ct_find("fumble"), @@ -2695,8 +2696,8 @@ static int sp_firewall(castorder * co) } else { fd = (wall_data *)b->data.v; - fd->force = (int)_max(fd->force, force / 2 + 0.5); - fd->countdown = _max(fd->countdown, cast_level + 1); + fd->force = (int)MAX(fd->force, force / 2 + 0.5); + fd->countdown = MAX(fd->countdown, cast_level + 1); } /* melden, 1x pro Partei */ @@ -2938,7 +2939,7 @@ attrib_type at_deathcloud_compat = { * Ruestung wirkt nicht * Patzer: * Magier geraet in den Staub und verliert zufaellige Zahl von HP bis -* auf _max(hp,2) +* auf MAX(hp,2) * Besonderheiten: * Nicht als curse implementiert, was schlecht ist - man kann dadurch * kein dispell machen. Wegen fix unter Zeitdruck erstmal nicht zu @@ -3361,7 +3362,7 @@ static int sp_summonundead(castorder * co) return 0; } - undead = _min(deathcount(r), 2 + lovar(force)); + undead = MIN(deathcount(r), 2 + lovar(force)); if (cast_level <= 8) { race = get_race(RC_SKELETON); @@ -3409,7 +3410,7 @@ static int sp_auraleak(castorder * co) int cast_level = co->level; message *msg; - lost = _min(0.95, cast_level * 0.05); + lost = MIN(0.95, cast_level * 0.05); for (u = r->units; u; u = u->next) { if (is_mage(u)) { @@ -3792,8 +3793,8 @@ static int sp_raisepeasantmob(castorder * co) anteil = 6 + (rng_int() % 4); n = rpeasants(r) * anteil / 10; - n = _max(0, n); - n = _min(n, rpeasants(r)); + n = MAX(0, n); + n = MIN(n, rpeasants(r)); if (n <= 0) { report_failure(mage, co->order); @@ -4032,13 +4033,13 @@ static int sp_recruit(castorder * co) n = (pow(force, 1.6) * 100) / f->race->recruitcost; if (rc->recruit_multi > 0) { double multp = (double)maxp / rc->recruit_multi; - n = _min(multp, n); - n = _max(n, 1); + n = MIN(multp, n); + n = MAX(n, 1); rsetpeasants(r, maxp - (int)(n * rc->recruit_multi)); } else { - n = _min(maxp, n); - n = _max(n, 1); + n = MIN(maxp, n); + n = MAX(n, 1); rsetpeasants(r, maxp - (int)n); } @@ -4083,13 +4084,13 @@ static int sp_bigrecruit(castorder * co) n = (int)force + lovar((force * force * 1000) / (float)f->race->recruitcost); if (f->race == get_race(RC_ORC)) { - n = _min(2 * maxp, n); - n = _max(n, 1); + n = MIN(2 * maxp, n); + n = MAX(n, 1); rsetpeasants(r, maxp - (n + 1) / 2); } else { - n = _min(maxp, n); - n = _max(n, 1); + n = MIN(maxp, n); + n = MAX(n, 1); rsetpeasants(r, maxp - n); } @@ -4178,7 +4179,7 @@ static int sp_pump(castorder * co) * Betoert eine Einheit, so das sie ihm den groe�ten Teil ihres Bargelds * und 50% ihres Besitzes schenkt. Sie behaelt jedoch immer soviel, wie * sie zum ueberleben braucht. Wirkt gegen Magieresistenz. - * _min(Stufe*1000$, u->money - maintenace) + * MIN(Stufe*1000$, u->money - maintenace) * Von jedem Item wird 50% abgerundet ermittelt und uebergeben. Dazu * kommt Itemzahl%2 mit 50% chance * @@ -4215,8 +4216,8 @@ static int sp_seduce(castorder * co) int loot; if (itm->type->rtype == rsilver) { loot = - _min(cast_level * 1000, get_money(target) - (maintenance_cost(target))); - loot = _max(loot, 0); + MIN(cast_level * 1000, get_money(target) - (maintenance_cost(target))); + loot = MAX(loot, 0); } else { loot = itm->number / 2; @@ -4224,7 +4225,7 @@ static int sp_seduce(castorder * co) loot += rng_int() % 2; } if (loot > 0) { - loot = _min(loot, (int)(force * 5)); + loot = MIN(loot, (int)(force * 5)); } } if (loot > 0) { @@ -4341,7 +4342,7 @@ static int sp_headache(castorder * co) } if (smax != NULL) { /* wirkt auf maximal 10 Personen */ - unsigned int change = _min(10, target->number) * (rng_uint() % 2 + 1) / target->number; + unsigned int change = MIN(10, target->number) * (rng_uint() % 2 + 1) / target->number; reduce_skill(target, smax, change); } set_order(&target->thisorder, NULL); @@ -4385,7 +4386,7 @@ static int sp_raisepeasants(castorder * co) "error_nopeasants", "")); return 0; } - bauern = _min(rpeasants(r), (int)(power * 250)); + bauern = MIN(rpeasants(r), (int)(power * 250)); rsetpeasants(r, rpeasants(r) - bauern); u2 = @@ -4468,7 +4469,7 @@ int sp_puttorest(castorder * co) message *seen = msg_message("puttorest", "mage", mage); message *unseen = msg_message("puttorest", "mage", NULL); - laid_to_rest = _max(laid_to_rest, dead); + laid_to_rest = MAX(laid_to_rest, dead); deathcounts(r, -laid_to_rest); @@ -4713,7 +4714,7 @@ static int sp_gbdreams(castorder * co, const char *curse_name, int effect) /* wirkt erst in der Folgerunde, soll mindestens eine Runde wirken, * also duration+2 */ - duration = (int)_max(1, power / 2); /* Stufe 1 macht sonst mist */ + duration = (int)MAX(1, power / 2); /* Stufe 1 macht sonst mist */ duration = 2 + rng_int() % duration; /* Nichts machen als ein entsprechendes Attribut in die Region legen. */ @@ -4752,7 +4753,7 @@ int sp_clonecopy(castorder * co) return 0; } - _snprintf(name, sizeof(name), (const char *)LOC(mage->faction->locale, + slprintf(name, sizeof(name), (const char *)LOC(mage->faction->locale, "clone_of"), unitname(mage)); clone = create_unit(target_region, mage->faction, 1, get_race(RC_CLONE), 0, name, @@ -4855,7 +4856,7 @@ int sp_sweetdreams(castorder * co) cmistake(mage, co->order, 40, MSG_EVENT); continue; } - men = _min(opfer, u->number); + men = MIN(opfer, u->number); opfer -= men; /* Nichts machen als ein entsprechendes Attribut an die Einheit legen. */ @@ -4969,7 +4970,7 @@ int sp_itemcloak(castorder * co) spellparameter *pa = co->par; int cast_level = co->level; double power = co->force; - int duration = (int)_max(2.0, power + 1); /* works in the report, and ageing this round would kill it if it's <=1 */ + int duration = (int)MAX(2.0, power + 1); /* works in the report, and ageing this round would kill it if it's <=1 */ /* wenn kein Ziel gefunden, Zauber abbrechen */ if (pa->param[0]->flag == TARGET_NOTFOUND) @@ -5027,7 +5028,7 @@ int sp_resist_magic_bonus(castorder * co) u = pa->param[n]->data.u; - m = _min(u->number, victims); + m = MIN(u->number, victims); victims -= m; create_curse(mage, &u->attribs, ct_find("magicresistance"), @@ -5043,8 +5044,8 @@ int sp_resist_magic_bonus(castorder * co) msg_release(msg); } - cast_level = _min(cast_level, (int)(cast_level * (victims + 4) / maxvictims)); - return _max(cast_level, 1); + cast_level = MIN(cast_level, (int)(cast_level * (victims + 4) / maxvictims)); + return MAX(cast_level, 1); } /** spell 'Astraler Weg'. @@ -5656,7 +5657,7 @@ int sp_showastral(castorder * co) free_regionlist(rl); return cast_level; - unused_arg(co); + UNUSED_ARG(co); return 0; } #endif @@ -5907,7 +5908,7 @@ int sp_permtransfer(castorder * co) return 0; } - aura = _min(get_spellpoints(mage) - spellcost(mage, sp), aura); + aura = MIN(get_spellpoints(mage) - spellcost(mage, sp), aura); change_maxspellpoints(mage, -aura); change_spellpoints(mage, -aura); @@ -6216,7 +6217,7 @@ int sp_speed2(castorder * co) spellparameter *pa = co->par; maxmen = 2 * cast_level * cast_level; - dur = _max(1, cast_level / 2); + dur = MAX(1, cast_level / 2); for (n = 0; n < pa->length; n++) { double effect; @@ -6230,7 +6231,7 @@ int sp_speed2(castorder * co) u = pa->param[n]->data.u; - men = _min(maxmen, u->number); + men = MIN(maxmen, u->number); effect = 2; create_curse(mage, &u->attribs, ct_find("speed"), force, dur, effect, men); maxmen -= men; @@ -6241,7 +6242,7 @@ int sp_speed2(castorder * co) "unit region amount", mage, mage->region, used)); /* Effektiv benoetigten cast_level (mindestens 1) zurueckgeben */ used = (int)sqrt(used / 2); - return _max(1, used); + return MAX(1, used); } /* ------------------------------------------------------------- */ @@ -6324,7 +6325,7 @@ int sp_q_antimagie(castorder * co) ADDMSG(&mage->faction->msgs, msg_message("destroy_magic_noeffect", "unit region command", mage, mage->region, co->order)); } - return _max(succ, 1); + return MAX(succ, 1); } /* ------------------------------------------------------------- */ diff --git a/src/spells/borders.c b/src/spells/borders.c index 04f7e15f4..00019e92c 100644 --- a/src/spells/borders.c +++ b/src/spells/borders.c @@ -206,7 +206,7 @@ struct region *from, struct region *to, bool routing) wall_data *fd = (wall_data *)b->data.v; if (!routing && fd->active) { int hp = dice(3, fd->force) * u->number; - hp = _min(u->hp, hp); + hp = MIN(u->hp, hp); u->hp -= hp; if (u->hp) { ADDMSG(&u->faction->msgs, msg_message("firewall_damage", @@ -227,9 +227,9 @@ static const char *b_namefirewall(const connection * b, const region * r, const faction * f, int gflags) { const char *bname; - unused_arg(f); - unused_arg(r); - unused_arg(b); + UNUSED_ARG(f); + UNUSED_ARG(r); + UNUSED_ARG(b); if (gflags & GF_ARTICLE) bname = "a_firewall"; else diff --git a/src/spells/borders.h b/src/spells/borders.h index 31823df94..b14661b9f 100644 --- a/src/spells/borders.h +++ b/src/spells/borders.h @@ -1,5 +1,8 @@ #ifndef H_KRNL_CURSES #define H_KRNL_CURSES + +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/spells/buildingcurse.c b/src/spells/buildingcurse.c index 01b0435ab..158383fd2 100644 --- a/src/spells/buildingcurse.c +++ b/src/spells/buildingcurse.c @@ -36,7 +36,7 @@ message *cinfo_building(const void *obj, objtype_t typ, const curse * c, int self) { const building *b = (const building *)obj; - unused_arg(typ); + UNUSED_ARG(typ); assert(typ == TYP_BUILDING); assert(obj); assert(c); diff --git a/src/spells/combatspells.c b/src/spells/combatspells.c index 10f1711ef..ccfc2346f 100644 --- a/src/spells/combatspells.c +++ b/src/spells/combatspells.c @@ -337,14 +337,14 @@ int sp_combatrosthauch(struct castorder * co) if (force <= 0) break; - /* da n _min(force, x), sollte force maximal auf 0 sinken */ + /* da n MIN(force, x), sollte force maximal auf 0 sinken */ assert(force >= 0); if (df->weapons) { int w; for (w = 0; df->weapons[w].type != NULL; ++w) { weapon *wp = df->weapons; - int n = _min(force, wp->used); + int n = MIN(force, wp->used); if (n) { requirement *mat = wp->type->itype->construction->materials; bool iron = false; @@ -921,7 +921,7 @@ int sp_shadowknights(struct castorder * co) region *r = b->region; unit *mage = fi->unit; attrib *a; - int force = _max(1, (int)get_force(power, 3)); + int force = MAX(1, (int)get_force(power, 3)); message *msg; u = @@ -1015,7 +1015,7 @@ int sp_chaosrow(struct castorder * co) continue; if (power <= 0.0) break; - /* force sollte wegen des _max(0,x) nicht unter 0 fallen k�nnen */ + /* force sollte wegen des MAX(0,x) nicht unter 0 fallen k�nnen */ if (is_magic_resistant(mage, df->unit, 0)) continue; @@ -1050,7 +1050,7 @@ int sp_chaosrow(struct castorder * co) } k += df->alive; } - power = _max(0, power - n); + power = MAX(0, power - n); } selist_free(fgs); @@ -1154,12 +1154,12 @@ int sp_hero(struct castorder * co) switch (sp->id) { case SPL_HERO: df_bonus = (int)(power / 5); - force = _max(1, lovar(get_force(power, 4))); + force = MAX(1, lovar(get_force(power, 4))); break; default: df_bonus = 1; - force = _max(1, (int)power); + force = MAX(1, (int)power); } allies = @@ -1208,7 +1208,7 @@ int sp_berserk(struct castorder * co) switch (sp->id) { case SPL_BERSERK: case SPL_BLOODTHIRST: - at_bonus = _max(1, level / 3); + at_bonus = MAX(1, level / 3); df_malus = 2; force = (int)get_force(power, 2); break; @@ -1264,7 +1264,7 @@ int sp_frighten(struct castorder * co) int targets = 0; message *m; - at_malus = _max(1, level - 4); + at_malus = MAX(1, level - 4); df_malus = 2; force = (int)get_force(power, 2); @@ -1545,7 +1545,7 @@ int sp_fumbleshield(struct castorder * co) case SPL_CERDDOR_FUMBLESHIELD: case SPL_TYBIED_FUMBLESHIELD: duration = 100; - effect = _max(1, 25 - level); + effect = MAX(1, 25 - level); break; default: @@ -1596,7 +1596,7 @@ int sp_reanimate(struct castorder * co) } healable = count_healable(b, fi); - healable = (int)_min(k, healable); + healable = (int)MIN(k, healable); while (healable--) { fighter *tf = select_corpse(b, fi); if (tf != NULL && tf->side->casualties > 0 @@ -1649,7 +1649,7 @@ int sp_keeploot(struct castorder * co) message_all(b, m); msg_release(m); - b->keeploot = (int)_max(25, b->keeploot + 5 * power); + b->keeploot = (int)MAX(25, b->keeploot + 5 * power); return level; } @@ -1680,10 +1680,10 @@ static int heal_fighters(selist * fgs, int *power, bool heal_monsters) ++wound; if (wound > 0 && wound < hp) { - int heal = _min(healhp, wound); + int heal = MIN(healhp, wound); assert(heal >= 0); df->person[n].hp += heal; - healhp = _max(0, healhp - heal); + healhp = MAX(0, healhp - heal); ++healed; if (healhp <= 0) break; @@ -1834,7 +1834,7 @@ int sp_undeadhero(struct castorder * co) } selist_free(fgs); - level = _min(level, undead); + level = MIN(level, undead); if (undead == 0) { msg = msg_message("summonundead_effect_0", "mage region", mage, mage->region); diff --git a/src/spells/flyingship.h b/src/spells/flyingship.h index 8b7bf0874..52013ac13 100644 --- a/src/spells/flyingship.h +++ b/src/spells/flyingship.h @@ -3,6 +3,8 @@ #ifndef FLYINGSHIP_H #define FLYINGSHIP_H +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/spells/regioncurse.c b/src/spells/regioncurse.c index 3d7593484..b10f3046f 100644 --- a/src/spells/regioncurse.c +++ b/src/spells/regioncurse.c @@ -45,8 +45,8 @@ static message *cinfo_cursed_by_the_gods(const void *obj, objtype_t typ, { region *r = (region *)obj; - unused_arg(typ); - unused_arg(self); + UNUSED_ARG(typ); + UNUSED_ARG(self); assert(typ == TYP_REGION); if (r->terrain->flags & SEA_REGION) { @@ -68,9 +68,9 @@ static struct curse_type ct_godcursezone = { static message *cinfo_dreamcurse(const void *obj, objtype_t typ, const curse * c, int self) { - unused_arg(self); - unused_arg(typ); - unused_arg(obj); + UNUSED_ARG(self); + UNUSED_ARG(typ); + UNUSED_ARG(obj); assert(typ == TYP_REGION); if (c->effect > 0) { @@ -94,9 +94,9 @@ static struct curse_type ct_gbdream = { static message *cinfo_magicstreet(const void *obj, objtype_t typ, const curse * c, int self) { - unused_arg(typ); - unused_arg(self); - unused_arg(obj); + UNUSED_ARG(typ); + UNUSED_ARG(self); + UNUSED_ARG(obj); assert(typ == TYP_REGION); /* Warnung vor Auflösung */ @@ -117,9 +117,9 @@ static struct curse_type ct_magicstreet = { static message *cinfo_antimagiczone(const void *obj, objtype_t typ, const curse * c, int self) { - unused_arg(typ); - unused_arg(self); - unused_arg(obj); + UNUSED_ARG(typ); + UNUSED_ARG(self); + UNUSED_ARG(obj); assert(typ == TYP_REGION); /* Magier spüren eine Antimagiezone */ @@ -139,7 +139,7 @@ const curse * c, int self) unit *u = NULL; unit *mage = c->magician; - unused_arg(typ); + UNUSED_ARG(typ); assert(typ == TYP_REGION); r = (region *)obj; @@ -167,8 +167,8 @@ static struct curse_type ct_antimagiczone = { static message *cinfo_farvision(const void *obj, objtype_t typ, const curse * c, int self) { - unused_arg(typ); - unused_arg(obj); + UNUSED_ARG(typ); + UNUSED_ARG(obj); assert(typ == TYP_REGION); diff --git a/src/spells/shipcurse.c b/src/spells/shipcurse.c index 59cc534d4..b6a722ad3 100644 --- a/src/spells/shipcurse.c +++ b/src/spells/shipcurse.c @@ -38,8 +38,8 @@ message *cinfo_ship(const void *obj, objtype_t typ, const curse * c, int self) { message *msg; - unused_arg(typ); - unused_arg(obj); + UNUSED_ARG(typ); + UNUSED_ARG(obj); assert(typ == TYP_SHIP); if (self != 0) { /* owner or inside */ @@ -62,7 +62,7 @@ static message *cinfo_shipnodrift(const void *obj, objtype_t typ, const curse * { ship *sh = (ship *)obj; - unused_arg(typ); + UNUSED_ARG(typ); assert(typ == TYP_SHIP); if (self != 0) { diff --git a/src/spells/unitcurse.c b/src/spells/unitcurse.c index 6e769145e..ded4a1676 100644 --- a/src/spells/unitcurse.c +++ b/src/spells/unitcurse.c @@ -46,7 +46,7 @@ static message *cinfo_auraboost(const void *obj, objtype_t typ, const curse * c, int self) { struct unit *u = (struct unit *)obj; - unused_arg(typ); + UNUSED_ARG(typ); assert(typ == TYP_UNIT); if (self != 0) { @@ -80,7 +80,7 @@ static message *cinfo_slave(const void *obj, objtype_t typ, const curse * c, int self) { unit *u; - unused_arg(typ); + UNUSED_ARG(typ); assert(typ == TYP_UNIT); u = (unit *)obj; @@ -104,7 +104,7 @@ cinfo_slave static message *cinfo_calm(const void *obj, objtype_t typ, const curse * c, int self) { - unused_arg(typ); + UNUSED_ARG(typ); assert(typ == TYP_UNIT); if (c->magician && c->magician->faction) { @@ -133,7 +133,7 @@ static struct curse_type ct_calmmonster = { static message *cinfo_speed(const void *obj, objtype_t typ, const curse * c, int self) { - unused_arg(typ); + UNUSED_ARG(typ); assert(typ == TYP_UNIT); if (self != 0) { @@ -156,7 +156,7 @@ static struct curse_type ct_speed = { */ message *cinfo_unit(const void *obj, objtype_t typ, const curse * c, int self) { - unused_arg(typ); + UNUSED_ARG(typ); assert(typ == TYP_UNIT); assert(obj); @@ -181,7 +181,7 @@ static struct curse_type ct_orcish = { static message *cinfo_kaelteschutz(const void *obj, objtype_t typ, const curse * c, int self) { - unused_arg(typ); + UNUSED_ARG(typ); assert(typ == TYP_UNIT); if (self != 0) { @@ -233,7 +233,7 @@ static message *cinfo_sparkle(const void *obj, objtype_t typ, const curse * c, }; int m, begin = 0, end = 0; unit *u; - unused_arg(typ); + UNUSED_ARG(typ); assert(typ == TYP_UNIT); u = (unit *)obj; @@ -324,7 +324,7 @@ write_skill(struct storage *store, const curse * c, const void *target) static message *cinfo_skillmod(const void *obj, objtype_t typ, const curse * c, int self) { - unused_arg(typ); + UNUSED_ARG(typ); if (self != 0) { unit *u = (unit *)obj; diff --git a/src/spy.c b/src/spy.c index 86476bec7..eb58f792a 100644 --- a/src/spy.c +++ b/src/spy.c @@ -146,7 +146,7 @@ int spy_cmd(unit * u, struct order *ord) * Fuer jeden Talentpunkt, den das Spionagetalent das Tarnungstalent * des Opfers uebersteigt, erhoeht sich dieses um 5%*/ spy = effskill(u, SK_SPY, 0) - effskill(target, SK_STEALTH, r); - spychance = 0.1 + _max(spy * 0.05, 0.0); + spychance = 0.1 + MAX(spy * 0.05, 0.0); if (chance(spychance)) { produceexp(u, SK_SPY, u->number); @@ -162,7 +162,7 @@ int spy_cmd(unit * u, struct order *ord) - (effskill(u, SK_STEALTH, 0) + effskill(u, SK_SPY, 0) / 2); if (invisible(u, target) >= u->number) { - observe = _min(observe, 0); + observe = MIN(observe, 0); } /* Anschliessend wird - unabhaengig vom Erfolg - gewuerfelt, ob der @@ -352,7 +352,7 @@ static int top_skill(region * r, faction * f, ship * sh, skill_t sk) for (u = r->units; u; u = u->next) { if (u->ship == sh && u->faction == f) { int s = effskill(u, sk, 0); - value = _max(s, value); + value = MAX(s, value); } } return value; diff --git a/src/sqlite.c b/src/sqlite.c index 6acaf4116..9379faa4f 100644 --- a/src/sqlite.c +++ b/src/sqlite.c @@ -94,9 +94,9 @@ read_factions(sqlite3 * db, int game_id) { text = (const char *)sqlite3_column_text(stmt, 1); if (text) dbf->no = atoi36(text); text = (const char *)sqlite3_column_text(stmt, 2); - if (text) dbf->name = _strdup(text); + if (text) dbf->name = strdup(text); text = (const char *)sqlite3_column_text(stmt, 3); - if (text) dbf->email = _strdup(text); + if (text) dbf->email = strdup(text); selist_push(&result, dbf); res = sqlite3_step(stmt); } diff --git a/src/study.c b/src/study.c index 58cd068f2..b69b4359f 100644 --- a/src/study.c +++ b/src/study.c @@ -201,7 +201,7 @@ teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk, * steigen. * * n ist die Anzahl zusaetzlich gelernter Tage. n darf max. die Differenz - * von schon gelernten Tagen zum _max(30 Tage pro Mann) betragen. */ + * von schon gelernten Tagen zum MAX(30 Tage pro Mann) betragen. */ if (magic_lowskill(student)) { cmistake(teacher, teacher->thisorder, 292, MSG_EVENT); @@ -215,7 +215,7 @@ teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk, n -= teach->value; } - n = _min(n, nteaching); + n = MIN(n, nteaching); if (n != 0) { if (teach == NULL) { @@ -267,7 +267,7 @@ teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk, * die Talentaenderung (enno). */ - nteaching = _max(0, nteaching - student->number * 30); + nteaching = MAX(0, nteaching - student->number * 30); } return n; @@ -303,7 +303,7 @@ int teach_cmd(unit * u, struct order *ord) teaching = u->number * 30 * TEACHNUMBER; if ((i = get_effect(u, oldpotiontype[P_FOOL])) > 0) { /* Trank "Dumpfbackenbrot" */ - i = _min(i, u->number * TEACHNUMBER); + i = MIN(i, u->number * TEACHNUMBER); /* Trank wirkt pro Schueler, nicht pro Lehrer */ teaching -= i * 30; change_effect(u, oldpotiontype[P_FOOL], -i); @@ -604,7 +604,7 @@ int study_cmd(unit * u, order * ord) } /* Akademie: */ if (active_building(u, bt_find("academy"))) { - studycost = _max(50, studycost * 2); + studycost = MAX(50, studycost * 2); } if (sk == SK_MAGIC) { @@ -691,11 +691,11 @@ int study_cmd(unit * u, order * ord) if (studycost) { int cost = studycost * u->number; money = get_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, cost); - money = _min(money, cost); + money = MIN(money, cost); } if (money < studycost * u->number) { studycost = p; /* Ohne Univertreurung */ - money = _min(money, studycost); + money = MIN(money, studycost); if (p > 0 && money < studycost * u->number) { cmistake(u, ord, 65, MSG_EVENT); multi = money / (double)(studycost * u->number); @@ -715,12 +715,12 @@ int study_cmd(unit * u, order * ord) } if (get_effect(u, oldpotiontype[P_WISE])) { - l = _min(u->number, get_effect(u, oldpotiontype[P_WISE])); + l = MIN(u->number, get_effect(u, oldpotiontype[P_WISE])); teach->value += l * 10; change_effect(u, oldpotiontype[P_WISE], -l); } if (get_effect(u, oldpotiontype[P_FOOL])) { - l = _min(u->number, get_effect(u, oldpotiontype[P_FOOL])); + l = MIN(u->number, get_effect(u, oldpotiontype[P_FOOL])); teach->value -= l * 30; change_effect(u, oldpotiontype[P_FOOL], -l); } diff --git a/src/summary.c b/src/summary.c index 8a3ee3c41..32416a263 100644 --- a/src/summary.c +++ b/src/summary.c @@ -97,8 +97,8 @@ int update_nmrs(void) if (timeout>0) { if (nmr < 0 || nmr > timeout) { log_error("faction %s has %d NMR", itoa36(f->no), nmr); - nmr = _max(0, nmr); - nmr = _min(nmr, timeout); + nmr = MAX(0, nmr); + nmr = MIN(nmr, timeout); } if (nmr > 0) { log_debug("faction %s has %d NMR", itoa36(f->no), nmr); @@ -164,7 +164,7 @@ static char *gamedate2(const struct locale *lang) static void writeturn(void) { - char zText[MAX_PATH]; + char zText[4096]; FILE *f; join_path(basepath(), "datum", zText, sizeof(zText)); @@ -190,7 +190,7 @@ void report_summary(summary * s, summary * o, bool full) FILE *F = NULL; int i, newplayers = 0; faction *f; - char zText[MAX_PATH]; + char zText[4096]; int timeout = NMRTimeout(); if (full) { diff --git a/src/test_eressea.c b/src/test_eressea.c index 6d2dead3f..02d52c5ed 100644 --- a/src/test_eressea.c +++ b/src/test_eressea.c @@ -33,7 +33,7 @@ static void add_suite(CuSuite *(*csuite)(void), const char *name, int argc, char } if (s) { s->next = suites; - s->name = _strdup(name); + s->name = strdup(name); s->csuite = csuite(); suites = s; } diff --git a/src/travelthru.test.c b/src/travelthru.test.c index be87743d2..09d807674 100644 --- a/src/travelthru.test.c +++ b/src/travelthru.test.c @@ -15,7 +15,7 @@ struct attrib; static void count_travelers(region *r, unit *u, void *cbdata) { int *n = (int *)cbdata; - unused_arg(r); + UNUSED_ARG(r); *n += u->number; } diff --git a/src/triggers/changefaction.c b/src/triggers/changefaction.c index 37d993f4a..3de537c7b 100644 --- a/src/triggers/changefaction.c +++ b/src/triggers/changefaction.c @@ -70,7 +70,7 @@ static int changefaction_handle(trigger * t, void *data) else { log_error("could not perform changefaction::handle()\n"); } - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/triggers/changerace.c b/src/triggers/changerace.c index f38b7f3d5..a9f282698 100644 --- a/src/triggers/changerace.c +++ b/src/triggers/changerace.c @@ -74,7 +74,7 @@ static int changerace_handle(trigger * t, void *data) else { log_error("could not perform changerace::handle()\n"); } - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/triggers/clonedied.c b/src/triggers/clonedied.c index 642b50ab0..f3d1fc00b 100644 --- a/src/triggers/clonedied.c +++ b/src/triggers/clonedied.c @@ -58,7 +58,7 @@ static int clonedied_handle(trigger * t, void *data) } else log_error("could not perform clonedied::handle()\n"); - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/triggers/createcurse.c b/src/triggers/createcurse.c index 040a4e7b7..3eb0891ca 100644 --- a/src/triggers/createcurse.c +++ b/src/triggers/createcurse.c @@ -76,7 +76,7 @@ static int createcurse_handle(trigger * t, void *data) else { log_error("could not perform createcurse::handle()\n"); } - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/triggers/createunit.c b/src/triggers/createunit.c index 5952c88bc..41573d86b 100644 --- a/src/triggers/createunit.c +++ b/src/triggers/createunit.c @@ -74,7 +74,7 @@ static int createunit_handle(trigger * t, void *data) else { log_error("could not perform createunit::handle()\n"); } - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/triggers/gate.c b/src/triggers/gate.c index e681efc04..c70163a14 100644 --- a/src/triggers/gate.c +++ b/src/triggers/gate.c @@ -57,7 +57,7 @@ static int gate_handle(trigger * t, void *data) log_error("could not perform gate::handle()\n"); return -1; } - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/triggers/giveitem.c b/src/triggers/giveitem.c index 6b0e8f8c7..9bc2c56e1 100644 --- a/src/triggers/giveitem.c +++ b/src/triggers/giveitem.c @@ -70,7 +70,7 @@ static int giveitem_handle(trigger * t, void *data) else { log_error("could not perform giveitem::handle()\n"); } - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/triggers/killunit.c b/src/triggers/killunit.c index 22ad27896..3e6c9defe 100644 --- a/src/triggers/killunit.c +++ b/src/triggers/killunit.c @@ -48,7 +48,7 @@ static int killunit_handle(trigger * t, void *data) /* we can't remove_unit() here, because that's what's calling us. */ set_number(u, 0); } - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/triggers/shock.c b/src/triggers/shock.c index 7c54676e0..31424e979 100644 --- a/src/triggers/shock.c +++ b/src/triggers/shock.c @@ -60,8 +60,8 @@ static void do_shock(unit * u, const char *reason) if (u->number > 0) { /* HP - Verlust */ int hp = (unit_max_hp(u) * u->number) / 10; - hp = _min(u->hp, hp); - u->hp = _max(1, hp); + hp = MIN(u->hp, hp); + u->hp = MAX(1, hp); } /* Aura - Verlust */ @@ -102,7 +102,7 @@ static int shock_handle(trigger * t, void *data) if (u && u->number) { do_shock(u, "trigger"); } - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/triggers/timeout.c b/src/triggers/timeout.c index 10e4d08be..43bb061c8 100644 --- a/src/triggers/timeout.c +++ b/src/triggers/timeout.c @@ -61,7 +61,7 @@ static int timeout_handle(trigger * t, void *data) handle_triggers(&td->triggers, NULL); return -1; } - unused_arg(data); + UNUSED_ARG(data); return 0; } diff --git a/src/triggers/unitmessage.c b/src/triggers/unitmessage.c index 0c1e80124..7ba97d9bc 100644 --- a/src/triggers/unitmessage.c +++ b/src/triggers/unitmessage.c @@ -71,7 +71,7 @@ static int unitmessage_handle(trigger * t, void *data) td->level); } } - unused_arg(data); + UNUSED_ARG(data); return 0; } @@ -92,7 +92,7 @@ static int unitmessage_read(trigger * t, gamedata *data) int result = read_reference(&td->target, data, read_unit_reference, resolve_unit); READ_TOK(data->store, zText, sizeof(zText)); - td->string = _strdup(zText); + td->string = strdup(zText); READ_INT(data->store, &td->type); READ_INT(data->store, &td->level); @@ -117,7 +117,7 @@ trigger *trigger_unitmessage(unit * target, const char *string, int type, trigger *t = t_new(&tt_unitmessage); unitmessage_data *td = (unitmessage_data *)t->data.v; td->target = target; - td->string = _strdup(string); + td->string = strdup(string); td->type = type; td->level = level; return t; diff --git a/src/upkeep.c b/src/upkeep.c index 1cf41011f..94cbc341d 100644 --- a/src/upkeep.c +++ b/src/upkeep.c @@ -47,7 +47,7 @@ static void help_feed(unit * donor, unit * u, int *need_p) { int need = *need_p; int give = get_money(donor) - lifestyle(donor); - give = _min(need, give); + give = MIN(need, give); if (give > 0) { change_money(donor, -give); @@ -161,7 +161,7 @@ void get_food(region * r) * food from the peasants - should not be used with WORK */ if (owner != NULL && (get_alliance(owner, u->faction) & HELP_MONEY)) { int rm = rmoney(r); - int use = _min(rm, need); + int use = MIN(rm, need); rsetmoney(r, rm - use); need -= use; } @@ -174,7 +174,7 @@ void get_food(region * r) for (v = r->units; need && v; v = v->next) { if (v->faction == u->faction && help_money(v)) { int give = get_money(v) - lifestyle(v); - give = _min(need, give); + give = MIN(need, give); if (give > 0) { change_money(v, -give); change_money(u, give); @@ -191,7 +191,7 @@ void get_food(region * r) int need = lifestyle(u); faction *f = u->faction; - need -= _max(0, get_money(u)); + need -= MAX(0, get_money(u)); if (need > 0) { unit *v; @@ -247,7 +247,7 @@ void get_food(region * r) unit *donor = u; while (donor != NULL && hungry > 0) { int blut = get_effect(donor, pt_blood); - blut = _min(blut, hungry); + blut = MIN(blut, hungry); if (blut) { change_effect(donor, pt_blood, -blut); hungry -= blut; @@ -295,7 +295,7 @@ void get_food(region * r) /* 3. Von den überlebenden das Geld abziehen: */ for (u = r->units; u; u = u->next) { - int need = _min(get_money(u), lifestyle(u)); + int need = MIN(get_money(u), lifestyle(u)); change_money(u, -need); } } diff --git a/src/util/attrib.c b/src/util/attrib.c index 4bdf35bfa..a99a70ba3 100644 --- a/src/util/attrib.c +++ b/src/util/attrib.c @@ -124,7 +124,7 @@ int a_readstring(attrib * a, void *owner, struct gamedata *data) len += DISPLAYSIZE - 1; } else { - result = _strdup(buf); + result = strdup(buf); } } while (e == ENOMEM); a->data.v = result; diff --git a/src/util/attrib.h b/src/util/attrib.h index d93ce1240..45dc9b942 100644 --- a/src/util/attrib.h +++ b/src/util/attrib.h @@ -19,6 +19,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #ifndef ATTRIB_H #define ATTRIB_H +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/util/attrib.test.c b/src/util/attrib.test.c index 7fa2ef82c..b44afeec2 100644 --- a/src/util/attrib.test.c +++ b/src/util/attrib.test.c @@ -119,7 +119,7 @@ static void test_attrib_rwstring(CuTest *tc) { attrib a = { 0 }; test_setup(); - a.data.v = _strdup("Hello World"); + a.data.v = strdup("Hello World"); mstream_init(&data.strm); gamedata_init(&data, &store, RELEASE_VERSION); a_writestring(&a, NULL, &store); diff --git a/src/util/crmessage.c b/src/util/crmessage.c index 98afe0f05..47bb6bf7d 100644 --- a/src/util/crmessage.c +++ b/src/util/crmessage.c @@ -145,21 +145,21 @@ int cr_render(const message * msg, char *buffer, const void *userdata) int cr_string(variant var, char *buffer, const void *userdata) { sprintf(buffer, "\"%s\"", (const char *)var.v); - unused_arg(userdata); + UNUSED_ARG(userdata); return 0; } int cr_int(variant var, char *buffer, const void *userdata) { sprintf(buffer, "%d", var.i); - unused_arg(userdata); + UNUSED_ARG(userdata); return 0; } int cr_ignore(variant var, char *buffer, const void *userdata) { - unused_arg(var); - unused_arg(buffer); - unused_arg(userdata); + UNUSED_ARG(var); + UNUSED_ARG(buffer); + UNUSED_ARG(userdata); return -1; } diff --git a/src/util/event.c b/src/util/event.c index cdf178aec..78a6d6fbc 100644 --- a/src/util/event.c +++ b/src/util/event.c @@ -153,7 +153,7 @@ static int read_handler(attrib * a, void *owner, gamedata *data) handler_info *hi = (handler_info *)a->data.v; READ_TOK(store, zText, sizeof(zText)); - hi->event = _strdup(zText); + hi->event = strdup(zText); read_triggers(data, &hi->triggers); if (hi->triggers != NULL) { return AT_READ_OK; @@ -200,7 +200,7 @@ void add_trigger(struct attrib **ap, const char *eventname, struct trigger *t) if (a == NULL || a->type != &at_eventhandler) { a = a_add(ap, a_new(&at_eventhandler)); td = (handler_info *)a->data.v; - td->event = _strdup(eventname); + td->event = strdup(eventname); } tp = &td->triggers; while (*tp) diff --git a/src/util/goodies.c b/src/util/goodies.c index 2444d0f47..c478bcf83 100644 --- a/src/util/goodies.c +++ b/src/util/goodies.c @@ -113,7 +113,7 @@ int set_email(char **pemail, const char *newmail) free(*pemail); *pemail = 0; if (newmail) { - *pemail = _strdup(newmail); + *pemail = strdup(newmail); } return 0; } diff --git a/src/util/language.c b/src/util/language.c index cb91d7419..efd5cd5f7 100644 --- a/src/util/language.c +++ b/src/util/language.c @@ -86,7 +86,7 @@ locale *get_or_create_locale(const char *name) *lp = l = (locale *)calloc(sizeof(locale), 1); assert_alloc(l); l->hashkey = hkey; - l->name = _strdup(name); + l->name = strdup(name); l->index = nextlocaleindex++; assert(nextlocaleindex <= MAXLOCALES); if (default_locale == NULL) default_locale = l; @@ -209,15 +209,15 @@ void locale_setstring(locale * lang, const char *key, const char *value) find->nexthash = lang->strings[id]; lang->strings[id] = find; find->hashkey = hkey; - find->key = _strdup(key); - find->str = _strdup(value); + find->key = strdup(key); + find->str = strdup(value); } else { if (strcmp(find->str, value) != 0) { log_warning("multiple translations for key %s\n", key); } free(find->str); - find->str = _strdup(value); + find->str = strdup(value); } } diff --git a/src/util/language.h b/src/util/language.h index a90398cc0..36bc58378 100644 --- a/src/util/language.h +++ b/src/util/language.h @@ -19,7 +19,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #ifndef MY_LOCALE_H #define MY_LOCALE_H -#include +#include #ifdef __cplusplus extern "C" { diff --git a/src/util/lists.c b/src/util/lists.c index d61327fa0..be3deeffd 100644 --- a/src/util/lists.c +++ b/src/util/lists.c @@ -127,7 +127,7 @@ void addstrlist(strlist ** SP, const char *s) { strlist *slist = malloc(sizeof(strlist)); slist->next = NULL; - slist->s = _strdup(s); + slist->s = strdup(s); addlist(SP, slist); } diff --git a/src/util/log.test.c b/src/util/log.test.c index 55616c026..1558ee3e3 100644 --- a/src/util/log.test.c +++ b/src/util/log.test.c @@ -9,9 +9,9 @@ void log_string(void *data, int level, const char *module, const char *format, va_list args) { char *str = (char *)data; const char *arg = va_arg(args, const char *); - unused_arg(format); - unused_arg(module); - unused_arg(level); + UNUSED_ARG(format); + UNUSED_ARG(module); + UNUSED_ARG(level); strcpy(str, arg); } diff --git a/src/util/message.c b/src/util/message.c index 23f81e095..c5285835e 100644 --- a/src/util/message.c +++ b/src/util/message.c @@ -73,7 +73,7 @@ message_type *mt_new(const char *name, const char *args[]) while (args[nparameters]) ++nparameters; } mtype->key = 0; - mtype->name = _strdup(name); + mtype->name = strdup(name); mtype->nparameters = nparameters; if (nparameters > 0) { mtype->pnames = (char **)malloc(sizeof(char *) * nparameters); diff --git a/src/util/nrmessage.c b/src/util/nrmessage.c index e3b0bcc0b..8156b9784 100644 --- a/src/util/nrmessage.c +++ b/src/util/nrmessage.c @@ -91,7 +91,7 @@ const nrsection *section_add(const char *name) } if (!*mcp) { nrsection *mc = calloc(sizeof(nrsection), 1); - mc->name = _strdup(name); + mc->name = strdup(name); *mcp = mc; } return *mcp; @@ -130,14 +130,14 @@ const char *string, int level, const char *section) nrt->section = NULL; nrtypes[hash] = nrt; assert(string && *string); - nrt->string = _strdup(string); + nrt->string = strdup(string); *c = '\0'; for (i = 0; i != mtype->nparameters; ++i) { if (i != 0) *c++ = ' '; c += strlcpy(c, mtype->pnames[i], sizeof(zNames)-(c-zNames)); } - nrt->vars = _strdup(zNames); + nrt->vars = strdup(zNames); } } diff --git a/src/util/translation.c b/src/util/translation.c index 829a1fe05..b0933d322 100644 --- a/src/util/translation.c +++ b/src/util/translation.c @@ -414,7 +414,7 @@ static void eval_lt(opstack ** stack, const void *userdata) int b = opop_i(stack); int rval = (b < a) ? 1 : 0; opush_i(stack, rval); - unused_arg(userdata); + UNUSED_ARG(userdata); } static void eval_eq(opstack ** stack, const void *userdata) @@ -423,7 +423,7 @@ static void eval_eq(opstack ** stack, const void *userdata) int b = opop_i(stack); int rval = (a == b) ? 1 : 0; opush_i(stack, rval); - unused_arg(userdata); + UNUSED_ARG(userdata); } static void eval_add(opstack ** stack, const void *userdata) @@ -431,14 +431,14 @@ static void eval_add(opstack ** stack, const void *userdata) int a = opop_i(stack); int b = opop_i(stack); opush_i(stack, a + b); - unused_arg(userdata); + UNUSED_ARG(userdata); } static void eval_isnull(opstack ** stack, const void *userdata) { /* (int, int) -> int */ void *a = opop_v(stack); opush_i(stack, (a == NULL) ? 1 : 0); - unused_arg(userdata); + UNUSED_ARG(userdata); } static void eval_if(opstack ** stack, const void *userdata) @@ -447,14 +447,14 @@ static void eval_if(opstack ** stack, const void *userdata) void *b = opop_v(stack); int cond = opop_i(stack); opush_v(stack, cond ? b : a); - unused_arg(userdata); + UNUSED_ARG(userdata); } static void eval_strlen(opstack ** stack, const void *userdata) { /* string -> int */ const char *c = (const char *)opop_v(stack); opush_i(stack, c ? (int)strlen(c) : 0); - unused_arg(userdata); + UNUSED_ARG(userdata); } #include "base36.h" diff --git a/src/vortex.c b/src/vortex.c index 725460ce2..7b6206d03 100644 --- a/src/vortex.c +++ b/src/vortex.c @@ -70,7 +70,7 @@ static void a_freedirection(attrib * a) static int a_agedirection(attrib * a, void *owner) { spec_direction *d = (spec_direction *)(a->data.v); - unused_arg(owner); + (void)owner; --d->duration; return (d->duration > 0) ? AT_AGE_KEEP : AT_AGE_REMOVE; } @@ -81,14 +81,14 @@ static int a_readdirection(attrib * a, void *owner, struct gamedata *data) spec_direction *d = (spec_direction *)(a->data.v); char lbuf[32]; - unused_arg(owner); + (void)owner; READ_INT(store, &d->x); READ_INT(store, &d->y); READ_INT(store, &d->duration); READ_TOK(store, lbuf, sizeof(lbuf)); - d->desc = _strdup(lbuf); + d->desc = strdup(lbuf); READ_TOK(store, lbuf, sizeof(lbuf)); - d->keyword = _strdup(lbuf); + d->keyword = strdup(lbuf); d->active = true; return AT_READ_OK; } @@ -98,7 +98,7 @@ a_writedirection(const attrib * a, const void *owner, struct storage *store) { spec_direction *d = (spec_direction *)(a->data.v); - unused_arg(owner); + (void)owner; WRITE_INT(store, d->x); WRITE_INT(store, d->y); WRITE_INT(store, d->duration); @@ -143,8 +143,8 @@ attrib *create_special_direction(region * r, region * rt, int duration, d->x = rt->x; d->y = rt->y; d->duration = duration; - d->desc = _strdup(desc); - d->keyword = _strdup(keyword); + d->desc = strdup(desc); + d->keyword = strdup(keyword); return a; } diff --git a/src/vortex.h b/src/vortex.h index af41b6111..993f5cdab 100644 --- a/src/vortex.h +++ b/src/vortex.h @@ -1,5 +1,10 @@ +#pragma once + #ifndef H_VORTEX #define H_VORTEX + +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/wormhole.c b/src/wormhole.c index dd105b302..462f4e637 100644 --- a/src/wormhole.c +++ b/src/wormhole.c @@ -63,7 +63,7 @@ static int wormhole_age(struct attrib *a, void *owner) region *r = entry->region; unit *u = r->units; - unused_arg(owner); + UNUSED_ARG(owner); for (; u != NULL && maxtransport != 0; u = u->next) { if (u->building == entry) { message *m = NULL; From 5ddd511aa8701242a4c940e1bf60e545d12783a5 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 10 Jan 2017 18:05:48 +0100 Subject: [PATCH 33/84] continue fixing compilation (gcc/clang) --- src/bind_faction.c | 1 + src/kernel/alliance.h | 3 +++ src/kernel/order.h | 1 + src/keyword.h | 2 ++ src/platform.h | 3 +++ src/util/filereader.c | 15 ++++++++------- src/util/parser.c | 8 ++++---- src/util/parser.h | 1 + src/util/password.h | 1 + src/util/rand.h | 4 ++++ src/util/translation.c | 1 + 11 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/bind_faction.c b/src/bind_faction.c index 109814717..f5c393de6 100644 --- a/src/bind_faction.c +++ b/src/bind_faction.c @@ -34,6 +34,7 @@ without prior permission by the authors of Eressea. #include #include +#include typedef struct helpmode { const char *name; diff --git a/src/kernel/alliance.h b/src/kernel/alliance.h index fac2dfd38..8e112e8c9 100644 --- a/src/kernel/alliance.h +++ b/src/kernel/alliance.h @@ -18,6 +18,9 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #ifndef H_KRNL_ALLIANCE #define H_KRNL_ALLIANCE + +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/kernel/order.h b/src/kernel/order.h index 69cf1ea33..7f4b00a5e 100644 --- a/src/kernel/order.h +++ b/src/kernel/order.h @@ -15,6 +15,7 @@ #include "keyword.h" #include +#include #ifdef __cplusplus extern "C" { diff --git a/src/keyword.h b/src/keyword.h index e60d0731f..1d8f04bb2 100644 --- a/src/keyword.h +++ b/src/keyword.h @@ -2,6 +2,8 @@ #define H_KEYWORD_H #include "kernel/types.h" +#include + #ifdef __cplusplus extern "C" { diff --git a/src/platform.h b/src/platform.h index 2f114cec5..7f82f46a8 100644 --- a/src/platform.h +++ b/src/platform.h @@ -3,6 +3,8 @@ #ifndef UNILIB_H #define UNILIB_H +#define _POSIX_C_SOURCE 200809L + #ifndef MAX_PATH # define MAX_PATH 4096 #endif @@ -12,4 +14,5 @@ #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#define TOLUA_CAST (char*) #endif diff --git a/src/util/filereader.c b/src/util/filereader.c index 3223ca2ab..d36d3ca71 100644 --- a/src/util/filereader.c +++ b/src/util/filereader.c @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -30,7 +31,7 @@ static int eatwhite(const char *ptr, size_t * total_size) ret = unicode_utf8_to_ucs4(&ucs, ptr, &size); if (ret != 0) break; - if (!iswxspace((wint_t)ucs)) + if (!iswspace((wint_t)ucs)) break; *total_size += size; ptr += size; @@ -52,7 +53,7 @@ static const char *getbuf_latin1(FILE * F) if (bp == NULL) return NULL; - while (*bp && isxspace(*(unsigned char *)bp)) + while (*bp && isspace(*(unsigned char *)bp)) ++bp; /* eatwhite */ comment = (bool)(comment && cont); @@ -113,15 +114,15 @@ static const char *getbuf_latin1(FILE * F) if (iscntrl(c)) { if (!comment && cp < fbuf + MAXLINE) { - *cp++ = isxspace(c) ? ' ' : '?'; + *cp++ = isspace(c) ? ' ' : '?'; } ++bp; continue; } - else if (isxspace(c)) { + else if (isspace(c)) { if (!quote) { ++bp; - while (*bp && isxspace(*(unsigned char *)bp)) + while (*bp && isspace(*(unsigned char *)bp)) ++bp; /* eatwhite */ if (!comment && *bp && *bp != COMMENT_CHAR && cp < fbuf + MAXLINE) *(cp++) = ' '; @@ -136,7 +137,7 @@ static const char *getbuf_latin1(FILE * F) } else if (c == CONTINUE_CHAR) { const char *end = ++bp; - while (*end && isxspace(*(unsigned char *)end)) + while (*end && isspace(*(unsigned char *)end)) ++end; /* eatwhite */ if (*end == '\0') { bp = end; @@ -269,7 +270,7 @@ static const char *getbuf_utf8(FILE * F) break; } - if (iswxspace((wint_t)ucs)) { + if (iswspace((wint_t)ucs)) { if (!quote) { bp += size; ret = eatwhite(bp, &size); diff --git a/src/util/parser.c b/src/util/parser.c index 0fbde6769..bbdb5ac7e 100644 --- a/src/util/parser.c +++ b/src/util/parser.c @@ -32,7 +32,7 @@ static int eatwhitespace_c(const char **str_p) for (;;) { unsigned char utf8_character = (unsigned char)*str; if (~utf8_character & 0x80) { - if (!iswxspace(utf8_character)) + if (!iswspace(utf8_character)) break; ++str; } @@ -42,7 +42,7 @@ static int eatwhitespace_c(const char **str_p) log_warning("illegal character sequence in UTF8 string: %s\n", str); break; } - if (!iswxspace((wint_t)ucs)) + if (!iswspace((wint_t)ucs)) break; str += len; } @@ -106,7 +106,7 @@ void skip_token(void) log_warning("illegal character sequence in UTF8 string: %s\n", states->current_token); } } - if (iswxspace((wint_t)ucs) && quotechar == 0) { + if (iswspace((wint_t)ucs) && quotechar == 0) { return; } else { @@ -163,7 +163,7 @@ char *parse_token(const char **str, char *lbuf, size_t buflen) copy = true; escape = false; } - else if (iswxspace((wint_t)ucs)) { + else if (iswspace((wint_t)ucs)) { if (quotechar == 0) break; copy = true; diff --git a/src/util/parser.h b/src/util/parser.h index 802fc56cb..0c8306931 100644 --- a/src/util/parser.h +++ b/src/util/parser.h @@ -12,6 +12,7 @@ #define UTIL_PARSER_H #include +#include #ifdef __cplusplus extern "C" { diff --git a/src/util/password.h b/src/util/password.h index e1d49fb6d..b83d544a6 100644 --- a/src/util/password.h +++ b/src/util/password.h @@ -1,5 +1,6 @@ #pragma once +#include #define PASSWORD_PLAINTEXT 0 #define PASSWORD_DEFAULT PASSWORD_PLAINTEXT diff --git a/src/util/rand.h b/src/util/rand.h index 9fb3f2f69..e9d9062b7 100644 --- a/src/util/rand.h +++ b/src/util/rand.h @@ -1,3 +1,4 @@ +#pragma once /* Copyright (c) 1998-2015, Enno Rehling Katja Zedel + #ifdef __cplusplus extern "C" { #endif diff --git a/src/util/translation.c b/src/util/translation.c index b0933d322..c733cc272 100644 --- a/src/util/translation.c +++ b/src/util/translation.c @@ -21,6 +21,7 @@ /* libc includes */ #include #include +#include #include #include From 774fa12a5a2a59b6cf42903842bae8d38c6a7211 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 10 Jan 2017 18:07:36 +0100 Subject: [PATCH 34/84] continued work for MSVC compilation --- src/alchemy.c | 4 ++++ src/battle.c | 11 +++++++++-- src/donations.c | 1 + src/economy.c | 38 +++++++++++++++++++------------------- src/kernel/messages.h | 2 +- src/move.c | 11 +++++++++-- src/names.c | 2 +- src/platform.h | 23 +++++++++++++++++++++++ src/reports.c | 16 ++++++++-------- src/spells.c | 8 +++++++- src/spells/combatspells.c | 4 ++-- 11 files changed, 84 insertions(+), 36 deletions(-) diff --git a/src/alchemy.c b/src/alchemy.c index ddbe46b8e..81244eba1 100644 --- a/src/alchemy.c +++ b/src/alchemy.c @@ -162,6 +162,7 @@ static int potion_healing(unit * u, int amount) { static int potion_luck(unit *u, region *r, attrib_type *atype, int amount) { attrib *a = (attrib *)a_find(r->attribs, atype); + UNUSED_ARG(u); if (!a) { a = a_add(&r->attribs, a_new(atype)); } @@ -170,6 +171,7 @@ static int potion_luck(unit *u, region *r, attrib_type *atype, int amount) { } static int potion_truth(unit *u) { + UNUSED_ARG(u); // TODO: this potion does nothing! // fset(u, UFL_DISBELIEVES); return 1; @@ -304,6 +306,7 @@ static void a_writeeffect(const attrib * a, const void *owner, struct storage *store) { effect_data *edata = (effect_data *)a->data.v; + UNUSED_ARG(owner); WRITE_TOK(store, resourcename(edata->type->itype->rtype, 0)); WRITE_INT(store, edata->value); } @@ -316,6 +319,7 @@ static int a_readeffect(attrib * a, void *owner, struct gamedata *data) effect_data *edata = (effect_data *)a->data.v; char zText[32]; + UNUSED_ARG(owner); READ_TOK(store, zText, sizeof(zText)); rtype = rt_find(zText); diff --git a/src/battle.c b/src/battle.c index 550449ddd..402f61ed5 100644 --- a/src/battle.c +++ b/src/battle.c @@ -509,6 +509,9 @@ contest_new(int skilldiff, const troop dt, const armor_type * ar, const armor_type * sh) { double tohit = 0.5 + skilldiff * 0.1; + + UNUSED_ARG(sh); + UNUSED_ARG(ar); if (tohit < 0.5) tohit = 0.5; if (chance(tohit)) { @@ -839,6 +842,7 @@ int select_magicarmor(troop t) /* Sind side ds und Magier des meffect verb�ndet, dann return 1*/ bool meffect_protection(battle * b, meffect * s, side * ds) { + UNUSED_ARG(b); if (!s->magician->alive) return false; if (s->duration <= 0) @@ -853,6 +857,7 @@ bool meffect_protection(battle * b, meffect * s, side * ds) /* Sind side as und Magier des meffect verfeindet, dann return 1*/ bool meffect_blocked(battle * b, meffect * s, side * as) { + UNUSED_ARG(b); if (!s->magician->alive) return false; if (s->duration <= 0) @@ -1763,8 +1768,8 @@ void do_combatmagic(battle * b, combatmagic_t was) for (co = spellranks[rank].begin; co; co = co->next) { fighter *fig = co->magician.fig; const spell *sp = co->sp; - int level = co->level; + level = co->level; if (!sp->cast) { log_error("spell '%s' has no function.\n", sp->sname); } @@ -2040,6 +2045,7 @@ int hits(troop at, troop dt, weapon * awp) void dazzle(battle * b, troop * td) { + UNUSED_ARG(b); /* Nicht kumulativ ! */ #ifdef TODO_RUNESWORD if (td->fighter->weapon[WP_RUNESWORD].count > td->index) { @@ -2487,6 +2493,7 @@ troop select_ally(fighter * af, int minrow, int maxrow, int allytype) static int loot_quota(const unit * src, const unit * dst, const item_type * type, int n) { + UNUSED_ARG(type); if (dst && src && src->faction != dst->faction) { double divisor = config_get_flt("rules.items.loot_divisor", 1); assert(divisor <= 0 || divisor >= 1); @@ -2636,7 +2643,6 @@ static void reorder_fleeing(region * r) static void aftermath(battle * b) { region *r = b->region; - ship *sh; side *s; int dead_players = 0; bfaction *bf; @@ -2833,6 +2839,7 @@ static void aftermath(battle * b) * dieses Schiff besch�digt. Andernfalls ein Schiff, welches * evt. zuvor verlassen wurde. */ if (ships_damaged) { + ship *sh; if (du->ship) sh = du->ship; else diff --git a/src/donations.c b/src/donations.c index 4dee36444..b923df73b 100644 --- a/src/donations.c +++ b/src/donations.c @@ -1,3 +1,4 @@ +#include #include #include "donations.h" diff --git a/src/economy.c b/src/economy.c index 7edbbcb12..16b201555 100644 --- a/src/economy.c +++ b/src/economy.c @@ -1041,10 +1041,10 @@ static void allocate_resource(unit * u, const resource_type * rtype, int want) static int required(int want, double save) { - int norders = (int)(want * save); - if (norders < want * save) - ++norders; - return norders; + int req = (int)(want * save); + if (req < want * save) + ++req; + return req; } static void @@ -1058,7 +1058,7 @@ leveled_allocation(const resource_type * rtype, region * r, allocation * alist) if (rm != NULL) { do { int avail = rm->amount; - int norders = 0; + int nreq = 0; allocation *al; if (avail <= 0) { @@ -1077,7 +1077,7 @@ leveled_allocation(const resource_type * rtype, region * r, allocation * alist) if (effskill(al->unit, itype->construction->skill, 0) >= rm->level + itype->construction->minskill - 1) { if (req) { - norders += req; + nreq += req; } else { fset(al, AFL_DONE); @@ -1089,22 +1089,22 @@ leveled_allocation(const resource_type * rtype, region * r, allocation * alist) fset(al, AFL_LOWSKILL); } } - need = norders; + need = nreq; - avail = MIN(avail, norders); + avail = MIN(avail, nreq); if (need > 0) { int use = 0; for (al = alist; al; al = al->next) if (!fval(al, AFL_DONE)) { if (avail > 0) { int want = required(al->want - al->get, al->save); - int x = avail * want / norders; + int x = avail * want / nreq; /* Wenn Rest, dann würfeln, ob ich was bekomme: */ - if (rng_int() % norders < (avail * want) % norders) + if (rng_int() % nreq < (avail * want) % nreq) ++x; avail -= x; use += x; - norders -= want; + nreq -= want; need -= x; al->get = MIN(al->want, al->get + (int)(x / al->save)); } @@ -1113,7 +1113,7 @@ leveled_allocation(const resource_type * rtype, region * r, allocation * alist) assert(use <= rm->amount); rm->type->use(rm, r, use); } - assert(avail == 0 || norders == 0); + assert(avail == 0 || nreq == 0); } first = false; } while (need > 0); @@ -1124,13 +1124,13 @@ static void attrib_allocation(const resource_type * rtype, region * r, allocation * alist) { allocation *al; - int norders = 0; + int nreq = 0; attrib *a = a_find(rtype->attribs, &at_resourcelimit); resource_limit *rdata = (resource_limit *)a->data.v; int avail = rdata->value; for (al = alist; al; al = al->next) { - norders += required(al->want, al->save); + nreq += required(al->want, al->save); } if (rdata->limit) { @@ -1139,16 +1139,16 @@ attrib_allocation(const resource_type * rtype, region * r, allocation * alist) avail = 0; } - avail = MIN(avail, norders); + avail = MIN(avail, nreq); for (al = alist; al; al = al->next) { if (avail > 0) { int want = required(al->want, al->save); - int x = avail * want / norders; + int x = avail * want / nreq; /* Wenn Rest, dann würfeln, ob ich was bekomme: */ - if (rng_int() % norders < (avail * want) % norders) + if (rng_int() % nreq < (avail * want) % nreq) ++x; avail -= x; - norders -= want; + nreq -= want; al->get = MIN(al->want, (int)(x / al->save)); if (rdata->produce) { int use = required(al->get, al->save); @@ -1157,7 +1157,7 @@ attrib_allocation(const resource_type * rtype, region * r, allocation * alist) } } } - assert(avail == 0 || norders == 0); + assert(avail == 0 || nreq == 0); } typedef void(*allocate_function) (const resource_type *, struct region *, diff --git a/src/kernel/messages.h b/src/kernel/messages.h index 866eecba7..a42342153 100644 --- a/src/kernel/messages.h +++ b/src/kernel/messages.h @@ -57,7 +57,7 @@ extern "C" { struct mlist ** merge_messages(message_list *mlist, message_list *append); void split_messages(message_list *mlist, struct mlist **split); -#define ADDMSG(msgs, mcreate) { message * m = mcreate; if (m) { assert(m->refcount>=1); add_message(msgs, m); msg_release(m); } } +#define ADDMSG(msgs, mcreate) { message * mx = mcreate; if (mx) { assert(mx->refcount>=1); add_message(msgs, mx); msg_release(mx); } } void syntax_error(const struct unit *u, struct order *ord); struct message * cmistake(const struct unit *u, struct order *ord, int mno, int mtype); diff --git a/src/move.c b/src/move.c index 62300beb1..0184d22ca 100644 --- a/src/move.c +++ b/src/move.c @@ -163,6 +163,7 @@ static int shiptrail_read(attrib * a, void *owner, struct gamedata *data) int n; traveldir *t = (traveldir *)(a->data.v); + UNUSED_ARG(owner); READ_INT(store, &t->no); READ_INT(store, &n); t->dir = (direction_t)n; @@ -174,6 +175,8 @@ static void shiptrail_write(const attrib * a, const void *owner, struct storage *store) { traveldir *t = (traveldir *)(a->data.v); + + UNUSED_ARG(owner); WRITE_INT(store, t->no); WRITE_INT(store, t->dir); WRITE_INT(store, t->age); @@ -204,6 +207,8 @@ static bool entrance_allowed(const struct unit *u, const struct region *r) return true; return false; #else + UNUSED_ARG(u); + UNUSED_ARG(r); return true; #endif } @@ -466,6 +471,8 @@ static int canride(unit * u) static bool cansail(const region * r, ship * sh) { + UNUSED_ARG(r); + /* sonst ist construction:: size nicht ship_type::maxsize */ assert(!sh->type->construction || sh->type->construction->improvement == NULL); @@ -490,6 +497,8 @@ static bool cansail(const region * r, ship * sh) static double overload(const region * r, ship * sh) { + UNUSED_ARG(r); + /* sonst ist construction:: size nicht ship_type::maxsize */ assert(!sh->type->construction || sh->type->construction->improvement == NULL); @@ -1761,8 +1770,6 @@ static void sail(unit * u, order * ord, region_list ** routep, bool drifting) * befahrene Region. */ while (next_point && current_point != next_point && step < k) { - const char *token; - int error; const terrain_type *tthis = current_point->terrain; /* these values need to be updated if next_point changes (due to storms): */ const terrain_type *tnext = next_point->terrain; diff --git a/src/names.c b/src/names.c index 248084828..969e278d8 100644 --- a/src/names.c +++ b/src/names.c @@ -394,8 +394,8 @@ const char *abkz(const char *s, char *buf, size_t buflen, size_t maxchars) size_t size; int result; + UNUSED_ARG(buflen); /* Prüfen, ob Kurz genug */ - if (strlen(s) <= maxchars) { return s; } diff --git a/src/platform.h b/src/platform.h index 7f82f46a8..dca251b7e 100644 --- a/src/platform.h +++ b/src/platform.h @@ -4,6 +4,20 @@ #define UNILIB_H #define _POSIX_C_SOURCE 200809L +#ifdef _MSC_VER +#ifndef __STDC__ +#define __STDC__ 1 // equivalent to /Za +#endif +#define NO_STRDUP +#define NO_MKDIR +#define mkdir(d, a) _mkdir(d) +#define _CRT_SECURE_NO_WARNINGS +#pragma warning(disable: 4710 4820) +#pragma warning(disable: 4100) // unreferenced formal parameter +#pragma warning(disable: 4456) // declaration hides previous +#pragma warning(disable: 4457) // declaration hides function parameter +#pragma warning(disable: 4459) // declaration hides global +#endif #ifndef MAX_PATH # define MAX_PATH 4096 @@ -15,4 +29,13 @@ #define MAX(a, b) (((a) > (b)) ? (a) : (b)) #define TOLUA_CAST (char*) + +#ifdef NO_STRDUP +char * strdup(const char *s); +#endif + +#ifdef NO_MKDIR +int mkdir(const char *pathname, int mode); +#endif + #endif diff --git a/src/reports.c b/src/reports.c index a9695145b..395547734 100644 --- a/src/reports.c +++ b/src/reports.c @@ -1906,23 +1906,23 @@ static void eval_regions(struct opstack **stack, const void *userdata) const faction *report = (const faction *)userdata; int i = opop(stack).i; int end, begin = opop(stack).i; - const arg_regions *regions = (const arg_regions *)opop(stack).v; + const arg_regions *aregs = (const arg_regions *)opop(stack).v; char buf[256]; size_t size = sizeof(buf) - 1; variant var; char *bufp = buf; - if (regions == NULL) { + if (aregs == NULL) { end = begin; } else { if (i >= 0) end = begin + i; else - end = regions->nregions + i; + end = aregs->nregions + i; } for (i = begin; i < end; ++i) { - const char *rname = (const char *)regionname(regions->regions[i], report); + const char *rname = (const char *)regionname(aregs->regions[i], report); bufp = STRLCPY(bufp, rname, size); if (i + 1 < end && size > 2) { @@ -1941,7 +1941,7 @@ static void eval_trail(struct opstack **stack, const void *userdata) const faction *report = (const faction *)userdata; const struct locale *lang = report ? report->locale : default_locale; int i, end = 0, begin = 0; - const arg_regions *regions = (const arg_regions *)opop(stack).v; + const arg_regions *aregs = (const arg_regions *)opop(stack).v; char buf[512]; size_t size = sizeof(buf) - 1; variant var; @@ -1951,10 +1951,10 @@ static void eval_trail(struct opstack **stack, const void *userdata) int eold = errno; #endif - if (regions != NULL) { - end = regions->nregions; + if (aregs != NULL) { + end = aregs->nregions; for (i = begin; i < end; ++i) { - region *r = regions->regions[i]; + region *r = aregs->regions[i]; const char *trail = trailinto(r, lang); const char *rn = f_regionid_s(r, report); diff --git a/src/spells.c b/src/spells.c index 6ed38d022..0bb6df5af 100644 --- a/src/spells.c +++ b/src/spells.c @@ -398,6 +398,7 @@ static void report_effect(region * r, unit * mage, message * seen, message * unseen) { int err = report_action(r, mage, seen, ACTION_RESET | ACTION_CANSEE); + UNUSED_ARG(unseen); if (err) { report_action(r, mage, seen, ACTION_CANNOTSEE); } @@ -2895,6 +2896,8 @@ static int dc_read_compat(struct attrib *a, void *target, gamedata *data) float strength; int rx, ry; + UNUSED_ARG(a); + UNUSED_ARG(target); READ_INT(store, &duration); READ_FLT(store, &strength); READ_INT(store, &var.i); @@ -3119,8 +3122,10 @@ static bool chaosgate_valid(const connection * b) } static struct region *chaosgate_move(const connection * b, struct unit *u, -struct region *from, struct region *to, bool routing) + struct region *from, struct region *to, bool routing) { + UNUSED_ARG(from); + UNUSED_ARG(b); if (!routing) { int maxhp = u->hp / 4; if (maxhp < u->number) @@ -6438,6 +6443,7 @@ int sp_break_curse(castorder * co) /* ------------------------------------------------------------- */ int sp_becomewyrm(castorder * co) { + UNUSED_ARG(co); return 0; } diff --git a/src/spells/combatspells.c b/src/spells/combatspells.c index ccfc2346f..76fd605ff 100644 --- a/src/spells/combatspells.c +++ b/src/spells/combatspells.c @@ -826,8 +826,8 @@ int sp_shadowcall(struct castorder * co) attrib *a; int force = (int)(get_force(power, 3) / 2); unit *u; - const char *races[3] = { "shadowbat", "nightmare", "vampunicorn" }; - const race *rc = rc_find(races[rng_int() % 3]); + const char *rcnames[3] = { "shadowbat", "nightmare", "vampunicorn" }; + const race *rc = rc_find(rcnames[rng_int() % 3]); message *msg; u = create_unit(r, mage->faction, force, rc, 0, NULL, mage); From 7b25ed282df8878a4603c7c16426b6aa9d50b103 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 10 Jan 2017 18:20:47 +0100 Subject: [PATCH 35/84] more stbool.h includes, MSVC has no unlink --- src/attributes/key.h | 3 +++ src/donations.test.c | 1 + src/give.h | 3 +++ src/kernel/command.test.c | 2 ++ src/market.h | 3 +++ src/monsters.h | 3 +++ src/platform.h | 5 ++++- src/renumber.test.c | 1 + src/reports.h | 2 +- src/summary.h | 2 ++ src/util/xml.h | 2 ++ 11 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/attributes/key.h b/src/attributes/key.h index 89292db1d..d2cea1ff0 100644 --- a/src/attributes/key.h +++ b/src/attributes/key.h @@ -18,6 +18,9 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #ifndef H_ATTRIBUTE_KEY #define H_ATTRIBUTE_KEY + +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/donations.test.c b/src/donations.test.c index 068aba74a..09cd31977 100644 --- a/src/donations.test.c +++ b/src/donations.test.c @@ -1,3 +1,4 @@ +#include #include "donations.h" #include diff --git a/src/give.h b/src/give.h index 9c06e89ca..94eee729c 100644 --- a/src/give.h +++ b/src/give.h @@ -12,6 +12,9 @@ */ #ifndef H_GC_GIVE #define H_GC_GIVE + +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/kernel/command.test.c b/src/kernel/command.test.c index f38c7e443..25e75fdc3 100644 --- a/src/kernel/command.test.c +++ b/src/kernel/command.test.c @@ -10,7 +10,9 @@ without prior permission by the authors of Eressea. */ +#include #include "command.h" + #include "unit.h" #include "order.h" diff --git a/src/market.h b/src/market.h index a74c88391..74dc8db17 100644 --- a/src/market.h +++ b/src/market.h @@ -12,6 +12,9 @@ without prior permission by the authors of Eressea. */ #ifndef H_GC_MARKET #define H_GC_MARKET + +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/monsters.h b/src/monsters.h index 52e9ebf37..a5a3ccd15 100644 --- a/src/monsters.h +++ b/src/monsters.h @@ -18,6 +18,9 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #ifndef H_GC_MONSTER #define H_GC_MONSTER + +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/platform.h b/src/platform.h index dca251b7e..682bcc1c2 100644 --- a/src/platform.h +++ b/src/platform.h @@ -10,7 +10,7 @@ #endif #define NO_STRDUP #define NO_MKDIR -#define mkdir(d, a) _mkdir(d) +#define NO_UNLINK #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable: 4710 4820) #pragma warning(disable: 4100) // unreferenced formal parameter @@ -38,4 +38,7 @@ char * strdup(const char *s); int mkdir(const char *pathname, int mode); #endif +#ifdef NO_UNLINK +int unlink(const char *pathname); +#endif #endif diff --git a/src/renumber.test.c b/src/renumber.test.c index 6c3f0f17b..8f6f91a59 100644 --- a/src/renumber.test.c +++ b/src/renumber.test.c @@ -1,3 +1,4 @@ +#include #include "renumber.h" #include diff --git a/src/reports.h b/src/reports.h index d69b9a88b..625048de9 100644 --- a/src/reports.h +++ b/src/reports.h @@ -20,10 +20,10 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #ifndef H_KRNL_REPORTS #define H_KRNL_REPORTS -#include #include #include #include +#include #ifdef __cplusplus extern "C" { diff --git a/src/summary.h b/src/summary.h index ea8daeee1..b12d74009 100644 --- a/src/summary.h +++ b/src/summary.h @@ -11,6 +11,8 @@ #ifndef H_GC_SUMMARY #define H_GC_SUMMARY +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/src/util/xml.h b/src/util/xml.h index 921cd3f53..bd22e3e0a 100644 --- a/src/util/xml.h +++ b/src/util/xml.h @@ -13,6 +13,8 @@ #ifndef H_UTIL_XML #define H_UTIL_XML +#include + #ifdef __cplusplus extern "C" { #endif From d1b5daf83341e59e3dee36031560fddfc5ce2cd1 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 10 Jan 2017 18:40:01 +0100 Subject: [PATCH 36/84] compiles with gcc on rpi --- src/kernel/jsonconf.test.c | 2 +- src/kernel/save.c | 2 +- src/platform.h | 4 ---- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/kernel/jsonconf.test.c b/src/kernel/jsonconf.test.c index 76784ed56..950868046 100644 --- a/src/kernel/jsonconf.test.c +++ b/src/kernel/jsonconf.test.c @@ -448,7 +448,7 @@ static void test_configs(CuTest * tc) CuAssertPtrEquals(tc, 0, buildingtypes); json_config(json); CuAssertPtrNotNull(tc, buildingtypes); - if (unlink("test.json")!=0 && errno==ENOENT) { + if (remove("test.json")!=0 && errno==ENOENT) { errno = 0; } cJSON_Delete(json); diff --git a/src/kernel/save.c b/src/kernel/save.c index 1139b5f1f..bbbd77fd1 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -1830,7 +1830,7 @@ int writegame(const char *filename) join_path(datapath(), filename, path, sizeof(path)); #ifdef HAVE_UNISTD_H /* make sure we don't overwrite an existing file (hard links) */ - if (unlink(path)!=0) { + if (remove(path)!=0) { if (errno==ENOENT) { errno = 0; } diff --git a/src/platform.h b/src/platform.h index 682bcc1c2..21c459a74 100644 --- a/src/platform.h +++ b/src/platform.h @@ -10,7 +10,6 @@ #endif #define NO_STRDUP #define NO_MKDIR -#define NO_UNLINK #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable: 4710 4820) #pragma warning(disable: 4100) // unreferenced formal parameter @@ -38,7 +37,4 @@ char * strdup(const char *s); int mkdir(const char *pathname, int mode); #endif -#ifdef NO_UNLINK -int unlink(const char *pathname); -#endif #endif From c38cd41194e179d46e8fcfbf17bc1ef7629c1c15 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 11 Jan 2017 10:57:42 +0100 Subject: [PATCH 37/84] fix the install script, issue #623 --- s/install | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/s/install b/s/install index 18cc2393f..416d07f9a 100755 --- a/s/install +++ b/s/install @@ -10,12 +10,11 @@ done DEST=$(dirname $ROOT)/server -MACHINE=`uname -m` [ -z "$CC" ] && [ ! -z `which clang` ] && CC="clang" [ -z "$CC" ] && [ ! -z `which gcc` ] && CC="gcc" [ -z "$CC" ] && [ ! -z `which tcc` ] && CC="tcc" [ -z "$CC" ] && [ ! -z `which cc` ] && CC="cc" -BIN_DIR="build-$MACHINE-$CC-Debug" +BIN_DIR="Debug" cd $ROOT/$BIN_DIR make install From 94737375f5b11d4f0471fa3ca74643d0705fe17b Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 11 Jan 2017 14:53:35 +0100 Subject: [PATCH 38/84] issue #621: delete battledebug code --- src/battle.c | 156 ++------------------------------------------------- src/battle.h | 1 - src/main.c | 3 - 3 files changed, 6 insertions(+), 154 deletions(-) diff --git a/src/battle.c b/src/battle.c index 402f61ed5..4105cf73f 100644 --- a/src/battle.c +++ b/src/battle.c @@ -93,12 +93,6 @@ typedef enum combatmagic { DO_POSTCOMBATSPELL } combatmagic_t; -/* globals */ -bool battledebug = false; - -static int obs_count = 0; -static FILE *bdebug; - #define MINSPELLRANGE 1 #define MAXSPELLRANGE 7 @@ -1219,9 +1213,6 @@ terminate(troop dt, troop at, int type, const char *damage, bool missile) kritchance = MIN(0.9, kritchance); while (chance(kritchance)) { - if (bdebug) { - fprintf(bdebug, "%s/%d lands a critical hit\n", itoa36(au->no), at.index); - } da += dice_rand(damage); } } @@ -1302,10 +1293,6 @@ terminate(troop dt, troop at, int type, const char *damage, bool missile) } if (df->person[dt.index].hp > 0) { /* Hat �berlebt */ - if (bdebug) { - fprintf(bdebug, "Damage %d, armor %d: %d -> %d HP\n", - da, ar, df->person[dt.index].hp + rda, df->person[dt.index].hp); - } if (u_race(au) == get_race(RC_DAEMON)) { if (!(df->person[dt.index].flags & (FL_COURAGE | FL_DAZZLED))) { df->person[dt.index].flags |= FL_DAZZLED; @@ -1334,10 +1321,6 @@ terminate(troop dt, troop at, int type, const char *damage, bool missile) } ++at.fighter->kills; - if (bdebug) { - fprintf(bdebug, "Damage %d, armor %d, type %d: %d -> %d HP, tot.\n", - da, ar, type, df->person[dt.index].hp + rda, df->person[dt.index].hp); - } for (pitm = &du->items; *pitm;) { item *itm = *pitm; const item_type *itype = itm->type; @@ -1979,20 +1962,6 @@ int getreload(troop at) return at.fighter->person[at.index].reload; } -static void -debug_hit(troop at, const weapon * awp, troop dt, const weapon * dwp, -int skdiff, int dist, bool success) -{ - fprintf(bdebug, "%.4s/%d [%6s/%d] %s %.4s/%d [%6s/%d] with %d, distance %d\n", - itoa36(at.fighter->unit->no), at.index, - LOC(default_locale, awp ? resourcename(awp->type->itype->rtype, - 0) : "unarmed"), weapon_effskill(at, dt, awp, true, dist > 1), - success ? "hits" : "misses", itoa36(dt.fighter->unit->no), dt.index, - LOC(default_locale, dwp ? resourcename(dwp->type->itype->rtype, - 0) : "unarmed"), weapon_effskill(dt, at, dwp, false, dist > 1), skdiff, - dist); -} - int hits(troop at, troop dt, weapon * awp) { fighter *af = at.fighter, *df = dt.fighter; @@ -2032,14 +2001,8 @@ int hits(troop at, troop dt, weapon * awp) shield = select_armor(dt, false); } if (contest(skdiff, dt, armor, shield)) { - if (bdebug) { - debug_hit(at, awp, dt, dwp, skdiff, dist, true); - } return 1; } - if (bdebug) { - debug_hit(at, awp, dt, dwp, skdiff, dist, false); - } return 0; } @@ -2190,11 +2153,7 @@ static void attack(battle * b, troop ta, const att * a, int numattack) } } if (reload && wp && wp->type->reload && !getreload(ta)) { - int i = setreload(ta); - if (bdebug) { - fprintf(bdebug, "%s/%d reloading %d turns\n", itoa36(au->no), - ta.index, i); - } + setreload(ta); } } } @@ -2874,13 +2833,6 @@ static void aftermath(battle * b) } reorder_fleeing(r); - - if (bdebug) { - fprintf(bdebug, "The battle lasted %d turns, %s and %s.\n", - b->turn, - b->has_tactics_turn ? "had a tactic turn" : "had no tactic turn", - ships_damaged ? "was relevant" : "was not relevant."); - } } static void battle_punit(unit * u, battle * b) @@ -2894,10 +2846,6 @@ static void battle_punit(unit * u, battle * b) spunit(&S, f, u, 4, seen_battle); for (x = S; x; x = x->next) { fbattlerecord(b, f, x->s); - if (bdebug && u->faction == f) { - fputs(x->s, bdebug); - fputc('\n', bdebug); - } } if (S) freestrlist(S); @@ -3077,17 +3025,6 @@ static void print_stats(battle * b) fbattlerecord(b, f, buf); } - if (bdebug && s->faction) { - if (f_get_alliance(s->faction)) { - fprintf(bdebug, "##### %s (%s/%d)\n", s->faction->name, - itoa36(s->faction->no), - s->faction->alliance ? s->faction->alliance->id : 0); - } - else { - fprintf(bdebug, "##### %s (%s)\n", s->faction->name, - itoa36(s->faction->no)); - } - } print_fighters(b, s); } @@ -3519,28 +3456,6 @@ static int join_battle(battle * b, unit * u, bool attack, fighter ** cp) return false; } -static const char *simplename(region * r) -{ - int i; - static char name[17]; - const char *cp = rname(r, default_locale); - for (i = 0; *cp && i != 16; ++i, ++cp) { - int c = *(unsigned char *)cp; - while (c && !isalpha(c) && !isspace(c)) { - ++cp; - c = *(unsigned char *)cp; - } - if (isspace(c)) - name[i] = '_'; - else - name[i] = *cp; - if (c == 0) - break; - } - name[i] = 0; - return name; -} - battle *make_battle(region * r) { battle *b = (battle *)calloc(1, sizeof(battle)); @@ -3552,29 +3467,6 @@ battle *make_battle(region * r) for (bld = r->buildings; bld != NULL; bld = bld->next) bld->sizeleft = bld->size; - if (battledebug) { - char zText[4096]; - char zFilename[4096]; - join_path(basepath(), "battles", zText, sizeof(zText)); - if (mkdir(zText, 0777) != 0) { - log_error("could not create subdirectory for battle logs: %s", zText); - battledebug = false; - } - else { - sprintf(zFilename, "battle-%d-%s.log", obs_count++, simplename(r)); - join_path(zText, zFilename, zText, sizeof(zText)); - bdebug = fopen(zText, "w"); - if (!bdebug) - log_error("battles cannot be debugged"); - else { - const unsigned char utf8_bom[4] = { 0xef, 0xbb, 0xbf, 0 }; - fwrite(utf8_bom, 1, 3, bdebug); - fprintf(bdebug, "In %s findet ein Kampf statt:\n", rname(r, - default_locale)); - } - } - } - b->region = r; b->plane = getplane(r); /* Finde alle Parteien, die den Kampf beobachten k�nnen: */ @@ -3644,10 +3536,6 @@ static void battle_free(battle * b) { void free_battle(battle * b) { - if (bdebug) { - fclose(bdebug); - } - while (b->factions) { bfaction *bf = b->factions; b->factions = bf->next; @@ -3812,13 +3700,7 @@ static void join_allies(battle * b) } /* keine Einw�nde, also soll er mitmachen: */ if (c == NULL) { - if (join_battle(b, u, false, &c)) { - if (battledebug) { - fprintf(bdebug, "%s joins to help %s against %s.\n", - unitname(u), factionname(s->faction), factionname(se->faction)); - } - } - else if (c == NULL) { + if (!join_battle(b, u, false, &c)) { continue; } } @@ -3826,12 +3708,7 @@ static void join_allies(battle * b) /* the enemy of my friend is my enemy: */ for (se = b->sides; se != s_end; ++se) { if (se->faction != u->faction && enemy(s, se)) { - if (set_enemy(se, c->side, false) && battledebug) { - fprintf(bdebug, - "%u/%s hates %u/%s because they are enemies with %u/%s.\n", - c->side->index, sidename(c->side), se->index, sidename(se), - s->index, sidename(s)); - } + set_enemy(se, c->side, false); } } } @@ -4012,18 +3889,8 @@ static bool start_battle(region * r, battle ** bp) } b = make_battle(r); } - if (join_battle(b, u, true, &c1)) { - if (battledebug) { - fprintf(bdebug, "%s joins by attacking %s.\n", - unitname(u), unitname(u2)); - } - } - if (join_battle(b, u2, false, &c2)) { - if (battledebug) { - fprintf(bdebug, "%s joins because of an attack from %s.\n", - unitname(u2), unitname(u)); - } - } + join_battle(b, u, true, &c1); + join_battle(b, u2, false, &c2); /* Hat die attackierte Einheit keinen Noaid-Status, * wird das Flag von der Faction genommen, andere @@ -4036,11 +3903,7 @@ static bool start_battle(region * r, battle ** bp) * Pr�combataura bei kurzem Kampf. */ c1->side->bf->attacker = true; - if (set_enemy(c1->side, c2->side, true) && battledebug) { - fprintf(bdebug, "%u/%s hates %u/%s because they attacked them.\n", - c2->side->index, sidename(c2->side), - c1->side->index, sidename(c1->side)); - } + set_enemy(c1->side, c2->side, true); fighting = true; } } @@ -4159,10 +4022,6 @@ static void battle_flee(battle * b) flee(dt); } } - if (bdebug && runners > 0) { - fprintf(bdebug, "Fleeing: %d from %s\n", runners, - itoa36(fig->unit->no)); - } } } } @@ -4265,9 +4124,6 @@ void do_battle(region * r) log_debug("battle in %s (%d, %d) : ", regionname(r, 0), r->x, r->y); for (; battle_report(b) && b->turn <= max_turns; ++b->turn) { - if (bdebug) { - fprintf(bdebug, "*** Turn: %d\n", b->turn); - } battle_flee(b); battle_update(b); battle_attacks(b); diff --git a/src/battle.h b/src/battle.h index dbdc7e1cb..1b4cf2588 100644 --- a/src/battle.h +++ b/src/battle.h @@ -227,7 +227,6 @@ extern "C" { } meffect; extern const troop no_troop; - extern bool battledebug; /* BEGIN battle interface */ side * find_side(battle * b, const struct faction * f, const struct group * g, unsigned int flags, const struct faction * stealthfaction); diff --git a/src/main.c b/src/main.c index 44c1b9e2d..5e998f835 100644 --- a/src/main.c +++ b/src/main.c @@ -25,7 +25,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include "eressea.h" -#include "battle.h" #ifdef USE_CURSES #include "gmtool.h" #endif @@ -71,8 +70,6 @@ static void load_inifile(dictionary * d) lomem = iniparser_getint(d, "eressea:lomem", lomem) ? 1 : 0; verbosity = iniparser_getint(d, "eressea:verbose", 2); - battledebug = iniparser_getint(d, "eressea:debug", battledebug) ? 1 : 0; - str = iniparser_getstring(d, "eressea:locales", "de,en"); make_locales(str); From 1921fa4ec1deb4e1242c90d253025000dbb0f770 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 11 Jan 2017 14:55:03 +0100 Subject: [PATCH 39/84] issue #478: re-enable -Werror --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 39d290560..1b9cc82dc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,7 +16,7 @@ COMPILE_DEFINITIONS ERESSEA_VERSION="${ERESSEA_VERSION}") ENDIF() IF (CMAKE_COMPILER_IS_GNUCC) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=unused-but-set-variable") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wno-error=unused-but-set-variable") ENDIF() IF (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") # SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wconversion -Wno-sign-conversion") From 437d959d97b9b8222ade0bbcb5e022f691cbe0e8 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 11 Jan 2017 15:09:02 +0100 Subject: [PATCH 40/84] do not set -Werror twice --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1b9cc82dc..39d290560 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,7 +16,7 @@ COMPILE_DEFINITIONS ERESSEA_VERSION="${ERESSEA_VERSION}") ENDIF() IF (CMAKE_COMPILER_IS_GNUCC) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wno-error=unused-but-set-variable") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=unused-but-set-variable") ENDIF() IF (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") # SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wconversion -Wno-sign-conversion") From 5b78578939fdada743c1106ac5881a4afab3af11 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 14 Jan 2017 17:19:08 +0100 Subject: [PATCH 41/84] github issue #626: installing in non-standard paths --- s/cmake-init | 3 ++- s/install | 2 -- s/setup | 14 ++++++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/s/cmake-init b/s/cmake-init index ea94afb7c..84a1d9cdb 100755 --- a/s/cmake-init +++ b/s/cmake-init @@ -35,12 +35,13 @@ if [ -d $HOME/usr ]; then PREFIX_PATH=$HOME/usr:$HOME/usr/local:$PREFIX_PATH fi +DEST=$(dirname $ROOT)/server ARGS=" -DCMAKE_MODULE_PATH=$ROOT/cmake/Modules \ -DCMAKE_BUILD_TYPE=$BUILD \ -DCMAKE_LIBRARY_PATH=$LIBRARY_PATH \ -DCMAKE_INCLUDE_PATH=$INCLUDE_PATH \ -DCMAKE_PREFIX_PATH=$PREFIX_PATH \ - -DCMAKE_INSTALL_PREFIX=$HOME/eressea/server" + -DCMAKE_INSTALL_PREFIX=$DEST" git submodule update --init diff --git a/s/install b/s/install index 416d07f9a..962961063 100755 --- a/s/install +++ b/s/install @@ -8,8 +8,6 @@ while [ ! -d $ROOT/.git ]; do fi done -DEST=$(dirname $ROOT)/server - [ -z "$CC" ] && [ ! -z `which clang` ] && CC="clang" [ -z "$CC" ] && [ ! -z `which gcc` ] && CC="gcc" [ -z "$CC" ] && [ ! -z `which tcc` ] && CC="tcc" diff --git a/s/setup b/s/setup index 0839d5b8f..fc5fb9874 100755 --- a/s/setup +++ b/s/setup @@ -1,5 +1,15 @@ #!/bin/bash +ROOT=$(pwd) +while [ ! -d $ROOT/.git ]; do + ROOT=$(dirname $ROOT) + if [ "/" = "$ROOT" ]; then + echo "could not find root, are you in the git repository?" + exit + fi +done +ERESSEA=$(dirname $ROOT) + function abort() { echo $1 [ -z $2 ] && exit -1 @@ -37,7 +47,6 @@ while getopts :d:g:r:s:hfn o; do done [ $game -gt 0 ] || abort "must use a positive integer for game id" -[ -d $ERESSEA ] || abort "invalid or missing env variable ERESSEA ($ERESSEA)" [ -z $SOURCE ] && SOURCE=$ERESSEA/$src [ -d $SOURCE ] || abort "invalid source directory $SOURCE" [ -z $rules ] && rules=e$game @@ -46,7 +55,8 @@ done [ -e $TOOLS ] || TOOLS=$SOURCE/bin [ -z $INIFILE ] && INIFILE=$TOOLS/inifile [ -e $INIFILE ] || INIFILE=$TOOLS/iniparser/inifile -#[ -e $INIFILE ] || abort "tool is not installed: $INIFILE" + +[ -e $SOURCE/conf/$rules/config.xml ] || abort "cannot find conf/$rules/config.xml" cd $ERESSEA if [ -d $dir ] ; then From d7dd281a6a0e9a99f09c93d087a7bfac3413d893 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 20 Jan 2017 08:32:31 +0100 Subject: [PATCH 42/84] move orders-accept configuration to eressea.ini install lunit, too --- CMakeLists.txt | 1 + conf/eressea.ini | 3 ++ process/orders-accept | 111 ++++++++++++++++++++++-------------------- 3 files changed, 61 insertions(+), 54 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c08e16c20..8fd15f201 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,4 +23,5 @@ add_subdirectory (src eressea) install(DIRECTORY res conf DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.xml") install(DIRECTORY res conf DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.json") install(DIRECTORY scripts DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.lua") +install(DIRECTORY lunit DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.lua") install(DIRECTORY share DESTINATION ${CMAKE_INSTALL_PREFIX}) diff --git a/conf/eressea.ini b/conf/eressea.ini index e14d0af50..c2f7bbb7f 100644 --- a/conf/eressea.ini +++ b/conf/eressea.ini @@ -1,3 +1,6 @@ +[game] +email = Eressea Server +name = Eressea [eressea] base = . diff --git a/process/orders-accept b/process/orders-accept index 151f0b196..49bdc3cb0 100755 --- a/process/orders-accept +++ b/process/orders-accept @@ -3,22 +3,50 @@ from email.Utils import parseaddr from email.Parser import Parser -from os import mkdir, rename, stat, utime, unlink, symlink -from os.path import exists +import os +import os.path +import ConfigParser from re import compile, IGNORECASE from stat import ST_MTIME from string import upper, split, replace import logging -from sys import argv, stdin, exit +import sys +from sys import stdin from time import ctime, sleep, time from socket import gethostname from rfc822 import parsedate_tz, mktime_tz -LOG_FILENAME='/home/eressea/log/orders.log' +if 'ERESSEA' in os.environ: + dir = os.environ['ERESSEA'] +elif 'HOME' in os.environ: + dir = os.path.join(os.environ['HOME'], '/eressea') +else: # WTF? No HOME? + dir = "/home/eressea/eressea" +if not os.path.isdir(dir): + print "please set the ERESSEA environment variable to the install path" + sys.exit(1) +rootdir = dir + +try: + game = int(sys.argv[1]) +except: + game = sys.argv[1] +gamedir = os.path.join(rootdir, "game-%d" % (game, )) +frommail = 'Eressea Server ' +gamename = 'Eressea' +inifile = os.path.join(gamedir, 'eressea.ini') +if not os.path.exists(inifile): + print "no such file: " . inifile +else: + config = ConfigParser.ConfigParser() + config.read(inifile) + if config.has_option('game', 'email'): + frommail = config.get('game', 'email') + if config.has_option('game', 'name'): + gamename = config.get('game', 'name') + config = None prefix = 'turn-' hostname = gethostname() -# base directory for all your games: -rootdir = "/home/eressea" orderbase = "orders.dir" sendmail = True # maximum number of reports per sender: @@ -28,36 +56,21 @@ writeheaders = True # reject all html email? rejecthtml = True -games = [ - { - "from" : "Eressea Server ", - "prefix" : "Eressea" - }, - { - "from" : "Eressea Server ", - "prefix": "E3" - }, - { - "from" : "Eressea Server ", - "prefix": "E4" - }, -] - def unlock_file(filename): try: - unlink(filename+".lock") + os.unlink(filename+".lock") except: print "could not unlock %s.lock, file not found" % filename def lock_file(filename): i = 0 wait = 1 - if not exists(filename): + if not os.path.exists(filename): file=open(filename, "w") file.close() while True: try: - symlink(filename, filename+".lock") + os.symlink(filename, filename+".lock") return except: i = i+1 @@ -74,17 +87,17 @@ messages = { "software and re-send the orders.", "multipart-de" : - "FEHLER: Die von dir eingeschickte Mail enthält keinen " \ + "FEHLER: Die von dir eingeschickte Mail enth�lt keinen " \ "Text. Evtl. hast Du den Zug als HTML oder als anderweitig " \ - "ungültig formatierte Mail ingeschickt. Wir können ihn " \ - "deshalb nicht berücksichtigen. Schicke den Zug nochmals " \ + "ung�ltig formatierte Mail ingeschickt. Wir k�nnen ihn " \ + "deshalb nicht ber�cksichtigen. Schicke den Zug nochmals " \ "als reinen Text ohne Formatierungen ein.", "maildate-de": - "Es erreichte uns bereits ein Zug mit einem späteren " \ + "Es erreichte uns bereits ein Zug mit einem sp�teren " \ "Absendedatum (%s > %s). Entweder ist deine " \ "Systemzeit verstellt, oder ein Zug hat einen anderen Zug von " \ - "dir auf dem Transportweg überholt. Entscheidend für die " \ + "dir auf dem Transportweg �berholt. Entscheidend f�r die " \ "Auswertungsreihenfolge ist das Absendedatum, d.h. der Date:-Header " \ "deiner Mail.", @@ -173,8 +186,8 @@ def available_file(dirname, basename): ver = 0 maxdate = 0 filename = "%s/%s,%s,%d" % (dirname, basename, hostname, ver) - while exists(filename): - maxdate = max(stat(filename)[ST_MTIME], maxdate) + while os.path.exists(filename): + maxdate = max(os.stat(filename)[ST_MTIME], maxdate) ver = ver + 1 filename = "%s/%s,%s,%d" % (dirname, basename, hostname, ver) if ver >= maxfiles: @@ -234,7 +247,7 @@ def copy_orders(message, filename, sender): from os.path import split dirname, basename = split(filename) dirname = dirname + '/headers' - if not exists(dirname): mkdir(dirname) + if not os.path.exists(dirname): os.mkdir(dirname) outfile = open(dirname + '/' + basename, "w") for name, value in message.items(): outfile.write(name + ": " + value + "\n") @@ -265,16 +278,14 @@ def copy_orders(message, filename, sender): # create a file, containing: # game=0 locale=de file=/path/to/filename email=rcpt@domain.to def accept(game, locale, stream, extend=None): - global rootdir, orderbase + global rootdir, orderbase, gamedir, gamename, frommail if extend is not None: orderbase = orderbase + ".pre-" + extend - gamename = games[game-2]["prefix"] - gamedir = rootdir+"/eressea/game-%d" % (game, ) - savedir = gamedir+"/"+orderbase + savedir = os.path.join(gamedir, orderbase) # check if it's one of the pre-sent orders. # create the save-directories if they don't exist - if not exists(gamedir): mkdir(gamedir) - if not exists(savedir): mkdir(savedir) + if not os.path.exists(gamedir): os.mkdir(gamedir) + if not os.path.exists(savedir): os.mkdir(savedir) # parse message message = Parser().parse(stream) sender = get_sender(message) @@ -298,7 +309,7 @@ def accept(game, locale, stream, extend=None): maildate = message.get("Date") if maildate != None: turndate = mktime_tz(parsedate_tz(maildate)) - utime(filename, (turndate, turndate)) + os.utime(filename, (turndate, turndate)) logger.debug("mail date is '%s' (%d)" % (maildate, turndate)) if turndate < maxdate: logger.warning("inconsistent message date " + sender) @@ -313,9 +324,9 @@ def accept(game, locale, stream, extend=None): warning = " (" + messages["error-" + locale] + ")" msg = msg + formatpar(messages["multipart-" + locale], 76, 2) + "\n" logger.warning("rejected - no text/plain in orders from " + sender) - unlink(filename) + os.unlink(filename) savedir = savedir + "/rejected" - if not exists(savedir): mkdir(savedir) + if not os.path.exists(savedir): os.mkdir(savedir) lock_file(gamedir + "/orders.queue") maxdate, filename = available_file(savedir, prefix + sender) store_message(message, filename) @@ -323,7 +334,6 @@ def accept(game, locale, stream, extend=None): fail = True if sendmail and warning is not None: - frommail = games[key]["from"] subject = gamename + " " + messages["subject-"+locale] + warning mail = "Subject: %s\nFrom: %s\nTo: %s\n\n" % (subject, frommail, sender) + msg from smtplib import SMTP @@ -347,22 +357,15 @@ def accept(game, locale, stream, extend=None): return 0 # the main body of the script: +LOG_FILENAME=os.path.join(rootdir, 'log/orders.log') logging.basicConfig(level=logging.DEBUG, filename=LOG_FILENAME) logger = logging delay=None # TODO: parse the turn delay -try: - game = int(argv[1]) -except: - game = argv[1] - if game[:3]=='e3a': - game = 3 - elif game[:7]=='eressea': - game = 2 -locale = argv[2] +locale = sys.argv[2] infile = stdin -if len(argv)>3: - infile = open(argv[3], "r") +if len(sys.argv)>3: + infile = open(sys.argv[3], "r") retval = accept(game, locale, infile, delay) if infile!=stdin: infile.close() -exit(retval) +sys.exit(retval) From 6d5749308dd3479077685588fe273a4b5ba01127 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 20 Jan 2017 18:44:58 +0100 Subject: [PATCH 43/84] rename [eressea] section to [game] --- conf/eressea.ini | 5 +- process/orders-accept | 49 ++++++++++--------- process/orders-process | 107 +++++++++++++++++++++++++---------------- s/setup | 4 +- src/main.c | 14 +++--- 5 files changed, 102 insertions(+), 77 deletions(-) diff --git a/conf/eressea.ini b/conf/eressea.ini index c2f7bbb7f..b6db180ca 100644 --- a/conf/eressea.ini +++ b/conf/eressea.ini @@ -1,8 +1,7 @@ [game] -email = Eressea Server +email = eressea-server@kn-bremen.de +sender = Eressea Server name = Eressea - -[eressea] base = . report = reports verbose = 0 diff --git a/process/orders-accept b/process/orders-accept index 49bdc3cb0..78af0a056 100755 --- a/process/orders-accept +++ b/process/orders-accept @@ -27,13 +27,12 @@ if not os.path.isdir(dir): sys.exit(1) rootdir = dir -try: - game = int(sys.argv[1]) -except: - game = sys.argv[1] +game = int(sys.argv[1]) gamedir = os.path.join(rootdir, "game-%d" % (game, )) -frommail = 'Eressea Server ' +frommail = 'eressea-server@kn-bremen.de' gamename = 'Eressea' +sender = '%s Server <%s>' % (gamename, frommail) + inifile = os.path.join(gamedir, 'eressea.ini') if not os.path.exists(inifile): print "no such file: " . inifile @@ -44,6 +43,10 @@ else: frommail = config.get('game', 'email') if config.has_option('game', 'name'): gamename = config.get('game', 'name') + if config.has_option('game', 'sender'): + sender = config.get('game', 'sender') + else: + sender = "%s Server <%s>" % (gamename, frommail) config = None prefix = 'turn-' hostname = gethostname() @@ -278,7 +281,7 @@ def copy_orders(message, filename, sender): # create a file, containing: # game=0 locale=de file=/path/to/filename email=rcpt@domain.to def accept(game, locale, stream, extend=None): - global rootdir, orderbase, gamedir, gamename, frommail + global rootdir, orderbase, gamedir, gamename, sender if extend is not None: orderbase = orderbase + ".pre-" + extend savedir = os.path.join(gamedir, orderbase) @@ -288,21 +291,21 @@ def accept(game, locale, stream, extend=None): if not os.path.exists(savedir): os.mkdir(savedir) # parse message message = Parser().parse(stream) - sender = get_sender(message) - logger = logging.getLogger(sender) + email = get_sender(message) + logger = logging.getLogger(email) # write syslog - if sender is None or valid_email(sender)==0: - logger.warning("invalid email address: " + str(sender)) + if email is None or valid_email(email)==0: + logger.warning("invalid email address: " + str(email)) return -1 - logger.info("received orders from " + sender) + logger.info("received orders from " + email) # get an available filename lock_file(gamedir + "/orders.queue") - maxdate, filename = available_file(savedir, prefix + sender) + maxdate, filename = available_file(savedir, prefix + email) if filename is None: - logger.warning("more than " + str(maxfiles) + " orders from " + sender) + logger.warning("more than " + str(maxfiles) + " orders from " + email) return -1 # copy the orders to the file - text_ok = copy_orders(message, filename, sender) + text_ok = copy_orders(message, filename, email) unlock_file(gamedir + "/orders.queue") warning, msg, fail = None, "", False @@ -312,47 +315,47 @@ def accept(game, locale, stream, extend=None): os.utime(filename, (turndate, turndate)) logger.debug("mail date is '%s' (%d)" % (maildate, turndate)) if turndate < maxdate: - logger.warning("inconsistent message date " + sender) + logger.warning("inconsistent message date " + email) warning = " (" + messages["warning-" + locale] + ")" msg = msg + formatpar(messages["maildate-" + locale] % (ctime(maxdate),ctime(turndate)), 76, 2) + "\n" else: - logger.warning("missing message date " + sender) + logger.warning("missing message date " + email) warning = " (" + messages["warning-" + locale] + ")" msg = msg + formatpar(messages["nodate-" + locale], 76, 2) + "\n" if not text_ok: warning = " (" + messages["error-" + locale] + ")" msg = msg + formatpar(messages["multipart-" + locale], 76, 2) + "\n" - logger.warning("rejected - no text/plain in orders from " + sender) + logger.warning("rejected - no text/plain in orders from " + email) os.unlink(filename) savedir = savedir + "/rejected" if not os.path.exists(savedir): os.mkdir(savedir) lock_file(gamedir + "/orders.queue") - maxdate, filename = available_file(savedir, prefix + sender) + maxdate, filename = available_file(savedir, prefix + email) store_message(message, filename) unlock_file(gamedir + "/orders.queue") fail = True if sendmail and warning is not None: subject = gamename + " " + messages["subject-"+locale] + warning - mail = "Subject: %s\nFrom: %s\nTo: %s\n\n" % (subject, frommail, sender) + msg + mail = "Subject: %s\nFrom: %s\nTo: %s\n\n" % (subject, sender, email) + msg from smtplib import SMTP server = SMTP("localhost") - server.sendmail(frommail, sender, mail) + server.sendmail(sender, email, mail) server.close() if not sendmail: - print text_ok, fail, sender + print text_ok, fail, email print filename if not fail: lock_file(gamedir + "/orders.queue") queue = open(gamedir + "/orders.queue", "a") - queue.write("email=%s file=%s locale=%s game=%s\n" % (sender, filename, locale, game)) + queue.write("email=%s file=%s locale=%s game=%s\n" % (email, filename, locale, game)) queue.close() unlock_file(gamedir + "/orders.queue") - logger.info("done - accepted orders from " + sender) + logger.info("done - accepted orders from " + email) return 0 diff --git a/process/orders-process b/process/orders-process index 753385e2e..b33cc05bf 100755 --- a/process/orders-process +++ b/process/orders-process @@ -2,7 +2,9 @@ # -*- coding: iso-8859-1 -*- from os import unlink, symlink, rename, popen, tmpfile -from os.path import exists +import os +import os.path +import ConfigParser from re import compile, IGNORECASE from string import split, join, upper, strip from sys import argv, exit @@ -14,9 +16,8 @@ from epasswd import EPasswd def pwd_get_email(faction, pwd, pwdfile=None): return None -def splitfilename(filename): - from os.path import split - return split(filename) +def split_filename(filename): + return os.path.split(filename) def unlock_file(filename): try: @@ -28,7 +29,7 @@ def unlock_file(filename): def lock_file(filename): i = 0 wait = 1 - if not exists(filename): + if not os.path.exists(filename): file=open(filename, "w") file.close() while True: @@ -62,17 +63,47 @@ messages = { "error-en": "Error", } +game = int(sys.argv[1]) +echeck_cmd = "/home/eressea/echeck/echeck.sh" +maxlines = 25 # base directory for all your games: -rootdir = "/home/eressea/eressea" -frommail = "Eressea Server " -orderbase = "orders.dir" -sendmail = True -maxlines = 25 -echeck_cmd = "/home/eressea/echeck/echeck.sh" +install_dir = "/home/eressea/eressea" +if 'ERESSEA' in os.environ: + install_dir = os.environ['ERESSEA'] +elif 'HOME' in os.environ: + install_dir = os.path.join(os.environ['HOME'], '/eressea') +if not os.path.isdir(install_dir): + print "please set the ERESSEA environment variable to the install path" + sys.exit(1) + +game_dir = os.path.join(install_dir, "game-%d" % (game, )) +frommail = 'eressea-server@kn-bremen.de' +gamename = 'Eressea' +sender = '%s Server <%s>' % (gamename, frommail) + +inifile = os.path.join(gamedir, 'eressea.ini') +if not os.path.exists(inifile): + print "no such file: " . inifile +else: + config = ConfigParser.ConfigParser() + config.read(inifile) + if config.has_option('game', 'email'): + frommail = config.get('game', 'email') + if config.has_option('game', 'name'): + gamename = config.get('game', 'name') + if config.has_option('game', 'sender'): + sender = config.get('game', 'sender') + else: + sender = "%s Server <%s>" % (gamename, frommail) + config = None + +queue_file = os.path.join(game_dir, "orders.queue") +if not os.path.exists(queue_file): + exit(0) # regular expression that finds the start of a faction -fact_re = compile("^\s*(eressea|vinyambar|partei|faction)\s+([a-zA-Z0-9]+)\s+\"?([^\"]*)\"?", IGNORECASE) +fact_re = compile("^\s*(eressea|partei|faction)\s+([a-zA-Z0-9]+)\s+\"?([^\"]*)\"?", IGNORECASE) def check_pwd(filename, email, pw_data): results = [] @@ -98,7 +129,7 @@ def check_pwd(filename, email, pw_data): return results def echeck(filename, locale, rules): - dirname, filename = splitfilename(filename) + dirname, filename = split_filename(filename) stream = popen("%s %s %s %s %s" % (echeck_cmd, locale, filename, dirname, rules), 'r') lines = stream.readlines() if len(lines)==0: @@ -111,14 +142,6 @@ def echeck(filename, locale, rules): stream.close() return mail -## the main body of the script -game = int(argv[1]) - -basedir = rootdir + "/game-%d" % (game, ) -queuename = basedir + "/orders.queue" -if not exists(queuename): - exit(0) - # parse the queue file - #print "connecting to SMTP..." from smtplib import SMTP @@ -127,16 +150,17 @@ try: except: print "could not connect to SMTP server" exit(0) + #print "reading password file..." -pw_data = EPasswd(basedir + "/passwd") +pw_data = EPasswd(os.path.join(game_dir,"passwd")) #print "reading orders.queue..." # move the queue file to a save space while locking it: try: - lock_file(queuename) + lock_file(queue_file) except: exit(0) -queuefile = open(queuename, "r") +queuefile = open(queue_file, "r") lines = queuefile.readlines() queuefile.close() @@ -154,9 +178,9 @@ tmpfile.close() openlog("orders") -unlink(queuename) +unlink(queue_file) try: - unlock_file(queuename) + unlock_file(queue_file) except: pass @@ -170,15 +194,15 @@ for line in lines: email = dict["email"] locale = dict["locale"] game = int(dict["game"]) - file = dict["file"] + infile = dict["file"] gamename='[E%d]' % game rules='e%d' % game warning = "" failed = True - results = check_pwd(file, email, pw_data) - logfile = open(basedir+"/zug.log", "a") - dirname, filename = splitfilename(file) - msg = messages["validate-"+locale] + " " + filename + "\n\n" + results = check_pwd(infile, email, pw_data) + logfile = open(os.path.join(game_dir, "zug.log"), "a") + dirname, filename = split_filename(infile) + msg = messages["validate-"+locale] + " " + infilename + "\n\n" for faction, game_email, success, pwd in results: msg = msg + messages["faction-"+locale] + " " + faction + "\n" if success: failed = False @@ -189,25 +213,24 @@ for line in lines: if failed: warning = " (" + messages["warning-" + locale] + ")" - syslog("failed - no valid password in " + file) + syslog("failed - no valid password in " + infile) else: - result = echeck(file, locale, rules) - if email=='eressea': - print result - continue - elif result is None: + result = None + if os.path.exists(echeck_cmd): + result = echeck(infile, locale, rules) + if result is None: # echeck did not finish - msg = msg + "Echeck was killed. Your turn was accepted, but could not be verified.\n" + msg = msg + "Echeck is broken. Your turn was accepted, but could not be verified.\n" warning = " (" + messages["warning-" + locale] + ")" - syslog("process - echeck got killed, " + file) + syslog("process - echeck broken, " + infile) else: msg = msg + result - syslog("process - checked orders in " + file) + syslog("process - checked orders in " + infile) subject = gamename + " " + messages["subject-" + locale] + warning - msg = "Subject: %s\nFrom: %s\nTo: %s\nContent-Type: text/plain; charset=utf-8\n\n" % (subject, frommail, email) + msg + msg = "Subject: %s\nFrom: %s\nTo: %s\nContent-Type: text/plain; charset=utf-8\n\n" % (subject, sender, email) + msg try: - server.sendmail(frommail, email, msg) + server.sendmail(sender, email, msg) except: syslog("failed - cannot send to " + email) diff --git a/s/setup b/s/setup index fc5fb9874..d8ffa74ad 100755 --- a/s/setup +++ b/s/setup @@ -94,8 +94,8 @@ touch eressea.ini } ini_start -ini_sec eressea -ini_add eressea locales de,en +ini_sec game +ini_add game locales de,en ini_sec lua ini_add lua install $SOURCE ini_add lua paths $SOURCE/scripts:$SOURCE/lunit diff --git a/src/main.c b/src/main.c index 5e998f835..2d81041ec 100644 --- a/src/main.c +++ b/src/main.c @@ -54,23 +54,23 @@ static void load_inifile(dictionary * d) assert(d); - str = iniparser_getstring(d, "eressea:base", basedir); + str = iniparser_getstring(d, "game:base", basedir); if (str != basedir) { set_basepath(str); } - str = iniparser_getstring(d, "eressea:report", reportdir); + str = iniparser_getstring(d, "game:report", reportdir); if (str != reportdir) { set_reportpath(str); } - str = iniparser_getstring(d, "eressea:data", datadir); + str = iniparser_getstring(d, "game:data", datadir); if (str != datadir) { set_datapath(str); } - lomem = iniparser_getint(d, "eressea:lomem", lomem) ? 1 : 0; + lomem = iniparser_getint(d, "game:lomem", lomem) ? 1 : 0; - verbosity = iniparser_getint(d, "eressea:verbose", 2); - str = iniparser_getstring(d, "eressea:locales", "de,en"); + verbosity = iniparser_getint(d, "game:verbose", 2); + str = iniparser_getstring(d, "game:locales", "de,en"); make_locales(str); if (global.inifile) iniparser_freedict(global.inifile); @@ -84,7 +84,7 @@ static void parse_config(const char *filename) load_inifile(d); log_debug("reading from configuration file %s\n", filename); - memdebug = iniparser_getint(d, "eressea:memcheck", memdebug); + memdebug = iniparser_getint(d, "game:memcheck", memdebug); #ifdef USE_CURSES /* only one value in the [editor] section */ force_color = iniparser_getint(d, "editor:color", force_color); From e6f676c30c2a93924169d07ad9a4e1815c1b2895 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 20 Jan 2017 20:05:33 +0100 Subject: [PATCH 44/84] we do not need eressea.conf --- process/send-bz2-report | 1 - process/sendreport.sh | 1 - process/sendreports.sh | 1 - 3 files changed, 3 deletions(-) diff --git a/process/send-bz2-report b/process/send-bz2-report index e9962d539..983564bea 100755 --- a/process/send-bz2-report +++ b/process/send-bz2-report @@ -8,7 +8,6 @@ if [ ! -f reports.txt ]; then exit -2 fi source $HOME/bin/functions.sh -source $ERESSEA/etc/eressea.conf TEMPLATE=report-mail.txt if [ "$1" == "-Lde" ] diff --git a/process/sendreport.sh b/process/sendreport.sh index 1b9af1d35..93d52f0b4 100755 --- a/process/sendreport.sh +++ b/process/sendreport.sh @@ -8,7 +8,6 @@ if [ -z $ERESSEA ]; then exit -2 fi source $HOME/bin/functions.sh -source $HOME/etc/eressea.conf GAME=$1 EMAIL=$2 diff --git a/process/sendreports.sh b/process/sendreports.sh index fc24200b6..c2bfa741c 100755 --- a/process/sendreports.sh +++ b/process/sendreports.sh @@ -8,7 +8,6 @@ if [ -z $ERESSEA ]; then exit -2 fi source $HOME/bin/functions.sh -source $ERESSEA/etc/eressea.conf if [ ! -z $1 ]; then GAME=$ERESSEA/game-$1 From b51349df6bc1afe7667dd33062abc15263b59464 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 20 Jan 2017 22:39:38 +0100 Subject: [PATCH 45/84] change error message categories. also removing some unused messages and code that supports them. https://bugs.eressea.de/view.php?id=2270 --- res/core/messages.xml | 117 +++++++--------------------------------- src/kernel/messages.c | 18 ------- src/kernel/types.h | 2 - src/util/unicode.test.c | 17 ++++++ 4 files changed, 36 insertions(+), 118 deletions(-) diff --git a/res/core/messages.xml b/res/core/messages.xml index 260f76c70..41569d9f3 100644 --- a/res/core/messages.xml +++ b/res/core/messages.xml @@ -1804,7 +1804,7 @@ "$unit($unit) in $region($region): '$order($command)' - Der Magier erschafft ein Traumgebäude." "$unit($unit) in $region($region): '$order($command)' - The magician creates an illusionary building." - + @@ -2402,7 +2402,7 @@ "Eine Botschaft von $unit.dative($unit) in $region($region): 'Ups! Quack, Quack!'" "A message from $unit($unit) in $region($region): 'Oops! Croak, Croak!'" - + @@ -2412,7 +2412,7 @@ "$unit($unit) in $region($region): '$order($command)' - $unit($mage) kann Zauber, die durch $unit($unit) gewirkt werden, nicht zusätzlich in die Ferne richten." "$unit($unit) in $region($region): '$order($command)' - $unit($mage) cannot direct spells that are channeled through $unit($unit) into distant regions." - + @@ -2552,13 +2552,6 @@ "$unit($unit) in $region($region) regeneriert $int($amount) Aura." "$unit($unit) regenerates $int($amount) aura in $region($region)." - - - - - "$string" - "$string" - @@ -2596,13 +2589,6 @@ "$unit($teacher) lehrt $unit($student) $skill($skill)." "$unit($teacher) teaches $unit($student) $skill($skill)." - - - - - "$string" - "$string" - @@ -2834,13 +2820,6 @@ "$unit($unit) baut für $int($size) an $ship($ship) weiter." "$unit($unit) builds $int($size) more on $ship($ship)." - - - - - "$string" - "$string" - @@ -2878,15 +2857,7 @@ "$unit($unit) $if($eq($mode,1),"reitet", "wandert") von $region($start) nach $region($end).$if($isnull($regions),""," Dabei wurde $trail($regions) durchquert.")" "$unit($unit) $if($eq($mode,1),"rides", "walks") from $region($start) to $region($end)$if($isnull($regions),""," by way of $trail($regions)")." - - - - - - "$unit($unit) entdeckt dass im $direction($direction) $terrain($region) ist." - "$unit($unit) discovered that $terrain($region) lies in the $direction($direction)." - - + @@ -2895,7 +2866,7 @@ "$unit($unit) entdeckt, dass $region($region) $localize($terrain) ist." "$unit($unit) discovered that $region($region) is $localize($terrain)." - + @@ -2903,7 +2874,7 @@ "$unit($unit) ist in dieser Runde gelandet und kann nicht weiter ins Landesinnere nach $region($region) vorstossen." "$unit($unit) has just landed and cannot continue moving to $region($region)." - + @@ -2911,7 +2882,7 @@ "Die Mannschaft der $ship($ship) kann in letzter Sekunde verhindern, dass das Schiff in $region($region) auf Land aufläuft." "At the very last moment, the crew of the $ship($ship) saved the ship from running aground in $region($region)." - + @@ -2919,7 +2890,7 @@ "Die $ship($ship) konnte in $region($region) nicht einreisen, die Küste ist zu gefährlich für das Schiff." "The $ship($ship) could not berth in $region($region). The coast is too dangerous for the vessel." - + @@ -2927,7 +2898,7 @@ "Die Mannschaft der $ship($ship) weigert sich, nach $direction($direction) zu reisen." "The crew of the $ship($ship) refuses to travel to the $direction($direction)." - + @@ -2935,7 +2906,7 @@ "Die Mannschaft der $ship($ship) weigert sich, nach $region($region) zu reisen." "The crew of the $ship($ship) refuses to travel to $region($region)." - + @@ -2943,7 +2914,7 @@ "$unit($unit) weigert sich, nach $direction($direction) zu reisen." "$unit($unit) refuses to travel to the $direction($direction)." - + @@ -2951,7 +2922,7 @@ "$unit($unit) weigert sich, nach $region($region) zu reisen." "$unit($unit) refuses to travel to $region($region)." - + @@ -2959,7 +2930,7 @@ "Die $ship($ship) konnte $region($region) nicht verlassen." "The $ship($ship) could not leave $region($region)." - + @@ -2968,35 +2939,7 @@ "$unit($unit) wurde in $region($region) von $unit.dative($guard) aufgehalten." "$unit($unit) was kept in $region($region) by $unit($guard)." - - - - - "Wir haben den Krieg mit $faction($faction) beendet." - "We declared peace with $faction($faction)." - - - - - - "$faction($faction) hat den Krieg mit uns beendet." - "$faction($faction) has declared peace with us." - - - - - - "Wir haben $faction($faction) den Krieg erklärt." - "We declared war on $faction($faction)." - - - - - - "$faction($faction) hat uns den Krieg erklärt." - "$faction($faction) has declared war on us." - - + @@ -3005,7 +2948,7 @@ "$unit($unit) konnte nicht von $region($region) nach $region($target) reisen, da der Besitzer der Region es verhinderte." "$unit($unit) could not travel from $region($region) to $region($target) because the owner denied entrance." - + @@ -3029,7 +2972,7 @@ "$unit($follower) konnte $unit($unit) nicht folgen." "$unit($follower) could not follow $unit($unit)." - + @@ -3037,7 +2980,7 @@ "$unit($unit) entdeckt, dass es keinen Weg nach $direction($direction) gibt." "$unit($unit) discovers that there is no route going $direction($direction)." - + @@ -3046,13 +2989,6 @@ "$unit($unit) konnte von $region($region) nicht nach $direction($direction) ausreisen, der Nebel war zu dicht." "$unit($unit) could not travel $direction($direction) from $region($region), the fog was too dense." - - - - - "$string" - "$string" - @@ -6945,13 +6881,6 @@ "$unit($unit) in $region($region): '$order($command)' - Man benötigt mindestens $int($minskill) $skill($skill), um $resource($product,0) zu produzieren." "$unit($unit) in $region($region): '$order($command)' - You need at least $int($minskill) $skill($skill), to produce $resource($product,0)." - - - - - "$string" - "$string" - @@ -6959,13 +6888,6 @@ "$string" "$string" - - - - - "$string" - "$string" - @@ -6997,7 +6919,6 @@ "$unit($target) erhält $int($amount) $resource($resource,$amount) von $unit($unit)." "$unit($target) receives $int($amount) $resource($resource,$amount) from $unit($unit)." - @@ -7200,7 +7121,7 @@ "$unit($unit) in $region($region): '$order($command)' - No pyramids may be build in this region. The closest region to build a pyramid in is between $int($mindist) and $int($maxdist) regions away." - + @@ -7621,7 +7542,7 @@ "Heer $int($index)($abbrev): $int($dead) Tote, $int($fled) Geflohene, $int($survived) Ãœberlebende." "Army $int($index)($abbrev): $int($dead) dead, $int($fled) fled, $int($survived) survivors." - + diff --git a/src/kernel/messages.c b/src/kernel/messages.c index 89278624f..cb859df96 100644 --- a/src/kernel/messages.c +++ b/src/kernel/messages.c @@ -214,29 +214,11 @@ caddmessage(region * r, faction * f, const char *s, msg_t mtype, int level) UNUSED_ARG(level); switch (mtype) { - case MSG_INCOME: - assert(f); - m = add_message(&f->msgs, msg_message("msg_economy", "string", s)); - break; case MSG_BATTLE: assert(0 || !"battle messages must not use addmessage"); break; - case MSG_MOVE: - assert(f); - m = add_message(&f->msgs, msg_message("msg_movement", "string", s)); - break; - case MSG_COMMERCE: - assert(f); - m = add_message(&f->msgs, msg_message("msg_economy", "string", s)); - break; - case MSG_PRODUCE: - assert(f); - m = add_message(&f->msgs, msg_message("msg_production", "string", s)); - break; case MSG_MAGIC: - case MSG_COMMENT: case MSG_MESSAGE: - case MSG_ORCVERMEHRUNG: case MSG_EVENT: /* Botschaften an REGION oder einzelne PARTEI */ m = msg_message("msg_event", "string", s); diff --git a/src/kernel/types.h b/src/kernel/types.h index 2b63f7e07..b9faefce7 100644 --- a/src/kernel/types.h +++ b/src/kernel/types.h @@ -146,9 +146,7 @@ typedef enum { /* Fehler und Meldungen im Report */ MSG_INCOME, MSG_COMMERCE, MSG_PRODUCE, - MSG_ORCVERMEHRUNG, MSG_MESSAGE, - MSG_COMMENT, MSG_MAGIC, MAX_MSG } msg_t; diff --git a/src/util/unicode.test.c b/src/util/unicode.test.c index ef07c944c..a6268186e 100644 --- a/src/util/unicode.test.c +++ b/src/util/unicode.test.c @@ -100,9 +100,26 @@ static void test_unicode_utf8_to_ucs(CuTest *tc) { CuAssertIntEquals(tc, 1, sz); } +static void test_unicode_bug2262(CuTest *tc) { + char name[7]; + ucs4_t ucs; + size_t sz; + + strcpy(name, "utende"); + CuAssertIntEquals(tc, 0, unicode_utf8_to_ucs4(&ucs, name, &sz)); + CuAssertIntEquals(tc, 1, sz); + CuAssertIntEquals(tc, 'u', ucs); + CuAssertIntEquals(tc, 0, unicode_utf8_trim(name)); + + name[0] = -4; // latin1: ü should fail to decode + CuAssertIntEquals(tc, EILSEQ, unicode_utf8_to_ucs4(&ucs, name, &sz)); + CuAssertIntEquals(tc, EILSEQ, unicode_utf8_trim(name)); +} + CuSuite *get_unicode_suite(void) { CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_unicode_bug2262); SUITE_ADD_TEST(suite, test_unicode_tolower); SUITE_ADD_TEST(suite, test_unicode_trim); SUITE_ADD_TEST(suite, test_unicode_utf8_to_other); From e511bf76b57e164252d8a83fe13afe3666bf9aa1 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 21 Jan 2017 18:53:11 +0100 Subject: [PATCH 46/84] read game configuration data from .ini file --- src/kernel/config.c | 34 ++++++++++++++++++++++++++++++++++ src/kernel/config.h | 1 + src/main.c | 1 + 3 files changed, 36 insertions(+) diff --git a/src/kernel/config.c b/src/kernel/config.c index d369d0ecd..0e1f159eb 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -712,6 +712,40 @@ bool config_changed(int *cache_key) { return false; } +#define MAXKEYS 16 +void config_set_from(const dictionary *d) +{ + int s, nsec = iniparser_getnsec(d); + for (s=0;s!=nsec;++s) { + char key[128]; + const char *sec = iniparser_getsecname(d, s); + int k, nkeys = iniparser_getsecnkeys(d, sec); + const char *akeys[MAXKEYS]; + const char ** keys = akeys; + size_t slen = strlen(sec); + assert(slenMAXKEYS) { + keys = malloc(sizeof(const char *) * nkeys); + } + iniparser_getseckeys(d, sec, keys); + for (k=0;k!=nkeys;++k) { + const char *val; + size_t klen = strlen(keys[k]); + assert(klen+slen+1 Date: Sat, 21 Jan 2017 19:53:47 +0100 Subject: [PATCH 47/84] issue #629: fix eressea.ini config fixed reading of ini data into config (keys have a . here, not a :). added a test. removed obsolete global.inifile variable. --- src/bindings.c | 10 +++++----- src/bindings.h | 6 +++--- src/kernel/config.c | 10 +++++----- src/kernel/config.h | 5 +++-- src/kernel/config.test.c | 17 +++++++++++++++++ src/main.c | 17 ++++++++--------- 6 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/bindings.c b/src/bindings.c index 13b562af6..99155613a 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -978,7 +978,7 @@ static int tolua_report_unit(lua_State * L) return 1; } -static void parse_inifile(lua_State * L, dictionary * d, const char *section) +static void parse_inifile(lua_State * L, const dictionary * d, const char *section) { int i; const char *arg; @@ -1018,7 +1018,7 @@ static void parse_inifile(lua_State * L, dictionary * d, const char *section) void tolua_bind_open(lua_State * L); -int tolua_bindings_open(lua_State * L) +int tolua_bindings_open(lua_State * L, const dictionary *inifile) { tolua_open(L); @@ -1072,7 +1072,7 @@ int tolua_bindings_open(lua_State * L) tolua_module(L, TOLUA_CAST "config", 1); tolua_beginmodule(L, TOLUA_CAST "config"); { - parse_inifile(L, global.inifile, "lua"); + parse_inifile(L, inifile, "lua"); tolua_variable(L, TOLUA_CAST "locales", &config_get_locales, 0); tolua_function(L, TOLUA_CAST "get_resource", &config_get_resource); tolua_variable(L, TOLUA_CAST "buildings", &config_get_buildings, 0); @@ -1142,12 +1142,12 @@ void lua_done(lua_State * L) { lua_close(L); } -lua_State *lua_init(void) { +lua_State *lua_init(const dictionary *inifile) { lua_State *L = luaL_newstate(); openlibs(L); register_tolua_helpers(); - tolua_bindings_open(L); + tolua_bindings_open(L, inifile); tolua_eressea_open(L); #ifdef USE_SQLITE tolua_sqlite_open(L); diff --git a/src/bindings.h b/src/bindings.h index 8eda1178b..b4523e582 100755 --- a/src/bindings.h +++ b/src/bindings.h @@ -16,10 +16,10 @@ extern "C" { struct lua_State; struct selist; + struct _dictionary_; int tolua_sqlite_open(struct lua_State *L); - int tolua_bindings_open(struct lua_State *L); - int tolua_spelllist_next(struct lua_State *L); + int tolua_bindings_open(struct lua_State *L, const struct _dictionary_ *d); int tolua_itemlist_next(struct lua_State *L); int tolua_orderlist_next(struct lua_State *L); int tolua_selist_push(struct lua_State *L, const char *list_type, @@ -28,7 +28,7 @@ extern "C" { int log_lua_error(struct lua_State *L); void lua_done(struct lua_State *L); - struct lua_State *lua_init(void); + struct lua_State *lua_init(const struct _dictionary_ *d); int eressea_run(struct lua_State *L, const char *luafile); #ifdef __cplusplus diff --git a/src/kernel/config.c b/src/kernel/config.c index 0e1f159eb..d05c29d1b 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -720,12 +720,12 @@ void config_set_from(const dictionary *d) char key[128]; const char *sec = iniparser_getsecname(d, s); int k, nkeys = iniparser_getsecnkeys(d, sec); - const char *akeys[MAXKEYS]; - const char ** keys = akeys; + char *akeys[MAXKEYS]; + char ** keys = akeys; size_t slen = strlen(sec); assert(slenMAXKEYS) { keys = malloc(sizeof(const char *) * nkeys); } @@ -734,8 +734,8 @@ void config_set_from(const dictionary *d) const char *val; size_t klen = strlen(keys[k]); assert(klen+slen+1 #include #include "types.h" -struct param; + + struct param; + struct _dictionary_; #define DISPLAYSIZE 8192 /* max. L�nge einer Beschreibung, incl trailing 0 */ #define ORDERSIZE (DISPLAYSIZE*2) /* max. length of an order */ @@ -108,7 +110,6 @@ struct param; struct attrib *attribs; unsigned int data_turn; void *vm_state; - struct _dictionary_ *inifile; struct global_functions { int(*wage) (const struct region * r, const struct faction * f, const struct race * rc, int in_turn); diff --git a/src/kernel/config.test.c b/src/kernel/config.test.c index 405587443..719ff840e 100644 --- a/src/kernel/config.test.c +++ b/src/kernel/config.test.c @@ -9,6 +9,8 @@ #include #include +#include + #include #include @@ -233,9 +235,24 @@ static void test_rules(CuTest *tc) { CuAssertIntEquals(tc, 1000, rule_faction_limit()); } +static void test_config_inifile(CuTest *tc) { + dictionary *ini; + test_setup(); + ini = dictionary_new(0); + dictionary_set(ini, "game", NULL); + iniparser_set(ini, "game:id", "42"); + iniparser_set(ini, "game:name", "Eressea"); + config_set_from(ini); + CuAssertStrEquals(tc, "Eressea", config_get("game.name")); + CuAssertIntEquals(tc, 42, game_id()); + iniparser_freedict(ini); + test_cleanup(); +} + CuSuite *get_config_suite(void) { CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_config_inifile); SUITE_ADD_TEST(suite, test_config_cache); SUITE_ADD_TEST(suite, test_get_set_param); SUITE_ADD_TEST(suite, test_param_int); diff --git a/src/main.c b/src/main.c index 97c84dffe..777770f0a 100644 --- a/src/main.c +++ b/src/main.c @@ -72,12 +72,9 @@ static void load_inifile(dictionary * d) verbosity = iniparser_getint(d, "game:verbose", 2); str = iniparser_getstring(d, "game:locales", "de,en"); make_locales(str); - - if (global.inifile) iniparser_freedict(global.inifile); - global.inifile = d; } -static void parse_config(const char *filename) +static dictionary *parse_config(const char *filename) { dictionary *d = iniparser_load(filename); if (d) { @@ -92,6 +89,7 @@ static void parse_config(const char *filename) gm_codepage = iniparser_getint(d, "editor:codepage", gm_codepage); #endif } + return d; } static int usage(const char *prog, const char *arg) @@ -272,10 +270,11 @@ int main(int argc, char **argv) { int err = 0; lua_State *L; + dictionary *d; setup_signal_handler(); /* ini file sets defaults for arguments*/ - parse_config(inifile); - if (!global.inifile) { + d = parse_config(inifile); + if (!d) { log_error("could not open ini configuration %s\n", inifile); } /* parse arguments again, to override ini file */ @@ -283,7 +282,7 @@ int main(int argc, char **argv) locale_init(); - L = lua_init(); + L = lua_init(d); game_init(); bind_monsters(L); err = eressea_run(L, luafile); @@ -294,8 +293,8 @@ int main(int argc, char **argv) game_done(); lua_done(L); log_close(); - if (global.inifile) { - iniparser_freedict(global.inifile); + if (d) { + iniparser_freedict(d); } return 0; } From dbc6a17e66d38f11f8acce5d153ac054e603aec8 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 21 Jan 2017 20:39:46 +0100 Subject: [PATCH 48/84] fix gcc build, introduce a hard limit on ini section size --- src/kernel/config.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/kernel/config.c b/src/kernel/config.c index d05c29d1b..57874f118 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -720,15 +720,12 @@ void config_set_from(const dictionary *d) char key[128]; const char *sec = iniparser_getsecname(d, s); int k, nkeys = iniparser_getsecnkeys(d, sec); - char *akeys[MAXKEYS]; - char ** keys = akeys; + const char *keys[MAXKEYS]; size_t slen = strlen(sec); + assert(nkeys <= MAXKEYS); assert(slenMAXKEYS) { - keys = malloc(sizeof(const char *) * nkeys); - } iniparser_getseckeys(d, sec, keys); for (k=0;k!=nkeys;++k) { const char *val; @@ -740,9 +737,6 @@ void config_set_from(const dictionary *d) config_set(key, val); } } - if (keys!=akeys) { - free(keys); - } } } From 82193864c54efbf31eadbc481e8590defb51ed12 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 21 Jan 2017 20:51:08 +0100 Subject: [PATCH 49/84] fix valgrind error. I did not understand what keys look like, then effed up when fixing that. --- src/kernel/config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kernel/config.c b/src/kernel/config.c index 57874f118..a07c36aba 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -731,7 +731,7 @@ void config_set_from(const dictionary *d) const char *val; size_t klen = strlen(keys[k]); assert(klen+slen+1 Date: Sat, 21 Jan 2017 20:59:16 +0100 Subject: [PATCH 50/84] config.json settings shall not override eressea.ini --- src/kernel/jsonconf.c | 4 +++- src/kernel/jsonconf.test.c | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/kernel/jsonconf.c b/src/kernel/jsonconf.c index 414704309..03e210ce0 100644 --- a/src/kernel/jsonconf.c +++ b/src/kernel/jsonconf.c @@ -806,7 +806,9 @@ static void json_settings(cJSON *json) { else { sprintf(value, "%d", child->valueint); } - config_set(child->string, value); + if (config_get(child->string) == NULL) { + config_set(child->string, value); + } } } } diff --git a/src/kernel/jsonconf.test.c b/src/kernel/jsonconf.test.c index 950868046..93fcd8d10 100644 --- a/src/kernel/jsonconf.test.c +++ b/src/kernel/jsonconf.test.c @@ -69,12 +69,15 @@ static void test_settings(CuTest * tc) "\"string\" : \"1d4\"," "\"integer\" : 14," "\"true\": true," + "\"game.id\": 4," "\"false\": false," "\"float\" : 1.5 }}"; cJSON *json = cJSON_Parse(data); test_cleanup(); + config_set("game.id", "42"); // should not be replaced json_config(json); + CuAssertStrEquals(tc, "42", config_get("game.id")); CuAssertStrEquals(tc, "1", config_get("true")); CuAssertStrEquals(tc, "0", config_get("false")); CuAssertStrEquals(tc, "1d4", config_get("string")); From a6dd02c11198356b0b03f4a1ea2a21d8412d5b51 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 21 Jan 2017 21:03:48 +0100 Subject: [PATCH 51/84] add game id to eressea.ini --- s/setup | 1 + 1 file changed, 1 insertion(+) diff --git a/s/setup b/s/setup index d8ffa74ad..848175ddc 100755 --- a/s/setup +++ b/s/setup @@ -96,6 +96,7 @@ touch eressea.ini ini_start ini_sec game ini_add game locales de,en +ini_add id $game ini_sec lua ini_add lua install $SOURCE ini_add lua paths $SOURCE/scripts:$SOURCE/lunit From 39375e8d4a0dba73618144bf611539f774ab20dd Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 04:46:36 +0100 Subject: [PATCH 52/84] use the email address from eressea.ini in CR mailto --- conf/e2/config.xml | 4 ---- conf/e3/config.xml | 4 ---- conf/e4/config.xml | 4 ---- src/creport.c | 7 +++++-- 4 files changed, 5 insertions(+), 14 deletions(-) diff --git a/conf/e2/config.xml b/conf/e2/config.xml index 0441a46f6..9e32218da 100644 --- a/conf/e2/config.xml +++ b/conf/e2/config.xml @@ -53,10 +53,6 @@ - - eressea-server@eressea.kn-bremen.de - eressea-server@eressea.kn-bremen.de - Bitte denke daran, deine Befehle mit dem Betreff ERESSEA 2 BEFEHLE an eressea-server@eressea.kn-bremen.de zu senden. diff --git a/conf/e3/config.xml b/conf/e3/config.xml index c8c5dbb06..6a5b18b84 100644 --- a/conf/e3/config.xml +++ b/conf/e3/config.xml @@ -45,10 +45,6 @@ - - eressea-server@eressea.kn-bremen.de - eressea-server@eressea.kn-bremen.de - Bitte denke daran, deine Befehle mit dem Betreff ERESSEA 3 BEFEHLE an eressea-server@eressea.kn-bremen.de zu senden. diff --git a/conf/e4/config.xml b/conf/e4/config.xml index b188f7d79..3209c8eed 100644 --- a/conf/e4/config.xml +++ b/conf/e4/config.xml @@ -46,10 +46,6 @@ - - eressea-server@eressea.kn-bremen.de - eressea-server@eressea.kn-bremen.de - Bitte denke daran, deine Befehle mit dem Betreff ERESSEA 4 BEFEHLE an eressea-server@eressea.kn-bremen.de zu senden. diff --git a/src/creport.c b/src/creport.c index 5e01433d4..fc944779f 100644 --- a/src/creport.c +++ b/src/creport.c @@ -1475,7 +1475,7 @@ report_computer(const char *filename, report_context * ctx, const char *bom) faction *f = ctx->f; const char *prefix; region *r; - const char *mailto = LOC(f->locale, "mailto"); + const char *mailto = config_get("game.email"); const attrib *a; FILE *F = fopen(filename, "w"); static const race *rc_human; @@ -1510,8 +1510,11 @@ report_computer(const char *filename, report_context * ctx, const char *bom) fprintf(F, "%d;Zeitalter\n", era); fprintf(F, "\"%s\";Build\n", eressea_version()); if (mailto != NULL) { + // char mailcmd[64]; + // snprintf(mailcmd, sizeof(mailcmd), "%s %d, %s", game_name(), game_id(), LOC(f->locale, "mailcmd")); + const char * mailcmd = LOC(f->locale, "mailcmd"); fprintf(F, "\"%s\";mailto\n", mailto); - fprintf(F, "\"%s\";mailcmd\n", LOC(f->locale, "mailcmd")); + fprintf(F, "\"%s\";mailcmd\n", mailcmd); } show_alliances_cr(F, f); From 0496c660287cb6a9bb3db80c4d70d084142012f4 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 04:55:19 +0100 Subject: [PATCH 53/84] use FACTION in text template, not ERESSEA --- src/report.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/report.c b/src/report.c index 503f12732..bbbdb2fb6 100644 --- a/src/report.c +++ b/src/report.c @@ -1408,7 +1408,7 @@ report_template(const char *filename, report_context * ctx, const char *bom) newline(out); newline(out); - sprintf(buf, "%s %s \"password\"", LOC(f->locale, "ERESSEA"), itoa36(f->no)); + sprintf(buf, "%s %s \"password\"", LOC(f->locale, parameters[P_FACTION]), itoa36(f->no)); rps_nowrap(out, buf); newline(out); newline(out); From 847cfb54258356f4f9cb778f7677173a1ff72db3 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 05:13:44 +0100 Subject: [PATCH 54/84] game.start in eressea.ini overrides calendar --- s/setup | 3 ++- src/bindings.c | 2 +- src/calendar.c | 9 +++++++-- src/calendar.h | 6 +++--- src/kernel/xmlreader.c | 7 ++++++- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/s/setup b/s/setup index 848175ddc..e3e8e113d 100755 --- a/s/setup +++ b/s/setup @@ -96,7 +96,8 @@ touch eressea.ini ini_start ini_sec game ini_add game locales de,en -ini_add id $game +ini_add game id $game +ini_add game start 1 ini_sec lua ini_add lua install $SOURCE ini_add lua paths $SOURCE/scripts:$SOURCE/lunit diff --git a/src/bindings.c b/src/bindings.c index 99155613a..576c54939 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -948,7 +948,7 @@ static int init_data(const char *filename, const char *catalog) return l; } if (turn < 0) { - turn = first_turn; + turn = first_turn(); } return 0; } diff --git a/src/calendar.c b/src/calendar.c index 7a27328a7..2099b6631 100644 --- a/src/calendar.c +++ b/src/calendar.c @@ -1,10 +1,10 @@ #include #include "calendar.h" +#include #include #include -int first_turn = 0; int first_month = 0; int weeks_per_month = 4; int months_per_year = 12; @@ -16,10 +16,15 @@ int *month_season = NULL; char *agename = NULL; int seasons = 0; +int first_turn(void) +{ + return config_get_int("game.start", 1); +} + const gamedate *get_gamedate(int turn, gamedate * gd) { int weeks_per_year = months_per_year * weeks_per_month; - int t = turn - first_turn; + int t = turn - first_turn(); assert(gd); if (t < 0) diff --git a/src/calendar.h b/src/calendar.h index 86f665c1a..d398cd77c 100644 --- a/src/calendar.h +++ b/src/calendar.h @@ -13,7 +13,6 @@ extern "C" { }; extern char *agename; - extern int first_turn; extern int first_month; extern int seasons; @@ -35,8 +34,9 @@ extern "C" { int week; } gamedate; - extern const gamedate *get_gamedate(int turn, gamedate * gd); - extern void calendar_cleanup(void); +const gamedate *get_gamedate(int turn, gamedate * gd); +void calendar_cleanup(void); +int first_turn(void); #ifdef __cplusplus } diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index 2f38cdab3..2ba9d785a 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -375,8 +375,13 @@ static int parse_calendar(xmlDocPtr doc) xmlNodeSetPtr nsetWeeks, nsetMonths, nsetSeasons; xmlChar *propValue = xmlGetProp(calendar, BAD_CAST "name"); xmlChar *newyear = xmlGetProp(calendar, BAD_CAST "newyear"); + xmlChar *start; - first_turn = xml_ivalue(calendar, "start", first_turn); + start = xmlGetProp(calendar, BAD_CAST "start"); + if (start && config_get("game.start")==NULL) { + config_set("game.start", (const char *)start); + xmlFree(start); + } if (propValue) { free(agename); agename = strdup(mkname("calendar", (const char *)propValue)); From d3d72d17e8a708839b87af6a0d718d86ccf429f9 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 08:03:12 +0100 Subject: [PATCH 55/84] no starting equipment. do not let the addplayer function give equipment. rename equipment for autoseed. --- conf/e2/config.xml | 2 +- conf/e3/config.xml | 8 -------- conf/e4/config.xml | 9 --------- res/eressea/equipment.xml | 22 +++++++++++----------- scripts/eressea/autoseed.lua | 6 +++--- src/kernel/faction.c | 6 ------ 6 files changed, 15 insertions(+), 38 deletions(-) diff --git a/conf/e2/config.xml b/conf/e2/config.xml index 9e32218da..5affea141 100644 --- a/conf/e2/config.xml +++ b/conf/e2/config.xml @@ -42,7 +42,7 @@ - + diff --git a/conf/e3/config.xml b/conf/e3/config.xml index 6a5b18b84..35716f332 100644 --- a/conf/e3/config.xml +++ b/conf/e3/config.xml @@ -28,14 +28,6 @@ - - - - - - - - diff --git a/conf/e4/config.xml b/conf/e4/config.xml index 3209c8eed..ac962202c 100644 --- a/conf/e4/config.xml +++ b/conf/e4/config.xml @@ -27,15 +27,6 @@ - - - - - - - - - diff --git a/res/eressea/equipment.xml b/res/eressea/equipment.xml index bf7e38376..efd4f2a3b 100644 --- a/res/eressea/equipment.xml +++ b/res/eressea/equipment.xml @@ -2,18 +2,18 @@ - + - + - + @@ -21,30 +21,30 @@ - + - + - + - + - + - + @@ -58,12 +58,12 @@ - + - + diff --git a/scripts/eressea/autoseed.lua b/scripts/eressea/autoseed.lua index 562c39361..822725804 100644 --- a/scripts/eressea/autoseed.lua +++ b/scripts/eressea/autoseed.lua @@ -64,9 +64,9 @@ local function seed(r, email, race, lang) assert(f) local u = unit.create(f, r) assert(u) - equip_unit(u, "new_faction") - equip_unit(u, "first_unit") - equip_unit(u, "first_" .. race, 7) -- disable old callbacks + equip_unit(u, "autoseed_faction") + equip_unit(u, "autoseed_unit") + equip_unit(u, "autoseed_" .. race, 7) unit.create(f, r, 5):set_skill("mining", 30) unit.create(f, r, 5):set_skill("quarrying", 30) f:set_origin(r) diff --git a/src/kernel/faction.c b/src/kernel/faction.c index 811321f14..b0aa83efd 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -22,7 +22,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "alliance.h" #include "ally.h" #include "curse.h" -#include "equipment.h" #include "group.h" #include "item.h" #include "messages.h" @@ -286,15 +285,10 @@ faction *addfaction(const char *email, const char *password, unit *addplayer(region * r, faction * f) { unit *u; - char buffer[32]; assert(f->units == NULL); faction_setorigin(f, 0, r->x, r->y); u = create_unit(r, f, 1, f->race, 0, NULL, NULL); - equip_items(&u->faction->items, get_equipment("new_faction")); - equip_unit(u, get_equipment("first_unit")); - sprintf(buffer, "first_%s", u_race(u)->_name); - equip_unit(u, get_equipment(buffer)); u->hp = unit_max_hp(u) * u->number; fset(u, UFL_ISNEW); if (f->race == get_race(RC_DAEMON)) { From d4a81ebd736c38fc7b6cf5ac7f99348e1b30b8dc Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 11:38:01 +0100 Subject: [PATCH 56/84] make these modules optional --- scripts/eressea/autoseed.lua | 1 + scripts/eressea/embassy.lua | 8 +++++--- scripts/eressea/eternath.lua | 2 +- scripts/eressea/ponnuki.lua | 1 + scripts/eressea/wedding.lua | 1 + scripts/eressea/xmas.lua | 2 ++ 6 files changed, 11 insertions(+), 4 deletions(-) diff --git a/scripts/eressea/autoseed.lua b/scripts/eressea/autoseed.lua index 822725804..9e5060f85 100644 --- a/scripts/eressea/autoseed.lua +++ b/scripts/eressea/autoseed.lua @@ -1,3 +1,4 @@ +if not config.autoseed then return nil end local autoseed = {} -- minimum required resources in the 7-hex neighborhood: diff --git a/scripts/eressea/embassy.lua b/scripts/eressea/embassy.lua index efbe248b7..82bce62c2 100644 --- a/scripts/eressea/embassy.lua +++ b/scripts/eressea/embassy.lua @@ -1,8 +1,5 @@ -- Muschelplateau -local embassy = {} -local home = nil - -- global exports (use item) function use_seashell(u, amount) -- Muschelplateau... @@ -17,6 +14,11 @@ function use_seashell(u, amount) return -4 end +if not config.embassy then return nil end + +local embassy = {} +local home = nil + function embassy.init() home = get_region(165,30) if home==nil then diff --git a/scripts/eressea/eternath.lua b/scripts/eressea/eternath.lua index 858a8d462..063577b74 100644 --- a/scripts/eressea/eternath.lua +++ b/scripts/eressea/eternath.lua @@ -1,5 +1,5 @@ -- DEPRECATED - +if not config.eternath then return nil end -- implements parts of a quest in E2 -- this module is deprecated, because it puts functions in the global environment for at_building_action diff --git a/scripts/eressea/ponnuki.lua b/scripts/eressea/ponnuki.lua index 994a16ff0..96bb0b5f1 100644 --- a/scripts/eressea/ponnuki.lua +++ b/scripts/eressea/ponnuki.lua @@ -1,3 +1,4 @@ +if not config.ponnuki then return nil end local ponnuki = {} local directions = { "NW", "NO", "O", "SO", "SW", "W" } diff --git a/scripts/eressea/wedding.lua b/scripts/eressea/wedding.lua index 812bd3269..2c06d9891 100644 --- a/scripts/eressea/wedding.lua +++ b/scripts/eressea/wedding.lua @@ -1,4 +1,5 @@ -- DEPRECATED +if not config.wedding then return nil end -- this script contains the action functions for the two portals -- used on the jadee/wildente wedding island. the two _action functions diff --git a/scripts/eressea/xmas.lua b/scripts/eressea/xmas.lua index 36e755f45..0316e6265 100644 --- a/scripts/eressea/xmas.lua +++ b/scripts/eressea/xmas.lua @@ -1,3 +1,5 @@ +if not config.xmas then return nil end + local gifts = { e2 = { { year = 2015, turn = 959, item = 'snowglobe', msg='santa_f' }, From 48ae12b629e42caffadd21a2cd88387d221b4feb Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 12:38:41 +0100 Subject: [PATCH 57/84] emit a password message for newbie factions --- src/kernel/faction.c | 1 + src/kernel/faction.h | 5 +++-- src/laws.c | 1 + src/reports.c | 8 ++++++++ src/reports.test.c | 18 ++++++++++++++++++ 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/kernel/faction.c b/src/kernel/faction.c index b0aa83efd..146ae06a4 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -249,6 +249,7 @@ faction *addfaction(const char *email, const char *password, if (!password) password = itoa36(rng_int()); faction_setpassword(f, password_encode(password, PASSWORD_DEFAULT)); ADDMSG(&f->msgs, msg_message("changepasswd", "value", password)); + f->flags |= FFL_PWMSG; f->alliance_joindate = turn; f->lastorders = turn; diff --git a/src/kernel/faction.h b/src/kernel/faction.h index 757449bd8..1bab9101c 100644 --- a/src/kernel/faction.h +++ b/src/kernel/faction.h @@ -38,10 +38,11 @@ extern "C" { extern struct attrib_type at_maxmagicians; /* faction flags */ -#define FFL_NEWID (1<<0) /* Die Partei hat bereits einmal ihre no gewechselt */ +#define FFL_NEWID (1<<0) // Die Partei hat bereits einmal ihre no gewechselt #define FFL_ISNEW (1<<1) +#define FFL_PWMSG (1<<2) // received a "new password" message #define FFL_QUIT (1<<3) -#define FFL_CURSED (1<<4) /* you're going to have a bad time */ +#define FFL_CURSED (1<<4) // you're going to have a bad time #define FFL_DEFENDER (1<<10) #define FFL_SELECT (1<<18) /* ehemals f->dh, u->dh, r->dh, etc... */ #define FFL_NOAID (1<<21) /* Hilfsflag Kampf */ diff --git a/src/laws.c b/src/laws.c index bbf1a200b..d6e005ff8 100644 --- a/src/laws.c +++ b/src/laws.c @@ -2214,6 +2214,7 @@ int password_cmd(unit * u, struct order *ord) faction_setpassword(u->faction, password_encode(pwbuf, PASSWORD_DEFAULT)); ADDMSG(&u->faction->msgs, msg_message("changepasswd", "value", pwbuf)); + u->faction->flags |= FFL_PWMSG; return 0; } diff --git a/src/reports.c b/src/reports.c index 395547734..77682a23a 100644 --- a/src/reports.c +++ b/src/reports.c @@ -1335,6 +1335,14 @@ void prepare_report(report_context *ctx, faction *f) rule_region_owners = config_token("rules.region_owner_pay_building", bt_lighthouse->_name); } + if (f->age<=2) { + if ((f->flags&FFL_PWMSG)==0) { + // TODO: this assumes unencrypted passwords + f->flags |= FFL_PWMSG; + ADDMSG(&f->msgs, msg_message("changepasswd", "value", f->_password)); + } + } + ctx->f = f; ctx->report_time = time(NULL); ctx->addresses = NULL; diff --git a/src/reports.test.c b/src/reports.test.c index 1794f1cff..18ce468bb 100644 --- a/src/reports.test.c +++ b/src/reports.test.c @@ -226,6 +226,23 @@ static void test_arg_resources(CuTest *tc) { test_cleanup(); } +static void test_newbie_password_message(CuTest *tc) { + report_context ctx; + faction *f; + test_setup(); + f = test_create_faction(0); + f->age = 5; + CuAssertIntEquals(tc, 0, f->flags&FFL_PWMSG); + prepare_report(&ctx, f); + CuAssertIntEquals(tc, 0, f->flags&FFL_PWMSG); + CuAssertPtrEquals(tc, 0, test_find_messagetype(f->msgs, "changepasswd")); + f->age=2; + prepare_report(&ctx, f); + CuAssertIntEquals(tc, FFL_PWMSG, f->flags&FFL_PWMSG); + CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "changepasswd")); + test_cleanup(); +} + static void test_prepare_travelthru(CuTest *tc) { report_context ctx; faction *f, *f2; @@ -465,6 +482,7 @@ static void test_seen_travelthru(CuTest *tc) { CuSuite *get_reports_suite(void) { CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_newbie_password_message); SUITE_ADD_TEST(suite, test_prepare_report); SUITE_ADD_TEST(suite, test_seen_neighbours); SUITE_ADD_TEST(suite, test_seen_travelthru); From 6e515702296f60fc13a9888ff92d784ca0d98235 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 12:43:48 +0100 Subject: [PATCH 58/84] remove ERESSEA keyword from "bad password" message. --- res/core/messages.xml | 5 ++--- src/kernel/save.c | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/res/core/messages.xml b/res/core/messages.xml index 41569d9f3..130b58d03 100644 --- a/res/core/messages.xml +++ b/res/core/messages.xml @@ -3306,11 +3306,10 @@ - - "ERESSEA $int36($faction) \"${password}\" - Deine Befehle hatten ein falsches Passwort." - "ERESSEA $int36($faction) \"${password}\" - Your orders had the wrong password." + "Deine Befehle hatten ein falsches Passwort (${password})." + "Your orders had the wrong password (${password})." diff --git a/src/kernel/save.c b/src/kernel/save.c index bbbd77fd1..84914127a 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -235,8 +235,7 @@ static faction *factionorders(void) if (!checkpasswd(f, (const char *)pass)) { log_debug("Invalid password for faction %s", itoa36(fid)); - ADDMSG(&f->msgs, msg_message("wrongpasswd", "faction password", - f->no, pass)); + ADDMSG(&f->msgs, msg_message("wrongpasswd", "password", pass)); return 0; } /* Die Partei hat sich zumindest gemeldet, so dass sie noch From 59916d1d5c57c58f0ef53ca418a3720ea96c8bea Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 12:51:32 +0100 Subject: [PATCH 59/84] remove sqlite3 code and dependency --- CMakeLists.txt | 1 - process/sendreport.sh | 6 -- src/CMakeLists.txt | 12 --- src/bind_sqlite.c | 95 ------------------- src/bindings.c | 3 - src/bindings.h | 1 - src/sqlite.c | 207 ------------------------------------------ 7 files changed, 325 deletions(-) delete mode 100644 src/bind_sqlite.c delete mode 100644 src/sqlite.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 8fd15f201..5cf75771b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,6 @@ project (eressea-server C) enable_testing() find_package (LibXml2) -find_package (SQLite3) find_package (Curses) find_package (Lua REQUIRED) find_package (ToLua REQUIRED) diff --git a/process/sendreport.sh b/process/sendreport.sh index 93d52f0b4..81d16813c 100755 --- a/process/sendreport.sh +++ b/process/sendreport.sh @@ -39,9 +39,3 @@ fi source ${FACTION}.sh $EMAIL || reply "Unbekannte Partei $FACTION" -if [ -e $ERESSEA/game-$GAME/eressea.db ]; then - SQL="select email from faction f left join faction_data fd on fd.faction_id=f.id where f.game_id=$GAME AND fd.code='$FACTION' and fd.turn=(select max(turn) from faction_data fx where fx.faction_id=f.id)" - OWNER=$(sqlite3 $ERESSEA/game-$GAME/eressea.db "$SQL") - echo "Der Report Deiner Partei wurde an ${EMAIL} gesandt." \ - | mutt -s "Reportnachforderung Partei ${FACTION}" $OWNER -fi diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 39d290560..2545115fc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -155,13 +155,6 @@ set(SERVER_SRC bind_unit.c ) -if (SQLITE3_FOUND) -set (SERVER_SRC ${SERVER_SRC} - sqlite.c - bind_sqlite.c -) -endif (SQLITE3_FOUND) - if (CURSES_FOUND) set (SERVER_SRC ${SERVER_SRC} gmtool.c @@ -251,11 +244,6 @@ add_test(server test_eressea) install(TARGETS eressea DESTINATION "bin") -if (SQLITE3_FOUND) -target_link_libraries(eressea ${SQLITE3_LIBRARIES}) -add_definitions(-DUSE_SQLITE) -endif(SQLITE3_FOUND) - if (CURSES_FOUND) include_directories (${CURSES_INCLUDE_DIR}) target_link_libraries(eressea ${CURSES_LIBRARIES}) diff --git a/src/bind_sqlite.c b/src/bind_sqlite.c deleted file mode 100644 index e8c9b7565..000000000 --- a/src/bind_sqlite.c +++ /dev/null @@ -1,95 +0,0 @@ -/* -+-------------------+ -| | Enno Rehling -| Eressea PBEM host | Christian Schlittchen -| (c) 1998 - 2008 | Katja Zedel -| | Henning Peters -+-------------------+ - -This program may not be used, modified or distributed -without prior permission by the authors of Eressea. -*/ - -#include - -#include "bind_unit.h" -#include "bindings.h" - -#include -#include -#include - -#define LTYPE_DB TOLUA_CAST "db" - -extern int db_update_factions(sqlite3 * db, bool force, int game); -static int tolua_db_update_factions(lua_State * L) -{ - sqlite3 *db = (sqlite3 *)tolua_tousertype(L, 1, 0); - db_update_factions(db, tolua_toboolean(L, 2, 0), game_id()); - return 0; -} - -extern int db_update_scores(sqlite3 * db, bool force); -static int tolua_db_update_scores(lua_State * L) -{ - sqlite3 *db = (sqlite3 *)tolua_tousertype(L, 1, 0); - db_update_scores(db, tolua_toboolean(L, 2, 0)); - return 0; -} - -static int tolua_db_execute(lua_State * L) -{ - sqlite3 *db = (sqlite3 *)tolua_tousertype(L, 1, 0); - const char *sql = tolua_tostring(L, 2, 0); - - int res = sqlite3_exec(db, sql, 0, 0, 0); - - lua_pushinteger(L, res); - return 1; -} - -static int tolua_db_close(lua_State * L) -{ - sqlite3 *db = (sqlite3 *)tolua_tousertype(L, 1, 0); - sqlite3_close(db); - return 0; -} - -static int tolua_db_create(lua_State * L) -{ - sqlite3 *db; - const char *dbname = tolua_tostring(L, 1, 0); - int result = sqlite3_open_v2(dbname, &db, SQLITE_OPEN_READWRITE, 0); - if (result == SQLITE_OK) { - tolua_pushusertype(L, (void *)db, LTYPE_DB); - return 1; - } - return 0; -} - -int tolua_sqlite_open(lua_State * L) -{ - /* register user types */ - - tolua_usertype(L, LTYPE_DB); - - tolua_module(L, NULL, 0); - tolua_beginmodule(L, NULL); - { - tolua_cclass(L, LTYPE_DB, LTYPE_DB, TOLUA_CAST "", NULL); - tolua_beginmodule(L, LTYPE_DB); - { - tolua_function(L, TOLUA_CAST "open", &tolua_db_create); - tolua_function(L, TOLUA_CAST "close", &tolua_db_close); - - tolua_function(L, TOLUA_CAST "update_factions", - &tolua_db_update_factions); - tolua_function(L, TOLUA_CAST "update_scores", &tolua_db_update_scores); - tolua_function(L, TOLUA_CAST "execute", &tolua_db_execute); - } - tolua_endmodule(L); - - } - tolua_endmodule(L); - return 0; -} diff --git a/src/bindings.c b/src/bindings.c index 576c54939..936d588e5 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -1149,9 +1149,6 @@ lua_State *lua_init(const dictionary *inifile) { register_tolua_helpers(); tolua_bindings_open(L, inifile); tolua_eressea_open(L); -#ifdef USE_SQLITE - tolua_sqlite_open(L); -#endif tolua_unit_open(L); tolua_building_open(L); tolua_ship_open(L); diff --git a/src/bindings.h b/src/bindings.h index b4523e582..6fa91741b 100755 --- a/src/bindings.h +++ b/src/bindings.h @@ -18,7 +18,6 @@ extern "C" { struct selist; struct _dictionary_; - int tolua_sqlite_open(struct lua_State *L); int tolua_bindings_open(struct lua_State *L, const struct _dictionary_ *d); int tolua_itemlist_next(struct lua_State *L); int tolua_orderlist_next(struct lua_State *L); diff --git a/src/sqlite.c b/src/sqlite.c deleted file mode 100644 index 9379faa4f..000000000 --- a/src/sqlite.c +++ /dev/null @@ -1,207 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -faction *get_faction_by_id(int uid) -{ - faction *f; - for (f = factions; f; f = f->next) { - if (f->subscription == uid) { - return f; - } - } - return NULL; -} - -/* -typedef struct stmt_cache { -sqlite3 *db; -sqlite3_stmt *stmt; -const char *sql; -int inuse; -} stmt_cache; - -#define MAX_STMT_CACHE 64 -static stmt_cache cache[MAX_STMT_CACHE]; -static int cache_insert; - -static sqlite3_stmt *stmt_cache_get(sqlite3 * db, const char *sql) -{ -int i; -sqlite3_stmt *stmt; - -for (i = 0; i != MAX_STMT_CACHE && cache[i].db; ++i) { -if (cache[i].sql == sql && cache[i].db == db) { -cache[i].inuse = 1; -stmt = cache[i].stmt; -sqlite3_reset(stmt); -sqlite3_clear_bindings(stmt); -return stmt; -} -} -if (i == MAX_STMT_CACHE) { -while (cache[cache_insert].inuse) { -cache[cache_insert].inuse = 0; -cache_insert = (cache_insert + 1) & (MAX_STMT_CACHE - 1); -} -i = cache_insert; -stmt = cache[i].stmt; -sqlite3_finalize(stmt); -} -cache[i].inuse = 1; -cache[i].db = db; -cache[i].sql = sql; -sqlite3_prepare_v2(db, sql, -1, &cache[i].stmt, NULL); -return cache[i].stmt; -} -*/ -typedef struct db_faction { - int uid; - int no; - char *email; - char *name; -} db_faction; - -static struct selist * -read_factions(sqlite3 * db, int game_id) { - int res; - selist *result = 0; - const char * sql = - "SELECT f.id, fd.code, fd.name, fd.email FROM faction f" - " LEFT OUTER JOIN faction_data fd" - " WHERE f.id=fd.faction_id AND f.game_id=? AND" - " fd.turn=(SELECT MAX(turn) FROM faction_data fx WHERE fx.faction_id=f.id)" - " ORDER BY f.id"; - sqlite3_stmt *stmt = 0; - sqlite3_prepare_v2(db, sql, -1, &stmt, 0); - sqlite3_bind_int(stmt, 1, game_id); - - res = sqlite3_step(stmt); - while (res == SQLITE_ROW) { - const char * text; - db_faction * dbf = (db_faction*)calloc(1, sizeof(db_faction)); - dbf->uid = (int)sqlite3_column_int64(stmt, 0); - text = (const char *)sqlite3_column_text(stmt, 1); - if (text) dbf->no = atoi36(text); - text = (const char *)sqlite3_column_text(stmt, 2); - if (text) dbf->name = strdup(text); - text = (const char *)sqlite3_column_text(stmt, 3); - if (text) dbf->email = strdup(text); - selist_push(&result, dbf); - res = sqlite3_step(stmt); - } - sqlite3_finalize(stmt); - return result; -} - -static int insert_faction(sqlite3 *db, int game_id, faction *f) { - const char *sql = "INSERT INTO faction (game_id, race) VALUES (?, ?)"; - sqlite3_stmt *stmt = 0; - sqlite3_prepare_v2(db, sql, -1, &stmt, 0); - sqlite3_bind_int(stmt, 1, game_id); - sqlite3_bind_text(stmt, 2, f->race->_name, -1, SQLITE_STATIC); - sqlite3_step(stmt); - sqlite3_finalize(stmt); - return (int)sqlite3_last_insert_rowid(db); -} - -static void update_faction(sqlite3 *db, const faction *f) { - char code[5]; - const char *sql = - "INSERT INTO faction_data (faction_id, code, name, email, lang, turn)" - " VALUES (?, ?, ?, ?, ?, ?)"; - sqlite3_stmt *stmt = 0; - strcpy(code, itoa36(f->no)); - sqlite3_prepare_v2(db, sql, -1, &stmt, 0); - sqlite3_bind_int(stmt, 1, f->subscription); - sqlite3_bind_text(stmt, 2, code, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 3, f->name, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 4, f->email, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 5, locale_name(f->locale), -1, SQLITE_STATIC); - sqlite3_bind_int(stmt, 6, turn); - sqlite3_step(stmt); - sqlite3_finalize(stmt); -} - -int db_update_factions(sqlite3 * db, bool force, int game_id) { - selist *ql = read_factions(db, game_id); - faction *f; - if (!ql) return SQLITE_OK; - sqlite3_exec(db, "BEGIN", 0, 0, 0); - for (f = factions; f; f = f->next) { - bool update = force; - db_faction *dbf = 0; -#ifdef SELIST_TODO - selist_iter it = qli_init(&ql); - while (qli_more(it)) { - db_faction *df = (db_faction*)qli_next(&it); - if (f->no == df->no || strcmp(f->email, df->email) == 0 || strcmp(f->name, df->name) == 0) { - dbf = df; - } - if (f->subscription == df->uid) { - dbf = df; - break; - } - } -#endif - if (dbf) { - if (dbf->uid != f->subscription) { - log_warning("faction %s(%d) not found in database, but matches %d\n", itoa36(f->no), f->subscription, dbf->uid); - f->subscription = dbf->uid; - } - update = (dbf->no != f->no) || (strcmp(f->email, dbf->email) != 0) || (strcmp(f->name, dbf->name) != 0); - } - else { - f->subscription = insert_faction(db, game_id, f); - log_warning("faction %s not found in database, created as %d\n", itoa36(f->no), f->subscription); - update = true; - } - if (update) { - update_faction(db, f); - log_debug("faction %s updated\n", itoa36(f->no)); - } - } - sqlite3_exec(db, "COMMIT", 0, 0, 0); - return SQLITE_OK; -} - -int db_update_scores(sqlite3 * db, bool force) -{ - /* - const char *sselist_ins = - "INSERT OR FAIL INTO score (value,faction_id,turn) VALUES (?,?,?)"; - sqlite3_stmt *stmt_ins = stmt_cache_get(db, sselist_ins); - const char *sselist_upd = - "UPDATE score set value=? WHERE faction_id=? AND turn=?"; - sqlite3_stmt *stmt_upd = stmt_cache_get(db, sselist_upd); - faction *f; - sqlite3_exec(db, "BEGIN", 0, 0, 0); - for (f = factions; f; f = f->next) { - int res; - sqlite3_bind_int(stmt_ins, 1, f->score); - sqlite3_bind_int64(stmt_ins, 2, f->subscription); - sqlite3_bind_int(stmt_ins, 3, turn); - res = sqlite3_step(stmt_ins); - if (res == SQLITE_CONSTRAINT) { - sqlite3_bind_int(stmt_upd, 1, f->score); - sqlite3_bind_int64(stmt_upd, 2, f->subscription); - sqlite3_bind_int(stmt_upd, 3, turn); - res = sqlite3_step(stmt_upd); - sqlite3_reset(stmt_upd); - } - sqlite3_reset(stmt_ins); - } - sqlite3_exec(db, "COMMIT", 0, 0, 0); - */ - return SQLITE_OK; -} From f86d86d4c6758cec983cb3cf187c773396a97000 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 12:57:25 +0100 Subject: [PATCH 60/84] Revert "remove sqlite3 code and dependency" This reverts commit 7b55a57610b3e8d54ad2b1a6d6f8642ca9ae391f. --- CMakeLists.txt | 1 + process/sendreport.sh | 6 ++ src/CMakeLists.txt | 12 +++ src/bind_sqlite.c | 95 ++++++++++++++++++++ src/bindings.c | 3 + src/bindings.h | 1 + src/sqlite.c | 204 ++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 322 insertions(+) create mode 100644 src/bind_sqlite.c create mode 100644 src/sqlite.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cf75771b..8fd15f201 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ project (eressea-server C) enable_testing() find_package (LibXml2) +find_package (SQLite3) find_package (Curses) find_package (Lua REQUIRED) find_package (ToLua REQUIRED) diff --git a/process/sendreport.sh b/process/sendreport.sh index 81d16813c..93d52f0b4 100755 --- a/process/sendreport.sh +++ b/process/sendreport.sh @@ -39,3 +39,9 @@ fi source ${FACTION}.sh $EMAIL || reply "Unbekannte Partei $FACTION" +if [ -e $ERESSEA/game-$GAME/eressea.db ]; then + SQL="select email from faction f left join faction_data fd on fd.faction_id=f.id where f.game_id=$GAME AND fd.code='$FACTION' and fd.turn=(select max(turn) from faction_data fx where fx.faction_id=f.id)" + OWNER=$(sqlite3 $ERESSEA/game-$GAME/eressea.db "$SQL") + echo "Der Report Deiner Partei wurde an ${EMAIL} gesandt." \ + | mutt -s "Reportnachforderung Partei ${FACTION}" $OWNER +fi diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2545115fc..39d290560 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -155,6 +155,13 @@ set(SERVER_SRC bind_unit.c ) +if (SQLITE3_FOUND) +set (SERVER_SRC ${SERVER_SRC} + sqlite.c + bind_sqlite.c +) +endif (SQLITE3_FOUND) + if (CURSES_FOUND) set (SERVER_SRC ${SERVER_SRC} gmtool.c @@ -244,6 +251,11 @@ add_test(server test_eressea) install(TARGETS eressea DESTINATION "bin") +if (SQLITE3_FOUND) +target_link_libraries(eressea ${SQLITE3_LIBRARIES}) +add_definitions(-DUSE_SQLITE) +endif(SQLITE3_FOUND) + if (CURSES_FOUND) include_directories (${CURSES_INCLUDE_DIR}) target_link_libraries(eressea ${CURSES_LIBRARIES}) diff --git a/src/bind_sqlite.c b/src/bind_sqlite.c new file mode 100644 index 000000000..e8c9b7565 --- /dev/null +++ b/src/bind_sqlite.c @@ -0,0 +1,95 @@ +/* ++-------------------+ +| | Enno Rehling +| Eressea PBEM host | Christian Schlittchen +| (c) 1998 - 2008 | Katja Zedel +| | Henning Peters ++-------------------+ + +This program may not be used, modified or distributed +without prior permission by the authors of Eressea. +*/ + +#include + +#include "bind_unit.h" +#include "bindings.h" + +#include +#include +#include + +#define LTYPE_DB TOLUA_CAST "db" + +extern int db_update_factions(sqlite3 * db, bool force, int game); +static int tolua_db_update_factions(lua_State * L) +{ + sqlite3 *db = (sqlite3 *)tolua_tousertype(L, 1, 0); + db_update_factions(db, tolua_toboolean(L, 2, 0), game_id()); + return 0; +} + +extern int db_update_scores(sqlite3 * db, bool force); +static int tolua_db_update_scores(lua_State * L) +{ + sqlite3 *db = (sqlite3 *)tolua_tousertype(L, 1, 0); + db_update_scores(db, tolua_toboolean(L, 2, 0)); + return 0; +} + +static int tolua_db_execute(lua_State * L) +{ + sqlite3 *db = (sqlite3 *)tolua_tousertype(L, 1, 0); + const char *sql = tolua_tostring(L, 2, 0); + + int res = sqlite3_exec(db, sql, 0, 0, 0); + + lua_pushinteger(L, res); + return 1; +} + +static int tolua_db_close(lua_State * L) +{ + sqlite3 *db = (sqlite3 *)tolua_tousertype(L, 1, 0); + sqlite3_close(db); + return 0; +} + +static int tolua_db_create(lua_State * L) +{ + sqlite3 *db; + const char *dbname = tolua_tostring(L, 1, 0); + int result = sqlite3_open_v2(dbname, &db, SQLITE_OPEN_READWRITE, 0); + if (result == SQLITE_OK) { + tolua_pushusertype(L, (void *)db, LTYPE_DB); + return 1; + } + return 0; +} + +int tolua_sqlite_open(lua_State * L) +{ + /* register user types */ + + tolua_usertype(L, LTYPE_DB); + + tolua_module(L, NULL, 0); + tolua_beginmodule(L, NULL); + { + tolua_cclass(L, LTYPE_DB, LTYPE_DB, TOLUA_CAST "", NULL); + tolua_beginmodule(L, LTYPE_DB); + { + tolua_function(L, TOLUA_CAST "open", &tolua_db_create); + tolua_function(L, TOLUA_CAST "close", &tolua_db_close); + + tolua_function(L, TOLUA_CAST "update_factions", + &tolua_db_update_factions); + tolua_function(L, TOLUA_CAST "update_scores", &tolua_db_update_scores); + tolua_function(L, TOLUA_CAST "execute", &tolua_db_execute); + } + tolua_endmodule(L); + + } + tolua_endmodule(L); + return 0; +} diff --git a/src/bindings.c b/src/bindings.c index 936d588e5..576c54939 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -1149,6 +1149,9 @@ lua_State *lua_init(const dictionary *inifile) { register_tolua_helpers(); tolua_bindings_open(L, inifile); tolua_eressea_open(L); +#ifdef USE_SQLITE + tolua_sqlite_open(L); +#endif tolua_unit_open(L); tolua_building_open(L); tolua_ship_open(L); diff --git a/src/bindings.h b/src/bindings.h index 6fa91741b..b4523e582 100755 --- a/src/bindings.h +++ b/src/bindings.h @@ -18,6 +18,7 @@ extern "C" { struct selist; struct _dictionary_; + int tolua_sqlite_open(struct lua_State *L); int tolua_bindings_open(struct lua_State *L, const struct _dictionary_ *d); int tolua_itemlist_next(struct lua_State *L); int tolua_orderlist_next(struct lua_State *L); diff --git a/src/sqlite.c b/src/sqlite.c new file mode 100644 index 000000000..aea0f5d20 --- /dev/null +++ b/src/sqlite.c @@ -0,0 +1,204 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +faction *get_faction_by_id(int uid) +{ + faction *f; + for (f = factions; f; f = f->next) { + if (f->subscription == uid) { + return f; + } + } + return NULL; +} + +/* +typedef struct stmt_cache { +sqlite3 *db; +sqlite3_stmt *stmt; +const char *sql; +int inuse; +} stmt_cache; + +#define MAX_STMT_CACHE 64 +static stmt_cache cache[MAX_STMT_CACHE]; +static int cache_insert; + +static sqlite3_stmt *stmt_cache_get(sqlite3 * db, const char *sql) +{ +int i; +sqlite3_stmt *stmt; + +for (i = 0; i != MAX_STMT_CACHE && cache[i].db; ++i) { +if (cache[i].sql == sql && cache[i].db == db) { +cache[i].inuse = 1; +stmt = cache[i].stmt; +sqlite3_reset(stmt); +sqlite3_clear_bindings(stmt); +return stmt; +} +} +if (i == MAX_STMT_CACHE) { +while (cache[cache_insert].inuse) { +cache[cache_insert].inuse = 0; +cache_insert = (cache_insert + 1) & (MAX_STMT_CACHE - 1); +} +i = cache_insert; +stmt = cache[i].stmt; +sqlite3_finalize(stmt); +} +cache[i].inuse = 1; +cache[i].db = db; +cache[i].sql = sql; +sqlite3_prepare_v2(db, sql, -1, &cache[i].stmt, NULL); +return cache[i].stmt; +} +*/ +typedef struct db_faction { + int uid; + int no; + char *email; + char *name; +} db_faction; + +static struct quicklist * +read_factions(sqlite3 * db, int game_id) { + int res; + quicklist *result = 0; + const char * sql = + "SELECT f.id, fd.code, fd.name, fd.email FROM faction f" + " LEFT OUTER JOIN faction_data fd" + " WHERE f.id=fd.faction_id AND f.game_id=? AND" + " fd.turn=(SELECT MAX(turn) FROM faction_data fx WHERE fx.faction_id=f.id)" + " ORDER BY f.id"; + sqlite3_stmt *stmt = 0; + sqlite3_prepare_v2(db, sql, -1, &stmt, 0); + sqlite3_bind_int(stmt, 1, game_id); + + res = sqlite3_step(stmt); + while (res == SQLITE_ROW) { + const char * text; + db_faction * dbf = (db_faction*)calloc(1, sizeof(db_faction)); + dbf->uid = (int)sqlite3_column_int64(stmt, 0); + text = (const char *)sqlite3_column_text(stmt, 1); + if (text) dbf->no = atoi36(text); + text = (const char *)sqlite3_column_text(stmt, 2); + if (text) dbf->name = strdup(text); + text = (const char *)sqlite3_column_text(stmt, 3); + if (text) dbf->email = strdup(text); + ql_push(&result, dbf); + res = sqlite3_step(stmt); + } + sqlite3_finalize(stmt); + return result; +} + +static int insert_faction(sqlite3 *db, int game_id, faction *f) { + const char *sql = "INSERT INTO faction (game_id, race) VALUES (?, ?)"; + sqlite3_stmt *stmt = 0; + sqlite3_prepare_v2(db, sql, -1, &stmt, 0); + sqlite3_bind_int(stmt, 1, game_id); + sqlite3_bind_text(stmt, 2, f->race->_name, -1, SQLITE_STATIC); + sqlite3_step(stmt); + sqlite3_finalize(stmt); + return (int)sqlite3_last_insert_rowid(db); +} + +static void update_faction(sqlite3 *db, const faction *f) { + char code[5]; + const char *sql = + "INSERT INTO faction_data (faction_id, code, name, email, lang, turn)" + " VALUES (?, ?, ?, ?, ?, ?)"; + sqlite3_stmt *stmt = 0; + strcpy(code, itoa36(f->no)); + sqlite3_prepare_v2(db, sql, -1, &stmt, 0); + sqlite3_bind_int(stmt, 1, f->subscription); + sqlite3_bind_text(stmt, 2, code, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 3, f->name, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 4, f->email, -1, SQLITE_STATIC); + sqlite3_bind_text(stmt, 5, locale_name(f->locale), -1, SQLITE_STATIC); + sqlite3_bind_int(stmt, 6, turn); + sqlite3_step(stmt); + sqlite3_finalize(stmt); +} + +int db_update_factions(sqlite3 * db, bool force, int game_id) { + quicklist *ql = read_factions(db, game_id); + faction *f; + sqlite3_exec(db, "BEGIN", 0, 0, 0); + for (f = factions; f; f = f->next) { + bool update = force; + db_faction *dbf = 0; + ql_iter it = qli_init(&ql); + while (qli_more(it)) { + db_faction *df = (db_faction*)qli_next(&it); + if (f->no == df->no || strcmp(f->email, df->email) == 0 || strcmp(f->name, df->name) == 0) { + dbf = df; + } + if (f->subscription == df->uid) { + dbf = df; + break; + } + } + if (dbf) { + if (dbf->uid != f->subscription) { + log_warning("faction %s(%d) not found in database, but matches %d\n", itoa36(f->no), f->subscription, dbf->uid); + f->subscription = dbf->uid; + } + update = (dbf->no != f->no) || (strcmp(f->email, dbf->email) != 0) || (strcmp(f->name, dbf->name) != 0); + } + else { + f->subscription = insert_faction(db, game_id, f); + log_warning("faction %s not found in database, created as %d\n", itoa36(f->no), f->subscription); + update = true; + } + if (update) { + update_faction(db, f); + log_debug("faction %s updated\n", itoa36(f->no)); + } + } + sqlite3_exec(db, "COMMIT", 0, 0, 0); + return SQLITE_OK; +} + +int db_update_scores(sqlite3 * db, bool force) +{ + /* + const char *sql_ins = + "INSERT OR FAIL INTO score (value,faction_id,turn) VALUES (?,?,?)"; + sqlite3_stmt *stmt_ins = stmt_cache_get(db, sql_ins); + const char *sql_upd = + "UPDATE score set value=? WHERE faction_id=? AND turn=?"; + sqlite3_stmt *stmt_upd = stmt_cache_get(db, sql_upd); + faction *f; + sqlite3_exec(db, "BEGIN", 0, 0, 0); + for (f = factions; f; f = f->next) { + int res; + sqlite3_bind_int(stmt_ins, 1, f->score); + sqlite3_bind_int64(stmt_ins, 2, f->subscription); + sqlite3_bind_int(stmt_ins, 3, turn); + res = sqlite3_step(stmt_ins); + if (res == SQLITE_CONSTRAINT) { + sqlite3_bind_int(stmt_upd, 1, f->score); + sqlite3_bind_int64(stmt_upd, 2, f->subscription); + sqlite3_bind_int(stmt_upd, 3, turn); + res = sqlite3_step(stmt_upd); + sqlite3_reset(stmt_upd); + } + sqlite3_reset(stmt_ins); + } + sqlite3_exec(db, "COMMIT", 0, 0, 0); + */ + return SQLITE_OK; +} From abeb7e344e122a5f9f2a3c2ac4611db69ad560e7 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 13:09:32 +0100 Subject: [PATCH 61/84] configure dbname in eressea.ini (or don't use DB if not --- scripts/run-turn.lua | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/scripts/run-turn.lua b/scripts/run-turn.lua index 7ee9165ca..92efa8a14 100644 --- a/scripts/run-turn.lua +++ b/scripts/run-turn.lua @@ -26,15 +26,17 @@ function callbacks(rules, name, ...) end local function dbupdate() - update_scores() - dbname = config.dbname or 'eressea.db' - edb = db.open(config.basepath..'/'..dbname) - if edb~=nil then - edb:update_factions() - edb:update_scores() - else - eressea.log.error("could not open "..config.basepath..'/'..dbname) - end + update_scores() + if config.dbname then + dbname = config.basepath..'/'..config.dbname + edb = db.open(dbame) + if edb~=nil then + edb:update_factions() + edb:update_scores() + else + eressea.log.error("could not open "..dbname) + end + end end local function write_emails(locales) From f4e25fe20e625dc6b8cbf71b4e8ae8a7246785c9 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 18:01:09 +0100 Subject: [PATCH 62/84] try loading config.lua and custom.lua files, if they exist. --- src/bindings.c | 68 ++++++++++++++++++++++++++++++++--------------- src/kernel/save.h | 1 - 2 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/bindings.c b/src/bindings.c index 576c54939..e7c4859b4 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -1168,32 +1168,56 @@ lua_State *lua_init(const dictionary *inifile) { return L; } +static int run_script(lua_State *L, const char *luafile) { + int err; + FILE *F; + + F = fopen(luafile, "r"); + if (!F) { + log_debug("dofile('%s'): %s", luafile, strerror(errno)); + return errno; + } + fclose(F); + + log_debug("executing script %s", luafile); + lua_getglobal(L, "dofile"); + lua_pushstring(L, luafile); + err = lua_pcall(L, 1, 1, -3); /* error handler (debug.traceback) is now at stack -3 */ + if (err != 0) { + log_lua_error(L); + assert(!"Lua syntax error? check log."); + } + else { + if (lua_isnumber(L, -1)) { + err = (int)lua_tonumber(L, -1); + } + lua_pop(L, 1); + } + return err; +} + int eressea_run(lua_State *L, const char *luafile) { - int err = 0; - + int err; global.vm_state = L; + + /* push an error handling function on the stack: */ + lua_getglobal(L, "debug"); + lua_getfield(L, -1, "traceback"); + lua_remove(L, -2); + + /* try to run configuration scripts: */ + err = run_script(L, "config.lua"); + err = run_script(L, "custom.lua"); + /* run the main script */ if (luafile) { - log_debug("executing script %s\n", luafile); - - lua_getglobal(L, "debug"); - lua_getfield(L, -1, "traceback"); - lua_remove(L, -2); - lua_getglobal(L, "dofile"); - lua_pushstring(L, luafile); - err = lua_pcall(L, 1, 1, -3); - if (err != 0) { - log_lua_error(L); - assert(!"Lua syntax error? check log."); - } - else { - if (lua_isnumber(L, -1)) { - err = (int)lua_tonumber(L, -1); - } - lua_pop(L, 1); - } - return err; + err = run_script(L, luafile); } - return lua_console(L); + else { + err = lua_console(L); + } + /* pop error handler off the stack: */ + lua_pop(L, 1); + return err; } diff --git a/src/kernel/save.h b/src/kernel/save.h index be78b9c68..4ead34efe 100644 --- a/src/kernel/save.h +++ b/src/kernel/save.h @@ -44,7 +44,6 @@ extern "C" { extern int enc_gamedata; int readorders(const char *filename); - int creategame(void); int readgame(const char *filename); int writegame(const char *filename); From e7a41a20178831aed58a12841179b2d7ea6a49fd Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 18:03:46 +0100 Subject: [PATCH 63/84] missing includE --- src/bindings.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bindings.c b/src/bindings.c index e7c4859b4..62d9064b4 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -80,6 +80,7 @@ without prior permission by the authors of Eressea. #include #include +#include #include #define TOLUA_PKG(NAME) extern void tolua_##NAME##_open(lua_State * L) From 64e45248dcb7ebac4b832a1a1dbec5a2ae7bd100 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 18:28:04 +0100 Subject: [PATCH 64/84] rename create_equipment function --- src/bindings.c | 6 +++--- src/kernel/equipment.c | 2 +- src/kernel/equipment.h | 2 +- src/kernel/equipment.test.c | 2 +- src/kernel/xmlreader.c | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/bindings.c b/src/bindings.c index 62d9064b4..7fb894ebb 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -83,7 +83,7 @@ without prior permission by the authors of Eressea. #include #include -#define TOLUA_PKG(NAME) extern void tolua_##NAME##_open(lua_State * L) +#define TOLUA_PKG(NAME) void tolua_##NAME##_open(lua_State * L) TOLUA_PKG(eressea); TOLUA_PKG(process); @@ -328,7 +328,7 @@ static int tolua_addequipment(lua_State * L) if (iname != NULL) { const struct item_type *itype = it_find(iname); if (itype != NULL) { - equipment_setitem(create_equipment(eqname), itype, value); + equipment_setitem(get_or_create_equipment(eqname), itype, value); result = 0; } } @@ -461,7 +461,7 @@ static int tolua_equipment_setitem(lua_State * L) if (iname != NULL) { const struct item_type *itype = it_find(iname); if (itype != NULL) { - equipment_setitem(create_equipment(eqname), itype, value); + equipment_setitem(get_or_create_equipment(eqname), itype, value); result = 0; } } diff --git a/src/kernel/equipment.c b/src/kernel/equipment.c index 349a87448..00f8c2f95 100644 --- a/src/kernel/equipment.c +++ b/src/kernel/equipment.c @@ -39,7 +39,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. static equipment *equipment_sets; -equipment *create_equipment(const char *eqname) +equipment *get_or_create_equipment(const char *eqname) { equipment **eqp = &equipment_sets; for (;;) { diff --git a/src/kernel/equipment.h b/src/kernel/equipment.h index 4081ab748..53475b510 100644 --- a/src/kernel/equipment.h +++ b/src/kernel/equipment.h @@ -56,7 +56,7 @@ extern "C" { void equipment_done(void); - struct equipment *create_equipment(const char *eqname); + struct equipment *get_or_create_equipment(const char *eqname); struct equipment *get_equipment(const char *eqname); void equipment_setitem(struct equipment *eq, diff --git a/src/kernel/equipment.test.c b/src/kernel/equipment.test.c index a82f86674..afd53849e 100644 --- a/src/kernel/equipment.test.c +++ b/src/kernel/equipment.test.c @@ -27,7 +27,7 @@ void test_equipment(CuTest * tc) CuAssertPtrNotNull(tc, sp); CuAssertPtrEquals(tc, 0, get_equipment("herpderp")); - eq = create_equipment("herpderp"); + eq = get_or_create_equipment("herpderp"); CuAssertPtrEquals(tc, eq, get_equipment("herpderp")); equipment_setitem(eq, it_horses, "1"); diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index 2ba9d785a..cba01bc7b 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -1266,7 +1266,7 @@ add_subsets(xmlDocPtr doc, equipment * eq, xmlNodeSetPtr nsetSubsets) assert(propValue != NULL); eq->subsets[i].sets[set].chance = chance; eq->subsets[i].sets[set].set = - create_equipment((const char *)propValue); + get_or_create_equipment((const char *)propValue); xmlFree(propValue); } } @@ -1296,7 +1296,7 @@ static int parse_equipment(xmlDocPtr doc) xmlChar *propName = xmlGetProp(node, BAD_CAST "name"); if (propName != NULL) { - equipment *eq = create_equipment((const char *)propName); + equipment *eq = get_or_create_equipment((const char *)propName); xmlXPathObjectPtr xpathResult; xpath->node = node; From 76af048fed26d039c41f9794c91b0e3ecd429849 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 18:35:54 +0100 Subject: [PATCH 65/84] clean the quipment interface for lua a little bit. --- conf/e2/config.xml | 2 +- src/bindings.c | 18 ------------------ src/kernel/faction.c | 6 ++++++ 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/conf/e2/config.xml b/conf/e2/config.xml index 5affea141..8389ba470 100644 --- a/conf/e2/config.xml +++ b/conf/e2/config.xml @@ -29,7 +29,7 @@ - + diff --git a/src/bindings.c b/src/bindings.c index 7fb894ebb..0986ffb37 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -319,23 +319,6 @@ static int tolua_dice_rand(lua_State * L) return 1; } -static int tolua_addequipment(lua_State * L) -{ - const char *eqname = tolua_tostring(L, 1, 0); - const char *iname = tolua_tostring(L, 2, 0); - const char *value = tolua_tostring(L, 3, 0); - int result = -1; - if (iname != NULL) { - const struct item_type *itype = it_find(iname); - if (itype != NULL) { - equipment_setitem(get_or_create_equipment(eqname), itype, value); - result = 0; - } - } - lua_pushinteger(L, result); - return 1; -} - static int tolua_get_season(lua_State * L) { int turnno = (int)tolua_tonumber(L, 1, 0); @@ -1112,7 +1095,6 @@ int tolua_bindings_open(lua_State * L, const dictionary *inifile) tolua_function(L, TOLUA_CAST "get_season", tolua_get_season); tolua_function(L, TOLUA_CAST "equipment_setitem", tolua_equipment_setitem); tolua_function(L, TOLUA_CAST "equip_unit", tolua_equipunit); - tolua_function(L, TOLUA_CAST "add_equipment", tolua_addequipment); tolua_function(L, TOLUA_CAST "atoi36", tolua_atoi36); tolua_function(L, TOLUA_CAST "itoa36", tolua_itoa36); tolua_function(L, TOLUA_CAST "dice_roll", tolua_dice_rand); diff --git a/src/kernel/faction.c b/src/kernel/faction.c index 146ae06a4..040cd5fb0 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -22,6 +22,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "alliance.h" #include "ally.h" #include "curse.h" +#include "equipment.h" #include "group.h" #include "item.h" #include "messages.h" @@ -286,10 +287,15 @@ faction *addfaction(const char *email, const char *password, unit *addplayer(region * r, faction * f) { unit *u; + const struct equipment* eq; assert(f->units == NULL); faction_setorigin(f, 0, r->x, r->y); u = create_unit(r, f, 1, f->race, 0, NULL, NULL); + eq = get_equipment("first_unit"); + if (eq) { + equip_items(&u->items, eq); + } u->hp = unit_max_hp(u) * u->number; fset(u, UFL_ISNEW); if (f->race == get_race(RC_DAEMON)) { From 98be6bb8aeb5db1f7e63e524add0d491eb787ec8 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 18:51:20 +0100 Subject: [PATCH 66/84] eliminate duplicate password message --- scripts/tests/faction.lua | 2 +- src/kernel/faction.c | 11 +++++------ src/kernel/faction.test.c | 2 +- src/reports.test.c | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/scripts/tests/faction.lua b/scripts/tests/faction.lua index 38fdc4eb7..87a6b5100 100644 --- a/scripts/tests/faction.lua +++ b/scripts/tests/faction.lua @@ -17,7 +17,7 @@ function setup() end function test_faction_flags() - assert_equal(2, f.flags) -- FFL_ISNEW + assert_equal(6, f.flags) -- FFL_ISNEW|FFL_PWMSG f.flags = 42 assert_equal(42, f.flags) end diff --git a/src/kernel/faction.c b/src/kernel/faction.c index 040cd5fb0..b7115c62f 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -247,11 +247,6 @@ faction *addfaction(const char *email, const char *password, log_warning("Invalid email address for faction %s: %s\n", itoa36(f->no), email); } - if (!password) password = itoa36(rng_int()); - faction_setpassword(f, password_encode(password, PASSWORD_DEFAULT)); - ADDMSG(&f->msgs, msg_message("changepasswd", "value", password)); - f->flags |= FFL_PWMSG; - f->alliance_joindate = turn; f->lastorders = turn; f->_alive = true; @@ -260,7 +255,11 @@ faction *addfaction(const char *email, const char *password, f->magiegebiet = 0; f->locale = loc; f->subscription = subscription; - f->flags = FFL_ISNEW; + f->flags = FFL_ISNEW|FFL_PWMSG; + + if (!password) password = itoa36(rng_int()); + faction_setpassword(f, password_encode(password, PASSWORD_DEFAULT)); + ADDMSG(&f->msgs, msg_message("changepasswd", "value", password)); f->options = want(O_REPORT) | want(O_ZUGVORLAGE) | want(O_COMPUTER) | want(O_COMPRESS) | diff --git a/src/kernel/faction.test.c b/src/kernel/faction.test.c index 3bfc36ca8..b18121e2d 100644 --- a/src/kernel/faction.test.c +++ b/src/kernel/faction.test.c @@ -117,7 +117,7 @@ static void test_addfaction(CuTest *tc) { CuAssertTrue(tc, checkpasswd(f, "hurrdurr")); CuAssertPtrEquals(tc, (void *)lang, (void *)f->locale); CuAssertIntEquals(tc, 1234, f->subscription); - CuAssertIntEquals(tc, FFL_ISNEW, f->flags); + CuAssertIntEquals(tc, FFL_ISNEW|FFL_PWMSG, f->flags); CuAssertIntEquals(tc, 0, f->age); CuAssertTrue(tc, faction_alive(f)); CuAssertIntEquals(tc, M_GRAY, f->magiegebiet); diff --git a/src/reports.test.c b/src/reports.test.c index 18ce468bb..e3ca5c89b 100644 --- a/src/reports.test.c +++ b/src/reports.test.c @@ -232,7 +232,7 @@ static void test_newbie_password_message(CuTest *tc) { test_setup(); f = test_create_faction(0); f->age = 5; - CuAssertIntEquals(tc, 0, f->flags&FFL_PWMSG); + f->flags = 0; prepare_report(&ctx, f); CuAssertIntEquals(tc, 0, f->flags&FFL_PWMSG); CuAssertPtrEquals(tc, 0, test_find_messagetype(f->msgs, "changepasswd")); From 963713b1894049637979e61ac4563b96353561a8 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 19:06:37 +0100 Subject: [PATCH 67/84] remove unused equipment sets (from an unrealized feature). --- res/e3a/equipment.xml | 69 ------------------------------------------- 1 file changed, 69 deletions(-) diff --git a/res/e3a/equipment.xml b/res/e3a/equipment.xml index bbd2ac5b7..9fe133f48 100644 --- a/res/e3a/equipment.xml +++ b/res/e3a/equipment.xml @@ -1,78 +1,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From ef10c607145d0494994d1495498cf85739d38b28 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 19:32:03 +0100 Subject: [PATCH 68/84] the locales module is deprecated. let's do this in custom.lua from now on. --- scripts/eressea/e2/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/eressea/e2/init.lua b/scripts/eressea/e2/init.lua index ed996c395..722078741 100644 --- a/scripts/eressea/e2/init.lua +++ b/scripts/eressea/e2/init.lua @@ -11,7 +11,7 @@ return { require('eressea.tunnels'), require('eressea.ponnuki'), require('eressea.astral'), - require('eressea.locales'), +-- require('eressea.locales'), require('eressea.jsreport'), require('eressea.ents'), require('eressea.cursed') From ee88c13732ddec3a3c9cb6beeecb0cf26698658a Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 20:19:32 +0100 Subject: [PATCH 69/84] Korrekte Email-Subject und Adresse, auch im NR. Eliminate crufty per-game strings. --- conf/e2/config.xml | 12 ------------ conf/e3/config.xml | 12 ------------ conf/e4/config.xml | 12 ------------ res/core/de/strings.xml | 6 ++++++ res/core/messages.xml | 10 ++++++++++ src/creport.c | 4 +--- src/kernel/config.c | 17 +++++++++++++++-- src/kernel/config.h | 1 + src/kernel/config.test.c | 2 ++ src/report.c | 17 +++++++++++------ src/reports.c | 7 +++++++ src/reports.h | 1 + 12 files changed, 54 insertions(+), 47 deletions(-) diff --git a/conf/e2/config.xml b/conf/e2/config.xml index 8389ba470..56c622d04 100644 --- a/conf/e2/config.xml +++ b/conf/e2/config.xml @@ -52,16 +52,4 @@ - - - Bitte denke daran, deine Befehle mit dem Betreff - ERESSEA 2 BEFEHLE an eressea-server@eressea.kn-bremen.de zu senden. - Remember to send your orders to - eressea-server@eressea.kn-bremen.de with the subject ERESSEA 2 ORDERS. - - - ERESSEA 2 BEFEHLE - ERESSEA 2 ORDERS - - diff --git a/conf/e3/config.xml b/conf/e3/config.xml index 35716f332..ac05d5a5a 100644 --- a/conf/e3/config.xml +++ b/conf/e3/config.xml @@ -36,16 +36,4 @@ - - - Bitte denke daran, deine Befehle mit dem Betreff - ERESSEA 3 BEFEHLE an eressea-server@eressea.kn-bremen.de zu senden. - Remember to send your orders to - eressea-server@eressea.kn-bremen.de with the subject E3 ORDERS. - - - ERESSEA 3 BEFEHLE - ERESSEA 3 ORDERS - - diff --git a/conf/e4/config.xml b/conf/e4/config.xml index ac962202c..f9ede1a27 100644 --- a/conf/e4/config.xml +++ b/conf/e4/config.xml @@ -36,16 +36,4 @@ - - - Bitte denke daran, deine Befehle mit dem Betreff - ERESSEA 4 BEFEHLE an eressea-server@eressea.kn-bremen.de zu senden. - Remember to send your orders to - eressea-server@eressea.kn-bremen.de with the subject ERESSEA 4 ORDERS. - - - ERESSEA 4 BEFEHLE - ERESSEA 4 ORDERS - - diff --git a/res/core/de/strings.xml b/res/core/de/strings.xml index b23d44ffb..7d31fc678 100644 --- a/res/core/de/strings.xml +++ b/res/core/de/strings.xml @@ -6,6 +6,12 @@ _x: preposition (15 /Schlumpf/schwerter) _a: including article (ein Schlumpf, a smurf) --> + + + BEFEHLE + ORDERS + + Wirbel vortex diff --git a/res/core/messages.xml b/res/core/messages.xml index 130b58d03..6892ec4e5 100644 --- a/res/core/messages.xml +++ b/res/core/messages.xml @@ -1,5 +1,15 @@ + + + + + + Bitte denke daran, deine Befehle mit dem Betreff + $subject an $email zu senden. + Remember to send your orders to + $email with the subject ${subject}. + diff --git a/src/creport.c b/src/creport.c index fc944779f..106f34545 100644 --- a/src/creport.c +++ b/src/creport.c @@ -1510,9 +1510,7 @@ report_computer(const char *filename, report_context * ctx, const char *bom) fprintf(F, "%d;Zeitalter\n", era); fprintf(F, "\"%s\";Build\n", eressea_version()); if (mailto != NULL) { - // char mailcmd[64]; - // snprintf(mailcmd, sizeof(mailcmd), "%s %d, %s", game_name(), game_id(), LOC(f->locale, "mailcmd")); - const char * mailcmd = LOC(f->locale, "mailcmd"); + const char * mailcmd = get_mailcmd(f->locale); fprintf(F, "\"%s\";mailto\n", mailto); fprintf(F, "\"%s\";mailcmd\n", mailcmd); } diff --git a/src/kernel/config.c b/src/kernel/config.c index a07c36aba..c7bc71cdf 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -802,12 +802,25 @@ void free_gamedata(void) } } -const char * game_name(void) { +const char * game_name(void) +{ const char * param = config_get("game.name"); return param ? param : global.gamename; } +const char * game_name_upper(void) +{ + static char result[32]; // FIXME: static result + char *r = result; + const char *param = game_name(); + const char *c = param; + while (*c && (r-result)age <= 2) { - const char *s; - s = locale_getstring(f->locale, "newbie_info_game"); - if (s) { - newline(out); - centre(out, s, true); + const char *email; + const char *subject; + email = config_get("game.email"); + subject = get_mailcmd(f->locale); + m = msg_message("newbie_info_game", "email subject", email, subject); + if (m) { + nr_render(m, f->locale, buf, sizeof(buf), f); + msg_release(m); + centre(out, buf, true); } if ((f->options & want(O_COMPUTER)) == 0) { - f->options |= want(O_COMPUTER); + const char *s; s = locale_getstring(f->locale, "newbie_info_cr"); if (s) { newline(out); centre(out, s, true); } + f->options |= want(O_COMPUTER); } } newline(out); diff --git a/src/reports.c b/src/reports.c index 77682a23a..5a47acfed 100644 --- a/src/reports.c +++ b/src/reports.c @@ -1944,6 +1944,13 @@ static void eval_regions(struct opstack **stack, const void *userdata) opush(stack, var); } +const char *get_mailcmd(const struct locale *loc) +{ + static char result[64]; // FIXME: static return buffer + snprintf(result, sizeof(result), "%s %d %s", game_name_upper(), game_id(), LOC(loc, "mailcmd")); + return result; +} + static void eval_trail(struct opstack **stack, const void *userdata) { /* order -> string */ const faction *report = (const faction *)userdata; diff --git a/src/reports.h b/src/reports.h index 625048de9..4fab104ef 100644 --- a/src/reports.h +++ b/src/reports.h @@ -131,6 +131,7 @@ extern "C" { int stream_printf(struct stream * out, const char *format, ...); int count_travelthru(struct region *r, const struct faction *f); + const char *get_mailcmd(const struct locale *loc); #define GR_PLURAL 0x01 /* grammar: plural */ #define MAX_INVENTORY 128 /* maimum number of different items in an inventory */ From 21b617c973d59184e70c3a44c8d78d5b8da5a4e8 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 20:32:54 +0100 Subject: [PATCH 70/84] fix game_name, remove it from rules --- conf/e2/config.json | 2 -- conf/e3/config.json | 2 -- conf/e4/config.json | 2 -- res/core/de/strings.xml | 2 -- src/kernel/config.c | 2 +- 5 files changed, 1 insertion(+), 9 deletions(-) diff --git a/conf/e2/config.json b/conf/e2/config.json index ce823a33d..ca157f501 100644 --- a/conf/e2/config.json +++ b/conf/e2/config.json @@ -8,8 +8,6 @@ "jsreport" ], "settings": { - "game.id": 2, - "game.name": "Eressea", "orders.default": "work", "NewbieImmunity": 8, "modules.wormholes": true, diff --git a/conf/e3/config.json b/conf/e3/config.json index 30bc7e599..fd533070e 100644 --- a/conf/e3/config.json +++ b/conf/e3/config.json @@ -25,8 +25,6 @@ "jsreport" ], "settings": { - "game.id": 3, - "game.name": "E3", "orders.default": "work", "database.gameid": 7, "NewbieImmunity": 4, diff --git a/conf/e4/config.json b/conf/e4/config.json index cbe273af6..91961258a 100644 --- a/conf/e4/config.json +++ b/conf/e4/config.json @@ -25,8 +25,6 @@ "jsreport" ], "settings": { - "game.id": 4, - "game.name": "Deveron", "orders.default": "work", "database.gameid": 7, "NewbieImmunity": 4, diff --git a/res/core/de/strings.xml b/res/core/de/strings.xml index 7d31fc678..bccfdd165 100644 --- a/res/core/de/strings.xml +++ b/res/core/de/strings.xml @@ -6,12 +6,10 @@ _x: preposition (15 /Schlumpf/schwerter) _a: including article (ein Schlumpf, a smurf) --> - BEFEHLE ORDERS - Wirbel vortex diff --git a/src/kernel/config.c b/src/kernel/config.c index c7bc71cdf..c2db29f22 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -814,7 +814,7 @@ const char * game_name_upper(void) char *r = result; const char *param = game_name(); const char *c = param; - while (*c && (r-result)r) { *r++ = (char)toupper(*c++); } *r = '\0'; From b2e6c481863308f912b50a58e9025502c5b1d0cc Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 22 Jan 2017 21:02:15 +0100 Subject: [PATCH 71/84] specify a game id, because there is one in the data --- tests/eressea.ini | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/eressea.ini b/tests/eressea.ini index e84171d45..faf4b1b9e 100644 --- a/tests/eressea.ini +++ b/tests/eressea.ini @@ -1,10 +1,8 @@ -[eressea] -base = . -report = reports +[game] +name = Eressea +id = 2 +email = eressea-server@kn-bremen.de verbose = 0 -lomem = 0 -debug = 0 -memcheck = 0 locales = de,en [lua] From 1bd6ab11ea2617f38f38036737e5a12985ab4c74 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 23 Jan 2017 09:22:29 +0100 Subject: [PATCH 72/84] FACTION and PARTEI should both start orders. --- src/kernel/save.c | 24 ++++++++++++++++++++++-- tests/orders.184 | 5 +++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/kernel/save.c b/src/kernel/save.c index 84914127a..be461e27c 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -252,6 +252,26 @@ static faction *factionorders(void) return f; } +static param_t next_param(const char *s, const struct locale *lang) { + param_t p; + if (!s || s[0] == '@') { + return NOPARAM; + } + p = findparam(s, lang); + if (p==NOPARAM) { + const struct locale *loc; + for (loc=locales;loc;loc=nextlocale(loc)) { + if (loc!=lang) { + p = findparam(s, lang); + if (p==P_FACTION || p==P_GAMENAME) { + break; + } + } + } + } + return p; +} + int readorders(const char *filename) { FILE *F = NULL; @@ -279,7 +299,7 @@ int readorders(const char *filename) const char *s; init_tokens_str(b); s = gettoken(token, sizeof(token)); - p = (s && s[0] != '@') ? findparam(s, lang) : NOPARAM; + p = next_param(s, lang); switch (p) { case P_GAMENAME: case P_FACTION: @@ -308,7 +328,7 @@ int readorders(const char *filename) p = (s && s[0] != '@') ? findparam(s, lang) : NOPARAM; } while ((p != P_UNIT || !f) && p != P_FACTION && p != P_NEXT && p != P_GAMENAME); - } + } break; /* Falls in unitorders() abgebrochen wird, steht dort entweder eine neue diff --git a/tests/orders.184 b/tests/orders.184 index 980993481..315c180d5 100644 --- a/tests/orders.184 +++ b/tests/orders.184 @@ -1,4 +1,4 @@ -ERESSEA 6rLo "6rLo" +PARTEI 6rLo "6rLo" EINHEIT 7Lgf NACH NW NW NAECHSTER @@ -6,7 +6,8 @@ ERESSEA w86y "w86y" EINHEIT uc3u STIRB "mrqa" NAECHSTER -ERESSEA ngij "ngij" + +FACTION ngij "ngij" EINHEIT iwbz HELFE w86y ALLES EINHEIT j536 From af1ce9b84e6e47d1c6ea060032b14f4acf9c63e4 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 23 Jan 2017 10:47:49 +0100 Subject: [PATCH 73/84] issue #633: parse FACTION/PARTEI in any language. added a test since the first fix did not work. --- src/kernel/config.c | 21 +++++++++++++++++++++ src/kernel/config.h | 1 + src/kernel/config.test.c | 24 ++++++++++++++++++++++++ src/kernel/save.c | 22 +--------------------- src/util/language.c | 7 ++++--- 5 files changed, 51 insertions(+), 24 deletions(-) diff --git a/src/kernel/config.c b/src/kernel/config.c index c2db29f22..109913560 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -213,6 +213,27 @@ param_t findparam(const char *s, const struct locale * lang) return result; } +param_t findparam_block(const char *s, const struct locale *lang, bool any_locale) +{ + param_t p; + if (!s || s[0] == '@') { + return NOPARAM; + } + p = findparam(s, lang); + if (any_locale && p==NOPARAM) { + const struct locale *loc; + for (loc=locales;loc;loc=nextlocale(loc)) { + if (loc!=lang) { + p = findparam(s, loc); + if (p==P_FACTION || p==P_GAMENAME) { + break; + } + } + } + } + return p; +} + param_t findparam_ex(const char *s, const struct locale * lang) { param_t result = findparam(s, lang); diff --git a/src/kernel/config.h b/src/kernel/config.h index 43189400c..b51ba2725 100644 --- a/src/kernel/config.h +++ b/src/kernel/config.h @@ -45,6 +45,7 @@ extern "C" { int findoption(const char *s, const struct locale *lang); param_t findparam(const char *s, const struct locale *lang); + param_t findparam_block(const char *s, const struct locale *lang, bool any_locale); param_t findparam_ex(const char *s, const struct locale * lang); bool isparam(const char *s, const struct locale * lang, param_t param); param_t getparam(const struct locale *lang); diff --git a/src/kernel/config.test.c b/src/kernel/config.test.c index ca362d6a1..72b2387ac 100644 --- a/src/kernel/config.test.c +++ b/src/kernel/config.test.c @@ -251,9 +251,33 @@ static void test_config_inifile(CuTest *tc) { test_cleanup(); } +static void test_findparam(CuTest *tc) { + struct locale *en, *de; + test_setup(); + en = get_or_create_locale("en"); + locale_setstring(en, parameters[P_FACTION], "FACTION"); + CuAssertIntEquals(tc, NOPARAM, findparam("FACTION", en)); + init_parameters(en); + CuAssertIntEquals(tc, P_FACTION, findparam("FACTION", en)); + de = get_or_create_locale("de"); + locale_setstring(de, parameters[P_FACTION], "PARTEI"); + CuAssertIntEquals(tc, NOPARAM, findparam("PARTEI", de)); + init_parameters(de); + CuAssertIntEquals(tc, P_FACTION, findparam("PARTEI", de)); + CuAssertIntEquals(tc, NOPARAM, findparam("HODOR", de)); + + CuAssertIntEquals(tc, NOPARAM, findparam("PARTEI", en)); + CuAssertIntEquals(tc, NOPARAM, findparam_block("HODOR", de, false)); + CuAssertIntEquals(tc, P_FACTION, findparam_block("PARTEI", de, true)); + CuAssertIntEquals(tc, NOPARAM, findparam_block("PARTEI", en, false)); + CuAssertIntEquals(tc, P_FACTION, findparam_block("PARTEI", en, true)); + test_cleanup(); +} + CuSuite *get_config_suite(void) { CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_findparam); SUITE_ADD_TEST(suite, test_config_inifile); SUITE_ADD_TEST(suite, test_config_cache); SUITE_ADD_TEST(suite, test_get_set_param); diff --git a/src/kernel/save.c b/src/kernel/save.c index be461e27c..ac236d5bf 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -252,26 +252,6 @@ static faction *factionorders(void) return f; } -static param_t next_param(const char *s, const struct locale *lang) { - param_t p; - if (!s || s[0] == '@') { - return NOPARAM; - } - p = findparam(s, lang); - if (p==NOPARAM) { - const struct locale *loc; - for (loc=locales;loc;loc=nextlocale(loc)) { - if (loc!=lang) { - p = findparam(s, lang); - if (p==P_FACTION || p==P_GAMENAME) { - break; - } - } - } - } - return p; -} - int readorders(const char *filename) { FILE *F = NULL; @@ -299,7 +279,7 @@ int readorders(const char *filename) const char *s; init_tokens_str(b); s = gettoken(token, sizeof(token)); - p = next_param(s, lang); + p = findparam_block(s, lang, true); switch (p) { case P_GAMENAME: case P_FACTION: diff --git a/src/util/language.c b/src/util/language.c index efd5cd5f7..300e69103 100644 --- a/src/util/language.c +++ b/src/util/language.c @@ -295,10 +295,11 @@ void init_translations(const struct locale *lang, int ut, const char * (*string_ // TODO: swap the name of s and key const char * s = string_cb(i); if (s) { - struct critbit_tree ** cb = (struct critbit_tree **)tokens; const char * key = locale_string(lang, s, false); - if (!key) key = s; - add_translation(cb, key, i); + if (key) { + struct critbit_tree ** cb = (struct critbit_tree **)tokens; + add_translation(cb, key, i); + } } } } From a79e5ef2a5ef25d7df3b81b6af57724d6f75dadd Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 23 Jan 2017 11:13:01 +0100 Subject: [PATCH 74/84] refactor and annotate volcano outbreaks. add configuration options to control volcano behavior. --- src/volcano.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/volcano.c b/src/volcano.c index 60beeaed7..a9a4f0ba7 100644 --- a/src/volcano.c +++ b/src/volcano.c @@ -55,7 +55,7 @@ static int nb_armor(const unit * u, int index) if (!(u_race(u)->battle_flags & BF_EQUIPMENT)) return 0; - /* Normale Rüstung */ + /* Normale R�stung */ for (itm = u->items; itm; itm = itm->next) { const armor_type *atype = itm->type->rtype->atype; @@ -169,11 +169,11 @@ static region *rrandneighbour(region * r) for (i = 0; i != MAXDIRECTIONS; i++) { c++; } - /* Zufällig eine auswählen */ + /* Zuf�llig eine ausw�hlen */ rr = rng_int() % c; - /* Durchzählen */ + /* Durchz�hlen */ c = -1; for (i = 0; i != MAXDIRECTIONS; i++) { @@ -204,7 +204,7 @@ volcano_destruction(region * volcano, region * r, const char *damage) else { /* Produktion vierteln ... */ a->data.sa[0] = (short)percent; - /* Für 6-17 Runden */ + /* F�r 6-17 Runden */ a->data.sa[1] = (short)(a->data.sa[1] + time); } @@ -255,6 +255,14 @@ void volcano_outbreak(region * r, region *rn) } } +static bool stop_smoke_chance(void) { + return rng_int() % 100 < 12; +} + +static bool outbreak_chance(void) { + return rng_int() % 100 < 8; +} + void volcano_update(void) { region *r; @@ -270,13 +278,16 @@ void volcano_update(void) r->terrain = t_volcano; } else { - if (rng_int() % 100 < 12) { + if (stop_smoke_chance()) { ADDMSG(&r->msgs, msg_message("volcanostopsmoke", "region", r)); r->terrain = t_volcano; } - else if (r->uid == 1246051340 || (r->age > 20 && rng_int() % 100 < 8)) { + else if (r->uid == 1246051340 || outbreak_chance()) { + // HACK: a fixed E4-only region-uid in Code. + // FIXME: In E4 gibt es eine Ebene #1246051340, die Smalland heisst. + // da das kein aktiver Vulkan ist, ist dieser Test da nicht idiotisch? + // das sollte bestimmt rn betreffen? region *rn; - /* Zufällige Nachbarregion verwüsten */ rn = rrandneighbour(r); volcano_outbreak(r, rn); r->terrain = t_volcano; From d8770932f01fc99341380f23c73d2f22a0b3807c Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 23 Jan 2017 11:44:34 +0100 Subject: [PATCH 75/84] fix issue #477 (intermittent volcano) --- scripts/tests/xmas.lua | 2 ++ src/volcano.c | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/scripts/tests/xmas.lua b/scripts/tests/xmas.lua index 7ac4ce731..5477e08ab 100644 --- a/scripts/tests/xmas.lua +++ b/scripts/tests/xmas.lua @@ -8,6 +8,8 @@ function setup() eressea.settings.set("rules.grow.formula", "0") eressea.settings.set("rules.peasants.growth.factor", "0") eressea.settings.set("volcano.active.percent", "0") + eressea.settings.set("volcano.outbreak.percent", "0") + eressea.settings.set("volcano.stop.percent", "0") end function test_snowglobe_fail() diff --git a/src/volcano.c b/src/volcano.c index a9a4f0ba7..89a865017 100644 --- a/src/volcano.c +++ b/src/volcano.c @@ -256,11 +256,19 @@ void volcano_outbreak(region * r, region *rn) } static bool stop_smoke_chance(void) { - return rng_int() % 100 < 12; + static int cache, percent = 0; + if (config_changed(&cache)) { + percent = config_get_int("volcano.stop.percent", 12); + } + return percent!=0 && (rng_int() % 100) < percent; } static bool outbreak_chance(void) { - return rng_int() % 100 < 8; + static int cache, percent = 0; + if (config_changed(&cache)) { + percent = config_get_int("volcano.outbreak.percent", 8); + } + return percent!=0 && (rng_int() % 100) < percent; } void volcano_update(void) From c0692986b27236912a8646f692a4c6e4f16da87b Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 23 Jan 2017 21:35:01 +0100 Subject: [PATCH 76/84] make runtests.bat not crash. disable auto-load of config.lua (sob). free messages and config in config.reset(). --- scripts/tests/laws.lua | 2 ++ src/bind_config.c | 3 +++ src/bindings.c | 2 +- src/laws.c | 3 ++- src/util/nrmessage.c | 13 +++++++++++++ src/util/nrmessage.h | 16 +++++++++------- src/util/nrmessage_struct.h | 4 ++-- 7 files changed, 32 insertions(+), 11 deletions(-) diff --git a/scripts/tests/laws.lua b/scripts/tests/laws.lua index f0fef15a9..6f41fc54b 100644 --- a/scripts/tests/laws.lua +++ b/scripts/tests/laws.lua @@ -95,6 +95,7 @@ function test_force_leave_postcombat() u1.building = b1 u2.building = b1 eressea.settings.set("rules.owners.force_leave", "1") + eressea.settings.set("NewbieImmunity", "0") u1:clear_orders() u1:add_order("ATTACKIERE " .. itoa36(u2.id)) u2:clear_orders() @@ -109,6 +110,7 @@ function test_force_leave_postcombat() end end assert_not_equal(nil, u3) + assert_equal(nil, u2.building) assert_equal(nil, u3.building) assert_equal(1, u3.number) end diff --git a/src/bind_config.c b/src/bind_config.c index 929e4cca0..faf543f47 100644 --- a/src/bind_config.c +++ b/src/bind_config.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -20,7 +21,9 @@ void config_reset(void) { default_locale = 0; + free_config(); free_locales(); + free_nrmesssages(); free_spells(); free_buildingtypes(); free_shiptypes(); diff --git a/src/bindings.c b/src/bindings.c index 0986ffb37..7bf30202a 100755 --- a/src/bindings.c +++ b/src/bindings.c @@ -1190,7 +1190,7 @@ int eressea_run(lua_State *L, const char *luafile) lua_remove(L, -2); /* try to run configuration scripts: */ - err = run_script(L, "config.lua"); + // err = run_script(L, "config.lua"); err = run_script(L, "custom.lua"); /* run the main script */ diff --git a/src/laws.c b/src/laws.c index d6e005ff8..74e572a78 100644 --- a/src/laws.c +++ b/src/laws.c @@ -119,7 +119,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. int NewbieImmunity(void) { - return config_get_int("NewbieImmunity", 0); + int result = config_get_int("NewbieImmunity", 0); + return result; } bool IsImmune(const faction * f) diff --git a/src/util/nrmessage.c b/src/util/nrmessage.c index 8156b9784..717c4dc1f 100644 --- a/src/util/nrmessage.c +++ b/src/util/nrmessage.c @@ -178,3 +178,16 @@ const char *nrt_section(const nrmessage_type * nrt) { return nrt ? nrt->section : NULL; } + +void free_nrmesssages(void) { + int i; + for (i = 0; i != NRT_MAXHASH; ++i) { + while (nrtypes[i]) { + nrmessage_type *nr = nrtypes[i]; + nrtypes[i] = nr->next; + free(nr->string); + free(nr->vars); + free(nr); + } + } +} diff --git a/src/util/nrmessage.h b/src/util/nrmessage.h index 122b1f1a8..6cc02bfe2 100644 --- a/src/util/nrmessage.h +++ b/src/util/nrmessage.h @@ -31,18 +31,20 @@ extern "C" { extern nrsection *sections; - extern void nrt_register(const struct message_type *mtype, + void free_nrmesssages(void); + + void nrt_register(const struct message_type *mtype, const struct locale *lang, const char *script, int level, const char *section); - extern struct nrmessage_type *nrt_find(const struct locale *, + struct nrmessage_type *nrt_find(const struct locale *, const struct message_type *); - extern const char *nrt_string(const struct nrmessage_type *type); - extern const char *nrt_section(const struct nrmessage_type *mt); + const char *nrt_string(const struct nrmessage_type *type); + const char *nrt_section(const struct nrmessage_type *mt); - extern size_t nr_render(const struct message *msg, const struct locale *lang, + size_t nr_render(const struct message *msg, const struct locale *lang, char *buffer, size_t size, const void *userdata); - extern int nr_level(const struct message *msg); - extern const char *nr_section(const struct message *msg); + int nr_level(const struct message *msg); + const char *nr_section(const struct message *msg); /* before: * fogblock;movement:0;de;{unit} konnte von {region} nicht nach {$dir direction} ausreisen, der Nebel war zu dicht. diff --git a/src/util/nrmessage_struct.h b/src/util/nrmessage_struct.h index 6a3a1d9b0..57f8e644d 100644 --- a/src/util/nrmessage_struct.h +++ b/src/util/nrmessage_struct.h @@ -8,8 +8,8 @@ typedef struct nrmessage_type { const struct message_type *mtype; const struct locale *lang; - const char *string; - const char *vars; + char *string; + char *vars; struct nrmessage_type *next; int level; const char *section; From dcdb5354d9b99d0711f3ddbf6bc5ad0cd86ec89d Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 24 Jan 2017 10:36:27 +0100 Subject: [PATCH 77/84] BUG 2273: runtests.bat fails when config is auto-loaded. run rules tests with the correct configuration, ignore .ini file setting. still not enabling auto-load again, use custom.lua instead. --- scripts/tests/e3/castles.lua | 2 +- tests/runtests.bat | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/tests/e3/castles.lua b/scripts/tests/e3/castles.lua index 1fd4e13e9..df395ed3d 100644 --- a/scripts/tests/e3/castles.lua +++ b/scripts/tests/e3/castles.lua @@ -46,7 +46,7 @@ end function test_build_packice() local r = region.create(0, 0, "packice") - local f = faction.create("noreply@eressea.de", "human", "de") + local f = faction.create("packice@eressea.de", "human", "de") local u = unit.create(f, r, 1) u:clear_orders() u:add_item("stone", 10) diff --git a/tests/runtests.bat b/tests/runtests.bat index e79d27baa..996fb47b7 100644 --- a/tests/runtests.bat +++ b/tests/runtests.bat @@ -6,9 +6,9 @@ IF EXIST ..\build-vs14 SET BUILD=..\build-vs14\eressea\Debug SET SERVER=%BUILD%\eressea.exe %BUILD%\test_eressea.exe %SERVER% ..\scripts\run-tests.lua -%SERVER% ..\scripts\run-tests-e2.lua -%SERVER% ..\scripts\run-tests-e3.lua -%SERVER% ..\scripts\run-tests-e4.lua +%SERVER% -re2 ..\scripts\run-tests-e2.lua +%SERVER% -re3 ..\scripts\run-tests-e3.lua +%SERVER% -re4 ..\scripts\run-tests-e4.lua PAUSE RMDIR /s /q reports DEL score score.alliances datum turn From 044953e4ab2a462fe6d1434201aa88f60d4aa00e Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 25 Jan 2017 18:17:19 +0100 Subject: [PATCH 78/84] add a function to compare size of occupied castles --- src/kernel/building.c | 13 ++++++++++++- src/kernel/building.h | 2 ++ src/kernel/building.test.c | 26 ++++++++++++++++++++++++++ src/kernel/region.c | 14 +++++++++++--- src/kernel/region.test.c | 25 +++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 4 deletions(-) diff --git a/src/kernel/building.c b/src/kernel/building.c index f2c9c9fd2..98caad07a 100644 --- a/src/kernel/building.c +++ b/src/kernel/building.c @@ -335,7 +335,18 @@ const building_type *findbuildingtype(const char *name, return (const building_type *)type.v; } -static int building_protection(const building * b, const unit * u, building_bonus bonus) +int cmp_castle_size(const building * b, const building * a) +{ + if (!b || !b->type->protection || !building_owner(b)) { + return -1; + } + if (!a || !a->type->protection || !building_owner(a)) { + return 1; + } + return b->size - a->size; +} + +int building_protection(const building * b, const unit * u, building_bonus bonus) { int i = 0; int bsize = buildingeffsize(b, false); diff --git a/src/kernel/building.h b/src/kernel/building.h index a6936d90d..8b1a5b05b 100644 --- a/src/kernel/building.h +++ b/src/kernel/building.h @@ -85,6 +85,8 @@ extern "C" { extern struct selist *buildingtypes; extern struct attrib_type at_building_action; + int cmp_castle_size(const struct building * b, const struct building * a); + int building_protection(const struct building * b, const struct unit * u, building_bonus bonus); building_type *bt_get_or_create(const char *name); bool bt_changed(int *cache); const building_type *bt_find(const char *name); diff --git a/src/kernel/building.test.c b/src/kernel/building.test.c index 3b296a6fe..89e2b978c 100644 --- a/src/kernel/building.test.c +++ b/src/kernel/building.test.c @@ -493,9 +493,35 @@ static void test_building_type(CuTest *tc) { test_cleanup(); } +static void test_cmp_castle_size(CuTest *tc) { + region *r; + building *b1, *b2; + building_type *bt_castle; + unit *u1, *u2; + + test_setup(); + bt_castle = test_create_buildingtype("castle"); + bt_castle->protection = building_protection; + r = test_create_region(0, 0, 0); + b1 = test_create_building(r, bt_castle); + b2 = test_create_building(r, bt_castle); + u1 = test_create_unit(test_create_faction(0), r); + u_set_building(u1, b1); + u2 = test_create_unit(test_create_faction(0), r); + u_set_building(u2, b2); + b1->size = 5; + b2->size = 10; + CuAssertTrue(tc, cmp_castle_size(b1, b2)<0); + CuAssertTrue(tc, cmp_castle_size(b2, b1)>0); + CuAssertTrue(tc, cmp_castle_size(b1, NULL)>0); + CuAssertTrue(tc, cmp_castle_size(NULL, b1)<0); + test_cleanup(); +} + CuSuite *get_building_suite(void) { CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_cmp_castle_size); SUITE_ADD_TEST(suite, test_register_building); SUITE_ADD_TEST(suite, test_btype_defaults); SUITE_ADD_TEST(suite, test_building_set_owner); diff --git a/src/kernel/region.c b/src/kernel/region.c index cade135c7..06d2d9d7c 100644 --- a/src/kernel/region.c +++ b/src/kernel/region.c @@ -1324,9 +1324,17 @@ struct message *msg) struct faction *region_get_owner(const struct region *r) { - assert(rule_region_owners()); - if (r->land && r->land->ownership) { - return r->land->ownership->owner; + if (r->land) { + if (rule_region_owners()) { + if (r->land->ownership) { + return r->land->ownership->owner; + } + } + else { + building *b = largestbuilding(r, cmp_castle_size, false); + unit * u = b ? building_owner(b) : NULL; + return u ? u->faction : NULL; + } } return NULL; } diff --git a/src/kernel/region.test.c b/src/kernel/region.test.c index 01ecae2a8..8cf08a62c 100644 --- a/src/kernel/region.test.c +++ b/src/kernel/region.test.c @@ -1,6 +1,8 @@ #include #include "region.h" +#include "building.h" +#include "unit.h" #include "terrain.h" #include "item.h" @@ -31,9 +33,32 @@ void test_terraform(CuTest *tc) { test_cleanup(); } +static void test_region_get_owner(CuTest *tc) { + region *r; + building *b1, *b2; + building_type *bt_castle; + unit *u1, *u2; + + test_setup(); + bt_castle = test_create_buildingtype("castle"); + bt_castle->protection = building_protection; + r = test_create_region(0, 0, 0); + b1 = test_create_building(r, bt_castle); + b2 = test_create_building(r, bt_castle); + b1->size = 5; + b2->size = 10; + u1 = test_create_unit(test_create_faction(0), r); + u_set_building(u1, b1); + u2 = test_create_unit(test_create_faction(0), r); + u_set_building(u2, b2); + CuAssertPtrEquals(tc, u2->faction, region_get_owner(r)); + test_cleanup(); +} + CuSuite *get_region_suite(void) { CuSuite *suite = CuSuiteNew(); SUITE_ADD_TEST(suite, test_terraform); + SUITE_ADD_TEST(suite, test_region_get_owner); return suite; } From 2a1ead6506e7d0cb6033adefbbde727580716b5e Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 25 Jan 2017 20:57:54 +0100 Subject: [PATCH 79/84] BENENNE REGION ist jeder Einheit des Regionsbesitzers erlaubt --- src/kernel/building.test.c | 7 ++----- src/kernel/config.c | 2 +- src/kernel/region.test.c | 7 ++----- src/laws.c | 11 +---------- src/laws.test.c | 39 +++++++++++++++++++++++++++++++++----- src/tests.c | 9 +++++++-- 6 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/kernel/building.test.c b/src/kernel/building.test.c index 89e2b978c..e02d16556 100644 --- a/src/kernel/building.test.c +++ b/src/kernel/building.test.c @@ -496,15 +496,12 @@ static void test_building_type(CuTest *tc) { static void test_cmp_castle_size(CuTest *tc) { region *r; building *b1, *b2; - building_type *bt_castle; unit *u1, *u2; test_setup(); - bt_castle = test_create_buildingtype("castle"); - bt_castle->protection = building_protection; r = test_create_region(0, 0, 0); - b1 = test_create_building(r, bt_castle); - b2 = test_create_building(r, bt_castle); + b1 = test_create_building(r, NULL); + b2 = test_create_building(r, NULL); u1 = test_create_unit(test_create_faction(0), r); u_set_building(u1, b1); u2 = test_create_unit(test_create_faction(0), r); diff --git a/src/kernel/config.c b/src/kernel/config.c index 109913560..83d0808da 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -203,7 +203,7 @@ param_t findparam(const char *s, const struct locale * lang) void **tokens = get_translations(lang, UT_PARAMS); critbit_tree *cb = (critbit_tree *)*tokens; if (!cb) { - log_error("no parameters defined in locale %s", locale_name(lang)); + log_warning("no parameters defined in locale %s", locale_name(lang)); } else if (cb_find_prefix(cb, str, strlen(str), &match, 1, 0)) { cb_get_kv(match, &i, sizeof(int)); diff --git a/src/kernel/region.test.c b/src/kernel/region.test.c index 8cf08a62c..892b37a8e 100644 --- a/src/kernel/region.test.c +++ b/src/kernel/region.test.c @@ -36,15 +36,12 @@ void test_terraform(CuTest *tc) { static void test_region_get_owner(CuTest *tc) { region *r; building *b1, *b2; - building_type *bt_castle; unit *u1, *u2; test_setup(); - bt_castle = test_create_buildingtype("castle"); - bt_castle->protection = building_protection; r = test_create_region(0, 0, 0); - b1 = test_create_building(r, bt_castle); - b2 = test_create_building(r, bt_castle); + b1 = test_create_building(r, NULL); + b2 = test_create_building(r, NULL); b1->size = 5; b2->size = 10; u1 = test_create_unit(test_create_faction(0), r); diff --git a/src/laws.c b/src/laws.c index 74e572a78..769bfc9d3 100644 --- a/src/laws.c +++ b/src/laws.c @@ -1892,16 +1892,7 @@ int name_cmd(struct unit *u, struct order *ord) break; case P_REGION: - if (!b) { - cmistake(u, ord, 145, MSG_EVENT); - break; - } - if (building_owner(b) != u) { - cmistake(u, ord, 148, MSG_EVENT); - break; - } - - if (b != largestbuilding(r, get_cmp_region_owner(), false)) { + if (u->faction != region_get_owner(r)) { cmistake(u, ord, 147, MSG_EVENT); break; } diff --git a/src/laws.test.c b/src/laws.test.c index d4753ec19..67a9bb810 100644 --- a/src/laws.test.c +++ b/src/laws.test.c @@ -812,10 +812,7 @@ static void test_name_region(CuTest *tc) { f = u->faction; ord = create_order(K_NAME, f->locale, "%s Hodor", LOC(f->locale, parameters[P_REGION])); - name_cmd(u, ord); - CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "error145")); - - u->building = test_create_building(u->region, 0); + u_set_building(u, test_create_building(u->region, 0)); name_cmd(u, ord); CuAssertStrEquals(tc, "Hodor", u->region->land->name); free_order(ord); @@ -1060,7 +1057,7 @@ static void test_name_cmd(CuTest *tc) { free_order(ord); ord = create_order(K_NAME, f->locale, "%s ' Ho\tdor '", LOC(f->locale, parameters[P_BUILDING])); - u->building = test_create_building(u->region, 0); + u_set_building(u, test_create_building(u->region, 0)); name_cmd(u, ord); CuAssertStrEquals(tc, "Hodor", u->building->name); free_order(ord); @@ -1073,6 +1070,37 @@ static void test_name_cmd(CuTest *tc) { test_cleanup(); } +static void test_name_cmd_2274(CuTest *tc) { + unit *u1, *u2, *u3; + faction *f; + region *r; + + test_setup(); + r = test_create_region(0, 0, 0); + u1 = test_create_unit(test_create_faction(0), r); + u2 = test_create_unit(test_create_faction(0), r); + u3 = test_create_unit(u2->faction, r); + u_set_building(u1, test_create_building(r, NULL)); + u1->building->size = 10; + u_set_building(u2, test_create_building(r, NULL)); + u2->building->size = 20; + + f = u2->faction; + u2->thisorder = create_order(K_NAME, f->locale, "%s Heimat", LOC(f->locale, parameters[P_REGION])); + name_cmd(u2, u2->thisorder); + CuAssertStrEquals(tc, "Heimat", r->land->name); + f = u3->faction; + u3->thisorder = create_order(K_NAME, f->locale, "%s Hodor", LOC(f->locale, parameters[P_REGION])); + name_cmd(u3, u3->thisorder); + CuAssertStrEquals(tc, "Hodor", r->land->name); + f = u1->faction; + u1->thisorder = create_order(K_NAME, f->locale, "%s notallowed", LOC(f->locale, parameters[P_REGION])); + name_cmd(u1, u1->thisorder); + CuAssertStrEquals(tc, "Hodor", r->land->name); + + test_cleanup(); +} + static void test_ally_cmd(CuTest *tc) { unit *u; faction * f; @@ -1481,6 +1509,7 @@ CuSuite *get_laws_suite(void) SUITE_ADD_TEST(suite, test_nmr_warnings); SUITE_ADD_TEST(suite, test_ally_cmd); SUITE_ADD_TEST(suite, test_name_cmd); + SUITE_ADD_TEST(suite, test_name_cmd_2274); SUITE_ADD_TEST(suite, test_ally_cmd_errors); SUITE_ADD_TEST(suite, test_long_order_normal); SUITE_ADD_TEST(suite, test_long_order_none); diff --git a/src/tests.c b/src/tests.c index 15ae677fe..eb2631afe 100644 --- a/src/tests.c +++ b/src/tests.c @@ -225,8 +225,13 @@ building * test_create_building(region * r, const building_type * btype) { building * b; assert(r); - b = new_building(btype ? btype : test_create_buildingtype("castle"), r, default_locale); - b->size = b->type->maxsize > 0 ? b->type->maxsize : 1; + if (!btype) { + building_type *bt_castle = test_create_buildingtype("castle"); + bt_castle->protection = building_protection; + btype = bt_castle; + } + b = new_building(btype, r, default_locale); + b->size = btype->maxsize > 0 ? btype->maxsize : 1; return b; } From 21514f3bfe6e177906807d5bc090979a79342718 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 25 Jan 2017 21:03:08 +0100 Subject: [PATCH 80/84] BESCHREIBE REGION ist jeder Einheit des Regionsbesitzers erlaubt --- src/laws.c | 20 +------------------- src/laws.test.c | 5 +++++ 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/laws.c b/src/laws.c index 769bfc9d3..6b0bfda8d 100644 --- a/src/laws.c +++ b/src/laws.c @@ -1538,16 +1538,6 @@ int prefix_cmd(unit * u, struct order *ord) return 0; } -static cmp_building_cb get_cmp_region_owner(void) -{ - if (rule_region_owners()) { - return &cmp_current_owner; - } - else { - return &cmp_wage; - } -} - int display_cmd(unit * u, struct order *ord) { char token[128]; @@ -1597,15 +1587,7 @@ int display_cmd(unit * u, struct order *ord) break; case P_REGION: - if (!u->building) { - cmistake(u, ord, 145, MSG_EVENT); - break; - } - if (building_owner(u->building) != u) { - cmistake(u, ord, 148, MSG_EVENT); - break; - } - if (u->building != largestbuilding(r, get_cmp_region_owner(), false)) { + if (u->faction != region_get_owner(r)) { cmistake(u, ord, 147, MSG_EVENT); break; } diff --git a/src/laws.test.c b/src/laws.test.c index 67a9bb810..5eb742809 100644 --- a/src/laws.test.c +++ b/src/laws.test.c @@ -229,6 +229,11 @@ static void test_display_cmd(CuTest *tc) { CuAssertPtrEquals(tc, NULL, u->display); free_order(ord); + ord = create_order(K_DISPLAY, f->locale, "%s Hodor", LOC(f->locale, parameters[P_REGION])); + CuAssertIntEquals(tc, 0, display_cmd(u, ord)); + CuAssertPtrEquals(tc, NULL, r->display); + free_order(ord); + test_cleanup(); } From e4a58b2e62763926b46fec4e54807f0070932cdc Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 25 Jan 2017 21:26:30 +0100 Subject: [PATCH 81/84] hack compress to not use /home/enno/bin script --- process/compress.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/process/compress.sh b/process/compress.sh index ff152b9f1..e50cf1940 100755 --- a/process/compress.sh +++ b/process/compress.sh @@ -20,5 +20,5 @@ if [ ! -d $GAME/reports ]; then fi cd $GAME/reports -$HOME/bin/compress.py $TURN "$GAME_NAME" +$ERESSEA/server/bin/compress.py $TURN "$GAME_NAME" cd - From 350357120adc3d7014ce97f0a1d66cf9209a9854 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 26 Jan 2017 16:05:44 +0100 Subject: [PATCH 82/84] fix duplicate cutest library conflict and crash --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8fd15f201..405b86a03 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,6 @@ endif(WIN32) project (eressea-server C) - enable_testing() find_package (LibXml2) find_package (SQLite3) From 57f6c56e890fdd857d1acb9f313f35581c47d700 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 26 Jan 2017 17:41:21 +0100 Subject: [PATCH 83/84] remove quicklist shim, use selist everywhere --- src/bindings.h | 2 +- src/sqlite.c | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/bindings.h b/src/bindings.h index b4523e582..354bb199a 100755 --- a/src/bindings.h +++ b/src/bindings.h @@ -15,8 +15,8 @@ extern "C" { #endif struct lua_State; - struct selist; struct _dictionary_; + struct selist; int tolua_sqlite_open(struct lua_State *L); int tolua_bindings_open(struct lua_State *L, const struct _dictionary_ *d); diff --git a/src/sqlite.c b/src/sqlite.c index aea0f5d20..2f23d41d5 100644 --- a/src/sqlite.c +++ b/src/sqlite.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include #include @@ -72,10 +72,10 @@ typedef struct db_faction { char *name; } db_faction; -static struct quicklist * +static struct selist * read_factions(sqlite3 * db, int game_id) { int res; - quicklist *result = 0; + selist *result = 0; const char * sql = "SELECT f.id, fd.code, fd.name, fd.email FROM faction f" " LEFT OUTER JOIN faction_data fd" @@ -97,7 +97,7 @@ read_factions(sqlite3 * db, int game_id) { if (text) dbf->name = strdup(text); text = (const char *)sqlite3_column_text(stmt, 3); if (text) dbf->email = strdup(text); - ql_push(&result, dbf); + selist_push(&result, dbf); res = sqlite3_step(stmt); } sqlite3_finalize(stmt); @@ -134,13 +134,18 @@ static void update_faction(sqlite3 *db, const faction *f) { } int db_update_factions(sqlite3 * db, bool force, int game_id) { - quicklist *ql = read_factions(db, game_id); + selist *ql = read_factions(db, game_id); faction *f; sqlite3_exec(db, "BEGIN", 0, 0, 0); for (f = factions; f; f = f->next) { bool update = force; db_faction *dbf = 0; +<<<<<<< HEAD ql_iter it = qli_init(&ql); +======= +#ifdef SELIST_TODO + selist_iter it = qli_init(&ql); +>>>>>>> remove quicklist shim, use selist everywhere while (qli_more(it)) { db_faction *df = (db_faction*)qli_next(&it); if (f->no == df->no || strcmp(f->email, df->email) == 0 || strcmp(f->name, df->name) == 0) { @@ -175,12 +180,12 @@ int db_update_factions(sqlite3 * db, bool force, int game_id) { int db_update_scores(sqlite3 * db, bool force) { /* - const char *sql_ins = + const char *sselist_ins = "INSERT OR FAIL INTO score (value,faction_id,turn) VALUES (?,?,?)"; - sqlite3_stmt *stmt_ins = stmt_cache_get(db, sql_ins); - const char *sql_upd = + sqlite3_stmt *stmt_ins = stmt_cache_get(db, sselist_ins); + const char *sselist_upd = "UPDATE score set value=? WHERE faction_id=? AND turn=?"; - sqlite3_stmt *stmt_upd = stmt_cache_get(db, sql_upd); + sqlite3_stmt *stmt_upd = stmt_cache_get(db, sselist_upd); faction *f; sqlite3_exec(db, "BEGIN", 0, 0, 0); for (f = factions; f; f = f->next) { From 23b211d9e483243a50ec6fd16826b9362f57e1ee Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 26 Jan 2017 18:58:29 +0100 Subject: [PATCH 84/84] fix study.c teacher messaging --- clibs | 2 +- src/sqlite.c | 82 +++++++++++++++++++++++++++--------------------- src/study.c | 50 +++++++++++++++++++---------- src/study.h | 4 +-- src/study.test.c | 8 ++--- src/travelthru.c | 3 +- 6 files changed, 90 insertions(+), 59 deletions(-) diff --git a/clibs b/clibs index 1052905e0..f91ef37f0 160000 --- a/clibs +++ b/clibs @@ -1 +1 @@ -Subproject commit 1052905e08314de8778750d7585474182723111e +Subproject commit f91ef37f08c5244bf616f1836c0aa9caaf36805c diff --git a/src/sqlite.c b/src/sqlite.c index 2f23d41d5..edb5bfc62 100644 --- a/src/sqlite.c +++ b/src/sqlite.c @@ -133,47 +133,59 @@ static void update_faction(sqlite3 *db, const faction *f) { sqlite3_finalize(stmt); } +struct cb_data { + const faction *f; + sqlite3 *db; + db_faction *dbf; +}; + +static bool db_faction_cb(void *el, void *arg) { + db_faction *df = (db_faction *)el; + struct cb_data *cb = (struct cb_data *)arg; + const faction *f = cb->f; + + if (f->no == df->no || strcmp(f->email, df->email) == 0 || strcmp(f->name, df->name) == 0) { + cb->dbf = df; + } + if (f->subscription == df->uid) { + cb->dbf = df; + return false; + } + return true; +} + int db_update_factions(sqlite3 * db, bool force, int game_id) { selist *ql = read_factions(db, game_id); - faction *f; - sqlite3_exec(db, "BEGIN", 0, 0, 0); - for (f = factions; f; f = f->next) { - bool update = force; - db_faction *dbf = 0; -<<<<<<< HEAD - ql_iter it = qli_init(&ql); -======= -#ifdef SELIST_TODO - selist_iter it = qli_init(&ql); ->>>>>>> remove quicklist shim, use selist everywhere - while (qli_more(it)) { - db_faction *df = (db_faction*)qli_next(&it); - if (f->no == df->no || strcmp(f->email, df->email) == 0 || strcmp(f->name, df->name) == 0) { - dbf = df; + if (ql) { + faction *f; + struct cb_data cbdata; + cbdata.db = db; + cbdata.dbf = NULL; + sqlite3_exec(db, "BEGIN", 0, 0, 0); + for (f = factions; f; f = f->next) { + bool update = force; + cbdata.f = f; + selist_foreach_ex(ql, db_faction_cb, &cbdata); + if (cbdata.dbf) { + const db_faction *dbf = cbdata.dbf; + if (dbf->uid != f->subscription) { + log_warning("faction %s(%d) not found in database, but matches %d\n", itoa36(f->no), f->subscription, dbf->uid); + f->subscription = dbf->uid; + } + update = (dbf->no != f->no) || (strcmp(f->email, dbf->email) != 0) || (strcmp(f->name, dbf->name) != 0); } - if (f->subscription == df->uid) { - dbf = df; - break; + else { + f->subscription = insert_faction(db, game_id, f); + log_warning("faction %s not found in database, created as %d\n", itoa36(f->no), f->subscription); + update = true; + } + if (update) { + update_faction(db, f); + log_debug("faction %s updated\n", itoa36(f->no)); } } - if (dbf) { - if (dbf->uid != f->subscription) { - log_warning("faction %s(%d) not found in database, but matches %d\n", itoa36(f->no), f->subscription, dbf->uid); - f->subscription = dbf->uid; - } - update = (dbf->no != f->no) || (strcmp(f->email, dbf->email) != 0) || (strcmp(f->name, dbf->name) != 0); - } - else { - f->subscription = insert_faction(db, game_id, f); - log_warning("faction %s not found in database, created as %d\n", itoa36(f->no), f->subscription); - update = true; - } - if (update) { - update_faction(db, f); - log_debug("faction %s updated\n", itoa36(f->no)); - } + sqlite3_exec(db, "COMMIT", 0, 0, 0); } - sqlite3_exec(db, "COMMIT", 0, 0, 0); return SQLITE_OK; } diff --git a/src/study.c b/src/study.c index b69b4359f..c6dc3b260 100644 --- a/src/study.c +++ b/src/study.c @@ -52,8 +52,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include - -#include +#include /* libc includes */ #include @@ -222,7 +221,7 @@ teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk, a = a_add(&student->attribs, a_new(&at_learning)); teach = (teaching_info *)a->data.v; } - ql_push(&teach->teachers, teacher); + selist_push(&teach->teachers, teacher); teach->value += n; if (student->building && teacher->building == student->building) { @@ -531,6 +530,36 @@ static bool ExpensiveMigrants(void) return rule; } +struct teach_data { + unit *u; + skill_t sk; +}; + +static bool cb_msg_teach(void *el, void *arg) { + struct teach_data *td = (struct teach_data *)arg; + unit *ut = (unit *)el; + unit * u = td->u; + skill_t sk = td->sk; + if (ut->faction != u->faction) { + bool feedback = alliedunit(u, ut->faction, HELP_GUARD); + if (feedback) { + ADDMSG(&ut->faction->msgs, msg_message("teach_teacher", + "teacher student skill level", ut, u, sk, + effskill(u, sk, 0))); + } + ADDMSG(&u->faction->msgs, msg_message("teach_student", + "teacher student skill", ut, u, sk)); + } + return true; +} + +static void msg_teachers(struct selist *teachers, struct unit *u, skill_t sk) { + struct teach_data cbdata; + cbdata.sk = sk; + cbdata.u = u; + selist_foreach_ex(teachers, cb_msg_teach, &cbdata); +} + int study_cmd(unit * u, order * ord) { region *r = u->region; @@ -755,19 +784,8 @@ int study_cmd(unit * u, order * ord) learn_skill(u, sk, days); if (a != NULL) { - ql_iter qli = qli_init(&teach->teachers); - while (qli_more(qli)) { - unit *teacher = (unit *)qli_next(&qli); - if (teacher->faction != u->faction) { - bool feedback = alliedunit(u, teacher->faction, HELP_GUARD); - if (feedback) { - ADDMSG(&teacher->faction->msgs, msg_message("teach_teacher", - "teacher student skill level", teacher, u, sk, - effskill(u, sk, 0))); - } - ADDMSG(&u->faction->msgs, msg_message("teach_student", - "teacher student skill", teacher, u, sk)); - } + if (teach->teachers) { + msg_teachers(teach->teachers, u, sk); } a_remove(&u->attribs, a); a = NULL; diff --git a/src/study.h b/src/study.h index 8067bc9bd..0f8ae70f5 100644 --- a/src/study.h +++ b/src/study.h @@ -27,7 +27,7 @@ extern "C" { #endif struct unit; - struct quicklist; + struct selist; int teach_cmd(struct unit *u, struct order *ord); int study_cmd(struct unit *u, struct order *ord); @@ -48,7 +48,7 @@ extern "C" { #define TEACHNUMBER 10 typedef struct teaching_info { - struct quicklist *teachers; + struct selist *teachers; int value; } teaching_info; diff --git a/src/study.test.c b/src/study.test.c index 4c1e5f171..594ca600c 100644 --- a/src/study.test.c +++ b/src/study.test.c @@ -19,7 +19,7 @@ #include #include -#include +#include #include @@ -539,9 +539,9 @@ static void test_teach_message(CuTest *tc) { teach = (teaching_info *)a->data.v; CuAssertPtrNotNull(tc, teach->teachers); CuAssertIntEquals(tc, 600, teach->value); - CuAssertIntEquals(tc, 2, ql_length(teach->teachers)); - CuAssertPtrEquals(tc, u1, ql_get(teach->teachers, 0)); - CuAssertPtrEquals(tc, u2, ql_get(teach->teachers, 1)); + CuAssertIntEquals(tc, 2, selist_length(teach->teachers)); + CuAssertPtrEquals(tc, u1, selist_get(teach->teachers, 0)); + CuAssertPtrEquals(tc, u2, selist_get(teach->teachers, 1)); study_cmd(u, u->thisorder); CuAssertPtrEquals(tc, NULL, test_find_messagetype(u1->faction->msgs, "teach_teacher")); CuAssertPtrNotNull(tc, test_find_messagetype(u2->faction->msgs, "teach_teacher")); diff --git a/src/travelthru.c b/src/travelthru.c index a546c976c..73aa97757 100644 --- a/src/travelthru.c +++ b/src/travelthru.c @@ -105,10 +105,11 @@ struct cb_data { struct region *r; }; -void cb_map(void *data, void *ex) { +static bool cb_map(void *data, void *ex) { struct cb_data *cb = (struct cb_data *)ex; struct unit *u = (struct unit *)data; cb->call(cb->r, u, cb->data); + return true; } void travelthru_map(region * r, void(*cb)(region *, struct unit *, void *), void *data)