static void send_attr(uint16_t fg, uint16_t bg) { #define LAST_ATTR_INIT 0xFFFF static uint16_t lastfg = LAST_ATTR_INIT, lastbg = LAST_ATTR_INIT; if (fg != lastfg || bg != lastbg) { bytebuffer_puts(&output_buffer, funcs[T_SGR0]); uint16_t fgcol = fg & 0x0F; uint16_t bgcol = bg & 0x0F; if (fgcol != TB_DEFAULT) { if (bgcol != TB_DEFAULT) write_sgr(fgcol, bgcol); else write_sgr_fg(fgcol); } else if (bgcol != TB_DEFAULT) { write_sgr_bg(bgcol); } if (fg & TB_BOLD) bytebuffer_puts(&output_buffer, funcs[T_BOLD]); if (bg & TB_BOLD) bytebuffer_puts(&output_buffer, funcs[T_BLINK]); if (fg & TB_UNDERLINE) bytebuffer_puts(&output_buffer, funcs[T_UNDERLINE]); if ((fg & TB_REVERSE) || (bg & TB_REVERSE)) bytebuffer_puts(&output_buffer, funcs[T_REVERSE]); lastfg = fg; lastbg = bg; } }
static void send_attr(uint16_t fg, uint16_t bg) { #define LAST_ATTR_INIT 0xFFFF static uint16_t lastfg = LAST_ATTR_INIT, lastbg = LAST_ATTR_INIT; if (fg != lastfg || bg != lastbg) { bytebuffer_puts(&output_buffer, funcs[T_SGR0]); uint16_t fgcol; uint16_t bgcol; switch (outputmode) { case TB_OUTPUT_256: fgcol = fg & 0xFF; bgcol = bg & 0xFF; break; case TB_OUTPUT_216: fgcol = fg & 0xFF; if (fgcol > 215) fgcol = 7; bgcol = bg & 0xFF; if (bgcol > 215) bgcol = 0; fgcol += 0x10; bgcol += 0x10; break; case TB_OUTPUT_GRAYSCALE: fgcol = fg & 0xFF; if (fgcol > 23) fgcol = 23; bgcol = bg & 0xFF; if (bgcol > 23) bgcol = 0; fgcol += 0xe8; bgcol += 0xe8; break; case TB_OUTPUT_NORMAL: default: fgcol = fg & 0x0F; bgcol = bg & 0x0F; } if (fg & TB_BOLD) bytebuffer_puts(&output_buffer, funcs[T_BOLD]); if (bg & TB_BOLD) bytebuffer_puts(&output_buffer, funcs[T_BLINK]); if (fg & TB_UNDERLINE) bytebuffer_puts(&output_buffer, funcs[T_UNDERLINE]); if ((fg & TB_REVERSE) || (bg & TB_REVERSE)) bytebuffer_puts(&output_buffer, funcs[T_REVERSE]); write_sgr(fgcol, bgcol); lastfg = fg; lastbg = bg; } }
static void send_attr(uint16_t fg, uint16_t bg) { #define LAST_ATTR_INIT 0xFFFF static uint16_t lastfg = LAST_ATTR_INIT, lastbg = LAST_ATTR_INIT; if (fg != lastfg || bg != lastbg) { memstream_puts(&write_buffer, funcs[T_SGR0]); write_sgr(fg & 0x0F, bg & 0x0F); if (fg & TB_BOLD) memstream_puts(&write_buffer, funcs[T_BOLD]); if (bg & TB_BOLD) memstream_puts(&write_buffer, funcs[T_BLINK]); if (fg & TB_UNDERLINE) memstream_puts(&write_buffer, funcs[T_UNDERLINE]); lastfg = fg; lastbg = bg; } }