aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorne_mene <[email protected]>2026-03-01 14:11:22 +0100
committerne_mene <[email protected]>2026-03-01 14:11:22 +0100
commit6f1203a2990aa00e145d640b0814908ed661cb4e (patch)
treecaa72547194575a64677e5aec3d5302e5c7494e0 /src
parentafd081618ddcd7ee0e76858dafb4fb41cb00251a (diff)
tsarc and named pipe
Diffstat (limited to 'src')
-rw-r--r--src/pipe.c61
-rw-r--r--src/pipe.h12
-rw-r--r--src/tsar.c6
3 files changed, 79 insertions, 0 deletions
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 <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <ctype.h>
+
+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 <stdio.h>
+
+#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 <stdarg.h>
#include <string.h>
+#include "pipe.c"
+#include "pipe.h"
#include <xcb/xcb.h>
// #include <X11/Xft/Xft.h>
@@ -92,6 +94,10 @@ void deinit(void) {
}
int main(void) {
+ init_pipe();
+ while (1) {
+ await_change();
+ }
init();
xcb_generic_event_t* ev;