aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-03-19 22:48:25 -0500
committerJesse Luehrs <doy@tozt.net>2013-03-19 22:48:25 -0500
commit771c8bebde83ca8f8395078c44e582e7c25200d0 (patch)
tree558e8dde421af9c917ee75fbc4171335320b87af /src
parent6f9cd4b4e3d8e4078f42213fe8a4947b2369bda0 (diff)
downloadrust-term-771c8bebde83ca8f8395078c44e582e7c25200d0.tar.gz
rust-term-771c8bebde83ca8f8395078c44e582e7c25200d0.zip
more implementations
Diffstat (limited to 'src')
-rw-r--r--src/termios_wrapper.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/termios_wrapper.c b/src/termios_wrapper.c
index 1c6dd70..b23ae2d 100644
--- a/src/termios_wrapper.c
+++ b/src/termios_wrapper.c
@@ -1,15 +1,49 @@
#include <termios.h>
+/* very simplistic, ignores a lot of the settings that i don't understand,
+ * patches welcome */
+
int cooked()
{
+ struct termios t;
+
+ if (tcgetattr(0, &t) == -1) {
+ return 0;
+ }
+
+ t.c_lflag |= (ICANON | ISIG | IEXTEN);
+ t.c_iflag |= (IXON | BRKINT);
+
+ return tcsetattr(0, TCSANOW, &t) == 0;
}
int cbreak()
{
+ struct termios t;
+
+ if (tcgetattr(0, &t) == -1) {
+ return 0;
+ }
+
+ t.c_lflag |= ISIG;
+ t.c_lflag &= ~(ICANON | IEXTEN);
+ t.c_iflag |= (IXON | BRKINT);
+
+ return tcsetattr(0, TCSANOW, &t) == 0;
}
int raw()
{
+ struct termios t;
+
+ if (tcgetattr(0, &t) == -1) {
+ return 0;
+ }
+
+ t.c_lflag &= ~(ICANON | ISIG | IEXTEN);
+ t.c_iflag &= ~(IXON | BRKINT);
+
+ return tcsetattr(0, TCSANOW, &t) == 0;
}
int echo(int enabled)