setup a colors demo

main
Allen Webster 2026-05-14 09:38:21 -07:00
parent c93739f680
commit 6b1e3ed8ba
4 changed files with 88 additions and 0 deletions

BIN
build/colors Executable file

Binary file not shown.

10
build_colors.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
code="$PWD"
opts="-g -Wno-switch"
mkdir -p build
cd build
echo colors
clang $opts $code/src/colors.main.c -lncurses -o colors

View File

@ -24,10 +24,15 @@ load_paths = {
commands = { commands = {
.build_printinput = { .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .build_printinput = { .out = "*compilation*", .footer_panel = true, .save_dirty_files = true,
.win = "build_printinput.bat", .linux = "./build_printinput.sh", .mac = "./build_printinput.sh", }, .win = "build_printinput.bat", .linux = "./build_printinput.sh", .mac = "./build_printinput.sh", },
.build_animate = { .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .build_animate = { .out = "*compilation*", .footer_panel = true, .save_dirty_files = true,
.win = "build_animate.bat", .linux = "./build_animate.sh", .mac = "./build_animate.sh", }, .win = "build_animate.bat", .linux = "./build_animate.sh", .mac = "./build_animate.sh", },
.build_colors = { .out = "*compilation*", .footer_panel = true, .save_dirty_files = true,
.win = "build_colors.bat", .linux = "./build_colors.sh", .mac = "./build_colors.sh", },
}; };
fkey_command = { fkey_command = {
.F1 = "build_printinput", .F1 = "build_printinput",
.F2 = "build_animate", .F2 = "build_animate",
.F3 = "build_colors",
}; };

73
src/colors.main.c Normal file
View File

@ -0,0 +1,73 @@
#include "mr4th/mr4th_base.h"
#include <ncurses.h>
#include "mr4th/mr4th_base.c"
int main(){
Arena *arena = arena_alloc();
// initializes ncurses
initscr();
if (!has_colors()){
goto no_color;
}
start_color();
// settings
noecho();
cbreak();
B32 animating = 1;
// get size
U32 window_x = 0;
U32 window_y = 0;
getmaxyx(stdscr, window_y, window_x);
U32 window_stride = window_x;
// color pairs
struct ColorPairs{
String8 text;
S16 fore;
S16 back;
};
struct ColorPairs color_pairs[] = {
{ str8_lit(" WHITE / BLACK"), COLOR_WHITE , COLOR_BLACK },
{ str8_lit(" RED / BLACK"), COLOR_RED , COLOR_BLACK },
{ str8_lit(" GREEN / BLACK"), COLOR_GREEN , COLOR_BLACK },
{ str8_lit(" BLUE / BLACK"), COLOR_BLUE , COLOR_BLACK },
{ str8_lit(" YELLOW / BLACK"), COLOR_YELLOW , COLOR_BLACK },
{ str8_lit("MAGENTA / BLACK"), COLOR_MAGENTA, COLOR_BLACK },
{ str8_lit(" CYAN / BLACK"), COLOR_CYAN , COLOR_BLACK },
{ str8_lit(" BLACK / WHITE"), COLOR_BLACK , COLOR_WHITE },
{ str8_lit(" BLACK / RED"), COLOR_BLACK , COLOR_RED },
{ str8_lit(" BLACK / GREEN"), COLOR_BLACK , COLOR_GREEN },
{ str8_lit(" BLACK / BLUE"), COLOR_BLACK , COLOR_BLUE },
{ str8_lit(" BLACK / YELLOW"), COLOR_BLACK , COLOR_YELLOW },
{ str8_lit(" BLACK / MAGENTA"), COLOR_BLACK , COLOR_MAGENTA },
{ str8_lit(" BLACK / CYAN"), COLOR_BLACK , COLOR_CYAN },
};
// print
for (S16 i = 0; i < ArrayCount(color_pairs); i += 1){
S16 pair_idx = i + 1;
init_pair(pair_idx, color_pairs[i].fore, color_pairs[i].back);
attron(COLOR_PAIR(pair_idx));
printw("%.*s\n", (S32)color_pairs[i].text.size, color_pairs[i].text.str);
attroff(pair_idx);
}
getch();
endwin();
if (0){ no_color:
endwin();
printf("no ncurses color support\n");
}
return(0);
}