commit - fc1da1d1f8ac2cd6eee51391d2b2e25869d13e72
commit + 804f6ad2688aa55d50bcc5e673f47bad86df4e66
blob - 53f3edb79771597dfdb180d0192175e23cdbb224
blob + e538039175d1b279091cc78e378c882c07cefa0f
--- bxnotify.c
+++ bxnotify.c
/*
- * bxnotify.c for bxnotify
- *
- * A very basic X notification tool, a.k.a Brett's X notify.
+ * bxnotify
+ * A very basic X notification tool, a.k.a Brett's X notifier.
* See LICENSE.md and README.md for details.
*/
+/*
+ * bxnotify.c
+ *
+ * A very basic X notification tool, a.k.a. Brett's X notifier.
+ * See LICENSE.md and README.md for details.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xft/Xft.h>
+
+#include "config.h"
+
+/* Global Variables */
+static Display *dpy;
+static int screen;
+static Window win;
+static XftFont *font;
+static XftDraw *draw;
+static XftColor fg, bg, border;
+static int running = 1;
+static char text[1024];
+
+/* Forward Declarations */
+static void die(const char *fmt, ...);
+static void cleanup(void);
+static void sigusr1(int sig);
+static void setup(void);
+static void readstdin(void);
+static void draw(void);
+static void run(void);
+
+int
+main(int argc, char *argv[])
+{
+ /* TODO: parse cli flags, override config.h */
+
+ readstdin();
+ setup();
+ run();
+ cleanup();
+
+ return 0;
+}
+
+/* implementations */
+
+static void
+die(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ exit(1);
+}
+
+static void
+cleanup(void)
+{
+ if (draw) XftDrawDestroy(draw);
+ if (font) XftFontClose(dpy, font);
+ if (win) XDestroyWindow(dpy, win);
+ if (dpy) XCloseDisplay(dpy);
+}
+
+static void
+sigusr1(int sig)
+{
+ (void)sig;
+ running = 0;
+}
+
+static void
+setup(void)
+{
+ /* TODO: open display, create window, allocate colors, font */
+}
+
+static void
+readstdin(void)
+{
+ /* TODO: read from stdin into text[], handle EOF */
+}
+
+static void
+draw(void)
+{
+ /* TODO: clear, render text, calculate auto-height */
+}
+
+static void
+run(void)
+{
+ /* TODO: event loop with timeout, handle Expose and SIGUSR1 */
+}
+