+#define GENATTR(want, attrs, fgspc, fgcol, bgspc, bgcol) \
+ { (want), (want), \
+ { ((fgspc) << TTAF_FGSPCSHIFT) | \
+ ((bgspc) << TTAF_BGSPCSHIFT) | (attrs), \
+ 0, (fgcol), (bgcol) } }
+
+#define FGBG(want, attrs, fgcol, bgcol) \
+ GENATTR(want | TTACF_FG | TTACF_BG, attrs, \
+ TTCSPC_1BPCBR, TTCOL_##fgcol, TTCSPC_1BPCBR, TTCOL_##bgcol)
+#define FG(want, attrs, fgcol) \
+ GENATTR(want | TTACF_FG, attrs, \
+ TTCSPC_1BPCBR, TTCOL_##fgcol, TTCSPC_NONE, 0)
+#define BG(want, attrs, bgcol) \
+ GENATTR(want | TTACF_BG, attrs, \
+ TTCSPC_NONE, 0, TTCSPC_1BPCBR, TTCOL_##bgcol)
+#define ATTR(want, attrs) \
+ GENATTR(want, attrs, TTCSPC_NONE, 0, TTCSPC_NONE, 0)
+
+#define BOLD (TTWT_BOLD << TTAF_WTSHIFT)
+
+static const struct tty_attrlist
+ loc_attrs[] = { FG(0, 0, CYN), TTY_ATTRLIST_CLEAR },
+ locsep_attrs[] = { FG(0, 0, BRBLU), TTY_ATTRLIST_CLEAR },
+ note_attrs[] = { FG(0, 0, YLW), TTY_ATTRLIST_CLEAR },
+ err_attrs[] = { FG(0, BOLD, MGN), TTY_ATTRLIST_CLEAR },
+ unklv_attrs[] = { FGBG(0, BOLD, BRWHT, BRRED), ATTR(0, TTAF_INVV) },
+ vfound_attrs[] = { FG(0, 0, RED), TTY_ATTRLIST_CLEAR },
+ vexpect_attrs[] = { FG(0, 0, GRN), TTY_ATTRLIST_CLEAR },
+ vunset_attrs[] = { FG(0, 0, YLW), TTY_ATTRLIST_CLEAR },
+ lose_attrs[] = { FG(0, BOLD, RED), ATTR(0, BOLD | TTAF_INVV) },
+ skip_attrs[] = { FG(0, 0, YLW), TTY_ATTRLIST_CLEAR },
+ xfail_attrs[] = { FG(0, BOLD, BLU), ATTR(0, BOLD) },
+ win_attrs[] = { FG(0, 0, GRN), TTY_ATTRLIST_CLEAR },
+ sblose_attrs[] = { FG(0, BOLD, RED), ATTR(0, BOLD) };
+
+#undef GENATTR
+#undef FGBG
+#undef FG
+#undef BG
+#undef ATTR
+#undef BOLD
+