2020-10-04 22:38:33 +02:00
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <stdint.h>
|
2020-10-06 00:49:26 +02:00
|
|
|
#include <stdbool.h>
|
2020-10-04 22:38:33 +02:00
|
|
|
|
|
|
|
#define COLOR_BG(C) printf("\x1b[48;2;%i;%i;%im", C.r, C.g, C.b)
|
|
|
|
#define COLOR_FG(C) printf("\x1b[38;2;%i;%i;%im", C.r, C.g, C.b)
|
|
|
|
#define COLOR_RESET printf("\x1b[00m")
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint8_t r;
|
|
|
|
uint8_t g;
|
|
|
|
uint8_t b;
|
|
|
|
}color;
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
2020-10-18 21:13:40 +02:00
|
|
|
int stripes;
|
2020-10-26 23:39:03 +01:00
|
|
|
int bars;
|
2020-10-04 22:38:33 +02:00
|
|
|
const char *name;
|
2020-10-04 23:48:34 +02:00
|
|
|
const char *description;
|
2020-10-04 22:38:33 +02:00
|
|
|
const color colors[];
|
2020-10-27 01:22:30 +01:00
|
|
|
}flag_t;
|
2020-10-04 22:38:33 +02:00
|
|
|
|
|
|
|
/* common 6-striped pride flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_6 = {
|
2020-10-04 22:38:33 +02:00
|
|
|
.stripes = 6,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-04 22:38:33 +02:00
|
|
|
.name = "pride",
|
|
|
|
.colors = {{.r=0xe7, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0x8c ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0xef ,.b=0x00},
|
|
|
|
{.r=0x00, .g=0x81 ,.b=0x1F},
|
|
|
|
{.r=0x00, .g=0x44 ,.b=0xFF},
|
|
|
|
{.r=0x76, .g=0x00 ,.b=0x98}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2021-02-16 16:20:08 +01:00
|
|
|
/* an ugly attempt at the progress-pride flag */
|
2021-03-13 11:31:05 +01:00
|
|
|
flag_t pride_progress_pixel = {
|
2021-02-16 16:20:08 +01:00
|
|
|
.stripes = 6,
|
|
|
|
.bars = 9,
|
2021-12-28 17:45:13 +01:00
|
|
|
.name = "progress-pixel",
|
2021-02-16 16:20:08 +01:00
|
|
|
.colors = {{.r=0x55, .g=0xcd ,.b=0xfc},{.r=0x64, .g=0x32 ,.b=0x00},{.r=0x00, .g=0x00 ,.b=0x00},{.r=0xe7, .g=0x00 ,.b=0x00},{.r=0xe7, .g=0x00 ,.b=0x00},{.r=0xe7, .g=0x00 ,.b=0x00},{.r=0xe7, .g=0x00 ,.b=0x00},{.r=0xe7, .g=0x00 ,.b=0x00},{.r=0xe7, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0xf7, .g=0xa8 ,.b=0xb8},{.r=0x55, .g=0xcd ,.b=0xfc},{.r=0x64, .g=0x32 ,.b=0x00},{.r=0x00, .g=0x00 ,.b=0x00},{.r=0xff, .g=0x8c ,.b=0x00},{.r=0xff, .g=0x8c ,.b=0x00},{.r=0xff, .g=0x8c ,.b=0x00},{.r=0xff, .g=0x8c ,.b=0x00},{.r=0xff, .g=0x8c ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},{.r=0xf7, .g=0xa8 ,.b=0xb8},{.r=0x55, .g=0xcd ,.b=0xfc},{.r=0x64, .g=0x32 ,.b=0x00},{.r=0x00, .g=0x00 ,.b=0x00},{.r=0xff, .g=0xef ,.b=0x00},{.r=0xff, .g=0xef ,.b=0x00},{.r=0xff, .g=0xef ,.b=0x00},{.r=0xff, .g=0xef ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},{.r=0xf7, .g=0xa8 ,.b=0xb8},{.r=0x55, .g=0xcd ,.b=0xfc},{.r=0x64, .g=0x32 ,.b=0x00},{.r=0x00, .g=0x00 ,.b=0x00},{.r=0x00, .g=0x81 ,.b=0x1F},{.r=0x00, .g=0x81 ,.b=0x1F},{.r=0x00, .g=0x81 ,.b=0x1F},{.r=0x00, .g=0x81 ,.b=0x1F},
|
|
|
|
{.r=0xf7, .g=0xa8 ,.b=0xb8},{.r=0x55, .g=0xcd ,.b=0xfc},{.r=0x64, .g=0x32 ,.b=0x00},{.r=0x00, .g=0x00 ,.b=0x00},{.r=0x00, .g=0x44 ,.b=0xff},{.r=0x00, .g=0x44 ,.b=0xFF},{.r=0x00, .g=0x44 ,.b=0xFF},{.r=0x00, .g=0x44 ,.b=0xFF},{.r=0x00, .g=0x44 ,.b=0xFF},
|
2021-03-13 11:31:05 +01:00
|
|
|
{.r=0x55, .g=0xcd ,.b=0xfc},{.r=0x64, .g=0x32 ,.b=0x00},{.r=0x00, .g=0x00 ,.b=0x00},{.r=0x76, .g=0x00 ,.b=0x98},{.r=0x76, .g=0x00 ,.b=0x98},{.r=0x76, .g=0x00 ,.b=0x98},{.r=0x76, .g=0x00 ,.b=0x98},{.r=0x76, .g=0x00 ,.b=0x98},{.r=0x76, .g=0x00 ,.b=0x98}
|
2021-02-16 16:20:08 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-04 22:38:33 +02:00
|
|
|
/* 7-striped pride flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_7 = {
|
2020-10-04 22:38:33 +02:00
|
|
|
.stripes = 7,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-04 22:38:33 +02:00
|
|
|
.name = "pride-7",
|
|
|
|
.colors = {{.r=0xff, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0x7f ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0x00},
|
|
|
|
{.r=0x00, .g=0xff ,.b=0x00},
|
|
|
|
{.r=0x00, .g=0x00 ,.b=0xff},
|
|
|
|
{.r=0x00, .g=0x4b ,.b=0x82},
|
|
|
|
{.r=0x94, .g=0x00 ,.b=0xd3}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2021-02-16 16:20:08 +01:00
|
|
|
/* harvey milk pride flag (the original pride flag as made by Gilbert Baker) */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_harvey_milk = {
|
2020-10-04 22:38:33 +02:00
|
|
|
.stripes = 8,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-04 22:38:33 +02:00
|
|
|
.name = "harvey-milk",
|
|
|
|
.colors = {{.r=0xff, .g=0x69 ,.b=0xb4},
|
|
|
|
{.r=0xff, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0x8e ,.b=0x00},
|
|
|
|
{.r=0xf0, .g=0xf0 ,.b=0x00},
|
|
|
|
{.r=0x00, .g=0x8e ,.b=0x00},
|
|
|
|
{.r=0x00, .g=0xc0 ,.b=0xc0},
|
|
|
|
{.r=0x40, .g=0x4b ,.b=0x98},
|
|
|
|
{.r=0x8e, .g=0x00 ,.b=0x8e}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2021-02-16 16:20:08 +01:00
|
|
|
/* New pride flag made by Gilbert Baker in 2017 */
|
|
|
|
flag_t pride_gilbert_baker_2017 = {
|
|
|
|
.stripes = 9,
|
|
|
|
.bars = 1,
|
|
|
|
.name = "gilbert-baker-2017",
|
|
|
|
.colors = {{.r=0xce, .g=0x66 ,.b=0xff},
|
|
|
|
{.r=0xff, .g=0x65 ,.b=0x99},
|
|
|
|
{.r=0xff, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0x99 ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0x01},
|
|
|
|
{.r=0x00, .g=0x9a ,.b=0x00},
|
|
|
|
{.r=0x00, .g=0x99 ,.b=0xcc},
|
|
|
|
{.r=0x34, .g=0x00 ,.b=0x99},
|
|
|
|
{.r=0x99, .g=0x00 ,.b=0x99}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-04 22:38:33 +02:00
|
|
|
/* philly pride flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_philly = {
|
2020-10-04 22:38:33 +02:00
|
|
|
.stripes = 8,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-04 22:38:33 +02:00
|
|
|
.name = "philly",
|
|
|
|
.colors = {{.r=0x02, .g=0x02 ,.b=0x02},
|
|
|
|
{.r=0x78, .g=0x4f ,.b=0x17},
|
|
|
|
{.r=0xe7, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0x8c ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0xef ,.b=0x00},
|
|
|
|
{.r=0x00, .g=0x81 ,.b=0x1F},
|
|
|
|
{.r=0x00, .g=0x44 ,.b=0xFF},
|
|
|
|
{.r=0x76, .g=0x00 ,.b=0x98}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2021-02-16 16:20:08 +01:00
|
|
|
/* Estêvão Romane "Love Fest" flag */
|
|
|
|
flag_t pride_love_fest = {
|
|
|
|
.stripes = 9,
|
|
|
|
.bars = 1,
|
|
|
|
.name = "love-fest",
|
|
|
|
.colors = {{.r=0xff, .g=0x69 ,.b=0xb4},
|
|
|
|
{.r=0xff, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0x8e ,.b=0x00},
|
|
|
|
{.r=0xf0, .g=0xf0 ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0x00, .g=0x8e ,.b=0x00},
|
|
|
|
{.r=0x00, .g=0xc0 ,.b=0xc0},
|
|
|
|
{.r=0x40, .g=0x4b ,.b=0x98},
|
|
|
|
{.r=0x8e, .g=0x00 ,.b=0x8e}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-05 14:47:22 +02:00
|
|
|
/* (new) lesbian pride flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_lesbian = {
|
2020-10-05 14:47:22 +02:00
|
|
|
.stripes = 5,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 14:47:22 +02:00
|
|
|
.name = "lesbian",
|
|
|
|
.colors = {{.r=0xd6, .g=0x29 ,.b=0x00},
|
|
|
|
{.r=0xff, .g=0x9b ,.b=0x55},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0xd4, .g=0x61 ,.b=0xa6},
|
|
|
|
{.r=0xa5, .g=0x00 ,.b=0x62}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-05 15:34:06 +02:00
|
|
|
/* older (lipstick) lesbian pride flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_lesbian_7 = {
|
2020-10-05 14:47:22 +02:00
|
|
|
.stripes = 7,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 14:47:22 +02:00
|
|
|
.name = "lesbian-7",
|
|
|
|
.colors = {{.r=0xd5, .g=0x2d ,.b=0x00},
|
|
|
|
{.r=0xef, .g=0x76 ,.b=0x27},
|
|
|
|
{.r=0xff, .g=0x9b ,.b=0x55},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0xd4, .g=0x62 ,.b=0xa5},
|
|
|
|
{.r=0xb5, .g=0x56 ,.b=0x90},
|
|
|
|
{.r=0xa3, .g=0x02 ,.b=0x62}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2021-02-16 16:20:08 +01:00
|
|
|
/* ceterosexual pride flag */
|
|
|
|
flag_t pride_cetero = {
|
|
|
|
.stripes = 5,
|
|
|
|
.bars = 1,
|
|
|
|
.name = "cetero",
|
|
|
|
.colors = {{.r=0xff, .g=0xfd ,.b=0x01},
|
|
|
|
{.r=0x21, .g=0x8e ,.b=0x02},
|
|
|
|
{.r=0xf4, .g=0x56 ,.b=0xe9},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0x00, .g=0x00 ,.b=0x00}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-05 14:47:22 +02:00
|
|
|
/* bisexual pride flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_bi = {
|
2020-10-05 14:47:22 +02:00
|
|
|
.stripes = 5,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 14:47:22 +02:00
|
|
|
.name = "bisexual",
|
|
|
|
.colors = {{.r=0xd6, .g=0x02 ,.b=0x70},
|
|
|
|
{.r=0xd6, .g=0x02 ,.b=0x70},
|
|
|
|
{.r=0x9b, .g=0x4f ,.b=0x96},
|
|
|
|
{.r=0x00, .g=0x38 ,.b=0xa8},
|
|
|
|
{.r=0x00, .g=0x38 ,.b=0xa8}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* pansexual pride flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_pan = {
|
2020-10-05 14:47:22 +02:00
|
|
|
.stripes = 3,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 14:47:22 +02:00
|
|
|
.name = "pansexual",
|
|
|
|
.colors = {{.r=0xd6, .g=0x02 ,.b=0x70},
|
|
|
|
{.r=0xff, .g=0xd8 ,.b=0x00},
|
|
|
|
{.r=0x00, .g=0x38 ,.b=0xa8}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* polysexual pride flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_poly = {
|
2020-10-05 14:47:22 +02:00
|
|
|
.stripes = 3,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 14:47:22 +02:00
|
|
|
.name = "polysexual",
|
|
|
|
.colors = {{.r=0xd6, .g=0x02 ,.b=0x70},
|
|
|
|
{.r=0x4b, .g=0xb1 ,.b=0x66},
|
|
|
|
{.r=0x00, .g=0x38 ,.b=0xa8}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* asexual flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_ace = {
|
2020-10-05 14:47:22 +02:00
|
|
|
.stripes = 4,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 14:47:22 +02:00
|
|
|
.name = "asexual",
|
|
|
|
.colors = {{.r=0x00, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0xc3, .g=0xc3 ,.b=0xc3},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0x84, .g=0x06 ,.b=0x7c}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-05 15:34:06 +02:00
|
|
|
/* flag for aromanticism */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_aro = {
|
2020-10-05 15:34:06 +02:00
|
|
|
.stripes = 5,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 15:34:06 +02:00
|
|
|
.name = "aromantic",
|
|
|
|
.colors = {{.r=0x3d, .g=0xa5 ,.b=0x43},
|
|
|
|
{.r=0xaa, .g=0xce ,.b=0x79},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0xa8, .g=0xa8 ,.b=0xa8},
|
|
|
|
{.r=0x00, .g=0x00 ,.b=0x00}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-04 22:38:33 +02:00
|
|
|
/* trans* pride flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_trans = {
|
2020-10-04 22:38:33 +02:00
|
|
|
.stripes = 5,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-04 22:38:33 +02:00
|
|
|
.name = "trans",
|
|
|
|
.colors = {{.r=0x55, .g=0xcd ,.b=0xfc},
|
|
|
|
{.r=0xf7, .g=0xa8 ,.b=0xb8},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0xf7, .g=0xa8 ,.b=0xb8},
|
|
|
|
{.r=0x55, .g=0xcd ,.b=0xfc}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-04 23:48:34 +02:00
|
|
|
/* flag of the black trans*-community */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_black_trans = {
|
2020-10-04 23:48:34 +02:00
|
|
|
.stripes = 5,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-04 23:48:34 +02:00
|
|
|
.name = "black-trans",
|
|
|
|
.colors = {{.r=0x55, .g=0xcd ,.b=0xfc},
|
|
|
|
{.r=0xf7, .g=0xa8 ,.b=0xb8},
|
|
|
|
{.r=0x00, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0xf7, .g=0xa8 ,.b=0xb8},
|
|
|
|
{.r=0x55, .g=0xcd ,.b=0xfc}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-04 22:38:33 +02:00
|
|
|
/* nonbinary flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_nonbinary = {
|
2020-10-04 22:38:33 +02:00
|
|
|
.stripes = 4,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-04 22:38:33 +02:00
|
|
|
.name = "nonbinary",
|
|
|
|
.colors = {{.r=0x9c, .g=0x5c ,.b=0xd4},
|
2020-10-26 23:39:03 +01:00
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0xfc, .g=0xf4 ,.b=0x34},
|
|
|
|
{.r=0x00, .g=0x00 ,.b=0x00}
|
2020-10-04 22:38:33 +02:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* genderqueer flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_genderqueer = {
|
2020-10-04 22:38:33 +02:00
|
|
|
.stripes = 3,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-04 22:38:33 +02:00
|
|
|
.name = "genderqueer",
|
|
|
|
.colors = {{.r=0xb5, .g=0x7e ,.b=0xdc},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0x4a, .g=0x81 ,.b=0x23}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-05 15:34:06 +02:00
|
|
|
/* neutrois flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_neutrois = {
|
2020-10-05 15:34:06 +02:00
|
|
|
.stripes = 3,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 15:34:06 +02:00
|
|
|
.name = "neutrois",
|
|
|
|
.colors = {{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0x36, .g=0xab ,.b=0x4f},
|
|
|
|
{.r=0x00, .g=0x00 ,.b=0x00}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-06 00:49:26 +02:00
|
|
|
/* androgyne flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_androgyne = {
|
2020-10-26 23:39:03 +01:00
|
|
|
.stripes = 1,
|
|
|
|
.bars = 3,
|
2020-10-06 00:49:26 +02:00
|
|
|
.name = "androgyne",
|
|
|
|
.colors = {{.r=0xfd, .g=0x00 ,.b=0x7e},
|
|
|
|
{.r=0x98, .g=0x33 ,.b=0xff},
|
|
|
|
{.r=0x00, .g=0xb6 ,.b=0xe8}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-05 14:47:22 +02:00
|
|
|
/* flag for genderfluidity */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_genderfluid = {
|
2020-10-05 14:47:22 +02:00
|
|
|
.stripes = 5,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 14:47:22 +02:00
|
|
|
.name = "genderfluid",
|
|
|
|
.colors = {{.r=0xee, .g=0x75 ,.b=0xa1},
|
2020-10-04 22:38:33 +02:00
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
2020-10-05 14:47:22 +02:00
|
|
|
{.r=0x8a, .g=0x44 ,.b=0x93},
|
|
|
|
{.r=0x00, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0x37, .g=0x4a ,.b=0x99}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-05 15:34:06 +02:00
|
|
|
/* agender flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_agender = {
|
2020-10-05 15:34:06 +02:00
|
|
|
.stripes = 7,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 15:34:06 +02:00
|
|
|
.name = "agender",
|
|
|
|
.colors = {{.r=0x00, .g=0x00 ,.b=0x00},
|
|
|
|
{.r=0xba, .g=0xba ,.b=0xba},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0xb9, .g=0xd4 ,.b=0x7d},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0xba, .g=0xba ,.b=0xba},
|
2020-10-05 14:47:22 +02:00
|
|
|
{.r=0x00, .g=0x00 ,.b=0x00}
|
2020-10-04 22:38:33 +02:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-05 15:34:06 +02:00
|
|
|
/* demiboy flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_demiboy = {
|
2020-10-05 15:34:06 +02:00
|
|
|
.stripes = 7,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 15:34:06 +02:00
|
|
|
.name = "demiboy",
|
|
|
|
.colors = {{.r=0x7f, .g=0x7f ,.b=0x7f},
|
|
|
|
{.r=0xc3, .g=0xc5 ,.b=0xc4},
|
|
|
|
{.r=0x9b, .g=0xd5 ,.b=0xe6},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0x9b, .g=0xd5 ,.b=0xe6},
|
|
|
|
{.r=0xc3, .g=0xc5 ,.b=0xc4},
|
|
|
|
{.r=0x7f, .g=0x7f ,.b=0x7f}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* demigirl flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_demigirl = {
|
2020-10-05 15:34:06 +02:00
|
|
|
.stripes = 7,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 15:34:06 +02:00
|
|
|
.name = "demigirl",
|
|
|
|
.colors = {{.r=0x7f, .g=0x7f ,.b=0x7f},
|
|
|
|
{.r=0xc3, .g=0xc5 ,.b=0xc4},
|
|
|
|
{.r=0xf7, .g=0xae ,.b=0xc9},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0xf7, .g=0xae ,.b=0xc9},
|
|
|
|
{.r=0xc3, .g=0xc5 ,.b=0xc4},
|
|
|
|
{.r=0x7f, .g=0x7f ,.b=0x7f}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* bigender flag */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t pride_bigender = {
|
2020-10-05 15:34:06 +02:00
|
|
|
.stripes = 7,
|
2020-10-26 23:39:03 +01:00
|
|
|
.bars = 1,
|
2020-10-05 15:34:06 +02:00
|
|
|
.name = "bigender",
|
|
|
|
.colors = {{.r=0xc4, .g=0x79 ,.b=0xa0},
|
|
|
|
{.r=0xec, .g=0xa6 ,.b=0xcb},
|
|
|
|
{.r=0xd6, .g=0xc7 ,.b=0xe7},
|
|
|
|
{.r=0xff, .g=0xff ,.b=0xff},
|
|
|
|
{.r=0xd6, .g=0xc7 ,.b=0xe7},
|
|
|
|
{.r=0x9b, .g=0xc7 ,.b=0xe8},
|
|
|
|
{.r=0x6b, .g=0x83 ,.b=0xcf}
|
|
|
|
}
|
|
|
|
};
|
2020-10-05 14:47:22 +02:00
|
|
|
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t test_flag = {
|
|
|
|
.stripes = 4,
|
|
|
|
.bars = 3,
|
|
|
|
.name = "test",
|
|
|
|
.colors = {
|
|
|
|
{0,0,255},{0,255,0},{255,0,0},
|
|
|
|
{0,255,255},{255,0,255},{255,255,0},
|
|
|
|
{0,0,0},{128,128,128},{255,255,255},
|
|
|
|
{255,0,0},{128,0,0},{0,0,0}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-10-04 22:38:33 +02:00
|
|
|
/* ----- flags end here ----- */
|
|
|
|
|
|
|
|
/* index of flags */
|
2020-10-27 01:22:30 +01:00
|
|
|
flag_t *flags[] = {
|
2020-10-04 22:38:33 +02:00
|
|
|
&pride_6,
|
2021-03-13 11:31:05 +01:00
|
|
|
&pride_progress_pixel,
|
2020-10-04 22:38:33 +02:00
|
|
|
&pride_7,
|
|
|
|
&pride_harvey_milk,
|
2021-02-16 16:20:08 +01:00
|
|
|
&pride_gilbert_baker_2017,
|
2020-10-04 22:38:33 +02:00
|
|
|
&pride_philly,
|
2021-02-16 16:20:08 +01:00
|
|
|
&pride_love_fest,
|
2020-10-05 14:47:22 +02:00
|
|
|
&pride_lesbian,
|
|
|
|
&pride_lesbian_7,
|
2021-02-16 16:20:08 +01:00
|
|
|
&pride_cetero,
|
2020-10-05 14:47:22 +02:00
|
|
|
&pride_bi,
|
|
|
|
&pride_pan,
|
|
|
|
&pride_poly,
|
|
|
|
&pride_ace,
|
2020-10-05 15:34:06 +02:00
|
|
|
&pride_aro,
|
2020-10-04 23:48:34 +02:00
|
|
|
&pride_black_trans,
|
2020-10-04 22:38:33 +02:00
|
|
|
&pride_trans,
|
|
|
|
&pride_nonbinary,
|
2020-10-05 14:47:22 +02:00
|
|
|
&pride_genderfluid,
|
2020-10-04 22:38:33 +02:00
|
|
|
&pride_genderqueer,
|
2020-10-05 14:47:22 +02:00
|
|
|
&pride_neutrois,
|
2020-10-06 00:49:26 +02:00
|
|
|
&pride_androgyne,
|
2020-10-05 15:34:06 +02:00
|
|
|
&pride_agender,
|
|
|
|
&pride_demiboy,
|
|
|
|
&pride_demigirl,
|
|
|
|
&pride_bigender,
|
2020-10-27 01:22:30 +01:00
|
|
|
&test_flag,
|
2020-10-04 22:38:33 +02:00
|
|
|
NULL};
|
|
|
|
|
2020-10-18 21:34:15 +02:00
|
|
|
|
2020-10-26 23:39:03 +01:00
|
|
|
/* prints bars of a defined length using the unicode 1/8th block characters */
|
|
|
|
/* width: Width of the bar in characters. */
|
|
|
|
/* height: position of the division between FG and BG colors. */
|
|
|
|
/* upper: BG color, acts as the top color of the bar */
|
|
|
|
/* lower: FG color, acts as the bottom color. */
|
|
|
|
/* bg_top: Don't show the upper color, instead use an empty (reset) background. */
|
|
|
|
void print_bar(int width, int height, color upper, color lower, bool bg_top)
|
2020-10-18 21:34:15 +02:00
|
|
|
{
|
2020-10-26 23:39:03 +01:00
|
|
|
if(bg_top){
|
2020-10-26 18:38:02 +01:00
|
|
|
COLOR_RESET;
|
|
|
|
}else{
|
|
|
|
COLOR_BG(upper);
|
|
|
|
}
|
2020-10-18 21:34:15 +02:00
|
|
|
COLOR_FG(lower);
|
|
|
|
for(; width; width--){
|
|
|
|
switch(height){
|
|
|
|
case 0:
|
|
|
|
fputs(" ",stdout);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
fputs("▁",stdout);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
fputs("▂",stdout);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
fputs("▃",stdout);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
fputs("▄",stdout);
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
fputs("▅",stdout);
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
fputs("▆",stdout);
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
fputs("▇",stdout);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
fputs("█",stdout);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
COLOR_RESET;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-10-26 23:39:03 +01:00
|
|
|
|
2020-10-27 01:22:30 +01:00
|
|
|
/* prints scaled flags */
|
2020-10-26 23:39:03 +01:00
|
|
|
/* if scaling isn't possible, the function returns '1', otherwise it returns '0'. */
|
|
|
|
/* Scaling fails if the size is smaller than the amount of (horizontal) stripes */
|
2020-10-27 01:22:30 +01:00
|
|
|
/* *flag: The flag to be printed. */
|
|
|
|
/* size: The desired size (in lines). */
|
|
|
|
int flag_sized(flag_t *flag, int size)
|
2020-10-26 18:38:02 +01:00
|
|
|
{
|
|
|
|
if(flag->stripes <= size){
|
2020-10-26 23:39:03 +01:00
|
|
|
int stripewidth = (size * 8) / flag->stripes;
|
|
|
|
int rest = (size * 8) % flag->stripes;
|
|
|
|
bool transparent = rest?true:false;
|
2020-10-27 01:22:30 +01:00
|
|
|
int breadth = (4 * size) / flag->bars;
|
2020-10-26 18:38:02 +01:00
|
|
|
|
2020-10-27 01:22:30 +01:00
|
|
|
for(int line = 1; line <= size; line++){
|
2020-10-26 23:39:03 +01:00
|
|
|
int stripe = (line * 8 - rest) / stripewidth;
|
|
|
|
int offset = (line * 8 - rest) % stripewidth;
|
2020-10-27 01:22:30 +01:00
|
|
|
|
2020-10-26 23:39:03 +01:00
|
|
|
for(int bar = 1; bar <= flag->bars; bar++){
|
2020-10-27 01:22:30 +01:00
|
|
|
color fg = flag->colors[stripe * flag->bars + (bar - 1)];
|
|
|
|
color bg = flag->colors[((stripe)?
|
|
|
|
(stripe - 1):
|
|
|
|
(stripe)) * flag->bars + (bar - 1)];
|
2020-10-26 23:39:03 +01:00
|
|
|
print_bar(breadth, offset, bg, fg, transparent);
|
|
|
|
}
|
2020-10-26 18:38:02 +01:00
|
|
|
putchar('\n');
|
2020-10-26 23:39:03 +01:00
|
|
|
transparent = false;
|
2020-10-26 18:38:02 +01:00
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2020-10-06 00:49:26 +02:00
|
|
|
|
2020-10-27 01:22:30 +01:00
|
|
|
void flag(flag_t *flag)
|
2020-10-06 00:49:26 +02:00
|
|
|
{
|
2020-10-26 23:39:03 +01:00
|
|
|
flag_sized(flag, 12);
|
2020-10-06 00:49:26 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-11-20 16:25:04 +01:00
|
|
|
|
|
|
|
/* show available flags with name and description*/
|
|
|
|
void option_show()
|
|
|
|
{
|
|
|
|
printf("Available flags:\n");
|
|
|
|
for(int i = 0; flags[i]!=NULL; i++){
|
|
|
|
printf(" %s\n", flags[i]->name);
|
|
|
|
flag_sized(flags[i], 9);
|
|
|
|
}
|
|
|
|
exit(EXIT_SUCCESS);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* list available flags */
|
|
|
|
void option_list()
|
|
|
|
{
|
|
|
|
for(int i = 0; flags[i]!=NULL; i++){
|
|
|
|
printf(" %s\n", flags[i]->name);
|
|
|
|
}
|
|
|
|
exit(EXIT_SUCCESS);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
void option_help()
|
|
|
|
{
|
|
|
|
printf("pride\n\tPrints pride flags.\n\n");
|
|
|
|
printf("Format: pride [options] FLAG\n\n");
|
|
|
|
printf("Options:\n");
|
|
|
|
printf("\t--help -h : Display this message.\n");
|
|
|
|
printf("\t--list : Show a list of the available flags.\n");
|
|
|
|
printf("\t--show : Like --list, but also displays the flags alongside their names.\n");
|
|
|
|
printf("\t--size -s : Adjusts the size of the flag in lines. Default is 12.\n");
|
|
|
|
printf("\t example: pride -s 10 lesbian\n");
|
|
|
|
exit(EXIT_SUCCESS);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2020-10-04 22:38:33 +02:00
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
2021-12-28 17:45:13 +01:00
|
|
|
int size = 0; /* size of the flag, defaults to 12 */
|
2020-10-04 22:38:33 +02:00
|
|
|
if(argc >= 2){
|
|
|
|
const int max_option_length = 30;
|
2021-12-28 17:45:13 +01:00
|
|
|
for(int arg = 1; arg < argc; arg++){
|
2020-10-04 23:48:34 +02:00
|
|
|
if(!strncmp("--list",argv[arg],max_option_length)){
|
2020-11-20 16:25:04 +01:00
|
|
|
option_list();
|
2020-10-04 23:48:34 +02:00
|
|
|
}else if(!strncmp("--show",argv[arg],max_option_length)){
|
2020-11-20 16:25:04 +01:00
|
|
|
option_show();
|
|
|
|
}else if(!strncmp("-h",argv[arg],max_option_length)||
|
|
|
|
!strncmp("--help",argv[arg],max_option_length)){
|
|
|
|
option_help();
|
|
|
|
}else if(!strncmp("-s",argv[arg],max_option_length)||
|
|
|
|
!strncmp("--size",argv[arg],max_option_length)){
|
|
|
|
/* --size, -s : Change the size of the flag in lines.*/
|
2021-12-28 17:45:13 +01:00
|
|
|
if((arg + 1) < argc){
|
2020-11-20 16:25:04 +01:00
|
|
|
arg++;
|
|
|
|
size = atoi(argv[arg]);
|
|
|
|
if(size <= 0){
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
}
|
2020-10-04 22:38:33 +02:00
|
|
|
}
|
2020-10-04 23:48:34 +02:00
|
|
|
}else{
|
|
|
|
/* search for flag */
|
|
|
|
for(int i = 0; flags[i]!=NULL; i++){
|
|
|
|
if(!strncmp(flags[i]->name,argv[arg],max_option_length)){
|
2021-12-28 17:45:13 +01:00
|
|
|
if(size != 0){
|
|
|
|
flag_sized(flags[i], size);
|
|
|
|
}else{
|
|
|
|
flag_sized(flags[i], flags[i]->stripes);
|
|
|
|
}
|
2020-10-04 23:48:34 +02:00
|
|
|
exit(EXIT_SUCCESS);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* if argument unknown, complain loudly */
|
|
|
|
fprintf(stderr,"ERROR: invalid option:\t%s\n",argv[arg]);
|
|
|
|
exit(EXIT_FAILURE);
|
2020-10-04 22:38:33 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
/* if no option given, print 6-stripe pride-flag */
|
2020-10-26 23:39:03 +01:00
|
|
|
flag_sized(&pride_6, 6);
|
2020-10-04 22:38:33 +02:00
|
|
|
}
|
|
|
|
exit(EXIT_SUCCESS);
|
|
|
|
}
|