diff options
| author | Matthias-Christian Ott <ott@enolink.de> | 2008-06-14 23:24:12 +0200 | 
|---|---|---|
| committer | Matthias-Christian Ott <ott@enolink.de> | 2008-06-14 23:24:12 +0200 | 
| commit | f9a0524f9430147a3e4a0d200cb3bbd54d1448a4 (patch) | |
| tree | 302c841b83e9be705defb0ab1af51ce1fa656c08 | |
| parent | a49919a10c11c141f1bfb8414d5c8d2ca9d4a90e (diff) | |
| download | st-f9a0524f9430147a3e4a0d200cb3bbd54d1448a4.tar.xz st-f9a0524f9430147a3e4a0d200cb3bbd54d1448a4.zip | |
add select(2)-based i/o multiplexing
| -rw-r--r-- | std.c | 26 | 
1 files changed, 19 insertions, 7 deletions
| @@ -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; | 
