Sectors need space for items, deliveries and distribution thresholds.

To save space, the ancients invented `variables': a collection of
key-value pairs, missing means zero value, space for `enough' keys.
This complicates the code, as assigning to a `variable' can fail for
lack of space.  Over time, `enough' increased, and for quite some time
now `variables' have been *wasting* space.  This changeset replaces
them, except in struct mchrstr, struct lchrstr and struct pchrstr,
where they are read-only, and will be replaced later.  It is only a
first step; further cleanup is required.  To simplify and minimize
this necessarily huge changeset, the new item[] arrays have an unused
slot 0, and the old variable types V_CIVIL, ... are still defined, but
must have the same values as the item types I_CIVIL, ...
This commit is contained in:
Markus Armbruster 2004-03-03 16:54:22 +00:00
parent ba86513b01
commit eccc5cb7d7
86 changed files with 853 additions and 1226 deletions

View file

@ -290,12 +290,10 @@ prsect(struct sctstr *sect)
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);
sect->sct_che, sect->sct_pstage, sect->sct_ptime,
sect->sct_fallout, sect->sct_avail);
pr("Mines <M>: %d\t", getvar(V_MINE, (s_char *)sect, EF_SECTOR));
pr("Mines <M>: %d\t", sect->sct_mines);
pr("Coastal <C>: %d\n", sect->sct_coastal);
pr("Road %% <R>: %d\t", sect->sct_road);
pr("Rail %% <r>: %d\t", sect->sct_rail);
@ -434,9 +432,8 @@ pr_ship(struct shpstr *ship)
pr("Retreat path <R>: '%s'\t\tRetreat Flags <W>: %d\n",
ship->shp_rpath, (int)ship->shp_rflags);
getvec(VT_ITEM, vec, (s_char *)ship, EF_SHIP);
pr("Plague Stage <a>: %d\n",
getvar(V_PSTAGE, (s_char *)ship, EF_SHIP));
pr("Plague Time <b>: %d\n", getvar(V_PTIME, (s_char *)ship, EF_SHIP));
pr("Plague Stage <a>: %d\n", ship->shp_pstage);
pr("Plague Time <b>: %d\n", ship->shp_ptime);
pr("civ mil uw food shl gun pet irn dst oil lcm hcm rad\n");
pr(" c m u f s g p i d o l h r\n");
pr("%3d", vec[I_CIVIL]);
@ -588,32 +585,32 @@ doland(s_char op, int arg, s_char *p, struct sctstr *sect)
sect->sct_loyal = (u_char)new;
break;
case 'x':
old = getvar(V_CHE, (s_char *)sect, EF_SECTOR);
old = sect->sct_che;
new = errcheck(arg, 0, 65536);
pr("Guerillas in %s changed from %d to %d%\n",
xyas(sect->sct_x, sect->sct_y, player->cnum), old, new);
putvar(V_CHE, new, (s_char *)sect, EF_SECTOR);
sect->sct_che = new;
break;
case 'p':
old = getvar(V_PSTAGE, (s_char *)sect, EF_SECTOR);
old = sect->sct_pstage;
new = errcheck(arg, 0, PLG_EXPOSED);
pr("Plague stage of %s changed from %d to %d%\n",
xyas(sect->sct_x, sect->sct_y, player->cnum), old, new);
putvar(V_PSTAGE, new, (s_char *)sect, EF_SECTOR);
sect->sct_pstage = new;
break;
case 't':
old = getvar(V_PTIME, (s_char *)sect, EF_SECTOR);
old = sect->sct_ptime;
new = errcheck(arg, 0, 255);
pr("Plague time of %s changed from %d to %d%\n",
xyas(sect->sct_x, sect->sct_y, player->cnum), old, new);
putvar(V_PTIME, new, (s_char *)sect, EF_SECTOR);
sect->sct_ptime = new;
break;
case 'F':
old = getvar(V_FALLOUT, (s_char *)sect, EF_SECTOR);
old = sect->sct_fallout;
new = errcheck(arg, 0, 9999);
pr("Fallout for sector %s changed from %d to %d\n",
xyas(sect->sct_x, sect->sct_y, player->cnum), old, new);
putvar(V_FALLOUT, new, (s_char *)sect, EF_SECTOR);
sect->sct_fallout = new;
break;
case 'a':
new = errcheck(arg, 0, 9999);
@ -621,7 +618,7 @@ doland(s_char op, int arg, s_char *p, struct sctstr *sect)
sect->sct_avail = new;
break;
case 'M':
putvar(V_MINE, arg, (s_char *)sect, EF_SECTOR);
sect->sct_mines = arg;
pr("Mines changed to %d\n", arg);
break;
case 'L':
@ -797,10 +794,10 @@ doship(s_char op, int arg, s_char *p, struct shpstr *ship)
newx = newy = 0;
switch (op) {
case 'a':
putvar(V_PSTAGE, arg, (s_char *)ship, EF_SHIP);
ship->shp_pstage = arg;
break;
case 'b':
putvar(V_PTIME, arg, (s_char *)ship, EF_SHIP);
ship->shp_ptime = arg;
break;
case 'R':
memcpy(ship->shp_rpath, p, sizeof(ship->shp_rpath));
@ -877,82 +874,43 @@ doship(s_char op, int arg, s_char *p, struct shpstr *ship)
ship->shp_nplane = errcheck(arg, 0, 100);
break;
case 'c':
if (!putvar(V_CIVIL, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_CIVIL] = arg;
break;
case 'm':
if (!putvar(V_MILIT, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_MILIT] = arg;
break;
case 'u':
if (!putvar(V_UW, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_UW] = arg;
break;
case 'f':
if (!putvar(V_FOOD, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_FOOD] = arg;
break;
case 's':
if (!putvar(V_SHELL, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_SHELL] = arg;
break;
case 'g':
if (!putvar(V_GUN, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_GUN] = arg;
break;
case 'p':
if (!putvar(V_PETROL, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_PETROL] = arg;
break;
case 'i':
if (!putvar(V_IRON, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_IRON] = arg;
break;
case 'd':
if (!putvar(V_DUST, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_DUST] = arg;
break;
case 'o':
if (!putvar(V_OIL, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_OIL] = arg;
break;
case 'l':
if (!putvar(V_LCM, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_LCM] = arg;
break;
case 'h':
if (!putvar(V_HCM, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_HCM] = arg;
break;
case 'r':
if (!putvar(V_RAD, arg, (s_char *)ship, EF_SHIP)) {
pr("No room on ship!\n");
return RET_FAIL;
}
ship->shp_item[I_RAD] = arg;
break;
default:
pr("huh? (%c)\n", op);
@ -1050,82 +1008,43 @@ dounit(s_char op, int arg, s_char *p, struct lndstr *land)
land->lnd_rflags = arg;
break;
case 'c':
if (!putvar(V_CIVIL, arg, (s_char *)land, EF_LAND)) {
pr("No room on land unit!\n");
return RET_FAIL;
}
land->lnd_item[I_CIVIL] = arg;
break;
case 'm':
if (!putvar(V_MILIT, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_MILIT] = arg;
break;
case 'u':
if (!putvar(V_UW, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_UW] = arg;
break;
case 'f':
if (!putvar(V_FOOD, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_FOOD] = arg;
break;
case 's':
if (!putvar(V_SHELL, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_SHELL] = arg;
break;
case 'g':
if (!putvar(V_GUN, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_GUN] = arg;
break;
case 'p':
if (!putvar(V_PETROL, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_PETROL] = arg;
break;
case 'i':
if (!putvar(V_IRON, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_IRON] = arg;
break;
case 'd':
if (!putvar(V_DUST, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_DUST] = arg;
break;
case 'o':
if (!putvar(V_OIL, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_OIL] = arg;
break;
case 'l':
if (!putvar(V_LCM, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_LCM] = arg;
break;
case 'h':
if (!putvar(V_HCM, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_HCM] = arg;
break;
case 'r':
if (!putvar(V_RAD, arg, (s_char *)land, EF_LAND)) {
pr("No room on land!\n");
return RET_FAIL;
}
land->lnd_item[I_RAD] = arg;
break;
default:
pr("huh? (%c)\n", op);