- /* TODO: Check TTL and maybe blank-out */
- /* TODO: How to trigger TTL check? On select? Alarm signal? */
- /* TODO: Option to set X root window title or print */
- read_all(cfg, buf);
- printf("%s\n", buf);
+ clock_gettime(CLOCK_MONOTONIC, &t0); // FIXME: check errors
+ fifo_read_all(&cfg, &ti, buf);
+ if (cfg.output_to_x_root_window) {
+ if (XStoreName(d, DefaultRootWindow(d), buf) < 0)
+ khlib_fatal("XStoreName failed.\n");
+ XFlush(d);
+ } else {
+ puts(buf);
+ fflush(stdout);
+ }
+ clock_gettime(CLOCK_MONOTONIC, &t1); // FIXME: check errors
+ timespecsub(&t1, &t0, &td);
+ khlib_debug(
+ "td {tv_sec = %ld, tv_nsec = %ld}\n",
+ td.tv_sec,
+ td.tv_nsec
+ );
+ if (timespeccmp(&td, &ti, <)) {
+ /* Pushback on data producers by refusing to read the
+ * pipe more frequently than the interval.
+ */
+ timespecsub(&ti, &td, &tc);
+ khlib_debug("khlib_sleep YES\n");
+ khlib_sleep(&tc);
+ } else {
+ khlib_debug("khlib_sleep NO\n");
+ }