const char *racename(const struct locale *loc, const unit * u, const race * rc) { const char *prefix = raceprefix(u); if (prefix != NULL) { static char lbuf[80]; char *bufp = lbuf; size_t size = sizeof(lbuf) - 1; int ch, bytes; bytes = (int)strlcpy(bufp, LOC(loc, mkname("prefix", prefix)), size); if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); bytes = (int)strlcpy(bufp, LOC(loc, rc_name(rc, u->number != 1)), size); assert(~bufp[0] & 0x80 || !"unicode/not implemented"); ch = tolower(*(unsigned char *)bufp); bufp[0] = (char)ch; if (wrptr(&bufp, &size, bytes) != 0) WARN_STATIC_BUFFER(); *bufp = 0; return lbuf; } return LOC(loc, rc_name(rc, u->number != 1)); }
static void out_faction(FILE * file, const struct faction *f) { if (alliances != NULL) { fprintf(file, "%s (%s/%d) (%.3s/%.3s), %d Einh., %d Pers., $%d, %d NMR\n", f->name, itoa36(f->no), f_get_alliance(f) ? f->alliance->id : 0, LOC(default_locale, rc_name(f->race, NAME_SINGULAR)), magic_school[f->magiegebiet], count_units(f), f->num_total, f->money, turn - f->lastorders); } else { fprintf(file, "%s (%.3s/%.3s), %d Einh., %d Pers., $%d, %d NMR\n", factionname(f), LOC(default_locale, rc_name(f->race, NAME_SINGULAR)), magic_school[f->magiegebiet], count_units(f), f->num_total, f->money, turn - f->lastorders); } }
void report_summary(summary * s, summary * o, bool full) { FILE *F = NULL; int i, newplayers = 0; faction *f; char zText[MAX_PATH]; if (full) { sprintf(zText, "%s/parteien.full", basepath()); } else { sprintf(zText, "%s/parteien", basepath()); } F = fopen(zText, "w"); if (!F) { perror(zText); return; } #ifdef SUMMARY_BOM else { const unsigned char utf8_bom[4] = { 0xef, 0xbb, 0xbf, 0 }; fwrite(utf8_bom, 1, 3, F); } #endif log_info("writing summary to file: parteien.\n"); fprintf(F, "%s\n%s\n\n", game_name(), gamedate2(default_locale)); fprintf(F, "Auswertung Nr: %d\n\n", turn); fprintf(F, "Parteien: %s\n", pcomp(s->factions, o->factions)); fprintf(F, "Einheiten: %s\n", pcomp(s->nunits, o->nunits)); fprintf(F, "Spielerpopulation: %s\n", pcomp(s->playerpop, o->playerpop)); fprintf(F, " davon bewaffnet: %s\n", pcomp(s->armed_men, o->armed_men)); fprintf(F, " Helden: %s\n", pcomp(s->heroes, o->heroes)); if (full) { fprintf(F, "Regionen: %d\n", listlen(regions)); fprintf(F, "Bewohnte Regionen: %d\n", s->inhabitedregions); fprintf(F, "Landregionen: %d\n", s->landregionen); fprintf(F, "Spielerregionen: %d\n", s->regionen_mit_spielern); fprintf(F, "Landspielerregionen: %d\n", s->landregionen_mit_spielern); fprintf(F, "Orkifizierte Regionen: %d\n", s->orkifizierte_regionen); fprintf(F, "Inaktive Vulkane: %d\n", s->inactive_volcanos); fprintf(F, "Aktive Vulkane: %d\n\n", s->active_volcanos); } for (i = 0; i < MAXRACES; i++) { if (i != RC_TEMPLATE && i != RC_CLONE && s->factionrace[i]) { const race *rc = get_race(i); if (rc && playerrace(rc)) { fprintf(F, "%13s%s: %s\n", LOC(default_locale, rc_name(rc, NAME_CATEGORY)), LOC(default_locale, "stat_tribe_p"), pcomp(s->factionrace[i], o->factionrace[i])); } } } if (full) { fprintf(F, "\n"); { struct language *plang = s->languages; while (plang != NULL) { struct language *olang = o->languages; int nold = 0; while (olang && olang->locale != plang->locale) olang = olang->next; if (olang) nold = olang->number; fprintf(F, "Sprache %12s: %s\n", locale_name(plang->locale), rcomp(plang->number, nold)); plang = plang->next; } } } fprintf(F, "\n"); if (full) { for (i = 0; i < MAXRACES; i++) { if (s->poprace[i]) { const race *rc = get_race(i); fprintf(F, "%20s: %s\n", LOC(default_locale, rc_name(rc, NAME_PLURAL)), rcomp(s->poprace[i], o->poprace[i])); } } } else { for (i = 0; i < MAXRACES; i++) { if (i != RC_TEMPLATE && i != RC_CLONE && s->poprace[i]) { const race *rc = get_race(i); if (playerrace(rc)) { fprintf(F, "%20s: %s\n", LOC(default_locale, rc_name(rc, NAME_PLURAL)), rcomp(s->poprace[i], o->poprace[i])); } } } } if (full) { fprintf(F, "\nWaffen: %s\n", pcomp(s->waffen, o->waffen)); fprintf(F, "Ruestungen: %s\n", pcomp(s->ruestungen, o->ruestungen)); fprintf(F, "ungezaehmte Pferde: %s\n", pcomp(s->pferde, o->pferde)); fprintf(F, "gezaehmte Pferde: %s\n", pcomp(s->spielerpferde, o->spielerpferde)); fprintf(F, "Schiffe: %s\n", pcomp(s->schiffe, o->schiffe)); fprintf(F, "Gebaeude: %s\n", pcomp(s->gebaeude, o->gebaeude)); fprintf(F, "\nBauernpopulation: %s\n", pcomp(s->peasants, o->peasants)); fprintf(F, "Population gesamt: %d\n\n", s->playerpop + s->peasants); fprintf(F, "Reichtum Spieler: %s Silber\n", pcomp(s->playermoney, o->playermoney)); fprintf(F, "Reichtum Bauern: %s Silber\n", pcomp(s->peasantmoney, o->peasantmoney)); fprintf(F, "Reichtum gesamt: %s Silber\n\n", pcomp(s->playermoney + s->peasantmoney, o->playermoney + o->peasantmoney)); } fprintf(F, "\n\n"); newplayers = update_nmrs(); for (i = 0; i <= NMRTimeout(); ++i) { if (i == NMRTimeout()) { fprintf(F, "+ NMR:\t\t %d\n", nmrs[i]); } else { fprintf(F, "%d NMR:\t\t %d\n", i, nmrs[i]); } } if (age) { if (age[2] != 0) { fprintf(F, "Erstabgaben:\t %d%%\n", 100 - (dropouts[0] * 100 / age[2])); } if (age[3] != 0) { fprintf(F, "Zweitabgaben:\t %d%%\n", 100 - (dropouts[1] * 100 / age[3])); } } fprintf(F, "Neue Spieler:\t %d\n", newplayers); if (full) { if (factions) fprintf(F, "\nParteien:\n\n"); for (f = factions; f; f = f->next) { out_faction(F, f); } if (NMRTimeout() && full) { fprintf(F, "\n\nFactions with NMRs:\n"); for (i = NMRTimeout(); i > 0; --i) { for (f = factions; f; f = f->next) { if (i == NMRTimeout()) { if (turn - f->lastorders >= i) { out_faction(F, f); } } else { if (turn - f->lastorders == i) { out_faction(F, f); } } } } } } fclose(F); if (full) { log_info("writing date & turn\n"); writeturn(); } free(nmrs); nmrs = NULL; }
void sockaddr_str_test_conversions() { int i; char buf[1024]; #define hexdump(what) \ osmo_hexdump_buf(buf, sizeof(buf), (void*)(&what), sizeof(what), "", false) for (i = 0; i < ARRAY_SIZE(oip_data); i++) { struct osmo_sockaddr_str *x = &oip_data[i]; int rc; printf("\n\n"); dump_oip(x); printf(" osmo_sockaddr_str_is_set() = %s\n", osmo_sockaddr_str_is_set(x) ? "true" : "false"); { struct in_addr a = {}; rc = osmo_sockaddr_str_to_in_addr(x, &a); printf(" osmo_sockaddr_str_to_in_addr() %s in_addr=%s\n", rc_name(rc), hexdump(a)); if (rc == 0) { struct osmo_sockaddr_str back; rc = osmo_sockaddr_str_from_in_addr(&back, &a, x->port); printf(" -> osmo_sockaddr_str_from_in_addr() %s ", rc_name(rc)); dump_oip(&back); if (memcmp(x, &back, sizeof(back))) printf(" DIFFERS!\n"); } } { struct in6_addr a = {}; rc = osmo_sockaddr_str_to_in6_addr(x, &a); printf(" osmo_sockaddr_str_to_in6_addr() %s in6_addr=%s\n", rc_name(rc), hexdump(a)); if (rc == 0) { struct osmo_sockaddr_str back; rc = osmo_sockaddr_str_from_in6_addr(&back, &a, x->port); printf(" -> osmo_sockaddr_str_from_in6_addr() %s ", rc_name(rc)); dump_oip(&back); if (memcmp(x, &back, sizeof(back))) printf(" DIFFERS!\n"); } } { uint32_t a = 0; rc = osmo_sockaddr_str_to_32(x, &a); printf(" osmo_sockaddr_str_to_32() %s uint32_t=0x%x\n", rc_name(rc), a); if (rc == 0) { struct osmo_sockaddr_str back; rc = osmo_sockaddr_str_from_32(&back, a, x->port); printf(" -> osmo_sockaddr_str_from_32() %s ", rc_name(rc)); dump_oip(&back); if (memcmp(x, &back, sizeof(back))) printf(" DIFFERS!\n"); } } { uint32_t a = 0; rc = osmo_sockaddr_str_to_32n(x, &a); printf(" osmo_sockaddr_str_to_32n() %s uint32_t=0x%x\n", rc_name(rc), a); if (rc == 0) { struct osmo_sockaddr_str back; rc = osmo_sockaddr_str_from_32n(&back, a, x->port); printf(" -> osmo_sockaddr_str_from_32n() %s ", rc_name(rc)); dump_oip(&back); if (memcmp(x, &back, sizeof(back))) printf(" DIFFERS!\n"); } } { struct sockaddr_in a = {}; rc = osmo_sockaddr_str_to_sockaddr_in(x, &a); printf(" osmo_sockaddr_str_to_sockaddr_in() %s sockaddr_in=%s\n", rc_name(rc), hexdump(a)); if (rc == 0) { struct osmo_sockaddr_str back; rc = osmo_sockaddr_str_from_sockaddr_in(&back, &a); printf(" -> osmo_sockaddr_str_from_sockaddr_in() %s ", rc_name(rc)); dump_oip(&back); if (memcmp(x, &back, sizeof(back))) printf(" DIFFERS!\n"); } } { struct sockaddr_in6 a = {}; rc = osmo_sockaddr_str_to_sockaddr_in6(x, &a); printf(" osmo_sockaddr_str_to_sockaddr_in6() %s sockaddr_in6=%s\n", rc_name(rc), hexdump(a)); if (rc == 0) { struct osmo_sockaddr_str back; rc = osmo_sockaddr_str_from_sockaddr_in6(&back, &a); printf(" -> osmo_sockaddr_str_from_sockaddr_in6() %s ", rc_name(rc)); dump_oip(&back); if (memcmp(x, &back, sizeof(back))) printf(" DIFFERS!\n"); } } { struct sockaddr_storage a = {}; rc = osmo_sockaddr_str_to_sockaddr(x, &a); printf(" osmo_sockaddr_str_to_sockaddr() %s sockaddr_storage=%s\n", rc_name(rc), hexdump(a)); if (rc == 0) { struct osmo_sockaddr_str back; rc = osmo_sockaddr_str_from_sockaddr(&back, &a); printf(" -> osmo_sockaddr_str_from_sockaddr() %s ", rc_name(rc)); dump_oip(&back); if (memcmp(x, &back, sizeof(back))) printf(" DIFFERS!\n"); } } { struct osmo_sockaddr_str from_str; rc = osmo_sockaddr_str_from_str(&from_str, x->ip, x->port); printf(" osmo_sockaddr_str_from_str() %s ", rc_name(rc)); dump_oip(&from_str); if (rc == 0 && memcmp(x, &from_str, sizeof(from_str))) printf(" DIFFERS!\n"); } } }