/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ │vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ ╞══════════════════════════════════════════════════════════════════════════════╡ │ Copyright 2020 Justine Alexandra Roberts Tunney │ │ │ │ Permission to use, copy, modify, and/or distribute this software for │ │ any purpose with or without fee is hereby granted, provided that the │ │ above copyright notice and this permission notice appear in all copies. │ │ │ │ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ │ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ │ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ │ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ │ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ │ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "dsp/tty/xtermname.h" #include "libc/stdio/stdio.h" #include "libc/str/str.h" struct Rgb { uint8_t r, g, b; }; const struct Rgb kTango[16] = { {0x00, 0x00, 0x00}, {0x80, 0x00, 0x00}, {0x00, 0x80, 0x00}, {0x80, 0x80, 0x00}, {0x00, 0x00, 0x80}, {0x80, 0x00, 0x80}, {0x00, 0x80, 0x80}, {0xc0, 0xc0, 0xc0}, {0x80, 0x80, 0x80}, {0xff, 0x00, 0x00}, {0x00, 0xff, 0x00}, {0xff, 0xff, 0x00}, {0x00, 0x00, 0xff}, {0xff, 0x00, 0xff}, {0x00, 0xff, 0xff}, {0xff, 0xff, 0xff}, }; const struct Rgb kXtermRgb[] = { /* 0..15: ansi 16-color palette */ {0x00, 0x00, 0x00}, {0x80, 0x00, 0x00}, {0x00, 0x80, 0x00}, {0x80, 0x80, 0x00}, {0x00, 0x00, 0x80}, {0x80, 0x00, 0x80}, {0x00, 0x80, 0x80}, {0xc0, 0xc0, 0xc0}, {0x80, 0x80, 0x80}, {0xff, 0x00, 0x00}, {0x00, 0xff, 0x00}, {0xff, 0xff, 0x00}, {0x00, 0x00, 0xff}, {0xff, 0x00, 0xff}, {0x00, 0xff, 0xff}, {0xff, 0xff, 0xff}, /* 16..231: xterm256 color cubes */ {0x00, 0x00, 0x00}, {0x00, 0x00, 0x5f}, {0x00, 0x00, 0x87}, {0x00, 0x00, 0xaf}, {0x00, 0x00, 0xd7}, {0x00, 0x00, 0xff}, {0x00, 0x5f, 0x00}, {0x00, 0x5f, 0x5f}, {0x00, 0x5f, 0x87}, {0x00, 0x5f, 0xaf}, {0x00, 0x5f, 0xd7}, {0x00, 0x5f, 0xff}, {0x00, 0x87, 0x00}, {0x00, 0x87, 0x5f}, {0x00, 0x87, 0x87}, {0x00, 0x87, 0xaf}, {0x00, 0x87, 0xd7}, {0x00, 0x87, 0xff}, {0x00, 0xaf, 0x00}, {0x00, 0xaf, 0x5f}, {0x00, 0xaf, 0x87}, {0x00, 0xaf, 0xaf}, {0x00, 0xaf, 0xd7}, {0x00, 0xaf, 0xff}, {0x00, 0xd7, 0x00}, {0x00, 0xd7, 0x5f}, {0x00, 0xd7, 0x87}, {0x00, 0xd7, 0xaf}, {0x00, 0xd7, 0xd7}, {0x00, 0xd7, 0xff}, {0x00, 0xff, 0x00}, {0x00, 0xff, 0x5f}, {0x00, 0xff, 0x87}, {0x00, 0xff, 0xaf}, {0x00, 0xff, 0xd7}, {0x00, 0xff, 0xff}, {0x5f, 0x00, 0x00}, {0x5f, 0x00, 0x5f}, {0x5f, 0x00, 0x87}, {0x5f, 0x00, 0xaf}, {0x5f, 0x00, 0xd7}, {0x5f, 0x00, 0xff}, {0x5f, 0x5f, 0x00}, {0x5f, 0x5f, 0x5f}, {0x5f, 0x5f, 0x87}, {0x5f, 0x5f, 0xaf}, {0x5f, 0x5f, 0xd7}, {0x5f, 0x5f, 0xff}, {0x5f, 0x87, 0x00}, {0x5f, 0x87, 0x5f}, {0x5f, 0x87, 0x87}, {0x5f, 0x87, 0xaf}, {0x5f, 0x87, 0xd7}, {0x5f, 0x87, 0xff}, {0x5f, 0xaf, 0x00}, {0x5f, 0xaf, 0x5f}, {0x5f, 0xaf, 0x87}, {0x5f, 0xaf, 0xaf}, {0x5f, 0xaf, 0xd7}, {0x5f, 0xaf, 0xff}, {0x5f, 0xd7, 0x00}, {0x5f, 0xd7, 0x5f}, {0x5f, 0xd7, 0x87}, {0x5f, 0xd7, 0xaf}, {0x5f, 0xd7, 0xd7}, {0x5f, 0xd7, 0xff}, {0x5f, 0xff, 0x00}, {0x5f, 0xff, 0x5f}, {0x5f, 0xff, 0x87}, {0x5f, 0xff, 0xaf}, {0x5f, 0xff, 0xd7}, {0x5f, 0xff, 0xff}, {0x87, 0x00, 0x00}, {0x87, 0x00, 0x5f}, {0x87, 0x00, 0x87}, {0x87, 0x00, 0xaf}, {0x87, 0x00, 0xd7}, {0x87, 0x00, 0xff}, {0x87, 0x5f, 0x00}, {0x87, 0x5f, 0x5f}, {0x87, 0x5f, 0x87}, {0x87, 0x5f, 0xaf}, {0x87, 0x5f, 0xd7}, {0x87, 0x5f, 0xff}, {0x87, 0x87, 0x00}, {0x87, 0x87, 0x5f}, {0x87, 0x87, 0x87}, {0x87, 0x87, 0xaf}, {0x87, 0x87, 0xd7}, {0x87, 0x87, 0xff}, {0x87, 0xaf, 0x00}, {0x87, 0xaf, 0x5f}, {0x87, 0xaf, 0x87}, {0x87, 0xaf, 0xaf}, {0x87, 0xaf, 0xd7}, {0x87, 0xaf, 0xff}, {0x87, 0xd7, 0x00}, {0x87, 0xd7, 0x5f}, {0x87, 0xd7, 0x87}, {0x87, 0xd7, 0xaf}, {0x87, 0xd7, 0xd7}, {0x87, 0xd7, 0xff}, {0x87, 0xff, 0x00}, {0x87, 0xff, 0x5f}, {0x87, 0xff, 0x87}, {0x87, 0xff, 0xaf}, {0x87, 0xff, 0xd7}, {0x87, 0xff, 0xff}, {0xaf, 0x00, 0x00}, {0xaf, 0x00, 0x5f}, {0xaf, 0x00, 0x87}, {0xaf, 0x00, 0xaf}, {0xaf, 0x00, 0xd7}, {0xaf, 0x00, 0xff}, {0xaf, 0x5f, 0x00}, {0xaf, 0x5f, 0x5f}, {0xaf, 0x5f, 0x87}, {0xaf, 0x5f, 0xaf}, {0xaf, 0x5f, 0xd7}, {0xaf, 0x5f, 0xff}, {0xaf, 0x87, 0x00}, {0xaf, 0x87, 0x5f}, {0xaf, 0x87, 0x87}, {0xaf, 0x87, 0xaf}, {0xaf, 0x87, 0xd7}, {0xaf, 0x87, 0xff}, {0xaf, 0xaf, 0x00}, {0xaf, 0xaf, 0x5f}, {0xaf, 0xaf, 0x87}, {0xaf, 0xaf, 0xaf}, {0xaf, 0xaf, 0xd7}, {0xaf, 0xaf, 0xff}, {0xaf, 0xd7, 0x00}, {0xaf, 0xd7, 0x5f}, {0xaf, 0xd7, 0x87}, {0xaf, 0xd7, 0xaf}, {0xaf, 0xd7, 0xd7}, {0xaf, 0xd7, 0xff}, {0xaf, 0xff, 0x00}, {0xaf, 0xff, 0x5f}, {0xaf, 0xff, 0x87}, {0xaf, 0xff, 0xaf}, {0xaf, 0xff, 0xd7}, {0xaf, 0xff, 0xff}, {0xd7, 0x00, 0x00}, {0xd7, 0x00, 0x5f}, {0xd7, 0x00, 0x87}, {0xd7, 0x00, 0xaf}, {0xd7, 0x00, 0xd7}, {0xd7, 0x00, 0xff}, {0xd7, 0x5f, 0x00}, {0xd7, 0x5f, 0x5f}, {0xd7, 0x5f, 0x87}, {0xd7, 0x5f, 0xaf}, {0xd7, 0x5f, 0xd7}, {0xd7, 0x5f, 0xff}, {0xd7, 0x87, 0x00}, {0xd7, 0x87, 0x5f}, {0xd7, 0x87, 0x87}, {0xd7, 0x87, 0xaf}, {0xd7, 0x87, 0xd7}, {0xd7, 0x87, 0xff}, {0xd7, 0xaf, 0x00}, {0xd7, 0xaf, 0x5f}, {0xd7, 0xaf, 0x87}, {0xd7, 0xaf, 0xaf}, {0xd7, 0xaf, 0xd7}, {0xd7, 0xaf, 0xff}, {0xd7, 0xd7, 0x00}, {0xd7, 0xd7, 0x5f}, {0xd7, 0xd7, 0x87}, {0xd7, 0xd7, 0xaf}, {0xd7, 0xd7, 0xd7}, {0xd7, 0xd7, 0xff}, {0xd7, 0xff, 0x00}, {0xd7, 0xff, 0x5f}, {0xd7, 0xff, 0x87}, {0xd7, 0xff, 0xaf}, {0xd7, 0xff, 0xd7}, {0xd7, 0xff, 0xff}, {0xff, 0x00, 0x00}, {0xff, 0x00, 0x5f}, {0xff, 0x00, 0x87}, {0xff, 0x00, 0xaf}, {0xff, 0x00, 0xd7}, {0xff, 0x00, 0xff}, {0xff, 0x5f, 0x00}, {0xff, 0x5f, 0x5f}, {0xff, 0x5f, 0x87}, {0xff, 0x5f, 0xaf}, {0xff, 0x5f, 0xd7}, {0xff, 0x5f, 0xff}, {0xff, 0x87, 0x00}, {0xff, 0x87, 0x5f}, {0xff, 0x87, 0x87}, {0xff, 0x87, 0xaf}, {0xff, 0x87, 0xd7}, {0xff, 0x87, 0xff}, {0xff, 0xaf, 0x00}, {0xff, 0xaf, 0x5f}, {0xff, 0xaf, 0x87}, {0xff, 0xaf, 0xaf}, {0xff, 0xaf, 0xd7}, {0xff, 0xaf, 0xff}, {0xff, 0xd7, 0x00}, {0xff, 0xd7, 0x5f}, {0xff, 0xd7, 0x87}, {0xff, 0xd7, 0xaf}, {0xff, 0xd7, 0xd7}, {0xff, 0xd7, 0xff}, {0xff, 0xff, 0x00}, {0xff, 0xff, 0x5f}, {0xff, 0xff, 0x87}, {0xff, 0xff, 0xaf}, {0xff, 0xff, 0xd7}, {0xff, 0xff, 0xff}, /* 232..255: xterm256 grayscale */ {0x08, 0x08, 0x08}, /* 8 */ {0x12, 0x12, 0x12}, /* 10 */ {0x1c, 0x1c, 0x1c}, /* 10 */ {0x26, 0x26, 0x26}, /* 10 */ {0x30, 0x30, 0x30}, /* .. */ {0x3a, 0x3a, 0x3a}, {0x44, 0x44, 0x44}, {0x4e, 0x4e, 0x4e}, {0x58, 0x58, 0x58}, {0x62, 0x62, 0x62}, {0x6c, 0x6c, 0x6c}, {0x76, 0x76, 0x76}, {0x80, 0x80, 0x80}, {0x8a, 0x8a, 0x8a}, {0x94, 0x94, 0x94}, {0x9e, 0x9e, 0x9e}, {0xa8, 0xa8, 0xa8}, {0xb2, 0xb2, 0xb2}, {0xbc, 0xbc, 0xbc}, {0xc6, 0xc6, 0xc6}, {0xd0, 0xd0, 0xd0}, {0xda, 0xda, 0xda}, {0xe4, 0xe4, 0xe4}, {0xee, 0xee, 0xee}, }; const struct Rgb kXtermRgbAppleFg[] = { {0, 0, 0}, {192, 55, 41}, {48, 187, 49}, {173, 172, 53}, {73, 76, 224}, {209, 65, 209}, {60, 187, 199}, {203, 204, 205}, {154, 155, 156}, {249, 59, 44}, {62, 229, 55}, {234, 234, 62}, {89, 63, 251}, {247, 67, 245}, {48, 239, 239}, {233, 235, 235}, {47, 49, 49}, {60, 46, 142}, {67, 51, 180}, {74, 56, 218}, {82, 62, 248}, {89, 63, 251}, {46, 127, 43}, {46, 127, 127}, {49, 127, 167}, {60, 127, 207}, {63, 127, 241}, {70, 126, 251}, {57, 161, 50}, {47, 161, 122}, {50, 161, 161}, {60, 161, 200}, {53, 161, 237}, {65, 160, 252}, {45, 194, 51}, {58, 194, 118}, {51, 194, 156}, {59, 194, 194}, {48, 194, 233}, {63, 194, 252}, {62, 227, 55}, {55, 227, 115}, {48, 227, 151}, {63, 227, 189}, {52, 227, 227}, {66, 227, 253}, {51, 252, 57}, {53, 252, 111}, {63, 252, 147}, {58, 252, 184}, {59, 252, 222}, {62, 253, 251}, {138, 49, 43}, {134, 55, 134}, {134, 58, 174}, {133, 61, 213}, {134, 67, 244}, {134, 65, 251}, {125, 124, 46}, {124, 125, 125}, {122, 125, 165}, {123, 126, 205}, {124, 126, 243}, {125, 125, 251}, {120, 159, 47}, {118, 159, 121}, {118, 159, 160}, {117, 160, 199}, {118, 160, 238}, {119, 160, 252}, {115, 193, 53}, {113, 193, 117}, {114, 193, 155}, {111, 193, 193}, {113, 194, 232}, {112, 193, 252}, {110, 226, 53}, {108, 226, 114}, {110, 226, 151}, {106, 226, 189}, {105, 227, 227}, {105, 226, 252}, {99, 251, 59}, {103, 251, 111}, {104, 251, 146}, {97, 252, 184}, {102, 252, 221}, {98, 254, 250}, {175, 54, 40}, {172, 58, 130}, {170, 61, 170}, {170, 66, 210}, {169, 67, 245}, {168, 69, 251}, {164, 123, 47}, {162, 123, 124}, {161, 124, 163}, {161, 124, 203}, {160, 125, 238}, {160, 125, 251}, {158, 157, 47}, {157, 158, 120}, {157, 158, 159}, {155, 158, 198}, {155, 159, 236}, {155, 158, 252}, {153, 192, 55}, {152, 192, 117}, {151, 192, 154}, {151, 192, 193}, {150, 192, 231}, {150, 192, 251}, {148, 225, 53}, {147, 225, 114}, {146, 225, 150}, {147, 226, 188}, {145, 226, 226}, {145, 226, 250}, {142, 251, 61}, {141, 251, 111}, {141, 252, 146}, {142, 253, 183}, {139, 254, 221}, {138, 255, 249}, {211, 59, 40}, {209, 63, 126}, {207, 63, 166}, {206, 64, 206}, {205, 69, 243}, {204, 72, 252}, {202, 121, 45}, {201, 122, 122}, {200, 122, 161}, {199, 123, 200}, {199, 124, 238}, {197, 124, 252}, {197, 156, 51}, {195, 156, 119}, {195, 157, 157}, {194, 157, 196}, {193, 157, 234}, {193, 157, 252}, {191, 190, 54}, {190, 190, 116}, {189, 191, 153}, {190, 191, 191}, {188, 191, 229}, {187, 191, 251}, {186, 224, 55}, {185, 224, 113}, {184, 224, 150}, {184, 224, 187}, {184, 225, 225}, {182, 224, 251}, {180, 253, 62}, {180, 253, 111}, {179, 253, 146}, {179, 253, 183}, {179, 254, 220}, {177, 252, 249}, {244, 59, 43}, {243, 62, 123}, {241, 65, 162}, {241, 69, 202}, {240, 70, 238}, {238, 69, 252}, {239, 119, 50}, {238, 120, 120}, {236, 121, 159}, {235, 121, 198}, {235, 123, 236}, {234, 123, 252}, {234, 154, 53}, {233, 154, 118}, {232, 155, 156}, {231, 155, 194}, {231, 156, 233}, {230, 156, 252}, {229, 188, 53}, {228, 189, 115}, {227, 189, 152}, {227, 189, 190}, {226, 189, 228}, {225, 189, 253}, {223, 222, 60}, {223, 223, 113}, {222, 223, 149}, {222, 223, 186}, {222, 223, 224}, {220, 223, 252}, {218, 251, 61}, {217, 251, 109}, {217, 251, 145}, {217, 251, 182}, {216, 251, 219}, {216, 251, 250}, {252, 63, 43}, {252, 64, 120}, {252, 64, 159}, {252, 65, 198}, {252, 67, 236}, {252, 72, 252}, {253, 117, 47}, {253, 118, 118}, {253, 119, 156}, {253, 120, 194}, {253, 120, 233}, {252, 121, 252}, {253, 152, 49}, {252, 152, 116}, {252, 153, 153}, {253, 153, 192}, {252, 154, 229}, {251, 154, 251}, {253, 186, 56}, {251, 187, 114}, {251, 187, 151}, {252, 187, 188}, {252, 188, 226}, {251, 188, 251}, {251, 221, 61}, {250, 221, 112}, {250, 221, 148}, {250, 221, 185}, {251, 222, 222}, {251, 222, 251}, {251, 250, 58}, {250, 250, 109}, {249, 250, 144}, {247, 251, 181}, {247, 253, 218}, {254, 255, 255}, {52, 53, 53}, {57, 58, 59}, {66, 67, 67}, {75, 76, 76}, {84, 85, 85}, {92, 93, 94}, {101, 102, 102}, {109, 111, 111}, {118, 119, 119}, {126, 127, 128}, {134, 136, 136}, {143, 144, 145}, {151, 152, 153}, {159, 161, 161}, {167, 169, 169}, {176, 177, 177}, {184, 185, 186}, {192, 193, 194}, {200, 201, 202}, {208, 209, 210}, {216, 218, 218}, {224, 226, 226}, {232, 234, 234}, {240, 242, 242}, }; const struct Rgb kXtermRgbAppleBg[] = { {0, 0, 0}, {151, 4, 12}, {23, 164, 26}, {153, 152, 29}, {8, 43, 181}, {177, 25, 176}, {26, 166, 177}, {191, 191, 191}, {132, 132, 132}, {227, 10, 23}, {33, 215, 38}, {229, 228, 49}, {11, 36, 251}, {227, 35, 227}, {39, 229, 228}, {230, 229, 230}, {0, 0, 0}, {1, 7, 93}, {3, 14, 133}, {5, 21, 172}, {7, 28, 211}, {11, 36, 251}, {8, 94, 11}, {10, 95, 95}, {11, 96, 133}, {13, 97, 173}, {15, 99, 212}, {18, 101, 251}, {17, 134, 20}, {18, 134, 96}, {18, 135, 134}, {20, 136, 173}, {21, 137, 212}, {23, 138, 251}, {25, 173, 29}, {26, 174, 98}, {26, 174, 136}, {27, 175, 174}, {28, 175, 213}, {30, 176, 252}, {33, 213, 38}, {34, 213, 101}, {34, 214, 137}, {35, 214, 175}, {36, 215, 214}, {37, 215, 253}, {41, 253, 47}, {42, 253, 104}, {42, 253, 140}, {43, 253, 177}, {44, 254, 215}, {45, 255, 254}, {94, 2, 4}, {94, 8, 94}, {94, 15, 133}, {94, 22, 172}, {95, 29, 211}, {95, 36, 251}, {95, 94, 14}, {95, 95, 95}, {95, 96, 134}, {95, 97, 173}, {96, 99, 212}, {96, 101, 251}, {96, 134, 22}, {96, 134, 96}, {96, 135, 135}, {97, 136, 173}, {97, 137, 212}, {97, 138, 252}, {98, 173, 30}, {98, 174, 98}, {98, 174, 136}, {98, 175, 174}, {98, 176, 213}, {99, 177, 252}, {100, 213, 39}, {100, 213, 101}, {100, 214, 138}, {100, 214, 176}, {101, 215, 214}, {101, 215, 253}, {102, 253, 48}, {103, 253, 104}, {103, 253, 140}, {103, 253, 177}, {103, 254, 215}, {104, 255, 254}, {133, 3, 9}, {133, 10, 94}, {134, 16, 133}, {134, 23, 172}, {134, 30, 212}, {134, 37, 251}, {134, 94, 18}, {134, 95, 96}, {134, 96, 134}, {134, 97, 173}, {135, 99, 212}, {135, 101, 251}, {135, 134, 25}, {135, 134, 97}, {135, 135, 135}, {135, 136, 174}, {135, 137, 213}, {136, 138, 252}, {136, 173, 32}, {136, 174, 99}, {136, 174, 136}, {136, 175, 175}, {136, 176, 213}, {137, 177, 252}, {137, 213, 40}, {137, 213, 102}, {138, 214, 138}, {138, 214, 176}, {138, 215, 214}, {138, 216, 253}, {139, 253, 49}, {139, 253, 105}, {139, 253, 140}, {139, 254, 178}, {140, 254, 216}, {140, 255, 254}, {173, 6, 15}, {173, 12, 95}, {173, 18, 134}, {173, 24, 173}, {173, 31, 212}, {174, 38, 251}, {173, 95, 22}, {174, 95, 96}, {174, 96, 135}, {174, 98, 173}, {174, 99, 212}, {174, 101, 252}, {174, 134, 28}, {174, 135, 98}, {174, 135, 136}, {174, 136, 174}, {174, 137, 213}, {175, 139, 252}, {175, 174, 35}, {175, 174, 100}, {175, 174, 137}, {175, 175, 175}, {175, 176, 214}, {175, 177, 253}, {176, 213, 43}, {176, 213, 102}, {176, 214, 139}, {176, 214, 176}, {176, 215, 215}, {176, 216, 253}, {177, 253, 51}, {177, 253, 105}, {177, 253, 141}, {177, 254, 178}, {178, 254, 216}, {178, 255, 254}, {213, 9, 21}, {213, 15, 96}, {213, 20, 135}, {241, 69, 202}, {213, 32, 212}, {213, 39, 251}, {213, 95, 27}, {213, 96, 97}, {213, 97, 135}, {213, 98, 174}, {213, 100, 213}, {213, 102, 252}, {213, 134, 32}, {213, 135, 99}, {213, 135, 136}, {214, 136, 175}, {214, 137, 213}, {214, 139, 252}, {214, 174, 38}, {214, 174, 101}, {214, 175, 138}, {214, 175, 176}, {214, 176, 214}, {214, 177, 253}, {215, 213, 45}, {215, 214, 103}, {215, 214, 139}, {215, 214, 177}, {215, 215, 215}, {215, 216, 254}, {216, 253, 53}, {216, 253, 106}, {216, 253, 141}, {216, 254, 178}, {216, 254, 216}, {216, 255, 255}, {252, 13, 27}, {252, 18, 98}, {252, 22, 135}, {252, 28, 174}, {252, 34, 213}, {252, 40, 252}, {252, 96, 32}, {252, 96, 99}, {252, 97, 136}, {253, 99, 175}, {253, 100, 213}, {253, 102, 252}, {253, 135, 36}, {253, 135, 100}, {253, 136, 137}, {253, 137, 175}, {253, 138, 214}, {253, 139, 253}, {253, 174, 42}, {253, 174, 102}, {253, 175, 138}, {253, 175, 176}, {253, 176, 215}, {254, 177, 253}, {254, 213, 48}, {254, 214, 105}, {254, 214, 140}, {254, 215, 177}, {254, 215, 216}, {254, 216, 254}, {255, 253, 56}, {255, 253, 108}, {255, 253, 142}, {255, 254, 179}, {255, 254, 217}, {255, 255, 255}, {8, 8, 8}, {18, 18, 18}, {28, 28, 28}, {38, 38, 38}, {48, 48, 48}, {58, 58, 58}, {68, 68, 68}, {78, 78, 78}, {88, 88, 88}, {98, 98, 98}, {108, 108, 108}, {118, 118, 118}, {128, 128, 128}, {138, 138, 138}, {148, 148, 148}, {158, 158, 158}, {168, 168, 168}, {178, 178, 178}, {188, 188, 188}, {198, 198, 198}, {208, 208, 208}, {218, 218, 218}, {228, 228, 228}, {238, 238, 238}, }; const struct XtermDb { struct Rgb rgb; const char *text; } kXtermDb[] = { {{0x00, 0x00, 0x00}, "0 Black #000000"}, {{0x80, 0x00, 0x00}, "1 Maroon #800000"}, {{0x00, 0x80, 0x00}, "2 Green #008000"}, {{0x80, 0x80, 0x00}, "3 Olive #808000"}, {{0x00, 0x00, 0x80}, "4 Navy #000080"}, {{0x80, 0x00, 0x80}, "5 Purple #800080"}, {{0x00, 0x80, 0x80}, "6 Teal #008080"}, {{0xc0, 0xc0, 0xc0}, "7 Silver #c0c0c0"}, {{0x80, 0x80, 0x80}, "8 Grey #808080"}, {{0xff, 0x00, 0x00}, "9 Red #ff0000"}, {{0x00, 0xff, 0x00}, "10 Lime #00ff00"}, {{0xff, 0xff, 0x00}, "11 Yellow #ffff00"}, {{0x00, 0x00, 0xff}, "12 Blue #0000ff"}, {{0xff, 0x00, 0xff}, "13 Fuchsia #ff00ff"}, {{0x00, 0xff, 0xff}, "14 Aqua #00ffff"}, {{0xff, 0xff, 0xff}, "15 White #ffffff"}, {{0x00, 0x00, 0x00}, "16 Grey0 #000000"}, {{0x00, 0x00, 0x5f}, "17 NavyBlue #00005f"}, {{0x00, 0x00, 0x87}, "18 DarkBlue #000087"}, {{0x00, 0x00, 0xaf}, "19 Blue3 #0000af"}, {{0x00, 0x00, 0xd7}, "20 Blue3 #0000d7"}, {{0x00, 0x00, 0xff}, "21 Blue1 #0000ff"}, {{0x00, 0x5f, 0x00}, "22 DarkGreen #005f00"}, {{0x00, 0x5f, 0x5f}, "23 DeepSkyBlue4 #005f5f"}, {{0x00, 0x5f, 0x87}, "24 DeepSkyBlue4 #005f87"}, {{0x00, 0x5f, 0xaf}, "25 DeepSkyBlue4 #005faf"}, {{0x00, 0x5f, 0xd7}, "26 DodgerBlue3 #005fd7"}, {{0x00, 0x5f, 0xff}, "27 DodgerBlue2 #005fff"}, {{0x00, 0x87, 0x00}, "28 Green4 #008700"}, {{0x00, 0x87, 0x5f}, "29 SpringGreen4 #00875f"}, {{0x00, 0x87, 0x87}, "30 Turquoise4 #008787"}, {{0x00, 0x87, 0xaf}, "31 DeepSkyBlue3 #0087af"}, {{0x00, 0x87, 0xd7}, "32 DeepSkyBlue3 #0087d7"}, {{0x00, 0x87, 0xff}, "33 DodgerBlue1 #0087ff"}, {{0x00, 0xaf, 0x00}, "34 Green3 #00af00"}, {{0x00, 0xaf, 0x5f}, "35 SpringGreen3 #00af5f"}, {{0x00, 0xaf, 0x87}, "36 DarkCyan #00af87"}, {{0x00, 0xaf, 0xaf}, "37 LightSeaGreen #00afaf"}, {{0x00, 0xaf, 0xd7}, "38 DeepSkyBlue2 #00afd7"}, {{0x00, 0xaf, 0xff}, "39 DeepSkyBlue1 #00afff"}, {{0x00, 0xd7, 0x00}, "40 Green3 #00d700"}, {{0x00, 0xd7, 0x5f}, "41 SpringGreen3 #00d75f"}, {{0x00, 0xd7, 0x87}, "42 SpringGreen2 #00d787"}, {{0x00, 0xd7, 0xaf}, "43 Cyan3 #00d7af"}, {{0x00, 0xd7, 0xd7}, "44 DarkTurquoise #00d7d7"}, {{0x00, 0xd7, 0xff}, "45 Turquoise2 #00d7ff"}, {{0x00, 0xff, 0x00}, "46 Green1 #00ff00"}, {{0x00, 0xff, 0x5f}, "47 SpringGreen2 #00ff5f"}, {{0x00, 0xff, 0x87}, "48 SpringGreen1 #00ff87"}, {{0x00, 0xff, 0xaf}, "49 MediumSpringGreen #00ffaf"}, {{0x00, 0xff, 0xd7}, "50 Cyan2 #00ffd7"}, {{0x00, 0xff, 0xff}, "51 Cyan1 #00ffff"}, {{0x5f, 0x00, 0x00}, "52 DarkRed #5f0000"}, {{0x5f, 0x00, 0x5f}, "53 DeepPink4 #5f005f"}, {{0x5f, 0x00, 0x87}, "54 Purple4 #5f0087"}, {{0x5f, 0x00, 0xaf}, "55 Purple4 #5f00af"}, {{0x5f, 0x00, 0xd7}, "56 Purple3 #5f00d7"}, {{0x5f, 0x00, 0xff}, "57 BlueViolet #5f00ff"}, {{0x5f, 0x5f, 0x00}, "58 Orange4 #5f5f00"}, {{0x5f, 0x5f, 0x5f}, "59 Grey37 #5f5f5f"}, {{0x5f, 0x5f, 0x87}, "60 MediumPurple4 #5f5f87"}, {{0x5f, 0x5f, 0xaf}, "61 SlateBlue3 #5f5faf"}, {{0x5f, 0x5f, 0xd7}, "62 SlateBlue3 #5f5fd7"}, {{0x5f, 0x5f, 0xff}, "63 RoyalBlue1 #5f5fff"}, {{0x5f, 0x87, 0x00}, "64 Chartreuse4 #5f8700"}, {{0x5f, 0x87, 0x5f}, "65 DarkSeaGreen4 #5f875f"}, {{0x5f, 0x87, 0x87}, "66 PaleTurquoise4 #5f8787"}, {{0x5f, 0x87, 0xaf}, "67 SteelBlue #5f87af"}, {{0x5f, 0x87, 0xd7}, "68 SteelBlue3 #5f87d7"}, {{0x5f, 0x87, 0xff}, "69 CornflowerBlue #5f87ff"}, {{0x5f, 0xaf, 0x00}, "70 Chartreuse3 #5faf00"}, {{0x5f, 0xaf, 0x5f}, "71 DarkSeaGreen4 #5faf5f"}, {{0x5f, 0xaf, 0x87}, "72 CadetBlue #5faf87"}, {{0x5f, 0xaf, 0xaf}, "73 CadetBlue #5fafaf"}, {{0x5f, 0xaf, 0xd7}, "74 SkyBlue3 #5fafd7"}, {{0x5f, 0xaf, 0xff}, "75 SteelBlue1 #5fafff"}, {{0x5f, 0xd7, 0x00}, "76 Chartreuse3 #5fd700"}, {{0x5f, 0xd7, 0x5f}, "77 PaleGreen3 #5fd75f"}, {{0x5f, 0xd7, 0x87}, "78 SeaGreen3 #5fd787"}, {{0x5f, 0xd7, 0xaf}, "79 Aquamarine3 #5fd7af"}, {{0x5f, 0xd7, 0xd7}, "80 MediumTurquoise #5fd7d7"}, {{0x5f, 0xd7, 0xff}, "81 SteelBlue1 #5fd7ff"}, {{0x5f, 0xff, 0x00}, "82 Chartreuse2 #5fff00"}, {{0x5f, 0xff, 0x5f}, "83 SeaGreen2 #5fff5f"}, {{0x5f, 0xff, 0x87}, "84 SeaGreen1 #5fff87"}, {{0x5f, 0xff, 0xaf}, "85 SeaGreen1 #5fffaf"}, {{0x5f, 0xff, 0xd7}, "86 Aquamarine1 #5fffd7"}, {{0x5f, 0xff, 0xff}, "87 DarkSlateGray2 #5fffff"}, {{0x87, 0x00, 0x00}, "88 DarkRed #870000"}, {{0x87, 0x00, 0x5f}, "89 DeepPink4 #87005f"}, {{0x87, 0x00, 0x87}, "90 DarkMagenta #870087"}, {{0x87, 0x00, 0xaf}, "91 DarkMagenta #8700af"}, {{0x87, 0x00, 0xd7}, "92 DarkViolet #8700d7"}, {{0x87, 0x00, 0xff}, "93 Purple #8700ff"}, {{0x87, 0x5f, 0x00}, "94 Orange4 #875f00"}, {{0x87, 0x5f, 0x5f}, "95 LightPink4 #875f5f"}, {{0x87, 0x5f, 0x87}, "96 Plum4 #875f87"}, {{0x87, 0x5f, 0xaf}, "97 MediumPurple3 #875faf"}, {{0x87, 0x5f, 0xd7}, "98 MediumPurple3 #875fd7"}, {{0x87, 0x5f, 0xff}, "99 SlateBlue1 #875fff"}, {{0x87, 0x87, 0x00}, "100 Yellow4 #878700"}, {{0x87, 0x87, 0x5f}, "101 Wheat4 #87875f"}, {{0x87, 0x87, 0x87}, "102 Grey53 #878787"}, {{0x87, 0x87, 0xaf}, "103 LightSlateGrey #8787af"}, {{0x87, 0x87, 0xd7}, "104 MediumPurple #8787d7"}, {{0x87, 0x87, 0xff}, "105 LightSlateBlue #8787ff"}, {{0x87, 0xaf, 0x00}, "106 Yellow4 #87af00"}, {{0x87, 0xaf, 0x5f}, "107 DarkOliveGreen3 #87af5f"}, {{0x87, 0xaf, 0x87}, "108 DarkSeaGreen #87af87"}, {{0x87, 0xaf, 0xaf}, "109 LightSkyBlue3 #87afaf"}, {{0x87, 0xaf, 0xd7}, "110 LightSkyBlue3 #87afd7"}, {{0x87, 0xaf, 0xff}, "111 SkyBlue2 #87afff"}, {{0x87, 0xd7, 0x00}, "112 Chartreuse2 #87d700"}, {{0x87, 0xd7, 0x5f}, "113 DarkOliveGreen3 #87d75f"}, {{0x87, 0xd7, 0x87}, "114 PaleGreen3 #87d787"}, {{0x87, 0xd7, 0xaf}, "115 DarkSeaGreen3 #87d7af"}, {{0x87, 0xd7, 0xd7}, "116 DarkSlateGray3 #87d7d7"}, {{0x87, 0xd7, 0xff}, "117 SkyBlue1 #87d7ff"}, {{0x87, 0xff, 0x00}, "118 Chartreuse1 #87ff00"}, {{0x87, 0xff, 0x5f}, "119 LightGreen #87ff5f"}, {{0x87, 0xff, 0x87}, "120 LightGreen #87ff87"}, {{0x87, 0xff, 0xaf}, "121 PaleGreen1 #87ffaf"}, {{0x87, 0xff, 0xd7}, "122 Aquamarine1 #87ffd7"}, {{0x87, 0xff, 0xff}, "123 DarkSlateGray1 #87ffff"}, {{0xaf, 0x00, 0x00}, "124 Red3 #af0000"}, {{0xaf, 0x00, 0x5f}, "125 DeepPink4 #af005f"}, {{0xaf, 0x00, 0x87}, "126 MediumVioletRed #af0087"}, {{0xaf, 0x00, 0xaf}, "127 Magenta3 #af00af"}, {{0xaf, 0x00, 0xd7}, "128 DarkViolet #af00d7"}, {{0xaf, 0x00, 0xff}, "129 Purple #af00ff"}, {{0xaf, 0x5f, 0x00}, "130 DarkOrange3 #af5f00"}, {{0xaf, 0x5f, 0x5f}, "131 IndianRed #af5f5f"}, {{0xaf, 0x5f, 0x87}, "132 HotPink3 #af5f87"}, {{0xaf, 0x5f, 0xaf}, "133 MediumOrchid3 #af5faf"}, {{0xaf, 0x5f, 0xd7}, "134 MediumOrchid #af5fd7"}, {{0xaf, 0x5f, 0xff}, "135 MediumPurple2 #af5fff"}, {{0xaf, 0x87, 0x00}, "136 DarkGoldenrod #af8700"}, {{0xaf, 0x87, 0x5f}, "137 LightSalmon3 #af875f"}, {{0xaf, 0x87, 0x87}, "138 RosyBrown #af8787"}, {{0xaf, 0x87, 0xaf}, "139 Grey63 #af87af"}, {{0xaf, 0x87, 0xd7}, "140 MediumPurple2 #af87d7"}, {{0xaf, 0x87, 0xff}, "141 MediumPurple1 #af87ff"}, {{0xaf, 0xaf, 0x00}, "142 Gold3 #afaf00"}, {{0xaf, 0xaf, 0x5f}, "143 DarkKhaki #afaf5f"}, {{0xaf, 0xaf, 0x87}, "144 NavajoWhite3 #afaf87"}, {{0xaf, 0xaf, 0xaf}, "145 Grey69 #afafaf"}, {{0xaf, 0xaf, 0xd7}, "146 LightSteelBlue3 #afafd7"}, {{0xaf, 0xaf, 0xff}, "147 LightSteelBlue #afafff"}, {{0xaf, 0xd7, 0x00}, "148 Yellow3 #afd700"}, {{0xaf, 0xd7, 0x5f}, "149 DarkOliveGreen3 #afd75f"}, {{0xaf, 0xd7, 0x87}, "150 DarkSeaGreen3 #afd787"}, {{0xaf, 0xd7, 0xaf}, "151 DarkSeaGreen2 #afd7af"}, {{0xaf, 0xd7, 0xd7}, "152 LightCyan3 #afd7d7"}, {{0xaf, 0xd7, 0xff}, "153 LightSkyBlue1 #afd7ff"}, {{0xaf, 0xff, 0x00}, "154 GreenYellow #afff00"}, {{0xaf, 0xff, 0x5f}, "155 DarkOliveGreen2 #afff5f"}, {{0xaf, 0xff, 0x87}, "156 PaleGreen1 #afff87"}, {{0xaf, 0xff, 0xaf}, "157 DarkSeaGreen2 #afffaf"}, {{0xaf, 0xff, 0xd7}, "158 DarkSeaGreen1 #afffd7"}, {{0xaf, 0xff, 0xff}, "159 PaleTurquoise1 #afffff"}, {{0xd7, 0x00, 0x00}, "160 Red3 #d70000"}, {{0xd7, 0x00, 0x5f}, "161 DeepPink3 #d7005f"}, {{0xd7, 0x00, 0x87}, "162 DeepPink3 #d70087"}, {{0xd7, 0x00, 0xaf}, "163 Magenta3 #d700af"}, {{0xd7, 0x00, 0xd7}, "164 Magenta3 #d700d7"}, {{0xd7, 0x00, 0xff}, "165 Magenta2 #d700ff"}, {{0xd7, 0x5f, 0x00}, "166 DarkOrange3 #d75f00"}, {{0xd7, 0x5f, 0x5f}, "167 IndianRed #d75f5f"}, {{0xd7, 0x5f, 0x87}, "168 HotPink3 #d75f87"}, {{0xd7, 0x5f, 0xaf}, "169 HotPink2 #d75faf"}, {{0xd7, 0x5f, 0xd7}, "170 Orchid #d75fd7"}, {{0xd7, 0x5f, 0xff}, "171 MediumOrchid1 #d75fff"}, {{0xd7, 0x87, 0x00}, "172 Orange3 #d78700"}, {{0xd7, 0x87, 0x5f}, "173 LightSalmon3 #d7875f"}, {{0xd7, 0x87, 0x87}, "174 LightPink3 #d78787"}, {{0xd7, 0x87, 0xaf}, "175 Pink3 #d787af"}, {{0xd7, 0x87, 0xd7}, "176 Plum3 #d787d7"}, {{0xd7, 0x87, 0xff}, "177 Violet #d787ff"}, {{0xd7, 0xaf, 0x00}, "178 Gold3 #d7af00"}, {{0xd7, 0xaf, 0x5f}, "179 LightGoldenrod3 #d7af5f"}, {{0xd7, 0xaf, 0x87}, "180 Tan #d7af87"}, {{0xd7, 0xaf, 0xaf}, "181 MistyRose3 #d7afaf"}, {{0xd7, 0xaf, 0xd7}, "182 Thistle3 #d7afd7"}, {{0xd7, 0xaf, 0xff}, "183 Plum2 #d7afff"}, {{0xd7, 0xd7, 0x00}, "184 Yellow3 #d7d700"}, {{0xd7, 0xd7, 0x5f}, "185 Khaki3 #d7d75f"}, {{0xd7, 0xd7, 0x87}, "186 LightGoldenrod2 #d7d787"}, {{0xd7, 0xd7, 0xaf}, "187 LightYellow3 #d7d7af"}, {{0xd7, 0xd7, 0xd7}, "188 Grey84 #d7d7d7"}, {{0xd7, 0xd7, 0xff}, "189 LightSteelBlue1 #d7d7ff"}, {{0xd7, 0xff, 0x00}, "190 Yellow2 #d7ff00"}, {{0xd7, 0xff, 0x5f}, "191 DarkOliveGreen1 #d7ff5f"}, {{0xd7, 0xff, 0x87}, "192 DarkOliveGreen1 #d7ff87"}, {{0xd7, 0xff, 0xaf}, "193 DarkSeaGreen1 #d7ffaf"}, {{0xd7, 0xff, 0xd7}, "194 Honeydew2 #d7ffd7"}, {{0xd7, 0xff, 0xff}, "195 LightCyan1 #d7ffff"}, {{0xff, 0x00, 0x00}, "196 Red1 #ff0000"}, {{0xff, 0x00, 0x5f}, "197 DeepPink2 #ff005f"}, {{0xff, 0x00, 0x87}, "198 DeepPink1 #ff0087"}, {{0xff, 0x00, 0xaf}, "199 DeepPink1 #ff00af"}, {{0xff, 0x00, 0xd7}, "200 Magenta2 #ff00d7"}, {{0xff, 0x00, 0xff}, "201 Magenta1 #ff00ff"}, {{0xff, 0x5f, 0x00}, "202 OrangeRed1 #ff5f00"}, {{0xff, 0x5f, 0x5f}, "203 IndianRed1 #ff5f5f"}, {{0xff, 0x5f, 0x87}, "204 IndianRed1 #ff5f87"}, {{0xff, 0x5f, 0xaf}, "205 HotPink #ff5faf"}, {{0xff, 0x5f, 0xd7}, "206 HotPink #ff5fd7"}, {{0xff, 0x5f, 0xff}, "207 MediumOrchid1 #ff5fff"}, {{0xff, 0x87, 0x00}, "208 DarkOrange #ff8700"}, {{0xff, 0x87, 0x5f}, "209 Salmon1 #ff875f"}, {{0xff, 0x87, 0x87}, "210 LightCoral #ff8787"}, {{0xff, 0x87, 0xaf}, "211 PaleVioletRed1 #ff87af"}, {{0xff, 0x87, 0xd7}, "212 Orchid2 #ff87d7"}, {{0xff, 0x87, 0xff}, "213 Orchid1 #ff87ff"}, {{0xff, 0xaf, 0x00}, "214 Orange1 #ffaf00"}, {{0xff, 0xaf, 0x5f}, "215 SandyBrown #ffaf5f"}, {{0xff, 0xaf, 0x87}, "216 LightSalmon1 #ffaf87"}, {{0xff, 0xaf, 0xaf}, "217 LightPink1 #ffafaf"}, {{0xff, 0xaf, 0xd7}, "218 Pink1 #ffafd7"}, {{0xff, 0xaf, 0xff}, "219 Plum1 #ffafff"}, {{0xff, 0xd7, 0x00}, "220 Gold1 #ffd700"}, {{0xff, 0xd7, 0x5f}, "221 LightGoldenrod2 #ffd75f"}, {{0xff, 0xd7, 0x87}, "222 LightGoldenrod2 #ffd787"}, {{0xff, 0xd7, 0xaf}, "223 NavajoWhite1 #ffd7af"}, {{0xff, 0xd7, 0xd7}, "224 MistyRose1 #ffd7d7"}, {{0xff, 0xd7, 0xff}, "225 Thistle1 #ffd7ff"}, {{0xff, 0xff, 0x00}, "226 Yellow1 #ffff00"}, {{0xff, 0xff, 0x5f}, "227 LightGoldenrod1 #ffff5f"}, {{0xff, 0xff, 0x87}, "228 Khaki1 #ffff87"}, {{0xff, 0xff, 0xaf}, "229 Wheat1 #ffffaf"}, {{0xff, 0xff, 0xd7}, "230 Cornsilk1 #ffffd7"}, {{0xff, 0xff, 0xff}, "231 Grey100 #ffffff"}, {{0x08, 0x08, 0x08}, "232 Grey3 #080808"}, {{0x12, 0x12, 0x12}, "233 Grey7 #121212"}, {{0x1c, 0x1c, 0x1c}, "234 Grey11 #1c1c1c"}, {{0x26, 0x26, 0x26}, "235 Grey15 #262626"}, {{0x30, 0x30, 0x30}, "236 Grey19 #303030"}, {{0x3a, 0x3a, 0x3a}, "237 Grey23 #3a3a3a"}, {{0x44, 0x44, 0x44}, "238 Grey27 #444444"}, {{0x4e, 0x4e, 0x4e}, "239 Grey30 #4e4e4e"}, {{0x58, 0x58, 0x58}, "240 Grey35 #585858"}, {{0x62, 0x62, 0x62}, "241 Grey39 #626262"}, {{0x6c, 0x6c, 0x6c}, "242 Grey42 #6c6c6c"}, {{0x76, 0x76, 0x76}, "243 Grey46 #767676"}, {{0x80, 0x80, 0x80}, "244 Grey50 #808080"}, {{0x8a, 0x8a, 0x8a}, "245 Grey54 #8a8a8a"}, {{0x94, 0x94, 0x94}, "246 Grey58 #949494"}, {{0x9e, 0x9e, 0x9e}, "247 Grey62 #9e9e9e"}, {{0xa8, 0xa8, 0xa8}, "248 Grey66 #a8a8a8"}, {{0xb2, 0xb2, 0xb2}, "249 Grey70 #b2b2b2"}, {{0xbc, 0xbc, 0xbc}, "250 Grey74 #bcbcbc"}, {{0xc6, 0xc6, 0xc6}, "251 Grey78 #c6c6c6"}, {{0xd0, 0xd0, 0xd0}, "252 Grey82 #d0d0d0"}, {{0xda, 0xda, 0xda}, "253 Grey85 #dadada"}, {{0xe4, 0xe4, 0xe4}, "254 Grey89 #e4e4e4"}, {{0xee, 0xee, 0xee}, "255 Grey93 #eeeeee"}, }; int main(int argc, char *argv[]) { size_t i; printf("BG FG BB BF XTERM NAME HEX\n"); for (i = 0; i < 256; ++i) { printf("\e[48;5;%dm \e[0m \e[38;5;%dm██\e[0m \e[1;48;5;%dm " "\e[0m \e[1;38;5;%dm██\e[0m %-6hhu%-18s#%02hhx%02hhx%02hhx\n", i, i, i, i, i, IndexDoubleNulString(kXtermName, i), kXtermRgb[i].r, kXtermRgb[i].g, kXtermRgb[i].b); } return 0; }