You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
2.3 KiB
C
122 lines
2.3 KiB
C
#include <stdio.h>
|
|
#include <errno.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <locale.h>
|
|
#include <notcurses/direct.h>
|
|
|
|
static int
|
|
print_b(struct ncdirect* nc, int r, int g, int total){
|
|
int b = total - (r + g);
|
|
if(b > 255){
|
|
return 0;
|
|
}
|
|
int ret = ncdirect_set_fg_rgb8(nc, r, g, b);
|
|
if(ret){
|
|
return -1;
|
|
}
|
|
if(printf("X") < 0){
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
print_gb(struct ncdirect* nc, int r, int total){
|
|
for(int g = 0 ; g <= total - r && g < 256 ; g += 4){
|
|
if(print_b(nc, r, g, total)){
|
|
return -1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int
|
|
print_rgb8(struct ncdirect* nc, int total){
|
|
if(rand() % 2){
|
|
ncdirect_off_styles(nc, NCSTYLE_ITALIC);
|
|
}
|
|
if(rand() % 16 == 0){
|
|
ncdirect_on_styles(nc, NCSTYLE_ITALIC);
|
|
}
|
|
for(int r = 0 ; r <= total && r < 256 ; r += 4){
|
|
if(print_gb(nc, r, total)){
|
|
return -1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// direct-mode generation of 4096 RGB foregrounds
|
|
int main(void){
|
|
if(!setlocale(LC_ALL, "")){
|
|
return EXIT_FAILURE;
|
|
}
|
|
uint64_t flags = NCDIRECT_OPTION_DRAIN_INPUT;
|
|
struct ncdirect* nc = ncdirect_core_init(NULL, stdout, flags);
|
|
if(!nc){
|
|
return EXIT_FAILURE;
|
|
}
|
|
for(int t = 0 ; t < 768 ; t += 4){
|
|
if(print_rgb8(nc, t)){
|
|
goto err;
|
|
}
|
|
}
|
|
if(ncdirect_flush(nc)){
|
|
goto err;
|
|
}
|
|
|
|
if(ncdirect_set_styles(nc, NCSTYLE_BOLD)){
|
|
goto err;
|
|
}
|
|
for(int t = 768 ; t ; t -= 4){
|
|
if(print_rgb8(nc, t)){
|
|
goto err;
|
|
}
|
|
}
|
|
if(ncdirect_flush(nc)){
|
|
goto err;
|
|
}
|
|
|
|
if(ncdirect_set_styles(nc, NCSTYLE_UNDERLINE)){
|
|
goto err;
|
|
}
|
|
for(int t = 0 ; t < 768 ; t += 4){
|
|
if(print_rgb8(nc, t)){
|
|
goto err;
|
|
}
|
|
}
|
|
if(ncdirect_flush(nc)){
|
|
goto err;
|
|
}
|
|
|
|
ncdirect_set_styles(nc, NCSTYLE_ITALIC);
|
|
for(int t = 768 ; t ; t -= 4){
|
|
if(print_rgb8(nc, t)){
|
|
goto err;
|
|
}
|
|
}
|
|
if(ncdirect_flush(nc)){
|
|
goto err;
|
|
}
|
|
|
|
int leny = ncdirect_dim_y(nc);
|
|
int lenx = ncdirect_dim_x(nc);
|
|
ncdirect_set_fg_default(nc);
|
|
ncdirect_set_bg_default(nc);
|
|
if(ncdirect_cursor_move_yx(nc, leny / 2, (lenx - 4) / 2)){
|
|
goto err;
|
|
}
|
|
ncdirect_on_styles(nc, NCSTYLE_ITALIC);
|
|
printf("dank\n");
|
|
if(ncdirect_stop(nc)){
|
|
return EXIT_FAILURE;
|
|
}
|
|
return EXIT_SUCCESS;
|
|
|
|
err:
|
|
fprintf(stderr, "WE HAD A BAD ERROR YO (%s)\n", strerror(errno));
|
|
ncdirect_stop(nc);
|
|
return EXIT_FAILURE;
|
|
}
|