From 6f1203a2990aa00e145d640b0814908ed661cb4e Mon Sep 17 00:00:00 2001 From: ne_mene Date: Sun, 1 Mar 2026 14:11:22 +0100 Subject: tsarc and named pipe --- pipe.txt | 1 + src/pipe.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/pipe.h | 12 ++++++++++++ src/tsar.c | 6 ++++++ tsarc | 3 +-- 5 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 pipe.txt create mode 100644 src/pipe.c create mode 100644 src/pipe.h diff --git a/pipe.txt b/pipe.txt new file mode 100644 index 0000000..1613a2c --- /dev/null +++ b/pipe.txt @@ -0,0 +1 @@ +/tmp/tsarc.pipe diff --git a/src/pipe.c b/src/pipe.c new file mode 100644 index 0000000..88006a4 --- /dev/null +++ b/src/pipe.c @@ -0,0 +1,61 @@ +#include "pipe.h" +#include +#include +#include +#include +#include + +FILE *named_pipe; + +void init_pipe() { + mkfifo(PIPE_PATH, 0666); + named_pipe = fopen(PIPE_PATH, "r"); +} + +void await_change() { + char buff[1024]; + while (1) { + if (!fgets(buff, sizeof(buff), named_pipe)) { + fclose(named_pipe); + named_pipe = fopen(PIPE_PATH, "r"); // This blocks, 0% CPU, yay + continue; + } + break; + } + printf("Received: %s\n", buff); + + int argc = 0, chr_on = 0, i = 0; + char argv[4][256]; + + while (argc < 4) { + char chr = buff[i]; + if (chr == '\0') { + break; + } + + if (isspace(chr)) { + if (chr_on == 0) { + i++; + continue; + } + + argv[argc][chr_on] = '\0'; + argc++; + chr_on = 0; + + } else { + argv[argc][chr_on] = chr; + chr_on++; + } + + i++; + } + make_change(argv, argc); +} + +void make_change(char argv[MAX_ARGS][MAX_ARG_LEN], int argc) { + printf("Making change with:\n"); + for (int i = 0; i < argc; i++) { + printf("Arg %d: %s\n", i + 1, argv[i]); + } +} diff --git a/src/pipe.h b/src/pipe.h new file mode 100644 index 0000000..798a4a1 --- /dev/null +++ b/src/pipe.h @@ -0,0 +1,12 @@ +#ifndef PIPE_H +#define PIPE_H +#include + +#define PIPE_PATH "/tmp/tsarc.pipe" +#define MAX_ARG_LEN 256 +#define MAX_ARGS 4 +void init_pipe(); +void await_change(); +void make_change(char[MAX_ARGS][MAX_ARG_LEN], int); + +#endif diff --git a/src/tsar.c b/src/tsar.c index 67b9e07..b4f9fb2 100644 --- a/src/tsar.c +++ b/src/tsar.c @@ -5,6 +5,8 @@ #include #include +#include "pipe.c" +#include "pipe.h" #include // #include @@ -92,6 +94,10 @@ void deinit(void) { } int main(void) { + init_pipe(); + while (1) { + await_change(); + } init(); xcb_generic_event_t* ev; diff --git a/tsarc b/tsarc index 8c3a87d..26754b2 100755 --- a/tsarc +++ b/tsarc @@ -1,3 +1,2 @@ #! /bin/sh - -echo "This is a future config cli yadayada" +echo "$*" > /tmp/tsarc.pipe -- cgit v1.3-2-g0d8e