commit 02a8a6ac430d7987f9f0b5af9280e72b6b43019f
parent ee4b1cfdb77b67d8e9ca491c3f2f11d9e3805851
Author: Jan Klemkow <j.klemkow@wemelug.de>
Date:   Sun, 25 Oct 2015 01:56:23 +0200
prepare terminal handling
Diffstat:
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
@@ -8,7 +8,7 @@ clean:
 	rm -f lchat *.o
 
 lchat: lchat.o slackline.o
-	$(CC) -o $@ lchat.o slackline.o
+	$(CC) -o $@ lchat.o slackline.o -ltermlib
 
 lchat.o: lchat.c
 	$(CC) -c $(CFLAGS) -o $@ lchat.c
diff --git a/lchat.c b/lchat.c
@@ -1,6 +1,7 @@
 #include <err.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <term.h>
 #include <termios.h>
 #include <unistd.h>
 
@@ -20,9 +21,18 @@ main(void)
 {
 	struct termios term;
 	struct slackline *sl = sl_init();
+	char *term_name = getenv("TERM");
 	int fd = STDIN_FILENO;
 	int c;
 
+	if (term_name == NULL)
+		errx(EXIT_FAILURE, "environment TERM is not set");
+
+	switch (tgetent(NULL, term_name)) {
+	case -1: err(EXIT_FAILURE, "tgetent");
+	case 0: errx(EXIT_FAILURE, "no termcap entry found for %s", term_name);
+	}
+
 	if (isatty(fd) == 0)
 		err(EXIT_FAILURE, "isatty");
 
@@ -46,7 +56,8 @@ main(void)
 	setbuf(stdout, NULL);
 
 	while ((c = getchar()) != 13) {
-		sl_keystroke(sl, c);
+		if (sl_keystroke(sl, c) == -1)
+			errx(EXIT_FAILURE, "sl_keystroke");
 		printf("c: %d: buf: %s\r\n", c, sl->buf);
 	}