From f4db90c849508792f5f9353964607d2fa66060cb Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 16 Apr 2011 20:30:22 +0200 Subject: [PATCH] Reduce massive code duplication in setsector(), setres() There's the same sector loop in every switch case. Loop around the switch instead. --- src/lib/commands/setres.c | 105 ++++++--------------- src/lib/commands/setsect.c | 189 +++++++++---------------------------- 2 files changed, 73 insertions(+), 221 deletions(-) diff --git a/src/lib/commands/setres.c b/src/lib/commands/setres.c index d6c5831b..df5129f8 100644 --- a/src/lib/commands/setres.c +++ b/src/lib/commands/setres.c @@ -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, §) > 0) { + p = getstarg(player->argp[3], "What value : ", buf); + if (!p || !*p) return RET_SYN; - while (nxtsct(&nstr, §) > 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(§, 1, "Iron ore content", (int)sect.sct_min, amt); sect.sct_min = (unsigned char)amt; - putsect(§); - } - break; - case 'g': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 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(§, 1, "Gold content", (int)sect.sct_gmin, amt); sect.sct_gmin = (unsigned char)amt; - putsect(§); - } - break; - case 'o': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 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(§, 1, "Oil content", (int)sect.sct_oil, amt); sect.sct_oil = (unsigned char)amt; - putsect(§); - } - break; - case 'f': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 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(§, 1, "Fertility content", (int)sect.sct_fertil, amt); sect.sct_fertil = (unsigned char)amt; - putsect(§); - } - break; - case 'u': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 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(§, 1, "Uranium content", (int)sect.sct_uran, amt); sect.sct_uran = (unsigned char)amt; - putsect(§); + break; + default: + pr("huh?\n"); + return RET_SYN; } - break; - default: - pr("huh?\n"); - return RET_SYN; + putsect(§); } return RET_OK; } diff --git a/src/lib/commands/setsect.c b/src/lib/commands/setsect.c index 68d0027b..f157abc9 100644 --- a/src/lib/commands/setsect.c +++ b/src/lib/commands/setsect.c @@ -61,15 +61,15 @@ setsector(void) char0 = what[0]; char1 = what[1]; - switch (char0) { - case 'i': - if (!snxtsct(&nstr, player->argp[2])) + if (!snxtsct(&nstr, player->argp[2])) + return RET_SYN; + while (nxtsct(&nstr, §) > 0) { + p = getstarg(player->argp[3], "What value : ", buf); + if (!p || !*p) return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + amt = atoi(p); + switch (char0) { + case 'i': current = sect.sct_min; current += amt; if (current < 0) @@ -80,17 +80,8 @@ setsector(void) resnoise(§, 1, "Iron ore content", (int)sect.sct_min, current); sect.sct_min = (unsigned char)current; - putsect(§); - } - break; - case 'g': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + break; + case 'g': current = sect.sct_gmin; current += amt; if (current < 0) @@ -101,19 +92,10 @@ setsector(void) resnoise(§, 1, "Gold content", (int)sect.sct_gmin, current); sect.sct_gmin = (unsigned char)current; - putsect(§); - } - break; - case 'o': - switch (char1) { - case 'i': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + break; + case 'o': + switch (char1) { + case 'i': current = sect.sct_oil; current += amt; if (current < 0) @@ -124,17 +106,8 @@ setsector(void) resnoise(§, 1, "Oil content", (int)sect.sct_oil, current); sect.sct_oil = (unsigned char)current; - putsect(§); - } - break; - case 'w': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + break; + case 'w': if ((amt < 0) || (amt > MAXNOC - 1)) return RET_SYN; pr("Owner of %s changed from %s (#%d) to %s (#%d).\n", @@ -150,17 +123,8 @@ setsector(void) "Sector %s gained from deity intervention\n", xyas(sect.sct_x, sect.sct_y, amt)); sect.sct_own = (natid)amt; - putsect(§); - } - break; - case 'l': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + break; + case 'l': if ((amt < 0) || (amt > MAXNOC - 1)) return RET_SYN; pr("Old owner of %s changed from %s (#%d) to %s (#%d).\n", @@ -168,22 +132,13 @@ setsector(void) cname(sect.sct_oldown), sect.sct_oldown, cname(amt), amt); sect.sct_oldown = (natid)amt; - putsect(§); + break; + default: + pr("huh?\n"); + return RET_SYN; } break; - default: - pr("huh?\n"); - return RET_SYN; - } - break; - case 'e': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + case 'e': current = sect.sct_effic; current += amt; if (current < 0) @@ -193,19 +148,10 @@ setsector(void) pr("Efficiency in %s changed to %d.\n", xyas(sect.sct_x, sect.sct_y, player->cnum), current); sect.sct_effic = current; - putsect(§); - } - break; - case 'm': - switch (char1) { - case 'i': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + break; + case 'm': + switch (char1) { + case 'i': current = sect.sct_mines; current += amt; if (current < 0) @@ -215,17 +161,8 @@ setsector(void) if (sect.sct_own != 0) resnoise(§, 1, "Mines", sect.sct_mines, current); sect.sct_mines = current; - putsect(§); - } - break; - case 'o': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + break; + case 'o': current = sect.sct_mobil; current += amt; if (current < -127) @@ -235,22 +172,13 @@ setsector(void) pr("Mobility in %s changed to %d.\n", xyas(sect.sct_x, sect.sct_y, player->cnum), current); sect.sct_mobil = current; - putsect(§); + break; + default: + pr("huh?\n"); + return RET_SYN; } break; - default: - pr("huh?\n"); - return RET_SYN; - } - break; - case 'a': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + case 'a': current = sect.sct_avail; current += amt; if (current < 0) @@ -260,17 +188,8 @@ setsector(void) pr("Available in %s changed to %d.\n", xyas(sect.sct_x, sect.sct_y, player->cnum), current); sect.sct_avail = (short)current; - putsect(§); - } - break; - case 'w': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + break; + case 'w': current = sect.sct_work; current += amt; if (current < 0) @@ -280,17 +199,8 @@ setsector(void) pr("Work in %s changed to %d.\n", xyas(sect.sct_x, sect.sct_y, player->cnum), current); sect.sct_work = (unsigned char)current; - putsect(§); - } - break; - case 'f': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + break; + case 'f': current = sect.sct_fertil; current += amt; if (current < 0) @@ -301,17 +211,8 @@ setsector(void) resnoise(§, 1, "Fertility content", (int)sect.sct_fertil, current); sect.sct_fertil = (unsigned char)current; - putsect(§); - } - break; - case 'u': - if (!snxtsct(&nstr, player->argp[2])) - return RET_SYN; - while (nxtsct(&nstr, §) > 0) { - p = getstarg(player->argp[3], "What value : ", buf); - if (!p || !*p) - return RET_SYN; - amt = atoi(p); + break; + case 'u': current = sect.sct_uran; current += amt; if (current < 0) @@ -322,12 +223,12 @@ setsector(void) resnoise(§, 1, "Uranium content", (int)sect.sct_uran, current); sect.sct_uran = (unsigned char)current; - putsect(§); + break; + default: + pr("huh?\n"); + return RET_SYN; } - break; - default: - pr("huh?\n"); - return RET_SYN; + putsect(§); } return RET_OK; }