/* * 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; }