git: 9front

Download patch

ref: dc5e2749b2a80e395d47e03ada03d1d66a978032
parent: d0c291c06146693ed6cdc7fb9520716873b5e954
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Wed Nov 7 14:04:26 EST 2012

remove tty(1) command as kbdfs now handles interrupts

--- a/sys/man/1/tty
+++ /dev/null
@@ -1,26 +1,0 @@
-.TH TTY 1
-.SH NAME
-tty \- cooked mode emulator
-.SH SYNOPSIS
-.B tty
-[-D]
-.I cmd
-.I arg1
-.I arg2
-.I ...
-.SH DESCRIPTION
-.PP
-.I Tty
-binds an intermediate "cooked mode" layer between
-.I cmd
-and
-.I /dev/cons.
-.SH EXAMPLE
-.LP
-Provide <DEL> support for a command run on the text console:
-.sp 1
-.EX
-% tty import -c cirno / /n/cirno
-.EE
-.SH SOURCE
-.B /sys/src/cmd/tty.c
--- a/sys/src/cmd/tty.c
+++ /dev/null
@@ -1,306 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <auth.h>
-#include <thread.h>
-#include <fcall.h>
-#include <9p.h>
-
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-
-enum {
-	Stacksz = 8192,
-};
-
-typedef struct Prog {
-	Channel *pidc;
-	char **argv;
-} Prog;
-
-typedef struct Line {
-	uchar *buf;
-	int x, len;
-} Line;
-
-int cons, consctl;
-Channel *rchan, *wchan, *ichan;
-File *devcons;
-
-static void
-killer(void *arg)
-{
-	int *pid = arg;
-	ulong yes;
-	for(;;){
-		yes = recvul(ichan);
-		if(yes)
-			postnote(PNGROUP, *pid, "interrupt");
-	}
-}
-
-static void
-sendline(Channel *c, Line *L)
-{
-	int n, k;
-	Req *r;
-	uchar *s;
-	
-	s = L->buf;
-	n = L->x;
-	do{
-		while(!(r = recvp(c)));
-		k = MIN(n, r->ifcall.count);
-		memcpy(r->ofcall.data, s, k);
-		r->ofcall.count = k;
-		respond(r, nil);
-		s += k;
-		n -= k;
-	}while(n > 0);
-	L->x = 0;
-}
-
-static void
-senderr(Channel *c, char *err)
-{
-	Req *r;
-	while(!(r = recvp(c)));
-	respond(r, err);
-}
-
-static void
-echo(uchar c)
-{
-	write(cons, &c, 1);
-}
-
-static int
-addchar(Line *L, uchar c)
-{
-	int send;
-	
-	send = 0;
-	switch(c){
-	case '\n':
-		send = 1;
-		break;
-	case 4:
-		return 1;
-	case 8:
-		if(L->x > 0){
-			echo(8);
-			L->x--;
-		}
-		return 0;
-	case 21:
-		while(L->x > 0){
-			echo(8);
-			L->x--;
-		}
-		return 0;
-	case 23:
-		while(L->x > 0){
-			c = L->buf[--L->x];
-			echo(8);
-			if(c == ' ' || c == '\t')
-				break;
-		}
-		return 0;
-	case 127:
-		L->x = 0;
-		sendul(ichan, 1);
-		return 1;
-	}
-	echo(c);
-	L->buf[L->x++] = c;
-	if(L->x == L->len)
-		send = 1;
-	return send;
-}
-
-static Line *
-makeline(int len)
-{
-	Line *L;
-	L = malloc(sizeof(*L));
-	L->buf = malloc(len);
-	L->x = 0;
-	L->len = len;
-	return L;
-}
-
-static void
-reader(void *)
-{
-	int n;
-	uchar c;
-	Line *L;
-	char err[ERRMAX];
-	
-	L = makeline(128);
-	for(;;){
-		n = read(cons, &c, 1);
-		if(n < 0){
-			rerrstr(err, sizeof(err));
-			if(L->x > 0)
-				sendline(rchan, L);
-			senderr(rchan, err);
-			continue;
-		}
-		if(addchar(L, c))
-			sendline(rchan, L);
-	}
-}
-
-static void
-writer(void *)
-{
-	Req *r;
-	int n;
-	char err[ERRMAX];
-	
-	for(;;){
-		do
-			r = recvp(wchan);
-		while(!r);
-		
-		n = write(cons, r->ifcall.data, r->ifcall.count);
-		if(n < 0){
-			rerrstr(err, sizeof(err));
-			respond(r, err);
-		}else{
-			r->ofcall.count = n;
-			respond(r, nil);
-		}
-	}
-}
-
-static void
-fsread(Req *r)
-{
-	sendp(rchan, r);
-}
-
-static void
-fswrite(Req *r)
-{
-	sendp(wchan, r);
-}
-
-/* adapted from acme/win */
-int
-lookinbin(char *s)
-{
-	if(s[0] == '/')
-		return 0;
-	if(s[0]=='.' && s[1]=='/')
-		return 0;
-	if(s[0]=='.' && s[1]=='.' && s[2]=='/')
-		return 0;
-	return 1;
-}
-
-char*
-estrstrdup(char *s, char *t)
-{
-	char *u;
-
-	u = malloc(strlen(s)+strlen(t)+1);
-	sprint(u, "%s%s", s, t);
-	return u;
-}
-
-void
-cmdproc(void *arg)
-{
-	Prog *p = arg;
-	char **av = p->argv;
-	char *cmd;
-	
-	rfork(RFCFDG | RFNOTEG);
-	open("/dev/cons", OREAD);
-	open("/dev/cons", OWRITE);
-	dup(1, 2);
-	procexec(p->pidc, av[0], av);
-	if(lookinbin(av[0])){
-		cmd = estrstrdup("/bin/", av[0]);
-		procexec(p->pidc, cmd, av);
-	}
-	threadexitsall("exec");
-}
-
-void
-runcmd(char **argv)
-{
-	Channel *waitc;
-	Channel *pidc;
-	Waitmsg *w;
-	Prog prog;
-	int pid;
-
-	waitc = threadwaitchan();
-	pidc = chancreate(sizeof(int), 0);
-	prog.argv = argv;
-	prog.pidc = pidc;
-	proccreate(cmdproc, &prog, Stacksz);
-	while(recv(pidc, &pid) == -1 || pid == -1);
-	threadcreate(killer, &pid, Stacksz);
-	while(recv(waitc, &w) == -1);
-	free(w);
-}
-
-void
-usage(void)
-{
-	print("usage: tty [-D] cmd arg1 arg2 ...\n");
-	exits("usage");
-}
-
-Srv fs = {
-	.read = fsread,
-	.write = fswrite,
-};
-
-void
-threadmain(int argc, char *argv[])
-{
-	char *user;
-	
-	ARGBEGIN{
-		case 'D':
-			chatty9p++;
-			break;
-		default:
-			usage();
-			break;
-	}ARGEND;
-	
-	if(argc == 0)
-		usage();
-
-	rfork(RFNAMEG);
-	
-	cons = open("/dev/cons", ORDWR);
-	if(cons < 0)
-		sysfatal("cons: %r");
-	consctl = open("/dev/consctl", OWRITE);
-	if(consctl < 0)
-		sysfatal("ctl: %r");
-	fprint(consctl, "rawon\n");
-	
-	rchan = chancreate(sizeof(void *), 8);
-	wchan = chancreate(sizeof(void *), 8);
-	ichan = chancreate(sizeof(ulong), 8);
-
-	proccreate(reader, nil, Stacksz);
-	proccreate(writer, nil, Stacksz);
-	
-	user = getuser();
-	fs.tree = alloctree(user, getuser(), DMDIR|0555, nil);
-	devcons = createfile(fs.tree->root, "cons", user, 0666, nil);
-	threadpostmountsrv(&fs, nil, "/dev", MBEFORE);
-
-	runcmd(argv);
-	
-	close(consctl);
-	close(cons);
-	threadexitsall(nil);
-}
--