Tuesday, July 15, 2003
Gray is Light Black
To clarify what I said earlier about PC/DOS colors: Colors are specified in terms of red, green, blue and also something called "intensity". Each of these elements is represented by one bit. Intensity is the high-order bit. These four bits can conveniently be represented by a single hex digit, which is what the "color" command does. The following table is the same one I posted earlier, but also shows the binary IRGB values.
It should now be apparent that the only difference between "gray" (binary 1000) and "black" (binary 0000) is that gray has the intensity bit set.
(Note also that the names shown in the table are taken straight from the Win2K help system. If you type "color /?" those are the names you get. Why they choose to use "aqua" and "purple" for the colors that everybody's been called "cyan" and "magenta" for years is beyond me. I also take issue with what they chose to call "yellow" and "white".)
This also helps explain why DOS wouldn't let you use "light" or "intense" background colors in text modes. The foreground and background colors were packed into a single 8-bit byte. Now, this seems like it would've been fine, since each color is 4 bits. But they also wanted to be able to make the text blink. In order to make room for a "blink" bit, the background color has no intensity bit. Thankfully, the NT "color" command does not support blinking, so we get the full 16 background colors.
Finally, in monochrome mode, the "color" bits were used to control things like reversed and underlined text. There was not actually support for underlining in color text modes, so technically I'm cheating by using underlined links on the menu here.
binary | decimal | hex | name | real RGB | websafe | ||
0000 | 0 | 0 | Black | 000000 | 000000 | ||
0001 | 1 | 1 | Blue | 000080 | 000099 | ||
0010 | 2 | 2 | Green | 008000 | 009900 | ||
0011 | 3 | 3 | Aqua | 008080 | 009999 | ||
0100 | 4 | 4 | Red | 800000 | 990000 | ||
0101 | 5 | 5 | Purple | 800080 | 990099 | ||
0110 | 6 | 6 | Yellow | 808000 | 999900 | ||
0111 | 7 | 7 | White | c0c0c0 | cccccc | ||
1000 | 8 | 8 | Gray | 808080 | 999999 | ||
1001 | 9 | 9 | Light Blue | 0000ff | 0000ff | ||
1010 | 10 | A | Light Green | 00ff00 | 00ff00 | ||
1011 | 11 | B | Light Aqua | 00ffff | 00ffff | ||
1100 | 12 | C | Light Red | ff0000 | ff0000 | ||
1101 | 13 | D | Light Purple | ff00ff | ff00ff | ||
1110 | 14 | E | Light Yellow | ffff00 | ffff00 | ||
1111 | 15 | F | Bright White | ffffff | ffffff |
It should now be apparent that the only difference between "gray" (binary 1000) and "black" (binary 0000) is that gray has the intensity bit set.
(Note also that the names shown in the table are taken straight from the Win2K help system. If you type "color /?" those are the names you get. Why they choose to use "aqua" and "purple" for the colors that everybody's been called "cyan" and "magenta" for years is beyond me. I also take issue with what they chose to call "yellow" and "white".)
This also helps explain why DOS wouldn't let you use "light" or "intense" background colors in text modes. The foreground and background colors were packed into a single 8-bit byte. Now, this seems like it would've been fine, since each color is 4 bits. But they also wanted to be able to make the text blink. In order to make room for a "blink" bit, the background color has no intensity bit. Thankfully, the NT "color" command does not support blinking, so we get the full 16 background colors.
Finally, in monochrome mode, the "color" bits were used to control things like reversed and underlined text. There was not actually support for underlining in color text modes, so technically I'm cheating by using underlined links on the menu here.