shithub: 9scripts

Download patch

ref: 78a0ff1d2957d7830f979db0003646f92ac52020
parent: 45d441a4c23ff74c4812c8db8660d8a29e6a1136
author: glenda <glenda@9front.local>
date: Thu Dec 31 18:18:29 EST 2020

removed bins

binary files a/install/irc7/.hg/00changelog.i /dev/null differ
--- a/install/irc7/.hg/branch
+++ /dev/null
@@ -1,1 +1,0 @@
-default
--- a/install/irc7/.hg/branchheads.cache
+++ /dev/null
@@ -1,2 +1,0 @@
-ac16a1e78cdfc12ffd5af66949e50846e580c5e5 1
-ac16a1e78cdfc12ffd5af66949e50846e580c5e5 default
binary files a/install/irc7/.hg/dirstate /dev/null differ
--- a/install/irc7/.hg/hgrc
+++ /dev/null
@@ -1,2 +1,0 @@
-[paths]
-default = https://code.9front.org/hg/irc7
--- a/install/irc7/.hg/requires
+++ /dev/null
@@ -1,3 +1,0 @@
-revlogv1
-store
-fncache
binary files a/install/irc7/.hg/store/00changelog.i /dev/null differ
binary files a/install/irc7/.hg/store/00manifest.i /dev/null differ
binary files a/install/irc7/.hg/store/data/irc.c.i /dev/null differ
binary files a/install/irc7/.hg/store/data/irc.h.i /dev/null differ
binary files a/install/irc7/.hg/store/data/irc.man.i /dev/null differ
binary files a/install/irc7/.hg/store/data/ircsrv.c.i /dev/null differ
binary files a/install/irc7/.hg/store/data/mkfile.i /dev/null differ
--- a/install/irc7/.hg/store/fncache
+++ /dev/null
@@ -1,5 +1,0 @@
-data/irc.c.i
-data/irc.h.i
-data/irc.man.i
-data/ircsrv.c.i
-data/mkfile.i
binary files a/install/irc7/.hg/store/undo /dev/null differ
--- a/install/irc7/.hg/undo.branch
+++ /dev/null
@@ -1,1 +1,0 @@
-default
\ No newline at end of file
binary files a/install/irc7/6.irc /dev/null differ
binary files a/install/irc7/6.ircsrv /dev/null differ
binary files a/install/irc7/irc.6 /dev/null differ
--- a/install/irc7/irc.c
+++ /dev/null
@@ -1,854 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <bio.h>
-#include <draw.h>
-
-char help[] =
-"cmd		explanation/example\n"
-"--------------------------------------------\n"
-"/m		privmsg #chan/nick message\n"
-"/M		mode #chan +nt\n"
-"/j		join #chan\n"
-"/p		part #chan\n"
-"/q		send parameters raw to the server\n"
-"/l		list #chan\n"
-"/n		nick newnick\n"
-"/N		notice #chan/nick message\n"
-"/t		set victim\n"
-"/T		topic #chan newtopic\n"
-"/W		whois nick\n"
-"/w		who nick (a shorter whois)\n";
-
-#define NPAR	14
-
-enum state { Time, Cmd, Prefix, Middle, Trail, Ok };
-
-typedef struct handler Handler;
-
-struct handler {
-	char *cmd;
-	int (*fun)(int fd, char *time, char *pre, char *cmd, char *par[]);
-};
-
-QLock lck;
-int server_in;
-int server_out;
-int scr;
-char *victim;
-char *nick;
-int inacme;		/* running in acme? */
-int	linewidth; 	/* terminal width in # of characters */
-
-int replay;		/* just print the log ma'am */
-
-void setwintitle(char *chan);
-
-int rtcs(int fd, char *cset);
-int wtcs(int fd, char *cset);
-int follow(int fd);
-void getwidth(void);	/* establish the width of the terminal, from mc.c */
-
-int pmsg(int fd, char *time, char *pre, char *cmd, char *par[]);
-int ntc(int fd, char *time, char *pre, char *cmd, char *par[]);
-int generic(int fd, char *time, char *pre, char *cmd, char *par[]);
-int misc(int fd, char *time, char *pre, char *cmd, char *par[]);
-int numeric(int fd, char *time, char *pre, char *cmd, char *par[]);
-
-Handler handlers[] = {
-	{"PRIVMSG", pmsg},
-	{"NOTICE", ntc},
-	{"JOIN", misc},
-	{"PART", misc},
-	{"MODE", misc},
-	{"QUIT", misc},
-	{"TOPIC", misc},
-	{"332", numeric},
-	{"333", numeric},
-	{"352", numeric},
-	{"315", numeric},
-	{"311", numeric},
-	{"319", numeric},
-	{"312", numeric},
-	{"320", numeric},
-	{"317", numeric},
-	{"318", numeric},
-	{nil, nil}
-};
-
-int srvparse(char *line, char **time, char **pre, char **cmd, char *par[], int npar);
-int usrparse(char *ln, char *cmd, char *par[], int npar);
-
-void
-usage(void)
-{
-	char usage[] = "usage: irc [-c charset] [-t victim] [-b lines] [-r file] [/srv/irc [/tmp/irc]]\n";
-	write(1, usage, sizeof(usage)-1);
-	exits("usage");
-}
-
-void
-setwintitle(char *chan)
-{
-	int fd;
-
-	if ((fd = open("/dev/label", OWRITE)) >= 0) {
-		fprint(fd, "%s", chan);
-		close(fd);
-	}
-	if ((fd = open("/dev/acme/ctl", OWRITE)) >= 0) {
-		fprint(fd, "name -IRC/%s\n", chan);
-		close(fd);
-		inacme = 1;
-	}
-}
-
-/* try to find out whether we're running in acme's win -e */
-int
-testacme(void)
-{
-	return access("/dev/acme", OREAD) >= 0 ? 1 : 0;
-}
-
-void
-usrin(void)
-{
-	char *line, *p;
-	char *par[2];
-	char cmd;
-	int n, i;
-
-	Biobuf kbd;
-	Binit(&kbd, 0, OREAD);
-	while ((line = Brdstr(&kbd, '\n', 0)) != nil) {
-		n = utflen(line);
-		if(!inacme) {
-			p = malloc(n);
-			for (i = 0; i < n; ++i)
-				p[i] = '\b';
-			write(scr, p, i);
-			free(p);
-		}
-		qlock(&lck);
-		if (!usrparse(line, &cmd, par, 2)) {
-			switch(cmd) {
-			case 'q':	/* quote, just send the params ... */
-				if(par[0]) {
-					fprint(server_out, "%s %s\r\n", par[0], par[1] ? par[1] : "");
-				} else {
-					fprint(scr, "/q %s %s: not enough arguments\n", par[0], par[1]);
-				}
-				break;
-			case 'M':
-				if(par[0] && par[1]) {
-					fprint(server_out, "MODE %s %s\r\n", par[0], par[1]);
-				} else {
-					fprint(scr, "/M %s %s: not enough arguments\n", par[0], par[1]);
-				}
-				break;
-			case 'm':
-				if(par[0] && par[1]) {
-					fprint(server_out, "PRIVMSG %s :%s\r\n", par[0], par[1]);
-				} else {
-					fprint(scr, "/m %s %s: not enough arguments\n", par[0], par[1]);
-				}
-				break;
-			case 't':
-				if(par[0] != nil) {
-					free(victim);
-					victim = strdup(par[0]);
-					setwintitle(par[0]);
-				}
-				fprint(scr, "*** default victim set to '%s'\n", par[0]);
-				break;
-			case 'T':
-				if(par[0] == nil) 
-					fprint(server_out, "TOPIC %s\r\n", victim);
-				else if(par[1] == nil)
-					fprint(server_out, "TOPIC %s\r\n", par[0]);
-				else
-					fprint(server_out, "TOPIC %s :%s\r\n", par[0], par[1]);
-				break;
-			case 'j':
-				fprint(server_out, "JOIN %s\r\n", par[0] == nil ? victim : par[0]);
-				break;
-			case 'p':
-				fprint(server_out, "PART %s\r\n", par[0] == nil ? victim : par[0]);
-				break;
-			case 'n':
-				if(par[0] != nil) {
-					fprint(server_out, "NICK %s\r\n", par[0]);
-					free(nick);
-					nick = strdup(par[0]);
-				} else {
-					fprint(scr, "%s", help);
-				}
-				break;
-			case 'N':
-				if(par[1] != nil)
-					fprint(server_out, "NOTICE %s :%s\r\n", par[0] == nil ? victim : par[0], par[1]);
-				break;
-			case 'W':
-				fprint(server_out, "WHOIS %s %s\r\n", par[0] == nil ? victim : par[0], par[0]);
-			case 'w':
-				fprint(server_out, "WHO %s\r\n", par[0] == nil ? victim : par[0]);
-				break;
-			case 'l':
-				fprint(server_out, "LIST %s\r\n", par[0] == nil ? victim : par[0]);
-				break;
-			case 'L':
-				fprint(server_out, "NAMES %s\r\n", par[0] == nil ? victim : par[0]);
-				break;
-			case 'f':
-				break;
-			case 'h':
-			case 'H':
-				fprint(scr, "%s", help);
-				break;
-			}
-		} else {
-			fprint(scr, "%s", help);
-		}
-		qunlock(&lck);
-		free(line);
-	}
-	exits(0);
-}
-
-void
-timestamp(char *logtime, char *scrtime, int maxlen)
-{
-	static char *wday[] = { 
-		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
-	};
-	static char *mon[] = { 
-		"Jan", "Feb", "Mar", "Apr", "May", "Jun",
-		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
-	};
-	static int day = 0;
-	Tm *t;
-
-	t = localtime(atol(logtime));
-
-	if (t->mday != day) {
-		day = t->mday;
-		fprint(scr, "-- %s, %02d %s %d --\n",
-		       wday[t->wday], t->mday, mon[t->mon],
-		       t->year + 1900);
-	}
-
-	snprint(scrtime, maxlen, "%02d:%02d:%02d",
-	        t->hour, t->min, t->sec);
-}
-
-void
-srvin(void)
-{
-	char *line;
-	char *time, *pre, *cmd, *par[NPAR];
-	char scrtime[32];
-	Biobuf srv;
-	Binit(&srv, server_in, OREAD);
-
-	while ((line = Brdstr(&srv, '\n', 0)) != nil) {
-		if (!srvparse(line, &time, &pre, &cmd, par, NPAR)) {
-			Handler *hp = handlers;
-			qlock(&lck);
-			timestamp(time, scrtime, sizeof(scrtime));
-			while (hp->cmd != nil) {
-				if (!strcmp(hp->cmd, cmd)) {
-					hp->fun(server_out, scrtime, pre, cmd, par);
-					break;
-				}
-				++hp;
-			}
-			if (hp->cmd == nil)
-				generic(server_out, scrtime, pre, cmd, par);
-			qunlock(&lck);
-		}
-		free(line);
-	}
-}
-
-void
-replayfile(void)
-{
-	char *line;
-	char *time, *pre, *cmd, *par[NPAR];
-	char scrtime[32];
-	Biobuf srv;
-	Binit(&srv, server_in, OREAD);
-
-	while ((line = Brdstr(&srv, '\n', 0)) != nil) {
-		if (!srvparse(line, &time, &pre, &cmd, par, NPAR)) {
-			Handler *hp = handlers;
-			qlock(&lck);
-			timestamp(time, scrtime, sizeof(scrtime));
-			while (hp->cmd != nil) {
-				if (!strcmp(hp->cmd, cmd)) {
-					hp->fun(server_out, scrtime, pre, cmd, par);
-					break;
-				}
-				++hp;
-			}
-			if (hp->cmd == nil)
-				generic(server_out, scrtime, pre, cmd, par);
-			qunlock(&lck);
-		}
-		free(line);
-	}
-}
-
-/* 
- * display the last N lines from the conversation
- * if we have a default target only the conversation with
- * that target will be shown
- */
-void
-seekback(int fd, int lines)
-{
-	Biobuf srv;
-	int found = 0, off;
-	char c, *line;
-
-	if(lines < 0)
-		return;
-
-	Binit(&srv, fd, OREAD);
-
-	Bseek(&srv, -2, 2);
-	while(((off = Boffset(&srv)) > 0) && found < lines) {
-		c = Bgetc(&srv);
-		Bungetc(&srv);
-		if(c == '\n') {
-			Bseek(&srv, 1, 1);
-			line = Brdstr(&srv, '\n', '\0');
-			if(victim) {
-				if(cistrstr(line, victim))
-					found++;
-			} else {
-				found++;
-			}
-			free(line);
-		}
-		Bseek(&srv, off-1, 0);
-	}
-
-	Bterm(&srv);
-}
-
-void
-main(int argc, char *argv[])
-{
-	char *charset = nil;
-	char buf[32], buf2[32], *out = nil, *in = nil;
-	char *arg;
-	int sb = 10;	/* how many lines are we displaying initially */
-	int uipid;
-
-	ARGBEGIN {
-	case 't':
-		victim = strdup(EARGF(usage()));
-		break;
-	case 'b':
-		arg = ARGF();
-		if(arg != nil && arg[0] != '-') 
-			sb = atoi(arg);
-		else 
-			sb = 0;	/* show all text */
-		break;
-	case 'c':
-		charset = EARGF(usage());
-		break;
-	case 'r':
-		replay = 1;
-		sb = 0;
-		break;
-	default:
-		usage();
-	} ARGEND;
-
-	switch(argc) {
-	case 0:
-		break;
-	case 1:
-		if(replay)
-			in = argv[0];
-		else 
-			out = argv[0];
-		break;
-	case 2:
-		out = argv[0];
-		in = argv[1];
-		break;
-	default:
-		usage();
-	}
-
-	if(out == nil) {
-		out = getuser();
-		if(strlen(out) > 4)
-			out[4] = 0;
-		snprint(buf, sizeof buf, "/srv/%sirc", out);
-		out = buf;
-	}
-	if(in == nil) {
-		in = getuser();
-		if(strlen(in) > 4)
-			in[4] = 0;
-		snprint(buf2, sizeof buf2, "/tmp/%sirc", in);
-		in = buf2;
-	}
-
-	if(!replay && (server_out = open(out, OWRITE)) < 0)
-			sysfatal("open write: %s %r", out);
-	if ((server_in = open(in, OREAD)) < 0)
-			sysfatal("open read: %s %r", in);
-
-	inacme = testacme();
-	getwidth();
-
-	if(sb)
-		seekback(server_in, sb);
-
-	while(read(server_in, buf, 1) > 0)
-		if(*buf == '\n')
-			break;
-
-	if(victim && cistrncmp(victim, "MSGS", 4)){
-		setwintitle(victim);
-		fprint(server_out, "JOIN %s\r\n", victim);
-	}
-	scr = 1;
-
-	server_in = follow(server_in);
-
-	if (charset != nil && strcmp(charset, "utf")) {
-		server_out = wtcs(server_out, charset);
-		server_in = rtcs(server_in, charset);
-	}
-
-	if(replay) {
-		replayfile();
-	} else {
-		if ((uipid = rfork(RFPROC|RFFDG|RFMEM)) == 0)
-			srvin();
-
-		usrin();
-
-		postnote(PNPROC, uipid, "kill");
-		while (waitpid() != uipid);
-	}
-
-	exits(0);
-}
-
-int
-wtcs(int fd, char *cset)
-{
-	int totcs[2];
-	int pid;
-
-	pipe(totcs);
-
-	pid = fork();
-
-	if (pid == 0) {
-		dup(totcs[0], 0);
-		dup(fd, 1);
-		close(totcs[1]);
-		execl("/bin/tcs", "tcs", "-f", "utf", "-t", cset, nil);
-		exits("execfailure");
-	}
-	close(totcs[0]);
-
-	return totcs[1];
-}
-
-int
-rtcs(int fd, char *cset)
-{
-	int fromtcs[2];
-	int pid;
-
-	pipe(fromtcs);
-
-	pid = fork();
-
-	if (pid == 0){
-		dup(fromtcs[1], 1);
-		dup(fd, 0);
-		close(fromtcs[0]);
-		execl("/bin/tcs", "tcs", "-f", cset, "-t", "utf", nil);
-		exits("execfailure");
-	}
-	close(fromtcs[1]);
-
-	return fromtcs[0];
-}
-
-int
-follow(int fd)
-{
-	int p[2], pid;
-	long n;
-	char buf[1024];
-	Dir *dp;
-
-	pipe(p);
-
-	pid = fork();
-	if (pid == 0){
-		dup(p[1], 1);
-		dup(fd, 0);
-		close(p[0]);
-		for(;;){
-			while((n = read(0, buf, sizeof(buf))) > 0)
-				write(1, buf, n);
-			sleep(1000);
-			dp = dirfstat(0);
-			free(dp);
-		}
-	}
-	close(p[1]);
-
-	return p[0];
-}
-
-char *
-prenick(char *p)
-{
-	char *n = p;
-	if (p != nil) {
-		while (*p != '\0' && *p != '!') ++p;
-		if (*p != '!')
-			n = nil;
-		*p = '\0';
-	}
-	return n;
-}
-
-int
-pmsg(int, char *time, char *pre, char *, char *par[])
-{
-	int n = 0;
-	char *buf;
-	char *c, *tc;
-
-/*
- *	if sent to victim, or comes from victim to non-channel, print.
- *	otherwise bail out.
- */
-	pre = prenick(pre);
-	if(victim) {
-		if((cistrncmp(victim, "MSGS", 4) == 0) && *par[0] != '#') {
-			/* catch-all for messages, fall through */
-		
-		} else if(cistrcmp(par[0], victim))
-			if(!pre || cistrcmp(pre, victim) || *par[0] == '#')
-				return 0;
-	}
-
-	if(!pre)
-		buf = smprint("%s (%s) ⇐ %s\n", time, par[0], par[1]);
-	else if(*par[0] != '#')
-		buf = smprint("%s (%s) ⇒ %s\n", time, pre, par[1]);
-	else
-		buf = smprint("%s %s → %s\n", time, pre, par[1]);
-	
-	if(!buf)
-		sysfatal("failed to allocate space for message: %r\n");
-
-	c = buf;
-again:
-	if(strlen(c) >= linewidth) {
-		for(tc = c + linewidth; tc > c; tc--) {
-			switch(*tc) {
-			case ' ':
-				*tc = '\0';
-				n += fprint(scr, "%s\n", c);
-				c = tc+1;
-				goto again;
-				break;
-			default:
-				break;
-			}
-		}
-	}
-	n += fprint(scr, "%s", c);
-	free(buf);
-	return n;
-}
-
-int
-ntc(int, char *time, char *pre, char *, char *par[])
-{
-	int n;
-
-/*
- *	if sent to victim, or comes from victim to non-channel, print.
- *	otherwise bail out.
- */
-	pre = prenick(pre);
-	if(victim && cistrcmp(par[0], victim))
-		if(!pre || cistrcmp(pre, victim) || *par[0] == '#')
-			return 0;
-
-	if(!pre)
-		n = fprint(scr, "%s [%s] ⇐\t%s\n", time, par[0], par[1]);
-	else if(*par[0] != '#')
-		n = fprint(scr, "%s [%s] ⇒\t%s\n", time, pre, par[1]);
-	else
-		n = fprint(scr, "%s [%s] %s →\t%s\n", time, par[0], pre, par[1]);
-	return n;
-}
-
-int
-generic(int, char *time, char *pre, char *cmd, char *par[])
-{
-	int i = 0, r;
-	char *nick = prenick(pre);
-
-/*
- *	don't print crud on screens with victim set
- */
-	if(victim)
-		return 0;
-
-	if (nick != nil) 
-		r = fprint(scr, "%s %s (%s)\t", time, cmd, nick);
-	else
-		r = fprint(scr, "%s %s (%s)\t", time, cmd, par[i++]);
-
-	for (; par[i] != nil; ++i)
-		r += fprint(scr, " %s", par[i]);
-
-	r += fprint(scr, "\n");
-
-	return r;
-}
-
-int
-misc(int, char *time, char *pre, char *cmd, char *par[])
-{
-	int i = 0, r;
-	char *nick = prenick(pre);
-
-	if(cistrcmp(cmd,"QUIT"))
-		if(victim && par[0] && cistrcmp(par[0], victim))
-			return 0;	
-
-	if (nick != nil) 
-		r = fprint(scr, "%s %s (%s)\t", time, cmd, nick);
-	else
-		r = fprint(scr, "%s %s %s\t", time, cmd, par[i++]);
-
-	for (; par[i] != nil; ++i)
-		r += fprint(scr, " %s", par[i]);
-
-	r += fprint(scr, "\n");
-
-	return r;
-}
-
-int
-numeric(int, char *time, char *pre, char *cmd, char *par[])
-{
-	int i = 0, r;
-	char *nick = prenick(pre);
-
-	if(victim && par[1] && cistrcmp(par[1], victim))
-		return 0;
-
-	if (nick != nil) 
-		r = fprint(scr, "%s %s (%s)\t", time, cmd, nick);
-	else
-		r = fprint(scr, "%s %s (%s)\t", time, cmd, par[i++]);
-
-	for (; par[i] != nil; ++i)
-		r += fprint(scr, " %s", par[i]);
-
-	r += fprint(scr, "\n");
-
-	return r;
-}
-
-int
-usrparse(char *ln, char *cmd, char *par[], int npar)
-{
-	enum state st = Cmd;
-	int i;
-
-	for(i = 0; i < npar; i++)
-		par[i] = nil;
-
-	if (ln[0] == '/' && npar >= 2) { 
-		*cmd = ln[1];
-		for (i = 1; ln[i] != '\0'; ++i) {
-			switch(st) {
-			case Cmd:
-				if (ln[i] == ' ') {
-					ln[i] = '\0';
-					par[0] = ln+i+1;
-					st = Middle;
-				} else if(ln[i] == '\n') {
-					/* enable commands with no arguments */
-					ln[i] = '\0';
-					par[0] = nil;
-					par[1] = nil;
-					st = Ok;
-				}
-				break;
-			case Middle:
-				if (ln[i] == '\r' || ln[i] == '\n') {
-					ln[i] = '\0';
-					st = Ok;
-				}
-				if (ln[i] == ' ') {
-					ln[i] = '\0';
-					par[1] = ln+i+1;
-					st = Trail;
-				}
-				break;
-			case Trail:
-				if (ln[i] == '\r' || ln[i] == '\n') {
-					ln[i] = '\0';
-					st = Ok;
-				}
-				break;
-			case Ok:
-				if (ln[i] == '\r' || ln[i] == '\n')
-					ln[i] = '\0';
-				break;
-			}
-		}
-	} else {	/* send line to victim by default */
-		st = Ok;
-		*cmd = 'm';
-		for (i = 0; ln[i] != '\0'; ++i)
-			if (ln[i] == '\r' || ln[i] == '\n')
-				ln[i] = '\0';
-		par[0] = victim;
-		par[1] = ln;
-	}
-	return st == Ok ? 0 : 1;
-}
-
-int
-srvparse(char *line, char **time, char **pre, char **cmd, char *par[], int npar)
-{
-	int i;
-	char *p;
-	enum state st = Time;
-
-	*time = *pre = *cmd = nil;
-
-	for (*time = p = line, i = 0; *p != '\0'; ++p) {
-		switch (st) {
-		case Time:
-			if (*p == ' ') {
-				*p = '\0';
-				*cmd = p + 1;
-				st = Cmd;
-			}
-			break;
-		case Cmd:
-			if (*p == ':') {
-				*p = '\0';
-				*pre = p + 1;
-				st = Prefix;
-			} else if (*p == ' ') {
-				*p = '\0';
-				par[i] = p + 1;
-				st = Middle;
-			}
-			break;
-		case Prefix:
-			if (*p == ' ') {
-				*p = '\0';
-				*cmd = p + 1;
-				st = Cmd;
-			}
-			break;
-		case Middle:
-			if (*p == '\r' || *p == '\n') {
-				*p = '\0';
-				st = Ok;
-			} else if (*p == ':') {
-				*p = '\0';
-				par[i] = p + 1;
-				st = Trail;
-			} else if (*p == ' ') {
-				*p = '\0';
-				i = (i + 1) % npar;
-				par[i] = p + 1;
-				st = Middle;
-			}
-			break;
-		case Trail:
-			if (*p == '\r' || *p == '\n') {
-				*p = '\0';
-				st = Ok;
-			}
-			break;
-		case Ok:
-			*p = '\0';
-			break;
-		}
-	}
-	par[(i + 1) % npar] = nil;
-	return st == Ok ? 0 : 1;
-}
-
-void
-getwidth(void)
-{
-	Font *font;
-	int n, fd, mintab;
-	char buf[128], *f[10], *p;
-
-	if(inacme){
-		if((fd = open("/dev/acme/ctl", OREAD)) < 0)
-			return;
-		n = read(fd, buf, sizeof buf-1);
-		close(fd);
-		if(n <= 0)
-			return;
-		buf[n] = 0;
-		n = tokenize(buf, f, nelem(f));
-		if(n < 7)
-			return;
-		if((font = openfont(nil, f[6])) == nil)
-			return;
-		mintab = stringwidth(font, "0");
-		linewidth = atoi(f[5]);
-		linewidth = linewidth/mintab;
-		return;
-	}
-
-	if((p = getenv("font")) == nil)
-		return;
-	if((font = openfont(nil, p)) == nil)
-		return;
-	if((fd = open("/dev/window", OREAD)) < 0)
-		return;
-
-	n = read(fd, buf, 5*12);
-	close(fd);
-
-	if(n < 5*12)
-		return;
-
-	buf[n] = 0;
-	
-	/* window stucture:
-		4 bit left edge
-		1 bit gap
-		12 bit scrollbar
-		4 bit gap
-		text
-		4 bit right edge
-	*/
-	linewidth = atoi(buf+3*12) - atoi(buf+1*12) - (4+1+12+4+4);
-	mintab = stringwidth(font, "0");
-	linewidth = linewidth/mintab;
-}
--- a/install/irc7/irc.h
+++ /dev/null
@@ -1,36 +1,0 @@
-enum {
-	Pmsg,	/* private message */
-	Smsg,	/* server message */
-	Nmsg, 	/* notice */
-	Lmsg, 	/* message sent by the client to server */
-	Cmd,	/* some other event such as a quit/join */
-	Err = -1;
-};
-
-typedef struct Line Line;
-struct Line
-{
-	int type;
-	char *from;		/* who sent the message, can be nil for server messages */	
-	char *uhost;	/* host where the message came from */
-	int mid;		/* message id for server messages	
-	char *to;		/* target for the message */
-	char *cmd;		/* JOIN/QUIT, etc. may be nil */
-	char *text;		/* message text */
-};
-#pragma varargck type "L" Line*
-
-void setwintitle(char *chan);
-
-int rtcs(int fd, char *cset);
-int wtcs(int fd, char *cset);
-int follow(int fd);
-
-int pmsg(int fd, char *pre, char *cmd, char *par[]);
-int ntc(int fd, char *pre, char *cmd, char *par[]);
-int generic(int fd, char *pre, char *cmd, char *par[]);
-int misc(int fd, char *pre, char *cmd, char *par[]);
-int numeric(int fd, char *pre, char *cmd, char *par[]);
-
-#define dprint if(debug) print
-
--- a/install/irc7/irc.man
+++ /dev/null
@@ -1,131 +1,0 @@
-.TH IRC 1
-.SH NAME
-ircsrv, irc \- internet relay chat client and ui
-.SH SYNOPSIS
-.B ircsrv
-[
-.I -s serv
-]
-[
-.I -f file
-]
-.I nickname
-.I [tcp!]irc.server.org
-.br
-.B irc
-[
-.I -e
-]
-[
-.I -c charset
-]
-[
-.I -t victim
-]
-[
-.I -b lines
-]
-[
-.I -r file
-]
-[
-.I -p password
-]
-[
-.I /srv/serv
-[
-.I /tmp/file
-]]
-.SH DESCRIPTION
-.I Ircsrv
-makes a connection to an irc server and reconnects if the connection
-gets broken. It posts a service to /srv and creates (if necessary) an
-append mode log file to /tmp. Default file and service name is a 
-concatenation of 4 first letters of username and the string 
-.I irc
-.
-.PP
-.I Irc
-is a client program that makes use of the service provided by
-.I ircsrv
-and provides a user interface for sending and receiving
-messages.
-.PP
-The command language understood by
-.I irc
-is as follows
-.EX
-/h  this message
-/H	this message
-/m	privmsg #chan/nick message
-/M	mode #chan +nt
-/j	join [ #chan ]
-/p	part [ #chan ]
-/q	send parameters raw to the server
-/l	list [ #chan ]
-/n	nick newnick
-/N	notice #chan/nick message
-/t	set [ victim ]
-/T	topic [ #chan [ newtopic ]]
-/W	whois nick
-/w	who nick (a shorter whois)
-.EE
-.PP
-The
-.I -e
-flag enables SSL, the
-.I -c
-flag sets character set conversion using
-.IR tcs (1),
-the
-.I -r
-flag will cause irc to replay the conversation from the raw file supplied as argument without user interaction,
-the
-.I -b
-flag causes the client to display the last n lines of the default target or 
-conversations if no target is set. Without any arguments
-.I -b
-prints the conversation from the very beginning.
-The
-.I -t
-flag sets the default target to which the messages are
-sent by default if a line written to
-.I irc
-does not begin with /. Irc also prints messages to/from
-the target exclusively if one is set. Irc prints only private messages if the target is set to "MSGS", useful for being notified when a message is sent to your nick without having to monitor all the status information.
-.SH EXAMPLES
-To start up ircsrv on a remote cpu server
-.EX
-cpu -c ircsrv glenda irc.freenode.net
-.EE
-.PP
-To use ircsrv started earlier on a cpu server
-.EX
-import $cpu /srv
-import $cpu /tmp
-irc
-.EE
-.PP
-To start/see/continue a conversation with a specific target (can be #chan or nick)
-.EX
-irc -t \'#plan9\'
-irc -t f2f
-.EE
-.PP
-To run irc within acme start irc inside 
-"win -e":
-.EX
-win -e
-irc -t f2f
-.EE
-.SH SOURCE
-/sys/src/cmd/ircsrv.c
-.br
-/sys/src/cmd/irc.c
-.SH SEE ALSO
-.IR tcs (1),
-.IR faces (1),
-.IR nedmail (1)
-.SH BUGS
-Probably.  Missing functionality includes opening new windows when a
-message from a new target arrives.
binary files a/install/irc7/ircsrv.6 /dev/null differ
--- a/install/irc7/ircsrv.c
+++ /dev/null
@@ -1,255 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <auth.h>
-#include <libsec.h>
-
-char *post;
-char *file;
-int ircfd = -1;	// the irc server
-int logfd;
-int enctls = 0; // ssl/tls
-QLock lck;
-
-char *server;
-char *passwd;
-char *nickname;
-char *realname;
-char *username;
-char *mode = "foo";
-char *unused = "bar";
-
-void ircsrv(void);
-void logger(void);
-void die(void*, char*);
-void reconnect(void);
-
-void
-usage(void)
-{
-	fprint(2, "usage: %s [-e] [-s service] [-f file] [-p pass] nickname [net!]ircserver[!port]\n", argv0);
-	exits("usage");
-}
-
-
-void
-killall(void)
-{
-	postnote(PNGROUP, getpid(), "quit");
-	while(waitpid() != -1)
-		;
-	remove(post);
-	exits(nil);
-}
-
-void
-die(void *, char *)
-{
-	killall();
-}
-
-void
-main(int argc, char *argv[])
-{
-	char *tmp;
-	int p[2], fd;
-
-	ARGBEGIN{
-	case 'f':
-		file = EARGF(usage());
-		break;
-	case 's':
-		post = EARGF(usage());
-		break;
-	case 'r':
-		realname = EARGF(usage());
-		break;
-	case 'e':
-		enctls = 1;
-		break;
-	case 'p':
-		passwd = EARGF(usage());	
-		/* try to obfuscate the password so ps -a won't see it */
-		tmp = passwd;
-		passwd = smprint("%s", tmp);
-		if(passwd) 
-			memset(tmp, '\0', strlen(tmp));
-		else
-			passwd = tmp;
-		break;
-	default:
-		usage();
-	}ARGEND;
-
-	if(argc < 2)
-		usage();
-
-
-	nickname = argv[0];
-	server = argv[1];
-
-	username = getuser();
-
-	if(strlen(username) > 4)
-		username[4] = '\0';
-
-
-	if(post == nil)
-		post = smprint("/srv/%sirc", username);
-	else
-		post = smprint("/srv/%s", post);
-
-	if(file == nil)
-		file = smprint("/tmp/%sirc", username);
-
-	if((logfd = create(file, OWRITE, 0600 | DMAPPEND)) < 0)
-		sysfatal("create(%s): %r", file);
-
-	if((fd = create(post, OWRITE, 0600)) < 0)
-		sysfatal("create(%s): %r", post);
-	if(pipe(p) == -1)
-		sysfatal("pipe: %r");
-	fprint(fd, "%d", p[1]);
-	close(fd);
-	close(p[1]);
-	close(0);
-	close(1);
-	close(2);
-	dup(p[0], 0);
-
-	if(rfork(RFMEM|RFFDG|RFREND|RFPROC|RFNOTEG|RFCENVG|RFNOWAIT) == 0) {
-		notify(die);
-		reconnect();
-		switch(rfork(RFPROC|RFMEM)){
-		case -1:
-			sysfatal("rfork: %r");
-		case 0:
-			notify(die);
-			logger();
-			break;
-		default:
-			ircsrv();
-			break;
-		}
-	}
-	exits(nil);
-}
-
-long
-readln(int fd, void *vp, long len)
-{
-	char *b = vp;
-	while(len > 0 && read(fd, b, 1) > 0){
-		if(*b++ == '\n')
-			break;
-		len--;
-	}
-	return b - (char*)vp;
-}
-
-void
-reregister(void)
-{
-	int n;
-	char nbuf[32];
-
-	strncpy(nbuf, nickname, sizeof(nbuf) - 2);
-	switch(nbuf[strlen(nbuf) - 1]) {
-	case '0':
-	case '1':
-	case '2':
-	case '3':
-	case '4':
-	case '5':
-	case '6':
-	case '7':
-	case '8':
-		nbuf[strlen(nbuf) - 1]++;
-		break;
-	case '9':
-		qlock(&lck);
-		fprint(logfd, "%ld can not register nick, bailing out\n", time(0));
-		qunlock(&lck);
-		die(nil, nil);
-	default:
-		n = strlen(nbuf);
-		nbuf[n] = '0';
-		nbuf[n+1] = '\0';
-		break;
-	}
-	qlock(&lck);
-	fprint(ircfd, "NICK %s\r\n", nbuf);
-	fprint(logfd, "%ld NICK %s\r\n", time(0), nickname);
-	qunlock(&lck);
-}
-
-void
-reconnect(void)
-{
-	TLSconn *conn;
-	if(ircfd >= 0)
-		close(ircfd);
-	if((ircfd = dial(netmkaddr(server, "tcp", "6667"), nil, nil, nil)) < 0)
-		sysfatal("dial %r");
-	if(enctls > 0) {
-		conn = (TLSconn *)mallocz(sizeof *conn, 1);
-        	ircfd = tlsClient(ircfd, conn);
-		if (ircfd < 0) { sysfatal ("tls: %r"); }
-	}
-	if(passwd && strcmp(passwd, ""))
-		fprint(ircfd, "PASS %s\r\n", passwd);
-	fprint(ircfd, "USER %s %s %s :%s\r\n",
-		nickname, mode, unused, realname);
-	fprint(ircfd, "NICK %s\r\n", nickname);
-}
-
-
-void
-logger(void)
-{
-	char buf[513];
-	char *f[3];
-	long n;
-
-	for(;;){
-		while((n = readln(ircfd, buf, sizeof(buf)-1)) > 0){
-			fprint(logfd, "%ld ", time(0));
-			write(logfd, buf, n);
-			buf[n] = 0;
-			n = tokenize(buf, f, nelem(f));
-			if(n == 3 && *f[0] == ':' && !cistrcmp(f[1], "PING")){
-				qlock(&lck);
-				fprint(ircfd, "PONG %s\r\n", f[2]);
-				fprint(logfd, "%ld PONG %s\r\n", time(0), f[2]);
-				qunlock(&lck);
-			} else if(n == 2 && !cistrcmp(f[0], "PING")){
-				qlock(&lck);
-				fprint(ircfd, "PONG %s\r\n", f[1]);
-				fprint(logfd, "%ld PONG %s\r\n", time(0), f[1]);
-				qunlock(&lck);
-			} else if(n == 3 && atoi(f[1]) == 433) {
-				reregister();
-			}
-		}
-		reconnect();
-	}
-}
-
-void
-ircsrv(void)
-{
-	char buf[512];
-	long n;
-
-	while((n = readln(0, buf, sizeof(buf)-1)) > 0){
-		qlock(&lck);
-		fprint(logfd, "%ld ", time(0));
-		if(write(logfd, buf, n) != n)
-			fprint(2, "write to irclog: %r\n");
-		if(write(ircfd, buf, n) != n)
-			fprint(2, "write to ircserver: %r\n");
-		qunlock(&lck);
-	}
-	killall();
-}
-
-
--- a/install/irc7/mkfile
+++ /dev/null
@@ -1,15 +1,0 @@
-</$objtype/mkfile
-MAN=/sys/man/1
-
-TARG=\
-	irc\
-	ircsrv\
-
-BIN=/$objtype/bin
-
-</sys/src/cmd/mkmany
-
-ircman:V:
-	cp irc.man /sys/man/1/irc
-
-install: ircman