From d23a1125a6ba394da19e560e378a4003f8d448de Mon Sep 17 00:00:00 2001 From: David Delassus Date: Wed, 31 Aug 2011 19:03:29 +0200 Subject: [PATCH] Add FIFO --- wmfs2/TODO | 0 wmfs2/src/barwin.c | 0 wmfs2/src/barwin.h | 0 wmfs2/src/client.c | 0 wmfs2/src/client.h | 0 wmfs2/src/config.c | 0 wmfs2/src/config.h | 0 wmfs2/src/draw.h | 0 wmfs2/src/event.c | 0 wmfs2/src/event.h | 0 wmfs2/src/ewmh.c | 0 wmfs2/src/ewmh.h | 0 wmfs2/src/fifo.c | 53 +++++++++++++++++++++++++++++++++++++++++++ wmfs2/src/fifo.h | 17 ++++++++++++++ wmfs2/src/infobar.c | 0 wmfs2/src/infobar.h | 0 wmfs2/src/parse.c | 0 wmfs2/src/parse.h | 0 wmfs2/src/parse_api.c | 0 wmfs2/src/screen.c | 0 wmfs2/src/screen.h | 0 wmfs2/src/tag.c | 0 wmfs2/src/tag.h | 0 wmfs2/src/util.c | 0 wmfs2/src/util.h | 0 wmfs2/src/wmfs.c | 11 +++++++++ wmfs2/src/wmfs.h | 7 ++++++ 27 files changed, 88 insertions(+) mode change 100755 => 100644 wmfs2/TODO mode change 100755 => 100644 wmfs2/src/barwin.c mode change 100755 => 100644 wmfs2/src/barwin.h mode change 100755 => 100644 wmfs2/src/client.c mode change 100755 => 100644 wmfs2/src/client.h mode change 100755 => 100644 wmfs2/src/config.c mode change 100755 => 100644 wmfs2/src/config.h mode change 100755 => 100644 wmfs2/src/draw.h mode change 100755 => 100644 wmfs2/src/event.c mode change 100755 => 100644 wmfs2/src/event.h mode change 100755 => 100644 wmfs2/src/ewmh.c mode change 100755 => 100644 wmfs2/src/ewmh.h create mode 100644 wmfs2/src/fifo.c create mode 100644 wmfs2/src/fifo.h mode change 100755 => 100644 wmfs2/src/infobar.c mode change 100755 => 100644 wmfs2/src/infobar.h mode change 100755 => 100644 wmfs2/src/parse.c mode change 100755 => 100644 wmfs2/src/parse.h mode change 100755 => 100644 wmfs2/src/parse_api.c mode change 100755 => 100644 wmfs2/src/screen.c mode change 100755 => 100644 wmfs2/src/screen.h mode change 100755 => 100644 wmfs2/src/tag.c mode change 100755 => 100644 wmfs2/src/tag.h mode change 100755 => 100644 wmfs2/src/util.c mode change 100755 => 100644 wmfs2/src/util.h mode change 100755 => 100644 wmfs2/src/wmfs.c mode change 100755 => 100644 wmfs2/src/wmfs.h diff --git a/wmfs2/TODO b/wmfs2/TODO old mode 100755 new mode 100644 diff --git a/wmfs2/src/barwin.c b/wmfs2/src/barwin.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/barwin.h b/wmfs2/src/barwin.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/client.c b/wmfs2/src/client.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/client.h b/wmfs2/src/client.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/config.c b/wmfs2/src/config.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/config.h b/wmfs2/src/config.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/draw.h b/wmfs2/src/draw.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/event.c b/wmfs2/src/event.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/event.h b/wmfs2/src/event.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/ewmh.c b/wmfs2/src/ewmh.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/ewmh.h b/wmfs2/src/ewmh.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/fifo.c b/wmfs2/src/fifo.c new file mode 100644 index 0000000..b2b4a4f --- /dev/null +++ b/wmfs2/src/fifo.c @@ -0,0 +1,53 @@ +/* + * wmfs2 by Martin Duquesnoy { for(i = 2011; i < 2111; ++i) ©(i); } + * For license, see COPYING. + */ + +#include "wmfs.h" +#include "fifo.h" +#include "config.h" + +#define FIFO_DEFAULT_PATH "/tmp/wmfs-fifo" + +void +fifo_init(void) +{ + W->fifo.path = FIFO_DEFAULT_PATH; + + if(mkfifo(W->fifo.path, 0644) < 0 || !(W->fifo.fp = fopen(W->fifo.path, "w+"))) + { + warnx("Can't create FIFO: %s\n", strerror(errno)); + return; + } + + fcntl(fileno(W->fifo.fp), F_SETFL, O_NONBLOCK); +} + +static void +fifo_parse(char *cmd) +{ + void (*func)(Uicb cmd); + char *uicb = strtok(cmd, " "); + char *arg = strtok(NULL, "\n"); + + printf ("%s %s\n", uicb, arg); + + func = uicb_name_func(uicb); + if(func) + func(arg); +} + +void +fifo_read(void) +{ + char buf[256] = {0}; + + /* Don't read it if not open */ + if(!(W->fifo.fp)) return; + + fread(buf, sizeof(buf) - 1, 1, W->fifo.fp); + + if (buf[0]) + fifo_parse(buf); +} + diff --git a/wmfs2/src/fifo.h b/wmfs2/src/fifo.h new file mode 100644 index 0000000..e63457a --- /dev/null +++ b/wmfs2/src/fifo.h @@ -0,0 +1,17 @@ +/* +* wmfs2 by Martin Duquesnoy { for(i = 2011; i < 2111; ++i) ©(i); } +* For license, see COPYING. +*/ + +#ifndef FIFO_H +#define FIFO_H + +#include +#include +#include +#include + +void fifo_init(void); +void fifo_read(void); + +#endif /* FIFO_H */ diff --git a/wmfs2/src/infobar.c b/wmfs2/src/infobar.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/infobar.h b/wmfs2/src/infobar.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/parse.c b/wmfs2/src/parse.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/parse.h b/wmfs2/src/parse.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/parse_api.c b/wmfs2/src/parse_api.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/screen.c b/wmfs2/src/screen.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/screen.h b/wmfs2/src/screen.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/tag.c b/wmfs2/src/tag.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/tag.h b/wmfs2/src/tag.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/util.c b/wmfs2/src/util.c old mode 100755 new mode 100644 diff --git a/wmfs2/src/util.h b/wmfs2/src/util.h old mode 100755 new mode 100644 diff --git a/wmfs2/src/wmfs.c b/wmfs2/src/wmfs.c old mode 100755 new mode 100644 index 0153d1a..bc1fee0 --- a/wmfs2/src/wmfs.c +++ b/wmfs2/src/wmfs.c @@ -15,6 +15,7 @@ #include "util.h" #include "config.h" #include "client.h" +#include "fifo.h" int wmfs_error_handler(Display *d, XErrorEvent *event) @@ -213,8 +214,13 @@ wmfs_loop(void) XEvent ev; while(XPending(W->dpy)) + { while(W->running && !XNextEvent(W->dpy, &ev)) + { HANDLE_EVENT(&ev); + fifo_read(); + } + } } static inline void @@ -225,6 +231,7 @@ wmfs_init(void) screen_init(); event_init(); config_init(); + fifo_init(); } void @@ -243,6 +250,10 @@ wmfs_quit(void) /* Conf stuffs */ FREE_LIST(Keybind, W->h.keybind); + /* FIFO stuffs */ + fclose(W->fifo.fp); + free(W->fifo.path); + W->running = false; } diff --git a/wmfs2/src/wmfs.h b/wmfs2/src/wmfs.h old mode 100755 new mode 100644 index 86264ee..fe42c4a --- a/wmfs2/src/wmfs.h +++ b/wmfs2/src/wmfs.h @@ -207,6 +207,13 @@ struct Wmfs */ Scr33n *screen; + /* FIFO */ + struct + { + FILE *fp; + char *path; + } fifo; + }; int wmfs_error_handler(Display *d, XErrorEvent *event);