} /* pass */
}
+char *
+dxdy_to_dist_descr(dx,dy)
+int dx,dy;
+{
+ static char buf[QBUFSZ];
+ int d;
+ if (!dx && !dy)
+ Sprintf(buf, "here");
+ else if ((d = xytod(dx,dy)) != -1)
+ Sprintf(buf, "%s", directionname(d));
+ else {
+ char tmp[QBUFSZ];
+ buf[0] = '\0';
+ if (dy) {
+ Sprintf(tmp, "%i%c", abs(dy), (dy > 0) ? 's' : 'n');
+ Strcat(buf, tmp);
+ }
+ if (dy && dx)
+ Strcat(buf, ",");
+ if (dx) {
+ Sprintf(tmp, "%i%c", abs(dx), (dx > 0) ? 'e' : 'w');
+ Strcat(buf, tmp);
+ }
+ }
+ return buf;
+}
+
+
int
getpos(ccp, force, goal)
coord *ccp;
coord cc;
int sym = 0;
char tmpbuf[BUFSZ];
+ char outbuf[BUFSZ];
const char *firstmatch = NULL;
+ int dx,dy;
cc.x = cx;
cc.y = cy;
if (do_screen_description(cc, TRUE, sym, tmpbuf, &firstmatch)) {
- pline1(firstmatch);
+ outbuf[0] = '\0';
+ switch (iflags.getpos_coords) {
+ default:
+ break;
+ case GPCOORDS_CARTESIAN:
+ dx = cc.x - u.ux;
+ dy = cc.y - u.uy;
+ Sprintf(outbuf, " (%s)", dxdy_to_dist_descr(dx,dy));
+ break;
+ case GPCOORDS_ABSOLUTE:
+ Sprintf(outbuf, " (%d,%d)", cc.x,cc.y);
+ break;
+ }
+ pline("%s%s", firstmatch, outbuf);
curs(WIN_MAP, cx, cy);
flush_screen(0);
}
DISP_IN_GAME }, /*WC*/
{ "fruit", "the name of a fruit you enjoy eating", PL_FSIZ, SET_IN_GAME },
{ "gender", "your starting gender (male or female)", 8, DISP_IN_GAME },
+ { "getpos_coord", "show coordinates when getting cursor position", 1, SET_IN_GAME },
{ "horsename", "the name of your (first) horse (e.g., horsename:Silver)",
PL_PSIZ, DISP_IN_GAME },
{ "map_mode", "map display mode under Windows", 20, DISP_IN_GAME }, /*WC*/
iflags.prevmsg_window = 's';
#endif
iflags.menu_headings = ATR_INVERSE;
+ iflags.getpos_coords = GPCOORDS_NONE;
/* hero's role, race, &c haven't been chosen yet */
flags.initrole = flags.initrace = flags.initgend = flags.initalign =
return;
}
+ fullname = "getpos_coord";
+ if (match_optname(opts, fullname, 6, TRUE)) {
+ if (duplicate)
+ complain_about_duplicate(opts, 1);
+ if (negated) {
+ iflags.getpos_coords = GPCOORDS_NONE;
+ return;
+ } else if ((op = string_for_env_opt(fullname, opts, FALSE)) != 0) {
+ if (tolower(*op) == GPCOORDS_NONE
+ || tolower(*op) == GPCOORDS_CARTESIAN
+ || tolower(*op) == GPCOORDS_ABSOLUTE) {
+ iflags.getpos_coords = tolower(*op);
+ } else
+ badoption(opts);
+ }
+ return;
+ }
+
fullname = "warnings";
if (match_optname(opts, fullname, 5, TRUE)) {
if (duplicate)
free((genericptr_t) mode_pick);
}
destroy_nhwindow(tmpwin);
+ } else if (!strcmp("getpos_coord", optname)) {
+ menu_item *window_pick = (menu_item *) 0;
+
+ tmpwin = create_nhwindow(NHW_MENU);
+ start_menu(tmpwin);
+ any = zeroany;
+ any.a_char = GPCOORDS_ABSOLUTE;
+ add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_ABSOLUTE,
+ 0, ATR_NONE, "absolute", MENU_UNSELECTED);
+ any.a_char = GPCOORDS_CARTESIAN;
+ add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_CARTESIAN,
+ 0, ATR_NONE, "cartesian", MENU_UNSELECTED);
+ any.a_char = GPCOORDS_NONE;
+ add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_NONE,
+ 0, ATR_NONE, "none", MENU_UNSELECTED);
+ end_menu(tmpwin, "Select coordinate display when picking a position:");
+ if (select_menu(tmpwin, PICK_ONE, &window_pick) > 0) {
+ iflags.getpos_coords = window_pick->item.a_char;
+ free((genericptr_t) window_pick);
+ }
+ destroy_nhwindow(tmpwin);
} else if (!strcmp("msg_window", optname)) {
#ifdef TTY_GRAPHICS
/* by Christian W. Cooper */
Sprintf(buf, "%s", rolestring(flags.initrole, roles, name.m));
} else if (!strcmp(optname, "runmode")) {
Sprintf(buf, "%s", runmodes[flags.runmode]);
+ } else if (!strcmp(optname, "getpos_coord")) {
+ Sprintf(buf, "%s",
+ (iflags.getpos_coords == GPCOORDS_ABSOLUTE) ? "absolute"
+ : (iflags.getpos_coords == GPCOORDS_CARTESIAN) ? "cartesian"
+ : "none");
} else if (!strcmp(optname, "scores")) {
Sprintf(buf, "%d top/%d around%s", flags.end_top, flags.end_around,
flags.end_own ? "/own" : "");