diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2019-03-22 20:11:11 +0100 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2019-03-22 20:17:52 +0100 |
commit | d46183860c1f3f10095e95023adcb79b1896ab0e (patch) | |
tree | dd331a0efe9777bfe84160139da1e39df3226b71 /src/termios.scm.c | |
parent | Add stuff to test.scm. (diff) | |
download | calp-d46183860c1f3f10095e95023adcb79b1896ab0e.tar.gz calp-d46183860c1f3f10095e95023adcb79b1896ab0e.tar.xz |
Move C and Scheme code into subdirs.
Diffstat (limited to 'src/termios.scm.c')
-rw-r--r-- | src/termios.scm.c | 44 |
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 +} |