handling of {DEC,IBM,MAC}graphics options
Fix the problems From a bug report. So having
OPTIONS=IBMgraphcs
OPTIONS=noDECgraphics
would yield an ASCII display instead of showing IBMgraphics, but IBMgraphics
flag in the Options list would falsely show as on. Manually toggling it off
put things back into sync.
Avoiding the false setting is completely trivial. And fixing the
inappropriate override turns out to be easy too, unless I've bungled this.
One thing it does not do is try to warn about attempts to set conflicting
options like
OPTIONS=IBMgraphcs
OPTIONS=DECgraphics
Fixing that seems to be too messy to bother with, particularly since the
game runs ok (leaving the setting handled last in place).
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* SCCS Id: @(#)drawing.c 3.5 1999/12/02 */
|
||||
/* SCCS Id: @(#)drawing.c 3.5 2005/09/23 */
|
||||
/* Copyright (c) NetHack Development Team 1992. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -655,6 +655,16 @@ void
|
||||
switch_graphics(gr_set_flag)
|
||||
int gr_set_flag;
|
||||
{
|
||||
/* We're either toggling back to ASCII, in which case it is
|
||||
appropriate to negate all the other alternatives, or we're in
|
||||
the process of toggling one of those other ones on, in which
|
||||
case it will be set accurately below. */
|
||||
iflags.IBMgraphics = FALSE;
|
||||
iflags.DECgraphics = FALSE;
|
||||
#ifdef MAC_GRAPHICS_ENV
|
||||
iflags.MACgraphics = FALSE;
|
||||
#endif
|
||||
|
||||
switch (gr_set_flag) {
|
||||
default:
|
||||
case ASCII_GRAPHICS:
|
||||
@@ -673,7 +683,6 @@ int gr_set_flag;
|
||||
* set the codepage to 437.
|
||||
*/
|
||||
iflags.IBMgraphics = TRUE;
|
||||
iflags.DECgraphics = FALSE;
|
||||
assign_graphics(ibm_graphics, SIZE(ibm_graphics), MAXPCHARS, 0);
|
||||
#ifdef PC9800
|
||||
if (ibmgraphics_mode_callback) (*ibmgraphics_mode_callback)();
|
||||
@@ -686,13 +695,13 @@ int gr_set_flag;
|
||||
* Use the VT100 line drawing character set.
|
||||
*/
|
||||
iflags.DECgraphics = TRUE;
|
||||
iflags.IBMgraphics = FALSE;
|
||||
assign_graphics(dec_graphics, SIZE(dec_graphics), MAXPCHARS, 0);
|
||||
if (decgraphics_mode_callback) (*decgraphics_mode_callback)();
|
||||
break;
|
||||
#endif /* TERMLIB */
|
||||
#ifdef MAC_GRAPHICS_ENV
|
||||
case MAC_GRAPHICS:
|
||||
iflags.MACgraphics = TRUE;
|
||||
assign_graphics(mac_graphics, SIZE(mac_graphics), MAXPCHARS, 0);
|
||||
break;
|
||||
#endif
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* SCCS Id: @(#)options.c 3.5 2005/05/14 */
|
||||
/* SCCS Id: @(#)options.c 3.5 2005/09/23 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -2309,6 +2309,8 @@ goodfruit:
|
||||
* options list
|
||||
*/
|
||||
for (i = 0; boolopt[i].name; i++) {
|
||||
boolean was_set;
|
||||
|
||||
if (match_optname(opts, boolopt[i].name, 3, FALSE)) {
|
||||
/* options that don't exist */
|
||||
if (!boolopt[i].addr) {
|
||||
@@ -2323,6 +2325,7 @@ goodfruit:
|
||||
return;
|
||||
}
|
||||
|
||||
was_set = *(boolopt[i].addr);
|
||||
*(boolopt[i].addr) = !negated;
|
||||
|
||||
/* 0 means boolean opts */
|
||||
@@ -2347,19 +2350,25 @@ goodfruit:
|
||||
# endif
|
||||
need_redraw = TRUE;
|
||||
# ifdef TERMLIB
|
||||
if ((boolopt[i].addr) == &iflags.DECgraphics)
|
||||
switch_graphics(iflags.DECgraphics ?
|
||||
if ((boolopt[i].addr) == &iflags.DECgraphics) {
|
||||
if (iflags.DECgraphics != was_set)
|
||||
switch_graphics(iflags.DECgraphics ?
|
||||
DEC_GRAPHICS : ASCII_GRAPHICS);
|
||||
}
|
||||
# endif
|
||||
# ifdef ASCIIGRAPH
|
||||
if ((boolopt[i].addr) == &iflags.IBMgraphics)
|
||||
switch_graphics(iflags.IBMgraphics ?
|
||||
if ((boolopt[i].addr) == &iflags.IBMgraphics) {
|
||||
if (iflags.IBMgraphics != was_set)
|
||||
switch_graphics(!negated ?
|
||||
IBM_GRAPHICS : ASCII_GRAPHICS);
|
||||
}
|
||||
# endif
|
||||
# ifdef MAC_GRAPHICS_ENV
|
||||
if ((boolopt[i].addr) == &iflags.MACgraphics)
|
||||
switch_graphics(iflags.MACgraphics ?
|
||||
if ((boolopt[i].addr) == &iflags.MACgraphics) {
|
||||
if (iflags.MACgraphics != was_set)
|
||||
switch_graphics(iflags.MACgraphics ?
|
||||
MAC_GRAPHICS : ASCII_GRAPHICS);
|
||||
}
|
||||
# endif
|
||||
# ifdef REINCARNATION
|
||||
if (!initial && Is_rogue_level(&u.uz))
|
||||
|
||||
Reference in New Issue
Block a user