From f3d292e111e509a4ad6e426cc0f00da0238d97c6 Mon Sep 17 00:00:00 2001 From: Doktor L Date: Sat, 30 May 2026 18:13:36 +0200 Subject: [PATCH] Combine three arguments of curses_putch into one It will need another parameter for 256-colour support. To avoid having too many arguments, put glyph colour, background colour and attributes into a struct and, since to curses library all of that is attributes that are handled by same function, call the struct "gryph attributes". curses_putch was also declared in two different headers, remove one of those declarations. --- include/wincurs.h | 8 -------- win/curses/cursmain.c | 27 +++++++++++++-------------- win/curses/curswins.c | 8 ++++---- win/curses/curswins.h | 13 +++++++++---- 4 files changed, 26 insertions(+), 30 deletions(-) diff --git a/include/wincurs.h b/include/wincurs.h index aea0e9ebf..43780e276 100644 --- a/include/wincurs.h +++ b/include/wincurs.h @@ -128,14 +128,6 @@ extern void curses_refresh_nethack_windows(void); extern void curses_del_nhwin(winid wid); extern void curses_del_wid(winid wid); extern void curs_destroy_all_wins(void); -#ifdef ENHANCED_SYMBOLS -extern void curses_putch(winid wid, int x, int y, int ch, - struct unicode_representation *u, int color, - int framecolor, int attrs); -#else -extern void curses_putch(winid wid, int x, int y, int ch, int color, - int framecolor, int attrs); -#endif extern void curses_get_window_size(winid wid, int *height, int *width); extern boolean curses_window_has_border(winid wid); extern boolean curses_window_exists(winid wid); diff --git a/win/curses/cursmain.c b/win/curses/cursmain.c index ee45eb059..3966771f6 100644 --- a/win/curses/cursmain.c +++ b/win/curses/cursmain.c @@ -7,6 +7,7 @@ #include "hack.h" #include "color.h" #include "wincurs.h" +#include "curswins.h" #ifdef CURSES_UNICODE #include #endif @@ -939,17 +940,16 @@ curses_print_glyph( { int glyph; int ch; - int color; - int framecolor; + struct glyph_attributes attr; int nhcolor = 0; unsigned int special; - int attr = -1; + attr.attribute_flags = -1; glyph = glyphinfo->glyph; special = glyphinfo->gm.glyphflags; ch = glyphinfo->ttychar; - color = glyphinfo->gm.sym.color; - framecolor = bkglyphinfo->framecolor; + attr.color = glyphinfo->gm.sym.color; + attr.framecolor = bkglyphinfo->framecolor; /* Extra color handling * FIQ: The curses library does not support truecolor, only the more limited 256 * color mode. On top of this, the windowport only supports 16 color mode. @@ -958,7 +958,7 @@ curses_print_glyph( if (glyphinfo->gm.customcolor != 0 && (curses_procs.wincap2 & WC2_EXTRACOLORS) != 0) { if ((glyphinfo->gm.customcolor & NH_BASIC_COLOR) != 0) { - color = COLORVAL(glyphinfo->gm.customcolor); + attr.color = COLORVAL(glyphinfo->gm.customcolor); #if 0 } else { /* 24-bit color, NH_BASIC_COLOR == 0 */ @@ -967,10 +967,10 @@ curses_print_glyph( } } if ((special & MG_PET) && iflags.hilite_pet) { - attr = curses_convert_attr(iflags.wc2_petattr); + attr.attribute_flags = curses_convert_attr(iflags.wc2_petattr); } if ((special & MG_DETECT) && iflags.use_inverse) { - attr = A_REVERSE; + attr.attribute_flags = A_REVERSE; } if (SYMHANDLING(H_DEC)) ch = curses_convert_glyph(ch, glyph); @@ -983,9 +983,9 @@ curses_print_glyph( */ if ((special & MG_OBJPILE) && iflags.hilite_pile) { if (iflags.wc_color) - framecolor = CLR_BLUE; + attr.framecolor = CLR_BLUE; else /* if (iflags.use_inverse) */ - attr = A_REVERSE; + attr.attribute_flags = A_REVERSE; } /* water and lava look the same except for color; when color is off (checked by core), render lava in inverse video so that it looks @@ -994,11 +994,11 @@ curses_print_glyph( if ((special & (MG_BW_LAVA | MG_BW_ICE | MG_BW_SINK | MG_BW_ENGR)) != 0 && iflags.use_inverse) { /* reset_glyphmap() only sets MG_BW_foo if color is off */ - attr = A_REVERSE; + attr.attribute_flags = A_REVERSE; } /* highlight female monsters (wizard mode option) */ if ((special & MG_FEMALE) && wizard && iflags.wizmgender) { - attr = A_REVERSE; + attr.attribute_flags = A_REVERSE; } } @@ -1008,8 +1008,7 @@ curses_print_glyph( && glyphinfo->gm.u && glyphinfo->gm.u->utf8str) ? glyphinfo->gm.u : NULL, #endif - (nhcolor != 0) ? nhcolor : color, - framecolor, attr); + &attr); } diff --git a/win/curses/curswins.c b/win/curses/curswins.c index 50f8f171c..ee28d4508 100644 --- a/win/curses/curswins.c +++ b/win/curses/curswins.c @@ -532,7 +532,7 @@ curses_putch(winid wid, int x, int y, int ch, #ifdef ENHANCED_SYMBOLS struct unicode_representation *unicode_representation, #endif - int color, int framecolor, int attr) + const struct glyph_attributes *attr) { static boolean map_initted = FALSE; int sx, sy, ex, ey; @@ -554,9 +554,9 @@ curses_putch(winid wid, int x, int y, int ch, --x; /* map column [0] is not used; draw column [1] in first screen col */ map[y][x].ch = ch; - map[y][x].color = color; - map[y][x].framecolor = framecolor; - map[y][x].attr = attr; + map[y][x].color = attr->color; + map[y][x].framecolor = attr->framecolor; + map[y][x].attr = attr->attribute_flags; #ifdef ENHANCED_SYMBOLS map[y][x].unicode_representation = unicode_representation; #endif diff --git a/win/curses/curswins.h b/win/curses/curswins.h index ebf4c9bb5..992fea55a 100644 --- a/win/curses/curswins.h +++ b/win/curses/curswins.h @@ -6,6 +6,11 @@ #ifndef CURSWIN_H # define CURSWIN_H +struct glyph_attributes { + int color; + int framecolor; + int attribute_flags; +}; /* Global declarations */ @@ -27,11 +32,11 @@ void curses_del_wid(winid wid); void curs_destroy_all_wins(void); #ifdef ENHANCED_SYMBOLS void curses_putch(winid wid, int x, int y, int ch, - struct unicode_representation *ur, int color, - int framecolor, int attrs); + struct unicode_representation *ur, + const struct glyph_attributes *attr); #else -void curses_putch(winid wid, int x, int y, int ch, int color, - int framecolor, int attrs); +void curses_putch(winid wid, int x, int y, int ch, + const struct glyph_attributes *attr); #endif void curses_get_window_xy(winid wid, int *x, int *y); boolean curses_window_has_border(winid wid);