+static void
+process_opt_attr (const char *p)
+{
+ while (*p)
+ {
+ const char *s;
+ if (!isalnum (*p))
+ vfprintf_fail (formats[FMT_GENERIC], "--attr switch must be provided a string");
+ s = p;
+ while (isalnum (*p))
+ p++;
+ if (*p != '\0' && *p != ',')
+ vfprintf_fail (formats[FMT_GENERIC], "--attr switch must have strings separated by ,");
+ else
+ {
+ /* If atttributes are added to this "list", also increase MAX_ATTRIBUTE_CHARS! */
+ if (p - s == 4 && strneq (s, "bold", 4))
+ write_attr (1);
+ else if (p - s == 10 && strneq (s, "underscore", 10))
+ write_attr (4);
+ else if (p - s == 5 && strneq (s, "blink", 5))
+ write_attr (5);
+ else if (p - s == 7 && strneq (s, "reverse", 7))
+ write_attr (7);
+ else if (p - s == 9 && strneq (s, "concealed", 9))
+ write_attr (8);
+ else
+ vfprintf_fail (formats[FMT_GENERIC], "--attr switch must be provided valid attribute names");
+ }
+ if (*p)
+ p++;
+ }
+}
+
+static void
+write_attr (unsigned int val)
+{
+ snprintf (attr + strlen (attr), 3, "%u;", val);
+}
+