(do_map): New. map() was split into two parts map() and do_map().

(map): Call new function do_map().
(display_region_map): Modify to use do_map() instead of map().
(tran_nmap, tran_pmap, cmd_move_map): Modify to accomodate
the modified display_region_map() function.
This commit is contained in:
Ron Koenderink 2006-07-12 18:14:31 +00:00
parent fa38aef700
commit 51275c753f
5 changed files with 76 additions and 70 deletions

View file

@ -305,9 +305,11 @@ extern void loginit(char *);
extern void logerror(char *, ...) ATTRIBUTE((format (printf, 1, 2))); extern void logerror(char *, ...) ATTRIBUTE((format (printf, 1, 2)));
/* more in misc.h */ /* more in misc.h */
/* maps.c */ /* maps.c */
extern int do_map(int bmap, int unit_type, char *arg1, char *arg2);
extern int draw_map(int, char, int, struct nstr_sect *); extern int draw_map(int, char, int, struct nstr_sect *);
extern int unit_map(int, int, struct nstr_sect *, char *); extern int unit_map(int, int, struct nstr_sect *, char *);
extern int display_region_map(char *cmd, coord curx, coord cury, char *arg); extern int display_region_map(int bmap, int unit_type, coord curx,
coord cury, char *arg);
extern int bmaps_intersect(natid, natid); extern int bmaps_intersect(natid, natid);
extern int share_bmap(natid, natid, struct nstr_sect *, char, char *); extern int share_bmap(natid, natid, struct nstr_sect *, char, char *);
/* move.c */ /* move.c */

View file

@ -43,13 +43,9 @@
int int
map(void) map(void)
{ {
char *b;
int unit_type = EF_BAD; int unit_type = EF_BAD;
int bmap = 0; int bmap = 0;
char *str; char *str;
struct nstr_sect ns;
char origin = '\0';
int map_flags = 0;
char buf[1024]; char buf[1024];
char prompt[128]; char prompt[128];
@ -91,53 +87,5 @@ map(void)
} else } else
str = player->argp[1]; str = player->argp[1];
if (!snxtsct(&ns, str)) { return do_map(bmap, unit_type, str, player->argp[2]);
if (unit_map(unit_type, atoi(str), &ns, &origin))
return RET_FAIL;
}
for (b = player->argp[2]; b && *b; b++) {
switch (*b) {
case 's':
case 'S':
map_flags |= MAP_SHIP;
break;
case 'l':
case 'L':
map_flags |= MAP_LAND;
break;
case 'p':
case 'P':
map_flags |= MAP_PLANE;
break;
case 'n':
case 'N':
map_flags |= MAP_NUKE;
break;
case 'h':
case 'H':
map_flags |= MAP_HIGH;
break;
case '*':
map_flags |= MAP_ALL;
break;
case 't':
if (bmap != 'b')
goto bad_flag;
bmap = 't';
*(b + 1) = 0;
break;
case 'r':
if (bmap != 'b')
goto bad_flag;
bmap = 'r';
*(b + 1) = 0;
break;
default:
bad_flag:
pr("Bad flag %c!\n", *b);
break;
}
}
return draw_map(bmap, origin, map_flags, &ns);
} }

View file

@ -343,7 +343,7 @@ move(void)
static int static int
cmd_move_map(coord curx, coord cury, char *arg) cmd_move_map(coord curx, coord cury, char *arg)
{ {
return display_region_map("map", curx, cury, arg); return display_region_map(0, EF_BAD, curx, cury, arg);
} }
int int

View file

@ -246,12 +246,12 @@ tran_plane(void)
static int static int
tran_pmap(coord curx, coord cury, char *arg) tran_pmap(coord curx, coord cury, char *arg)
{ {
return display_region_map("pmap", curx, cury, arg); return display_region_map(0, EF_PLANE, curx, cury, arg);
} }
static int static int
tran_nmap(coord curx, coord cury, char *arg) tran_nmap(coord curx, coord cury, char *arg)
{ {
return display_region_map("nmap", curx, cury, arg); return display_region_map(0, EF_NUKE, curx, cury, arg);
} }

View file

@ -55,6 +55,64 @@
static int bmnxtsct(struct nstr_sect *); static int bmnxtsct(struct nstr_sect *);
static char map_char(unsigned char type, natid own, int owner_or_god); static char map_char(unsigned char type, natid own, int owner_or_god);
int
do_map(int bmap, int unit_type, char *arg, char *map_flags_arg)
{
struct nstr_sect ns;
char origin = '\0';
char *b;
int map_flags = 0;
if (!snxtsct(&ns, arg)) {
if (unit_map(unit_type, atoi(arg), &ns, &origin))
return RET_FAIL;
}
for (b = map_flags_arg; b && *b; b++) {
switch (*b) {
case 's':
case 'S':
map_flags |= MAP_SHIP;
break;
case 'l':
case 'L':
map_flags |= MAP_LAND;
break;
case 'p':
case 'P':
map_flags |= MAP_PLANE;
break;
case 'n':
case 'N':
map_flags |= MAP_NUKE;
break;
case 'h':
case 'H':
map_flags |= MAP_HIGH;
break;
case '*':
map_flags |= MAP_ALL;
break;
case 't':
if (bmap != 'b')
goto bad_flag;
bmap = 't';
*(b + 1) = 0;
break;
case 'r':
if (bmap != 'b')
goto bad_flag;
bmap = 'r';
*(b + 1) = 0;
break;
default:
bad_flag:
pr("Bad flag %c!\n", *b);
break;
}
}
return draw_map(bmap, origin, map_flags, &ns);
}
int int
draw_map(int bmap, char origin, int map_flags, struct nstr_sect *nsp) draw_map(int bmap, char origin, int map_flags, struct nstr_sect *nsp)
{ {
@ -359,11 +417,12 @@ unit_map(int unit_type, int uid, struct nstr_sect *nsp, char *originp)
} }
int int
display_region_map(char *cmd, coord curx, coord cury, char *arg) display_region_map(int bmap, int unit_type, coord curx, coord cury,
char *arg)
{ {
char coordinates[80], *cp; char coordinates[80], *cp;
char *map_flag_arg;
player->argp[0] = cmd;
if (!arg || !*arg) { if (!arg || !*arg) {
struct natstr *np; struct natstr *np;
@ -371,20 +430,17 @@ display_region_map(char *cmd, coord curx, coord cury, char *arg)
sprintf(coordinates, "%d:%d,%d:%d", sprintf(coordinates, "%d:%d,%d:%d",
xrel(np, curx - 10), xrel(np, curx + 11), xrel(np, curx - 10), xrel(np, curx + 11),
yrel(np, cury - 5), yrel(np, cury + 6)); yrel(np, cury - 5), yrel(np, cury + 6));
player->argp[1] = coordinates; arg = coordinates;
player->argp[2] = NULL; map_flag_arg = NULL;
} else { } else {
player->argp[1] = arg; map_flag_arg = strchr(arg, ' ');
cp = strchr(arg, ' '); if (map_flag_arg != NULL) {
if (cp != NULL) { *map_flag_arg++ = '\0';
*cp++ = '\0'; while (isspace(*map_flag_arg)) map_flag_arg++;
while (isspace(*cp)) cp++; }
player->argp[2] = cp;
} else
player->argp[2] = NULL;
} }
player->condarg = NULL; player->condarg = NULL;
return map(); return do_map(bmap, unit_type, arg, map_flag_arg);
} }
int int