login

<     >

2021-01-18 22:48:54 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

Merge pull request #11 from rdebath/patch-attribute-order

Update attribute rendering process

diff --git a/main.c b/main.c
index 8105f27..934f8dd 100644
--- a/main.c
+++ b/main.c
@@ -45,20 +45,21 @@ get_pair(Term *term, int row, int col)
         inverse = term->row == row && term->col == col ? !inverse : inverse;
     cell = term->addr[row][col];
     inverse = cell.attr & A_INVERSE ? !inverse : inverse;
+    fore = cell.pair >> 4;
+    back = cell.pair & 0xF;
+    if (cell.attr & (A_ITALIC | A_CROSSED))
+        fore = 0x2;
+    else if (cell.attr & A_UNDERLINE)
+        fore = 0x6;
+    else if (cell.attr & A_DIM)
+        fore = 0x8;
     if (inverse) {
-        fore = cell.pair & 0xF;
-        back = cell.pair >> 4;
-    } else {
-        fore = cell.pair >> 4;
-        back = cell.pair & 0xF;
+        uint8_t t;
+        t = fore; fore = back; back = t;
     }
-    if (cell.attr & (A_DIM | A_UNDERLINE))
-        fore = 0x6;
-    else if (cell.attr & (A_ITALIC | A_CROSSED))
-        fore = 0x2;
     if (cell.attr & A_BOLD)
         fore |= 0x8;
-    if (cell.attr & A_BRIGHTBG)
+    if (cell.attr & A_BLINK)
         back |= 0x8;
     if ((cell.attr & A_INVISIBLE) != 0) fore = back;
     return (fore << 4) | (back & 0xF);

diff --git a/term.c b/term.c
index 156ebab..9268278 100644
--- a/term.c
+++ b/term.c
@@ -645,6 +645,9 @@ sgr(Term *term, int n, int *params)
         case 2:
             term->attr |= A_DIM;
             break;
+        case 3:
+            term->attr |= A_ITALIC;
+            break;
         case 4:
             term->attr |= A_UNDERLINE;
             break;
@@ -673,10 +676,16 @@ sgr(Term *term, int n, int *params)
             term->mode |= M_DISPCTRL;
             break;
         case 21:
-            term->attr &= ~A_BOLD;
+#ifndef OLDLINUX
+            term->attr |= A_UNDERLINE; /* Linux say should be: DOUBLE_ULINE */
             break;
+#endif
         case 22:
             term->attr &= ~A_DIM;
+            term->attr &= ~A_BOLD;
+            break;
+        case 23:
+            term->attr &= ~A_ITALIC;
             break;
         case 24:
             term->attr &= ~A_UNDERLINE;
@@ -748,12 +757,10 @@ sgr(Term *term, int n, int *params)
             term->pair = (term->pair & 0xF0) | DEF_BACK;
             break;
         case 90: case 91: case 92: case 93: case 94: case 95: case 96: case 97:
-            term->pair = ((number - 90) << 4) | (term->pair & 0x0F);
-            term->attr |= A_BOLD;
+            term->pair = ((number - 90 + 8) << 4) | (term->pair & 0x0F);
             break;
         case 100: case 101: case 102: case 103: case 104: case 105: case 106: case 107:
-            term->pair = (term->pair & 0xF0) | (number - 100);
-            term->attr |= A_BRIGHTBG;
+            term->pair = (term->pair & 0xF0) | (number - 100 + 8);
             break;
         default:
             logfmt("UNS: SGR %d\n", number);

diff --git a/term.h b/term.h
index 1bf5384..097aeee 100644
--- a/term.h
+++ b/term.h
@@ -7,7 +7,6 @@
 #define A_INVERSE   0x20
 #define A_INVISIBLE 0x40
 #define A_CROSSED   0x80
-#define A_BRIGHTBG  A_BLINK
 
 #define M_DISPCTRL  0x0001
 #define M_INSERT    0x0002