From 8ad517944e46710ab832350c0dc3fc4e9239f7e2 Mon Sep 17 00:00:00 2001 From: rsc Date: Thu, 25 Mar 2004 23:03:57 +0000 Subject: Today's changes. More changes. --- src/cmd/9term/rcstart.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/cmd/9term/rcstart.c (limited to 'src/cmd/9term/rcstart.c') diff --git a/src/cmd/9term/rcstart.c b/src/cmd/9term/rcstart.c new file mode 100644 index 00000000..7596bc41 --- /dev/null +++ b/src/cmd/9term/rcstart.c @@ -0,0 +1,51 @@ +#include +#include +#include "term.h" + +int +rcstart(int argc, char **argv, int *pfd) +{ + int pid; + int fd[2]; + char *xargv[3]; + char slave[256]; + int sfd; + + if(argc == 0){ + argc = 2; + argv = xargv; + argv[0] = getenv("SHELL"); + if(argv[0] == 0) + argv[0] = "rc"; + argv[1] = "-i"; + argv[2] = 0; + } + /* + * fd0 is slave (tty), fd1 is master (pty) + */ + fd[0] = fd[1] = -1; + if(getpts(fd, slave) < 0) + fprint(2, "getpts: %r\n"); + + + switch(pid = fork()) { + case 0: + putenv("TERM", "9term"); + sfd = childpty(fd, slave); + dup(sfd, 0); + dup(sfd, 1); + dup(sfd, 2); + system("stty tabs -onlcr -echo erase ^h intr ^?"); + execvp(argv[0], argv); + fprint(2, "exec %s failed: %r\n", argv[0]); + _exits("oops"); + break; + case -1: + sysfatal("proc failed: %r"); + break; + } + close(fd[0]); + *pfd = fd[1]; + return pid; +} + -- cgit v1.2.3