aboutsummaryrefslogtreecommitdiff
path: root/lib/tctl/tctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tctl/tctl.c')
-rw-r--r--lib/tctl/tctl.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/tctl/tctl.c b/lib/tctl/tctl.c
index 187d1a9..d54f2dd 100644
--- a/lib/tctl/tctl.c
+++ b/lib/tctl/tctl.c
@@ -4,6 +4,10 @@
#define GET_WIN_SIZE 0x5413
#define SET_WIN_SIZE 0x5414
#define TC_GET_ATTR 0x5401
+#define TC_SET_ATTR 0x5402
+#define FD_FLUSH 0x000b
+#define ICANON 000002
+#define ECHO 000010
window_size_t tctl_get_window_size()
{
@@ -24,3 +28,39 @@ int isatty()
termios_t term;
return ioctl(1, TC_GET_ATTR, &term) == 0;
}
+
+
+int tcgetattr(int fd, termios_t *termios)
+{
+ return ioctl(fd, TC_GET_ATTR, termios);
+}
+
+
+void tcsetattr(int fd, termios_t *termios)
+{
+ ioctl(fd, TC_SET_ATTR, termios);
+}
+
+
+void setcanonical(termios_t *term, int is_canonical)
+{
+ if (is_canonical)
+ term->c_lflag |= ICANON;
+ else
+ term->c_lflag &= ~ICANON;
+}
+
+
+void setecho(termios_t *term, int is_echo)
+{
+ if (is_echo)
+ term->c_lflag |= ECHO;
+ else
+ term->c_lflag &= ~ECHO;
+}
+
+
+void flush(unsigned int fd)
+{
+ ioctl(fd, FD_FLUSH, 0);
+}