aboutsummaryrefslogtreecommitdiff
path: root/src/termios.scm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/termios.scm.c')
-rw-r--r--src/termios.scm.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/termios.scm.c b/src/termios.scm.c
new file mode 100644
index 00000000..939c3574
--- /dev/null
+++ b/src/termios.scm.c
@@ -0,0 +1,44 @@
+#include <libguile.h>
+#include <unistd.h>
+#include <termios.h>
+#include <stdio.h>
+
+static struct termios *oldt, *newt;
+
+SCM_DEFINE(termios_lflags_and, "c-lflags-disable!", 2, 0, 0,
+ (SCM _fd, SCM _bits),
+ "")
+{
+
+ int fd = scm_to_int (_fd);
+ int bits = scm_to_int (_bits);
+
+ printf("Setting bits [%x]\n", bits);
+
+ tcgetattr(fd, oldt);
+ *newt = *oldt;
+
+ // Make the terminal not echo back,
+ // along with enabling cononical mode
+ newt->c_lflag &= ~ bits;
+ tcsetattr(fd, TCSANOW, newt);
+ return SCM_UNSPECIFIED;
+}
+
+SCM_DEFINE(termios_restore, "c-lflag-restore!", 1, 0, 0,
+ (SCM _fd),
+ "")
+{
+ int fd = scm_to_int (_fd);
+ tcsetattr(fd, TCSANOW, oldt);
+ return SCM_UNSPECIFIED;
+}
+
+void init_termios (void) {
+ oldt = scm_gc_malloc(sizeof(*oldt), "Termios");
+ newt = scm_gc_malloc(sizeof(*newt), "Termios");
+
+#ifndef SCM_MAGIC_SNARFER
+#include "termios.x"
+#endif
+}