Merge remote-tracking branch 'origin/NetHack-3.6.0'
This commit is contained in:
@@ -437,6 +437,7 @@ fix buffer overflow in wizard mode for '#' command when 'extmenu' option is on
|
|||||||
"you suddenly vomit" was given two turns before actually vomiting, so you
|
"you suddenly vomit" was given two turns before actually vomiting, so you
|
||||||
could get that message, move a bit, then get "you can move again"
|
could get that message, move a bit, then get "you can move again"
|
||||||
after the 2 turn freeze applied along with the actual vomit
|
after the 2 turn freeze applied along with the actual vomit
|
||||||
|
give an alternate message if you vomit when stomach is empty (ie, fainting)
|
||||||
corpses and other flammable items not subject to direct burning or fire-based
|
corpses and other flammable items not subject to direct burning or fire-based
|
||||||
erosion which were thrown or dropped into lava remained intact
|
erosion which were thrown or dropped into lava remained intact
|
||||||
if a potion on the floor survived a land mine explosion and got propelled at
|
if a potion on the floor survived a land mine explosion and got propelled at
|
||||||
@@ -471,6 +472,7 @@ charisma affects the leeway in demon lord bribes
|
|||||||
make Vlad slightly tougher
|
make Vlad slightly tougher
|
||||||
reduce the amount of gold laying on the floor
|
reduce the amount of gold laying on the floor
|
||||||
locked chests and large boxes contain more stuff
|
locked chests and large boxes contain more stuff
|
||||||
|
make shopkeepers bill hero for burying merchandise
|
||||||
|
|
||||||
|
|
||||||
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
|
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
|
||||||
@@ -556,6 +558,7 @@ tty: if "--More--" was written to leftmost column (beginning of second line)
|
|||||||
tty: long message lines which wrap when shown on the top line might be
|
tty: long message lines which wrap when shown on the top line might be
|
||||||
re-displayed incorrectly by ^P for msg_window={full,combo,reverse}
|
re-displayed incorrectly by ^P for msg_window={full,combo,reverse}
|
||||||
tty: MSGTYPE=hide could interfere with display of prompts
|
tty: MSGTYPE=hide could interfere with display of prompts
|
||||||
|
tty: treat carriage return as a newline for input text and --More-- prompts
|
||||||
unix/X11: in top level Makefile, some commented out definitions of VARDATND
|
unix/X11: in top level Makefile, some commented out definitions of VARDATND
|
||||||
misspelled pilemark.xbm (as pilemark.xpm)
|
misspelled pilemark.xbm (as pilemark.xpm)
|
||||||
unix: options file with CR+LF line ends and an invalid option line resulted in
|
unix: options file with CR+LF line ends and an invalid option line resulted in
|
||||||
|
|||||||
@@ -1861,8 +1861,8 @@ struct obj *obj;
|
|||||||
verbalize(you_buy_it);
|
verbalize(you_buy_it);
|
||||||
useupf(corpse, 1L);
|
useupf(corpse, 1L);
|
||||||
}
|
}
|
||||||
can = hold_another_object(can, "You make, but cannot pick up, %s.",
|
(void) hold_another_object(can, "You make, but cannot pick up, %s.",
|
||||||
doname(can), (const char *) 0);
|
doname(can), (const char *) 0);
|
||||||
} else
|
} else
|
||||||
impossible("Tinning failed.");
|
impossible("Tinning failed.");
|
||||||
}
|
}
|
||||||
@@ -2807,8 +2807,8 @@ struct obj *obj;
|
|||||||
pline("Snatching %s is a fatal mistake.", kbuf);
|
pline("Snatching %s is a fatal mistake.", kbuf);
|
||||||
instapetrify(kbuf);
|
instapetrify(kbuf);
|
||||||
}
|
}
|
||||||
otmp = hold_another_object(
|
(void) hold_another_object(otmp, "You drop %s!",
|
||||||
otmp, "You drop %s!", doname(otmp), (const char *) 0);
|
doname(otmp), (const char *) 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* to floor beneath mon */
|
/* to floor beneath mon */
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 artifact.c $NHDT-Date: 1451081581 2015/12/25 22:13:01 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.99 $ */
|
/* NetHack 3.6 artifact.c $NHDT-Date: 1509836679 2017/11/04 23:04:39 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.106 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -1496,8 +1496,8 @@ struct obj *obj;
|
|||||||
obj->age = 0;
|
obj->age = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
b_effect = (obj->blessed
|
b_effect = (obj->blessed && (oart->role == Role_switch
|
||||||
&& (Role_switch == oart->role || !oart->role));
|
|| oart->role == NON_PM));
|
||||||
recharge(otmp, b_effect ? 1 : obj->cursed ? -1 : 0);
|
recharge(otmp, b_effect ? 1 : obj->cursed ? -1 : 0);
|
||||||
update_inventory();
|
update_inventory();
|
||||||
break;
|
break;
|
||||||
|
|||||||
19
src/dig.c
19
src/dig.c
@@ -1863,16 +1863,33 @@ bury_objs(x, y)
|
|||||||
int x, y;
|
int x, y;
|
||||||
{
|
{
|
||||||
struct obj *otmp, *otmp2;
|
struct obj *otmp, *otmp2;
|
||||||
|
struct monst *shkp;
|
||||||
|
long loss = 0L;
|
||||||
|
boolean costly;
|
||||||
|
|
||||||
|
costly = ((shkp = shop_keeper(*in_rooms(x, y, SHOPBASE)))
|
||||||
|
&& costly_spot(x, y));
|
||||||
|
|
||||||
if (level.objects[x][y] != (struct obj *) 0) {
|
if (level.objects[x][y] != (struct obj *) 0) {
|
||||||
debugpline2("bury_objs: at <%d,%d>", x, y);
|
debugpline2("bury_objs: at <%d,%d>", x, y);
|
||||||
}
|
}
|
||||||
for (otmp = level.objects[x][y]; otmp; otmp = otmp2)
|
for (otmp = level.objects[x][y]; otmp; otmp = otmp2) {
|
||||||
|
if (costly) {
|
||||||
|
loss += stolen_value(otmp, x, y, (boolean) shkp->mpeaceful, TRUE);
|
||||||
|
if (otmp->oclass != COIN_CLASS)
|
||||||
|
otmp->no_charge = 1;
|
||||||
|
}
|
||||||
otmp2 = bury_an_obj(otmp, (boolean *) 0);
|
otmp2 = bury_an_obj(otmp, (boolean *) 0);
|
||||||
|
}
|
||||||
|
|
||||||
/* don't expect any engravings here, but just in case */
|
/* don't expect any engravings here, but just in case */
|
||||||
del_engr_at(x, y);
|
del_engr_at(x, y);
|
||||||
newsym(x, y);
|
newsym(x, y);
|
||||||
|
|
||||||
|
if (costly && loss) {
|
||||||
|
You("owe %s %ld %s for burying merchandise.", mon_nam(shkp), loss,
|
||||||
|
currency(loss));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* move objects from buriedobjlist to fobj/nexthere lists */
|
/* move objects from buriedobjlist to fobj/nexthere lists */
|
||||||
|
|||||||
@@ -40,12 +40,12 @@ static void FDECL((*getpos_hilitefunc), (int)) = (void FDECL((*), (int))) 0;
|
|||||||
static boolean FDECL((*getpos_getvalid), (int,int)) = (boolean FDECL((*), (int,int))) 0;
|
static boolean FDECL((*getpos_getvalid), (int,int)) = (boolean FDECL((*), (int,int))) 0;
|
||||||
|
|
||||||
void
|
void
|
||||||
getpos_sethilite(f, d)
|
getpos_sethilite(gp_hilitef, gp_getvalidf)
|
||||||
void FDECL((*f), (int));
|
void FDECL((*gp_hilitef), (int));
|
||||||
boolean FDECL((*d), (int,int));
|
boolean FDECL((*gp_getvalidf), (int,int));
|
||||||
{
|
{
|
||||||
getpos_hilitefunc = f;
|
getpos_hilitefunc = gp_hilitef;
|
||||||
getpos_getvalid = d;
|
getpos_getvalid = gp_getvalidf;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *const gloc_descr[NUM_GLOCS][4] = {
|
const char *const gloc_descr[NUM_GLOCS][4] = {
|
||||||
|
|||||||
12
src/eat.c
12
src/eat.c
@@ -1616,6 +1616,8 @@ struct obj *otmp;
|
|||||||
sick_time = (Sick > 1L) ? Sick - 1L : 1L;
|
sick_time = (Sick > 1L) ? Sick - 1L : 1L;
|
||||||
make_sick(sick_time, corpse_xname(otmp, "rotted", CXN_NORMAL),
|
make_sick(sick_time, corpse_xname(otmp, "rotted", CXN_NORMAL),
|
||||||
TRUE, SICK_VOMITABLE);
|
TRUE, SICK_VOMITABLE);
|
||||||
|
|
||||||
|
pline("(It must have died too long ago to be safe to eat.)");
|
||||||
}
|
}
|
||||||
if (carried(otmp))
|
if (carried(otmp))
|
||||||
useup(otmp);
|
useup(otmp);
|
||||||
@@ -3152,12 +3154,18 @@ skipfloor:
|
|||||||
void
|
void
|
||||||
vomit() /* A good idea from David Neves */
|
vomit() /* A good idea from David Neves */
|
||||||
{
|
{
|
||||||
if (cantvomit(youmonst.data))
|
if (cantvomit(youmonst.data)) {
|
||||||
/* doesn't cure food poisoning; message assumes that we aren't
|
/* doesn't cure food poisoning; message assumes that we aren't
|
||||||
dealing with some esoteric body_part() */
|
dealing with some esoteric body_part() */
|
||||||
Your("jaw gapes convulsively.");
|
Your("jaw gapes convulsively.");
|
||||||
else
|
} else {
|
||||||
make_sick(0L, (char *) 0, TRUE, SICK_VOMITABLE);
|
make_sick(0L, (char *) 0, TRUE, SICK_VOMITABLE);
|
||||||
|
/* if not enough in stomach to actually vomit then dry heave;
|
||||||
|
vomiting_dialog() gives a vomit message when its countdown
|
||||||
|
reaches 0, but only if u.uhs < FAINTING (and !cantvomit()) */
|
||||||
|
if (u.uhs >= FAINTING)
|
||||||
|
Your("%s heaves convulsively!", body_part(STOMACH));
|
||||||
|
}
|
||||||
|
|
||||||
/* nomul()/You_can_move_again used to be unconditional, which was
|
/* nomul()/You_can_move_again used to be unconditional, which was
|
||||||
viable while eating but not for Vomiting countdown where hero might
|
viable while eating but not for Vomiting countdown where hero might
|
||||||
|
|||||||
@@ -293,9 +293,11 @@ boolean incr; /* true iff via incremental experience growth */
|
|||||||
u.uexp = newuexp(u.ulevel);
|
u.uexp = newuexp(u.ulevel);
|
||||||
}
|
}
|
||||||
++u.ulevel;
|
++u.ulevel;
|
||||||
|
pline("Welcome %sto experience level %d.",
|
||||||
|
u.ulevelmax < u.ulevel ? "" : "back ",
|
||||||
|
u.ulevel);
|
||||||
if (u.ulevelmax < u.ulevel)
|
if (u.ulevelmax < u.ulevel)
|
||||||
u.ulevelmax = u.ulevel;
|
u.ulevelmax = u.ulevel;
|
||||||
pline("Welcome to experience level %d.", u.ulevel);
|
|
||||||
adjabil(u.ulevel - 1, u.ulevel); /* give new intrinsics */
|
adjabil(u.ulevel - 1, u.ulevel); /* give new intrinsics */
|
||||||
reset_rndmonst(NON_PM); /* new monster selection */
|
reset_rndmonst(NON_PM); /* new monster selection */
|
||||||
}
|
}
|
||||||
|
|||||||
25
src/monst.c
25
src/monst.c
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 monst.c $NHDT-Date: 1451084423 2015/12/25 23:00:23 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.55 $ */
|
/* NetHack 3.6 monst.c $NHDT-Date: 1510531569 2017/11/13 00:06:09 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.59 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -2369,8 +2369,8 @@ struct permonst _mons2[] = {
|
|||||||
M1_HUMANOID | M1_POIS | M1_SWIM,
|
M1_HUMANOID | M1_POIS | M1_SWIM,
|
||||||
M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT,
|
M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT,
|
||||||
M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BLUE),
|
M3_INFRAVISIBLE | M3_INFRAVISION, CLR_BLUE),
|
||||||
/* standard demons & devils
|
/* standard demons & devils
|
||||||
*/
|
*/
|
||||||
#define SEDUCTION_ATTACKS_YES \
|
#define SEDUCTION_ATTACKS_YES \
|
||||||
A(ATTK(AT_BITE, AD_SSEX, 0, 0), ATTK(AT_CLAW, AD_PHYS, 1, 3), \
|
A(ATTK(AT_BITE, AD_SSEX, 0, 0), ATTK(AT_CLAW, AD_PHYS, 1, 3), \
|
||||||
ATTK(AT_CLAW, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK)
|
ATTK(AT_CLAW, AD_PHYS, 1, 3), NO_ATTK, NO_ATTK, NO_ATTK)
|
||||||
@@ -2395,8 +2395,8 @@ struct permonst _mons2[] = {
|
|||||||
MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_FLY | M1_POIS,
|
MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_FLY | M1_POIS,
|
||||||
M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_MALE,
|
M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_MALE,
|
||||||
M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GRAY),
|
M3_INFRAVISIBLE | M3_INFRAVISION, CLR_GRAY),
|
||||||
/* Used by AD&D for a type of demon, originally one of the Furies */
|
/* Used by AD&D for a type of demon, originally one of the Furies
|
||||||
/* and spelled this way */
|
and spelled this way */
|
||||||
MON("erinys", S_DEMON, LVL(7, 12, 2, 30, 10),
|
MON("erinys", S_DEMON, LVL(7, 12, 2, 30, 10),
|
||||||
(G_HELL | G_NOCORPSE | G_SGROUP | 2),
|
(G_HELL | G_NOCORPSE | G_SGROUP | 2),
|
||||||
A(ATTK(AT_WEAP, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK,
|
A(ATTK(AT_WEAP, AD_DRST, 2, 4), NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK,
|
||||||
@@ -2567,7 +2567,8 @@ struct permonst _mons2[] = {
|
|||||||
M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY
|
M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY
|
||||||
| M2_PRINCE | M2_MALE,
|
| M2_PRINCE | M2_MALE,
|
||||||
M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD),
|
M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, HI_LORD),
|
||||||
/* Riders -- the Four Horsemen of the Apocalypse ("War" == player)
|
/* Riders -- the Four Horsemen of the Apocalypse ("War" == player);
|
||||||
|
* depicted with '&' but do not have M2_DEMON set.
|
||||||
*/
|
*/
|
||||||
MON("Death", S_DEMON, LVL(30, 12, -5, 100, 0), (G_UNIQ | G_NOGEN),
|
MON("Death", S_DEMON, LVL(30, 12, -5, 100, 0), (G_UNIQ | G_NOGEN),
|
||||||
A(ATTK(AT_TUCH, AD_DETH, 8, 8), ATTK(AT_TUCH, AD_DETH, 8, 8), NO_ATTK,
|
A(ATTK(AT_TUCH, AD_DETH, 8, 8), ATTK(AT_TUCH, AD_DETH, 8, 8), NO_ATTK,
|
||||||
@@ -2593,8 +2594,8 @@ struct permonst _mons2[] = {
|
|||||||
M1_FLY | M1_HUMANOID | M1_REGEN | M1_SEE_INVIS | M1_TPORT_CNTRL,
|
M1_FLY | M1_HUMANOID | M1_REGEN | M1_SEE_INVIS | M1_TPORT_CNTRL,
|
||||||
M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY,
|
M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY,
|
||||||
M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, HI_LORD),
|
M3_INFRAVISIBLE | M3_INFRAVISION | M3_DISPLACES, HI_LORD),
|
||||||
/* other demons
|
/* other demons
|
||||||
*/
|
*/
|
||||||
#ifdef MAIL
|
#ifdef MAIL
|
||||||
MON("mail daemon", S_DEMON, LVL(56, 24, 10, 127, 0),
|
MON("mail daemon", S_DEMON, LVL(56, 24, 10, 127, 0),
|
||||||
(G_NOGEN | G_NOCORPSE),
|
(G_NOGEN | G_NOCORPSE),
|
||||||
@@ -2711,14 +2712,12 @@ struct permonst _mons2[] = {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* dummy monster needed for visual interface
|
* dummy monster needed for visual interface
|
||||||
*/
|
* (marking it unique prevents figurines)
|
||||||
/* (marking it unique prevents figurines)
|
|
||||||
*/
|
*/
|
||||||
MON("long worm tail", S_WORM_TAIL, LVL(0, 0, 0, 0, 0),
|
MON("long worm tail", S_WORM_TAIL, LVL(0, 0, 0, 0, 0),
|
||||||
(G_NOGEN | G_NOCORPSE | G_UNIQ),
|
(G_NOGEN | G_NOCORPSE | G_UNIQ),
|
||||||
A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
|
A(NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
|
||||||
SIZ(0, 0, 0, 0), 0, 0, 0L, M2_NOPOLY, 0, CLR_BROWN),
|
SIZ(0, 0, 0, 0), 0, 0, 0L, M2_NOPOLY, 0, CLR_BROWN),
|
||||||
|
|
||||||
/* Note:
|
/* Note:
|
||||||
* Worm tail must be between the normal monsters and the special
|
* Worm tail must be between the normal monsters and the special
|
||||||
* quest & pseudo-character ones because an optimization in the
|
* quest & pseudo-character ones because an optimization in the
|
||||||
@@ -2862,8 +2861,8 @@ struct permonst _mons2[] = {
|
|||||||
| M2_COLLECT | M2_MAGIC,
|
| M2_COLLECT | M2_MAGIC,
|
||||||
M3_CLOSE | M3_INFRAVISIBLE, HI_LORD),
|
M3_CLOSE | M3_INFRAVISIBLE, HI_LORD),
|
||||||
#if 0 /* OBSOLETE */
|
#if 0 /* OBSOLETE */
|
||||||
/* Two for elves - one of each sex.
|
/* Two for elves - one of each sex.
|
||||||
*/
|
*/
|
||||||
MON("Earendil", S_HUMAN,
|
MON("Earendil", S_HUMAN,
|
||||||
LVL(20, 12, 0, 50, -20), (G_NOGEN | G_UNIQ),
|
LVL(20, 12, 0, 50, -20), (G_NOGEN | G_UNIQ),
|
||||||
A(ATTK(AT_WEAP, AD_PHYS, 1, 8),
|
A(ATTK(AT_WEAP, AD_PHYS, 1, 8),
|
||||||
|
|||||||
286
src/options.c
286
src/options.c
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 options.c $NHDT-Date: 1508827592 2017/10/24 06:46:32 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.316 $ */
|
/* NetHack 3.6 options.c $NHDT-Date: 1510963525 2017/11/18 00:05:25 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.319 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -106,8 +106,7 @@ static struct Bool_Opt {
|
|||||||
#endif
|
#endif
|
||||||
{ "confirm", &flags.confirm, TRUE, SET_IN_GAME },
|
{ "confirm", &flags.confirm, TRUE, SET_IN_GAME },
|
||||||
{ "dark_room", &flags.dark_room, TRUE, SET_IN_GAME },
|
{ "dark_room", &flags.dark_room, TRUE, SET_IN_GAME },
|
||||||
{ "eight_bit_tty", &iflags.wc_eight_bit_input, FALSE,
|
{ "eight_bit_tty", &iflags.wc_eight_bit_input, FALSE, SET_IN_GAME }, /*WC*/
|
||||||
SET_IN_GAME }, /*WC*/
|
|
||||||
#ifdef TTY_GRAPHICS
|
#ifdef TTY_GRAPHICS
|
||||||
{ "extmenu", &iflags.extmenu, FALSE, SET_IN_GAME },
|
{ "extmenu", &iflags.extmenu, FALSE, SET_IN_GAME },
|
||||||
#else
|
#else
|
||||||
@@ -408,8 +407,9 @@ static struct Comp_Opt {
|
|||||||
#endif
|
#endif
|
||||||
{ "whatis_coord", "show coordinates when auto-describing cursor position",
|
{ "whatis_coord", "show coordinates when auto-describing cursor position",
|
||||||
1, SET_IN_GAME },
|
1, SET_IN_GAME },
|
||||||
{ "whatis_filter", "filter coordinate locations when targeting next or previous",
|
{ "whatis_filter",
|
||||||
1, SET_IN_GAME },
|
"filter coordinate locations when targeting next or previous",
|
||||||
|
1, SET_IN_GAME },
|
||||||
{ "windowcolors", "the foreground/background colors of windows", /*WC*/
|
{ "windowcolors", "the foreground/background colors of windows", /*WC*/
|
||||||
80, DISP_IN_GAME },
|
80, DISP_IN_GAME },
|
||||||
{ "windowtype", "windowing system to use", WINTYPELEN, DISP_IN_GAME },
|
{ "windowtype", "windowing system to use", WINTYPELEN, DISP_IN_GAME },
|
||||||
@@ -492,7 +492,8 @@ static const menu_cmd_t default_menu_cmd_info[] = {
|
|||||||
{ "menu_deselect_all", MENU_UNSELECT_ALL, "Unselect all items" },
|
{ "menu_deselect_all", MENU_UNSELECT_ALL, "Unselect all items" },
|
||||||
{ "menu_invert_all", MENU_INVERT_ALL, "Invert selection" },
|
{ "menu_invert_all", MENU_INVERT_ALL, "Invert selection" },
|
||||||
{ "menu_select_page", MENU_SELECT_PAGE, "Select items in current page" },
|
{ "menu_select_page", MENU_SELECT_PAGE, "Select items in current page" },
|
||||||
{ "menu_deselect_page", MENU_UNSELECT_PAGE, "Unselect items in current page" },
|
{ "menu_deselect_page", MENU_UNSELECT_PAGE,
|
||||||
|
"Unselect items in current page" },
|
||||||
{ "menu_invert_page", MENU_INVERT_PAGE, "Invert current page selection" },
|
{ "menu_invert_page", MENU_INVERT_PAGE, "Invert current page selection" },
|
||||||
{ "menu_search", MENU_SEARCH, "Search and toggle matching items" },
|
{ "menu_search", MENU_SEARCH, "Search and toggle matching items" },
|
||||||
};
|
};
|
||||||
@@ -713,8 +714,8 @@ initoptions_init()
|
|||||||
iflags.getpos_coords = GPCOORDS_NONE;
|
iflags.getpos_coords = GPCOORDS_NONE;
|
||||||
|
|
||||||
/* hero's role, race, &c haven't been chosen yet */
|
/* hero's role, race, &c haven't been chosen yet */
|
||||||
flags.initrole = flags.initrace = flags.initgend = flags.initalign =
|
flags.initrole = flags.initrace = flags.initgend = flags.initalign
|
||||||
ROLE_NONE;
|
= ROLE_NONE;
|
||||||
|
|
||||||
/* Set the default monster and object class symbols. */
|
/* Set the default monster and object class symbols. */
|
||||||
init_symbols();
|
init_symbols();
|
||||||
@@ -1165,14 +1166,14 @@ int on_or_off;
|
|||||||
/*-- ON --*/
|
/*-- ON --*/
|
||||||
if (iflags.opt_booldup)
|
if (iflags.opt_booldup)
|
||||||
impossible("iflags.opt_booldup already on (memory leak)");
|
impossible("iflags.opt_booldup already on (memory leak)");
|
||||||
iflags.opt_booldup = (int *) alloc(SIZE(boolopt) * sizeof(int));
|
iflags.opt_booldup = (int *) alloc(SIZE(boolopt) * sizeof (int));
|
||||||
optptr = iflags.opt_booldup;
|
optptr = iflags.opt_booldup;
|
||||||
for (k = 0; k < SIZE(boolopt); ++k)
|
for (k = 0; k < SIZE(boolopt); ++k)
|
||||||
*optptr++ = 0;
|
*optptr++ = 0;
|
||||||
|
|
||||||
if (iflags.opt_compdup)
|
if (iflags.opt_compdup)
|
||||||
impossible("iflags.opt_compdup already on (memory leak)");
|
impossible("iflags.opt_compdup already on (memory leak)");
|
||||||
iflags.opt_compdup = (int *) alloc(SIZE(compopt) * sizeof(int));
|
iflags.opt_compdup = (int *) alloc(SIZE(compopt) * sizeof (int));
|
||||||
optptr = iflags.opt_compdup;
|
optptr = iflags.opt_compdup;
|
||||||
for (k = 0; k < SIZE(compopt); ++k)
|
for (k = 0; k < SIZE(compopt); ++k)
|
||||||
*optptr++ = 0;
|
*optptr++ = 0;
|
||||||
@@ -1233,7 +1234,7 @@ int iscompound; /* 0 == boolean option, 1 == compound */
|
|||||||
*/
|
*/
|
||||||
#else /* !MAC */
|
#else /* !MAC */
|
||||||
config_error_add("%s option specified multiple times: %s",
|
config_error_add("%s option specified multiple times: %s",
|
||||||
iscompound ? "compound" : "boolean", opts);
|
iscompound ? "compound" : "boolean", opts);
|
||||||
#endif /* ?MAC */
|
#endif /* ?MAC */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1458,7 +1459,7 @@ const char *prompt;
|
|||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
const xchar msgtyp;
|
xchar msgtyp;
|
||||||
const char *descr;
|
const char *descr;
|
||||||
} msgtype_names[] = {
|
} msgtype_names[] = {
|
||||||
{ "show", MSGTYP_NORMAL, "Show message normally" },
|
{ "show", MSGTYP_NORMAL, "Show message normally" },
|
||||||
@@ -1514,11 +1515,9 @@ msgtype_add(typ, pattern)
|
|||||||
int typ;
|
int typ;
|
||||||
char *pattern;
|
char *pattern;
|
||||||
{
|
{
|
||||||
struct plinemsg_type *tmp
|
struct plinemsg_type
|
||||||
= (struct plinemsg_type *) alloc(sizeof (struct plinemsg_type));
|
*tmp = (struct plinemsg_type *) alloc(sizeof (struct plinemsg_type));
|
||||||
|
|
||||||
if (!tmp)
|
|
||||||
return FALSE;
|
|
||||||
tmp->msgtype = typ;
|
tmp->msgtype = typ;
|
||||||
tmp->regex = regex_init();
|
tmp->regex = regex_init();
|
||||||
if (!regex_compile(pattern, tmp->regex)) {
|
if (!regex_compile(pattern, tmp->regex)) {
|
||||||
@@ -1670,7 +1669,8 @@ const char *errmsg;
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!regex_compile(str, match)) {
|
if (!regex_compile(str, match)) {
|
||||||
config_error_add("%s: %s", errmsg ? errmsg : re_error, regex_error_desc(match));
|
config_error_add("%s: %s", errmsg ? errmsg : re_error,
|
||||||
|
regex_error_desc(match));
|
||||||
retval = FALSE;
|
retval = FALSE;
|
||||||
}
|
}
|
||||||
regex_free(match);
|
regex_free(match);
|
||||||
@@ -1901,7 +1901,7 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
if (strlen(opts) > BUFSZ / 2) {
|
if (strlen(opts) > BUFSZ / 2) {
|
||||||
config_error_add("Option too long, max length is %i characters",
|
config_error_add("Option too long, max length is %i characters",
|
||||||
(BUFSZ / 2));
|
(BUFSZ / 2));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2025,8 +2025,7 @@ boolean tinitial, tfrom_file;
|
|||||||
/* We always check for duplicates on the remaining compound options,
|
/* We always check for duplicates on the remaining compound options,
|
||||||
although individual option processing can choose to complain or not */
|
although individual option processing can choose to complain or not */
|
||||||
|
|
||||||
duplicate =
|
duplicate = duplicate_opt_detection(opts, 1); /* 1: check compounds */
|
||||||
duplicate_opt_detection(opts, 1); /* 1 means check compounds */
|
|
||||||
|
|
||||||
fullname = "pettype";
|
fullname = "pettype";
|
||||||
if (match_optname(opts, fullname, 3, TRUE)) {
|
if (match_optname(opts, fullname, 3, TRUE)) {
|
||||||
@@ -2485,7 +2484,8 @@ boolean tinitial, tfrom_file;
|
|||||||
forig = fruit_from_name(pl_fruit, FALSE, (int *) 0);
|
forig = fruit_from_name(pl_fruit, FALSE, (int *) 0);
|
||||||
|
|
||||||
if (!forig && fnum >= 100) {
|
if (!forig && fnum >= 100) {
|
||||||
config_error_add("Doing that so many times isn't very fruitful.");
|
config_error_add(
|
||||||
|
"Doing that so many times isn't very fruitful.");
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2681,6 +2681,7 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WINCAP
|
/* WINCAP
|
||||||
* align_message:[left|top|right|bottom] */
|
* align_message:[left|top|right|bottom] */
|
||||||
fullname = "align_message";
|
fullname = "align_message";
|
||||||
@@ -2707,7 +2708,8 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
/* the order to list the pack */
|
|
||||||
|
/* the order to list inventory */
|
||||||
fullname = "packorder";
|
fullname = "packorder";
|
||||||
if (match_optname(opts, fullname, 4, TRUE)) {
|
if (match_optname(opts, fullname, 4, TRUE)) {
|
||||||
if (duplicate)
|
if (duplicate)
|
||||||
@@ -2831,9 +2833,10 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* types of objects to pick up automatically */
|
/* types of objects to pick up automatically */
|
||||||
if (match_optname(opts, "pickup_types", 8, TRUE)) {
|
fullname = "pickup_types";
|
||||||
|
if (match_optname(opts, fullname, 8, TRUE)) {
|
||||||
char ocl[MAXOCLASSES + 1], tbuf[MAXOCLASSES + 1], qbuf[QBUFSZ],
|
char ocl[MAXOCLASSES + 1], tbuf[MAXOCLASSES + 1], qbuf[QBUFSZ],
|
||||||
abuf[BUFSZ];
|
abuf[BUFSZ];
|
||||||
int oc_sym;
|
int oc_sym;
|
||||||
boolean badopt = FALSE, compat = (strlen(opts) <= 6), use_menu;
|
boolean badopt = FALSE, compat = (strlen(opts) <= 6), use_menu;
|
||||||
|
|
||||||
@@ -2855,7 +2858,7 @@ boolean tinitial, tfrom_file;
|
|||||||
if (flags.menu_style == MENU_TRADITIONAL
|
if (flags.menu_style == MENU_TRADITIONAL
|
||||||
|| flags.menu_style == MENU_COMBINATION) {
|
|| flags.menu_style == MENU_COMBINATION) {
|
||||||
use_menu = FALSE;
|
use_menu = FALSE;
|
||||||
Sprintf(qbuf, "New pickup_types: [%s am] (%s)", ocl,
|
Sprintf(qbuf, "New %s: [%s am] (%s)", fullname, ocl,
|
||||||
*tbuf ? tbuf : "all");
|
*tbuf ? tbuf : "all");
|
||||||
getlin(qbuf, abuf);
|
getlin(qbuf, abuf);
|
||||||
op = mungspaces(abuf);
|
op = mungspaces(abuf);
|
||||||
@@ -2871,7 +2874,7 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (negated) {
|
if (negated) {
|
||||||
bad_negation("pickup_types", TRUE);
|
bad_negation(fullname, TRUE);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
while (*op == ' ')
|
while (*op == ' ')
|
||||||
@@ -2890,8 +2893,7 @@ boolean tinitial, tfrom_file;
|
|||||||
op++;
|
op++;
|
||||||
}
|
}
|
||||||
if (badopt) {
|
if (badopt) {
|
||||||
config_error_add("Unknown %s parameter '%s'",
|
config_error_add("Unknown %s parameter '%s'", fullname, op);
|
||||||
"pickup_types", op);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3256,10 +3258,11 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WINCAP
|
/* WINCAP
|
||||||
* scroll_amount:nn */
|
* scroll_amount:nn */
|
||||||
fullname = "scroll_amount";
|
fullname = "scroll_amount";
|
||||||
if (match_optname(opts, fullname, sizeof("scroll_amount") - 1, TRUE)) {
|
if (match_optname(opts, fullname, sizeof "scroll_amount" - 1, TRUE)) {
|
||||||
if (duplicate)
|
if (duplicate)
|
||||||
complain_about_duplicate(opts, 1);
|
complain_about_duplicate(opts, 1);
|
||||||
op = string_for_opt(opts, negated);
|
op = string_for_opt(opts, negated);
|
||||||
@@ -3271,10 +3274,11 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WINCAP
|
/* WINCAP
|
||||||
* scroll_margin:nn */
|
* scroll_margin:nn */
|
||||||
fullname = "scroll_margin";
|
fullname = "scroll_margin";
|
||||||
if (match_optname(opts, fullname, sizeof("scroll_margin") - 1, TRUE)) {
|
if (match_optname(opts, fullname, sizeof "scroll_margin" - 1, TRUE)) {
|
||||||
if (duplicate)
|
if (duplicate)
|
||||||
complain_about_duplicate(opts, 1);
|
complain_about_duplicate(opts, 1);
|
||||||
op = string_for_opt(opts, negated);
|
op = string_for_opt(opts, negated);
|
||||||
@@ -3286,6 +3290,7 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
fullname = "subkeyvalue";
|
fullname = "subkeyvalue";
|
||||||
if (match_optname(opts, fullname, 5, TRUE)) {
|
if (match_optname(opts, fullname, 5, TRUE)) {
|
||||||
/* no duplicate complaint here */
|
/* no duplicate complaint here */
|
||||||
@@ -3302,6 +3307,7 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WINCAP
|
/* WINCAP
|
||||||
* tile_width:nn */
|
* tile_width:nn */
|
||||||
fullname = "tile_width";
|
fullname = "tile_width";
|
||||||
@@ -3346,6 +3352,7 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* WINCAP
|
/* WINCAP
|
||||||
* vary_msgcount:nn */
|
* vary_msgcount:nn */
|
||||||
fullname = "vary_msgcount";
|
fullname = "vary_msgcount";
|
||||||
@@ -3361,6 +3368,19 @@ boolean tinitial, tfrom_file;
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* windowtype: option to choose the interface for binaries built
|
||||||
|
* with support for more than one interface (tty + X11, for instance).
|
||||||
|
*
|
||||||
|
* Ideally, 'windowtype' should be processed first, because it
|
||||||
|
* causes the wc_ and wc2_ flags to be set up.
|
||||||
|
* For user, making it be first in a config file is trivial, use
|
||||||
|
* OPTIONS=windowtype:Foo
|
||||||
|
* as the first non-comment line of the file.
|
||||||
|
* Making it first in NETHACKOPTIONS requires it to be at the _end_
|
||||||
|
* because option strings are processed from right to left.
|
||||||
|
*/
|
||||||
fullname = "windowtype";
|
fullname = "windowtype";
|
||||||
if (match_optname(opts, fullname, 3, TRUE)) {
|
if (match_optname(opts, fullname, 3, TRUE)) {
|
||||||
if (duplicate)
|
if (duplicate)
|
||||||
@@ -3370,6 +3390,7 @@ boolean tinitial, tfrom_file;
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
} else if ((op = string_for_env_opt(fullname, opts, FALSE)) != 0) {
|
} else if ((op = string_for_env_opt(fullname, opts, FALSE)) != 0) {
|
||||||
char buf[WINTYPELEN];
|
char buf[WINTYPELEN];
|
||||||
|
|
||||||
nmcpy(buf, op, WINTYPELEN);
|
nmcpy(buf, op, WINTYPELEN);
|
||||||
choose_windows(buf);
|
choose_windows(buf);
|
||||||
} else
|
} else
|
||||||
@@ -3385,6 +3406,7 @@ boolean tinitial, tfrom_file;
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
} else if ((op = string_for_env_opt(fullname, opts, FALSE)) != 0) {
|
} else if ((op = string_for_env_opt(fullname, opts, FALSE)) != 0) {
|
||||||
char buf[WINTYPELEN];
|
char buf[WINTYPELEN];
|
||||||
|
|
||||||
nmcpy(buf, op, WINTYPELEN);
|
nmcpy(buf, op, WINTYPELEN);
|
||||||
addto_windowchain(buf);
|
addto_windowchain(buf);
|
||||||
} else
|
} else
|
||||||
@@ -3452,6 +3474,7 @@ boolean tinitial, tfrom_file;
|
|||||||
fullname = "menu_headings";
|
fullname = "menu_headings";
|
||||||
if (match_optname(opts, fullname, 12, TRUE)) {
|
if (match_optname(opts, fullname, 12, TRUE)) {
|
||||||
int tmpattr;
|
int tmpattr;
|
||||||
|
|
||||||
if (duplicate)
|
if (duplicate)
|
||||||
complain_about_duplicate(opts, 1);
|
complain_about_duplicate(opts, 1);
|
||||||
if (negated) {
|
if (negated) {
|
||||||
@@ -3491,6 +3514,7 @@ boolean tinitial, tfrom_file;
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* hilite fields in status prompt */
|
/* hilite fields in status prompt */
|
||||||
fullname = "hilite_status";
|
fullname = "hilite_status";
|
||||||
if (match_optname(opts, fullname, 13, TRUE)) {
|
if (match_optname(opts, fullname, 13, TRUE)) {
|
||||||
@@ -3697,6 +3721,17 @@ boolean tinitial, tfrom_file;
|
|||||||
if (boolopt[i].addr == &iflags.zerocomp)
|
if (boolopt[i].addr == &iflags.zerocomp)
|
||||||
set_savepref(iflags.zerocomp ? "zerocomp" : "externalcomp");
|
set_savepref(iflags.zerocomp ? "zerocomp" : "externalcomp");
|
||||||
#endif
|
#endif
|
||||||
|
if (boolopt[i].addr == &iflags.wc_ascii_map) {
|
||||||
|
/* toggling ascii_map; set tiled_map to its opposite;
|
||||||
|
what does it mean to turn off ascii map if tiled map
|
||||||
|
isn't supported? -- right now, we do nothing */
|
||||||
|
iflags.wc_tiled_map = negated;
|
||||||
|
} else if (boolopt[i].addr == &iflags.wc_tiled_map) {
|
||||||
|
/* toggling tiled_map; set ascii_map to its opposite;
|
||||||
|
as with ascii_map, what does it mean to turn off tiled
|
||||||
|
map if ascii map isn't supported? */
|
||||||
|
iflags.wc_ascii_map = negated;
|
||||||
|
}
|
||||||
/* only do processing below if setting with doset() */
|
/* only do processing below if setting with doset() */
|
||||||
if (initial)
|
if (initial)
|
||||||
return retval;
|
return retval;
|
||||||
@@ -3726,22 +3761,12 @@ boolean tinitial, tfrom_file;
|
|||||||
vision_full_recalc = 1; /* delayed recalc */
|
vision_full_recalc = 1; /* delayed recalc */
|
||||||
if (iflags.use_color)
|
if (iflags.use_color)
|
||||||
need_redraw = TRUE; /* darkroom refresh */
|
need_redraw = TRUE; /* darkroom refresh */
|
||||||
} else if (boolopt[i].addr == &iflags.wc_ascii_map) {
|
|
||||||
/* toggling ascii_map; set tiled_map to its opposite;
|
|
||||||
what does it mean to turn off ascii map if tiled map
|
|
||||||
isn't supported? -- right now, we do nothing */
|
|
||||||
iflags.wc_tiled_map = negated;
|
|
||||||
need_redraw = TRUE;
|
|
||||||
} else if (boolopt[i].addr == &iflags.wc_tiled_map) {
|
|
||||||
/* toggling tiled_map; set ascii_map to its opposite;
|
|
||||||
as with ascii_map, what does it mean to turn off tiled
|
|
||||||
map if ascii map isn't supported? */
|
|
||||||
iflags.wc_ascii_map = negated;
|
|
||||||
need_redraw = TRUE;
|
|
||||||
} else if (boolopt[i].addr == &flags.showrace
|
} else if (boolopt[i].addr == &flags.showrace
|
||||||
|| boolopt[i].addr == &iflags.use_inverse
|
|| boolopt[i].addr == &iflags.use_inverse
|
||||||
|| boolopt[i].addr == &iflags.hilite_pile
|
|| boolopt[i].addr == &iflags.hilite_pile
|
||||||
|| boolopt[i].addr == &iflags.hilite_pet) {
|
|| boolopt[i].addr == &iflags.hilite_pet
|
||||||
|
|| boolopt[i].addr == &iflags.wc_ascii_map
|
||||||
|
|| boolopt[i].addr == &iflags.wc_tiled_map) {
|
||||||
need_redraw = TRUE;
|
need_redraw = TRUE;
|
||||||
#ifdef STATUS_HILITES
|
#ifdef STATUS_HILITES
|
||||||
} else if (boolopt[i].addr == &iflags.wc2_hitpointbar) {
|
} else if (boolopt[i].addr == &iflags.wc2_hitpointbar) {
|
||||||
@@ -3886,8 +3911,10 @@ get_menu_cmd_key(ch)
|
|||||||
char ch;
|
char ch;
|
||||||
{
|
{
|
||||||
char *found = index(mapped_menu_op, ch);
|
char *found = index(mapped_menu_op, ch);
|
||||||
|
|
||||||
if (found) {
|
if (found) {
|
||||||
int idx = (int) (found - mapped_menu_op);
|
int idx = (int) (found - mapped_menu_op);
|
||||||
|
|
||||||
ch = mapped_menu_cmds[idx];
|
ch = mapped_menu_cmds[idx];
|
||||||
}
|
}
|
||||||
return ch;
|
return ch;
|
||||||
@@ -3902,8 +3929,10 @@ map_menu_cmd(ch)
|
|||||||
char ch;
|
char ch;
|
||||||
{
|
{
|
||||||
char *found = index(mapped_menu_cmds, ch);
|
char *found = index(mapped_menu_cmds, ch);
|
||||||
|
|
||||||
if (found) {
|
if (found) {
|
||||||
int idx = (int) (found - mapped_menu_cmds);
|
int idx = (int) (found - mapped_menu_cmds);
|
||||||
|
|
||||||
ch = mapped_menu_op[idx];
|
ch = mapped_menu_op[idx];
|
||||||
}
|
}
|
||||||
return ch;
|
return ch;
|
||||||
@@ -3919,6 +3948,7 @@ boolean dolist;
|
|||||||
putstr(win, 0, "Menu control keys:");
|
putstr(win, 0, "Menu control keys:");
|
||||||
if (dolist) {
|
if (dolist) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < SIZE(default_menu_cmd_info); i++) {
|
for (i = 0; i < SIZE(default_menu_cmd_info); i++) {
|
||||||
Sprintf(buf, "%-8s %s",
|
Sprintf(buf, "%-8s %s",
|
||||||
visctrl(get_menu_cmd_key(default_menu_cmd_info[i].cmd)),
|
visctrl(get_menu_cmd_key(default_menu_cmd_info[i].cmd)),
|
||||||
@@ -4186,8 +4216,7 @@ doset() /* changing options via menu by Per Liboriussen */
|
|||||||
any = zeroany;
|
any = zeroany;
|
||||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", MENU_UNSELECTED);
|
||||||
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
|
||||||
"Other settings:",
|
"Other settings:", MENU_UNSELECTED);
|
||||||
MENU_UNSELECTED);
|
|
||||||
|
|
||||||
for (i = 0; (name = othropt[i].name) != 0; i++) {
|
for (i = 0; (name = othropt[i].name) != 0; i++) {
|
||||||
if ((is_wc_option(name) && !wc_supported(name))
|
if ((is_wc_option(name) && !wc_supported(name))
|
||||||
@@ -4216,7 +4245,8 @@ doset() /* changing options via menu by Per Liboriussen */
|
|||||||
*/
|
*/
|
||||||
for (pick_idx = 0; pick_idx < pick_cnt; ++pick_idx) {
|
for (pick_idx = 0; pick_idx < pick_cnt; ++pick_idx) {
|
||||||
opt_indx = pick_list[pick_idx].item.a_int - 1;
|
opt_indx = pick_list[pick_idx].item.a_int - 1;
|
||||||
if (opt_indx < -1) opt_indx++; /* -1 offset for select_menu() */
|
if (opt_indx < -1)
|
||||||
|
opt_indx++; /* -1 offset for select_menu() */
|
||||||
if (opt_indx == OPT_OTHER_APEXC) {
|
if (opt_indx == OPT_OTHER_APEXC) {
|
||||||
(void) special_handling("autopickup_exception", setinitial,
|
(void) special_handling("autopickup_exception", setinitial,
|
||||||
fromfile);
|
fromfile);
|
||||||
@@ -4342,6 +4372,7 @@ boolean setinitial, setfromfile;
|
|||||||
if (!strcmp("menustyle", optname)) {
|
if (!strcmp("menustyle", optname)) {
|
||||||
const char *style_name;
|
const char *style_name;
|
||||||
menu_item *style_pick = (menu_item *) 0;
|
menu_item *style_pick = (menu_item *) 0;
|
||||||
|
|
||||||
tmpwin = create_nhwindow(NHW_MENU);
|
tmpwin = create_nhwindow(NHW_MENU);
|
||||||
start_menu(tmpwin);
|
start_menu(tmpwin);
|
||||||
any = zeroany;
|
any = zeroany;
|
||||||
@@ -4529,8 +4560,8 @@ boolean setinitial, setfromfile;
|
|||||||
0, ATR_NONE, "compass ('east' or '3s' or '2n,4w')",
|
0, ATR_NONE, "compass ('east' or '3s' or '2n,4w')",
|
||||||
(gp == GPCOORDS_COMPASS) ? MENU_SELECTED : MENU_UNSELECTED);
|
(gp == GPCOORDS_COMPASS) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||||
any.a_char = GPCOORDS_COMFULL;
|
any.a_char = GPCOORDS_COMFULL;
|
||||||
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_COMFULL,
|
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_COMFULL, 0, ATR_NONE,
|
||||||
0, ATR_NONE, "full compass ('east' or '3south' or '2north,4west')",
|
"full compass ('east' or '3south' or '2north,4west')",
|
||||||
(gp == GPCOORDS_COMFULL) ? MENU_SELECTED : MENU_UNSELECTED);
|
(gp == GPCOORDS_COMFULL) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||||
any.a_char = GPCOORDS_MAP;
|
any.a_char = GPCOORDS_MAP;
|
||||||
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_MAP,
|
add_menu(tmpwin, NO_GLYPH, &any, GPCOORDS_MAP,
|
||||||
@@ -4596,7 +4627,7 @@ boolean setinitial, setfromfile;
|
|||||||
0, ATR_NONE, "in same area",
|
0, ATR_NONE, "in same area",
|
||||||
(gf == GFILTER_AREA) ? MENU_SELECTED : MENU_UNSELECTED);
|
(gf == GFILTER_AREA) ? MENU_SELECTED : MENU_UNSELECTED);
|
||||||
end_menu(tmpwin,
|
end_menu(tmpwin,
|
||||||
"Select location filtering when going for next/previous map position:");
|
"Select location filtering when going for next/previous map position:");
|
||||||
if ((pick_cnt = select_menu(tmpwin, PICK_ONE, &window_pick)) > 0) {
|
if ((pick_cnt = select_menu(tmpwin, PICK_ONE, &window_pick)) > 0) {
|
||||||
iflags.getloc_filter = (window_pick[0].item.a_char - 1);
|
iflags.getloc_filter = (window_pick[0].item.a_char - 1);
|
||||||
/* PICK_ONE doesn't unselect preselected entry when
|
/* PICK_ONE doesn't unselect preselected entry when
|
||||||
@@ -4955,10 +4986,7 @@ boolean setinitial, setfromfile;
|
|||||||
struct symsetentry *sl;
|
struct symsetentry *sl;
|
||||||
int res, which_set, setcount = 0, chosen = -2;
|
int res, which_set, setcount = 0, chosen = -2;
|
||||||
|
|
||||||
if (rogueflag)
|
which_set = rogueflag ? ROGUESET : PRIMARY;
|
||||||
which_set = ROGUESET;
|
|
||||||
else
|
|
||||||
which_set = PRIMARY;
|
|
||||||
|
|
||||||
/* clear symset[].name as a flag to read_sym_file() to build list */
|
/* clear symset[].name as a flag to read_sym_file() to build list */
|
||||||
symset_name = symset[which_set].name;
|
symset_name = symset[which_set].name;
|
||||||
@@ -5238,36 +5266,23 @@ char *buf;
|
|||||||
Sprintf(buf, "%s", rolestring(flags.initgend, genders, adj));
|
Sprintf(buf, "%s", rolestring(flags.initgend, genders, adj));
|
||||||
else if (!strcmp(optname, "horsename"))
|
else if (!strcmp(optname, "horsename"))
|
||||||
Sprintf(buf, "%s", horsename[0] ? horsename : none);
|
Sprintf(buf, "%s", horsename[0] ? horsename : none);
|
||||||
else if (!strcmp(optname, "map_mode"))
|
else if (!strcmp(optname, "map_mode")) {
|
||||||
|
i = iflags.wc_map_mode;
|
||||||
Sprintf(buf, "%s",
|
Sprintf(buf, "%s",
|
||||||
iflags.wc_map_mode == MAP_MODE_TILES
|
(i == MAP_MODE_TILES) ? "tiles"
|
||||||
? "tiles"
|
: (i == MAP_MODE_ASCII4x6) ? "ascii4x6"
|
||||||
: iflags.wc_map_mode == MAP_MODE_ASCII4x6
|
: (i == MAP_MODE_ASCII6x8) ? "ascii6x8"
|
||||||
? "ascii4x6"
|
: (i == MAP_MODE_ASCII8x8) ? "ascii8x8"
|
||||||
: iflags.wc_map_mode == MAP_MODE_ASCII6x8
|
: (i == MAP_MODE_ASCII16x8) ? "ascii16x8"
|
||||||
? "ascii6x8"
|
: (i == MAP_MODE_ASCII7x12) ? "ascii7x12"
|
||||||
: iflags.wc_map_mode == MAP_MODE_ASCII8x8
|
: (i == MAP_MODE_ASCII8x12) ? "ascii8x12"
|
||||||
? "ascii8x8"
|
: (i == MAP_MODE_ASCII16x12) ? "ascii16x12"
|
||||||
: iflags.wc_map_mode == MAP_MODE_ASCII16x8
|
: (i == MAP_MODE_ASCII12x16) ? "ascii12x16"
|
||||||
? "ascii16x8"
|
: (i == MAP_MODE_ASCII10x18) ? "ascii10x18"
|
||||||
: iflags.wc_map_mode == MAP_MODE_ASCII7x12
|
: (i == MAP_MODE_ASCII_FIT_TO_SCREEN)
|
||||||
? "ascii7x12"
|
? "fit_to_screen"
|
||||||
: iflags.wc_map_mode == MAP_MODE_ASCII8x12
|
: defopt);
|
||||||
? "ascii8x12"
|
} else if (!strcmp(optname, "menustyle"))
|
||||||
: iflags.wc_map_mode
|
|
||||||
== MAP_MODE_ASCII16x12
|
|
||||||
? "ascii16x12"
|
|
||||||
: iflags.wc_map_mode
|
|
||||||
== MAP_MODE_ASCII12x16
|
|
||||||
? "ascii12x16"
|
|
||||||
: iflags.wc_map_mode
|
|
||||||
== MAP_MODE_ASCII10x18
|
|
||||||
? "ascii10x18"
|
|
||||||
: iflags.wc_map_mode
|
|
||||||
== MAP_MODE_ASCII_FIT_TO_SCREEN
|
|
||||||
? "fit_to_screen"
|
|
||||||
: defopt);
|
|
||||||
else if (!strcmp(optname, "menustyle"))
|
|
||||||
Sprintf(buf, "%s", menutype[(int) flags.menu_style]);
|
Sprintf(buf, "%s", menutype[(int) flags.menu_style]);
|
||||||
else if (!strcmp(optname, "menu_deselect_all"))
|
else if (!strcmp(optname, "menu_deselect_all"))
|
||||||
Sprintf(buf, "%s", to_be_done);
|
Sprintf(buf, "%s", to_be_done);
|
||||||
@@ -5299,13 +5314,10 @@ char *buf;
|
|||||||
Sprintf(buf, "%u", iflags.msg_history);
|
Sprintf(buf, "%u", iflags.msg_history);
|
||||||
#ifdef TTY_GRAPHICS
|
#ifdef TTY_GRAPHICS
|
||||||
} else if (!strcmp(optname, "msg_window")) {
|
} else if (!strcmp(optname, "msg_window")) {
|
||||||
Sprintf(buf, "%s", (iflags.prevmsg_window == 's')
|
Sprintf(buf, "%s", (iflags.prevmsg_window == 's') ? "single"
|
||||||
? "single"
|
: (iflags.prevmsg_window == 'c') ? "combination"
|
||||||
: (iflags.prevmsg_window == 'c')
|
: (iflags.prevmsg_window == 'f') ? "full"
|
||||||
? "combination"
|
: "reversed");
|
||||||
: (iflags.prevmsg_window == 'f')
|
|
||||||
? "full"
|
|
||||||
: "reversed");
|
|
||||||
#endif
|
#endif
|
||||||
} else if (!strcmp(optname, "name")) {
|
} else if (!strcmp(optname, "name")) {
|
||||||
Sprintf(buf, "%s", plname);
|
Sprintf(buf, "%s", plname);
|
||||||
@@ -5589,8 +5601,9 @@ count_ape_maps(leave, grab)
|
|||||||
int *leave, *grab;
|
int *leave, *grab;
|
||||||
{
|
{
|
||||||
struct autopickup_exception *ape;
|
struct autopickup_exception *ape;
|
||||||
int pass, totalapes, numapes[2] = { 0, 0 };
|
int pass, totalapes, numapes[2];
|
||||||
|
|
||||||
|
numapes[0] = numapes[1] = 0;
|
||||||
for (pass = AP_LEAVE; pass <= AP_GRAB; ++pass) {
|
for (pass = AP_LEAVE; pass <= AP_GRAB; ++pass) {
|
||||||
ape = iflags.autopickup_exceptions[pass];
|
ape = iflags.autopickup_exceptions[pass];
|
||||||
while (ape) {
|
while (ape) {
|
||||||
@@ -6075,53 +6088,56 @@ char *class_select;
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wc_Opt wc_options[] = { { "ascii_map", WC_ASCII_MAP },
|
static struct wc_Opt wc_options[] = {
|
||||||
{ "color", WC_COLOR },
|
{ "ascii_map", WC_ASCII_MAP },
|
||||||
{ "eight_bit_tty", WC_EIGHT_BIT_IN },
|
{ "color", WC_COLOR },
|
||||||
{ "hilite_pet", WC_HILITE_PET },
|
{ "eight_bit_tty", WC_EIGHT_BIT_IN },
|
||||||
{ "popup_dialog", WC_POPUP_DIALOG },
|
{ "hilite_pet", WC_HILITE_PET },
|
||||||
{ "player_selection", WC_PLAYER_SELECTION },
|
{ "popup_dialog", WC_POPUP_DIALOG },
|
||||||
{ "preload_tiles", WC_PRELOAD_TILES },
|
{ "player_selection", WC_PLAYER_SELECTION },
|
||||||
{ "tiled_map", WC_TILED_MAP },
|
{ "preload_tiles", WC_PRELOAD_TILES },
|
||||||
{ "tile_file", WC_TILE_FILE },
|
{ "tiled_map", WC_TILED_MAP },
|
||||||
{ "tile_width", WC_TILE_WIDTH },
|
{ "tile_file", WC_TILE_FILE },
|
||||||
{ "tile_height", WC_TILE_HEIGHT },
|
{ "tile_width", WC_TILE_WIDTH },
|
||||||
{ "use_inverse", WC_INVERSE },
|
{ "tile_height", WC_TILE_HEIGHT },
|
||||||
{ "align_message", WC_ALIGN_MESSAGE },
|
{ "use_inverse", WC_INVERSE },
|
||||||
{ "align_status", WC_ALIGN_STATUS },
|
{ "align_message", WC_ALIGN_MESSAGE },
|
||||||
{ "font_map", WC_FONT_MAP },
|
{ "align_status", WC_ALIGN_STATUS },
|
||||||
{ "font_menu", WC_FONT_MENU },
|
{ "font_map", WC_FONT_MAP },
|
||||||
{ "font_message", WC_FONT_MESSAGE },
|
{ "font_menu", WC_FONT_MENU },
|
||||||
|
{ "font_message", WC_FONT_MESSAGE },
|
||||||
#if 0
|
#if 0
|
||||||
{"perm_invent", WC_PERM_INVENT},
|
{"perm_invent", WC_PERM_INVENT},
|
||||||
#endif
|
#endif
|
||||||
{ "font_size_map", WC_FONTSIZ_MAP },
|
{ "font_size_map", WC_FONTSIZ_MAP },
|
||||||
{ "font_size_menu", WC_FONTSIZ_MENU },
|
{ "font_size_menu", WC_FONTSIZ_MENU },
|
||||||
{ "font_size_message", WC_FONTSIZ_MESSAGE },
|
{ "font_size_message", WC_FONTSIZ_MESSAGE },
|
||||||
{ "font_size_status", WC_FONTSIZ_STATUS },
|
{ "font_size_status", WC_FONTSIZ_STATUS },
|
||||||
{ "font_size_text", WC_FONTSIZ_TEXT },
|
{ "font_size_text", WC_FONTSIZ_TEXT },
|
||||||
{ "font_status", WC_FONT_STATUS },
|
{ "font_status", WC_FONT_STATUS },
|
||||||
{ "font_text", WC_FONT_TEXT },
|
{ "font_text", WC_FONT_TEXT },
|
||||||
{ "map_mode", WC_MAP_MODE },
|
{ "map_mode", WC_MAP_MODE },
|
||||||
{ "scroll_amount", WC_SCROLL_AMOUNT },
|
{ "scroll_amount", WC_SCROLL_AMOUNT },
|
||||||
{ "scroll_margin", WC_SCROLL_MARGIN },
|
{ "scroll_margin", WC_SCROLL_MARGIN },
|
||||||
{ "splash_screen", WC_SPLASH_SCREEN },
|
{ "splash_screen", WC_SPLASH_SCREEN },
|
||||||
{ "vary_msgcount", WC_VARY_MSGCOUNT },
|
{ "vary_msgcount", WC_VARY_MSGCOUNT },
|
||||||
{ "windowcolors", WC_WINDOWCOLORS },
|
{ "windowcolors", WC_WINDOWCOLORS },
|
||||||
{ "mouse_support", WC_MOUSE_SUPPORT },
|
{ "mouse_support", WC_MOUSE_SUPPORT },
|
||||||
{ (char *) 0, 0L } };
|
{ (char *) 0, 0L }
|
||||||
|
};
|
||||||
struct wc_Opt wc2_options[] = { { "fullscreen", WC2_FULLSCREEN },
|
static struct wc_Opt wc2_options[] = {
|
||||||
{ "softkeyboard", WC2_SOFTKEYBOARD },
|
{ "fullscreen", WC2_FULLSCREEN },
|
||||||
{ "wraptext", WC2_WRAPTEXT },
|
{ "softkeyboard", WC2_SOFTKEYBOARD },
|
||||||
{ "use_darkgray", WC2_DARKGRAY },
|
{ "wraptext", WC2_WRAPTEXT },
|
||||||
{ "hitpointbar", WC2_HITPOINTBAR },
|
{ "use_darkgray", WC2_DARKGRAY },
|
||||||
{ "hilite_status", WC2_HILITE_STATUS },
|
{ "hitpointbar", WC2_HITPOINTBAR },
|
||||||
/* name shown in 'O' menu is different */
|
{ "hilite_status", WC2_HILITE_STATUS },
|
||||||
{ "status hilite rules", WC2_HILITE_STATUS },
|
/* name shown in 'O' menu is different */
|
||||||
/* statushilites doesn't have its own bit */
|
{ "status hilite rules", WC2_HILITE_STATUS },
|
||||||
{ "statushilites", WC2_HILITE_STATUS },
|
/* statushilites doesn't have its own bit */
|
||||||
{ (char *) 0, 0L } };
|
{ "statushilites", WC2_HILITE_STATUS },
|
||||||
|
{ (char *) 0, 0L }
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If a port wants to change or ensure that the SET_IN_SYS,
|
* If a port wants to change or ensure that the SET_IN_SYS,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 pline.c $NHDT-Date: 1501803108 2017/08/03 23:31:48 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.61 $ */
|
/* NetHack 3.6 pline.c $NHDT-Date: 1510990667 2017/11/18 07:37:47 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.64 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -436,7 +436,8 @@ VA_DECL(const char *, s)
|
|||||||
pbuf[BUFSZ - 1] = '\0'; /* sanity */
|
pbuf[BUFSZ - 1] = '\0'; /* sanity */
|
||||||
paniclog("impossible", pbuf);
|
paniclog("impossible", pbuf);
|
||||||
pline("%s", VA_PASS1(pbuf));
|
pline("%s", VA_PASS1(pbuf));
|
||||||
pline("%s", VA_PASS1("Program in disorder - perhaps you'd better #quit."));
|
pline(VA_PASS1(
|
||||||
|
"Program in disorder! (Saving and reloading may fix this problem.)"));
|
||||||
program_state.in_impossible = 0;
|
program_state.in_impossible = 0;
|
||||||
VA_END();
|
VA_END();
|
||||||
}
|
}
|
||||||
|
|||||||
12
src/potion.c
12
src/potion.c
@@ -577,6 +577,18 @@ register struct obj *otmp;
|
|||||||
if (++i >= A_MAX)
|
if (++i >= A_MAX)
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* when using the potion (not the spell) also restore lost levels,
|
||||||
|
to make the potion more worth keeping around for players with
|
||||||
|
the spell or with a unihorn; this is better than full healing
|
||||||
|
in that it can restore all of them, not just half, and a
|
||||||
|
blessed potion restores them all at once */
|
||||||
|
if (otmp->otyp == POT_RESTORE_ABILITY &&
|
||||||
|
u.ulevel < u.ulevelmax) {
|
||||||
|
do {
|
||||||
|
pluslvl(FALSE);
|
||||||
|
} while (u.ulevel < u.ulevelmax && otmp->blessed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case POT_HALLUCINATION:
|
case POT_HALLUCINATION:
|
||||||
|
|||||||
@@ -1435,7 +1435,7 @@ create_trap(t, croom)
|
|||||||
trap *t;
|
trap *t;
|
||||||
struct mkroom *croom;
|
struct mkroom *croom;
|
||||||
{
|
{
|
||||||
schar x, y;
|
schar x = -1, y = -1;
|
||||||
coord tm;
|
coord tm;
|
||||||
|
|
||||||
if (croom)
|
if (croom)
|
||||||
@@ -1994,7 +1994,7 @@ create_altar(a, croom)
|
|||||||
altar *a;
|
altar *a;
|
||||||
struct mkroom *croom;
|
struct mkroom *croom;
|
||||||
{
|
{
|
||||||
schar sproom, x, y;
|
schar sproom, x = -1, y = -1;
|
||||||
aligntyp amask;
|
aligntyp amask;
|
||||||
boolean croom_is_temple = TRUE;
|
boolean croom_is_temple = TRUE;
|
||||||
int oldtyp;
|
int oldtyp;
|
||||||
|
|||||||
@@ -204,8 +204,10 @@ vomiting_dialogue()
|
|||||||
that message and "You can move again." (from vomit()'s
|
that message and "You can move again." (from vomit()'s
|
||||||
nomul(-2)) with no intervening message; give one here to
|
nomul(-2)) with no intervening message; give one here to
|
||||||
have more specific point at which hero became unable to move
|
have more specific point at which hero became unable to move
|
||||||
[vomit() issues its own message for the cantvomit() case] */
|
[vomit() issues its own message for the cantvomit() case
|
||||||
You("%s!", !Hallucination ? "vomit" : "hurl chunks");
|
and for the FAINTING-or-worse case where stomach is empty] */
|
||||||
|
if (u.uhs < FAINTING)
|
||||||
|
You("%s!", !Hallucination ? "vomit" : "hurl chunks");
|
||||||
}
|
}
|
||||||
vomit();
|
vomit();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -129,11 +129,7 @@ getlin_hook_proc hook;
|
|||||||
#endif /* NEWAUTOCOMP */
|
#endif /* NEWAUTOCOMP */
|
||||||
} else
|
} else
|
||||||
tty_nhbell();
|
tty_nhbell();
|
||||||
#if defined(apollo)
|
|
||||||
} else if (c == '\n' || c == '\r') {
|
} else if (c == '\n' || c == '\r') {
|
||||||
#else
|
|
||||||
} else if (c == '\n') {
|
|
||||||
#endif
|
|
||||||
#ifndef NEWAUTOCOMP
|
#ifndef NEWAUTOCOMP
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
#endif /* not NEWAUTOCOMP */
|
#endif /* not NEWAUTOCOMP */
|
||||||
@@ -213,7 +209,7 @@ register const char *s; /* chars allowed besides return */
|
|||||||
!program_state.done_hup &&
|
!program_state.done_hup &&
|
||||||
#endif
|
#endif
|
||||||
(c = tty_nhgetch()) != EOF) {
|
(c = tty_nhgetch()) != EOF) {
|
||||||
if (c == '\n')
|
if (c == '\n' || c == '\r')
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (iflags.cbreak) {
|
if (iflags.cbreak) {
|
||||||
@@ -223,7 +219,7 @@ register const char *s; /* chars allowed besides return */
|
|||||||
morc = '\033';
|
morc = '\033';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ((s && index(s, c)) || c == x) {
|
if ((s && index(s, c)) || c == x || (x == '\n' && c == '\r')) {
|
||||||
morc = (char) c;
|
morc = (char) c;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1167,6 +1167,8 @@ tty_askname()
|
|||||||
while ((c = tty_nhgetch()) != '\n') {
|
while ((c = tty_nhgetch()) != '\n') {
|
||||||
if (c == EOF)
|
if (c == EOF)
|
||||||
c = '\033';
|
c = '\033';
|
||||||
|
if (c == '\r')
|
||||||
|
break;
|
||||||
if (c == '\033') {
|
if (c == '\033') {
|
||||||
ct = 0;
|
ct = 0;
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user