conspy: document attribute byte format
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 24 Jun 2010 15:50:00 +0000 (17:50 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 24 Jun 2010 15:50:00 +0000 (17:50 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
miscutils/conspy.c

index 0a5fdccadd93e9c6df85f138dd6353af28cf4509..b443c9133dd670e326a06c1b2888553bbcee6abd 100644 (file)
@@ -62,7 +62,7 @@ struct globals {
        int kbd_fd;
        unsigned width;
        unsigned height;
-       char last_attr;
+       uint8_t last_attr;
        int ioerror_count;
        int key_count;
        int escape_count;
@@ -112,17 +112,43 @@ static void screen_read_close(void)
 
 static void screen_char(char *data)
 {
-       if (!BW && G.last_attr != ATTR(data)) {
-               //                            BLGCRMOW
+       uint8_t attr = ATTR(data);
+
+       if (!BW && G.last_attr != attr) {
+// Attribute layout for VGA compatible text videobuffer:
+// blinking text
+// |red bkgd
+// ||green bkgd
+// |||blue bkgd
+// vvvv
+// 00000000 <- lsb bit on the right
+//     bold text / text 8th bit
+//      red text
+//       green text
+//        blue text
+// TODO: apparently framebuffer-based console uses different layout
+// (bug? attempt to get 8th text bit in better position?)
+// red bkgd
+// |green bkgd
+// ||blue bkgd
+// vvv
+// 00000000 <- lsb bit on the right
+//    bold text
+//     red text
+//      green text
+//       blue text
+//        text 8th bit
+               // converting RGB color bit triad to BGR:
                static const char color[8] = "04261537";
 
+               G.last_attr = attr;
                printf("\033[%c;4%c;3%cm",
-                       (ATTR(data) & 8) ? '1'  // bold
-                                        : '0', // defaults
-                       color[(ATTR(data) >> 4) & 7], color[ATTR(data) & 7]);
-               G.last_attr = ATTR(data);
+                       (attr & 8) ? '1' : '0', // bold text / reset all
+                       color[(attr >> 4) & 7], // bkgd color
+                       color[attr & 7] // text color
+               );
        }
-       bb_putchar(CHAR(data));
+       putchar(CHAR(data));
 }
 
 #define clrscr()  printf("\033[1;1H" "\033[0J")