Factor parse_map_flags() out of do_map()

This commit is contained in:
Markus Armbruster 2011-04-10 07:27:23 +02:00
parent 5da60a5abb
commit 457f797972

View file

@ -69,6 +69,7 @@
/* whether to revert bmap, internal to do_map() */ /* whether to revert bmap, internal to do_map() */
#define MAP_BMAP_REVERT bit(7) #define MAP_BMAP_REVERT bit(7)
static int parse_map_flags(int, char *);
static int revert_bmap(struct nstr_sect *); static int revert_bmap(struct nstr_sect *);
static int draw_map(char, int, struct nstr_sect *); static int draw_map(char, int, struct nstr_sect *);
static int bmnxtsct(struct nstr_sect *); static int bmnxtsct(struct nstr_sect *);
@ -80,7 +81,6 @@ do_map(int bmap, int unit_type, char *arg, char *map_flags_arg)
{ {
struct nstr_sect ns; struct nstr_sect ns;
char origin = '\0'; char origin = '\0';
char *b;
int map_flags; int map_flags;
switch (sarg_type(arg)) { switch (sarg_type(arg)) {
@ -95,6 +95,21 @@ do_map(int bmap, int unit_type, char *arg, char *map_flags_arg)
return RET_FAIL; 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);
}
static int
parse_map_flags(int bmap, char *str)
{
int map_flags;
char *p;
switch (bmap) { switch (bmap) {
default: CANT_REACH(); default: CANT_REACH();
/* fall through */ /* fall through */
@ -103,8 +118,11 @@ do_map(int bmap, int unit_type, char *arg, char *map_flags_arg)
case 0: map_flags = 0; case 0: map_flags = 0;
} }
for (b = map_flags_arg; b && *b; b++) { if (!str)
switch (*b) { return map_flags;
for (p = str; *p; p++) {
switch (*p) {
case 's': case 's':
case 'S': case 'S':
map_flags |= MAP_SHIP; map_flags |= MAP_SHIP;
@ -131,25 +149,19 @@ do_map(int bmap, int unit_type, char *arg, char *map_flags_arg)
case 't': case 't':
if (bmap != 'b') if (bmap != 'b')
goto bad_flag; goto bad_flag;
map_flags |= MAP_ALT; return map_flags | MAP_ALT;
*(b + 1) = 0;
break;
case 'r': case 'r':
if (bmap != 'b') if (bmap != 'b')
goto bad_flag; goto bad_flag;
map_flags = MAP_BMAP_REVERT; return MAP_BMAP_REVERT;
*(b + 1) = 0;
break;
default: default:
bad_flag: bad_flag:
pr("Bad flag %c!\n", *b); pr("Bad flag %c!\n", *p);
return RET_SYN; return -1;
} }
} }
if (map_flags & MAP_BMAP_REVERT) return map_flags;
return revert_bmap(&ns);
return draw_map(origin, map_flags, &ns);
} }
static int static int