- TR(TRACE_ATTRS, ("previous attribute was %s", _traceattr(previous_attr)));
-
-#if !USE_XMC_SUPPORT
- if ((SP != 0)
- && (magic_cookie_glitch > 0))
- newmode &= ~(SP->_xmc_suppress);
+ /*
+ * Limit the number of attribute bits set in the newmode according to
+ * the terminfo max_attributes value.
+ */
+ for (n = 0; n < SIZEOF(table); ++n) {
+ if ((table[n] & SP_PARM->_ok_attributes) == 0) {
+ newmode &= ~table[n];
+ } else if ((table[n] & newmode) != 0) {
+ if (used++ >= limit) {
+ newmode &= ~table[n];
+ if (newmode == retain)
+ break;
+ } else {
+ retain = newmode;
+ }
+ }
+ }
+#else
+ newmode &= ~(SP_PARM->_xmc_suppress);