It assumes snxtsct() fails only when the argument can't be parsed. It
can also fail when the condition argument has errors. `map # ?xxx'
first complains about xxx, then maps around ship#0. Broken since
Chainsaw 2 introduced smap, pmap and lmap.
Use sarg_type() to recognize sectors vs. unit argument. `map # ?xxx'
now fails as it should.
Subtle side effect: do_map() no longer prompts for argument "",
because snxtsct() is now guarded by sarg_type(). Impact on callers:
* display_region_map() is not affected, because it never passes "".
* map() passes on "" arguments. Change it to prompt in that case.
Consistent with how other commands behave. No functional change.
* do_unit_move() passes on "" arguments. Keep it that way. This
changes navigate and march sub-commands 'M' and 'B' not to prompt
for "" arguments, which is consistent with sub-command 'm' of move,
test and transport.
}
}
- if (player->argp[1] == NULL) {
+ if (!player->argp[1] || !*player->argp[1]) {
if (unit_type == EF_BAD) {
str = getstring("(sects)? ", buf);
} else {
char *b;
int map_flags = 0;
- if (!snxtsct(&ns, arg)) {
+ switch (sarg_type(arg)) {
+ case NS_DIST:
+ case NS_AREA:
+ case NS_ALL:
+ if (!snxtsct(&ns, arg))
+ return RET_SYN;
+ break;
+ default:
if (unit_map(unit_type, atoi(arg), &ns, &origin))
return RET_FAIL;
}