From 9f34ef6a0b1fd5545112498e2363d784cee8e42e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Wed, 14 Jul 2021 18:43:20 +0200 Subject: Rename rtty to rio, rd to rtty --- Makefile | 6 ++--- rd | 11 -------- rio.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ rtty | 11 ++++++++ rtty.c | 88 ---------------------------------------------------------------- 5 files changed, 102 insertions(+), 102 deletions(-) delete mode 100755 rd create mode 100644 rio.c create mode 100755 rtty delete mode 100644 rtty.c diff --git a/Makefile b/Makefile index bdac189..0554b1c 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -rtty: rtty.c +rio: rio.c -install: rtty - install rd rtty /usr/local/bin +install: rio + install rtty rio /usr/local/bin diff --git a/rd b/rd deleted file mode 100755 index 601b5d1..0000000 --- a/rd +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -# rd -- launch ssh session for rtty - -in=/var/tmp/r.in -out=/var/tmp/r.out -rm $in $out 2>/dev/null -mkfifo $in $out - -<$in 2>&1 >$out ssh -oBatchMode=yes -tt "$@" & -exec rtty diff --git a/rio.c b/rio.c new file mode 100644 index 0000000..88ef214 --- /dev/null +++ b/rio.c @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include +#include + +#define MAXBUF 2048 + +int +main() +{ + char bufin[MAXBUF], bufout[MAXBUF], *bi, *bo; + fd_set rfds0, rfds1; + int c, fdin, fdout, flags, i, nin, nout, state; + struct timeval tv; + + if(!(fdin = open("/var/tmp/r.in", O_WRONLY))) + err(1, "open"); + if(!(fdout = open("/var/tmp/r.out", O_RDONLY))) + err(1, "open"); + + FD_ZERO(&rfds0); + FD_ZERO(&rfds1); + + tv.tv_sec = 0; + tv.tv_usec = 1; + + for(;;){ + /* + * User input is read from standard in and copied the + * input pipe. It is saved in bufin for later use. + */ + FD_SET(0, &rfds0); + if(select(0+1, &rfds0, NULL, NULL, &tv) > 0){ + nout = read(0, bufin, MAXBUF); + bufin[nout] = 0; + dprintf(fdin, "%s", bufin); + fflush(stdout); + } + + /* + * System output is read from the output pipe and copied + * to standard out for the user to see. + */ + FD_SET(fdout, &rfds1); + if(select(fdout+1, &rfds1, NULL, NULL, &tv) > 0){ + nout = read(fdout, bufout, MAXBUF); + if(!nout) continue; + bufout[nout] = 0; + + /* + * Bufin and bufout are copied to the temporary + * pointers bi and bo. Bo is incremented in order + * to skip any potential repetition of the command + * given by the user on standard in. (It is assumed + * that the typed command fits in bufin, i.e. is + * not larger than MAXBUF.) + */ + bi = bufin; + bo = bufout; + for(;;){ + if(*bo == '\n'){ + bo++; + break; + } + if(*bo == 13){ + bo++; + continue; + } + if(*bi != *bo){ + bo = bufout; + break; + } + bi++; bo++; + } + + /* + * Bo is printed and bufin is cleared, so as not + * to perform the skip again, incorrectly. + */ + printf("%s", bo); + fflush(stdout); + bufin[0] = 0; + } + } + +} diff --git a/rtty b/rtty new file mode 100755 index 0000000..e796acb --- /dev/null +++ b/rtty @@ -0,0 +1,11 @@ +#!/bin/sh + +# rtty -- limited, but more responsive remote shell + +in=/var/tmp/r.in +out=/var/tmp/r.out +rm $in $out 2>/dev/null +mkfifo $in $out + +<$in 2>&1 >$out ssh -oBatchMode=yes -tt "$@" & +exec rio diff --git a/rtty.c b/rtty.c deleted file mode 100644 index 88ef214..0000000 --- a/rtty.c +++ /dev/null @@ -1,88 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#define MAXBUF 2048 - -int -main() -{ - char bufin[MAXBUF], bufout[MAXBUF], *bi, *bo; - fd_set rfds0, rfds1; - int c, fdin, fdout, flags, i, nin, nout, state; - struct timeval tv; - - if(!(fdin = open("/var/tmp/r.in", O_WRONLY))) - err(1, "open"); - if(!(fdout = open("/var/tmp/r.out", O_RDONLY))) - err(1, "open"); - - FD_ZERO(&rfds0); - FD_ZERO(&rfds1); - - tv.tv_sec = 0; - tv.tv_usec = 1; - - for(;;){ - /* - * User input is read from standard in and copied the - * input pipe. It is saved in bufin for later use. - */ - FD_SET(0, &rfds0); - if(select(0+1, &rfds0, NULL, NULL, &tv) > 0){ - nout = read(0, bufin, MAXBUF); - bufin[nout] = 0; - dprintf(fdin, "%s", bufin); - fflush(stdout); - } - - /* - * System output is read from the output pipe and copied - * to standard out for the user to see. - */ - FD_SET(fdout, &rfds1); - if(select(fdout+1, &rfds1, NULL, NULL, &tv) > 0){ - nout = read(fdout, bufout, MAXBUF); - if(!nout) continue; - bufout[nout] = 0; - - /* - * Bufin and bufout are copied to the temporary - * pointers bi and bo. Bo is incremented in order - * to skip any potential repetition of the command - * given by the user on standard in. (It is assumed - * that the typed command fits in bufin, i.e. is - * not larger than MAXBUF.) - */ - bi = bufin; - bo = bufout; - for(;;){ - if(*bo == '\n'){ - bo++; - break; - } - if(*bo == 13){ - bo++; - continue; - } - if(*bi != *bo){ - bo = bufout; - break; - } - bi++; bo++; - } - - /* - * Bo is printed and bufin is cleared, so as not - * to perform the skip again, incorrectly. - */ - printf("%s", bo); - fflush(stdout); - bufin[0] = 0; - } - } - -} -- cgit v1.2.3