forked from github/server
Merge pull request #196 from badgerman/develop
bugfixes in recent refactorings: report writing, syntax errors.
This commit is contained in:
commit
b3214a1bf8
|
@ -142,6 +142,7 @@ function process(rules, orders)
|
||||||
callbacks(rules, 'update')
|
callbacks(rules, 'update')
|
||||||
|
|
||||||
write_files(config.locales)
|
write_files(config.locales)
|
||||||
|
dbupdate()
|
||||||
|
|
||||||
file = '' .. get_turn() .. '.dat'
|
file = '' .. get_turn() .. '.dat'
|
||||||
if eressea.write_game(file)~=0 then
|
if eressea.write_game(file)~=0 then
|
||||||
|
@ -161,9 +162,6 @@ function run_turn(rules)
|
||||||
orderfile = orderfile or config.basepath .. '/orders.' .. turn
|
orderfile = orderfile or config.basepath .. '/orders.' .. turn
|
||||||
eressea.log.debug("executing turn " .. get_turn() .. " with " .. orderfile .. " with rules=" .. config.rules)
|
eressea.log.debug("executing turn " .. get_turn() .. " with " .. orderfile .. " with rules=" .. config.rules)
|
||||||
local result = process(rules, orderfile)
|
local result = process(rules, orderfile)
|
||||||
if result==0 then
|
|
||||||
dbupdate()
|
|
||||||
end
|
|
||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -287,7 +287,6 @@ void syntax_error(const struct unit *u, struct order *ord)
|
||||||
message * result;
|
message * result;
|
||||||
result = msg_error(u, ord, 10);
|
result = msg_error(u, ord, 10);
|
||||||
ADDMSG(&u->faction->msgs, result);
|
ADDMSG(&u->faction->msgs, result);
|
||||||
msg_release(result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern unsigned int new_hashstring(const char *s);
|
extern unsigned int new_hashstring(const char *s);
|
||||||
|
@ -306,6 +305,7 @@ void free_messagelist(message_list * msgs)
|
||||||
|
|
||||||
message *add_message(message_list ** pm, message * m)
|
message *add_message(message_list ** pm, message * m)
|
||||||
{
|
{
|
||||||
|
assert(m->type);
|
||||||
if (!lomem && m != NULL) {
|
if (!lomem && m != NULL) {
|
||||||
struct mlist *mnew = malloc(sizeof(struct mlist));
|
struct mlist *mnew = malloc(sizeof(struct mlist));
|
||||||
if (*pm == NULL) {
|
if (*pm == NULL) {
|
||||||
|
|
|
@ -42,7 +42,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
/* util includes */
|
/* util includes */
|
||||||
#include <util/attrib.h>
|
#include <util/attrib.h>
|
||||||
#include <util/bsdstring.h>
|
#include <util/bsdstring.h>
|
||||||
#include <util/goodies.h>
|
#include <util/strings.h>
|
||||||
#include <util/lists.h>
|
#include <util/lists.h>
|
||||||
#include <util/log.h>
|
#include <util/log.h>
|
||||||
#include <util/resolve.h>
|
#include <util/resolve.h>
|
||||||
|
|
|
@ -22,7 +22,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
/* util includes */
|
/* util includes */
|
||||||
#include <critbit.h>
|
#include <critbit.h>
|
||||||
#include <util/goodies.h>
|
#include <util/strings.h>
|
||||||
#include <util/language.h>
|
#include <util/language.h>
|
||||||
#include <util/log.h>
|
#include <util/log.h>
|
||||||
#include <util/umlaut.h>
|
#include <util/umlaut.h>
|
||||||
|
|
|
@ -48,7 +48,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <util/base36.h>
|
#include <util/base36.h>
|
||||||
#include <util/bsdstring.h>
|
#include <util/bsdstring.h>
|
||||||
#include <util/event.h>
|
#include <util/event.h>
|
||||||
#include <util/goodies.h>
|
#include <util/strings.h>
|
||||||
#include <util/language.h>
|
#include <util/language.h>
|
||||||
#include <util/lists.h>
|
#include <util/lists.h>
|
||||||
#include <util/log.h>
|
#include <util/log.h>
|
||||||
|
|
78
src/laws.c
78
src/laws.c
|
@ -2894,7 +2894,7 @@ void restack_units(void)
|
||||||
cmistake(u, ord, 260, MSG_EVENT);
|
cmistake(u, ord, 260, MSG_EVENT);
|
||||||
}
|
}
|
||||||
else if (v == u) {
|
else if (v == u) {
|
||||||
cmistake(u, ord, 10, MSG_EVENT);
|
syntax_error(u, ord);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
switch (p) {
|
switch (p) {
|
||||||
|
@ -4381,17 +4381,17 @@ void init_processor(void)
|
||||||
add_proc_order(p, K_GROUP, group_cmd, 0, NULL);
|
add_proc_order(p, K_GROUP, group_cmd, 0, NULL);
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_order(p, K_QUIT, &quit_cmd, 0, NULL);
|
add_proc_order(p, K_QUIT, quit_cmd, 0, NULL);
|
||||||
// add_proc_order(p, K_URSPRUNG, &origin_cmd, 0, NULL);
|
// add_proc_order(p, K_URSPRUNG, origin_cmd, 0, NULL);
|
||||||
add_proc_order(p, K_ALLY, &ally_cmd, 0, NULL);
|
add_proc_order(p, K_ALLY, ally_cmd, 0, NULL);
|
||||||
add_proc_order(p, K_PREFIX, &prefix_cmd, 0, NULL);
|
add_proc_order(p, K_PREFIX, prefix_cmd, 0, NULL);
|
||||||
add_proc_order(p, K_SETSTEALTH, &setstealth_cmd, 0, NULL);
|
add_proc_order(p, K_SETSTEALTH, setstealth_cmd, 0, NULL);
|
||||||
add_proc_order(p, K_STATUS, &status_cmd, 0, NULL);
|
add_proc_order(p, K_STATUS, status_cmd, 0, NULL);
|
||||||
add_proc_order(p, K_COMBATSPELL, &combatspell_cmd, 0, NULL);
|
add_proc_order(p, K_COMBATSPELL, combatspell_cmd, 0, NULL);
|
||||||
add_proc_order(p, K_DISPLAY, &display_cmd, 0, NULL);
|
add_proc_order(p, K_DISPLAY, display_cmd, 0, NULL);
|
||||||
add_proc_order(p, K_NAME, &name_cmd, 0, NULL);
|
add_proc_order(p, K_NAME, name_cmd, 0, NULL);
|
||||||
add_proc_order(p, K_GUARD, &guard_off_cmd, 0, NULL);
|
add_proc_order(p, K_GUARD, guard_off_cmd, 0, NULL);
|
||||||
add_proc_order(p, K_RESHOW, &reshow_cmd, 0, NULL);
|
add_proc_order(p, K_RESHOW, reshow_cmd, 0, NULL);
|
||||||
|
|
||||||
if (get_param_int(global.parameters, "rules.alliances", 0) == 1) {
|
if (get_param_int(global.parameters, "rules.alliances", 0) == 1) {
|
||||||
p += 10;
|
p += 10;
|
||||||
|
@ -4403,7 +4403,7 @@ void init_processor(void)
|
||||||
add_proc_order(p, K_MAIL, mail_cmd, 0, "Botschaften");
|
add_proc_order(p, K_MAIL, mail_cmd, 0, "Botschaften");
|
||||||
|
|
||||||
p += 10; /* all claims must be done before we can USE */
|
p += 10; /* all claims must be done before we can USE */
|
||||||
add_proc_region(p, &enter_1, "Betreten (1. Versuch)"); /* for GIVE CONTROL */
|
add_proc_region(p, enter_1, "Betreten (1. Versuch)"); /* for GIVE CONTROL */
|
||||||
add_proc_order(p, K_USE, use_cmd, 0, "Benutzen");
|
add_proc_order(p, K_USE, use_cmd, 0, "Benutzen");
|
||||||
|
|
||||||
p += 10; /* in case it has any effects on alliance victories */
|
p += 10; /* in case it has any effects on alliance victories */
|
||||||
|
@ -4426,11 +4426,11 @@ void init_processor(void)
|
||||||
p += 10; /* can't allow reserve before siege (weapons) */
|
p += 10; /* can't allow reserve before siege (weapons) */
|
||||||
add_proc_region(p, enter_1, "Betreten (3. Versuch)"); /* to claim a castle after a victory and to be able to DESTROY it in the same turn */
|
add_proc_region(p, enter_1, "Betreten (3. Versuch)"); /* to claim a castle after a victory and to be able to DESTROY it in the same turn */
|
||||||
if (get_param_int(global.parameters, "rules.reserve.twophase", 0)) {
|
if (get_param_int(global.parameters, "rules.reserve.twophase", 0)) {
|
||||||
add_proc_order(p, K_RESERVE, &reserve_self, 0, "RESERVE (self)");
|
add_proc_order(p, K_RESERVE, reserve_self, 0, "RESERVE (self)");
|
||||||
p += 10;
|
p += 10;
|
||||||
}
|
}
|
||||||
add_proc_order(p, K_RESERVE, &reserve_cmd, 0, "RESERVE (all)");
|
add_proc_order(p, K_RESERVE, reserve_cmd, 0, "RESERVE (all)");
|
||||||
add_proc_order(p, K_CLAIM, &claim_cmd, 0, NULL);
|
add_proc_order(p, K_CLAIM, claim_cmd, 0, NULL);
|
||||||
add_proc_unit(p, follow_unit, "Folge auf Einheiten setzen");
|
add_proc_unit(p, follow_unit, "Folge auf Einheiten setzen");
|
||||||
|
|
||||||
p += 10; /* rest rng again before economics */
|
p += 10; /* rest rng again before economics */
|
||||||
|
@ -4438,13 +4438,13 @@ void init_processor(void)
|
||||||
add_proc_region(p, force_leave, "kick non-allies out of buildings/ships");
|
add_proc_region(p, force_leave, "kick non-allies out of buildings/ships");
|
||||||
}
|
}
|
||||||
add_proc_region(p, economics, "Zerstoeren, Geben, Rekrutieren, Vergessen");
|
add_proc_region(p, economics, "Zerstoeren, Geben, Rekrutieren, Vergessen");
|
||||||
add_proc_order(p, K_PROMOTION, &promotion_cmd, 0, "Heldenbefoerderung");
|
add_proc_order(p, K_PROMOTION, promotion_cmd, 0, "Heldenbefoerderung");
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
if (!keyword_disabled(K_PAY)) {
|
if (!keyword_disabled(K_PAY)) {
|
||||||
add_proc_order(p, K_PAY, &pay_cmd, 0, "Gebaeudeunterhalt (disable)");
|
add_proc_order(p, K_PAY, pay_cmd, 0, "Gebaeudeunterhalt (disable)");
|
||||||
}
|
}
|
||||||
add_proc_postregion(p, &maintain_buildings_1,
|
add_proc_postregion(p, maintain_buildings_1,
|
||||||
"Gebaeudeunterhalt (1. Versuch)");
|
"Gebaeudeunterhalt (1. Versuch)");
|
||||||
|
|
||||||
p += 10; /* QUIT fuer sich alleine */
|
p += 10; /* QUIT fuer sich alleine */
|
||||||
|
@ -4452,68 +4452,68 @@ void init_processor(void)
|
||||||
|
|
||||||
if (!keyword_disabled(K_CAST)) {
|
if (!keyword_disabled(K_CAST)) {
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_global(p, &magic, "Zaubern");
|
add_proc_global(p, magic, "Zaubern");
|
||||||
}
|
}
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_order(p, K_TEACH, &teach_cmd, PROC_THISORDER | PROC_LONGORDER,
|
add_proc_order(p, K_TEACH, teach_cmd, PROC_THISORDER | PROC_LONGORDER,
|
||||||
"Lehren");
|
"Lehren");
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_order(p, K_STUDY, &learn_cmd, PROC_THISORDER | PROC_LONGORDER,
|
add_proc_order(p, K_STUDY, learn_cmd, PROC_THISORDER | PROC_LONGORDER,
|
||||||
"Lernen");
|
"Lernen");
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_order(p, K_MAKE, &make_cmd, PROC_THISORDER | PROC_LONGORDER,
|
add_proc_order(p, K_MAKE, make_cmd, PROC_THISORDER | PROC_LONGORDER,
|
||||||
"Produktion");
|
"Produktion");
|
||||||
add_proc_postregion(p, &produce, "Arbeiten, Handel, Rekruten");
|
add_proc_postregion(p, produce, "Arbeiten, Handel, Rekruten");
|
||||||
add_proc_postregion(p, &split_allocations, "Produktion II");
|
add_proc_postregion(p, split_allocations, "Produktion II");
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_region(p, &enter_2, "Betreten (4. Versuch)"); /* Once again after QUIT */
|
add_proc_region(p, enter_2, "Betreten (4. Versuch)"); /* Once again after QUIT */
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_region(p, &sinkships, "Schiffe sinken");
|
add_proc_region(p, sinkships, "Schiffe sinken");
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_global(p, &movement, "Bewegungen");
|
add_proc_global(p, movement, "Bewegungen");
|
||||||
|
|
||||||
if (get_param_int(global.parameters, "work.auto", 0)) {
|
if (get_param_int(global.parameters, "work.auto", 0)) {
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_region(p, &auto_work, "Arbeiten (auto)");
|
add_proc_region(p, auto_work, "Arbeiten (auto)");
|
||||||
}
|
}
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_order(p, K_GUARD, &guard_on_cmd, 0, "Bewache (an)");
|
add_proc_order(p, K_GUARD, guard_on_cmd, 0, "Bewache (an)");
|
||||||
|
|
||||||
if (get_param_int(global.parameters, "rules.encounters", 0)) {
|
if (get_param_int(global.parameters, "rules.encounters", 0)) {
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_global(p, &encounters, "Zufallsbegegnungen");
|
add_proc_global(p, encounters, "Zufallsbegegnungen");
|
||||||
}
|
}
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_unit(p, &monster_kills_peasants,
|
add_proc_unit(p, monster_kills_peasants,
|
||||||
"Monster fressen und vertreiben Bauern");
|
"Monster fressen und vertreiben Bauern");
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_global(p, &randomevents, "Zufallsereignisse");
|
add_proc_global(p, randomevents, "Zufallsereignisse");
|
||||||
|
|
||||||
p += 10;
|
p += 10;
|
||||||
|
|
||||||
add_proc_global(p, &monthly_healing, "Regeneration (HP)");
|
add_proc_global(p, monthly_healing, "Regeneration (HP)");
|
||||||
add_proc_global(p, ®enerate_aura, "Regeneration (Aura)");
|
add_proc_global(p, regenerate_aura, "Regeneration (Aura)");
|
||||||
if (!keyword_disabled(K_DEFAULT)) {
|
if (!keyword_disabled(K_DEFAULT)) {
|
||||||
add_proc_global(p, &defaultorders, "Defaults setzen");
|
add_proc_global(p, defaultorders, "Defaults setzen");
|
||||||
}
|
}
|
||||||
add_proc_global(p, &demographics, "Nahrung, Seuchen, Wachstum, Wanderung");
|
add_proc_global(p, demographics, "Nahrung, Seuchen, Wachstum, Wanderung");
|
||||||
|
|
||||||
if (!keyword_disabled(K_SORT)) {
|
if (!keyword_disabled(K_SORT)) {
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_global(p, restack_units, "Einheiten sortieren");
|
add_proc_global(p, restack_units, "Einheiten sortieren");
|
||||||
}
|
}
|
||||||
if (!keyword_disabled(K_NUMBER)) {
|
if (!keyword_disabled(K_NUMBER)) {
|
||||||
add_proc_order(p, K_NUMBER, &renumber_cmd, 0, "Neue Nummern (Einheiten)");
|
add_proc_order(p, K_NUMBER, renumber_cmd, 0, "Neue Nummern (Einheiten)");
|
||||||
p += 10;
|
p += 10;
|
||||||
add_proc_global(p, &renumber_factions, "Neue Nummern");
|
add_proc_global(p, renumber_factions, "Neue Nummern");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2527,7 +2527,7 @@ static castorder *cast_cmd(unit * u, order * ord)
|
||||||
level = _min(p, level);
|
level = _min(p, level);
|
||||||
if (level < 1) {
|
if (level < 1) {
|
||||||
/* Fehler "Das macht wenig Sinn" */
|
/* Fehler "Das macht wenig Sinn" */
|
||||||
cmistake(u, ord, 10, MSG_MAGIC);
|
syntax_error(u, ord);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
s = gettoken(token, sizeof(token));
|
s = gettoken(token, sizeof(token));
|
||||||
|
@ -2557,7 +2557,7 @@ static castorder *cast_cmd(unit * u, order * ord)
|
||||||
level = _min(p, level);
|
level = _min(p, level);
|
||||||
if (level < 1) {
|
if (level < 1) {
|
||||||
/* Fehler "Das macht wenig Sinn" */
|
/* Fehler "Das macht wenig Sinn" */
|
||||||
cmistake(u, ord, 10, MSG_MAGIC);
|
syntax_error(u, ord);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
s = gettoken(token, sizeof(token));
|
s = gettoken(token, sizeof(token));
|
||||||
|
|
|
@ -49,7 +49,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <util/base36.h>
|
#include <util/base36.h>
|
||||||
#include <util/event.h>
|
#include <util/event.h>
|
||||||
#include <util/functions.h>
|
#include <util/functions.h>
|
||||||
#include <util/goodies.h>
|
#include <util/strings.h>
|
||||||
#include <util/lists.h>
|
#include <util/lists.h>
|
||||||
#include <util/log.h>
|
#include <util/log.h>
|
||||||
#include <util/resolve.h>
|
#include <util/resolve.h>
|
||||||
|
|
|
@ -43,7 +43,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <util/attrib.h>
|
#include <util/attrib.h>
|
||||||
#include <util/base36.h>
|
#include <util/base36.h>
|
||||||
#include <util/functions.h>
|
#include <util/functions.h>
|
||||||
#include <util/goodies.h>
|
#include <util/strings.h>
|
||||||
#include <util/language.h>
|
#include <util/language.h>
|
||||||
|
|
||||||
#include <storage.h>
|
#include <storage.h>
|
||||||
|
|
24
src/report.c
24
src/report.c
|
@ -120,7 +120,14 @@ void newline(stream *out) {
|
||||||
sputs("", out);
|
sputs("", out);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *spaces = " ";
|
void write_spaces(stream *out, size_t num) {
|
||||||
|
static const char spaces[REPORTWIDTH] = " ";
|
||||||
|
while (num > 0) {
|
||||||
|
size_t bytes = (num > REPORTWIDTH) ? REPORTWIDTH : num;
|
||||||
|
swrite(spaces, sizeof(char), bytes, out);
|
||||||
|
num -= bytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void centre(stream *out, const char *s, bool breaking)
|
static void centre(stream *out, const char *s, bool breaking)
|
||||||
{
|
{
|
||||||
|
@ -140,9 +147,8 @@ static void centre(stream *out, const char *s, bool breaking)
|
||||||
freestrlist(T);
|
freestrlist(T);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
swrite(spaces, sizeof(char), (REPORTWIDTH - strlen(s) + 1) / 2, out);
|
write_spaces(out, (REPORTWIDTH - strlen(s) + 1) / 2);
|
||||||
sputs(s, out);
|
sputs(s, out);
|
||||||
newline(out);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,16 +182,16 @@ char marker)
|
||||||
const char *last_space = begin;
|
const char *last_space = begin;
|
||||||
|
|
||||||
if (mark && indent >= 2) {
|
if (mark && indent >= 2) {
|
||||||
swrite(spaces, sizeof(char), indent - 2, out);
|
write_spaces(out, indent - 2);
|
||||||
swrite(mark, sizeof(char), 1, out);
|
swrite(mark, sizeof(char), 1, out);
|
||||||
swrite(spaces, sizeof(char), 1, out);
|
write_spaces(out, 1);
|
||||||
mark = 0;
|
mark = 0;
|
||||||
}
|
}
|
||||||
else if (begin == str) {
|
else if (begin == str) {
|
||||||
swrite(spaces, sizeof(char), indent, out);
|
write_spaces(out, indent);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
swrite(spaces, sizeof(char), indent + hanging_indent, out);
|
write_spaces(out, indent + hanging_indent);
|
||||||
}
|
}
|
||||||
while (*end && end <= begin + length - indent) {
|
while (*end && end <= begin + length - indent) {
|
||||||
if (*end == ' ') {
|
if (*end == ' ') {
|
||||||
|
@ -518,7 +524,7 @@ void sparagraph(strlist ** SP, const char *s, unsigned int indent, char mark)
|
||||||
width = REPORTWIDTH - indent;
|
width = REPORTWIDTH - indent;
|
||||||
firstline = 1;
|
firstline = 1;
|
||||||
|
|
||||||
for (;;) {
|
while (s[0]) {
|
||||||
unsigned int j = 0, i;
|
unsigned int j = 0, i;
|
||||||
|
|
||||||
for (i=0; s[j]; j=i) {
|
for (i=0; s[j]; j=i) {
|
||||||
|
@ -535,7 +541,7 @@ void sparagraph(strlist ** SP, const char *s, unsigned int indent, char mark)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
i = j + 1;
|
i = j + 1;
|
||||||
} while (s[j]);
|
}
|
||||||
|
|
||||||
for (j = 0; j != indent; j++)
|
for (j = 0; j != indent; j++)
|
||||||
buf[j] = ' ';
|
buf[j] = ' ';
|
||||||
|
|
|
@ -15,8 +15,10 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct stream;
|
||||||
void register_nr(void);
|
void register_nr(void);
|
||||||
void report_cleanup(void);
|
void report_cleanup(void);
|
||||||
|
void write_spaces(struct stream *out, size_t num);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include "reports.h"
|
#include "reports.h"
|
||||||
|
#include "report.h"
|
||||||
|
|
||||||
#include <kernel/building.h>
|
#include <kernel/building.h>
|
||||||
#include <kernel/faction.h>
|
#include <kernel/faction.h>
|
||||||
|
@ -10,6 +11,8 @@
|
||||||
#include <kernel/unit.h>
|
#include <kernel/unit.h>
|
||||||
|
|
||||||
#include <quicklist.h>
|
#include <quicklist.h>
|
||||||
|
#include <stream.h>
|
||||||
|
#include <memstream.h>
|
||||||
|
|
||||||
#include <CuTest.h>
|
#include <CuTest.h>
|
||||||
#include <tests.h>
|
#include <tests.h>
|
||||||
|
@ -98,11 +101,43 @@ static void test_seen_faction(CuTest *tc) {
|
||||||
CuAssertTrue(tc, f1->no < f2->no);
|
CuAssertTrue(tc, f1->no < f2->no);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_write_spaces(CuTest *tc) {
|
||||||
|
stream out = { 0 };
|
||||||
|
char buf[1024];
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
mstream_init(&out);
|
||||||
|
write_spaces(&out, 4);
|
||||||
|
out.api->rewind(out.handle);
|
||||||
|
len = out.api->read(out.handle, buf, sizeof(buf));
|
||||||
|
buf[len] = '\0';
|
||||||
|
CuAssertStrEquals(tc, " ", buf);
|
||||||
|
CuAssertIntEquals(tc, ' ', buf[3]);
|
||||||
|
mstream_done(&out);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_write_many_spaces(CuTest *tc) {
|
||||||
|
stream out = { 0 };
|
||||||
|
char buf[1024];
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
mstream_init(&out);
|
||||||
|
write_spaces(&out, 100);
|
||||||
|
out.api->rewind(out.handle);
|
||||||
|
len = out.api->read(out.handle, buf, sizeof(buf));
|
||||||
|
buf[len] = '\0';
|
||||||
|
CuAssertIntEquals(tc, 100, (int)len);
|
||||||
|
CuAssertIntEquals(tc, ' ', buf[99]);
|
||||||
|
mstream_done(&out);
|
||||||
|
}
|
||||||
|
|
||||||
CuSuite *get_reports_suite(void)
|
CuSuite *get_reports_suite(void)
|
||||||
{
|
{
|
||||||
CuSuite *suite = CuSuiteNew();
|
CuSuite *suite = CuSuiteNew();
|
||||||
SUITE_ADD_TEST(suite, test_reorder_units);
|
SUITE_ADD_TEST(suite, test_reorder_units);
|
||||||
SUITE_ADD_TEST(suite, test_seen_faction);
|
SUITE_ADD_TEST(suite, test_seen_faction);
|
||||||
SUITE_ADD_TEST(suite, test_regionid);
|
SUITE_ADD_TEST(suite, test_regionid);
|
||||||
|
SUITE_ADD_TEST(suite, test_write_spaces);
|
||||||
|
SUITE_ADD_TEST(suite, test_write_many_spaces);
|
||||||
return suite;
|
return suite;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
#include "crmessage.h"
|
#include "crmessage.h"
|
||||||
|
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "goodies.h"
|
#include "strings.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
@ -19,10 +19,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
#include "goodies.h"
|
#include "goodies.h"
|
||||||
|
|
||||||
#include "unicode.h"
|
|
||||||
|
|
||||||
/* libc includes */
|
/* libc includes */
|
||||||
#include <wctype.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
@ -53,23 +50,6 @@ int *intlist_find(int *i_p, int fi)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *set_string(char **s, const char *neu)
|
|
||||||
{
|
|
||||||
if (neu == NULL) {
|
|
||||||
free(*s);
|
|
||||||
*s = NULL;
|
|
||||||
}
|
|
||||||
else if (*s == NULL) {
|
|
||||||
*s = malloc(strlen(neu) + 1);
|
|
||||||
strcpy(*s, neu);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
*s = realloc(*s, strlen(neu) + 1);
|
|
||||||
strcpy(*s, neu);
|
|
||||||
}
|
|
||||||
return *s;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int spc_email_isvalid(const char *address)
|
static int spc_email_isvalid(const char *address)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
|
@ -19,18 +19,15 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#ifndef GOODIES_H
|
#ifndef GOODIES_H
|
||||||
#define GOODIES_H
|
#define GOODIES_H
|
||||||
|
|
||||||
#include "strings.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern char *set_string(char **s, const char *neu);
|
int set_email(char **pemail, const char *newmail);
|
||||||
extern int set_email(char **pemail, const char *newmail);
|
|
||||||
|
|
||||||
extern int *intlist_init(void);
|
int *intlist_init(void);
|
||||||
extern int *intlist_add(int *i_p, int i);
|
int *intlist_add(int *i_p, int i);
|
||||||
extern int *intlist_find(int *i_p, int i);
|
int *intlist_find(int *i_p, int i);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#include "language_struct.h"
|
#include "language_struct.h"
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "goodies.h"
|
#include "strings.h"
|
||||||
#include "umlaut.h"
|
#include "umlaut.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
|
|
||||||
#include "goodies.h"
|
#include "strings.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "quicklist.h"
|
#include "quicklist.h"
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "language.h"
|
#include "language.h"
|
||||||
#include "translation.h"
|
#include "translation.h"
|
||||||
#include "goodies.h"
|
#include "strings.h"
|
||||||
|
|
||||||
/* libc includes */
|
/* libc includes */
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
|
@ -21,6 +21,24 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
/* libc includes */
|
/* libc includes */
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
char *set_string(char **s, const char *neu)
|
||||||
|
{
|
||||||
|
if (neu == NULL) {
|
||||||
|
free(*s);
|
||||||
|
*s = NULL;
|
||||||
|
}
|
||||||
|
else if (*s == NULL) {
|
||||||
|
*s = malloc(strlen(neu) + 1);
|
||||||
|
strcpy(*s, neu);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*s = realloc(*s, strlen(neu) + 1);
|
||||||
|
strcpy(*s, neu);
|
||||||
|
}
|
||||||
|
return *s;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int hashstring(const char *s)
|
unsigned int hashstring(const char *s)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,11 +22,11 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern unsigned int hashstring(const char *s);
|
char *set_string(char **s, const char *neu);
|
||||||
extern const char *escape_string(const char *str, char *buffer,
|
unsigned int hashstring(const char *s);
|
||||||
size_t len);
|
const char *escape_string(const char *str, char *buffer, size_t len);
|
||||||
extern unsigned int jenkins_hash(unsigned int a);
|
unsigned int jenkins_hash(unsigned int a);
|
||||||
extern unsigned int wang_hash(unsigned int a);
|
unsigned int wang_hash(unsigned int a);
|
||||||
|
|
||||||
/* benchmark for units:
|
/* benchmark for units:
|
||||||
* JENKINS_HASH: 5.25 misses/hit (with good cache behavior)
|
* JENKINS_HASH: 5.25 misses/hit (with good cache behavior)
|
||||||
|
|
Loading…
Reference in New Issue