forked from github/server
use filestream for report_template, too.
This commit is contained in:
parent
53a452e4ba
commit
06ff88e783
437
src/report.c
437
src/report.c
|
@ -116,24 +116,13 @@ static char *gamedate_season(const struct locale *lang)
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rpc(FILE * F, char c, size_t num)
|
|
||||||
{
|
|
||||||
while (num > 0) {
|
|
||||||
putc(c, F);
|
|
||||||
num--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rnl(FILE * F)
|
|
||||||
{
|
|
||||||
fputc('\n', F);
|
|
||||||
}
|
|
||||||
|
|
||||||
void newline(stream *out) {
|
void newline(stream *out) {
|
||||||
sputs("", out);
|
sputs("", out);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void centre(FILE * F, const char *s, bool breaking)
|
static const char *spaces = " ";
|
||||||
|
|
||||||
|
static void centre(stream *out, const char *s, bool breaking)
|
||||||
{
|
{
|
||||||
/* Bei Namen die genau 80 Zeichen lang sind, kann es hier Probleme
|
/* Bei Namen die genau 80 Zeichen lang sind, kann es hier Probleme
|
||||||
* geben. Seltsamerweise wird i dann auf MAXINT oder aehnlich
|
* geben. Seltsamerweise wird i dann auf MAXINT oder aehnlich
|
||||||
|
@ -145,85 +134,22 @@ static void centre(FILE * F, const char *s, bool breaking)
|
||||||
sparagraph(&SP, s, 0, 0);
|
sparagraph(&SP, s, 0, 0);
|
||||||
T = SP;
|
T = SP;
|
||||||
while (SP) {
|
while (SP) {
|
||||||
centre(F, SP->s, false);
|
centre(out, SP->s, false);
|
||||||
SP = SP->next;
|
SP = SP->next;
|
||||||
}
|
}
|
||||||
freestrlist(T);
|
freestrlist(T);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rpc(F, ' ', (REPORTWIDTH - strlen(s) + 1) / 2);
|
swrite(spaces, sizeof(char), (REPORTWIDTH - strlen(s) + 1) / 2, out);
|
||||||
fputs(s, F);
|
sputs(s, out);
|
||||||
putc('\n', F);
|
newline(out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
rparagraph(FILE * F, const char *str, ptrdiff_t indent, int hanging_indent,
|
|
||||||
char mark)
|
|
||||||
{
|
|
||||||
static const char *spaces = " ";
|
|
||||||
size_t length = REPORTWIDTH;
|
|
||||||
const char *end, *begin;
|
|
||||||
|
|
||||||
if (!str) return;
|
|
||||||
/* find out if there's a mark + indent already encoded in the string. */
|
|
||||||
if (!mark) {
|
|
||||||
const char *x = str;
|
|
||||||
while (*x == ' ')
|
|
||||||
++x;
|
|
||||||
indent += x - str;
|
|
||||||
if (x[0] && indent && x[1] == ' ') {
|
|
||||||
indent += 2;
|
|
||||||
mark = x[0];
|
|
||||||
str = x + 2;
|
|
||||||
hanging_indent -= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
begin = end = str;
|
|
||||||
|
|
||||||
do {
|
|
||||||
const char *last_space = begin;
|
|
||||||
|
|
||||||
if (mark && indent >= 2) {
|
|
||||||
fwrite(spaces, sizeof(char), indent - 2, F);
|
|
||||||
fputc(mark, F);
|
|
||||||
fputc(' ', F);
|
|
||||||
mark = 0;
|
|
||||||
}
|
|
||||||
else if (begin == str) {
|
|
||||||
fwrite(spaces, sizeof(char), indent, F);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fwrite(spaces, sizeof(char), indent + hanging_indent, F);
|
|
||||||
}
|
|
||||||
while (*end && end <= begin + length - indent) {
|
|
||||||
if (*end == ' ') {
|
|
||||||
last_space = end;
|
|
||||||
}
|
|
||||||
++end;
|
|
||||||
}
|
|
||||||
if (*end == 0)
|
|
||||||
last_space = end;
|
|
||||||
if (last_space == begin) {
|
|
||||||
/* there was no space in this line. clip it */
|
|
||||||
last_space = end;
|
|
||||||
}
|
|
||||||
fwrite(begin, sizeof(char), last_space - begin, F);
|
|
||||||
begin = last_space;
|
|
||||||
while (*begin == ' ') {
|
|
||||||
++begin;
|
|
||||||
}
|
|
||||||
if (begin > end)
|
|
||||||
begin = end;
|
|
||||||
fputc('\n', F);
|
|
||||||
} while (*begin);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
paragraph(stream *out, const char *str, ptrdiff_t indent, int hanging_indent,
|
paragraph(stream *out, const char *str, ptrdiff_t indent, int hanging_indent,
|
||||||
char marker)
|
char marker)
|
||||||
{
|
{
|
||||||
static const char *spaces = " ";
|
|
||||||
size_t length = REPORTWIDTH;
|
size_t length = REPORTWIDTH;
|
||||||
const char *end, *begin, *mark = 0;
|
const char *end, *begin, *mark = 0;
|
||||||
|
|
||||||
|
@ -299,7 +225,7 @@ static size_t write_spell_modifier(spell * sp, int flag, const char * str, bool
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nr_spell(FILE * F, spellbook_entry * sbe, const struct locale *lang)
|
static void nr_spell(stream *out, spellbook_entry * sbe, const struct locale *lang)
|
||||||
{
|
{
|
||||||
int bytes, k, itemanz, costtyp;
|
int bytes, k, itemanz, costtyp;
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
|
@ -308,11 +234,11 @@ static void nr_spell(FILE * F, spellbook_entry * sbe, const struct locale *lang)
|
||||||
spell * sp = sbe->sp;
|
spell * sp = sbe->sp;
|
||||||
const char *params = sp->parameter;
|
const char *params = sp->parameter;
|
||||||
|
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, spell_name(sp, lang), true);
|
centre(out, spell_name(sp, lang), true);
|
||||||
rnl(F);
|
newline(out);
|
||||||
rparagraph(F, LOC(lang, "nr_spell_description"), 0, 0, 0);
|
paragraph(out, LOC(lang, "nr_spell_description"), 0, 0, 0);
|
||||||
rparagraph(F, spell_info(sp, lang), 2, 0, 0);
|
paragraph(out, spell_info(sp, lang), 2, 0, 0);
|
||||||
|
|
||||||
bytes = (int)strlcpy(bufp, LOC(lang, "nr_spell_type"), size);
|
bytes = (int)strlcpy(bufp, LOC(lang, "nr_spell_type"), size);
|
||||||
if (wrptr(&bufp, &size, bytes) != 0)
|
if (wrptr(&bufp, &size, bytes) != 0)
|
||||||
|
@ -337,15 +263,15 @@ static void nr_spell(FILE * F, spellbook_entry * sbe, const struct locale *lang)
|
||||||
if (wrptr(&bufp, &size, bytes) != 0)
|
if (wrptr(&bufp, &size, bytes) != 0)
|
||||||
WARN_STATIC_BUFFER();
|
WARN_STATIC_BUFFER();
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
rparagraph(F, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
|
|
||||||
sprintf(buf, "%s %d", LOC(lang, "nr_spell_level"), sbe->level);
|
sprintf(buf, "%s %d", LOC(lang, "nr_spell_level"), sbe->level);
|
||||||
rparagraph(F, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
|
|
||||||
sprintf(buf, "%s %d", LOC(lang, "nr_spell_rank"), sp->rank);
|
sprintf(buf, "%s %d", LOC(lang, "nr_spell_rank"), sp->rank);
|
||||||
rparagraph(F, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
|
|
||||||
rparagraph(F, LOC(lang, "nr_spell_components"), 0, 0, 0);
|
paragraph(out, LOC(lang, "nr_spell_components"), 0, 0, 0);
|
||||||
for (k = 0; sp->components[k].type; ++k) {
|
for (k = 0; sp->components[k].type; ++k) {
|
||||||
const resource_type *rtype = sp->components[k].type;
|
const resource_type *rtype = sp->components[k].type;
|
||||||
itemanz = sp->components[k].amount;
|
itemanz = sp->components[k].amount;
|
||||||
|
@ -372,7 +298,7 @@ static void nr_spell(FILE * F, spellbook_entry * sbe, const struct locale *lang)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
rparagraph(F, buf, 2, 2, '-');
|
paragraph(out, buf, 2, 2, '-');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -406,9 +332,8 @@ static void nr_spell(FILE * F, spellbook_entry * sbe, const struct locale *lang)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
rparagraph(F, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
|
paragraph(out, LOC(lang, "nr_spell_syntax"), 0, 0, 0);
|
||||||
rparagraph(F, LOC(lang, "nr_spell_syntax"), 0, 0, 0);
|
|
||||||
|
|
||||||
bufp = buf;
|
bufp = buf;
|
||||||
size = sizeof(buf) - 1;
|
size = sizeof(buf) - 1;
|
||||||
|
@ -575,8 +500,8 @@ static void nr_spell(FILE * F, spellbook_entry * sbe, const struct locale *lang)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
rparagraph(F, buf, 2, 0, 0);
|
paragraph(out, buf, 2, 0, 0);
|
||||||
rnl(F);
|
newline(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sparagraph(strlist ** SP, const char *s, int indent, char mark)
|
void sparagraph(strlist ** SP, const char *s, int indent, char mark)
|
||||||
|
@ -740,12 +665,12 @@ static void nr_curses(stream *out, int indent, const faction *viewer, objtype_t
|
||||||
nr_curses_i(out, indent, viewer, typ, obj, a);
|
nr_curses_i(out, indent, viewer, typ, obj, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rps_nowrap(FILE * F, const char *s)
|
static void rps_nowrap(stream *out, const char *s)
|
||||||
{
|
{
|
||||||
const char *x = s;
|
const char *x = s;
|
||||||
size_t indent = 0;
|
size_t indent = 0;
|
||||||
|
|
||||||
if (!x) return;
|
if (!x || !*x) return;
|
||||||
|
|
||||||
while (*x++ == ' ');
|
while (*x++ == ' ');
|
||||||
indent = x - s - 1;
|
indent = x - s - 1;
|
||||||
|
@ -758,7 +683,7 @@ static void rps_nowrap(FILE * F, const char *s)
|
||||||
if (!x)
|
if (!x)
|
||||||
x = s + strlen(s);
|
x = s + strlen(s);
|
||||||
}
|
}
|
||||||
rpc(F, *s++, 1);
|
swrite(s++, sizeof(char), 1, out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -805,10 +730,11 @@ nr_unit(stream *out, const faction * f, const unit * u, int indent, int mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
rp_messages(FILE * F, message_list * msgs, faction * viewer, int indent,
|
rp_messages(stream *out, message_list * msgs, faction * viewer, int indent,
|
||||||
bool categorized)
|
bool categorized)
|
||||||
{
|
{
|
||||||
nrsection *section;
|
nrsection *section;
|
||||||
|
|
||||||
if (!msgs)
|
if (!msgs)
|
||||||
return;
|
return;
|
||||||
for (section = sections; section; section = section->next) {
|
for (section = sections; section; section = section->next) {
|
||||||
|
@ -823,15 +749,15 @@ bool categorized)
|
||||||
const char *section_title;
|
const char *section_title;
|
||||||
char cat_identifier[24];
|
char cat_identifier[24];
|
||||||
|
|
||||||
rnl(F);
|
newline(out);
|
||||||
sprintf(cat_identifier, "section_%s", section->name);
|
sprintf(cat_identifier, "section_%s", section->name);
|
||||||
section_title = LOC(viewer->locale, cat_identifier);
|
section_title = LOC(viewer->locale, cat_identifier);
|
||||||
centre(F, section_title, true);
|
centre(out, section_title, true);
|
||||||
rnl(F);
|
newline(out);
|
||||||
k = 1;
|
k = 1;
|
||||||
}
|
}
|
||||||
nr_render(m->msg, viewer->locale, lbuf, sizeof(lbuf), viewer);
|
nr_render(m->msg, viewer->locale, lbuf, sizeof(lbuf), viewer);
|
||||||
rparagraph(F, lbuf, indent, 2, 0);
|
paragraph(out, lbuf, indent, 2, 0);
|
||||||
}
|
}
|
||||||
m = m->next;
|
m = m->next;
|
||||||
}
|
}
|
||||||
|
@ -840,21 +766,21 @@ bool categorized)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rp_battles(FILE * F, faction * f)
|
static void rp_battles(stream *out, faction * f)
|
||||||
{
|
{
|
||||||
if (f->battles != NULL) {
|
if (f->battles != NULL) {
|
||||||
struct bmsg *bm = f->battles;
|
struct bmsg *bm = f->battles;
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, LOC(f->locale, "section_battle"), false);
|
centre(out, LOC(f->locale, "section_battle"), false);
|
||||||
rnl(F);
|
newline(out);
|
||||||
|
|
||||||
while (bm) {
|
while (bm) {
|
||||||
char buf[256];
|
char buf[256];
|
||||||
RENDER(f, buf, sizeof(buf), ("battle::header", "region", bm->r));
|
RENDER(f, buf, sizeof(buf), ("battle::header", "region", bm->r));
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
rnl(F);
|
newline(out);
|
||||||
rp_messages(F, bm->msgs, f, 0, false);
|
rp_messages(out, bm->msgs, f, 0, false);
|
||||||
bm = bm->next;
|
bm = bm->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1369,7 +1295,7 @@ static void describe(stream *out, const seen_region * sr, faction * f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void statistics(FILE * F, const region * r, const faction * f)
|
static void statistics(stream *out, const region * r, const faction * f)
|
||||||
{
|
{
|
||||||
const unit *u;
|
const unit *u;
|
||||||
int number = 0, p = rpeasants(r);
|
int number = 0, p = rpeasants(r);
|
||||||
|
@ -1387,19 +1313,19 @@ static void statistics(FILE * F, const region * r, const faction * f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* print */
|
/* print */
|
||||||
rnl(F);
|
newline(out);
|
||||||
m = msg_message("nr_stat_header", "region", r);
|
m = msg_message("nr_stat_header", "region", r);
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
rparagraph(F, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
rnl(F);
|
newline(out);
|
||||||
|
|
||||||
/* Region */
|
/* Region */
|
||||||
if (skill_enabled(SK_ENTERTAINMENT) && fval(r->terrain, LAND_REGION)
|
if (skill_enabled(SK_ENTERTAINMENT) && fval(r->terrain, LAND_REGION)
|
||||||
&& rmoney(r)) {
|
&& rmoney(r)) {
|
||||||
m = msg_message("nr_stat_maxentertainment", "max", entertainmoney(r));
|
m = msg_message("nr_stat_maxentertainment", "max", entertainmoney(r));
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
rparagraph(F, buf, 2, 2, 0);
|
paragraph(out, buf, 2, 2, 0);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
}
|
}
|
||||||
if (production(r) && (!fval(r->terrain, SEA_REGION)
|
if (production(r) && (!fval(r->terrain, SEA_REGION)
|
||||||
|
@ -1412,14 +1338,14 @@ static void statistics(FILE * F, const region * r, const faction * f)
|
||||||
m = msg_message("nr_stat_salary", "max", wage(r, f, f->race, turn + 1));
|
m = msg_message("nr_stat_salary", "max", wage(r, f, f->race, turn + 1));
|
||||||
}
|
}
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
rparagraph(F, buf, 2, 2, 0);
|
paragraph(out, buf, 2, 2, 0);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p) {
|
if (p) {
|
||||||
m = msg_message("nr_stat_recruits", "max", p / RECRUITFRACTION);
|
m = msg_message("nr_stat_recruits", "max", p / RECRUITFRACTION);
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
rparagraph(F, buf, 2, 2, 0);
|
paragraph(out, buf, 2, 2, 0);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
|
|
||||||
if (!markets_module()) {
|
if (!markets_module()) {
|
||||||
|
@ -1430,14 +1356,14 @@ static void statistics(FILE * F, const region * r, const faction * f)
|
||||||
m = msg_message("nr_stat_luxuries", "max", p / TRADE_FRACTION);
|
m = msg_message("nr_stat_luxuries", "max", p / TRADE_FRACTION);
|
||||||
}
|
}
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
rparagraph(F, buf, 2, 2, 0);
|
paragraph(out, buf, 2, 2, 0);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r->land->ownership) {
|
if (r->land->ownership) {
|
||||||
m = msg_message("nr_stat_morale", "morale", r->land->morale);
|
m = msg_message("nr_stat_morale", "morale", r->land->morale);
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
rparagraph(F, buf, 2, 2, 0);
|
paragraph(out, buf, 2, 2, 0);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1446,19 +1372,19 @@ static void statistics(FILE * F, const region * r, const faction * f)
|
||||||
|
|
||||||
m = msg_message("nr_stat_people", "max", number);
|
m = msg_message("nr_stat_people", "max", number);
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
rparagraph(F, buf, 2, 2, 0);
|
paragraph(out, buf, 2, 2, 0);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
|
|
||||||
for (itm = items; itm; itm = itm->next) {
|
for (itm = items; itm; itm = itm->next) {
|
||||||
sprintf(buf, "%s: %d",
|
sprintf(buf, "%s: %d",
|
||||||
LOC(f->locale, resourcename(itm->type->rtype, GR_PLURAL)), itm->number);
|
LOC(f->locale, resourcename(itm->type->rtype, GR_PLURAL)), itm->number);
|
||||||
rparagraph(F, buf, 2, 2, 0);
|
paragraph(out, buf, 2, 2, 0);
|
||||||
}
|
}
|
||||||
while (items)
|
while (items)
|
||||||
i_free(i_remove(&items, items));
|
i_free(i_remove(&items, items));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void durchreisende(FILE * F, const region * r, const faction * f)
|
static void durchreisende(stream *out, const region * r, const faction * f)
|
||||||
{
|
{
|
||||||
if (fval(r, RF_TRAVELUNIT)) {
|
if (fval(r, RF_TRAVELUNIT)) {
|
||||||
attrib *abegin = a_find(r->attribs, &at_travelunit), *a;
|
attrib *abegin = a_find(r->attribs, &at_travelunit), *a;
|
||||||
|
@ -1484,7 +1410,7 @@ static void durchreisende(FILE * F, const region * r, const faction * f)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Auflisten. */
|
/* Auflisten. */
|
||||||
rnl(F);
|
newline(out);
|
||||||
|
|
||||||
for (a = abegin; a && a->type == &at_travelunit; a = a->next) {
|
for (a = abegin; a && a->type == &at_travelunit; a = a->next) {
|
||||||
unit *u = (unit *)a->data.v;
|
unit *u = (unit *)a->data.v;
|
||||||
|
@ -1546,7 +1472,7 @@ static void durchreisende(FILE * F, const region * r, const faction * f)
|
||||||
WARN_STATIC_BUFFER();
|
WARN_STATIC_BUFFER();
|
||||||
}
|
}
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
rparagraph(F, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1582,6 +1508,7 @@ report_template(const char *filename, report_context * ctx, const char *charset)
|
||||||
faction *f = ctx->f;
|
faction *f = ctx->f;
|
||||||
region *r;
|
region *r;
|
||||||
FILE *F = fopen(filename, "wt");
|
FILE *F = fopen(filename, "wt");
|
||||||
|
stream strm = { 0 }, *out = &strm;
|
||||||
seen_region *sr = NULL;
|
seen_region *sr = NULL;
|
||||||
char buf[8192], *bufp;
|
char buf[8192], *bufp;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
@ -1592,31 +1519,28 @@ report_template(const char *filename, report_context * ctx, const char *charset)
|
||||||
perror(filename);
|
perror(filename);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
fstream_init(&strm, F);
|
||||||
|
|
||||||
if (utf8) {
|
if (utf8) {
|
||||||
const unsigned char utf8_bom[4] = { 0xef, 0xbb, 0xbf, 0 };
|
const unsigned char utf8_bom[4] = { 0xef, 0xbb, 0xbf, 0 };
|
||||||
fwrite(utf8_bom, 1, 3, F);
|
swrite(utf8_bom, 1, 3, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
rps_nowrap(F, "");
|
newline(out);
|
||||||
rnl(F);
|
rps_nowrap(out, LOC(f->locale, "nr_template"));
|
||||||
rps_nowrap(F, LOC(f->locale, "nr_template"));
|
newline(out);
|
||||||
rnl(F);
|
newline(out);
|
||||||
rps_nowrap(F, "");
|
|
||||||
rnl(F);
|
|
||||||
|
|
||||||
sprintf(buf, "%s %s \"%s\"", LOC(f->locale, "ERESSEA"), factionid(f),
|
sprintf(buf, "%s %s \"%s\"", LOC(f->locale, "ERESSEA"), factionid(f),
|
||||||
LOC(f->locale, "enterpasswd"));
|
LOC(f->locale, "enterpasswd"));
|
||||||
rps_nowrap(F, buf);
|
rps_nowrap(out, buf);
|
||||||
rnl(F);
|
newline(out);
|
||||||
|
newline(out);
|
||||||
rps_nowrap(F, "");
|
|
||||||
rnl(F);
|
|
||||||
sprintf(buf, "; ECHECK -l -w4 -r%d -v%s", f->race->recruitcost,
|
sprintf(buf, "; ECHECK -l -w4 -r%d -v%s", f->race->recruitcost,
|
||||||
ECHECK_VERSION);
|
ECHECK_VERSION);
|
||||||
/* -v3.4: ECheck Version 3.4.x */
|
/* -v3.4: ECheck Version 3.4.x */
|
||||||
rps_nowrap(F, buf);
|
rps_nowrap(out, buf);
|
||||||
rnl(F);
|
newline(out);
|
||||||
|
|
||||||
for (r = ctx->first; sr == NULL && r != ctx->last; r = r->next) {
|
for (r = ctx->first; sr == NULL && r != ctx->last; r = r->next) {
|
||||||
sr = find_seen(ctx->seen, r);
|
sr = find_seen(ctx->seen, r);
|
||||||
|
@ -1639,8 +1563,7 @@ report_template(const char *filename, report_context * ctx, const char *charset)
|
||||||
|
|
||||||
pnormalize(&nx, &ny, pl);
|
pnormalize(&nx, &ny, pl);
|
||||||
adjust_coordinates(f, &nx, &ny, pl, r);
|
adjust_coordinates(f, &nx, &ny, pl, r);
|
||||||
rps_nowrap(F, "");
|
newline(out);
|
||||||
rnl(F);
|
|
||||||
if (pl && pl->id != 0) {
|
if (pl && pl->id != 0) {
|
||||||
sprintf(buf, "%s %d,%d,%d ; %s", LOC(f->locale,
|
sprintf(buf, "%s %d,%d,%d ; %s", LOC(f->locale,
|
||||||
parameters[P_REGION]), nx, ny, pl->id, rname(r, f->locale));
|
parameters[P_REGION]), nx, ny, pl->id, rname(r, f->locale));
|
||||||
|
@ -1649,13 +1572,12 @@ report_template(const char *filename, report_context * ctx, const char *charset)
|
||||||
sprintf(buf, "%s %d,%d ; %s", LOC(f->locale, parameters[P_REGION]),
|
sprintf(buf, "%s %d,%d ; %s", LOC(f->locale, parameters[P_REGION]),
|
||||||
nx, ny, rname(r, f->locale));
|
nx, ny, rname(r, f->locale));
|
||||||
}
|
}
|
||||||
rps_nowrap(F, buf);
|
rps_nowrap(out, buf);
|
||||||
rnl(F);
|
newline(out);
|
||||||
sprintf(buf, "; ECheck Lohn %d", wage(r, f, f->race, turn + 1));
|
sprintf(buf, "; ECheck Lohn %d", wage(r, f, f->race, turn + 1));
|
||||||
rps_nowrap(F, buf);
|
rps_nowrap(out, buf);
|
||||||
rnl(F);
|
newline(out);
|
||||||
rps_nowrap(F, "");
|
newline(out);
|
||||||
rnl(F);
|
|
||||||
}
|
}
|
||||||
dh = 1;
|
dh = 1;
|
||||||
|
|
||||||
|
@ -1702,15 +1624,15 @@ report_template(const char *filename, report_context * ctx, const char *charset)
|
||||||
WARN_STATIC_BUFFER();
|
WARN_STATIC_BUFFER();
|
||||||
|
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
rps_nowrap(F, buf);
|
rps_nowrap(out, buf);
|
||||||
rnl(F);
|
newline(out);
|
||||||
|
|
||||||
for (ord = u->old_orders; ord; ord = ord->next) {
|
for (ord = u->old_orders; ord; ord = ord->next) {
|
||||||
/* this new order will replace the old defaults */
|
/* this new order will replace the old defaults */
|
||||||
strcpy(buf, " ");
|
strcpy(buf, " ");
|
||||||
write_order(ord, buf + 2, sizeof(buf) - 2);
|
write_order(ord, buf + 2, sizeof(buf) - 2);
|
||||||
rps_nowrap(F, buf);
|
rps_nowrap(out, buf);
|
||||||
rnl(F);
|
newline(out);
|
||||||
}
|
}
|
||||||
for (ord = u->orders; ord; ord = ord->next) {
|
for (ord = u->orders; ord; ord = ord->next) {
|
||||||
if (u->old_orders && is_repeated(ord))
|
if (u->old_orders && is_repeated(ord))
|
||||||
|
@ -1718,8 +1640,8 @@ report_template(const char *filename, report_context * ctx, const char *charset)
|
||||||
if (is_persistent(ord)) {
|
if (is_persistent(ord)) {
|
||||||
strcpy(buf, " ");
|
strcpy(buf, " ");
|
||||||
write_order(ord, buf + 2, sizeof(buf) - 2);
|
write_order(ord, buf + 2, sizeof(buf) - 2);
|
||||||
rps_nowrap(F, buf);
|
rps_nowrap(out, buf);
|
||||||
rnl(F);
|
newline(out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1728,12 +1650,11 @@ report_template(const char *filename, report_context * ctx, const char *charset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rps_nowrap(F, "");
|
newline(out);
|
||||||
rnl(F);
|
|
||||||
strcpy(buf, LOC(f->locale, parameters[P_NEXT]));
|
strcpy(buf, LOC(f->locale, parameters[P_NEXT]));
|
||||||
rps_nowrap(F, buf);
|
rps_nowrap(out, buf);
|
||||||
rnl(F);
|
newline(out);
|
||||||
fclose(F);
|
fstream_done(&strm);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1830,7 +1751,7 @@ show_allies(const faction * f, const ally * allies, char *buf, size_t size)
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void allies(FILE * F, const faction * f)
|
static void allies(stream *out, const faction * f)
|
||||||
{
|
{
|
||||||
const group *g = f->groups;
|
const group *g = f->groups;
|
||||||
char buf[16384];
|
char buf[16384];
|
||||||
|
@ -1841,8 +1762,8 @@ static void allies(FILE * F, const faction * f)
|
||||||
bytes = _snprintf(buf, size, "%s ", LOC(f->locale, "faction_help"));
|
bytes = _snprintf(buf, size, "%s ", LOC(f->locale, "faction_help"));
|
||||||
size -= bytes;
|
size -= bytes;
|
||||||
show_allies(f, f->allies, buf + bytes, size);
|
show_allies(f, f->allies, buf + bytes, size);
|
||||||
rparagraph(F, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
rnl(F);
|
newline(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (g) {
|
while (g) {
|
||||||
|
@ -1852,25 +1773,21 @@ static void allies(FILE * F, const faction * f)
|
||||||
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;
|
size -= bytes;
|
||||||
show_allies(f, g->allies, buf + bytes, size);
|
show_allies(f, g->allies, buf + bytes, size);
|
||||||
rparagraph(F, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
rnl(F);
|
newline(out);
|
||||||
}
|
}
|
||||||
g = g->next;
|
g = g->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void guards(FILE * F, const region * r, const faction * see)
|
static void guards(stream *out, const region * r, const faction * see)
|
||||||
{
|
{
|
||||||
/* die Partei see sieht dies; wegen
|
/* die Partei see sieht dies; wegen
|
||||||
* "unbekannte Partei", wenn man es selbst ist... */
|
* "unbekannte Partei", wenn man es selbst ist... */
|
||||||
|
|
||||||
faction *guardians[512];
|
faction *guardians[512];
|
||||||
|
|
||||||
int nextguard = 0;
|
int nextguard = 0;
|
||||||
|
|
||||||
unit *u;
|
unit *u;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
bool tarned = false;
|
bool tarned = false;
|
||||||
/* Bewachung */
|
/* Bewachung */
|
||||||
|
|
||||||
|
@ -1930,29 +1847,29 @@ static void guards(FILE * F, const region * r, const faction * see)
|
||||||
bytes = (int)strlcpy(bufp, LOC(see->locale, "nr_guarding_postfix"), size);
|
bytes = (int)strlcpy(bufp, LOC(see->locale, "nr_guarding_postfix"), size);
|
||||||
if (wrptr(&bufp, &size, bytes) != 0)
|
if (wrptr(&bufp, &size, bytes) != 0)
|
||||||
WARN_STATIC_BUFFER();
|
WARN_STATIC_BUFFER();
|
||||||
rnl(F);
|
newline(out);
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
rparagraph(F, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rpline(FILE * F)
|
static void rpline(stream *out)
|
||||||
{
|
{
|
||||||
static char line[REPORTWIDTH + 1];
|
static char line[REPORTWIDTH + 1];
|
||||||
if (line[0] != '-') {
|
if (line[0] != '-') {
|
||||||
memset(line, '-', sizeof(line));
|
memset(line, '-', sizeof(line));
|
||||||
line[REPORTWIDTH] = '\n';
|
line[REPORTWIDTH] = '\n';
|
||||||
}
|
}
|
||||||
fwrite(line, sizeof(char), sizeof(line), F);
|
swrite(line, sizeof(char), sizeof(line), out);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void list_address(FILE * F, const faction * uf, quicklist * seenfactions)
|
static void list_address(stream *out, const faction * uf, quicklist * seenfactions)
|
||||||
{
|
{
|
||||||
int qi = 0;
|
int qi = 0;
|
||||||
quicklist *flist = seenfactions;
|
quicklist *flist = seenfactions;
|
||||||
|
|
||||||
centre(F, LOC(uf->locale, "nr_addresses"), false);
|
centre(out, LOC(uf->locale, "nr_addresses"), false);
|
||||||
rnl(F);
|
newline(out);
|
||||||
|
|
||||||
while (flist != NULL) {
|
while (flist != NULL) {
|
||||||
const faction *f = (const faction *)ql_get(flist, qi);
|
const faction *f = (const faction *)ql_get(flist, qi);
|
||||||
|
@ -1968,13 +1885,12 @@ static void list_address(FILE * F, const faction * uf, quicklist * seenfactions)
|
||||||
label = 'o';
|
label = 'o';
|
||||||
else if (alliedfaction(NULL, uf, f, HELP_ALL))
|
else if (alliedfaction(NULL, uf, f, HELP_ALL))
|
||||||
label = '+';
|
label = '+';
|
||||||
rparagraph(F, buf, 4, 0, label);
|
paragraph(out, buf, 4, 0, label);
|
||||||
|
|
||||||
}
|
}
|
||||||
ql_advance(&flist, &qi, 1);
|
ql_advance(&flist, &qi, 1);
|
||||||
}
|
}
|
||||||
rnl(F);
|
newline(out);
|
||||||
rpline(F);
|
rpline(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2135,14 +2051,13 @@ static void nr_paragraph(stream *out, message * m, faction * f)
|
||||||
int bytes;
|
int bytes;
|
||||||
char buf[4096], *bufp = buf;
|
char buf[4096], *bufp = buf;
|
||||||
size_t size = sizeof(buf) - 1;
|
size_t size = sizeof(buf) - 1;
|
||||||
FILE * F = fstream_file(out);
|
|
||||||
|
|
||||||
bytes = (int)nr_render(m, f->locale, bufp, size, f);
|
bytes = (int)nr_render(m, f->locale, bufp, size, f);
|
||||||
if (wrptr(&bufp, &size, bytes) != 0)
|
if (wrptr(&bufp, &size, bytes) != 0)
|
||||||
WARN_STATIC_BUFFER();
|
WARN_STATIC_BUFFER();
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
|
|
||||||
rparagraph(F, buf, 0, 0, 0);
|
paragraph(out, buf, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -2162,7 +2077,7 @@ const char *charset)
|
||||||
int maxh, bytes, ix = want(O_STATISTICS);
|
int maxh, bytes, ix = want(O_STATISTICS);
|
||||||
int wants_stats = (f->options & ix);
|
int wants_stats = (f->options & ix);
|
||||||
FILE *F = fopen(filename, "wt");
|
FILE *F = fopen(filename, "wt");
|
||||||
stream out = { 0 };
|
stream strm = { 0 }, *out = &strm;
|
||||||
seen_region *sr = NULL;
|
seen_region *sr = NULL;
|
||||||
char buf[8192];
|
char buf[8192];
|
||||||
char *bufp;
|
char *bufp;
|
||||||
|
@ -2186,7 +2101,7 @@ const char *charset)
|
||||||
perror(filename);
|
perror(filename);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
fstream_init(&out, F);
|
fstream_init(&strm, F);
|
||||||
|
|
||||||
if (utf8) {
|
if (utf8) {
|
||||||
const unsigned char utf8_bom[4] = { 0xef, 0xbb, 0xbf, 0 };
|
const unsigned char utf8_bom[4] = { 0xef, 0xbb, 0xbf, 0 };
|
||||||
|
@ -2197,16 +2112,16 @@ const char *charset)
|
||||||
m = msg_message("nr_header_date", "game date", game_name(), pzTime);
|
m = msg_message("nr_header_date", "game date", game_name(), pzTime);
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
|
|
||||||
centre(F, gamedate_season(f->locale), true);
|
centre(out, gamedate_season(f->locale), true);
|
||||||
rnl(F);
|
newline(out);
|
||||||
sprintf(buf, "%s, %s/%s (%s)", factionname(f),
|
sprintf(buf, "%s, %s/%s (%s)", factionname(f),
|
||||||
LOC(f->locale, rc_name_s(f->race, NAME_PLURAL)),
|
LOC(f->locale, rc_name_s(f->race, NAME_PLURAL)),
|
||||||
LOC(f->locale, mkname("school", magic_school[f->magiegebiet])), f->email);
|
LOC(f->locale, mkname("school", magic_school[f->magiegebiet])), f->email);
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
if (f_get_alliance(f)) {
|
if (f_get_alliance(f)) {
|
||||||
centre(F, alliancename(f->alliance), true);
|
centre(out, alliancename(f->alliance), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (f->age <= 2) {
|
if (f->age <= 2) {
|
||||||
|
@ -2215,33 +2130,33 @@ const char *charset)
|
||||||
ADDMSG(&f->msgs, msg_message("changepasswd", "value", f->passw));
|
ADDMSG(&f->msgs, msg_message("changepasswd", "value", f->passw));
|
||||||
}
|
}
|
||||||
RENDER(f, buf, sizeof(buf), ("newbie_password", "password", f->passw));
|
RENDER(f, buf, sizeof(buf), ("newbie_password", "password", f->passw));
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
s = locale_getstring(f->locale, "newbie_info_1");
|
s = locale_getstring(f->locale, "newbie_info_1");
|
||||||
if (s) {
|
if (s) {
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, s, true);
|
centre(out, s, true);
|
||||||
}
|
}
|
||||||
s = locale_getstring(f->locale, "newbie_info_2");
|
s = locale_getstring(f->locale, "newbie_info_2");
|
||||||
if (s) {
|
if (s) {
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, s, true);
|
centre(out, s, true);
|
||||||
}
|
}
|
||||||
if ((f->options & want(O_COMPUTER)) == 0) {
|
if ((f->options & want(O_COMPUTER)) == 0) {
|
||||||
f->options |= want(O_COMPUTER);
|
f->options |= want(O_COMPUTER);
|
||||||
s = locale_getstring(f->locale, "newbie_info_3");
|
s = locale_getstring(f->locale, "newbie_info_3");
|
||||||
if (s) {
|
if (s) {
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, s, true);
|
centre(out, s, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rnl(F);
|
newline(out);
|
||||||
#if SCORE_MODULE
|
#if SCORE_MODULE
|
||||||
if (f->options & want(O_SCORE) && f->age > DISPLAYSCORE) {
|
if (f->options & want(O_SCORE) && f->age > DISPLAYSCORE) {
|
||||||
RENDER(f, buf, sizeof(buf), ("nr_score", "score average", f->score,
|
RENDER(f, buf, sizeof(buf), ("nr_score", "score average", f->score,
|
||||||
average_score_of_age(f->age, f->age / 24 + 1)));
|
average_score_of_age(f->age, f->age / 24 + 1)));
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef COUNT_AGAIN
|
#ifdef COUNT_AGAIN
|
||||||
|
@ -2273,7 +2188,7 @@ const char *charset)
|
||||||
m = msg_message("nr_population", "population units limit", no_people, no_units, rule_faction_limit());
|
m = msg_message("nr_population", "population units limit", no_people, no_units, rule_faction_limit());
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
if (f->race == get_race(RC_HUMAN)) {
|
if (f->race == get_race(RC_HUMAN)) {
|
||||||
int maxmig = count_maxmigrants(f);
|
int maxmig = count_maxmigrants(f);
|
||||||
if (maxmig > 0) {
|
if (maxmig > 0) {
|
||||||
|
@ -2281,7 +2196,7 @@ const char *charset)
|
||||||
msg_message("nr_migrants", "units maxunits", count_migrants(f), maxmig);
|
msg_message("nr_migrants", "units maxunits", count_migrants(f), maxmig);
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (f_get_alliance(f)) {
|
if (f_get_alliance(f)) {
|
||||||
|
@ -2291,7 +2206,7 @@ const char *charset)
|
||||||
turn - f->alliance_joindate);
|
turn - f->alliance_joindate);
|
||||||
nr_render(m, f->locale, buf, sizeof(buf), f);
|
nr_render(m, f->locale, buf, sizeof(buf), f);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
}
|
}
|
||||||
maxh = maxheroes(f);
|
maxh = maxheroes(f);
|
||||||
if (maxh) {
|
if (maxh) {
|
||||||
|
@ -2299,27 +2214,27 @@ const char *charset)
|
||||||
msg_message("nr_heroes", "units maxunits", countheroes(f), maxh);
|
msg_message("nr_heroes", "units maxunits", countheroes(f), maxh);
|
||||||
nr_render(msg, f->locale, buf, sizeof(buf), f);
|
nr_render(msg, f->locale, buf, sizeof(buf), f);
|
||||||
msg_release(msg);
|
msg_release(msg);
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (f->items != NULL) {
|
if (f->items != NULL) {
|
||||||
message *msg = msg_message("nr_claims", "items", f->items);
|
message *msg = msg_message("nr_claims", "items", f->items);
|
||||||
nr_render(msg, f->locale, buf, sizeof(buf), f);
|
nr_render(msg, f->locale, buf, sizeof(buf), f);
|
||||||
msg_release(msg);
|
msg_release(msg);
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Insekten-Winter-Warnung */
|
/* Insekten-Winter-Warnung */
|
||||||
if (f->race == get_race(RC_INSECT)) {
|
if (f->race == get_race(RC_INSECT)) {
|
||||||
if (thisseason == 0) {
|
if (thisseason == 0) {
|
||||||
centre(F, LOC(f->locale, "nr_insectwinter"), true);
|
centre(out, LOC(f->locale, "nr_insectwinter"), true);
|
||||||
rnl(F);
|
newline(out);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (nextseason == 0) {
|
if (nextseason == 0) {
|
||||||
centre(F, LOC(f->locale, "nr_insectfall"), true);
|
centre(out, LOC(f->locale, "nr_insectfall"), true);
|
||||||
rnl(F);
|
newline(out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2342,20 +2257,20 @@ const char *charset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flag > 0) {
|
if (flag > 0) {
|
||||||
rnl(F);
|
newline(out);
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
rp_messages(F, f->msgs, f, 0, true);
|
rp_messages(out, f->msgs, f, 0, true);
|
||||||
rp_battles(F, f);
|
rp_battles(out, f);
|
||||||
a = a_find(f->attribs, &at_reportspell);
|
a = a_find(f->attribs, &at_reportspell);
|
||||||
if (a) {
|
if (a) {
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, LOC(f->locale, "section_newspells"), true);
|
centre(out, LOC(f->locale, "section_newspells"), true);
|
||||||
while (a && a->type == &at_reportspell) {
|
while (a && a->type == &at_reportspell) {
|
||||||
spellbook_entry *sbe = (spellbook_entry *)a->data.v;
|
spellbook_entry *sbe = (spellbook_entry *)a->data.v;
|
||||||
nr_spell(F, sbe, f->locale);
|
nr_spell(out, sbe, f->locale);
|
||||||
a = a->next;
|
a = a->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2370,17 +2285,17 @@ const char *charset)
|
||||||
const char *pname = resourcename(ptype->itype->rtype, 0);
|
const char *pname = resourcename(ptype->itype->rtype, 0);
|
||||||
|
|
||||||
if (ch == 0) {
|
if (ch == 0) {
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, LOC(f->locale, "section_newpotions"), true);
|
centre(out, LOC(f->locale, "section_newpotions"), true);
|
||||||
ch = 1;
|
ch = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, LOC(f->locale, pname), true);
|
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);
|
ptype->level);
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
rnl(F);
|
newline(out);
|
||||||
|
|
||||||
bufp = buf;
|
bufp = buf;
|
||||||
size = sizeof(buf) - 1;
|
size = sizeof(buf) - 1;
|
||||||
|
@ -2403,22 +2318,22 @@ const char *charset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
centre(F, buf, true);
|
centre(out, buf, true);
|
||||||
rnl(F);
|
newline(out);
|
||||||
if (description == NULL) {
|
if (description == NULL) {
|
||||||
const char *potiontext = mkname("potion", pname);
|
const char *potiontext = mkname("potion", pname);
|
||||||
description = LOC(f->locale, potiontext);
|
description = LOC(f->locale, potiontext);
|
||||||
}
|
}
|
||||||
centre(F, description, true);
|
centre(out, description, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rnl(F);
|
newline(out);
|
||||||
centre(F, LOC(f->locale, "nr_alliances"), false);
|
centre(out, LOC(f->locale, "nr_alliances"), false);
|
||||||
rnl(F);
|
newline(out);
|
||||||
|
|
||||||
allies(F, f);
|
allies(out, f);
|
||||||
|
|
||||||
rpline(F);
|
rpline(out);
|
||||||
|
|
||||||
anyunits = 0;
|
anyunits = 0;
|
||||||
|
|
||||||
|
@ -2437,7 +2352,7 @@ const char *charset)
|
||||||
|
|
||||||
if (sr->mode == see_unit) {
|
if (sr->mode == see_unit) {
|
||||||
anyunits = 1;
|
anyunits = 1;
|
||||||
describe(&out, sr, f);
|
describe(out, sr, f);
|
||||||
if (markets_module() && r->land) {
|
if (markets_module() && r->land) {
|
||||||
const item_type *lux = r_luxury(r);
|
const item_type *lux = r_luxury(r);
|
||||||
const item_type *herb = r->land->herbtype;
|
const item_type *herb = r->land->herbtype;
|
||||||
|
@ -2451,61 +2366,61 @@ const char *charset)
|
||||||
lux ? lux->rtype : herb->rtype);
|
lux ? lux->rtype : herb->rtype);
|
||||||
}
|
}
|
||||||
if (m) {
|
if (m) {
|
||||||
rnl(F);
|
newline(out);
|
||||||
nr_paragraph(&out, m, f);
|
nr_paragraph(out, m, f);
|
||||||
}
|
}
|
||||||
/* */
|
/* */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!fval(r->terrain, SEA_REGION) && rpeasants(r) / TRADE_FRACTION > 0) {
|
if (!fval(r->terrain, SEA_REGION) && rpeasants(r) / TRADE_FRACTION > 0) {
|
||||||
newline(&out);
|
newline(out);
|
||||||
prices(&out, r, f);
|
prices(out, r, f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
guards(F, r, f);
|
guards(out, r, f);
|
||||||
durchreisende(F, r, f);
|
durchreisende(out, r, f);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (sr->mode == see_far) {
|
if (sr->mode == see_far) {
|
||||||
describe(&out, sr, f);
|
describe(out, sr, f);
|
||||||
guards(F, r, f);
|
guards(out, r, f);
|
||||||
durchreisende(F, r, f);
|
durchreisende(out, r, f);
|
||||||
}
|
}
|
||||||
else if (sr->mode == see_lighthouse) {
|
else if (sr->mode == see_lighthouse) {
|
||||||
describe(&out, sr, f);
|
describe(out, sr, f);
|
||||||
durchreisende(F, r, f);
|
durchreisende(out, r, f);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
describe(&out, sr, f);
|
describe(out, sr, f);
|
||||||
durchreisende(F, r, f);
|
durchreisende(out, r, f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Statistik */
|
/* Statistik */
|
||||||
|
|
||||||
if (wants_stats && sr->mode == see_unit)
|
if (wants_stats && sr->mode == see_unit)
|
||||||
statistics(F, r, f);
|
statistics(out, r, f);
|
||||||
|
|
||||||
/* Nachrichten an REGION in der Region */
|
/* Nachrichten an REGION in der Region */
|
||||||
|
|
||||||
if (sr->mode == see_unit || sr->mode == see_travel) {
|
if (sr->mode == see_unit || sr->mode == see_travel) {
|
||||||
// TODO: Bug 2073
|
// TODO: Bug 2073
|
||||||
message_list *mlist = r_getmessages(r, f);
|
message_list *mlist = r_getmessages(r, f);
|
||||||
rp_messages(F, r->msgs, f, 0, true);
|
rp_messages(out, r->msgs, f, 0, true);
|
||||||
if (mlist)
|
if (mlist)
|
||||||
rp_messages(F, mlist, f, 0, true);
|
rp_messages(out, mlist, f, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* report all units. they are pre-sorted in an efficient manner */
|
/* report all units. they are pre-sorted in an efficient manner */
|
||||||
u = r->units;
|
u = r->units;
|
||||||
while (b) {
|
while (b) {
|
||||||
while (b && (!u || u->building != b)) {
|
while (b && (!u || u->building != b)) {
|
||||||
nr_building(&out, sr, b, f);
|
nr_building(out, sr, b, f);
|
||||||
b = b->next;
|
b = b->next;
|
||||||
}
|
}
|
||||||
if (b) {
|
if (b) {
|
||||||
nr_building(&out, sr, b, f);
|
nr_building(out, sr, b, f);
|
||||||
while (u && u->building == b) {
|
while (u && u->building == b) {
|
||||||
nr_unit(&out, f, u, 6, sr->mode);
|
nr_unit(out, f, u, 6, sr->mode);
|
||||||
u = u->next;
|
u = u->next;
|
||||||
}
|
}
|
||||||
b = b->next;
|
b = b->next;
|
||||||
|
@ -2514,7 +2429,7 @@ const char *charset)
|
||||||
while (u && !u->ship) {
|
while (u && !u->ship) {
|
||||||
if (stealthmod > INT_MIN) {
|
if (stealthmod > INT_MIN) {
|
||||||
if (u->faction == f || cansee(f, r, u, stealthmod)) {
|
if (u->faction == f || cansee(f, r, u, stealthmod)) {
|
||||||
nr_unit(&out, f, u, 4, sr->mode);
|
nr_unit(out, f, u, 4, sr->mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(!u->building);
|
assert(!u->building);
|
||||||
|
@ -2522,13 +2437,13 @@ const char *charset)
|
||||||
}
|
}
|
||||||
while (sh) {
|
while (sh) {
|
||||||
while (sh && (!u || u->ship != sh)) {
|
while (sh && (!u || u->ship != sh)) {
|
||||||
nr_ship(&out, sr, sh, f, NULL);
|
nr_ship(out, sr, sh, f, NULL);
|
||||||
sh = sh->next;
|
sh = sh->next;
|
||||||
}
|
}
|
||||||
if (sh) {
|
if (sh) {
|
||||||
nr_ship(&out, sr, sh, f, u);
|
nr_ship(out, sr, sh, f, u);
|
||||||
while (u && u->ship == sh) {
|
while (u && u->ship == sh) {
|
||||||
nr_unit(&out, f, u, 6, sr->mode);
|
nr_unit(out, f, u, 6, sr->mode);
|
||||||
u = u->next;
|
u = u->next;
|
||||||
}
|
}
|
||||||
sh = sh->next;
|
sh = sh->next;
|
||||||
|
@ -2537,19 +2452,19 @@ const char *charset)
|
||||||
|
|
||||||
assert(!u);
|
assert(!u);
|
||||||
|
|
||||||
rnl(F);
|
newline(out);
|
||||||
rpline(F);
|
rpline(out);
|
||||||
}
|
}
|
||||||
if (!is_monsters(f)) {
|
if (!is_monsters(f)) {
|
||||||
if (!anyunits) {
|
if (!anyunits) {
|
||||||
rnl(F);
|
newline(out);
|
||||||
rparagraph(F, LOC(f->locale, "nr_youaredead"), 0, 2, 0);
|
paragraph(out, LOC(f->locale, "nr_youaredead"), 0, 2, 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
list_address(F, f, ctx->addresses);
|
list_address(out, f, ctx->addresses);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fstream_done(&out);
|
fstream_done(&strm);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue