Merge branch 'win-minor' of https://rodney.nethack.org:20040/git/NHsource into win-minor

This commit is contained in:
Bart House
2018-12-02 20:23:03 -08:00
8 changed files with 145 additions and 112 deletions
+2
View File
@@ -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
-2
View File
@@ -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
View File
@@ -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;
+65 -35
View File
@@ -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
View File
@@ -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
View File
@@ -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);
} }
+5 -6
View File
@@ -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
View File
@@ -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;