Using ^P right after resize or 'O' of align_message, align_status, statuslines, or windowborders would result in 'curses_display_nhmenu: attempt to display empty menu' because some memory cleanup I added several weeks back was being executed when the curses interface tore down and recreated its internal windows. This fixes ^P handling by making sure that that menu (which is just text but uses a menu to support '>'/'<'/'^'/'|' scrolling) will never be empty and it also fixes the window deletion to not throw away message history until it's final deletion at exit time. ^P uses a popup window to display previous messages and it was never deleting that window, just creating a new one each time. Same with the routine which displays an external help file. Using either or combination of both close to 5000 times would probably make internal window creation get stuck in an infinite loop. Delete those windows after they're used so it'll never be put to the test. The memory cleanup I added for map/status/messages/invent was only being preformed at end of game, not when saving. Fix that too.
25 lines
1.1 KiB
C
25 lines
1.1 KiB
C
/* vim:set cin ft=c sw=4 sts=4 ts=8 et ai cino=Ls\:0t0(0 : -*- mode:c;fill-column:80;tab-width:8;c-basic-offset:4;indent-tabs-mode:nil;c-file-style:"k&r" -*-*/
|
|
/* NetHack 3.6 cursdial.h */
|
|
/* Copyright (c) Karl Garrison, 2010. */
|
|
/* NetHack may be freely redistributed. See license for details. */
|
|
|
|
#ifndef CURSDIAL_H
|
|
# define CURSDIAL_H
|
|
|
|
/* Global declarations */
|
|
|
|
void curses_line_input_dialog(const char *prompt, char *answer, int buffer);
|
|
int curses_character_input_dialog(const char *prompt, const char *choices,
|
|
CHAR_P def);
|
|
int curses_ext_cmd(void);
|
|
void curses_create_nhmenu(winid wid);
|
|
void curses_add_nhmenu_item(winid wid, int glyph, const ANY_P *identifier,
|
|
CHAR_P accelerator, CHAR_P group_accel, int attr,
|
|
const char *str, BOOLEAN_P presel);
|
|
void curses_finalize_nhmenu(winid wid, const char *prompt);
|
|
int curses_display_nhmenu(winid wid, int how, MENU_ITEM_P **_selected);
|
|
boolean curses_menu_exists(winid wid);
|
|
void curses_del_menu(winid, boolean);
|
|
|
|
#endif /* CURSDIAL_H */
|