| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| #include "config.h" |
| #include "terminal/palette.h" |
| |
| const guac_terminal_color GUAC_TERMINAL_INITIAL_PALETTE[256] = { |
| |
| /* Normal colors */ |
| {0, 0x00, 0x00, 0x00}, /* Black */ |
| {1, 0x99, 0x3E, 0x3E}, /* Red */ |
| {2, 0x3E, 0x99, 0x3E}, /* Green */ |
| {3, 0x99, 0x99, 0x3E}, /* Brown */ |
| {4, 0x3E, 0x3E, 0x99}, /* Blue */ |
| {5, 0x99, 0x3E, 0x99}, /* Magenta */ |
| {6, 0x3E, 0x99, 0x99}, /* Cyan */ |
| {7, 0x99, 0x99, 0x99}, /* White */ |
| |
| /* Intense colors */ |
| {8, 0x3E, 0x3E, 0x3E}, /* Black */ |
| {9, 0xFF, 0x67, 0x67}, /* Red */ |
| {10, 0x67, 0xFF, 0x67}, /* Green */ |
| {11, 0xFF, 0xFF, 0x67}, /* Brown */ |
| {12, 0x67, 0x67, 0xFF}, /* Blue */ |
| {13, 0xFF, 0x67, 0xFF}, /* Magenta */ |
| {14, 0x67, 0xFF, 0xFF}, /* Cyan */ |
| {15, 0xFF, 0xFF, 0xFF}, /* White */ |
| |
| /* Remainder of xterm's 256-color palette */ |
| {16, 0x00, 0x00, 0x00}, |
| {17, 0x00, 0x00, 0x5F}, |
| {18, 0x00, 0x00, 0x87}, |
| {19, 0x00, 0x00, 0xAF}, |
| {20, 0x00, 0x00, 0xD7}, |
| {21, 0x00, 0x00, 0xFF}, |
| {22, 0x00, 0x5F, 0x00}, |
| {23, 0x00, 0x5F, 0x5F}, |
| {24, 0x00, 0x5F, 0x87}, |
| {25, 0x00, 0x5F, 0xAF}, |
| {26, 0x00, 0x5F, 0xD7}, |
| {27, 0x00, 0x5F, 0xFF}, |
| {28, 0x00, 0x87, 0x00}, |
| {29, 0x00, 0x87, 0x5F}, |
| {30, 0x00, 0x87, 0x87}, |
| {31, 0x00, 0x87, 0xAF}, |
| {32, 0x00, 0x87, 0xD7}, |
| {33, 0x00, 0x87, 0xFF}, |
| {34, 0x00, 0xAF, 0x00}, |
| {35, 0x00, 0xAF, 0x5F}, |
| {36, 0x00, 0xAF, 0x87}, |
| {37, 0x00, 0xAF, 0xAF}, |
| {38, 0x00, 0xAF, 0xD7}, |
| {39, 0x00, 0xAF, 0xFF}, |
| {40, 0x00, 0xD7, 0x00}, |
| {41, 0x00, 0xD7, 0x5F}, |
| {42, 0x00, 0xD7, 0x87}, |
| {43, 0x00, 0xD7, 0xAF}, |
| {44, 0x00, 0xD7, 0xD7}, |
| {45, 0x00, 0xD7, 0xFF}, |
| {46, 0x00, 0xFF, 0x00}, |
| {47, 0x00, 0xFF, 0x5F}, |
| {48, 0x00, 0xFF, 0x87}, |
| {49, 0x00, 0xFF, 0xAF}, |
| {50, 0x00, 0xFF, 0xD7}, |
| {51, 0x00, 0xFF, 0xFF}, |
| {52, 0x5F, 0x00, 0x00}, |
| {53, 0x5F, 0x00, 0x5F}, |
| {54, 0x5F, 0x00, 0x87}, |
| {55, 0x5F, 0x00, 0xAF}, |
| {56, 0x5F, 0x00, 0xD7}, |
| {57, 0x5F, 0x00, 0xFF}, |
| {58, 0x5F, 0x5F, 0x00}, |
| {59, 0x5F, 0x5F, 0x5F}, |
| {60, 0x5F, 0x5F, 0x87}, |
| {61, 0x5F, 0x5F, 0xAF}, |
| {62, 0x5F, 0x5F, 0xD7}, |
| {63, 0x5F, 0x5F, 0xFF}, |
| {64, 0x5F, 0x87, 0x00}, |
| {65, 0x5F, 0x87, 0x5F}, |
| {66, 0x5F, 0x87, 0x87}, |
| {67, 0x5F, 0x87, 0xAF}, |
| {68, 0x5F, 0x87, 0xD7}, |
| {69, 0x5F, 0x87, 0xFF}, |
| {70, 0x5F, 0xAF, 0x00}, |
| {71, 0x5F, 0xAF, 0x5F}, |
| {72, 0x5F, 0xAF, 0x87}, |
| {73, 0x5F, 0xAF, 0xAF}, |
| {74, 0x5F, 0xAF, 0xD7}, |
| {75, 0x5F, 0xAF, 0xFF}, |
| {76, 0x5F, 0xD7, 0x00}, |
| {77, 0x5F, 0xD7, 0x5F}, |
| {78, 0x5F, 0xD7, 0x87}, |
| {79, 0x5F, 0xD7, 0xAF}, |
| {80, 0x5F, 0xD7, 0xD7}, |
| {81, 0x5F, 0xD7, 0xFF}, |
| {82, 0x5F, 0xFF, 0x00}, |
| {83, 0x5F, 0xFF, 0x5F}, |
| {84, 0x5F, 0xFF, 0x87}, |
| {85, 0x5F, 0xFF, 0xAF}, |
| {86, 0x5F, 0xFF, 0xD7}, |
| {87, 0x5F, 0xFF, 0xFF}, |
| {88, 0x87, 0x00, 0x00}, |
| {89, 0x87, 0x00, 0x5F}, |
| {90, 0x87, 0x00, 0x87}, |
| {91, 0x87, 0x00, 0xAF}, |
| {92, 0x87, 0x00, 0xD7}, |
| {93, 0x87, 0x00, 0xFF}, |
| {94, 0x87, 0x5F, 0x00}, |
| {95, 0x87, 0x5F, 0x5F}, |
| {96, 0x87, 0x5F, 0x87}, |
| {97, 0x87, 0x5F, 0xAF}, |
| {98, 0x87, 0x5F, 0xD7}, |
| {99, 0x87, 0x5F, 0xFF}, |
| {100, 0x87, 0x87, 0x00}, |
| {101, 0x87, 0x87, 0x5F}, |
| {102, 0x87, 0x87, 0x87}, |
| {103, 0x87, 0x87, 0xAF}, |
| {104, 0x87, 0x87, 0xD7}, |
| {105, 0x87, 0x87, 0xFF}, |
| {106, 0x87, 0xAF, 0x00}, |
| {107, 0x87, 0xAF, 0x5F}, |
| {108, 0x87, 0xAF, 0x87}, |
| {109, 0x87, 0xAF, 0xAF}, |
| {110, 0x87, 0xAF, 0xD7}, |
| {111, 0x87, 0xAF, 0xFF}, |
| {112, 0x87, 0xD7, 0x00}, |
| {113, 0x87, 0xD7, 0x5F}, |
| {114, 0x87, 0xD7, 0x87}, |
| {115, 0x87, 0xD7, 0xAF}, |
| {116, 0x87, 0xD7, 0xD7}, |
| {117, 0x87, 0xD7, 0xFF}, |
| {118, 0x87, 0xFF, 0x00}, |
| {119, 0x87, 0xFF, 0x5F}, |
| {120, 0x87, 0xFF, 0x87}, |
| {121, 0x87, 0xFF, 0xAF}, |
| {122, 0x87, 0xFF, 0xD7}, |
| {123, 0x87, 0xFF, 0xFF}, |
| {124, 0xAF, 0x00, 0x00}, |
| {125, 0xAF, 0x00, 0x5F}, |
| {126, 0xAF, 0x00, 0x87}, |
| {127, 0xAF, 0x00, 0xAF}, |
| {128, 0xAF, 0x00, 0xD7}, |
| {129, 0xAF, 0x00, 0xFF}, |
| {130, 0xAF, 0x5F, 0x00}, |
| {131, 0xAF, 0x5F, 0x5F}, |
| {132, 0xAF, 0x5F, 0x87}, |
| {133, 0xAF, 0x5F, 0xAF}, |
| {134, 0xAF, 0x5F, 0xD7}, |
| {135, 0xAF, 0x5F, 0xFF}, |
| {136, 0xAF, 0x87, 0x00}, |
| {137, 0xAF, 0x87, 0x5F}, |
| {138, 0xAF, 0x87, 0x87}, |
| {139, 0xAF, 0x87, 0xAF}, |
| {140, 0xAF, 0x87, 0xD7}, |
| {141, 0xAF, 0x87, 0xFF}, |
| {142, 0xAF, 0xAF, 0x00}, |
| {143, 0xAF, 0xAF, 0x5F}, |
| {144, 0xAF, 0xAF, 0x87}, |
| {145, 0xAF, 0xAF, 0xAF}, |
| {146, 0xAF, 0xAF, 0xD7}, |
| {147, 0xAF, 0xAF, 0xFF}, |
| {148, 0xAF, 0xD7, 0x00}, |
| {149, 0xAF, 0xD7, 0x5F}, |
| {150, 0xAF, 0xD7, 0x87}, |
| {151, 0xAF, 0xD7, 0xAF}, |
| {152, 0xAF, 0xD7, 0xD7}, |
| {153, 0xAF, 0xD7, 0xFF}, |
| {154, 0xAF, 0xFF, 0x00}, |
| {155, 0xAF, 0xFF, 0x5F}, |
| {156, 0xAF, 0xFF, 0x87}, |
| {157, 0xAF, 0xFF, 0xAF}, |
| {158, 0xAF, 0xFF, 0xD7}, |
| {159, 0xAF, 0xFF, 0xFF}, |
| {160, 0xD7, 0x00, 0x00}, |
| {161, 0xD7, 0x00, 0x5F}, |
| {162, 0xD7, 0x00, 0x87}, |
| {163, 0xD7, 0x00, 0xAF}, |
| {164, 0xD7, 0x00, 0xD7}, |
| {165, 0xD7, 0x00, 0xFF}, |
| {166, 0xD7, 0x5F, 0x00}, |
| {167, 0xD7, 0x5F, 0x5F}, |
| {168, 0xD7, 0x5F, 0x87}, |
| {169, 0xD7, 0x5F, 0xAF}, |
| {170, 0xD7, 0x5F, 0xD7}, |
| {171, 0xD7, 0x5F, 0xFF}, |
| {172, 0xD7, 0x87, 0x00}, |
| {173, 0xD7, 0x87, 0x5F}, |
| {174, 0xD7, 0x87, 0x87}, |
| {175, 0xD7, 0x87, 0xAF}, |
| {176, 0xD7, 0x87, 0xD7}, |
| {177, 0xD7, 0x87, 0xFF}, |
| {178, 0xD7, 0xAF, 0x00}, |
| {179, 0xD7, 0xAF, 0x5F}, |
| {180, 0xD7, 0xAF, 0x87}, |
| {181, 0xD7, 0xAF, 0xAF}, |
| {182, 0xD7, 0xAF, 0xD7}, |
| {183, 0xD7, 0xAF, 0xFF}, |
| {184, 0xD7, 0xD7, 0x00}, |
| {185, 0xD7, 0xD7, 0x5F}, |
| {186, 0xD7, 0xD7, 0x87}, |
| {187, 0xD7, 0xD7, 0xAF}, |
| {188, 0xD7, 0xD7, 0xD7}, |
| {189, 0xD7, 0xD7, 0xFF}, |
| {190, 0xD7, 0xFF, 0x00}, |
| {191, 0xD7, 0xFF, 0x5F}, |
| {192, 0xD7, 0xFF, 0x87}, |
| {193, 0xD7, 0xFF, 0xAF}, |
| {194, 0xD7, 0xFF, 0xD7}, |
| {195, 0xD7, 0xFF, 0xFF}, |
| {196, 0xFF, 0x00, 0x00}, |
| {197, 0xFF, 0x00, 0x5F}, |
| {198, 0xFF, 0x00, 0x87}, |
| {199, 0xFF, 0x00, 0xAF}, |
| {200, 0xFF, 0x00, 0xD7}, |
| {201, 0xFF, 0x00, 0xFF}, |
| {202, 0xFF, 0x5F, 0x00}, |
| {203, 0xFF, 0x5F, 0x5F}, |
| {204, 0xFF, 0x5F, 0x87}, |
| {205, 0xFF, 0x5F, 0xAF}, |
| {206, 0xFF, 0x5F, 0xD7}, |
| {207, 0xFF, 0x5F, 0xFF}, |
| {208, 0xFF, 0x87, 0x00}, |
| {209, 0xFF, 0x87, 0x5F}, |
| {210, 0xFF, 0x87, 0x87}, |
| {211, 0xFF, 0x87, 0xAF}, |
| {212, 0xFF, 0x87, 0xD7}, |
| {213, 0xFF, 0x87, 0xFF}, |
| {214, 0xFF, 0xAF, 0x00}, |
| {215, 0xFF, 0xAF, 0x5F}, |
| {216, 0xFF, 0xAF, 0x87}, |
| {217, 0xFF, 0xAF, 0xAF}, |
| {218, 0xFF, 0xAF, 0xD7}, |
| {219, 0xFF, 0xAF, 0xFF}, |
| {220, 0xFF, 0xD7, 0x00}, |
| {221, 0xFF, 0xD7, 0x5F}, |
| {222, 0xFF, 0xD7, 0x87}, |
| {223, 0xFF, 0xD7, 0xAF}, |
| {224, 0xFF, 0xD7, 0xD7}, |
| {225, 0xFF, 0xD7, 0xFF}, |
| {226, 0xFF, 0xFF, 0x00}, |
| {227, 0xFF, 0xFF, 0x5F}, |
| {228, 0xFF, 0xFF, 0x87}, |
| {229, 0xFF, 0xFF, 0xAF}, |
| {230, 0xFF, 0xFF, 0xD7}, |
| {231, 0xFF, 0xFF, 0xFF}, |
| {232, 0x08, 0x08, 0x08}, |
| {233, 0x12, 0x12, 0x12}, |
| {234, 0x1C, 0x1C, 0x1C}, |
| {235, 0x26, 0x26, 0x26}, |
| {236, 0x30, 0x30, 0x30}, |
| {237, 0x3A, 0x3A, 0x3A}, |
| {238, 0x44, 0x44, 0x44}, |
| {239, 0x4E, 0x4E, 0x4E}, |
| {240, 0x58, 0x58, 0x58}, |
| {241, 0x62, 0x62, 0x62}, |
| {242, 0x6C, 0x6C, 0x6C}, |
| {243, 0x76, 0x76, 0x76}, |
| {244, 0x80, 0x80, 0x80}, |
| {245, 0x8A, 0x8A, 0x8A}, |
| {246, 0x94, 0x94, 0x94}, |
| {247, 0x9E, 0x9E, 0x9E}, |
| {248, 0xA8, 0xA8, 0xA8}, |
| {249, 0xB2, 0xB2, 0xB2}, |
| {250, 0xBC, 0xBC, 0xBC}, |
| {251, 0xC6, 0xC6, 0xC6}, |
| {252, 0xD0, 0xD0, 0xD0}, |
| {253, 0xDA, 0xDA, 0xDA}, |
| {254, 0xE4, 0xE4, 0xE4}, |
| {255, 0xEE, 0xEE, 0xEE} |
| |
| }; |
| |
| int guac_terminal_colorcmp(const guac_terminal_color* a, |
| const guac_terminal_color* b) { |
| |
| /* Compare palette index alone if not unknown */ |
| if (a->palette_index != -1 && b->palette_index != -1) |
| return a->palette_index - b->palette_index; |
| |
| /* Consider red component highest order ... */ |
| if (a->red != b->red) |
| return a->red - b->red; |
| |
| /* ... followed by green ... */ |
| if (a->green != b->green) |
| return a->green - b->green; |
| |
| /* ... followed by blue */ |
| if (a->blue != b->blue) |
| return a->blue - b->blue; |
| |
| /* If all components match, colors are equal */ |
| return 0; |
| |
| } |
| |