Implement time sensor
authorSiraaj Khandkar <siraaj@khandkar.net>
Mon, 16 Mar 2020 22:48:38 +0000 (18:48 -0400)
committerSiraaj Khandkar <siraaj@khandkar.net>
Mon, 16 Mar 2020 22:48:38 +0000 (18:48 -0400)
x5/.gitignore
x5/Makefile
x5/khatus_lib_time.c
x5/khatus_lib_time.h
x5/khatus_sensor_time.c [new file with mode: 0644]

index fa71cac..09901ba 100644 (file)
@@ -1,2 +1,3 @@
 *.o
 khatus
+khatus_sensor_time
index 1a356f5..c6a0576 100644 (file)
@@ -5,12 +5,17 @@ LDLIBS   := -lX11
 .PHONY: build clean rebuild
 
 build: \
-    khatus
+    khatus \
+    khatus_sensor_time
 
 khatus: \
        khatus_lib_log.o \
        khatus_lib_time.o
 
+khatus_sensor_time: \
+       khatus_lib_log.o \
+       khatus_lib_time.o
+
 khatus_lib_time.o: khatus_lib_log.o
 
 clean:
index ba74226..a169471 100644 (file)
@@ -7,6 +7,20 @@
 #include "khatus_lib_log.h"
 #include "khatus_lib_time.h"
 
+struct timespec
+timespec_of_float(double n)
+{
+       double integral;
+       double fractional;
+       struct timespec t;
+
+       fractional = modf(n, &integral);
+       t.tv_sec = (int) integral;
+       t.tv_nsec = (int) (1E9 * fractional);
+
+       return t;
+}
+
 void
 snooze(struct timespec *t)
 {
index 2d16d65..1d4bb44 100644 (file)
@@ -1 +1,3 @@
+struct timespec timespec_of_float(double);
+
 void snooze(struct timespec *);
diff --git a/x5/khatus_sensor_time.c b/x5/khatus_sensor_time.c
new file mode 100644 (file)
index 0000000..f156f45
--- /dev/null
@@ -0,0 +1,65 @@
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "khatus_lib_log.h"
+#include "khatus_lib_time.h"
+
+char *argv0;
+
+void
+usage()
+{
+       printf(
+           "%s: [OPT ...]\n"
+           "\n"
+           "OPT = -i int     # interval\n"
+           "    | -f string  # format string\n"
+           "    | -h         # help message (i.e. what you're reading now :) )\n",
+           argv0);
+       fatal("usage\n");
+}
+
+int
+main(int argc, char **argv)
+{
+       argv0 = argv[0];
+
+       double opt_interval = 1.0;
+       char *opt_fmt = "%a %b %d %H:%M:%S";
+
+       time_t t;
+       struct timespec ti;
+       char buf[128];
+       char c;
+
+       memset(buf, '\0', 128);
+       while ((c = getopt(argc, argv, "f:i:h")) != -1)
+               switch (c) {
+               case 'f':
+                       opt_fmt = calloc(strlen(optarg), sizeof(char));
+                       strcpy(opt_fmt, optarg);
+                       break;
+               case 'i':
+                       opt_interval = atof(optarg);
+                       break;
+               case 'h':
+                       usage();
+                       break;
+               default:
+                       usage();
+               }
+       ti = timespec_of_float(opt_interval);
+       for (;;) {
+               t = time(NULL);
+               strftime(buf, sizeof(buf), opt_fmt, localtime(&t));
+               puts(buf);
+               fflush(stdout);
+               snooze(&ti);
+       }
+       return EXIT_SUCCESS;
+}
This page took 0.023111 seconds and 4 git commands to generate.