From: Benjamin C. Wiley Sittler <bsittler@gmail.com>
Subject: Fix SGR0 processing several parameters

---
 bogl-term.c |   47 +++++++++++++++++++++++++----------------------
 bogl-term.h |    2 +-
 2 files changed, 26 insertions(+), 23 deletions(-)

--- a/bogl-term.c
+++ b/bogl-term.c
@@ -618,29 +618,32 @@ bogl_term_out (struct bogl_term *term, c
 
             if (wc == 'm')
             {                   /* setab=\E[4%p1%dm, setaf=\E[3%p1%dm */
-                if (term->arg[0] == 4 || term->arg[0] == 24)
-                    term->ul = term->arg[0] == 4;
-                else if (30 <= term->arg[0] && term->arg[0] < 38)
-                    term->fg = term->arg[0] - 30;
-                else if (40 <= term->arg[0] && term->arg[0] < 48)
-                    term->bg = term->arg[0] - 40;
-                else if (term->arg[0] == 39)
-                    term->fg = term->def_fg;
-                else if (term->arg[0] == 49)
-                    term->bg = term->def_bg;
-                else if (term->arg[0] == 7)
-                    term->rev = 1;
-                else if (term->arg[0] == 27)
-                    term->rev = 0;
-                else if (term->arg[0] == 1)
-                    term->bold = 1;
-                else if (term->arg[0] == 0)
+                for (i = 0; i < term->state; i++)
                 {
-                    term->ul = 0;
-                    term->rev = 0;
-                    term->bold = 0;
-                    term->fg = term->def_fg;
-                    term->bg = term->def_bg;
+                    if (term->arg[i] == 4 || term->arg[i] == 24)
+                        term->ul = term->arg[i] == 4;
+                    else if (30 <= term->arg[i] && term->arg[i] < 38)
+                        term->fg = term->arg[i] - 30;
+                    else if (40 <= term->arg[i] && term->arg[i] < 48)
+                        term->bg = term->arg[i] - 40;
+                    else if (term->arg[i] == 39)
+                        term->fg = term->def_fg;
+                    else if (term->arg[i] == 49)
+                        term->bg = term->def_bg;
+                    else if (term->arg[i] == 7)
+                        term->rev = 1;
+                    else if (term->arg[i] == 27)
+                        term->rev = 0;
+                    else if (term->arg[i] == 1)
+                        term->bold = 1;
+                    else if (term->arg[i] == 0)
+                    {
+                        term->ul = 0;
+                        term->rev = 0;
+                        term->bold = 0;
+                        term->fg = term->def_fg;
+                        term->bg = term->def_bg;
+                    }
                 }
 
                 term->state = 0;
--- a/bogl-term.h
+++ b/bogl-term.h
@@ -17,7 +17,7 @@ struct bogl_term {
   int state;
   int cur_visible;
   int xp, yp;
-  int arg[2];
+  int arg[11];
   mbstate_t ps;
   wchar_t *screen; /* character in cell, or 0 */
   int *screenfg, *screenbg, *screenul, *screenbd; /* colours in cell */
