diff options
-rw-r--r-- | rin.c | 73 |
1 files changed, 0 insertions, 73 deletions
@@ -1,73 +0,0 @@ -#include <curses.h> -#include <err.h> -#include <fcntl.h> -#include <unistd.h> -#include <sys/select.h> - -#define MAXBUF 1024 - -int -main() -{ - fd_set rfds; - int bufin[MAXBUF], bufout[MAXBUF], c, in, nin, nout, out, startx, y; - struct timeval tv; - WINDOW *w; - - w = initscr(); - raw(); - noecho(); - timeout(1); - - if((in = open("/var/tmp/r.in", O_RDWR)) == -1) - err(1, "/var/tmp/r.in"); - if((out = open("/var/tmp/r.out", O_RDWR)) == -1) - err(1, "/var/tmp/r.out"); - - tv.tv_sec = 0; - tv.tv_usec = 0; - FD_ZERO(&rfds); - - startx = 0; - nin = 0; - - for(;;){ - FD_SET(out, &rfds); - if(select(out+1, &rfds, NULL, NULL, &tv) > 0){ - nout = read(out, bufout, MAXBUF); - bufout[nout+1] = 0; - printw("%s", bufout); - refresh(); - - startx = -1; - } - if((c = getch()) != ERR){ - if(startx == -1) - startx = getcurx(w); - if(c == 26) /* ^Z */ - break; - if(c == 21){ /* ^U */ -reset: bufin[0] = nin = 0; - y = getcury(w); - move(y, startx); - refresh(); - continue; - } - - bufin[nin++] = c; - - if(c == '\n'){ - bufin[nin] = 0; - dprintf(in, "%s", bufin); - goto reset; - }else{ - printw("%c", c); - refresh(); - } - } - } - - echo(); - noraw(); - endwin(); -} |