diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/pipe.c | 61 | ||||
| -rw-r--r-- | src/pipe.h | 12 | ||||
| -rw-r--r-- | src/tsar.c | 6 |
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 @@ -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; |
