#include "optlist.h"
struct stats {
- double res;
- double tech;
- double edu;
- double hap;
- int stat;
+ double res;
+ double tech;
+ double edu;
+ double hap;
+ int stat;
};
-static void printdiff(int mystat, double ours, struct natstr *natp, int what);
-static void repo_header(void);
-static void repo_list(struct stats *stat, natid cn, struct natstr *natp);
+static void printdiff(int mystat, double ours, struct natstr *natp,
+ int what);
+static void repo_header(void);
+static void repo_list(struct stats *stat, natid cn, struct natstr *natp);
-static int check(s_char *buf, double theirs, double min, double max, int shift, int what, int tolerance);
+static int check(s_char *buf, double theirs, double min, double max,
+ int shift, int what, int tolerance);
int
repo(void)
{
- struct natstr *natp;
- struct stats mystat;
- struct natstr nat;
- struct nstr_item ni;
- int first;
+ struct natstr *natp;
+ struct stats mystat;
+ struct natstr nat;
+ struct nstr_item ni;
+ int first;
- if (!snxtitem(&ni, EF_NATION, player->argp[1]))
- return RET_SYN;
- prdate();
- natp = getnatp(player->cnum);
- bzero((s_char *)&mystat, sizeof(struct stats));
- mystat.stat = natp->nat_stat;
- if (mystat.stat & STAT_NORM) {
- mystat.res = natp->nat_level[NAT_RLEV];
- mystat.tech = natp->nat_level[NAT_TLEV];
- mystat.edu = natp->nat_level[NAT_ELEV];
- mystat.hap = natp->nat_level[NAT_HLEV];
- }
+ if (!snxtitem(&ni, EF_NATION, player->argp[1]))
+ return RET_SYN;
+ prdate();
+ natp = getnatp(player->cnum);
+ bzero((s_char *)&mystat, sizeof(struct stats));
+ mystat.stat = natp->nat_stat;
+ if (mystat.stat & STAT_NORM) {
+ mystat.res = natp->nat_level[NAT_RLEV];
+ mystat.tech = natp->nat_level[NAT_TLEV];
+ mystat.edu = natp->nat_level[NAT_ELEV];
+ mystat.hap = natp->nat_level[NAT_HLEV];
+ }
+ if (opt_HIDDEN) {
+ repo_header();
+ first = 0;
+ } else {
+ first = 1;
+ }
+ while (nxtitem(&ni, (s_char *)&nat)) {
+ if (!(nat.nat_stat & STAT_INUSE))
+ continue;
if (opt_HIDDEN) {
+ if (!player->god && !getcontact(getnatp(player->cnum), ni.cur))
+ continue;
+ }
+ if (first) {
repo_header();
first = 0;
- } else {
- first = 1;
}
- while (nxtitem(&ni, (s_char *) &nat)) {
- if (!(nat.nat_stat & STAT_INUSE))
- continue;
- if (opt_HIDDEN) {
- if (!player->god &&
- !getcontact(getnatp(player->cnum), ni.cur))
- continue;
- }
- if (first) {
- repo_header();
- first = 0;
- }
- repo_list(&mystat, (natid)ni.cur, &nat);
- }
- return RET_OK;
+ repo_list(&mystat, (natid)ni.cur, &nat);
+ }
+ return RET_OK;
}
static void
repo_header(void)
{
- pr(" # name tech research education happiness ");
- if (player->god)
- pr("capital\n");
- else {
- if (opt_HIDDEN)
- pr("\n");
- else
- pr(" status\n");
- }
+ pr(" # name tech research education happiness ");
+ if (player->god)
+ pr("capital\n");
+ else {
+ if (opt_HIDDEN)
+ pr("\n");
+ else
+ pr(" status\n");
+ }
}
static void
repo_list(struct stats *stat, natid cn, struct natstr *natp)
{
- struct sctstr cap;
+ struct sctstr cap;
- if (player->god) {
- pr(" %-3d %-14.14s ", cn, natp->nat_cnam);
- pr(" %7.2f %7.2f %7.2f %7.2f",
- natp->nat_level[NAT_TLEV],
- natp->nat_level[NAT_RLEV],
- natp->nat_level[NAT_ELEV],
- natp->nat_level[NAT_HLEV]);
- prxy(" %4d,%-4d\n", natp->nat_xcap, natp->nat_ycap,
- player->cnum);
- return;
- }
- switch (natp->nat_stat & (STAT_NORM|STAT_GOD|STAT_NEW|STAT_SANCT)) {
- case STAT_NORM:
- case (STAT_NORM|STAT_SANCT):
- pr(" %-3d %-14.14s ", cn, natp->nat_cnam);
- printdiff(stat->stat, stat->tech, natp, NAT_TLEV);
- printdiff(stat->stat, stat->res, natp, NAT_RLEV);
- printdiff(stat->stat, stat->edu, natp, NAT_ELEV);
- printdiff(stat->stat, stat->hap, natp, NAT_HLEV);
- getsect(natp->nat_xcap, natp->nat_ycap, &cap);
- if (opt_HIDDEN) {
- pr("\n");
- } else {
- if ((cap.sct_own != cn) ||
- (cap.sct_type != SCT_CAPIT &&
- cap.sct_type != SCT_MOUNT) ||
- (natp->nat_flags & NF_SACKED))
- pr("In flux\n");
- else if (natp->nat_money <= 0)
- pr("Broke\n");
- else
- pr("Active\n");
- }
- break;
- case STAT_SANCT:
- break;
- case STAT_NEW:
- case 0:
- break;
- case STAT_SANCT|STAT_NORM|STAT_GOD:
- case STAT_NORM|STAT_GOD:
- case STAT_GOD:
- break;
- default:
- pr("???? ???? ???? ????\n");
- break;
+ if (player->god) {
+ pr(" %-3d %-14.14s ", cn, natp->nat_cnam);
+ pr(" %7.2f %7.2f %7.2f %7.2f",
+ natp->nat_level[NAT_TLEV],
+ natp->nat_level[NAT_RLEV],
+ natp->nat_level[NAT_ELEV], natp->nat_level[NAT_HLEV]);
+ prxy(" %4d,%-4d\n", natp->nat_xcap, natp->nat_ycap, player->cnum);
+ return;
+ }
+ switch (natp->
+ nat_stat & (STAT_NORM | STAT_GOD | STAT_NEW | STAT_SANCT)) {
+ case STAT_NORM:
+ case (STAT_NORM | STAT_SANCT):
+ pr(" %-3d %-14.14s ", cn, natp->nat_cnam);
+ printdiff(stat->stat, stat->tech, natp, NAT_TLEV);
+ printdiff(stat->stat, stat->res, natp, NAT_RLEV);
+ printdiff(stat->stat, stat->edu, natp, NAT_ELEV);
+ printdiff(stat->stat, stat->hap, natp, NAT_HLEV);
+ getsect(natp->nat_xcap, natp->nat_ycap, &cap);
+ if (opt_HIDDEN) {
+ pr("\n");
+ } else {
+ if ((cap.sct_own != cn) ||
+ (cap.sct_type != SCT_CAPIT &&
+ cap.sct_type != SCT_MOUNT) ||
+ (natp->nat_flags & NF_SACKED))
+ pr("In flux\n");
+ else if (natp->nat_money <= 0)
+ pr("Broke\n");
+ else
+ pr("Active\n");
}
+ break;
+ case STAT_SANCT:
+ break;
+ case STAT_NEW:
+ case 0:
+ break;
+ case STAT_SANCT | STAT_NORM | STAT_GOD:
+ case STAT_NORM | STAT_GOD:
+ case STAT_GOD:
+ break;
+ default:
+ pr("???? ???? ???? ????\n");
+ break;
+ }
}
static void
printdiff(int mystat, double ours, struct natstr *natp, int what)
{
- double theirs;
- int shift;
- int tolerance;
- s_char buf[128];
-
- if (natp->nat_cnum == player->cnum) {
- pr(" %7.2f ", ours);
- return;
- }
- if (ours && mystat & STAT_NORM &&
- natp->nat_stat &STAT_NORM) {
- theirs = natp->nat_level[what];
- if ((shift = min((int)theirs, (int)ours) - 100) > 0) {
- ours -= shift;
- theirs -= shift;
- } else
- shift = 0;
- switch (what) {
- case NAT_TLEV:
- tolerance = 20; break;
- case NAT_RLEV:
- tolerance = 10; break;
- default:
- tolerance = 5;
- }
- if (tolerance > 2 * ours)
- tolerance = (int)(2 * ours);
- if (check(buf, theirs, 2 * ours, -1.0, shift, what, tolerance));
- else if (check(buf, theirs, 1.5*ours, 2.0*ours, shift, what, tolerance));
- else if (check(buf, theirs, 1.2*ours, 1.5*ours, shift, what, tolerance));
- else if (check(buf, theirs, 1.1*ours, 1.2*ours, shift, what, tolerance));
- else if (check(buf, theirs, ours/1.1, 1.1*ours, shift, what, tolerance));
- else if (check(buf, theirs, ours/1.2, ours/1.1, shift, what, tolerance));
- else if (check(buf, theirs, ours/1.5, ours/1.2, shift, what, tolerance));
- else if (check(buf, theirs, ours/2.0, ours/1.5, shift, what, tolerance));
- else if (check(buf, theirs, -1.0, ours/2.0, shift, what, tolerance));
- else sprintf(buf, " n/a");
+ double theirs;
+ int shift;
+ int tolerance;
+ s_char buf[128];
+
+ if (natp->nat_cnum == player->cnum) {
+ pr(" %7.2f ", ours);
+ return;
+ }
+ if (ours && mystat & STAT_NORM && natp->nat_stat & STAT_NORM) {
+ theirs = natp->nat_level[what];
+ if ((shift = min((int)theirs, (int)ours) - 100) > 0) {
+ ours -= shift;
+ theirs -= shift;
} else
- sprintf(buf, " n/a");
+ shift = 0;
+ switch (what) {
+ case NAT_TLEV:
+ tolerance = 20;
+ break;
+ case NAT_RLEV:
+ tolerance = 10;
+ break;
+ default:
+ tolerance = 5;
+ }
+ if (tolerance > 2 * ours)
+ tolerance = (int)(2 * ours);
+ if (check(buf, theirs, 2 * ours, -1.0, shift, what, tolerance)) ;
+ else if (check
+ (buf, theirs, 1.5 * ours, 2.0 * ours, shift, what,
+ tolerance)) ;
+ else if (check
+ (buf, theirs, 1.2 * ours, 1.5 * ours, shift, what,
+ tolerance)) ;
+ else if (check
+ (buf, theirs, 1.1 * ours, 1.2 * ours, shift, what,
+ tolerance)) ;
+ else if (check
+ (buf, theirs, ours / 1.1, 1.1 * ours, shift, what,
+ tolerance)) ;
+ else if (check
+ (buf, theirs, ours / 1.2, ours / 1.1, shift, what,
+ tolerance)) ;
+ else if (check
+ (buf, theirs, ours / 1.5, ours / 1.2, shift, what,
+ tolerance)) ;
+ else if (check
+ (buf, theirs, ours / 2.0, ours / 1.5, shift, what,
+ tolerance)) ;
+ else if (check
+ (buf, theirs, -1.0, ours / 2.0, shift, what, tolerance)) ;
+ else
+ sprintf(buf, " n/a");
+ } else
+ sprintf(buf, " n/a");
- pr("%-11s ", buf);
+ pr("%-11s ", buf);
}
static int
-check(s_char *buf, double theirs, double min, double max, int shift, int what, int tolerance)
+check(s_char *buf, double theirs, double min, double max, int shift,
+ int what, int tolerance)
{
- double shove;
+ double shove;
- if (min < 0) {
- if (theirs <= max) {
- if (max < tolerance)
- max = tolerance;
- sprintf(buf, " 0 - %d", (int)max + shift);
- return 1;
- }
- } else if (max < 0) {
- if (theirs >= min) {
- sprintf(buf, " >= %d", (int)min + shift);
- return 1;
- }
- } else if (theirs >= min && theirs <= max) {
- if (max - min < tolerance) {
- shove = (tolerance - (max - min)) / 2;
- if (min + shift - shove >= 0) {
- min -= shove;
- max += shove;
- } else {
- min = 0;
- max = tolerance;
- }
- }
- sprintf(buf, "%4d - %d", (int)min + shift, (int)max + shift);
- return 1;
+ if (min < 0) {
+ if (theirs <= max) {
+ if (max < tolerance)
+ max = tolerance;
+ sprintf(buf, " 0 - %d", (int)max + shift);
+ return 1;
+ }
+ } else if (max < 0) {
+ if (theirs >= min) {
+ sprintf(buf, " >= %d", (int)min + shift);
+ return 1;
}
+ } else if (theirs >= min && theirs <= max) {
+ if (max - min < tolerance) {
+ shove = (tolerance - (max - min)) / 2;
+ if (min + shift - shove >= 0) {
+ min -= shove;
+ max += shove;
+ } else {
+ min = 0;
+ max = tolerance;
+ }
+ }
+ sprintf(buf, "%4d - %d", (int)min + shift, (int)max + shift);
+ return 1;
+ }
- return 0;
+ return 0;
}
-