]> git.pond.sub.org Git - empserver/commitdiff
Factor parse_map_arg() out of do_map()
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 10 Apr 2011 16:49:51 +0000 (18:49 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Thu, 14 Apr 2011 18:21:23 +0000 (20:21 +0200)
src/lib/subs/maps.c

index 2a1d4dcce4db9cae37a265ff2600a2817f1c3a97..9164c82d13857a57f6b202346f4672aed89b8d1c 100644 (file)
@@ -70,6 +70,7 @@
 /* whether to revert bmap, internal to do_map() */
 #define MAP_BMAP_REVERT        bit(7)
 
+static int parse_map_arg(int, char *, struct nstr_sect *, char *);
 static int parse_map_flags(int, char *);
 static int revert_bmap(struct nstr_sect *);
 static int draw_map(char, int, struct nstr_sect *);
@@ -78,33 +79,44 @@ static char map_char(int, natid, int);
 static int unit_map(int, int, struct nstr_sect *, char *);
 
 int
-do_map(int bmap, int unit_type, char *arg, char *map_flags_arg)
+do_map(int bmap, int unit_type, char *arg1, char *arg2)
 {
     struct nstr_sect ns;
-    char origin = '\0';
-    int map_flags;
+    char origin;
+    int res, map_flags;
+
+    res = parse_map_arg(unit_type, arg1, &ns, &origin);
+    if (res != RET_OK)
+       return res;
+
+    map_flags = parse_map_flags(bmap, arg2);
+    if (map_flags < 0) 
+       return RET_SYN;
+
+    if (map_flags & MAP_BMAP_REVERT)
+       return revert_bmap(&ns);
+    return draw_map(origin, map_flags, &ns);
+}
 
+static int
+parse_map_arg(int unit_type, char *arg,
+             struct nstr_sect *nsp, char *originp)
+{
     switch (sarg_type(arg)) {
     case NS_DIST:
     case NS_AREA:
     case NS_ALL:
-       if (!snxtsct(&ns, arg))
+       if (!snxtsct(nsp, arg))
            return RET_SYN;
+       *originp = 0;
        break;
     default:
-       if (unit_map(unit_type, atoi(arg), &ns, &origin) < 0) {
+       if (unit_map(unit_type, atoi(arg), nsp, originp) < 0) {
            pr("No such %s\n", ef_nameof(unit_type));
            return RET_FAIL;
        }
     }
-
-    map_flags = parse_map_flags(bmap, map_flags_arg);
-    if (map_flags < 0) 
-       return RET_SYN;
-
-    if (map_flags & MAP_BMAP_REVERT)
-       return revert_bmap(&ns);
-    return draw_map(origin, map_flags, &ns);
+    return RET_OK;
 }
 
 static void