Lines Matching +defs:p +defs:c
1 /* $OpenBSD: colour.c,v 1.28 2024/09/29 20:05:42 nicm Exp $ */
4 * Copyright (c) 2008 Nicholas Marriott <nicholas.marriott@gmail.com>
5 * Copyright (c) 2016 Avi Halachmi <avihpit@yahoo.com>
101 colour_split_rgb(int c, u_char *r, u_char *g, u_char *b)
103 *r = (c >> 16) & 0xff;
104 *g = (c >> 8) & 0xff;
105 *b = c & 0xff;
110 colour_force_rgb(int c)
112 if (c & COLOUR_FLAG_RGB)
113 return (c);
114 if (c & COLOUR_FLAG_256)
115 return (colour_256toRGB(c));
116 if (c >= 0 && c <= 7)
117 return (colour_256toRGB(c));
118 if (c >= 90 && c <= 97)
119 return (colour_256toRGB(8 + c - 90));
125 colour_tostring(int c)
130 if (c == -1)
133 if (c & COLOUR_FLAG_RGB) {
134 colour_split_rgb(c, &r, &g, &b);
139 if (c & COLOUR_FLAG_256) {
140 xsnprintf(s, sizeof s, "colour%u", c & 0xff);
144 switch (c) {
260 colour_256toRGB(int c)
329 return (table[c & 0xff] | COLOUR_FLAG_RGB);
334 colour_256to16(int c)
355 return (table[c & 0xff]);
364 int c;
946 int c;
952 c = strtonum(name + 4, 0, 100, &errstr);
955 c = round(2.55 * c);
956 if (c < 0 || c > 255)
958 return (colour_join_rgb(c, c, c));
962 return (colours[i].c|COLOUR_FLAG_RGB);
969 colour_parseX11(const char *p)
971 double c, m, y, k = 0;
973 size_t len = strlen(p);
977 if ((len == 12 && sscanf(p, "rgb:%02x/%02x/%02x", &r, &g, &b) == 3) ||
978 (len == 7 && sscanf(p, "#%02x%02x%02x", &r, &g, &b) == 3) ||
979 sscanf(p, "%d,%d,%d", &r, &g, &b) == 3)
982 sscanf(p, "rgb:%04x/%04x/%04x", &r, &g, &b) == 3) ||
983 (len == 13 && sscanf(p, "#%04x%04x%04x", &r, &g, &b) == 3))
985 else if ((sscanf(p, "cmyk:%lf/%lf/%lf/%lf", &c, &m, &y, &k) == 4 ||
986 sscanf(p, "cmy:%lf/%lf/%lf", &c, &m, &y) == 3) &&
987 c >= 0 && c <= 1 && m >= 0 && m <= 1 &&
990 (1 - c) * (1 - k) * 255,
994 while (len != 0 && *p == ' ') {
995 p++;
998 while (len != 0 && p[len - 1] == ' ')
1000 copy = xstrndup(p, len);
1004 log_debug("%s: %s = %s", __func__, p, colour_tostring(colour));
1010 colour_palette_init(struct colour_palette *p)
1012 p->fg = 8;
1013 p->bg = 8;
1014 p->palette = NULL;
1015 p->default_palette = NULL;
1020 colour_palette_clear(struct colour_palette *p)
1022 if (p != NULL) {
1023 p->fg = 8;
1024 p->bg = 8;
1025 free(p->palette);
1026 p->palette = NULL;
1032 colour_palette_free(struct colour_palette *p)
1034 if (p != NULL) {
1035 free(p->palette);
1036 p->palette = NULL;
1037 free(p->default_palette);
1038 p->default_palette = NULL;
1044 colour_palette_get(struct colour_palette *p, int c)
1046 if (p == NULL)
1049 if (c >= 90 && c <= 97)
1050 c = 8 + c - 90;
1051 else if (c & COLOUR_FLAG_256)
1052 c &= ~COLOUR_FLAG_256;
1053 else if (c >= 8)
1056 if (p->palette != NULL && p->palette[c] != -1)
1057 return (p->palette[c]);
1058 if (p->default_palette != NULL && p->default_palette[c] != -1)
1059 return (p->default_palette[c]);
1065 colour_palette_set(struct colour_palette *p, int n, int c)
1069 if (p == NULL || n > 255)
1072 if (c == -1 && p->palette == NULL)
1075 if (c != -1 && p->palette == NULL) {
1076 if (p->palette == NULL)
1077 p->palette = xcalloc(256, sizeof *p->palette);
1079 p->palette[i] = -1;
1081 p->palette[n] = c;
1087 colour_palette_from_option(struct colour_palette *p, struct options *oo)
1092 int c;
1094 if (p == NULL)
1099 if (p->default_palette != NULL) {
1100 free(p->default_palette);
1101 p->default_palette = NULL;
1105 if (p->default_palette == NULL)
1106 p->default_palette = xcalloc(256, sizeof *p->default_palette);
1108 p->default_palette[i] = -1;
1112 c = options_array_item_value(a)->number;
1113 p->default_palette[n] = c;