diff options
Diffstat (limited to 'std.c')
| -rw-r--r-- | std.c | 26 |
1 files changed, 19 insertions, 7 deletions
| @@ -263,20 +263,32 @@ ungetch(int c) { | |||
| 263 | 263 | ||
| 264 | int | 264 | int |
| 265 | main(int argc, char *argv[]) { | 265 | main(int argc, char *argv[]) { |
| 266 | fd_set rfds; | ||
| 267 | int r; | ||
| 268 | |||
| 266 | if(argc == 2 && !strcmp("-v", argv[1])) | 269 | if(argc == 2 && !strcmp("-v", argv[1])) |
| 267 | eprint("std-"VERSION", © 2008 Matthias-Christian Ott\n"); | 270 | eprint("std-"VERSION", © 2008 Matthias-Christian Ott\n"); |
| 268 | else if(argc == 1) | 271 | else if(argc == 1) |
| 269 | eprint("usage: st [-v]\n"); | 272 | eprint("usage: st [-v]\n"); |
| 270 | getpty(); | 273 | getpty(); |
| 271 | shell(); | 274 | shell(); |
| 275 | FD_ZERO(&rfds); | ||
| 276 | FD_SET(STDIN_FILENO, &rfds); | ||
| 277 | FD_SET(ptm, &rfds); | ||
| 272 | for(;;) { | 278 | for(;;) { |
| 273 | c = getch(); | 279 | r = select(ptm + 1, &rfds, NULL, NULL, NULL); |
| 274 | switch(c) { | 280 | if(r == -1) |
| 275 | case '\033': | 281 | eprintn("error, cannot select"); |
| 276 | parseesc(); | 282 | if(FD_ISSET(ptm, &rfds)) { |
| 277 | break; | 283 | c = getch(); |
| 278 | default: | 284 | switch(c) { |
| 279 | putchar(c); | 285 | case '\033': |
| 286 | parseesc(); | ||
| 287 | break; | ||
| 288 | default: | ||
| 289 | putchar(c); | ||
| 290 | } | ||
| 291 | fflush(stdout); | ||
| 280 | } | 292 | } |
| 281 | } | 293 | } |
| 282 | return 0; | 294 | return 0; |
