JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
add select(2)-based i/o multiplexing
authorMatthias-Christian Ott <ott@enolink.de>
Sat, 14 Jun 2008 21:24:12 +0000 (23:24 +0200)
committerMatthias-Christian Ott <ott@enolink.de>
Sat, 14 Jun 2008 21:24:12 +0000 (23:24 +0200)
std.c

diff --git a/std.c b/std.c
index 961ca55..fbabaa4 100644 (file)
--- a/std.c
+++ b/std.c
@@ -263,20 +263,32 @@ ungetch(int c) {
 
 int
 main(int argc, char *argv[]) {
+       fd_set rfds;
+       int r;
+
        if(argc == 2 && !strcmp("-v", argv[1]))
                eprint("std-"VERSION", © 2008 Matthias-Christian Ott\n");
        else if(argc == 1)
                eprint("usage: st [-v]\n");
        getpty();
        shell();
+       FD_ZERO(&rfds);
+       FD_SET(STDIN_FILENO, &rfds);
+       FD_SET(ptm, &rfds);
        for(;;) {
-               c = getch();
-               switch(c) {
-               case '\033':
-                       parseesc();
-                       break;
-               default:
-                       putchar(c);
+               r = select(ptm + 1, &rfds, NULL, NULL, NULL);
+               if(r == -1)
+                       eprintn("error, cannot select");
+               if(FD_ISSET(ptm, &rfds)) {
+                       c = getch();
+                       switch(c) {
+                       case '\033':
+                               parseesc();
+                               break;
+                       default:
+                               putchar(c);
+                       }
+                       fflush(stdout);
                }
        }
        return 0;