commit ddeeb5b062f0e611a54f1a9af28efc641a3d33af
parent dacb5b0a94bc0fed9ffb5a0fd70829ed6e7c2c5b
Author: Jan Klemkow <j.klemkow@wemelug.de>
Date: Tue, 15 Nov 2016 09:58:17 +0100
add indent filter
Diffstat:
2 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
@@ -24,6 +24,9 @@ lchat.o: lchat.c
$(CC) -c $(CFLAGS) -D_BSD_SOURCE -D_XOPEN_SOURCE -D_GNU_SOURCE \
-o $@ lchat.c
+filter/indent: filter/indent.c
+ $(CC) $(CFLAGS) -o $@ filter/indent.c
+
sl_test.o: sl_test.c slackline.h
$(CC) $(CFLAGS) -c -o $@ sl_test.c
diff --git a/filter/indent.c b/filter/indent.c
@@ -0,0 +1,50 @@
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+int
+main(int argc, char *argv[])
+{
+ char buf[BUFSIZ];
+ char timestr[BUFSIZ];
+ char *fmt = "%H:%m";
+ char *next, *nick, *word;
+ struct tm tm;
+
+ while (fgets(buf, sizeof buf, stdin) != NULL) {
+ next = strptime(buf, "%Y-%m-%d %H:%M ", &tm);
+
+ if (next == NULL || next[0] == '-') {
+ fputs(buf, stdout);
+ continue;
+ }
+
+ nick = strsep(&next, ">");
+ nick++;
+ next++;
+
+ strftime(timestr, sizeof timestr, fmt, &tm);
+
+ /* print prompt */
+ printf("%s %*s", timestr, 12, nick);
+
+ ssize_t pw = 18;
+ ssize_t tw = 104 - pw;
+
+ /* print indented text */
+ while ((word = strsep(&next, " ")) != NULL) {
+ tw -= strlen(word) + 1;
+ if (tw < 0) {
+ fputs("\n ", stdout);
+ tw = 80 - pw;
+ }
+
+ fputc(' ', stdout);
+ fputs(word, stdout);
+ }
+ }
+
+ return EXIT_SUCCESS;
+}