From 7c6067466cc67a3087547720d406f852330e386b Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 17 Dec 2003 17:24:30 +0000 Subject: [PATCH] (edit, prsect, doland): Fix `editing' sector coordinates (copies sector). New: edit distribution sector, designation and new designation. From Ron Koenderink. --- include/prototypes.h | 2 +- src/lib/commands/edit.c | 88 ++++++++++++++++++++++++++++------------- 2 files changed, 62 insertions(+), 28 deletions(-) diff --git a/include/prototypes.h b/include/prototypes.h index 8caf2f3c..6c2fa2ab 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -151,7 +151,7 @@ extern int dist(void); extern int drop(void); extern int dump(void); extern int echo(void); -extern int doland(s_char, int, struct sctstr *); +extern int doland(s_char, int, s_char *, struct sctstr *); extern int docountry(s_char, int, s_char *, float, natid, struct natstr *); extern int doship(s_char, int, s_char *, struct shpstr *); extern int dounit(s_char, int, s_char *, struct lndstr *); diff --git a/src/lib/commands/edit.c b/src/lib/commands/edit.c index fb6bb226..b6755f55 100644 --- a/src/lib/commands/edit.c +++ b/src/lib/commands/edit.c @@ -31,6 +31,7 @@ * David Muir Sharnoff * Chad Zabel, 1994 * Steve McClure, 1998-2000 + * Ron Koenderink, 2003 */ #include @@ -63,7 +64,7 @@ static void prsect(struct sctstr *sect); static void noise(struct sctstr *sptr, int public_amt, s_char *name, int old, int new); static void benefit(natid who, int good); -int doland(s_char op, int arg, struct sctstr *sect); +int doland(s_char op, int arg, s_char *p, struct sctstr *sect); int docountry(s_char op, int arg, s_char *p, float farg, natid nat, struct natstr *np); int doship(s_char op, int arg, s_char *p, struct shpstr *ship); @@ -71,9 +72,6 @@ int dounit(s_char op, int arg, s_char *p, struct lndstr *land); int doplane(s_char op, int arg, s_char *p, struct plnstr *plane); -/* - * format: give c - */ int edit(void) { @@ -163,15 +161,14 @@ edit(void) ptr = &buf[0]; *ptr = 0; for (;;) { - if (player->argp[arg_index] != 0) { - if (player->argp[arg_index+1] != 0) { + if (player->argp[arg_index] != 0) { + if (player->argp[arg_index+1] != 0) { thing = player->argp[arg_index++]; ptr = player->argp[arg_index++]; arg = atoi(ptr); } else return RET_SYN; - } - else if (arg_index == 3) { + } else if (arg_index == 3) { if ((err = getin(&thing, &ptr, &arg, buf)) != RET_OK) { if (err == END) { switch (ewhat) { @@ -205,7 +202,7 @@ edit(void) return err; break; case 'l': - if ((err = doland(thing[0], arg, §)) != RET_OK) + if ((err = doland(thing[0], arg, ptr, §)) != RET_OK) return err; if (!putsect(§)) return RET_FAIL; @@ -276,20 +273,27 @@ noise(struct sctstr *sptr, int public_amt, s_char *name, int old, int new) static void prsect(struct sctstr *sect) { - pr("X coord : %d\t", sect->sct_x); - pr("Y coord : %d\n", sect->sct_y); - pr("X dist coord: %d\t", sect->sct_dist_x); - pr("Y dist coord: %d\n", sect->sct_dist_y); - pr(" sect own oo eff mob min gld frt oil urn wrk lty che plg ptime fall avail\n"); - pr("things: o O e m i g f c u w l x p t F a\n"); - prxy("%4d,%-4d", sect->sct_x, sect->sct_y, player->cnum); - pr(" %c%c %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %4d %3d %5d %4d %5d\n", dchr[sect->sct_type].d_mnem, (sect->sct_newtype == sect->sct_type) ? ' ' : dchr[sect->sct_newtype].d_mnem, sect->sct_own, sect->sct_oldown, sect->sct_effic, sect->sct_mobil, sect->sct_min, sect->sct_gmin, sect->sct_fertil, sect->sct_oil, sect->sct_uran, sect->sct_work, sect->sct_loyal, getvar(V_CHE, (s_char *)sect, EF_SECTOR), getvar(V_PSTAGE, (s_char *)sect, EF_SECTOR), getvar(V_PTIME, (s_char *)sect, EF_SECTOR), getvar(V_FALLOUT, (s_char *)sect, EF_SECTOR), sect->sct_avail); + pr("Location : %s\t", xyas(sect->sct_x, sect->sct_y, player->cnum)); + pr("Distribution sector : %s\n", + xyas(sect->sct_dist_x, sect->sct_dist_y, player->cnum)); + pr("Designation : %c\t New designation : %c\n", + dchr[sect->sct_type].d_mnem, dchr[sect->sct_newtype].d_mnem); + pr("own oo eff mob min gld frt oil urn wrk lty che plg ptime fall avail\n"); + pr(" o O e m i g f c u w l x p t F a\n"); + pr("%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %4d %3d %5d %4d %5d\n", + sect->sct_own, sect->sct_oldown, sect->sct_effic, sect->sct_mobil, + sect->sct_min, sect->sct_gmin, sect->sct_fertil, sect->sct_oil, + sect->sct_uran, sect->sct_work, sect->sct_loyal, + getvar(V_CHE, (s_char *)sect, EF_SECTOR), + getvar(V_PSTAGE, (s_char *)sect, EF_SECTOR), + getvar(V_PTIME, (s_char *)sect, EF_SECTOR), + getvar(V_FALLOUT, (s_char *)sect, EF_SECTOR), sect->sct_avail); - pr(" Mines : %d\n", getvar(V_MINE, (s_char *)sect, EF_SECTOR)); - pr(" Road %% : %d\n", sect->sct_road); - pr(" Rail %% : %d\n", sect->sct_rail); - pr(" Defense %% : %d\n", sect->sct_defense); - pr(" Coastal : %d\n", sect->sct_coastal); + pr("Mines : %d\t", getvar(V_MINE, (s_char *)sect, EF_SECTOR)); + pr("Coastal : %d\n", sect->sct_coastal); + pr("Road %% : %d\t", sect->sct_road); + pr("Rail %% : %d\t", sect->sct_rail); + pr("Defense %% : %d\n", sect->sct_defense); } @@ -479,10 +483,12 @@ getin(s_char **what, s_char **p, int *arg, s_char *buf) int -doland(s_char op, int arg, struct sctstr *sect) +doland(s_char op, int arg, s_char *p, struct sctstr *sect) { natid newown, oldown; + coord newx, newy; int new, old; + int des; switch (op) { case 'C': if (arg < 0) @@ -612,11 +618,39 @@ doland(s_char op, int arg, struct sctstr *sect) putvar(V_MINE, arg, (s_char *)sect, EF_SECTOR); pr("Mines changed to %d\n", arg); break; - case 'X': - sect->sct_x = arg; + case 'L': + if (!sarg_xy(p, &newx, &newy)) + return RET_SYN; + sect->sct_x = newx; + sect->sct_y = newy; break; - case 'Y': - sect->sct_y = arg; + case 'D': + if (!sarg_xy(p, &newx, &newy)) + return RET_SYN; + pr("Distribtion Location for sector %s changed from %s to %s\n", + xyas(sect->sct_x, sect->sct_y, player->cnum), + xyas(sect->sct_dist_x, sect->sct_dist_y, player->cnum), + xyas(newx, newy, player->cnum)); + sect->sct_dist_x = newx; + sect->sct_dist_y = newy; + break; + case 's': + des = typematch(p, EF_SECTOR); + if (des < 0) + return RET_SYN; + pr("Designation for sector %s changed from %c to %c\n", + xyas(sect->sct_x, sect->sct_y, player->cnum), + dchr[sect->sct_type].d_mnem, dchr[des].d_mnem); + sect->sct_type = des; + break; + case 'S': + des = typematch(p, EF_SECTOR); + if (des < 0) + return RET_SYN; + pr("New Designation for sector %s changed from %c to %c\n", + xyas(sect->sct_x, sect->sct_y, player->cnum), + dchr[sect->sct_newtype].d_mnem, dchr[des].d_mnem); + sect->sct_newtype = des; break; case 'R': if (arg > 100)