Reduce massive code duplication in setsector(), setres()

There's the same sector loop in every switch case.  Loop around the
switch instead.
This commit is contained in:
Markus Armbruster 2011-04-16 20:30:22 +02:00
parent 9afc6a8e5c
commit f4db90c849
2 changed files with 73 additions and 221 deletions

View file

@ -48,110 +48,61 @@ setres(void)
char *p;
struct nstr_sect nstr;
char buf[1024];
char char0;
what = getstarg(player->argp[1],
"Set what (iron, gold, oil, uranium, fertility)? ",
buf);
if (!what)
return RET_SYN;
switch (what[0]) {
case 'i':
if (!snxtsct(&nstr, player->argp[2]))
char0 = what[0];
if (!snxtsct(&nstr, player->argp[2]))
return RET_SYN;
while (nxtsct(&nstr, &sect) > 0) {
p = getstarg(player->argp[3], "What value : ", buf);
if (!p || !*p)
return RET_SYN;
while (nxtsct(&nstr, &sect) > 0) {
p = getstarg(player->argp[3], "What value : ", buf);
if (!p || !*p)
return RET_SYN;
amt = atoi(p);
if (amt > 100)
amt = 100;
if (amt < 0)
amt = 0;
amt = atoi(p);
if (amt > 100)
amt = 100;
if (amt < 0)
amt = 0;
switch (char0) {
case 'i':
if (sect.sct_own != 0)
resnoise(&sect, 1, "Iron ore content",
(int)sect.sct_min, amt);
sect.sct_min = (unsigned char)amt;
putsect(&sect);
}
break;
case 'g':
if (!snxtsct(&nstr, player->argp[2]))
return RET_SYN;
while (nxtsct(&nstr, &sect) > 0) {
p = getstarg(player->argp[3], "What value : ", buf);
if (!p || !*p)
return RET_SYN;
amt = atoi(p);
if (amt > 100)
amt = 100;
if (amt < 0)
amt = 0;
break;
case 'g':
if (sect.sct_own != 0)
resnoise(&sect, 1, "Gold content",
(int)sect.sct_gmin, amt);
sect.sct_gmin = (unsigned char)amt;
putsect(&sect);
}
break;
case 'o':
if (!snxtsct(&nstr, player->argp[2]))
return RET_SYN;
while (nxtsct(&nstr, &sect) > 0) {
p = getstarg(player->argp[3], "What value : ", buf);
if (!p || !*p)
return RET_SYN;
amt = atoi(p);
if (amt > 100)
amt = 100;
if (amt < 0)
amt = 0;
break;
case 'o':
if (sect.sct_own != 0)
resnoise(&sect, 1, "Oil content", (int)sect.sct_oil, amt);
sect.sct_oil = (unsigned char)amt;
putsect(&sect);
}
break;
case 'f':
if (!snxtsct(&nstr, player->argp[2]))
return RET_SYN;
while (nxtsct(&nstr, &sect) > 0) {
p = getstarg(player->argp[3], "What value : ", buf);
if (!p || !*p)
return RET_SYN;
amt = atoi(p);
if (amt > 100)
amt = 100;
if (amt < 0)
amt = 0;
break;
case 'f':
if (sect.sct_own != 0)
resnoise(&sect, 1, "Fertility content",
(int)sect.sct_fertil, amt);
sect.sct_fertil = (unsigned char)amt;
putsect(&sect);
}
break;
case 'u':
if (!snxtsct(&nstr, player->argp[2]))
return RET_SYN;
while (nxtsct(&nstr, &sect) > 0) {
p = getstarg(player->argp[3], "What value : ", buf);
if (!p || !*p)
return RET_SYN;
amt = atoi(p);
if (amt > 100)
amt = 100;
if (amt < 0)
amt = 0;
break;
case 'u':
if (sect.sct_own != 0)
resnoise(&sect, 1, "Uranium content",
(int)sect.sct_uran, amt);
sect.sct_uran = (unsigned char)amt;
putsect(&sect);
break;
default:
pr("huh?\n");
return RET_SYN;
}
break;
default:
pr("huh?\n");
return RET_SYN;
putsect(&sect);
}
return RET_OK;
}