Merge branch 'win-minor' of https://rodney.nethack.org:20040/git/NHsource into win-minor
This commit is contained in:
@@ -275,6 +275,8 @@ Platform- and/or Interface-Specific Fixes or Features
|
|||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
move 'perm_invent' value from flags to iflags to keep it out of save files;
|
move 'perm_invent' value from flags to iflags to keep it out of save files;
|
||||||
affects X11, win32, and curses
|
affects X11, win32, and curses
|
||||||
|
always define shell and suspend commands so that key bindings copied from one
|
||||||
|
platform to another work even if second one disables those commands
|
||||||
windows-gui: In nethackw, there could be conflicts between menu accelerators
|
windows-gui: In nethackw, there could be conflicts between menu accelerators
|
||||||
and an extra choice accelerator to fix H7132.
|
and an extra choice accelerator to fix H7132.
|
||||||
windows-gui: recognize new BL_RESET in status_update; no change in behavior yet
|
windows-gui: recognize new BL_RESET in status_update; no change in behavior yet
|
||||||
|
|||||||
@@ -369,8 +369,6 @@ struct instance_flags {
|
|||||||
boolean wizweight; /* display weight of everything in wizard mode */
|
boolean wizweight; /* display weight of everything in wizard mode */
|
||||||
boolean cmdassist; /* provide detailed assistance for some commands */
|
boolean cmdassist; /* provide detailed assistance for some commands */
|
||||||
boolean clicklook; /* allow right-clicking for look */
|
boolean clicklook; /* allow right-clicking for look */
|
||||||
boolean msg_is_alert; /* suggest windowport should grab player's attention
|
|
||||||
* and request <TAB> acknowlegement */
|
|
||||||
int statuslines; /* default = 2, code support for alternative 3 */
|
int statuslines; /* default = 2, code support for alternative 3 */
|
||||||
/*
|
/*
|
||||||
* Window capability support.
|
* Window capability support.
|
||||||
|
|||||||
+2
-1
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 func_tab.h $NHDT-Date: 1432512775 2015/05/25 00:12:55 $ $NHDT-Branch: master $:$NHDT-Revision: 1.8 $ */
|
/* NetHack 3.6 func_tab.h $NHDT-Date: 1543797823 2018/12/03 00:43:43 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.11 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Pasi Kallinen, 2016. */
|
/*-Copyright (c) Pasi Kallinen, 2016. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
#define AUTOCOMPLETE 0x02 /* command autocompletes */
|
#define AUTOCOMPLETE 0x02 /* command autocompletes */
|
||||||
#define WIZMODECMD 0x04 /* wizard-mode command */
|
#define WIZMODECMD 0x04 /* wizard-mode command */
|
||||||
#define GENERALCMD 0x08 /* general command, does not take game time */
|
#define GENERALCMD 0x08 /* general command, does not take game time */
|
||||||
|
#define CMD_NOT_AVAILABLE 0x10 /* recognized but non-functional (!SHELL,&c) */
|
||||||
|
|
||||||
struct ext_func_tab {
|
struct ext_func_tab {
|
||||||
uchar key;
|
uchar key;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.6 cmd.c $NHDT-Date: 1543711385 2018/12/02 00:43:05 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.309 $ */
|
/* NetHack 3.6 cmd.c $NHDT-Date: 1543797825 2018/12/03 00:43:45 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.312 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Robert Patrick Rankin, 2013. */
|
/*-Copyright (c) Robert Patrick Rankin, 2013. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -126,10 +126,10 @@ extern int NDECL(dozap); /**/
|
|||||||
extern int NDECL(doorganize); /**/
|
extern int NDECL(doorganize); /**/
|
||||||
#endif /* DUMB */
|
#endif /* DUMB */
|
||||||
|
|
||||||
static int NDECL(dosuspend_core); /**/
|
|
||||||
|
|
||||||
static int NDECL((*timed_occ_fn));
|
static int NDECL((*timed_occ_fn));
|
||||||
|
|
||||||
|
STATIC_PTR int NDECL(dosuspend_core);
|
||||||
|
STATIC_PTR int NDECL(dosh_core);
|
||||||
STATIC_PTR int NDECL(doherecmdmenu);
|
STATIC_PTR int NDECL(doherecmdmenu);
|
||||||
STATIC_PTR int NDECL(dotherecmdmenu);
|
STATIC_PTR int NDECL(dotherecmdmenu);
|
||||||
STATIC_PTR int NDECL(doprev_message);
|
STATIC_PTR int NDECL(doprev_message);
|
||||||
@@ -194,9 +194,6 @@ STATIC_DCL void FDECL(one_characteristic, (int, int, int));
|
|||||||
STATIC_DCL void FDECL(status_enlightenment, (int, int));
|
STATIC_DCL void FDECL(status_enlightenment, (int, int));
|
||||||
STATIC_DCL void FDECL(attributes_enlightenment, (int, int));
|
STATIC_DCL void FDECL(attributes_enlightenment, (int, int));
|
||||||
|
|
||||||
static const char *readchar_queue = "";
|
|
||||||
static coord clicklook_cc;
|
|
||||||
|
|
||||||
STATIC_DCL void FDECL(add_herecmd_menuitem, (winid, int NDECL((*)),
|
STATIC_DCL void FDECL(add_herecmd_menuitem, (winid, int NDECL((*)),
|
||||||
const char *));
|
const char *));
|
||||||
STATIC_DCL char FDECL(here_cmd_menu, (BOOLEAN_P));
|
STATIC_DCL char FDECL(here_cmd_menu, (BOOLEAN_P));
|
||||||
@@ -205,6 +202,13 @@ STATIC_DCL char *NDECL(parse);
|
|||||||
STATIC_DCL void FDECL(show_direction_keys, (winid, CHAR_P, BOOLEAN_P));
|
STATIC_DCL void FDECL(show_direction_keys, (winid, CHAR_P, BOOLEAN_P));
|
||||||
STATIC_DCL boolean FDECL(help_dir, (CHAR_P, int, const char *));
|
STATIC_DCL boolean FDECL(help_dir, (CHAR_P, int, const char *));
|
||||||
|
|
||||||
|
static const char *readchar_queue = "";
|
||||||
|
static coord clicklook_cc;
|
||||||
|
/* for rejecting attempts to use wizard mode commands */
|
||||||
|
static const char unavailcmd[] = "Unavailable command '%s'.";
|
||||||
|
/* for rejecting #if !SHELL, !SUSPEND */
|
||||||
|
static const char cmdnotavail[] = "'%s' command not available.";
|
||||||
|
|
||||||
STATIC_PTR int
|
STATIC_PTR int
|
||||||
doprev_message(VOID_ARGS)
|
doprev_message(VOID_ARGS)
|
||||||
{
|
{
|
||||||
@@ -438,6 +442,8 @@ doextlist(VOID_ARGS)
|
|||||||
for (efp = extcmdlist; efp->ef_txt; efp++) {
|
for (efp = extcmdlist; efp->ef_txt; efp++) {
|
||||||
int wizc;
|
int wizc;
|
||||||
|
|
||||||
|
if ((efp->flags & CMD_NOT_AVAILABLE) != 0)
|
||||||
|
continue;
|
||||||
/* if hiding non-autocomplete commands, skip such */
|
/* if hiding non-autocomplete commands, skip such */
|
||||||
if (menumode == 1 && (efp->flags & AUTOCOMPLETE) == 0)
|
if (menumode == 1 && (efp->flags & AUTOCOMPLETE) == 0)
|
||||||
continue;
|
continue;
|
||||||
@@ -567,7 +573,8 @@ extcmd_via_menu()
|
|||||||
any = zeroany;
|
any = zeroany;
|
||||||
/* populate choices */
|
/* populate choices */
|
||||||
for (efp = extcmdlist; efp->ef_txt; efp++) {
|
for (efp = extcmdlist; efp->ef_txt; efp++) {
|
||||||
if (!(efp->flags & AUTOCOMPLETE)
|
if ((efp->flags & CMD_NOT_AVAILABLE)
|
||||||
|
|| !(efp->flags & AUTOCOMPLETE)
|
||||||
|| (!wizard && (efp->flags & WIZMODECMD)))
|
|| (!wizard && (efp->flags & WIZMODECMD)))
|
||||||
continue;
|
continue;
|
||||||
if (!matchlevel || !strncmp(efp->ef_txt, cbuf, matchlevel)) {
|
if (!matchlevel || !strncmp(efp->ef_txt, cbuf, matchlevel)) {
|
||||||
@@ -763,8 +770,7 @@ wiz_wish(VOID_ARGS) /* Unlimited wishes for debug mode by Paul Polderman */
|
|||||||
flags.verbose = save_verbose;
|
flags.verbose = save_verbose;
|
||||||
(void) encumber_msg();
|
(void) encumber_msg();
|
||||||
} else
|
} else
|
||||||
pline("Unavailable command '%s'.",
|
pline(unavailcmd, visctrl((int) cmd_from_func(wiz_wish)));
|
||||||
visctrl((int) cmd_from_func(wiz_wish)));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -784,8 +790,7 @@ wiz_identify(VOID_ARGS)
|
|||||||
(void) display_inventory((char *) 0, FALSE);
|
(void) display_inventory((char *) 0, FALSE);
|
||||||
iflags.override_ID = 0;
|
iflags.override_ID = 0;
|
||||||
} else
|
} else
|
||||||
pline("Unavailable command '%s'.",
|
pline(unavailcmd, visctrl((int) cmd_from_func(wiz_identify)));
|
||||||
visctrl((int) cmd_from_func(wiz_identify)));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -840,8 +845,7 @@ wiz_map(VOID_ARGS)
|
|||||||
HConfusion = save_Hconf;
|
HConfusion = save_Hconf;
|
||||||
HHallucination = save_Hhallu;
|
HHallucination = save_Hhallu;
|
||||||
} else
|
} else
|
||||||
pline("Unavailable command '%s'.",
|
pline(unavailcmd, visctrl((int) cmd_from_func(wiz_map)));
|
||||||
visctrl((int) cmd_from_func(wiz_map)));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -852,8 +856,7 @@ wiz_genesis(VOID_ARGS)
|
|||||||
if (wizard)
|
if (wizard)
|
||||||
(void) create_particular();
|
(void) create_particular();
|
||||||
else
|
else
|
||||||
pline("Unavailable command '%s'.",
|
pline(unavailcmd, visctrl((int) cmd_from_func(wiz_genesis)));
|
||||||
visctrl((int) cmd_from_func(wiz_genesis)));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -864,8 +867,7 @@ wiz_where(VOID_ARGS)
|
|||||||
if (wizard)
|
if (wizard)
|
||||||
(void) print_dungeon(FALSE, (schar *) 0, (xchar *) 0);
|
(void) print_dungeon(FALSE, (schar *) 0, (xchar *) 0);
|
||||||
else
|
else
|
||||||
pline("Unavailable command '%s'.",
|
pline(unavailcmd, visctrl((int) cmd_from_func(wiz_where)));
|
||||||
visctrl((int) cmd_from_func(wiz_where)));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -876,8 +878,7 @@ wiz_detect(VOID_ARGS)
|
|||||||
if (wizard)
|
if (wizard)
|
||||||
(void) findit();
|
(void) findit();
|
||||||
else
|
else
|
||||||
pline("Unavailable command '%s'.",
|
pline(unavailcmd, visctrl((int) cmd_from_func(wiz_detect)));
|
||||||
visctrl((int) cmd_from_func(wiz_detect)));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -888,8 +889,7 @@ wiz_level_tele(VOID_ARGS)
|
|||||||
if (wizard)
|
if (wizard)
|
||||||
level_tele();
|
level_tele();
|
||||||
else
|
else
|
||||||
pline("Unavailable command '%s'.",
|
pline(unavailcmd, visctrl((int) cmd_from_func(wiz_level_tele)));
|
||||||
visctrl((int) cmd_from_func(wiz_level_tele)));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1444,8 +1444,7 @@ wiz_intrinsic(VOID_ARGS)
|
|||||||
free((genericptr_t) pick_list);
|
free((genericptr_t) pick_list);
|
||||||
doredraw();
|
doredraw();
|
||||||
} else
|
} else
|
||||||
pline("Unavailable command '%s'.",
|
pline(unavailcmd, visctrl((int) cmd_from_func(wiz_intrinsic)));
|
||||||
visctrl((int) cmd_from_func(wiz_intrinsic)));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3304,16 +3303,21 @@ struct ext_func_tab extcmdlist[] = {
|
|||||||
{ '^', "seetrap", "show the type of adjacent trap", doidtrap, IFBURIED },
|
{ '^', "seetrap", "show the type of adjacent trap", doidtrap, IFBURIED },
|
||||||
{ WEAPON_SYM, "seeweapon", "show the weapon currently wielded",
|
{ WEAPON_SYM, "seeweapon", "show the weapon currently wielded",
|
||||||
doprwep, IFBURIED },
|
doprwep, IFBURIED },
|
||||||
#ifdef SHELL
|
{ '!', "shell", "do a shell escape",
|
||||||
{ '!', "shell", "do a shell escape", dosh, IFBURIED | GENERALCMD },
|
dosh_core, IFBURIED | GENERALCMD
|
||||||
|
#ifndef SHELL
|
||||||
|
| CMD_NOT_AVAILABLE
|
||||||
#endif /* SHELL */
|
#endif /* SHELL */
|
||||||
|
},
|
||||||
{ M('s'), "sit", "sit down", dosit, AUTOCOMPLETE },
|
{ M('s'), "sit", "sit down", dosit, AUTOCOMPLETE },
|
||||||
{ '\0', "stats", "show memory statistics",
|
{ '\0', "stats", "show memory statistics",
|
||||||
wiz_show_stats, IFBURIED | AUTOCOMPLETE | WIZMODECMD },
|
wiz_show_stats, IFBURIED | AUTOCOMPLETE | WIZMODECMD },
|
||||||
#ifdef SUSPEND
|
|
||||||
{ C('z'), "suspend", "suspend the game",
|
{ C('z'), "suspend", "suspend the game",
|
||||||
dosuspend_core, IFBURIED | GENERALCMD },
|
dosuspend_core, IFBURIED | GENERALCMD
|
||||||
|
#ifndef SUSPEND
|
||||||
|
| CMD_NOT_AVAILABLE
|
||||||
#endif /* SUSPEND */
|
#endif /* SUSPEND */
|
||||||
|
},
|
||||||
{ 'x', "swap", "swap wielded and secondary weapons", doswapweapon },
|
{ 'x', "swap", "swap wielded and secondary weapons", doswapweapon },
|
||||||
{ 'T', "takeoff", "take off one piece of armor", dotakeoff },
|
{ 'T', "takeoff", "take off one piece of armor", dotakeoff },
|
||||||
{ 'A', "takeoffall", "remove all armor", doddoremarm },
|
{ 'A', "takeoffall", "remove all armor", doddoremarm },
|
||||||
@@ -3407,6 +3411,14 @@ const char *command;
|
|||||||
if (strcmp(command, extcmd->ef_txt))
|
if (strcmp(command, extcmd->ef_txt))
|
||||||
continue;
|
continue;
|
||||||
Cmd.commands[key] = extcmd;
|
Cmd.commands[key] = extcmd;
|
||||||
|
#if 0 /* silently accept key binding for unavailable command (!SHELL,&c) */
|
||||||
|
if ((extcmd->flags & CMD_NOT_AVAILABLE) != 0) {
|
||||||
|
char buf[BUFSZ];
|
||||||
|
|
||||||
|
Sprintf(buf, cmdnotavail, extcmd->ef_txt);
|
||||||
|
config_error_add("%s", buf);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5504,10 +5516,7 @@ parse()
|
|||||||
if (iflags.debug_fuzzer /* if fuzzing, override '!' and ^Z */
|
if (iflags.debug_fuzzer /* if fuzzing, override '!' and ^Z */
|
||||||
&& (Cmd.commands[foo & 0x0ff]
|
&& (Cmd.commands[foo & 0x0ff]
|
||||||
&& (Cmd.commands[foo & 0x0ff]->ef_funct == dosuspend_core
|
&& (Cmd.commands[foo & 0x0ff]->ef_funct == dosuspend_core
|
||||||
#ifdef SHELL
|
|| Cmd.commands[foo & 0x0ff]->ef_funct == dosh_core)))
|
||||||
|| Cmd.commands[foo & 0x0ff]->ef_funct == dosh
|
|
||||||
#endif
|
|
||||||
)))
|
|
||||||
foo = Cmd.spkeys[NHKF_ESC];
|
foo = Cmd.spkeys[NHKF_ESC];
|
||||||
|
|
||||||
if (foo == Cmd.spkeys[NHKF_ESC]) { /* esc cancels count (TH) */
|
if (foo == Cmd.spkeys[NHKF_ESC]) { /* esc cancels count (TH) */
|
||||||
@@ -5666,15 +5675,22 @@ readchar()
|
|||||||
return (char) sym;
|
return (char) sym;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* '_' command, #travel, via keyboard rather than mouse click */
|
||||||
STATIC_PTR int
|
STATIC_PTR int
|
||||||
dotravel(VOID_ARGS)
|
dotravel(VOID_ARGS)
|
||||||
{
|
{
|
||||||
/* Keyboard travel command */
|
|
||||||
static char cmd[2];
|
static char cmd[2];
|
||||||
coord cc;
|
coord cc;
|
||||||
|
|
||||||
|
/* [FIXME? Supporting the ability to disable traveling via mouse
|
||||||
|
click makes some sense, depending upon overall mouse usage.
|
||||||
|
Disabling '_' on a user by user basis makes no sense at all since
|
||||||
|
even if it is typed by accident, aborting when picking a target
|
||||||
|
destination is trivial. Travel via mouse predates travel via '_',
|
||||||
|
and this use of OPTION=!travel is probably just a mistake....] */
|
||||||
if (!flags.travelcmd)
|
if (!flags.travelcmd)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
cmd[1] = 0;
|
cmd[1] = 0;
|
||||||
cc.x = iflags.travelcc.x;
|
cc.x = iflags.travelcc.x;
|
||||||
cc.y = iflags.travelcc.y;
|
cc.y = iflags.travelcc.y;
|
||||||
@@ -5789,8 +5805,9 @@ const char *prompt;
|
|||||||
return confirmed_ok;
|
return confirmed_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
/* ^Z command, #suspend */
|
||||||
dosuspend_core()
|
STATIC_PTR int
|
||||||
|
dosuspend_core(VOID_ARGS)
|
||||||
{
|
{
|
||||||
#ifdef SUSPEND
|
#ifdef SUSPEND
|
||||||
/* Does current window system support suspend? */
|
/* Does current window system support suspend? */
|
||||||
@@ -5799,7 +5816,20 @@ dosuspend_core()
|
|||||||
dosuspend();
|
dosuspend();
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
Norep("Suspend command not available.");
|
Norep(cmdnotavail, "#suspend");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* '!' command, #shell */
|
||||||
|
STATIC_PTR int
|
||||||
|
dosh_core(VOID_ARGS)
|
||||||
|
{
|
||||||
|
#ifdef SHELL
|
||||||
|
/* access restrictions, if any, are handled in port code */
|
||||||
|
dosh();
|
||||||
|
#else
|
||||||
|
Norep(cmdnotavail, "#shell");
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+22
-13
@@ -419,6 +419,8 @@ curses_ext_cmd()
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
for (count = 0; extcmdlist[count].ef_txt; count++) {
|
for (count = 0; extcmdlist[count].ef_txt; count++) {
|
||||||
|
if (!wizard && (extcmdlist[count].flags & WIZMODECMD))
|
||||||
|
continue;
|
||||||
if (!(extcmdlist[count].flags & AUTOCOMPLETE))
|
if (!(extcmdlist[count].flags & AUTOCOMPLETE))
|
||||||
continue;
|
continue;
|
||||||
if (strlen(extcmdlist[count].ef_txt) > (size_t) prompt_width) {
|
if (strlen(extcmdlist[count].ef_txt) > (size_t) prompt_width) {
|
||||||
@@ -508,6 +510,12 @@ curses_add_nhmenu_item(winid wid, int glyph, const ANY_P * identifier,
|
|||||||
nhmenu_item *new_item, *current_items, *menu_item_ptr;
|
nhmenu_item *new_item, *current_items, *menu_item_ptr;
|
||||||
nhmenu *current_menu = get_menu(wid);
|
nhmenu *current_menu = get_menu(wid);
|
||||||
|
|
||||||
|
if (current_menu == NULL) {
|
||||||
|
impossible
|
||||||
|
("curses_add_nhmenu_item: attempt to add item to nonexistent menu");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (str == NULL) {
|
if (str == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -530,11 +538,6 @@ curses_add_nhmenu_item(winid wid, int glyph, const ANY_P * identifier,
|
|||||||
new_item->count = -1;
|
new_item->count = -1;
|
||||||
new_item->next_item = NULL;
|
new_item->next_item = NULL;
|
||||||
|
|
||||||
if (current_menu == NULL) {
|
|
||||||
panic
|
|
||||||
("curses_add_nhmenu_item: attempt to add item to nonexistant menu");
|
|
||||||
}
|
|
||||||
|
|
||||||
current_items = current_menu->entries;
|
current_items = current_menu->entries;
|
||||||
menu_item_ptr = current_items;
|
menu_item_ptr = current_items;
|
||||||
|
|
||||||
@@ -559,12 +562,13 @@ curses_finalize_nhmenu(winid wid, const char *prompt)
|
|||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
nhmenu *current_menu = get_menu(wid);
|
nhmenu *current_menu = get_menu(wid);
|
||||||
nhmenu_item *menu_item_ptr = current_menu->entries;
|
|
||||||
|
|
||||||
if (current_menu == NULL) {
|
if (current_menu == NULL) {
|
||||||
panic("curses_finalize_nhmenu: attempt to finalize nonexistant menu");
|
impossible("curses_finalize_nhmenu: attempt to finalize nonexistent menu");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nhmenu_item *menu_item_ptr = current_menu->entries;
|
||||||
while (menu_item_ptr != NULL) {
|
while (menu_item_ptr != NULL) {
|
||||||
menu_item_ptr = menu_item_ptr->next_item;
|
menu_item_ptr = menu_item_ptr->next_item;
|
||||||
count++;
|
count++;
|
||||||
@@ -590,13 +594,15 @@ curses_display_nhmenu(winid wid, int how, MENU_ITEM_P ** _selected)
|
|||||||
*_selected = NULL;
|
*_selected = NULL;
|
||||||
|
|
||||||
if (current_menu == NULL) {
|
if (current_menu == NULL) {
|
||||||
panic("curses_display_nhmenu: attempt to display nonexistant menu");
|
impossible("curses_display_nhmenu: attempt to display nonexistent menu");
|
||||||
|
return '\033';
|
||||||
}
|
}
|
||||||
|
|
||||||
menu_item_ptr = current_menu->entries;
|
menu_item_ptr = current_menu->entries;
|
||||||
|
|
||||||
if (menu_item_ptr == NULL) {
|
if (menu_item_ptr == NULL) {
|
||||||
panic("curses_display_nhmenu: attempt to display empty menu");
|
impossible("curses_display_nhmenu: attempt to display empty menu");
|
||||||
|
return '\033';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset items to unselected to clear out selections from previous
|
/* Reset items to unselected to clear out selections from previous
|
||||||
@@ -631,8 +637,9 @@ curses_display_nhmenu(winid wid, int how, MENU_ITEM_P ** _selected)
|
|||||||
while (menu_item_ptr != NULL) {
|
while (menu_item_ptr != NULL) {
|
||||||
if (menu_item_ptr->selected) {
|
if (menu_item_ptr->selected) {
|
||||||
if (count == num_chosen) {
|
if (count == num_chosen) {
|
||||||
panic("curses_display_nhmenu: Selected items "
|
impossible("curses_display_nhmenu: Selected items "
|
||||||
"exceeds expected number");
|
"exceeds expected number");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
selected[count].item = menu_item_ptr->identifier;
|
selected[count].item = menu_item_ptr->identifier;
|
||||||
selected[count].count = menu_item_ptr->count;
|
selected[count].count = menu_item_ptr->count;
|
||||||
@@ -642,7 +649,7 @@ curses_display_nhmenu(winid wid, int how, MENU_ITEM_P ** _selected)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (count != num_chosen) {
|
if (count != num_chosen) {
|
||||||
panic("curses_display_nhmenu: Selected items less than "
|
impossible("curses_display_nhmenu: Selected items less than "
|
||||||
"expected number");
|
"expected number");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -949,7 +956,8 @@ menu_display_page(nhmenu *menu, WINDOW * win, int page_num)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (menu_item_ptr == NULL) { /* Page not found */
|
if (menu_item_ptr == NULL) { /* Page not found */
|
||||||
panic("menu_display_page: attempt to display nonexistant page");
|
impossible("menu_display_page: attempt to display nonexistent page");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
werase(win);
|
werase(win);
|
||||||
@@ -1343,7 +1351,8 @@ menu_operation(WINDOW * win, nhmenu *menu, menu_op
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (menu_item_ptr == NULL) { /* Page not found */
|
if (menu_item_ptr == NULL) { /* Page not found */
|
||||||
panic("menu_display_page: attempt to display nonexistant page");
|
impossible("menu_display_page: attempt to display nonexistent page");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (menu_item_ptr != NULL) {
|
while (menu_item_ptr != NULL) {
|
||||||
|
|||||||
+26
-43
@@ -148,18 +148,13 @@ curses_block(boolean noscroll)
|
|||||||
|
|
||||||
curses_get_window_size(MESSAGE_WIN, &height, &width);
|
curses_get_window_size(MESSAGE_WIN, &height, &width);
|
||||||
curses_toggle_color_attr(win, MORECOLOR, NONE, ON);
|
curses_toggle_color_attr(win, MORECOLOR, NONE, ON);
|
||||||
mvwprintw(win, my, mx, iflags.msg_is_alert ? "<TAB!>" : ">>");
|
mvwprintw(win, my, mx, ">>");
|
||||||
curses_toggle_color_attr(win, MORECOLOR, NONE, OFF);
|
curses_toggle_color_attr(win, MORECOLOR, NONE, OFF);
|
||||||
if (iflags.msg_is_alert)
|
|
||||||
curses_alert_main_borders(TRUE);
|
|
||||||
wrefresh(win);
|
wrefresh(win);
|
||||||
while (iflags.msg_is_alert && (ret = wgetch(win) != '\t'));
|
|
||||||
/* msgtype=stop should require space/enter rather than
|
/* msgtype=stop should require space/enter rather than
|
||||||
* just any key, as we want to prevent YASD from
|
* just any key, as we want to prevent YASD from
|
||||||
* riding direction keys. */
|
* riding direction keys. */
|
||||||
while (!iflags.msg_is_alert && (ret = wgetch(win)) && !index(resp,(char)ret));
|
while ((ret = wgetch(win)) && !index(resp,(char)ret));
|
||||||
if (iflags.msg_is_alert)
|
|
||||||
curses_alert_main_borders(FALSE);
|
|
||||||
if (height == 1) {
|
if (height == 1) {
|
||||||
curses_clear_unhighlight_message_window();
|
curses_clear_unhighlight_message_window();
|
||||||
} else {
|
} else {
|
||||||
@@ -298,8 +293,8 @@ curses_prev_mesg()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Shows Count: in a separate window, or at the bottom of the message
|
/* Shows Count: at the bottom of the message window,
|
||||||
window, depending on the user's settings */
|
popup_dialog is not currently implemented for this function */
|
||||||
|
|
||||||
void
|
void
|
||||||
curses_count_window(const char *count_text)
|
curses_count_window(const char *count_text)
|
||||||
@@ -317,43 +312,31 @@ curses_count_window(const char *count_text)
|
|||||||
|
|
||||||
counting = TRUE;
|
counting = TRUE;
|
||||||
|
|
||||||
if (iflags.wc_popup_dialog) { /* Display count in popup window */
|
curses_get_window_xy(MESSAGE_WIN, &winx, &winy);
|
||||||
startx = 1;
|
curses_get_window_size(MESSAGE_WIN, &messageh, &messagew);
|
||||||
starty = 1;
|
|
||||||
|
|
||||||
if (countwin == NULL) {
|
if (curses_window_has_border(MESSAGE_WIN)) {
|
||||||
countwin = curses_create_window(25, 1, UP);
|
winx++;
|
||||||
}
|
winy++;
|
||||||
|
|
||||||
} else { /* Display count at bottom of message window */
|
|
||||||
|
|
||||||
curses_get_window_xy(MESSAGE_WIN, &winx, &winy);
|
|
||||||
curses_get_window_size(MESSAGE_WIN, &messageh, &messagew);
|
|
||||||
|
|
||||||
if (curses_window_has_border(MESSAGE_WIN)) {
|
|
||||||
winx++;
|
|
||||||
winy++;
|
|
||||||
}
|
|
||||||
|
|
||||||
winy += messageh - 1;
|
|
||||||
|
|
||||||
if (countwin == NULL) {
|
|
||||||
pline("#");
|
|
||||||
#ifndef PDCURSES
|
|
||||||
countwin = newwin(1, 25, winy, winx);
|
|
||||||
#endif /* !PDCURSES */
|
|
||||||
}
|
|
||||||
#ifdef PDCURSES
|
|
||||||
else {
|
|
||||||
curses_destroy_win(countwin);
|
|
||||||
}
|
|
||||||
|
|
||||||
countwin = newwin(1, 25, winy, winx);
|
|
||||||
#endif /* PDCURSES */
|
|
||||||
startx = 0;
|
|
||||||
starty = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
winy += messageh - 1;
|
||||||
|
|
||||||
|
if (countwin == NULL) {
|
||||||
|
#ifndef PDCURSES
|
||||||
|
countwin = newwin(1, 25, winy, winx);
|
||||||
|
#endif /* !PDCURSES */
|
||||||
|
}
|
||||||
|
#ifdef PDCURSES
|
||||||
|
else {
|
||||||
|
curses_destroy_win(countwin);
|
||||||
|
}
|
||||||
|
|
||||||
|
countwin = newwin(1, 25, winy, winx);
|
||||||
|
#endif /* PDCURSES */
|
||||||
|
startx = 0;
|
||||||
|
starty = 0;
|
||||||
|
|
||||||
mvwprintw(countwin, starty, startx, "%s", count_text);
|
mvwprintw(countwin, starty, startx, "%s", count_text);
|
||||||
wrefresh(countwin);
|
wrefresh(countwin);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,9 +92,9 @@ curses_toggle_color_attr(WINDOW * win, int color, int attr, int onoff)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* GUI color disabled */
|
/* GUI color disabled */
|
||||||
/* if ((!iflags.wc2_guicolor) && (win != mapwin)) {
|
if ((!iflags.wc2_guicolor) && (win != mapwin)) {
|
||||||
return;
|
return;
|
||||||
} */
|
}
|
||||||
|
|
||||||
if (color == 0) { /* make black fg visible */
|
if (color == 0) { /* make black fg visible */
|
||||||
# ifdef USE_DARKGRAY
|
# ifdef USE_DARKGRAY
|
||||||
@@ -102,7 +102,6 @@ curses_toggle_color_attr(WINDOW * win, int color, int attr, int onoff)
|
|||||||
if (can_change_color() && (COLORS > 16)) {
|
if (can_change_color() && (COLORS > 16)) {
|
||||||
/* colorpair for black is already darkgray */
|
/* colorpair for black is already darkgray */
|
||||||
} else { /* Use bold for a bright black */
|
} else { /* Use bold for a bright black */
|
||||||
|
|
||||||
wattron(win, A_BOLD);
|
wattron(win, A_BOLD);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
@@ -188,8 +187,8 @@ curses_get_wid(int type)
|
|||||||
ret = text_wid;
|
ret = text_wid;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
panic("curses_get_wid: unsupported window type");
|
impossible("curses_get_wid: unsupported window type");
|
||||||
ret = -1; /* Not reached */
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (curses_window_exists(ret)) {
|
while (curses_window_exists(ret)) {
|
||||||
|
|||||||
+23
-12
@@ -78,9 +78,15 @@ curses_create_window(int width, int height, orient orientation)
|
|||||||
width += 2; /* leave room for bounding box */
|
width += 2; /* leave room for bounding box */
|
||||||
height += 2;
|
height += 2;
|
||||||
|
|
||||||
if ((width > term_cols) || (height > term_rows))
|
if ((width > term_cols) || (height > term_rows)) {
|
||||||
panic("curses_create_window: Terminal too small for dialog window");
|
impossible("curses_create_window: Terminal too small for dialog window");
|
||||||
|
width = term_cols;
|
||||||
|
height = term_rows;
|
||||||
|
}
|
||||||
switch (orientation) {
|
switch (orientation) {
|
||||||
|
default:
|
||||||
|
impossible("curses_create_window: Bad orientation");
|
||||||
|
/* fall through to centre */
|
||||||
case CENTER:
|
case CENTER:
|
||||||
startx = (term_cols / 2) - (width / 2);
|
startx = (term_cols / 2) - (width / 2);
|
||||||
starty = (term_rows / 2) - (height / 2);
|
starty = (term_rows / 2) - (height / 2);
|
||||||
@@ -119,9 +125,6 @@ curses_create_window(int width, int height, orient orientation)
|
|||||||
|
|
||||||
starty = 0;
|
starty = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
panic("curses_create_window: Bad orientation");
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (startx < 0) {
|
if (startx < 0) {
|
||||||
@@ -190,7 +193,8 @@ WINDOW *
|
|||||||
curses_get_nhwin(winid wid)
|
curses_get_nhwin(winid wid)
|
||||||
{
|
{
|
||||||
if (!is_main_window(wid)) {
|
if (!is_main_window(wid)) {
|
||||||
panic("curses_get_nhwin: wid out of range. Not a main window.");
|
impossible("curses_get_nhwin: wid %d out of range. Not a main window.", wid);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return nhwins[wid].curwin;
|
return nhwins[wid].curwin;
|
||||||
@@ -208,7 +212,8 @@ curses_add_nhwin(winid wid, int height, int width, int y, int x,
|
|||||||
int real_height = height;
|
int real_height = height;
|
||||||
|
|
||||||
if (!is_main_window(wid)) {
|
if (!is_main_window(wid)) {
|
||||||
panic("curses_add_nhwin: wid out of range. Not a main window.");
|
impossible("curses_add_nhwin: wid %d out of range. Not a main window.", wid);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
nhwins[wid].nhwin = wid;
|
nhwins[wid].nhwin = wid;
|
||||||
@@ -300,7 +305,8 @@ curses_del_nhwin(winid wid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!is_main_window(wid)) {
|
if (!is_main_window(wid)) {
|
||||||
panic("curses_del_nhwin: wid out of range. Not a main window.");
|
impossible("curses_del_nhwin: wid %d out of range. Not a main window.", wid);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
nhwins[wid].curwin = NULL;
|
nhwins[wid].curwin = NULL;
|
||||||
@@ -390,7 +396,10 @@ void
|
|||||||
curses_get_window_xy(winid wid, int *x, int *y)
|
curses_get_window_xy(winid wid, int *x, int *y)
|
||||||
{
|
{
|
||||||
if (!is_main_window(wid)) {
|
if (!is_main_window(wid)) {
|
||||||
panic("curses_get_window_xy: wid out of range. Not a main window.");
|
impossible("curses_get_window_xy: wid %d out of range. Not a main window.", wid);
|
||||||
|
*x = 0;
|
||||||
|
*y = 0;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
*x = nhwins[wid].x;
|
*x = nhwins[wid].x;
|
||||||
@@ -442,8 +451,9 @@ int
|
|||||||
curses_get_window_orientation(winid wid)
|
curses_get_window_orientation(winid wid)
|
||||||
{
|
{
|
||||||
if (!is_main_window(wid)) {
|
if (!is_main_window(wid)) {
|
||||||
panic
|
impossible
|
||||||
("curses_get_window_orientation: wid out of range. Not a main window.");
|
("curses_get_window_orientation: wid %d out of range. Not a main window.", wid);
|
||||||
|
return CENTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
return nhwins[wid].orientation;
|
return nhwins[wid].orientation;
|
||||||
@@ -480,7 +490,8 @@ curses_puts(winid wid, int attr, const char *text)
|
|||||||
|
|
||||||
if (curses_is_menu(wid) || curses_is_text(wid)) {
|
if (curses_is_menu(wid) || curses_is_text(wid)) {
|
||||||
if (!curses_menu_exists(wid)) {
|
if (!curses_menu_exists(wid)) {
|
||||||
panic("curses_puts: Attempted write to nonexistant window!");
|
impossible("curses_puts: Attempted write to nonexistant window %d!", wid);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
identifier = malloc(sizeof (anything));
|
identifier = malloc(sizeof (anything));
|
||||||
identifier->a_void = NULL;
|
identifier->a_void = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user