From 0dfe92ac61566a0f1c2e5d40e071d08db650c6dd Mon Sep 17 00:00:00 2001 From: nhmall Date: Mon, 29 Jan 2024 08:40:05 -0500 Subject: [PATCH] more italic support There might be some follow-ups to this. --- doc/window.txt | 34 +++++++++++----- include/botl.h | 39 +++++++++++------- src/botl.c | 93 +++++++++++++++++++++++-------------------- src/options.c | 29 ++++++++------ sys/libnh/libnhmain.c | 9 +++-- win/X11/winstat.c | 13 +++--- win/curses/cursstat.c | 27 +++++++------ win/tty/wintty.c | 33 +++++++++------ win/win32/mswproc.c | 9 +++-- 9 files changed, 169 insertions(+), 117 deletions(-) diff --git a/doc/window.txt b/doc/window.txt index d6f8fddac..ac9d8b67d 100644 --- a/doc/window.txt +++ b/doc/window.txt @@ -124,10 +124,13 @@ putstr(window, attr, str) Multiple putstr()s are output on separate lines. Attributes can be one of ATR_NONE (or 0) - ATR_ULINE ATR_BOLD + ATR_DIM + ATR_ITALIC + ATR_ULINE ATR_BLINK ATR_INVERSE + If a window-port does not support all of these, it may map unsupported attributes to a supported one (e.g. map them all to ATR_INVERSE). putstr() may compress spaces out of @@ -158,10 +161,13 @@ putmixed(window, attr, str) Multiple putmixed()s are output on separate lines. Attributes can be one of ATR_NONE (or 0) - ATR_ULINE ATR_BOLD + ATR_DIM + ATR_ITALIC + ATR_ULINE ATR_BLINK ATR_INVERSE + If a window-port does not support all of these, it may map unsupported attributes to a supported one (e.g. map them all to ATR_INVERSE). putmixed() may compress spaces out of @@ -374,10 +380,13 @@ add_menu(windid window, glyphinfo, const anything identifier, char accelerator, with the default object class symbols. -- attr attributes can be one of ATR_NONE (or 0) - ATR_ULINE ATR_BOLD + ATR_DIM + ATR_ITALIC + ATR_ULINE ATR_BLINK ATR_INVERSE + If a window-port does not support all of these, it may map unsupported attributes to a supported one (e.g. map them all to ATR_INVERSE). @@ -575,17 +584,24 @@ status_update(int fldindex, genericptr_t ptr, int chg, int percentage, \ +------+----------------------+--------------------+ | 15 | CLR_WHITE | | +------+----------------------+--------------------+ - | 16 | HL_ATTCLR_DIM | | CLR_MAX + | 16 | HL_ATTCLR_UNDEF | | CLR_MAX +------+----------------------+--------------------+ - | 17 | HL_ATTCLR_BLINK | | + | 17 | HL_ATTCLR_NONE | | CLR_MAX + 1 +------+----------------------+--------------------+ - | 18 | HL_ATTCLR_ULINE | | + | 18 | HL_ATTCLR_BOLD | | CLR_MAX + 2 +------+----------------------+--------------------+ - | 19 | HL_ATTCLR_INVERSE | 00010110 | + | 19 | HL_ATTCLR_DIM | | CLR_MAX + 3 +------+----------------------+--------------------+ - | 20 | HL_ATTCLR_BOLD | | + | 20 | HL_ATTCLR_ITALIC | | CLR_MAX + 4 +------+----------------------+--------------------+ - | 21 | beyond array boundary| | BL_ATTCLR_MAX + | 21 | HL_ATTCLR_ULINE | | CLR_MAX + 5 + +------+----------------------+--------------------+ + | 22 | HL_ATTCLR_BLINK | | CLR_MAX + 6 + +------+----------------------+--------------------+ + | 23 | HL_ATTCLR_INVERSE | | CLR_MAX + 7 + +------+----------------------+--------------------+ + | 24 | beyond array boundary| | BL_ATTCLR_MAX + The window port can AND (&) the bits passed in the ptr argument to status_update() with any non-zero diff --git a/include/botl.h b/include/botl.h index 5fac5773a..bf97d8796 100644 --- a/include/botl.h +++ b/include/botl.h @@ -201,10 +201,18 @@ extern int cond_idx[CONDITION_COUNT]; /* #ifdef STATUS_HILITES */ /* hilite status field behavior - coloridx values */ -#define BL_HILITE_NONE -1 /* no hilite of this field */ -#define BL_HILITE_INVERSE -2 /* inverse hilite */ -#define BL_HILITE_BOLD -3 /* bold hilite */ - /* or any CLR_ index (0 - 15) */ +#define BL_HILITE_NONE -1 /* no hilite of this field */ + +#if 0 +#define BL_HILITE_BOLD -2 /* bold hilite */ +#define BL_HILITE_DIM -3 /* dim hilite */ +#define BL_HILITE_ITALIC -4 /* italic hilite */ +#define BL_HILITE_ULINE -5 /* underline hilite */ +#define BL_HILITE_BLINK -6 /* blink hilite */ +#define BL_HILITE_INVERSE -7 /* inverse hilite */ + /* or any CLR_ index (0 - 15) */ +#endif + #define BL_TH_NONE 0 #define BL_TH_VAL_PERCENTAGE 100 /* threshold is percentage */ #define BL_TH_VAL_ABSOLUTE 101 /* threshold is particular value */ @@ -214,21 +222,24 @@ extern int cond_idx[CONDITION_COUNT]; #define BL_TH_ALWAYS_HILITE 105 /* highlight regardless of value */ #define BL_TH_CRITICALHP 106 /* highlight critically low HP */ -#define HL_ATTCLR_DIM CLR_MAX + 0 -#define HL_ATTCLR_BLINK CLR_MAX + 1 -#define HL_ATTCLR_ULINE CLR_MAX + 2 -#define HL_ATTCLR_INVERSE CLR_MAX + 3 -#define HL_ATTCLR_BOLD CLR_MAX + 4 -#define BL_ATTCLR_MAX CLR_MAX + 5 +#define HL_ATTCLR_NONE CLR_MAX + 1 +#define HL_ATTCLR_BOLD CLR_MAX + 2 +#define HL_ATTCLR_DIM CLR_MAX + 3 +#define HL_ATTCLR_ITALIC CLR_MAX + 4 +#define HL_ATTCLR_ULINE CLR_MAX + 5 +#define HL_ATTCLR_BLINK CLR_MAX + 6 +#define HL_ATTCLR_INVERSE CLR_MAX + 7 +#define BL_ATTCLR_MAX CLR_MAX + 8 enum hlattribs { HL_UNDEF = 0x00, HL_NONE = 0x01, HL_BOLD = 0x02, - HL_INVERSE = 0x04, - HL_ULINE = 0x08, - HL_BLINK = 0x10, - HL_DIM = 0x20 + HL_DIM = 0x04, + HL_ITALIC = 0x08, + HL_ULINE = 0x10, + HL_BLINK = 0x20, + HL_INVERSE = 0x40 }; #define MAXVALWIDTH 80 /* actually less, but was using 80 to allocate title diff --git a/src/botl.c b/src/botl.c index a318e1c2a..04ed9c27f 100644 --- a/src/botl.c +++ b/src/botl.c @@ -2734,16 +2734,18 @@ parse_status_hl2(char (*s)[QBUFSZ], boolean from_configfile) for (i = 0; i < sf; ++i) { int a = match_str2attr(subfields[i], FALSE); - if (a == ATR_DIM) + if (a == ATR_BOLD) + disp_attrib |= HL_BOLD; + else if (a == ATR_DIM) disp_attrib |= HL_DIM; - else if (a == ATR_BLINK) - disp_attrib |= HL_BLINK; + else if (a == ATR_ITALIC) + disp_attrib |= HL_ITALIC; else if (a == ATR_ULINE) disp_attrib |= HL_ULINE; + else if (a == ATR_BLINK) + disp_attrib |= HL_BLINK; else if (a == ATR_INVERSE) disp_attrib |= HL_INVERSE; - else if (a == ATR_BOLD) - disp_attrib |= HL_BOLD; else if (a == ATR_NONE) disp_attrib = HL_NONE; else { @@ -2967,7 +2969,7 @@ parse_condition(char (*s)[QBUFSZ], int sidx) * bitmasks indexed by the color chosen * (0 to (CLR_MAX - 1)) * and/or attributes chosen - * (HL_ATTCLR_DIM to (BL_ATTCLR_MAX - 1)) + * (HL_ATTCLR_NONE to (BL_ATTCLR_MAX - 1)) * We still have to parse the colors and attributes out. */ @@ -2993,34 +2995,31 @@ parse_condition(char (*s)[QBUFSZ], int sidx) * We have the following additional array offsets to * use for storing the attributes beyond the end of * the color indexes, all of which are less than CLR_MAX. - * HL_ATTCLR_DIM = CLR_MAX - * HL_ATTCLR_BLINK = CLR_MAX + 1 - * HL_ATTCLR_ULINE = CLR_MAX + 2 - * HL_ATTCLR_INVERSE = CLR_MAX + 3 - * HL_ATTCLR_BOLD = CLR_MAX + 4 - * HL_ATTCLR_MAX = CLR_MAX + 5 (this is past array boundary) * */ for (i = 0; i < sf; ++i) { int a = match_str2attr(subfields[i], FALSE); - if (a == ATR_DIM) + if (a == ATR_BOLD) + gc.cond_hilites[HL_ATTCLR_BOLD] |= conditions_bitmask; + else if (a == ATR_DIM) gc.cond_hilites[HL_ATTCLR_DIM] |= conditions_bitmask; - else if (a == ATR_BLINK) - gc.cond_hilites[HL_ATTCLR_BLINK] |= conditions_bitmask; + else if (a == ATR_ITALIC) + gc.cond_hilites[HL_ATTCLR_ITALIC] |= conditions_bitmask; else if (a == ATR_ULINE) gc.cond_hilites[HL_ATTCLR_ULINE] |= conditions_bitmask; + else if (a == ATR_BLINK) + gc.cond_hilites[HL_ATTCLR_BLINK] |= conditions_bitmask; else if (a == ATR_INVERSE) gc.cond_hilites[HL_ATTCLR_INVERSE] |= conditions_bitmask; - else if (a == ATR_BOLD) - gc.cond_hilites[HL_ATTCLR_BOLD] |= conditions_bitmask; else if (a == ATR_NONE) { - gc.cond_hilites[HL_ATTCLR_DIM] &= ~conditions_bitmask; - gc.cond_hilites[HL_ATTCLR_BLINK] &= ~conditions_bitmask; - gc.cond_hilites[HL_ATTCLR_ULINE] &= ~conditions_bitmask; - gc.cond_hilites[HL_ATTCLR_INVERSE] &= ~conditions_bitmask; gc.cond_hilites[HL_ATTCLR_BOLD] &= ~conditions_bitmask; + gc.cond_hilites[HL_ATTCLR_DIM] &= ~conditions_bitmask; + gc.cond_hilites[HL_ATTCLR_ITALIC] &= ~conditions_bitmask; + gc.cond_hilites[HL_ATTCLR_ULINE] &= ~conditions_bitmask; + gc.cond_hilites[HL_ATTCLR_BLINK] &= ~conditions_bitmask; + gc.cond_hilites[HL_ATTCLR_INVERSE] &= ~conditions_bitmask; } else { int k = match_str2clr(subfields[i]); @@ -3075,14 +3074,16 @@ hlattr2attrname(int attrib, char *buf, size_t bufsz) if (attrib & HL_BOLD) Strcat(attbuf, first++ ? "+bold" : "bold"); - if (attrib & HL_INVERSE) - Strcat(attbuf, first++ ? "+inverse" : "inverse"); + if (attrib & HL_DIM) + Strcat(attbuf, first++ ? "+dim" : "dim"); + if (attrib & HL_ITALIC) + Strcat(attbuf, first++ ? "+italic" : "italic"); if (attrib & HL_ULINE) Strcat(attbuf, first++ ? "+underline" : "underline"); if (attrib & HL_BLINK) Strcat(attbuf, first++ ? "+blink" : "blink"); - if (attrib & HL_DIM) - Strcat(attbuf, first++ ? "+dim" : "dim"); + if (attrib & HL_INVERSE) + Strcat(attbuf, first++ ? "+inverse" : "inverse"); k = strlen(attbuf); if (k < (size_t)(bufsz - 1)) @@ -3198,14 +3199,16 @@ status_hilite_linestr_gather_conditions(void) clr = j; break; } - if (gc.cond_hilites[HL_ATTCLR_DIM] & conditions[i].mask) - atr |= HL_DIM; if (gc.cond_hilites[HL_ATTCLR_BOLD] & conditions[i].mask) atr |= HL_BOLD; - if (gc.cond_hilites[HL_ATTCLR_BLINK] & conditions[i].mask) - atr |= HL_BLINK; + if (gc.cond_hilites[HL_ATTCLR_DIM] & conditions[i].mask) + atr |= HL_DIM; + if (gc.cond_hilites[HL_ATTCLR_ITALIC] & conditions[i].mask) + atr |= HL_ITALIC; if (gc.cond_hilites[HL_ATTCLR_ULINE] & conditions[i].mask) atr |= HL_ULINE; + if (gc.cond_hilites[HL_ATTCLR_BLINK] & conditions[i].mask) + atr |= HL_BLINK; if (gc.cond_hilites[HL_ATTCLR_INVERSE] & conditions[i].mask) atr |= HL_INVERSE; if (atr != HL_NONE) @@ -3931,22 +3934,25 @@ status_hilite_menu_add(int origfld) char attrbuf[BUFSZ]; char *tmpattr; - if (atr & HL_DIM) - gc.cond_hilites[HL_ATTCLR_DIM] |= cond; - if (atr & HL_BLINK) - gc.cond_hilites[HL_ATTCLR_BLINK] |= cond; - if (atr & HL_ULINE) - gc.cond_hilites[HL_ATTCLR_ULINE] |= cond; - if (atr & HL_INVERSE) - gc.cond_hilites[HL_ATTCLR_INVERSE] |= cond; if (atr & HL_BOLD) gc.cond_hilites[HL_ATTCLR_BOLD] |= cond; + if (atr & HL_DIM) + gc.cond_hilites[HL_ATTCLR_DIM] |= cond; + if (atr & HL_ITALIC) + gc.cond_hilites[HL_ATTCLR_ITALIC] |= cond; + if (atr & HL_ULINE) + gc.cond_hilites[HL_ATTCLR_ULINE] |= cond; + if (atr & HL_BLINK) + gc.cond_hilites[HL_ATTCLR_BLINK] |= cond; + if (atr & HL_INVERSE) + gc.cond_hilites[HL_ATTCLR_INVERSE] |= cond; if (atr == HL_NONE) { - gc.cond_hilites[HL_ATTCLR_DIM] &= ~cond; - gc.cond_hilites[HL_ATTCLR_BLINK] &= ~cond; - gc.cond_hilites[HL_ATTCLR_ULINE] &= ~cond; - gc.cond_hilites[HL_ATTCLR_INVERSE] &= ~cond; gc.cond_hilites[HL_ATTCLR_BOLD] &= ~cond; + gc.cond_hilites[HL_ATTCLR_DIM] &= ~cond; + gc.cond_hilites[HL_ATTCLR_ITALIC] &= ~cond; + gc.cond_hilites[HL_ATTCLR_ULINE] &= ~cond; + gc.cond_hilites[HL_ATTCLR_BLINK] &= ~cond; + gc.cond_hilites[HL_ATTCLR_INVERSE] &= ~cond; } gc.cond_hilites[clr] |= cond; (void) strNsubst(strcpy(clrbuf, clr2colorname(clr)), " ", "-", 0); @@ -3999,10 +4005,11 @@ status_hilite_remove(int id) for (i = 0; i < CLR_MAX; i++) gc.cond_hilites[i] &= ~hlstr->mask; - gc.cond_hilites[HL_ATTCLR_DIM] &= ~hlstr->mask; gc.cond_hilites[HL_ATTCLR_BOLD] &= ~hlstr->mask; - gc.cond_hilites[HL_ATTCLR_BLINK] &= ~hlstr->mask; + gc.cond_hilites[HL_ATTCLR_DIM] &= ~hlstr->mask; + gc.cond_hilites[HL_ATTCLR_ITALIC] &= ~hlstr->mask; gc.cond_hilites[HL_ATTCLR_ULINE] &= ~hlstr->mask; + gc.cond_hilites[HL_ATTCLR_BLINK] &= ~hlstr->mask; gc.cond_hilites[HL_ATTCLR_INVERSE] &= ~hlstr->mask; return TRUE; } else { diff --git a/src/options.c b/src/options.c index f9513f668..a5255c365 100644 --- a/src/options.c +++ b/src/options.c @@ -7476,23 +7476,26 @@ query_attr(const char *prompt, int dflt_attr) j = picks[i].item.a_int - 1; if (attrnames[j].attr != ATR_NONE || pick_cnt == 1) { switch (attrnames[j].attr) { - case ATR_DIM: - k |= HL_DIM; - break; - case ATR_BLINK: - k |= HL_BLINK; - break; - case ATR_ULINE: - k |= HL_ULINE; - break; - case ATR_INVERSE: - k |= HL_INVERSE; + case ATR_NONE: + k = HL_NONE; break; case ATR_BOLD: k |= HL_BOLD; break; - case ATR_NONE: - k = HL_NONE; + case ATR_DIM: + k |= HL_DIM; + break; + case ATR_ITALIC: + k |= HL_ITALIC; + break; + case ATR_ULINE: + k |= HL_ULINE; + break; + case ATR_BLINK: + k |= HL_BLINK; + break; + case ATR_INVERSE: + k |= HL_INVERSE; break; } } diff --git a/sys/libnh/libnhmain.c b/sys/libnh/libnhmain.c index 7d9ddf3e1..f46c88d48 100644 --- a/sys/libnh/libnhmain.c +++ b/sys/libnh/libnhmain.c @@ -1035,11 +1035,12 @@ void js_constants_init() { SET_CONSTANT("COLORS", CLR_MAX); // color attributes (?) - SET_CONSTANT("COLOR_ATTR", HL_ATTCLR_DIM); - SET_CONSTANT("COLOR_ATTR", HL_ATTCLR_BLINK); - SET_CONSTANT("COLOR_ATTR", HL_ATTCLR_ULINE); - SET_CONSTANT("COLOR_ATTR", HL_ATTCLR_INVERSE); SET_CONSTANT("COLOR_ATTR", HL_ATTCLR_BOLD); + SET_CONSTANT("COLOR_ATTR", HL_ATTCLR_DIM); + SET_CONSTANT("COLOR_ATTR", HL_ATTCLR_ITALIC); + SET_CONSTANT("COLOR_ATTR", HL_ATTCLR_ULINE); + SET_CONSTANT("COLOR_ATTR", HL_ATTCLR_BLINK); + SET_CONSTANT("COLOR_ATTR", HL_ATTCLR_INVERSE); SET_CONSTANT("COLOR_ATTR", BL_ATTCLR_MAX); } diff --git a/win/X11/winstat.c b/win/X11/winstat.c index 9e4f2b8c7..2f03e7048 100644 --- a/win/X11/winstat.c +++ b/win/X11/winstat.c @@ -220,21 +220,24 @@ condattr(long bm, unsigned long *bmarray) for (i = HL_ATTCLR_DIM; i < BL_ATTCLR_MAX; ++i) { if (bmarray[i] && (bm & bmarray[i])) { switch(i) { + case HL_ATTCLR_BOLD: + attr |= HL_BOLD; + break; case HL_ATTCLR_DIM: attr |= HL_DIM; break; - case HL_ATTCLR_BLINK: - attr |= HL_BLINK; + case HL_ATTCLR_ITALIC: + attr |= HL_ITALIC; break; case HL_ATTCLR_ULINE: attr |= HL_ULINE; break; + case HL_ATTCLR_BLINK: + attr |= HL_BLINK; + break; case HL_ATTCLR_INVERSE: attr |= HL_INVERSE; break; - case HL_ATTCLR_BOLD: - attr |= HL_BOLD; - break; } } } diff --git a/win/curses/cursstat.c b/win/curses/cursstat.c index fbfc2a7a9..96d38ba6a 100644 --- a/win/curses/cursstat.c +++ b/win/curses/cursstat.c @@ -1273,24 +1273,25 @@ condattr(long bm, unsigned long *bmarray) if (bm && bmarray) { for (i = HL_ATTCLR_DIM; i < BL_ATTCLR_MAX; ++i) { if ((bmarray[i] & bm) != 0) { - switch (i) { + switch(i) { + case HL_ATTCLR_BOLD: + attr |= HL_BOLD; + break; case HL_ATTCLR_DIM: attr |= HL_DIM; break; - case HL_ATTCLR_BLINK: - attr |= HL_BLINK; + case HL_ATTCLR_ITALIC: + attr |= HL_ITALIC; break; case HL_ATTCLR_ULINE: attr |= HL_ULINE; break; + case HL_ATTCLR_BLINK: + attr |= HL_BLINK; + break; case HL_ATTCLR_INVERSE: attr |= HL_INVERSE; break; - case HL_ATTCLR_BOLD: - attr |= HL_BOLD; - break; - default: - break; } } } @@ -1306,14 +1307,16 @@ nhattr2curses(int attrmask) if (attrmask & HL_BOLD) result |= A_BOLD; - if (attrmask & HL_INVERSE) - result |= A_REVERSE; + if (attrmask & HL_DIM) + result |= A_DIM; + if (attrmask & HL_ITALIC) + result |= A_ITALIC; if (attrmask & HL_ULINE) result |= A_UNDERLINE; if (attrmask & HL_BLINK) result |= A_BLINK; - if (attrmask & HL_DIM) - result |= A_DIM; + if (attrmask & HL_INVERSE) + result |= A_REVERSE; return result; } diff --git a/win/tty/wintty.c b/win/tty/wintty.c index 259627f17..5015d22ba 100644 --- a/win/tty/wintty.c +++ b/win/tty/wintty.c @@ -4824,21 +4824,24 @@ condattr(long bm, unsigned long *bmarray) for (i = HL_ATTCLR_DIM; i < BL_ATTCLR_MAX; ++i) { if ((bm & bmarray[i]) != 0) { switch (i) { + case HL_ATTCLR_BOLD: + attr |= HL_BOLD; + break; case HL_ATTCLR_DIM: attr |= HL_DIM; break; - case HL_ATTCLR_BLINK: - attr |= HL_BLINK; + case HL_ATTCLR_ITALIC: + attr |= HL_ITALIC; break; case HL_ATTCLR_ULINE: attr |= HL_ULINE; break; + case HL_ATTCLR_BLINK: + attr |= HL_BLINK; + break; case HL_ATTCLR_INVERSE: attr |= HL_INVERSE; break; - case HL_ATTCLR_BOLD: - attr |= HL_BOLD; - break; } } } @@ -4851,28 +4854,32 @@ condattr(long bm, unsigned long *bmarray) if (m) { \ if ((m) & HL_BOLD) \ term_start_attr(ATR_BOLD); \ - if ((m) & HL_INVERSE) \ - term_start_attr(ATR_INVERSE); \ + if ((m) & HL_DIM) \ + term_start_attr(ATR_DIM); \ + if ((m) & HL_ITALIC) \ + term_start_attr(ATR_ITALIC); \ if ((m) & HL_ULINE) \ term_start_attr(ATR_ULINE); \ if ((m) & HL_BLINK) \ term_start_attr(ATR_BLINK); \ - if ((m) & HL_DIM) \ - term_start_attr(ATR_DIM); \ + if ((m) & HL_INVERSE) \ + term_start_attr(ATR_INVERSE); \ } \ } while (0) #define End_Attr(m) \ do { \ if (m) { \ - if ((m) & HL_DIM) \ - term_end_attr(ATR_DIM); \ + if ((m) & HL_INVERSE) \ + term_end_attr(ATR_INVERSE); \ if ((m) & HL_BLINK) \ term_end_attr(ATR_BLINK); \ if ((m) & HL_ULINE) \ term_end_attr(ATR_ULINE); \ - if ((m) & HL_INVERSE) \ - term_end_attr(ATR_INVERSE); \ + if ((m) & HL_ITALIC) \ + term_end_attr(ATR_ITALIC); \ + if ((m) & HL_DIM) \ + term_end_attr(ATR_DIM); \ if ((m) & HL_BOLD) \ term_end_attr(ATR_BOLD); \ } \ diff --git a/win/win32/mswproc.c b/win/win32/mswproc.c index 2dd72781d..70d2af602 100644 --- a/win/win32/mswproc.c +++ b/win/win32/mswproc.c @@ -3068,11 +3068,12 @@ static int mswin_condattr(long bm, unsigned long *bmarray) { if (bm && bmarray) { - if (bm & bmarray[HL_ATTCLR_DIM]) return HL_DIM; - if (bm & bmarray[HL_ATTCLR_BLINK]) return HL_BLINK; - if (bm & bmarray[HL_ATTCLR_ULINE]) return HL_ULINE; + if (bm & bmarray[HL_ATTCLR_BOLD]) return HL_BOLD; + if (bm & bmarray[HL_ATTCLR_DIM]) return HL_DIM; + if (bm & bmarray[HL_ATTCLR_ITALIC]) return HL_ITALIC; + if (bm & bmarray[HL_ATTCLR_ULINE]) return HL_ULINE; + if (bm & bmarray[HL_ATTCLR_BLINK]) return HL_BLINK; if (bm & bmarray[HL_ATTCLR_INVERSE]) return HL_INVERSE; - if (bm & bmarray[HL_ATTCLR_BOLD]) return HL_BOLD; } return HL_NONE;