]> git.pond.sub.org Git - empserver/commitdiff
Reduce massive code duplication in setsector(), setres()
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 16 Apr 2011 18:30:22 +0000 (20:30 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 17 Apr 2011 08:47:23 +0000 (10:47 +0200)
There's the same sector loop in every switch case.  Loop around the
switch instead.

src/lib/commands/setres.c
src/lib/commands/setsect.c

index d6c5831b191f57c194e812a80df7f4c927f5ccba..df5129f893532e53a9ac150863d3f016ce20337f 100644 (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;
 }
index 68d0027b71e5c93ba6305753cb22f44435494706..f157abc9c9cb56753e0e36bc77deb60a22906c91 100644 (file)
@@ -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, &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);
+       amt = atoi(p);
+       switch (char0) {
+       case 'i':
            current = sect.sct_min;
            current += amt;
            if (current < 0)
@@ -80,17 +80,8 @@ setsector(void)
                resnoise(&sect, 1, "Iron ore content",
                         (int)sect.sct_min, current);
            sect.sct_min = (unsigned char)current;
-           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);
+           break;
+       case 'g':
            current = sect.sct_gmin;
            current += amt;
            if (current < 0)
@@ -101,19 +92,10 @@ setsector(void)
                resnoise(&sect, 1, "Gold content",
                         (int)sect.sct_gmin, current);
            sect.sct_gmin = (unsigned char)current;
-           putsect(&sect);
-       }
-       break;
-    case 'o':
-       switch (char1) {
-       case 'i':
-           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);
+           break;
+       case 'o':
+           switch (char1) {
+           case 'i':
                current = sect.sct_oil;
                current += amt;
                if (current < 0)
@@ -124,17 +106,8 @@ setsector(void)
                    resnoise(&sect, 1, "Oil content",
                             (int)sect.sct_oil, current);
                sect.sct_oil = (unsigned char)current;
-               putsect(&sect);
-           }
-           break;
-       case 'w':
-           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);
+               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(&sect);
-           }
-           break;
-       case 'l':
-           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);
+               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(&sect);
+               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, &sect) > 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(&sect);
-       }
-       break;
-    case 'm':
-       switch (char1) {
-       case 'i':
-           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);
+           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(&sect, 1, "Mines", sect.sct_mines, current);
                sect.sct_mines = current;
-               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);
+               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(&sect);
+               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, &sect) > 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(&sect);
-       }
-       break;
-    case 'w':
-       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);
+           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(&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);
+           break;
+       case 'f':
            current = sect.sct_fertil;
            current += amt;
            if (current < 0)
@@ -301,17 +211,8 @@ setsector(void)
                resnoise(&sect, 1, "Fertility content",
                         (int)sect.sct_fertil, current);
            sect.sct_fertil = (unsigned char)current;
-           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);
+           break;
+       case 'u':
            current = sect.sct_uran;
            current += amt;
            if (current < 0)
@@ -322,12 +223,12 @@ setsector(void)
                resnoise(&sect, 1, "Uranium content",
                         (int)sect.sct_uran, current);
            sect.sct_uran = (unsigned char)current;
-           putsect(&sect);
+           break;
+       default:
+           pr("huh?\n");
+           return RET_SYN;
        }
-       break;
-    default:
-       pr("huh?\n");
-       return RET_SYN;
+       putsect(&sect);
     }
     return RET_OK;
 }