installed pty
[VSoRC/.git] / node_modules / node-pty / deps / winpty / misc / UnixEcho.cc
diff --git a/node_modules/node-pty/deps/winpty/misc/UnixEcho.cc b/node_modules/node-pty/deps/winpty/misc/UnixEcho.cc
new file mode 100644 (file)
index 0000000..372e045
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Unix test code that puts the terminal into raw mode, then echos typed
+ * characters to stdout.  Derived from sample code in the Stevens book, posted
+ * online at http://www.lafn.org/~dave/linux/terminalIO.html.
+ */
+
+#include <termios.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "FormatChar.h"
+
+static struct termios   save_termios;
+static int              term_saved;
+
+/* RAW! mode */
+int tty_raw(int fd)
+{
+    struct termios  buf;
+
+    if (tcgetattr(fd, &save_termios) < 0) /* get the original state */
+        return -1;
+
+    buf = save_termios;
+
+    /* echo off, canonical mode off, extended input
+       processing off, signal chars off */
+    buf.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
+
+    /* no SIGINT on BREAK, CR-to-NL off, input parity
+       check off, don't strip the 8th bit on input,
+       ouput flow control off */
+    buf.c_iflag &= ~(BRKINT | ICRNL | ISTRIP | IXON);
+
+    /* clear size bits, parity checking off */
+    buf.c_cflag &= ~(CSIZE | PARENB);
+
+    /* set 8 bits/char */
+    buf.c_cflag |= CS8;
+
+    /* output processing off */
+    buf.c_oflag &= ~(OPOST);
+
+    buf.c_cc[VMIN] = 1;  /* 1 byte at a time */
+    buf.c_cc[VTIME] = 0; /* no timer on input */
+
+    if (tcsetattr(fd, TCSAFLUSH, &buf) < 0)
+        return -1;
+
+    term_saved = 1;
+
+    return 0;
+}
+
+
+/* set it to normal! */
+int tty_reset(int fd)
+{
+    if (term_saved)
+        if (tcsetattr(fd, TCSAFLUSH, &save_termios) < 0)
+            return -1;
+
+    return 0;
+}
+
+
+int main()
+{
+    tty_raw(0);
+
+    int count = 0;
+    while (true) {
+        char ch;
+        char buf[16];
+        int actual = read(0, &ch, 1);
+        if (actual != 1) {
+            perror("read error");
+            break;
+        }
+        formatChar(buf, ch);
+        fputs(buf, stdout);
+        fflush(stdout);
+        if (ch == 3) // Ctrl-C
+            break;
+    }
+
+    tty_reset(0);
+    return 0;
+}