Browse Source

add select(2)-based i/o multiplexing

Matthias-Christian Ott 17 years ago
parent
commit
f9a0524f94
1 changed files with 19 additions and 7 deletions
  1. 19 7
      std.c

+ 19 - 7
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;