]> git.pond.sub.org Git - empserver/commitdiff
Clean up move_ground()'s parsing of DIR_MAP
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 10 Apr 2011 16:09:16 +0000 (18:09 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Thu, 14 Apr 2011 18:21:23 +0000 (20:21 +0200)
Split with parse() and pass first two arguments instead of the raw
tail to the map() callback.  Advantages:

* Consistent with do_unit_move().

* Does the right thing when the tail is just spaces.  Before, the
  spaces got passed to the map() callback, which complained about
  syntax.  Now, they are ignored.  This is what the commit I just
  reverted tried to fix.

* Works better when the tail splits into more than two arguments.
  Except for explore_map(), which ignores the argument(s), the map()
  callbacks use display_region_map(), which split the tail at the
  first space, and complained about any spaces in the second part.
  Now, display_region_map() takes two argument strings instead of a
  single, unsplit argument string, and extra arguments get silently
  ignored, as usual.

include/map.h
include/prototypes.h
src/lib/commands/expl.c
src/lib/commands/move.c
src/lib/commands/tran.c
src/lib/subs/maps.c
src/lib/subs/move.c

index d8e83c6d7afa93575beca5275e226f8b5c3f4e95..973a7f74f12042d71caffd6ddd00c414b7857e07 100644 (file)
@@ -61,8 +61,7 @@ extern void blankfill(char *, struct range *, int);
 extern void border(struct range *, char *, char *);
 /* src/lib/subs/maps.c */
 extern int do_map(int bmap, int unit_type, char *arg1, char *arg2);
-extern int display_region_map(int bmap, int unit_type, coord curx,
-                             coord cury, char *arg);
+extern int display_region_map(int, int, coord, coord, char *, char *);
 extern int bmaps_intersect(natid, natid);
 extern int share_bmap(natid, natid, struct nstr_sect *, char, char *);
 
index 704d071a987f27617c1a78dfc5347403fab52562..07a03b64c5528392980bce2728f3aec58585eb0f 100644 (file)
@@ -464,7 +464,7 @@ extern int cando(int, int);
 extern int check_lmines(coord, coord, double);
 extern int move_ground(struct sctstr *, struct sctstr *,
                       double, char *,
-                      int (*)(coord, coord, char *),
+                      int (*)(coord, coord, char *, char *),
                       int, int *);
 extern int fly_map(coord, coord);
 /* mslsub.c */
index 125cebac618640eb249968455dc8fab34cfb5830..e128015c79a4028b8bf45e669fa93c677ff8fbc3 100644 (file)
@@ -39,7 +39,7 @@
 #include "optlist.h"
 #include "plague.h"
 
-static int explore_map(coord curx, coord cury, char *arg);
+static int explore_map(coord, coord, char *, char *);
 
 int
 explore(void)
@@ -274,7 +274,7 @@ explore(void)
 
 /*ARGSUSED*/
 static int
-explore_map(coord curx, coord cury, char *arg)
+explore_map(coord curx, coord cury, char *arg1, char *arg2)
 {
     struct nstr_sect ns;
     struct sctstr sect;
index 4ffde82411f6e29875cdfeca552ff73027405bbc..8668a7350be7f0d742c66f8441db4c19da0890cb 100644 (file)
@@ -41,7 +41,7 @@
 #include "plague.h"
 
 
-static int cmd_move_map(coord curx, coord cury, char *arg);
+static int cmd_move_map(coord, coord, char *, char *);
 
 int
 move(void)
@@ -341,9 +341,9 @@ move(void)
  */
 /*ARGSUSED*/
 static int
-cmd_move_map(coord curx, coord cury, char *arg)
+cmd_move_map(coord curx, coord cury, char *arg1, char *arg2)
 {
-    return display_region_map(0, EF_SHIP, curx, cury, arg);
+    return display_region_map(0, EF_SHIP, curx, cury, arg1, arg2);
 }
 
 int
index 991eb23ad5e9d2e97552ad198ff1354f2f038383..849a417fcea76e0ca894d66690402f72e2a2c996 100644 (file)
@@ -28,7 +28,7 @@
  *
  *  Known contributors to this file:
  *     Steve McClure, 2000
- *     Markus Armbruster, 2006-2009
+ *     Markus Armbruster, 2006-2011
  */
 
 #include <config.h>
@@ -40,8 +40,8 @@
 #include "plane.h"
 #include "ship.h"
 
-static int tran_pmap(coord curx, coord cury, char *arg);
-static int tran_nmap(coord curx, coord cury, char *arg);
+static int tran_pmap(coord, coord, char *, char *);
+static int tran_nmap(coord, coord, char *, char *);
 static int tran_nuke(void);
 static int tran_plane(void);
 
@@ -245,13 +245,13 @@ tran_plane(void)
  */
 /*ARGSUSED*/
 static int
-tran_pmap(coord curx, coord cury, char *arg)
+tran_pmap(coord curx, coord cury, char *arg1, char *arg2)
 {
-    return display_region_map(0, EF_PLANE, curx, cury, arg);
+    return display_region_map(0, EF_PLANE, curx, cury, arg1, arg2);
 }
 
 static int
-tran_nmap(coord curx, coord cury, char *arg)
+tran_nmap(coord curx, coord cury, char *arg1, char *arg2)
 {
-    return display_region_map(0, EF_NUKE, curx, cury, arg);
+    return display_region_map(0, EF_NUKE, curx, cury, arg1, arg2);
 }
index 305960eda765250d87b5b475a05d5551f3685d34..2a1d4dcce4db9cae37a265ff2600a2817f1c3a97 100644 (file)
@@ -420,29 +420,21 @@ unit_map(int unit_type, int uid, struct nstr_sect *nsp, char *originp)
 
 int
 display_region_map(int bmap, int unit_type, coord curx, coord cury,
-                  char *arg)
+                  char *arg1, char *arg2)
 {
     char coordinates[80];
-    char *map_flag_arg;
 
-    if (!arg || !*arg) {
+    if (!arg1 || !*arg1) {
        struct natstr *np;
 
        np = getnatp(player->cnum);
        sprintf(coordinates, "%d:%d,%d:%d",
            xrel(np, curx - 10), xrel(np, curx + 10),
            yrel(np, cury - 5), yrel(np, cury + 5));
-       arg = coordinates;
-       map_flag_arg = NULL;
-    } else {
-       map_flag_arg = strchr(arg, ' ');
-       if (map_flag_arg != NULL) {
-           *map_flag_arg++  = '\0';
-           while (isspace(*map_flag_arg)) map_flag_arg++;
-       }
+       arg1 = coordinates;
     }
     player->condarg = NULL;
-    return do_map(bmap, unit_type, arg, map_flag_arg);
+    return do_map(bmap, unit_type, arg1, arg2);
 }
 
 int
index 478b43b42d9b3aa3b2c81e47e8b047567f9d8b57..748548edb1d521c15646b94dc9037bebd2f14977 100644 (file)
@@ -47,8 +47,8 @@ static int move_map(coord curx, coord cury, char *arg);
 int
 move_ground(struct sctstr *start, struct sctstr *end,
            double weight, char *path,
-           int (*map)(coord, coord, char *), int exploring,
-           int *dam)
+           int (*map)(coord, coord, char *, char *),
+           int exploring, int *dam)
 {
     struct sctstr sect;
     struct sctstr next;
@@ -62,6 +62,9 @@ move_ground(struct sctstr *start, struct sctstr *end,
     size_t len;
     double mobility = start->sct_mobil;
     int dir;
+    char scanspace[1024];
+    char *argp[128];
+    int ac;
     int intcost;
     int takedam = *dam;
     int out = 0;
@@ -119,7 +122,7 @@ move_ground(struct sctstr *start, struct sctstr *end,
        oldy = cury;
        if (!movstr || *movstr == 0) {
            if (exploring) {
-               map(curx, cury, NULL);
+               map(curx, cury, NULL, NULL);
            } else {
                move_map(curx, cury, NULL);
            }
@@ -168,15 +171,23 @@ move_ground(struct sctstr *start, struct sctstr *end,
            *movstr = 0;
            continue;
        }
-       movstr++;
        if (dir == DIR_MAP) {
+           ac = parse(movstr, scanspace, argp, NULL, NULL, NULL);
+           if (ac == 1) {
+               pr("Use of '%c' without a space before its argument is deprecated.\n"
+                  "Support for it will go away in a future release\n",
+                  *movstr);
+               argp[1] = argp[0] + 1;
+           }
            if (!exploring)
-               map(curx, cury, movstr + 1);
+               map(curx, cury, argp[1], argp[2]);
            *movstr = 0;
            continue;
-       } else if (dir == DIR_STOP)
+       }
+       movstr++;
+       if (dir == DIR_STOP)
            break;
-       else if (dir == DIR_VIEW) {
+       if (dir == DIR_VIEW) {
            pr("%d%% %s with %d civilians.\n", sect.sct_effic,
               dchr[sect.sct_type].d_name, sect.sct_item[I_CIVIL]);
            continue;