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