shithub: riscv

Download patch

ref: a5268a54131f53b51e778a7f6157da53cdbe3142
parent: ffb0199247c2c748887f0782538545c75a304f88
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Tue Apr 12 21:09:45 EDT 2016

remove unused liboventi

diff: cannot open a/sys/src/liboventi//null: file does not exist: 'a/sys/src/liboventi//null'
--- a/sys/include/oventi.h
+++ /dev/null
@@ -1,271 +1,0 @@
-#pragma	lib	"liboventi.a"
-#pragma	src	"/sys/src/liboventi"
-
-typedef struct VtSession	VtSession;
-typedef struct VtSha1		VtSha1;
-typedef struct Packet		Packet;
-typedef struct VtLock 		VtLock;
-typedef struct VtRendez		VtRendez;
-typedef struct VtRoot		VtRoot;
-typedef struct VtEntry		VtEntry;
-typedef struct VtServerVtbl	VtServerVtbl;
-
-#pragma incomplete VtSession
-#pragma incomplete VtSha1
-#pragma incomplete Packet
-#pragma incomplete VtLock
-#pragma incomplete VtRendez
-
-enum {
-	VtScoreSize	= 20, /* Venti */
-	VtMaxLumpSize	= 56*1024,
-	VtPointerDepth	= 7,	
-	VtEntrySize	= 40,
-	VtRootSize 	= 300,
-	VtMaxStringSize	= 1000,
-	VtAuthSize 	= 1024,  /* size of auth group - in bits - must be multiple of 8 */
-	MaxFragSize 	= 9*1024,
-	VtMaxFileSize	= (1ULL<<48) - 1,
-	VtRootVersion	= 2,
-};
-
-/* crypto strengths */
-enum {
-	VtCryptoStrengthNone,
-	VtCryptoStrengthAuth,
-	VtCryptoStrengthWeak,
-	VtCryptoStrengthStrong,
-};
-
-/* crypto suites */
-enum {
-	VtCryptoNone,
-	VtCryptoSSL3,
-	VtCryptoTLS1,
-
-	VtCryptoMax
-};
-
-/* codecs */
-enum {
-	VtCodecNone,
-
-	VtCodecDeflate,
-	VtCodecThwack,
-
-	VtCodecMax
-};
-
-/* Lump Types */
-enum {
-	VtErrType,		/* illegal */
-
-	VtRootType,
-	VtDirType,
-	VtPointerType0,
-	VtPointerType1,
-	VtPointerType2,
-	VtPointerType3,
-	VtPointerType4,
-	VtPointerType5,
-	VtPointerType6,
-	VtPointerType7,		/* not used */
-	VtPointerType8,		/* not used */
-	VtPointerType9,		/* not used */
-	VtDataType,
-
-	VtMaxType
-};
-
-/* Dir Entry flags */
-enum {
-	VtEntryActive = (1<<0),		/* entry is in use */
-	VtEntryDir = (1<<1),		/* a directory */
-	VtEntryDepthShift = 2,		/* shift for pointer depth */
-	VtEntryDepthMask = (0x7<<2),	/* mask for pointer depth */
-	VtEntryLocal = (1<<5),		/* used for local storage: should not be set for Venti blocks */
-	VtEntryNoArchive = (1<<6),	/* used for local storage: should not be set for Venti blocks */
-};
-
-struct VtRoot {
-	ushort version;
-	char name[128];
-	char type[128];
-	uchar score[VtScoreSize];	/* to a Dir block */
-	ushort blockSize;		/* maximum block size */
-	uchar prev[VtScoreSize];	/* last root block */
-};
-
-struct VtEntry {
-	ulong gen;			/* generation number */
-	ushort psize;			/* pointer block size */
-	ushort dsize;			/* data block size */
-	uchar depth;			/* unpacked from flags */
-	uchar flags;
-	uvlong size;
-	uchar score[VtScoreSize];
-};
-
-struct VtServerVtbl {
-	Packet *(*read)(VtSession*, uchar score[VtScoreSize], int type, int n);
-	int (*write)(VtSession*, uchar score[VtScoreSize], int type, Packet *p);
-	void (*closing)(VtSession*, int clean);
-	void (*sync)(VtSession*);
-};
-
-/* versions */
-enum {
-	/* experimental versions */
-	VtVersion01 = 1,
-	VtVersion02,
-};
-
-/* score of zero length block */
-extern uchar vtZeroScore[VtScoreSize];	
-
-/* both sides */
-void vtAttach(void);
-void vtDetach(void);
-void vtClose(VtSession *s);
-void vtFree(VtSession *s);
-char *vtGetUid(VtSession *s);
-char *vtGetSid(VtSession *s);
-int vtSetDebug(VtSession *s, int);
-int vtGetDebug(VtSession *s);
-int vtSetFd(VtSession *s, int fd);
-int vtGetFd(VtSession *s);
-int vtConnect(VtSession *s, char *password);
-int vtSetCryptoStrength(VtSession *s, int);
-int vtGetCryptoStrength(VtSession *s);
-int vtSetCompression(VtSession *s, int);
-int vtGetCompression(VtSession *s);
-int vtGetCrypto(VtSession *s);
-int vtGetCodec(VtSession *s);
-char *vtGetVersion(VtSession *s);
-char *vtGetError(void);
-int vtErrFmt(Fmt *fmt);
-void vtDebug(VtSession*, char *, ...);
-void vtDebugMesg(VtSession *z, Packet *p, char *s);
-
-/* internal */
-VtSession *vtAlloc(void);
-void vtReset(VtSession*);
-int vtAddString(Packet*, char*);
-int vtGetString(Packet*, char**);
-int vtSendPacket(VtSession*, Packet*);
-Packet *vtRecvPacket(VtSession*);
-void vtDisconnect(VtSession*, int);
-int vtHello(VtSession*);
-
-/* client side */
-VtSession *vtClientAlloc(void);
-VtSession *vtDial(char *server, int canfail);
-int vtRedial(VtSession*, char *server);
-VtSession *vtStdioServer(char *server);
-int vtPing(VtSession *s);
-int vtSetUid(VtSession*, char *uid);
-int vtRead(VtSession*, uchar score[VtScoreSize], int type, uchar *buf, int n);
-int vtWrite(VtSession*, uchar score[VtScoreSize], int type, uchar *buf, int n);
-Packet *vtReadPacket(VtSession*, uchar score[VtScoreSize], int type, int n);
-int vtWritePacket(VtSession*, uchar score[VtScoreSize], int type, Packet *p);
-int vtSync(VtSession *s);
-
-int vtZeroExtend(int type, uchar *buf, int n, int nn);
-int vtZeroTruncate(int type, uchar *buf, int n);
-int vtParseScore(char*, uint, uchar[VtScoreSize]);
-
-void vtRootPack(VtRoot*, uchar*);
-int vtRootUnpack(VtRoot*, uchar*);
-void vtEntryPack(VtEntry*, uchar*, int index);
-int vtEntryUnpack(VtEntry*, uchar*, int index);
-
-/* server side */
-VtSession *vtServerAlloc(VtServerVtbl*);
-int vtSetSid(VtSession *s, char *sid);
-int vtExport(VtSession *s);
-
-/* sha1 */
-VtSha1* vtSha1Alloc(void);
-void vtSha1Free(VtSha1*);
-void vtSha1Init(VtSha1*);
-void vtSha1Update(VtSha1*, uchar *, int n);
-void vtSha1Final(VtSha1*, uchar sha1[VtScoreSize]);
-void vtSha1(uchar score[VtScoreSize], uchar *, int);
-int vtSha1Check(uchar score[VtScoreSize], uchar *, int);
-int vtScoreFmt(Fmt *fmt);
-
-/* Packet */
-Packet *packetAlloc(void);
-void packetFree(Packet*);
-Packet *packetForeign(uchar *buf, int n, void (*free)(void *a), void *a);
-Packet *packetDup(Packet*, int offset, int n);
-Packet *packetSplit(Packet*, int n);
-int packetConsume(Packet*, uchar *buf, int n);
-int packetTrim(Packet*, int offset, int n);
-uchar *packetHeader(Packet*, int n);
-uchar *packetTrailer(Packet*, int n);
-int packetPrefix(Packet*, uchar *buf, int n);
-int packetAppend(Packet*, uchar *buf, int n);
-int packetConcat(Packet*, Packet*);
-uchar *packetPeek(Packet*, uchar *buf, int offset, int n);
-int packetCopy(Packet*, uchar *buf, int offset, int n);
-int packetFragments(Packet*, IOchunk*, int nio, int offset);
-int packetSize(Packet*);
-int packetAllocatedSize(Packet*);
-void packetSha1(Packet*, uchar sha1[VtScoreSize]);
-int packetCompact(Packet*);
-int packetCmp(Packet*, Packet*);
-void packetStats(void);
-
-/* portability stuff - should be a seperate library */
-
-void vtMemFree(void *);
-void *vtMemAlloc(int);
-void *vtMemAllocZ(int);
-void *vtMemRealloc(void *p, int);
-void *vtMemBrk(int n);
-char *vtStrDup(char *);
-void vtFatal(char *, ...);
-char *vtGetError(void);
-char *vtSetError(char *, ...);
-char *vtOSError(void);
-
-/* locking/threads */
-int vtThread(void (*f)(void*), void *rock);
-void vtThreadSetName(char*);
-
-VtLock *vtLockAlloc(void);
-/* void vtLockInit(VtLock**); */
-void vtLock(VtLock*);
-int vtCanLock(VtLock*);
-void vtRLock(VtLock*);
-int vtCanRLock(VtLock*);
-void vtUnlock(VtLock*);
-void vtRUnlock(VtLock*);
-void vtLockFree(VtLock*);
-
-VtRendez *vtRendezAlloc(VtLock*);
-void vtRendezFree(VtRendez*);
-int vtSleep(VtRendez*);
-int vtWakeup(VtRendez*);
-int vtWakeupAll(VtRendez*);
-
-/* fd functions - really network (socket) functions */
-void vtFdClose(int);
-int vtFdRead(int, uchar*, int);
-int vtFdReadFully(int, uchar*, int);
-int vtFdWrite(int, uchar*, int);
-
-/*
- * formatting
- * other than noted, these formats all ignore
- * the width and precision arguments, and all flags
- *
- * V	a venti score
- * R	venti error
- */
-#pragma	varargck	type	"V"		uchar*
-#pragma	varargck	type	"R"		void
-
-#pragma	varargck	argpos	vtSetError	1
-
--- a/sys/src/liboventi/client.c
+++ /dev/null
@@ -1,346 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-#include "session.h"
-
-static char EProtocolBotch[] = "venti protocol botch";
-static char ELumpSize[] = "illegal lump size";
-static char ENotConnected[] = "not connected to venti server";
-
-static Packet *vtRPC(VtSession *z, int op, Packet *p);
-
-VtSession *
-vtClientAlloc(void)
-{
-	VtSession *z = vtAlloc();	
-	return z;
-}
-
-VtSession *
-vtDial(char *host, int canfail)
-{
-	VtSession *z;
-	int fd;
-	char *na;
-	char e[ERRMAX];
-
-	if(host == nil) 
-		host = getenv("venti");
-	if(host == nil)
-		host = "$venti";
-
-	if (host == nil) {
-		if (!canfail)
-			werrstr("no venti host set");
-		na = "";
-		fd = -1;
-	} else {
-		na = netmkaddr(host, 0, "venti");
-		fd = dial(na, 0, 0, 0);
-	}
-	if(fd < 0){
-		rerrstr(e, sizeof e);
-		if(!canfail){
-			vtSetError("venti dialstring %s: %s", na, e);
-			return nil;
-		}
-	}
-	z = vtClientAlloc();
-	if(fd < 0)
-		strcpy(z->fderror, e);
-	vtSetFd(z, fd);
-	return z;
-}
-
-int
-vtRedial(VtSession *z, char *host)
-{
-	int fd;
-	char *na;
-
-	if(host == nil) 
-		host = getenv("venti");
-	if(host == nil)
-		host = "$venti";
-
-	na = netmkaddr(host, 0, "venti");
-	fd = dial(na, 0, 0, 0);
-	if(fd < 0){
-		vtOSError();
-		return 0;
-	}
-	vtReset(z);
-	vtSetFd(z, fd);
-	return 1;
-}
-
-VtSession *
-vtStdioServer(char *server)
-{
-	int pfd[2];
-	VtSession *z;
-
-	if(server == nil)
-		return nil;
-
-	if(access(server, AEXEC) < 0) {
-		vtOSError();
-		return nil;
-	}
-
-	if(pipe(pfd) < 0) {
-		vtOSError();
-		return nil;
-	}
-
-	switch(fork()) {
-	case -1:
-		close(pfd[0]);
-		close(pfd[1]);
-		vtOSError();
-		return nil;
-	case 0:
-		close(pfd[0]);
-		dup(pfd[1], 0);
-		dup(pfd[1], 1);
-		execl(server, "ventiserver", "-i", nil);
-		exits("exec failed");
-	}
-	close(pfd[1]);
-
-	z = vtClientAlloc();
-	vtSetFd(z, pfd[0]);
-	return z;
-}
-
-int
-vtPing(VtSession *z)
-{
-	Packet *p = packetAlloc();
-
-	p = vtRPC(z, VtQPing, p);
-	if(p == nil)
-		return 0;
-	packetFree(p);
-	return 1;
-}
-
-int
-vtHello(VtSession *z)
-{
-	Packet *p;
-	uchar buf[10];
-	char *sid;
-	int crypto, codec;
-
-	sid = nil;
-
-	p = packetAlloc();
-	if(!vtAddString(p, vtGetVersion(z)))
-		goto Err;
-	if(!vtAddString(p, vtGetUid(z)))
-		goto Err;
-	buf[0] = vtGetCryptoStrength(z);
-	buf[1] = 0;
-	buf[2] = 0;
-	packetAppend(p, buf, 3);
-	p = vtRPC(z, VtQHello, p);
-	if(p == nil)
-		return 0;
-	if(!vtGetString(p, &sid))
-		goto Err;
-	if(!packetConsume(p, buf, 2))
-		goto Err;
-	if(packetSize(p) != 0) {
-		vtSetError(EProtocolBotch);
-		goto Err;
-	}
-	crypto = buf[0];
-	codec = buf[1];
-
-	USED(crypto);
-	USED(codec);
-
-	packetFree(p);
-
-	vtLock(z->lk);
-	z->sid = sid;
-	z->auth.state = VtAuthOK;
-	vtSha1Free(z->inHash);
-	z->inHash = nil;
-	vtSha1Free(z->outHash);
-	z->outHash = nil;
-	vtUnlock(z->lk);
-
-	return 1;
-Err:
-	packetFree(p);
-	vtMemFree(sid);
-	return 0;
-}
-
-int
-vtSync(VtSession *z)
-{
-	Packet *p = packetAlloc();
-
-	p = vtRPC(z, VtQSync, p);
-	if(p == nil)
-		return 0;
-	if(packetSize(p) != 0){
-		vtSetError(EProtocolBotch);
-		goto Err;
-	}
-	packetFree(p);
-	return 1;
-
-Err:
-	packetFree(p);
-	return 0;
-}
-
-int
-vtWrite(VtSession *z, uchar score[VtScoreSize], int type, uchar *buf, int n)
-{
-	Packet *p = packetAlloc();
-
-	packetAppend(p, buf, n);
-	return vtWritePacket(z, score, type, p);
-}
-
-int
-vtWritePacket(VtSession *z, uchar score[VtScoreSize], int type, Packet *p)
-{
-	int n = packetSize(p);
-	uchar *hdr;
-
-	if(n > VtMaxLumpSize || n < 0) {
-		vtSetError(ELumpSize);
-		goto Err;
-	}
-	
-	if(n == 0) {
-		memmove(score, vtZeroScore, VtScoreSize);
-		return 1;
-	}
-
-	hdr = packetHeader(p, 4);
-	hdr[0] = type;
-	hdr[1] = 0;	/* pad */
-	hdr[2] = 0;	/* pad */
-	hdr[3] = 0;	/* pad */
-	p = vtRPC(z, VtQWrite, p);
-	if(p == nil)
-		return 0;
-	if(!packetConsume(p, score, VtScoreSize))
-		goto Err;
-	if(packetSize(p) != 0) {
-		vtSetError(EProtocolBotch);
-		goto Err;
-	}
-	packetFree(p);
-	return 1;
-Err:
-	packetFree(p);
-	return 0;
-}
-
-int
-vtRead(VtSession *z, uchar score[VtScoreSize], int type, uchar *buf, int n)
-{
-	Packet *p;
-
-	p = vtReadPacket(z, score, type, n);
-	if(p == nil)
-		return -1;
-	n = packetSize(p);
-	packetCopy(p, buf, 0, n);
-	packetFree(p);
-	return n;
-}
-
-Packet *
-vtReadPacket(VtSession *z, uchar score[VtScoreSize], int type, int n)
-{
-	Packet *p;
-	uchar buf[10];
-
-	if(n < 0 || n > VtMaxLumpSize) {
-		vtSetError(ELumpSize);
-		return nil;
-	}
-
-	p = packetAlloc();
-	if(memcmp(score, vtZeroScore, VtScoreSize) == 0)
-		return p;
-
-	packetAppend(p, score, VtScoreSize);
-	buf[0] = type;
-	buf[1] = 0;	/* pad */
-	buf[2] = n >> 8;
-	buf[3] = n;
-	packetAppend(p, buf, 4);
-	return vtRPC(z, VtQRead, p);
-}
-
-
-static Packet *
-vtRPC(VtSession *z, int op, Packet *p)
-{
-	uchar *hdr, buf[2];
-	char *err;
-
-	if(z == nil){
-		vtSetError(ENotConnected);
-		return nil;
-	}
-
-	/*
-	 * single threaded for the momment
-	 */
-	vtLock(z->lk);
-	if(z->cstate != VtStateConnected){
-		vtSetError(ENotConnected);
-		goto Err;
-	}
-	hdr = packetHeader(p, 2);
-	hdr[0] = op;	/* op */
-	hdr[1] = 0;	/* tid */
-	vtDebug(z, "client send: ");
-	vtDebugMesg(z, p, "\n");
-	if(!vtSendPacket(z, p)) {
-		p = nil;
-		goto Err;
-	}
-	p = vtRecvPacket(z);
-	if(p == nil)
-		goto Err;
-	vtDebug(z, "client recv: ");
-	vtDebugMesg(z, p, "\n");
-	if(!packetConsume(p, buf, 2))
-		goto Err;
-	if(buf[0] == VtRError) {
-		if(!vtGetString(p, &err)) {
-			vtSetError(EProtocolBotch);
-			goto Err;
-		}
-		vtSetError(err);
-		vtMemFree(err);
-		packetFree(p);
-		vtUnlock(z->lk);
-		return nil;
-	}
-	if(buf[0] != op+1 || buf[1] != 0) {
-		vtSetError(EProtocolBotch);
-		goto Err;
-	}
-	vtUnlock(z->lk);
-	return p;
-Err:
-	vtDebug(z, "vtRPC failed: %s\n", vtGetError());
-	if(p != nil)
-		packetFree(p);
-	vtUnlock(z->lk);
-	vtDisconnect(z, 1);
-	return nil;
-}
--- a/sys/src/liboventi/debug.c
+++ /dev/null
@@ -1,78 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-#include "session.h"
-
-void vtDumpSome(Packet*);
-
-void
-vtDebug(VtSession *s, char *fmt, ...)
-{
-	va_list arg;
-
-	if(!s->debug)
-		return;
-
-	va_start(arg, fmt);
-	vfprint(2, fmt, arg);
-	va_end(arg);
-}
-
-void
-vtDebugMesg(VtSession *z, Packet *p, char *s)
-{
-	int op;
-	int tid;
-	int n;
-	uchar buf[100], *b;
-
-
-	if(!z->debug)
-		return;
-	n = packetSize(p);
-	if(n < 2) {
-		fprint(2, "runt packet%s", s);
-		return;
-	}
-	b = packetPeek(p, buf, 0, 2);
-	op = b[0];
-	tid = b[1];
-
-	fprint(2, "%c%d[%d] %d", ((op&1)==0)?'R':'Q', op, tid, n);
-	vtDumpSome(p);
-	fprint(2, "%s", s);
-}
-
-void
-vtDumpSome(Packet *pkt)
-{
-	int printable;
-	int i, n;
-	char buf[200], *q, *eq;
-	uchar data[32], *p;
-
-	n = packetSize(pkt);
-	printable = 1;
-	q = buf;
-	eq = buf + sizeof(buf);
-	q = seprint(q, eq, "(%d) '", n);
-
-	if(n > sizeof(data))
-		n = sizeof(data);
-	p = packetPeek(pkt, data, 0, n);
-	for(i=0; i<n && printable; i++)
-		if((p[i]<32 && p[i] !='\n' && p[i] !='\t') || p[i]>127)
-				printable = 0;
-	if(printable) {
-		for(i=0; i<n; i++)
-			q = seprint(q, eq, "%c", p[i]);
-	} else {
-		for(i=0; i<n; i++) {
-			if(i>0 && i%4==0)
-				q = seprint(q, eq, " ");
-			q = seprint(q, eq, "%.2X", p[i]);
-		}
-	}
-	seprint(q, eq, "'");
-	fprint(2, "%s", buf);
-}
--- a/sys/src/liboventi/errfmt.c
+++ /dev/null
@@ -1,12 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-
-int
-vtErrFmt(Fmt *f)
-{
-	char *s;
-
-	s = vtGetError();
-	return fmtstrcpy(f, s);
-}
--- a/sys/src/liboventi/fatal.c
+++ /dev/null
@@ -1,16 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-
-void
-vtFatal(char *fmt, ...)
-{
-	va_list arg;
-
-	va_start(arg, fmt);
-	fprint(2, "fatal error: ");
-	vfprint(2, fmt, arg);
-	fprint(2, "\n");
-	va_end(arg);
-	exits("vtFatal");
-}
--- a/sys/src/liboventi/mkfile
+++ /dev/null
@@ -1,46 +1,0 @@
-</$objtype/mkfile
-
-LIB=/$objtype/lib/liboventi.a
-
-SYS=plan9
-
-OFILES=\
-	client.$O\
-	debug.$O\
-	errfmt.$O\
-	fatal.$O\
-	pack.$O\
-	packet.$O\
-	parsescore.$O\
-	readfully.$O\
-	rpc.$O\
-	scorefmt.$O\
-	server.$O\
-	strdup.$O\
-	zero.$O\
-	$SYS-io.$O\
-	$SYS-sha1.$O\
-	$SYS-thread.$O\
-
-HFILES=\
-	packet.h\
-	session.h\
-
-UPDATE=\
-	mkfile\
-	$HFILES\
-	${OFILES:%.$O=%.c}\
-	${LIB:/$objtype/%=/386/%}\
-
-CFLAGS=$CFLAGS
-
-</sys/src/cmd/mksyslib
-
-$O.vttest: vttest.$O $OFILES
-	$LD $LDFLAGS -o $target $prereq
-
-acid:	$HFILES packet.c
-	$CC $INC -a packet.c > acid || rm acid
-
-test: $O.vttest
-	$O.vttest
--- a/sys/src/liboventi/pack.c
+++ /dev/null
@@ -1,147 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-
-/*
- * integer conversion routines
- */
-#define	U8GET(p)	((p)[0])
-#define	U16GET(p)	(((p)[0]<<8)|(p)[1])
-#define	U32GET(p)	((u32int)(((p)[0]<<24)|((p)[1]<<16)|((p)[2]<<8)|(p)[3]))
-#define	U48GET(p)	(((vlong)U16GET(p)<<32)|(vlong)U32GET((p)+2))
-#define	U64GET(p)	(((vlong)U32GET(p)<<32)|(vlong)U32GET((p)+4))
-
-#define	U8PUT(p,v)	(p)[0]=(v)
-#define	U16PUT(p,v)	(p)[0]=(v)>>8;(p)[1]=(v)
-#define	U32PUT(p,v)	(p)[0]=(v)>>24;(p)[1]=(v)>>16;(p)[2]=(v)>>8;(p)[3]=(v)
-#define	U48PUT(p,v,t32)	t32=(v)>>32;U16PUT(p,t32);t32=(v);U32PUT((p)+2,t32)
-#define	U64PUT(p,v,t32)	t32=(v)>>32;U32PUT(p,t32);t32=(v);U32PUT((p)+4,t32)
-
-static int
-checkSize(int n)
-{
-	if(n < 256 || n > VtMaxLumpSize) {
-		vtSetError("bad block size");
-		return 0;
-	}
-	return 1;
-}
-		
-
-void
-vtRootPack(VtRoot *r, uchar *p)
-{
-	uchar *op = p;
-
-	U16PUT(p, r->version);
-	p += 2;
-	memmove(p, r->name, sizeof(r->name));
-	p += sizeof(r->name);
-	memmove(p, r->type, sizeof(r->type));
-	p += sizeof(r->type);
-	memmove(p, r->score, VtScoreSize);
-	p +=  VtScoreSize;
-	U16PUT(p, r->blockSize);
-	p += 2;
-	memmove(p, r->prev, VtScoreSize);
-	p += VtScoreSize;
-
-	assert(p-op == VtRootSize);
-}
-
-int
-vtRootUnpack(VtRoot *r, uchar *p)
-{
-	uchar *op = p;
-
-	memset(r, 0, sizeof(*r));
-
-	r->version = U16GET(p);
-	if(r->version != VtRootVersion) {
-		vtSetError("unknown root version");
-		return 0;
-	}
-	p += 2;
-	memmove(r->name, p, sizeof(r->name));
-	r->name[sizeof(r->name)-1] = 0;
-	p += sizeof(r->name);
-	memmove(r->type, p, sizeof(r->type));
-	r->type[sizeof(r->type)-1] = 0;
-	p += sizeof(r->type);
-	memmove(r->score, p, VtScoreSize);
-	p +=  VtScoreSize;
-	r->blockSize = U16GET(p);
-	if(!checkSize(r->blockSize))
-		return 0;
-	p += 2;
-	memmove(r->prev, p, VtScoreSize);
-	p += VtScoreSize;
-
-	assert(p-op == VtRootSize);
-	return 1;
-}
-
-void
-vtEntryPack(VtEntry *e, uchar *p, int index)
-{
-	ulong t32;
-	int flags;
-	uchar *op;
-
-	p += index * VtEntrySize;
-	op = p;
-
-	U32PUT(p, e->gen);
-	p += 4;
-	U16PUT(p, e->psize);
-	p += 2;
-	U16PUT(p, e->dsize);
-	p += 2;
-	flags = e->flags | ((e->depth << VtEntryDepthShift) & VtEntryDepthMask);
-	U8PUT(p, flags);
-	p++;
-	memset(p, 0, 5);
-	p += 5;
-	U48PUT(p, e->size, t32);
-	p += 6;
-	memmove(p, e->score, VtScoreSize);
-	p += VtScoreSize;
-
-	assert(p-op == VtEntrySize);
-}
-
-int
-vtEntryUnpack(VtEntry *e, uchar *p, int index)
-{
-	uchar *op;
-
-	p += index * VtEntrySize;
-	op = p;
-
-	e->gen = U32GET(p);
-	p += 4;
-	e->psize = U16GET(p);
-	p += 2;
-	e->dsize = U16GET(p);
-	p += 2;
-	e->flags = U8GET(p);
-	e->depth = (e->flags & VtEntryDepthMask) >> VtEntryDepthShift;
-	e->flags &= ~VtEntryDepthMask;
-	p++;
-	p += 5;
-	e->size = U48GET(p);
-	p += 6;
-	memmove(e->score, p, VtScoreSize);
-	p += VtScoreSize;
-
-	assert(p-op == VtEntrySize);
-	
-	if(!(e->flags & VtEntryActive))
-		return 1;
-
-	if(!checkSize(e->psize) || !checkSize(e->dsize))
-		return 0;
-
-	return 1;
-}
-
--- a/sys/src/liboventi/packet.c
+++ /dev/null
@@ -1,848 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-#include "packet.h"
-
-static Frag *fragAlloc(Packet*, int n, int pos, Frag *next);
-static Frag *fragDup(Packet*, Frag*);
-static void fragFree(Frag*);
-
-static Mem *memAlloc(int, int);
-static void memFree(Mem*);
-static int memHead(Mem *m, uchar *rp, int n);
-static int memTail(Mem *m, uchar *wp, int n);
-
-static char EPacketSize[] = "bad packet size";
-static char EPacketOffset[] = "bad packet offset";
-static char EBadSize[] = "bad size";
-
-static struct {
-	Lock lk;
-	Packet *packet;
-	int npacket;
-	Frag *frag;
-	int nfrag;
-	Mem *bigMem;
-	int nbigMem;
-	Mem *smallMem;
-	int nsmallMem;
-} freeList;
-
-#define FRAGSIZE(f) ((f)->wp - (f)->rp)
-#define FRAGASIZE(f) ((f)->mem->ep - (f)->mem->bp)
-
-#define NOTFREE(p) assert((p)->size>=0)
-
-Packet *
-packetAlloc(void)
-{
-	Packet *p;
-	
-	lock(&freeList.lk);
-	p = freeList.packet;
-	if(p != nil)
-		freeList.packet = p->next;
-	else
-		freeList.npacket++;
-	unlock(&freeList.lk);
-
-	if(p == nil)
-		p = vtMemBrk(sizeof(Packet));
-	else
-		assert(p->size == -1);
-	p->size = 0;
-	p->asize = 0;
-	p->first = nil;
-	p->last = nil;
-	p->next = nil;
-
-	return p;
-}
-
-void
-packetFree(Packet *p)
-{
-	Frag *f, *ff;
-
-if(0)fprint(2, "packetFree %p\n", p);
-
-	NOTFREE(p);
-	p->size = -1;
-
-	for(f=p->first; f!=nil; f=ff) {
-		ff = f->next;
-		fragFree(f);
-	}
-	p->first = nil;
-	p->last = nil;
-
-	lock(&freeList.lk);
-	p->next = freeList.packet;
-	freeList.packet = p;
-	unlock(&freeList.lk);
-}
-
-Packet *
-packetDup(Packet *p, int offset, int n)
-{	
-	Frag *f, *ff;
-	Packet *pp;
-
-	NOTFREE(p);
-	if(offset < 0 || n < 0 || offset+n > p->size) {
-		vtSetError(EBadSize);
-		return nil;
-	}
-
-	pp = packetAlloc();
-	if(n == 0)
-		return pp;
-
-	pp->size = n;
-
-	/* skip offset */
-	for(f=p->first; offset >= FRAGSIZE(f); f=f->next)
-		offset -= FRAGSIZE(f);
-	
-	/* first frag */
-	ff = fragDup(pp, f);
-	ff->rp += offset;
-	pp->first = ff;
-	n -= FRAGSIZE(ff);
-	pp->asize += FRAGASIZE(ff);
-
-	/* the remaining */
-	while(n > 0) {
-		f = f->next;
-		ff->next = fragDup(pp, f);
-		ff = ff->next;
-		n -= FRAGSIZE(ff);
-		pp->asize += FRAGASIZE(ff);
-	}
-	
-	/* fix up last frag: note n <= 0 */
-	ff->wp += n;
-	ff->next = nil;
-	pp->last = ff;
-
-	return pp;
-}
-
-Packet *
-packetSplit(Packet *p, int n)
-{
-	Packet *pp;
-	Frag *f, *ff;
-
-	NOTFREE(p);
-	if(n < 0 || n > p->size) {
-		vtSetError(EPacketSize);
-		return nil;
-	}
-
-	pp = packetAlloc();
-	if(n == 0)
-		return pp;
-
-	pp->size = n;
-	p->size -= n;
-	ff = nil;
-	for(f=p->first; n > 0 && n >= FRAGSIZE(f); f=f->next) {
-		n -= FRAGSIZE(f);
-		p->asize -= FRAGASIZE(f);
-		pp->asize += FRAGASIZE(f);
-		ff = f;
-	}
-
-	/* split shared frag */
-	if(n > 0) {
-		ff = f;
-		f = fragDup(pp, ff);
-		pp->asize += FRAGASIZE(ff);
-		ff->next = nil;
-		ff->wp = ff->rp + n;
-		f->rp += n;
-	}
-
-	pp->first = p->first;
-	pp->last = ff;
-	p->first = f;
-	return pp;
-}
-
-int
-packetConsume(Packet *p, uchar *buf, int n)
-{
-	NOTFREE(p);
-	if(buf && !packetCopy(p, buf, 0, n))
-		return 0;
-	return packetTrim(p, n, p->size-n);
-}
-
-int
-packetTrim(Packet *p, int offset, int n)
-{
-	Frag *f, *ff;
-
-	NOTFREE(p);
-	if(offset < 0 || offset > p->size) {
-		vtSetError(EPacketOffset);
-		return 0;
-	}
-
-	if(n < 0 || offset + n > p->size) {
-		vtSetError(EPacketOffset);
-		return 0;
-	}
-
-	p->size = n;
-
-	/* easy case */
-	if(n == 0) {
-		for(f=p->first; f != nil; f=ff) {
-			ff = f->next;
-			fragFree(f);
-		}
-		p->first = p->last = nil;
-		p->asize = 0;
-		return 1;
-	}
-	
-	/* free before offset */
-	for(f=p->first; offset >= FRAGSIZE(f); f=ff) {
-		p->asize -= FRAGASIZE(f);
-		offset -= FRAGSIZE(f);
-		ff = f->next;
-		fragFree(f);
-	}
-
-	/* adjust frag */
-	f->rp += offset;
-	p->first = f;
-
-	/* skip middle */
-	for(; n > 0 && n > FRAGSIZE(f); f=f->next)
-		n -= FRAGSIZE(f);
-
-	/* adjust end */
-	f->wp = f->rp + n;
-	p->last = f;
-	ff = f->next;
-	f->next = nil;
-
-	/* free after */
-	for(f=ff; f != nil; f=ff) {
-		p->asize -= FRAGASIZE(f);
-		ff = f->next;
-		fragFree(f);
-	}
-	return 1;
-}
-
-uchar *
-packetHeader(Packet *p, int n)
-{
-	Frag *f;
-	Mem *m;
-
-	NOTFREE(p);
-	if(n <= 0 || n > MaxFragSize) {
-		vtSetError(EPacketSize);
-		return 0;
-	}
-
-	p->size += n;
-	
-	/* try and fix in current frag */
-	f = p->first;
-	if(f != nil) {
-		m = f->mem;
-		if(n <= f->rp - m->bp)
-		if(m->ref == 1 || memHead(m, f->rp, n)) {
-			f->rp -= n;
-			return f->rp;
-		}
-	}
-
-	/* add frag to front */
-	f = fragAlloc(p, n, PEnd, p->first);
-	p->asize += FRAGASIZE(f);
-	if(p->first == nil)
-		p->last = f;
-	p->first = f;
-	return f->rp;
-}
-
-uchar *
-packetTrailer(Packet *p, int n)
-{
-	Mem *m;
-	Frag *f;
-
-	NOTFREE(p);
-	if(n <= 0 || n > MaxFragSize) {
-		vtSetError(EPacketSize);
-		return 0;
-	}
-
-	p->size += n;
-	
-	/* try and fix in current frag */
-	if(p->first != nil) {
-		f = p->last;
-		m = f->mem;
-		if(n <= m->ep - f->wp)
-		if(m->ref == 1 || memTail(m, f->wp, n)) {
-			f->wp += n;
-			return f->wp - n;
-		}
-	}
-
-	/* add frag to end */
-	f = fragAlloc(p, n, (p->first == nil)?PMiddle:PFront, nil);
-	p->asize += FRAGASIZE(f);
-	if(p->first == nil)
-		p->first = f;
-	else
-		p->last->next = f;
-	p->last = f;
-	return f->rp;
-}
-
-int
-packetPrefix(Packet *p, uchar *buf, int n)
-{
-	Frag *f;
-	int nn;
-	Mem *m;
-
-	NOTFREE(p);
-	if(n <= 0)
-		return 1;
-
-	p->size += n;
-
-	/* try and fix in current frag */
-	f = p->first;
-	if(f != nil) {
-		m = f->mem;
-		nn = f->rp - m->bp;
-		if(nn > n)
-			nn = n;
-		if(m->ref == 1 || memHead(m, f->rp, nn)) {
-			f->rp -= nn;
-			n -= nn;
-			memmove(f->rp, buf+n, nn);
-		}
-	}
-
-	while(n > 0) {
-		nn = n;
-		if(nn > MaxFragSize)
-			nn = MaxFragSize;
-		f = fragAlloc(p, nn, PEnd, p->first);	
-		p->asize += FRAGASIZE(f);
-		if(p->first == nil)
-			p->last = f;
-		p->first = f;
-		n -= nn;
-		memmove(f->rp, buf+n, nn);
-	}
-	return 1;
-}
-
-int
-packetAppend(Packet *p, uchar *buf, int n)
-{
-	Frag *f;
-	int nn;
-	Mem *m;
-
-	NOTFREE(p);
-	if(n <= 0)
-		return 1;
-
-	p->size += n;
-	/* try and fix in current frag */
-	if(p->first != nil) {
-		f = p->last;
-		m = f->mem;
-		nn = m->ep - f->wp;
-		if(nn > n)
-			nn = n;
-		if(m->ref == 1 || memTail(m, f->wp, nn)) {
-			memmove(f->wp, buf, nn);
-			f->wp += nn;
-			buf += nn;
-			n -= nn;
-		}
-	}
-	
-	while(n > 0) {
-		nn = n;
-		if(nn > MaxFragSize)
-			nn = MaxFragSize;
-		f = fragAlloc(p, nn, (p->first == nil)?PMiddle:PFront, nil);
-		p->asize += FRAGASIZE(f);
-		if(p->first == nil)
-			p->first = f;
-		else
-			p->last->next = f;
-		p->last = f;
-		memmove(f->rp, buf, nn);
-		buf += nn;
-		n -= nn;
-	}
-	return 1;
-}
-
-int
-packetConcat(Packet *p, Packet *pp)
-{
-	NOTFREE(p);
-	NOTFREE(pp);
-	if(pp->size == 0)
-		return 1;
-	p->size += pp->size;
-	p->asize += pp->asize;
-
-	if(p->first != nil)
-		p->last->next = pp->first;
-	else
-		p->first = pp->first;
-	p->last = pp->last;
-	pp->size = 0;
-	pp->asize = 0;
-	pp->first = nil;
-	pp->last = nil;
-	return 1;
-}
-
-uchar *
-packetPeek(Packet *p, uchar *buf, int offset, int n)
-{
-	Frag *f;
-	int nn;
-	uchar *b;
-
-	NOTFREE(p);
-	if(n == 0)
-		return buf;
-
-	if(offset < 0 || offset >= p->size) {
-		vtSetError(EPacketOffset);
-		return 0;
-	}
-
-	if(n < 0 || offset + n > p->size) {
-		vtSetError(EPacketSize);
-		return 0;
-	}
-	
-	/* skip up to offset */
-	for(f=p->first; offset >= FRAGSIZE(f); f=f->next)
-		offset -= FRAGSIZE(f);
-
-	/* easy case */
-	if(offset + n <= FRAGSIZE(f))
-		return f->rp + offset;
-
-	for(b=buf; n>0; n -= nn) {
-		nn = FRAGSIZE(f) - offset;
-		if(nn > n)
-			nn = n;
-		memmove(b, f->rp+offset, nn);
-		offset = 0;
-		f = f->next;
-		b += nn;
-	}
-
-	return buf;
-}
-
-int
-packetCopy(Packet *p, uchar *buf, int offset, int n)
-{
-	uchar *b;
-
-	NOTFREE(p);
-	b = packetPeek(p, buf, offset, n);
-	if(b == nil)
-		return 0;
-	if(b != buf)
-		memmove(buf, b, n);
-	return 1;
-}
-
-int
-packetFragments(Packet *p, IOchunk *io, int nio, int offset)
-{
-	Frag *f;
-	int size;
-	IOchunk *eio;
-
-	NOTFREE(p);
-	if(p->size == 0 || nio <= 0)
-		return 0;
-	
-	if(offset < 0 || offset > p->size) {
-		vtSetError(EPacketOffset);
-		return -1;
-	}
-
-	for(f=p->first; offset >= FRAGSIZE(f); f=f->next)
-		offset -= FRAGSIZE(f);
-
-	size = 0;
-	eio = io + nio;
-	for(; f != nil && io < eio; f=f->next) {
-		io->addr = f->rp + offset;
-		io->len = f->wp - (f->rp + offset);	
-		offset = 0;
-		size += io->len;
-		io++;
-	}
-
-	return size;
-}
-
-void
-packetStats(void)
-{
-	Packet *p;
-	Frag *f;
-	Mem *m;
-
-	int np, nf, nsm, nbm;
-
-	lock(&freeList.lk);
-	np = 0;
-	for(p=freeList.packet; p; p=p->next)
-		np++;
-	nf = 0;
-	for(f=freeList.frag; f; f=f->next)
-		nf++;
-	nsm = 0;
-	for(m=freeList.smallMem; m; m=m->next)
-		nsm++;
-	nbm = 0;
-	for(m=freeList.bigMem; m; m=m->next)
-		nbm++;
-	
-	fprint(2, "packet: %d/%d frag: %d/%d small mem: %d/%d big mem: %d/%d\n",
-		np, freeList.npacket,
-		nf, freeList.nfrag,
-		nsm, freeList.nsmallMem,
-		nbm, freeList.nbigMem);
-
-	unlock(&freeList.lk);
-}
-
-
-int
-packetSize(Packet *p)
-{
-	NOTFREE(p);
-	if(0) {
-		Frag *f;
-		int size = 0;
-	
-		for(f=p->first; f; f=f->next)
-			size += FRAGSIZE(f);
-		if(size != p->size)
-			fprint(2, "packetSize %d %d\n", size, p->size);
-		assert(size == p->size);
-	}
-	return p->size;
-}
-
-int
-packetAllocatedSize(Packet *p)
-{
-	NOTFREE(p);
-	if(0) {
-		Frag *f;
-		int asize = 0;
-	
-		for(f=p->first; f; f=f->next)
-			asize += FRAGASIZE(f);
-		if(asize != p->asize)
-			fprint(2, "packetAllocatedSize %d %d\n", asize, p->asize);
-		assert(asize == p->asize);
-	}
-	return p->asize;
-}
-
-void
-packetSha1(Packet *p, uchar sha1[VtScoreSize])
-{
-	Frag *f;
-	VtSha1 *s;
-	int size;
-
-	NOTFREE(p);
-	s = vtSha1Alloc();
-	size = p->size;
-	for(f=p->first; f; f=f->next) {
-		vtSha1Update(s, f->rp, FRAGSIZE(f));
-		size -= FRAGSIZE(f);
-	}
-	assert(size == 0);
-	vtSha1Final(s, sha1);
-	vtSha1Free(s);
-}
-
-int
-packetCmp(Packet *pkt0, Packet *pkt1)
-{
-	Frag *f0, *f1;
-	int n0, n1, x;
-
-	NOTFREE(pkt0);
-	NOTFREE(pkt1);
-	f0 = pkt0->first;
-	f1 = pkt1->first;
-
-	if(f0 == nil)
-		return (f1 == nil)?0:-1;
-	if(f1 == nil)
-		return 1;
-	n0 = FRAGSIZE(f0);
-	n1 = FRAGSIZE(f1);
-
-	for(;;) {
-		if(n0 < n1) {
-			x = memcmp(f0->wp - n0, f1->wp - n1, n0);
-			if(x != 0)
-				return x;
-			n1 -= n0;
-			f0 = f0->next;
-			if(f0 == nil)
-				return -1;
-			n0 = FRAGSIZE(f0);
-		} else if (n0 > n1) {
-			x = memcmp(f0->wp - n0, f1->wp - n1, n1);
-			if(x != 0)
-				return x;
-			n0 -= n1;
-			f1 = f1->next;
-			if(f1 == nil)
-				return 1;
-			n1 = FRAGSIZE(f1);
-		} else { /* n0 == n1 */
-			x = memcmp(f0->wp - n0, f1->wp - n1, n0);
-			if(x != 0)
-				return x;
-			f0 = f0->next;
-			f1 = f1->next;
-			if(f0 == nil)
-				return (f1 == nil)?0:-1;
-			if(f1 == nil)
-				return 1;
-			n0 = FRAGSIZE(f0);
-			n1 = FRAGSIZE(f1);
-		}
-	}
-}
-	
-
-static Frag *
-fragAlloc(Packet *p, int n, int pos, Frag *next)
-{
-	Frag *f, *ef;
-	Mem *m;
-
-	/* look for local frag */
-	f = &p->local[0];
-	ef = &p->local[NLocalFrag];
-	for(;f<ef; f++) {
-		if(f->state == FragLocalFree) {
-			f->state = FragLocalAlloc;
-			goto Found;
-		}
-	}
-	lock(&freeList.lk);	
-	f = freeList.frag;
-	if(f != nil)
-		freeList.frag = f->next;
-	else
-		freeList.nfrag++;
-	unlock(&freeList.lk);
-
-	if(f == nil) {
-		f = vtMemBrk(sizeof(Frag));
-		f->state = FragGlobal;
-	}
-
-Found:
-	if(n == 0)
-		return f;
-
-	if(pos == PEnd && next == nil)
-		pos = PMiddle;
-	m = memAlloc(n, pos);
-	f->mem = m;
-	f->rp = m->rp;
-	f->wp = m->wp;
-	f->next = next;
-
-	return f;
-}
-
-static Frag *
-fragDup(Packet *p, Frag *f)
-{
-	Frag *ff;
-	Mem *m;
-
-	m = f->mem;	
-
-	/*
-	 * m->rp && m->wp can be out of date when ref == 1
-	 * also, potentially reclaims space from previous frags
-	 */
-	if(m->ref == 1) {
-		m->rp = f->rp;
-		m->wp = f->wp;
-	}
-
-	ff = fragAlloc(p, 0, 0, nil);
-	*ff = *f;
-	lock(&m->lk);
-	m->ref++;
-	unlock(&m->lk);
-	return ff;
-}
-
-
-static void
-fragFree(Frag *f)
-{
-	memFree(f->mem);
-
-	if(f->state == FragLocalAlloc) {
-		f->state = FragLocalFree;
-		return;
-	}
-
-	lock(&freeList.lk);
-	f->next = freeList.frag;
-	freeList.frag = f;
-	unlock(&freeList.lk);	
-}
-
-static Mem *
-memAlloc(int n, int pos)
-{
-	Mem *m;
-	int nn;
-
-	if(n < 0 || n > MaxFragSize) {
-		vtSetError(EPacketSize);
-		return 0;
-	}
-	if(n <= SmallMemSize) {
-		lock(&freeList.lk);
-		m = freeList.smallMem;
-		if(m != nil)
-			freeList.smallMem = m->next;
-		else
-			freeList.nsmallMem++;
-		unlock(&freeList.lk);
-		nn = SmallMemSize;
-	} else {
-		lock(&freeList.lk);
-		m = freeList.bigMem;
-		if(m != nil)
-			freeList.bigMem = m->next;
-		else
-			freeList.nbigMem++;
-		unlock(&freeList.lk);
-		nn = BigMemSize;
-	}
-
-	if(m == nil) {
-		m = vtMemBrk(sizeof(Mem));
-		m->bp = vtMemBrk(nn);
-		m->ep = m->bp + nn;
-	}
-	assert(m->ref == 0);	
-	m->ref = 1;
-
-	switch(pos) {
-	default:
-		assert(0);
-	case PFront:
-		m->rp = m->bp;
-		break;
-	case PMiddle:
-		/* leave a little bit at end */
-		m->rp = m->ep - n - 32;
-		break;
-	case PEnd:
-		m->rp = m->ep - n;
-		break; 
-	}
-	/* check we did not blow it */
-	if(m->rp < m->bp)
-		m->rp = m->bp;
-	m->wp = m->rp + n;
-	assert(m->rp >= m->bp && m->wp <= m->ep);
-	return m;
-}
-
-static void
-memFree(Mem *m)
-{
-	lock(&m->lk);
-	m->ref--;
-	if(m->ref > 0) {
-		unlock(&m->lk);
-		return;
-	}
-	unlock(&m->lk);
-	assert(m->ref == 0);
-
-	switch(m->ep - m->bp) {
-	default:
-		assert(0);
-	case SmallMemSize:
-		lock(&freeList.lk);
-		m->next = freeList.smallMem;
-		freeList.smallMem = m;
-		unlock(&freeList.lk);
-		break;
-	case BigMemSize:
-		lock(&freeList.lk);
-		m->next = freeList.bigMem;
-		freeList.bigMem = m;
-		unlock(&freeList.lk);
-		break;
-	}
-}
-
-static int
-memHead(Mem *m, uchar *rp, int n)
-{
-	lock(&m->lk);
-	if(m->rp != rp) {
-		unlock(&m->lk);
-		return 0;
-	}
-	m->rp -= n;
-	unlock(&m->lk);
-	return 1;
-}
-
-static int
-memTail(Mem *m, uchar *wp, int n)
-{
-	lock(&m->lk);
-	if(m->wp != wp) {
-		unlock(&m->lk);
-		return 0;
-	}
-	m->wp += n;
-	unlock(&m->lk);
-	return 1;
-}
--- a/sys/src/liboventi/packet.h
+++ /dev/null
@@ -1,56 +1,0 @@
-typedef struct Packet Packet;
-typedef struct Mem Mem;
-typedef struct Frag Frag;
-
-enum {
-	BigMemSize = MaxFragSize,
-	SmallMemSize = BigMemSize/8,
-	NLocalFrag = 2,
-};
-
-/* position to carve out of a Mem */
-enum {
-	PFront,
-	PMiddle,
-	PEnd,
-};
-
-struct Mem
-{
-	Lock lk;
-	int ref;
-	uchar *bp;
-	uchar *ep;
-	uchar *rp;
-	uchar *wp;
-	Mem *next;
-};
-
-enum {
-	FragLocalFree,
-	FragLocalAlloc,
-	FragGlobal,
-};
-	
-struct Frag
-{
-	int state;
-	Mem *mem;
-	uchar *rp;
-	uchar *wp;
-	Frag *next;
-};
-
-struct Packet
-{
-	int size;
-	int asize;  /* allocated memmory - always greater than size */
-	
-	Packet *next;
-	
-	Frag *first;
-	Frag *last;
-	
-	Frag local[NLocalFrag];
-};
-
--- a/sys/src/liboventi/parsescore.c
+++ /dev/null
@@ -1,31 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-
-int
-vtParseScore(char *buf, uint n, uchar score[VtScoreSize])
-{
-	int i, c;
-
-	memset(score, 0, VtScoreSize);
-
-	if(n != VtScoreSize*2)
-		return 0;
-	for(i=0; i<VtScoreSize*2; i++){
-		if(buf[i] >= '0' && buf[i] <= '9')
-			c = buf[i] - '0';
-		else if(buf[i] >= 'a' && buf[i] <= 'f')
-			c = buf[i] - 'a' + 10;
-		else if(buf[i] >= 'A' && buf[i] <= 'F')
-			c = buf[i] - 'A' + 10;
-		else
-			return 0;
-
-		if((i & 1) == 0)
-			c <<= 4;
-	
-		score[i>>1] |= c;
-	}
-	return 1;
-}
-
--- a/sys/src/liboventi/plan9-io.c
+++ /dev/null
@@ -1,146 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-
-enum {
-	IdealAlignment = 32,
-	ChunkSize 	= 128*1024,
-};
-
-
-void
-vtMemFree(void *p)
-{
-	if(p == 0)
-		return;
-	free(p);
-}
-
-
-void *
-vtMemAlloc(int size)
-{
-	void *p;
-
-	p = malloc(size);
-	if(p == 0)
-		vtFatal("vtMemAlloc: out of memory");
-	setmalloctag(p, getcallerpc(&size));
-	return p;
-}
-
-void *
-vtMemAllocZ(int size)
-{
-	void *p = vtMemAlloc(size);
-	memset(p, 0, size);
-	setmalloctag(p, getcallerpc(&size));
-	return p;
-}
-
-void *
-vtMemRealloc(void *p, int size)
-{
-	if(p == nil)
-		return vtMemAlloc(size);
-	p = realloc(p, size);
-	if(p == 0)
-		vtFatal("vtRealloc: out of memory");
-	setrealloctag(p, getcallerpc(&size));
-	return p;
-}
-
-
-void *
-vtMemBrk(int n)
-{
-	static Lock lk;
-	static uchar *buf;
-	static int nbuf;
-	static int nchunk;
-	int align, pad;
-	void *p;
-
-	if(n >= IdealAlignment)
-		align = IdealAlignment;
-	else if(n > 8)
-		align = 8;
-	else	
-		align = 4;
-
-	lock(&lk);
-	pad = (align - (uintptr)buf) & (align-1);
-	if(n + pad > nbuf) {
-		buf = vtMemAllocZ(ChunkSize);
-		setmalloctag(buf, getcallerpc(&n));
-		nbuf = ChunkSize;
-		pad = (align - (uintptr)buf) & (align-1);
-		nchunk++;
-	}
-
-	assert(n + pad <= nbuf);	
-	
-	p = buf + pad;
-	buf += pad + n;
-	nbuf -= pad + n;
-	unlock(&lk);
-
-	return p;
-}
-
-void
-vtThreadSetName(char *name)
-{
-	int fd;
-	char buf[32];
-
-	sprint(buf, "/proc/%d/args", getpid());
-	if((fd = open(buf, OWRITE)) >= 0){
-		write(fd, name, strlen(name));
-		close(fd);
-	}
-}
-
-int
-vtFdRead(int fd, uchar *buf, int n)
-{
-	n = read(fd, buf, n);
-	if(n < 0) {
-		vtOSError();
-		return -1;
-	}
-	if(n == 0) {
-		vtSetError("unexpected EOF");
-		return 0;
-	}
-	return n;
-}
-
-int
-vtFdWrite(int fd, uchar *buf, int n)
-{
-	int nn;
-	
-	nn = write(fd, buf, n);
-	if(nn < 0) {
-		vtOSError();
-		return 0;
-	}
-	if(n != nn) {
-		vtSetError("truncated write");
-		return 0;
-	}
-	return 1;
-}
-
-void
-vtFdClose(int fd)
-{
-	close(fd);
-}
-
-char *
-vtOSError(void)
-{
-	return vtSetError("%r");
-}
--- a/sys/src/liboventi/plan9-sha1.c
+++ /dev/null
@@ -1,78 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-#include <libsec.h>
-
-static void encode(uchar*, u32int*, ulong);
-extern void vtSha1Block(u32int *s, uchar *p, ulong len);
-
-struct VtSha1
-{
-	DigestState *s;
-};
-
-VtSha1 *
-vtSha1Alloc(void)
-{
-	VtSha1 *s;
-
-	s = vtMemAlloc(sizeof(VtSha1));
-	vtSha1Init(s);
-	return s;
-}
-
-void
-vtSha1Free(VtSha1 *s)
-{
-	if(s == nil)
-		return;
-	if(s->s != nil)
-		free(s->s);
-	vtMemFree(s);
-}
-
-void
-vtSha1Init(VtSha1 *s)
-{
-	s->s = nil;
-}
-
-void
-vtSha1Update(VtSha1 *s, uchar *p, int len)
-{
-	s->s = sha1(p, len, nil, s->s);
-}
-
-void
-vtSha1Final(VtSha1 *s, uchar *digest)
-{
-	sha1(nil, 0, digest, s->s);
-	s->s = nil;
-}
-
-void
-vtSha1(uchar sha1[VtScoreSize], uchar *p, int n)
-{
-	VtSha1 s;
-
-	vtSha1Init(&s);
-	vtSha1Update(&s, p, n);
-	vtSha1Final(&s, sha1);
-}
-
-int
-vtSha1Check(uchar score[VtScoreSize], uchar *p, int n)
-{
-	VtSha1 s;
-	uchar score2[VtScoreSize];
-
-	vtSha1Init(&s);
-	vtSha1Update(&s, p, n);
-	vtSha1Final(&s, score2);
-
-	if(memcmp(score, score2, VtScoreSize) != 0) {
-		vtSetError("vtSha1Check failed");
-		return 0;
-	}
-	return 1;
-}
--- a/sys/src/liboventi/plan9-thread.acid
+++ /dev/null
@@ -1,531 +1,0 @@
-sizeof_1_ = 8;
-aggr _1_
-{
-	'U' 0 lo;
-	'U' 4 hi;
-};
-
-defn
-_1_(addr) {
-	complex _1_ addr;
-	print("	lo	", addr.lo, "\n");
-	print("	hi	", addr.hi, "\n");
-};
-
-sizeofFPdbleword = 8;
-aggr FPdbleword
-{
-	'F' 0 x;
-	{
-	'U' 0 lo;
-	'U' 4 hi;
-	};
-};
-
-defn
-FPdbleword(addr) {
-	complex FPdbleword addr;
-	print("	x	", addr.x, "\n");
-	print("_1_ {\n");
-		_1_(addr+0);
-	print("}\n");
-};
-
-UTFmax = 3;
-Runesync = 128;
-Runeself = 128;
-Runeerror = 65533;
-sizeofFmt = 48;
-aggr Fmt
-{
-	'b' 0 runes;
-	'X' 4 start;
-	'X' 8 to;
-	'X' 12 stop;
-	'X' 16 flush;
-	'X' 20 farg;
-	'D' 24 nfmt;
-	'X' 28 args;
-	'D' 32 r;
-	'D' 36 width;
-	'D' 40 prec;
-	'U' 44 flags;
-};
-
-defn
-Fmt(addr) {
-	complex Fmt addr;
-	print("	runes	", addr.runes, "\n");
-	print("	start	", addr.start\X, "\n");
-	print("	to	", addr.to\X, "\n");
-	print("	stop	", addr.stop\X, "\n");
-	print("	flush	", addr.flush\X, "\n");
-	print("	farg	", addr.farg\X, "\n");
-	print("	nfmt	", addr.nfmt, "\n");
-	print("	args	", addr.args\X, "\n");
-	print("	r	", addr.r, "\n");
-	print("	width	", addr.width, "\n");
-	print("	prec	", addr.prec, "\n");
-	print("	flags	", addr.flags, "\n");
-};
-
-FmtWidth = 1;
-FmtLeft = 2;
-FmtPrec = 4;
-FmtSharp = 8;
-FmtSpace = 16;
-FmtSign = 32;
-FmtZero = 64;
-FmtUnsigned = 128;
-FmtShort = 256;
-FmtLong = 512;
-FmtVLong = 1024;
-FmtComma = 2048;
-FmtByte = 4096;
-FmtFlag = 8192;
-sizeofTm = 40;
-aggr Tm
-{
-	'D' 0 sec;
-	'D' 4 min;
-	'D' 8 hour;
-	'D' 12 mday;
-	'D' 16 mon;
-	'D' 20 year;
-	'D' 24 wday;
-	'D' 28 yday;
-	'a' 32 zone;
-	'D' 36 tzoff;
-};
-
-defn
-Tm(addr) {
-	complex Tm addr;
-	print("	sec	", addr.sec, "\n");
-	print("	min	", addr.min, "\n");
-	print("	hour	", addr.hour, "\n");
-	print("	mday	", addr.mday, "\n");
-	print("	mon	", addr.mon, "\n");
-	print("	year	", addr.year, "\n");
-	print("	wday	", addr.wday, "\n");
-	print("	yday	", addr.yday, "\n");
-	print("	zone	", addr.zone, "\n");
-	print("	tzoff	", addr.tzoff, "\n");
-};
-
-PNPROC = 1;
-PNGROUP = 2;
-Profoff = 0;
-Profuser = 1;
-Profkernel = 2;
-Proftime = 3;
-Profsample = 4;
-sizeofLock = 4;
-aggr Lock
-{
-	'D' 0 val;
-};
-
-defn
-Lock(addr) {
-	complex Lock addr;
-	print("	val	", addr.val, "\n");
-};
-
-sizeofQLp = 12;
-aggr QLp
-{
-	'D' 0 inuse;
-	'A' QLp 4 next;
-	'C' 8 state;
-};
-
-defn
-QLp(addr) {
-	complex QLp addr;
-	print("	inuse	", addr.inuse, "\n");
-	print("	next	", addr.next\X, "\n");
-	print("	state	", addr.state, "\n");
-};
-
-sizeofQLock = 16;
-aggr QLock
-{
-	Lock 0 lock;
-	'D' 4 locked;
-	'A' QLp 8 $head;
-	'A' QLp 12 $tail;
-};
-
-defn
-QLock(addr) {
-	complex QLock addr;
-	print("Lock lock {\n");
-	Lock(addr.lock);
-	print("}\n");
-	print("	locked	", addr.locked, "\n");
-	print("	$head	", addr.$head\X, "\n");
-	print("	$tail	", addr.$tail\X, "\n");
-};
-
-sizeofRWLock = 20;
-aggr RWLock
-{
-	Lock 0 lock;
-	'D' 4 readers;
-	'D' 8 writer;
-	'A' QLp 12 $head;
-	'A' QLp 16 $tail;
-};
-
-defn
-RWLock(addr) {
-	complex RWLock addr;
-	print("Lock lock {\n");
-	Lock(addr.lock);
-	print("}\n");
-	print("	readers	", addr.readers, "\n");
-	print("	writer	", addr.writer, "\n");
-	print("	$head	", addr.$head\X, "\n");
-	print("	$tail	", addr.$tail\X, "\n");
-};
-
-sizeofRendez = 12;
-aggr Rendez
-{
-	'A' QLock 0 l;
-	'A' QLp 4 $head;
-	'A' QLp 8 $tail;
-};
-
-defn
-Rendez(addr) {
-	complex Rendez addr;
-	print("	l	", addr.l\X, "\n");
-	print("	$head	", addr.$head\X, "\n");
-	print("	$tail	", addr.$tail\X, "\n");
-};
-
-sizeofNetConnInfo = 36;
-aggr NetConnInfo
-{
-	'X' 0 dir;
-	'X' 4 root;
-	'X' 8 spec;
-	'X' 12 lsys;
-	'X' 16 lserv;
-	'X' 20 rsys;
-	'X' 24 rserv;
-	'X' 28 laddr;
-	'X' 32 raddr;
-};
-
-defn
-NetConnInfo(addr) {
-	complex NetConnInfo addr;
-	print("	dir	", addr.dir\X, "\n");
-	print("	root	", addr.root\X, "\n");
-	print("	spec	", addr.spec\X, "\n");
-	print("	lsys	", addr.lsys\X, "\n");
-	print("	lserv	", addr.lserv\X, "\n");
-	print("	rsys	", addr.rsys\X, "\n");
-	print("	rserv	", addr.rserv\X, "\n");
-	print("	laddr	", addr.laddr\X, "\n");
-	print("	raddr	", addr.raddr\X, "\n");
-};
-
-RFNAMEG = 1;
-RFENVG = 2;
-RFFDG = 4;
-RFNOTEG = 8;
-RFPROC = 16;
-RFMEM = 32;
-RFNOWAIT = 64;
-RFCNAMEG = 1024;
-RFCENVG = 2048;
-RFCFDG = 4096;
-RFREND = 8192;
-RFNOMNT = 16384;
-sizeofQid = 16;
-aggr Qid
-{
-	'W' 0 path;
-	'U' 8 vers;
-	'b' 12 type;
-};
-
-defn
-Qid(addr) {
-	complex Qid addr;
-	print("	path	", addr.path, "\n");
-	print("	vers	", addr.vers, "\n");
-	print("	type	", addr.type, "\n");
-};
-
-sizeofDir = 60;
-aggr Dir
-{
-	'u' 0 type;
-	'U' 4 dev;
-	Qid 8 qid;
-	'U' 24 mode;
-	'U' 28 atime;
-	'U' 32 mtime;
-	'V' 36 length;
-	'X' 44 name;
-	'X' 48 uid;
-	'X' 52 gid;
-	'X' 56 muid;
-};
-
-defn
-Dir(addr) {
-	complex Dir addr;
-	print("	type	", addr.type, "\n");
-	print("	dev	", addr.dev, "\n");
-	print("Qid qid {\n");
-	Qid(addr.qid);
-	print("}\n");
-	print("	mode	", addr.mode, "\n");
-	print("	atime	", addr.atime, "\n");
-	print("	mtime	", addr.mtime, "\n");
-	print("	length	", addr.length, "\n");
-	print("	name	", addr.name\X, "\n");
-	print("	uid	", addr.uid\X, "\n");
-	print("	gid	", addr.gid\X, "\n");
-	print("	muid	", addr.muid\X, "\n");
-};
-
-sizeofWaitmsg = 20;
-aggr Waitmsg
-{
-	'D' 0 pid;
-	'a' 4 time;
-	'X' 16 msg;
-};
-
-defn
-Waitmsg(addr) {
-	complex Waitmsg addr;
-	print("	pid	", addr.pid, "\n");
-	print("	time	", addr.time, "\n");
-	print("	msg	", addr.msg\X, "\n");
-};
-
-sizeofIOchunk = 8;
-aggr IOchunk
-{
-	'X' 0 addr;
-	'U' 4 len;
-};
-
-defn
-IOchunk(addr) {
-	complex IOchunk addr;
-	print("	addr	", addr.addr\X, "\n");
-	print("	len	", addr.len, "\n");
-};
-
-VtScoreSize = 20;
-VtMaxLumpSize = 57344;
-VtPointerDepth = 7;
-VtEntrySize = 40;
-VtRootSize = 300;
-VtMaxStringSize = 1000;
-VtAuthSize = 1024;
-MaxFragSize = 9216;
-VtMaxFileSize = 281474976710655;
-VtRootVersion = 2;
-VtCryptoStrengthNone = 0;
-VtCryptoStrengthAuth = 1;
-VtCryptoStrengthWeak = 2;
-VtCryptoStrengthStrong = 3;
-VtCryptoNone = 0;
-VtCryptoSSL3 = 1;
-VtCryptoTLS1 = 2;
-VtCryptoMax = 3;
-VtCodecNone = 0;
-VtCodecDeflate = 1;
-VtCodecThwack = 2;
-VtCodecMax = 3;
-VtErrType = 0;
-VtRootType = 1;
-VtDirType = 2;
-VtPointerType0 = 3;
-VtPointerType1 = 4;
-VtPointerType2 = 5;
-VtPointerType3 = 6;
-VtPointerType4 = 7;
-VtPointerType5 = 8;
-VtPointerType6 = 9;
-VtPointerType7 = 10;
-VtPointerType8 = 11;
-VtPointerType9 = 12;
-VtDataType = 13;
-VtMaxType = 14;
-VtEntryActive = 1;
-VtEntryDir = 2;
-VtEntryDepthShift = 2;
-VtEntryDepthMask = 28;
-VtEntryLocal = 32;
-VtEntryNoArchive = 64;
-sizeofVtRoot = 300;
-aggr VtRoot
-{
-	'u' 0 version;
-	'a' 2 name;
-	'a' 130 type;
-	'a' 258 score;
-	'u' 278 blockSize;
-	'a' 280 prev;
-};
-
-defn
-VtRoot(addr) {
-	complex VtRoot addr;
-	print("	version	", addr.version, "\n");
-	print("	name	", addr.name, "\n");
-	print("	type	", addr.type, "\n");
-	print("	score	", addr.score, "\n");
-	print("	blockSize	", addr.blockSize, "\n");
-	print("	prev	", addr.prev, "\n");
-};
-
-sizeofVtEntry = 40;
-aggr VtEntry
-{
-	'U' 0 gen;
-	'u' 4 psize;
-	'u' 6 dsize;
-	'b' 8 depth;
-	'b' 9 flags;
-	'W' 12 size;
-	'a' 20 score;
-};
-
-defn
-VtEntry(addr) {
-	complex VtEntry addr;
-	print("	gen	", addr.gen, "\n");
-	print("	psize	", addr.psize, "\n");
-	print("	dsize	", addr.dsize, "\n");
-	print("	depth	", addr.depth, "\n");
-	print("	flags	", addr.flags, "\n");
-	print("	size	", addr.size, "\n");
-	print("	score	", addr.score, "\n");
-};
-
-sizeofVtServerVtbl = 16;
-aggr VtServerVtbl
-{
-	'X' 0 read;
-	'X' 4 write;
-	'X' 8 closing;
-	'X' 12 sync;
-};
-
-defn
-VtServerVtbl(addr) {
-	complex VtServerVtbl addr;
-	print("	read	", addr.read\X, "\n");
-	print("	write	", addr.write\X, "\n");
-	print("	closing	", addr.closing\X, "\n");
-	print("	sync	", addr.sync\X, "\n");
-};
-
-VtVersion01 = 1;
-VtVersion02 = 2;
-QueuingW = 0;
-QueuingR = 1;
-sizeofThread = 20;
-aggr Thread
-{
-	'D' 0 pid;
-	'D' 4 ref;
-	'X' 8 error;
-	'D' 12 state;
-	'A' Thread 16 next;
-};
-
-defn
-Thread(addr) {
-	complex Thread addr;
-	print("	pid	", addr.pid, "\n");
-	print("	ref	", addr.ref, "\n");
-	print("	error	", addr.error\X, "\n");
-	print("	state	", addr.state, "\n");
-	print("	next	", addr.next\X, "\n");
-};
-
-sizeofVtLock = 20;
-aggr VtLock
-{
-	Lock 0 lk;
-	'A' Thread 4 writer;
-	'D' 8 readers;
-	'A' Thread 12 qfirst;
-	'A' Thread 16 qlast;
-};
-
-defn
-VtLock(addr) {
-	complex VtLock addr;
-	print("Lock lk {\n");
-	Lock(addr.lk);
-	print("}\n");
-	print("	writer	", addr.writer\X, "\n");
-	print("	readers	", addr.readers, "\n");
-	print("	qfirst	", addr.qfirst\X, "\n");
-	print("	qlast	", addr.qlast\X, "\n");
-};
-
-sizeofVtRendez = 12;
-aggr VtRendez
-{
-	'A' VtLock 0 lk;
-	'A' Thread 4 wfirst;
-	'A' Thread 8 wlast;
-};
-
-defn
-VtRendez(addr) {
-	complex VtRendez addr;
-	print("	lk	", addr.lk\X, "\n");
-	print("	wfirst	", addr.wfirst\X, "\n");
-	print("	wlast	", addr.wlast\X, "\n");
-};
-
-ERROR = 0;
-complex Thread vtRock;
-complex Thread vtAttach:p;
-complex Lock lk$4;
-complex Thread vtDetach:p;
-complex Thread vtSetError:p;
-complex Lock lk$12;
-complex VtLock vtLockFree:p;
-complex VtLock vtRendezAlloc:p;
-complex VtRendez vtRendezAlloc:q;
-complex VtRendez vtRendezFree:q;
-complex VtLock vtCanLock:p;
-complex Thread vtCanLock:t;
-complex VtLock vtLock:p;
-complex Thread vtLock:t;
-complex VtLock vtCanRLock:p;
-complex VtLock vtRLock:p;
-complex Thread vtRLock:t;
-complex VtLock vtUnlock:p;
-complex Thread vtUnlock:t;
-complex Thread vtUnlock:tt;
-complex VtLock vtRUnlock:p;
-complex Thread vtRUnlock:t;
-complex VtRendez vtSleep:q;
-complex Thread vtSleep:s;
-complex Thread vtSleep:t;
-complex Thread vtSleep:tt;
-complex VtLock vtSleep:p;
-complex VtRendez vtWakeup:q;
-complex Thread vtWakeup:t;
-complex VtLock vtWakeup:p;
-complex VtRendez vtWakeupAll:q;
-complex Thread threadSleep:t;
-complex Thread threadWakeup:t;
--- a/sys/src/liboventi/plan9-thread.c
+++ /dev/null
@@ -1,468 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-
-enum
-{
-	QueuingW,	/* queuing for write lock */
-	QueuingR,	/* queuing for read lock */
-};
-
-
-typedef struct Thread Thread;
-
-struct Thread {
-	int pid;
-	int ref;
-	char *error;
-	int state;
-	Thread *next;
-};
-
-struct VtLock {
-	Lock lk;
-	Thread *writer;		/* thread writering write lock */
-	int readers;		/* number writering read lock */
-	Thread *qfirst;
-	Thread *qlast;
-};
-
-struct VtRendez {
-	VtLock *lk;
-	Thread *wfirst;
-	Thread *wlast;
-};
-
-enum {
-	ERROR = 0,
-};
-
-static Thread **vtRock;
-
-static void	vtThreadInit(void);
-static void	threadSleep(Thread*);
-static void	threadWakeup(Thread*);
-
-int
-vtThread(void (*f)(void*), void *rock)
-{
-	int tid;
-
-	tid = rfork(RFNOWAIT|RFMEM|RFPROC);
-	switch(tid){
-	case -1:
-		vtOSError();
-		return -1;
-	case 0:
-		break;
-	default:
-		return tid;
-	}
-	vtAttach();
-	(*f)(rock);
-	vtDetach();
-	_exits(0);
-	return 0;
-}
-
-static Thread *
-threadLookup(void)
-{
-	return *vtRock;
-}
-
-void
-vtAttach(void)
-{
-	int pid;
-	Thread *p;
-	static int init;
-	static Lock lk;
-
-	lock(&lk);
-	if(!init) {
-		rfork(RFREND);
-		vtThreadInit();
-		init = 1;
-	}
-	unlock(&lk);
-
-	pid = getpid();
-	p = *vtRock;
-	if(p != nil && p->pid == pid) {
-		p->ref++;
-		return;
-	}
-	p = vtMemAllocZ(sizeof(Thread));
-	p->ref = 1;
-	p->pid = pid;
-	*vtRock = p;
-}
-
-void
-vtDetach(void)
-{
-	Thread *p;
-
-	p = *vtRock;
-	assert(p != nil);
-	p->ref--;
-	if(p->ref == 0) {
-		vtMemFree(p->error);
-		vtMemFree(p);
-		*vtRock = nil;
-	}
-}
-
-char *
-vtGetError(void)
-{
-	char *s;
-
-	if(ERROR)
-		fprint(2, "vtGetError: %s\n", threadLookup()->error);
-	s = threadLookup()->error;
-	if(s == nil)
-		return "unknown error";
-	return s;
-}
-
-char*
-vtSetError(char* fmt, ...)
-{
-	Thread *p;
-	char *s;
-	va_list args;
-
-	p = threadLookup();
-
-	va_start(args, fmt);
-	s = vsmprint(fmt, args);
-	vtMemFree(p->error);
-	p->error = s;
-	va_end(args);
-	if(ERROR)
-		fprint(2, "vtSetError: %s\n", p->error);
-	werrstr("%s", p->error);
-	return p->error;
-}
-
-static void
-vtThreadInit(void)
-{
-	static Lock lk;
-
-	lock(&lk);
-	if(vtRock != nil) {
-		unlock(&lk);
-		return;
-	}
-	vtRock = privalloc();
-	if(vtRock == nil)
-		vtFatal("can't allocate thread-private storage");
-	unlock(&lk);
-}
-
-VtLock*
-vtLockAlloc(void)
-{
-	return vtMemAllocZ(sizeof(VtLock));
-}
-
-/*
- * RSC: I think the test is backward.  Let's see who uses it. 
- *
-void
-vtLockInit(VtLock **p)
-{
-	static Lock lk;
-
-	lock(&lk);
-	if(*p != nil)
-		*p = vtLockAlloc();
-	unlock(&lk);
-}
- */
-
-void
-vtLockFree(VtLock *p)
-{
-	if(p == nil)
-		return;
-	assert(p->writer == nil);
-	assert(p->readers == 0);
-	assert(p->qfirst == nil);
-	vtMemFree(p);
-}
-
-VtRendez*
-vtRendezAlloc(VtLock *p)
-{
-	VtRendez *q;
-
-	q = vtMemAllocZ(sizeof(VtRendez));
-	q->lk = p;
-	setmalloctag(q, getcallerpc(&p));
-	return q;
-}
-
-void
-vtRendezFree(VtRendez *q)
-{
-	if(q == nil)
-		return;
-	assert(q->wfirst == nil);
-	vtMemFree(q);
-}
-
-int
-vtCanLock(VtLock *p)
-{
-	Thread *t;
-
-	lock(&p->lk);
-	t = *vtRock;
-	if(p->writer == nil && p->readers == 0) {
-		p->writer = t;
-		unlock(&p->lk);
-		return 1;
-	}
-	unlock(&p->lk);
-	return 0;
-}
-
-
-void
-vtLock(VtLock *p)
-{
-	Thread *t;
-
-	lock(&p->lk);
-	t = *vtRock;
-	if(p->writer == nil && p->readers == 0) {
-		p->writer = t;
-		unlock(&p->lk);
-		return;
-	}
-
-	/*
-	 * venti currently contains code that assume locks can be passed between threads :-(
-	 * assert(p->writer != t);
-	 */
-
-	if(p->qfirst == nil)
-		p->qfirst = t;
-	else
-		p->qlast->next = t;
-	p->qlast = t;
-	t->next = nil;
-	t->state = QueuingW;
-	unlock(&p->lk);
-
-	threadSleep(t);
-	assert(p->writer == t && p->readers == 0);
-}
-
-int
-vtCanRLock(VtLock *p)
-{
-	lock(&p->lk);
-	if(p->writer == nil && p->qfirst == nil) {
-		p->readers++;
-		unlock(&p->lk);
-		return 1;
-	}
-	unlock(&p->lk);
-	return 0;
-}
-
-void
-vtRLock(VtLock *p)
-{
-	Thread *t;
-
-	lock(&p->lk);
-	t = *vtRock;
-	if(p->writer == nil && p->qfirst == nil) {
-		p->readers++;
-		unlock(&p->lk);
-		return;
-	}
-
-	/*
-	 * venti currently contains code that assumes locks can be passed between threads
-	 * assert(p->writer != t);
-	 */
-	if(p->qfirst == nil)
-		p->qfirst = t;
-	else
-		p->qlast->next = t;
-	p->qlast = t;
-	t->next = nil;
-	t->state = QueuingR;
-	unlock(&p->lk);
-
-	threadSleep(t);
-	assert(p->writer == nil && p->readers > 0);
-}
-
-void
-vtUnlock(VtLock *p)
-{
-	Thread *t, *tt;
-
-	lock(&p->lk);
-	/*
-	 * venti currently has code that assumes lock can be passed between threads :-)
- 	 * assert(p->writer == *vtRock);
-	 */
- 	assert(p->writer != nil);   
-	assert(p->readers == 0);
-	t = p->qfirst;
-	if(t == nil) {
-		p->writer = nil;
-		unlock(&p->lk);
-		return;
-	}
-	if(t->state == QueuingW) {
-		p->qfirst = t->next;
-		p->writer = t;
-		unlock(&p->lk);
-		threadWakeup(t);
-		return;
-	}
-
-	p->writer = nil;
-	while(t != nil && t->state == QueuingR) {
-		tt = t;
-		t = t->next;
-		p->readers++;
-		threadWakeup(tt);
-	}
-	p->qfirst = t;
-	unlock(&p->lk);
-}
-
-void
-vtRUnlock(VtLock *p)
-{
-	Thread *t;
-
-	lock(&p->lk);
-	assert(p->writer == nil && p->readers > 0);
-	p->readers--;
-	t = p->qfirst;
-	if(p->readers > 0 || t == nil) {
-		unlock(&p->lk);
-		return;
-	}
-	assert(t->state == QueuingW);
-	
-	p->qfirst = t->next;
-	p->writer = t;
-	unlock(&p->lk);
-
-	threadWakeup(t);
-}
-
-int
-vtSleep(VtRendez *q)
-{
-	Thread *s, *t, *tt;
-	VtLock *p;
-
-	p = q->lk;
-	lock(&p->lk);
-	s = *vtRock;
-	/*
-	 * venti currently contains code that assume locks can be passed between threads :-(
-	 * assert(p->writer != s);
-	 */
-	assert(p->writer != nil);
-	assert(p->readers == 0);
-	t = p->qfirst;
-	if(t == nil) {
-		p->writer = nil;
-	} else if(t->state == QueuingW) {
-		p->qfirst = t->next;
-		p->writer = t;
-		threadWakeup(t);
-	} else {
-		p->writer = nil;
-		while(t != nil && t->state == QueuingR) {
-			tt = t;
-			t = t->next;
-			p->readers++;
-			threadWakeup(tt);
-		}
-	}
-
-	if(q->wfirst == nil)
-		q->wfirst = s;
-	else
-		q->wlast->next = s;
-	q->wlast = s;
-	s->next = nil;
-	unlock(&p->lk);
-
-	threadSleep(s);
-	assert(p->writer == s);
-	return 1;
-}
-
-int
-vtWakeup(VtRendez *q)
-{
-	Thread *t;
-	VtLock *p;
-
-	/*
-	 * take off wait and put on front of queue
-	 * put on front so guys that have been waiting will not get starved
-	 */
-	p = q->lk;
-	lock(&p->lk);	
-	/*
-	 * venti currently has code that assumes lock can be passed between threads :-)
- 	 * assert(p->writer == *vtRock);
-	 */
-	assert(p->writer != nil);
-	t = q->wfirst;
-	if(t == nil) {
-		unlock(&p->lk);
-		return 0;
-	}
-	q->wfirst = t->next;
-	if(p->qfirst == nil)
-		p->qlast = t;
-	t->next = p->qfirst;
-	p->qfirst = t;
-	t->state = QueuingW;
-	unlock(&p->lk);
-
-	return 1;
-}
-
-int
-vtWakeupAll(VtRendez *q)
-{
-	int i;
-	
-	for(i=0; vtWakeup(q); i++)
-		;
-	return i;
-}
-
-static void
-threadSleep(Thread *t)
-{
-	if(rendezvous(t, (void*)0x22bbdfd6) != (void*)0x44391f14)
-		sysfatal("threadSleep: rendezvous failed: %r");
-}
-
-static void
-threadWakeup(Thread *t)
-{
-	if(rendezvous(t, (void*)0x44391f14) != (void*)0x22bbdfd6)
-		sysfatal("threadWakeup: rendezvous failed: %r");
-}
--- a/sys/src/liboventi/readfully.c
+++ /dev/null
@@ -1,19 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-#include "session.h"
-
-int
-vtFdReadFully(int fd, uchar *p, int n)
-{
-	int nn;
-
-	while(n > 0) {
-		nn = vtFdRead(fd, p, n);
-		if(nn <= 0)
-			return 0;
-		n -= nn;
-		p += nn;
-	}
-	return 1;
-}
--- a/sys/src/liboventi/rpc.c
+++ /dev/null
@@ -1,471 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-#include "session.h"
-
-struct {
-	int version;
-	char *s;
-} vtVersions[] = {
-	VtVersion02, "02",
-	0, 0,
-};
-
-static char EBigString[] = "string too long";
-static char EBigPacket[] = "packet too long";
-static char ENullString[] = "missing string";
-static char EBadVersion[] = "bad format in version string";
-
-static Packet *vtRPC(VtSession *z, int op, Packet *p);
-
-
-VtSession *
-vtAlloc(void)
-{
-	VtSession *z;
-
-	z = vtMemAllocZ(sizeof(VtSession));
-	z->lk = vtLockAlloc();
-//	z->inHash = vtSha1Alloc();
-	z->inLock = vtLockAlloc();
-	z->part = packetAlloc();
-//	z->outHash = vtSha1Alloc();
-	z->outLock = vtLockAlloc();
-	z->fd = -1;
-	z->uid = vtStrDup("anonymous");
-	z->sid = vtStrDup("anonymous");
-	return z;
-}
-
-void
-vtReset(VtSession *z)
-{
-	vtLock(z->lk);
-	z->cstate = VtStateAlloc;
-	if(z->fd >= 0){
-		vtFdClose(z->fd);
-		z->fd = -1;
-	}
-	vtUnlock(z->lk);
-}
-
-int
-vtConnected(VtSession *z)
-{
-	return z->cstate == VtStateConnected;
-}
-
-void
-vtDisconnect(VtSession *z, int error)
-{
-	Packet *p;
-	uchar *b;
-
-vtDebug(z, "vtDisconnect\n");
-	vtLock(z->lk);
-	if(z->cstate == VtStateConnected && !error && z->vtbl == nil) {
-		/* clean shutdown */
-		p = packetAlloc();
-		b = packetHeader(p, 2);
-		b[0] = VtQGoodbye;
-		b[1] = 0;
-		vtSendPacket(z, p);
-	}
-	if(z->fd >= 0)
-		vtFdClose(z->fd);
-	z->fd = -1;
-	z->cstate = VtStateClosed;
-	vtUnlock(z->lk);
-}
-
-void
-vtClose(VtSession *z)
-{
-	vtDisconnect(z, 0);
-}
-
-void
-vtFree(VtSession *z)
-{
-	if(z == nil)
-		return;
-	vtLockFree(z->lk);
-	vtSha1Free(z->inHash);
-	vtLockFree(z->inLock);
-	packetFree(z->part);
-	vtSha1Free(z->outHash);
-	vtLockFree(z->outLock);
-	vtMemFree(z->uid);
-	vtMemFree(z->sid);
-	vtMemFree(z->vtbl);
-
-	memset(z, 0, sizeof(VtSession));
-	z->fd = -1;
-
-	vtMemFree(z);
-}
-
-char *
-vtGetUid(VtSession *s)
-{
-	return s->uid;
-}
-
-char *
-vtGetSid(VtSession *z)
-{
-	return z->sid;
-}
-
-int
-vtSetDebug(VtSession *z, int debug)
-{
-	int old;
-	vtLock(z->lk);
-	old = z->debug;
-	z->debug = debug;
-	vtUnlock(z->lk);
-	return old;
-}
-
-int
-vtSetFd(VtSession *z, int fd)
-{
-	vtLock(z->lk);
-	if(z->cstate != VtStateAlloc) {
-		vtSetError("bad state");
-		vtUnlock(z->lk);
-		return 0;
-	}
-	if(z->fd >= 0)
-		vtFdClose(z->fd);
-	z->fd = fd;
-	vtUnlock(z->lk);
-	return 1;
-}
-
-int
-vtGetFd(VtSession *z)
-{
-	return z->fd;
-}
-
-int
-vtSetCryptoStrength(VtSession *z, int c)
-{
-	if(z->cstate != VtStateAlloc) {
-		vtSetError("bad state");
-		return 0;
-	}
-	if(c != VtCryptoStrengthNone) {
-		vtSetError("not supported yet");
-		return 0;
-	}
-	return 1;
-}
-
-int
-vtGetCryptoStrength(VtSession *s)
-{
-	return s->cryptoStrength;
-}
-
-int
-vtSetCompression(VtSession *z, int fd)
-{
-	vtLock(z->lk);
-	if(z->cstate != VtStateAlloc) {
-		vtSetError("bad state");
-		vtUnlock(z->lk);
-		return 0;
-	}
-	z->fd = fd;
-	vtUnlock(z->lk);
-	return 1;
-}
-
-int
-vtGetCompression(VtSession *s)
-{
-	return s->compression;
-}
-
-int
-vtGetCrypto(VtSession *s)
-{
-	return s->crypto;
-}
-
-int
-vtGetCodec(VtSession *s)
-{
-	return s->codec;
-}
-
-char *
-vtGetVersion(VtSession *z)
-{
-	int v, i;
-	
-	v = z->version;
-	if(v == 0)
-		return "unknown";
-	for(i=0; vtVersions[i].version; i++)
-		if(vtVersions[i].version == v)
-			return vtVersions[i].s;
-	assert(0);
-	return 0;
-}
-
-/* hold z->inLock */
-static int
-vtVersionRead(VtSession *z, char *prefix, int *ret)
-{
-	char c;
-	char buf[VtMaxStringSize];
-	char *q, *p, *pp;
-	int i;
-
-	q = prefix;
-	p = buf;
-	for(;;) {
-		if(p >= buf + sizeof(buf)) {
-			vtSetError(EBadVersion);
-			return 0;
-		}
-		if(!vtFdReadFully(z->fd, (uchar*)&c, 1))
-			return 0;
-		if(z->inHash)
-			vtSha1Update(z->inHash, (uchar*)&c, 1);
-		if(c == '\n') {
-			*p = 0;
-			break;
-		}
-		if(c < ' ' || *q && c != *q) {
-			vtSetError(EBadVersion);
-			return 0;
-		}
-		*p++ = c;
-		if(*q)
-			q++;
-	}
-		
-	vtDebug(z, "version string in: %s\n", buf);
-
-	p = buf + strlen(prefix);
-	for(;;) {
-		for(pp=p; *pp && *pp != ':'  && *pp != '-'; pp++)
-			;
-		for(i=0; vtVersions[i].version; i++) {
-			if(strlen(vtVersions[i].s) != pp-p)
-				continue;
-			if(memcmp(vtVersions[i].s, p, pp-p) == 0) {
-				*ret = vtVersions[i].version;
-				return 1;
-			}
-		}
-		p = pp;
-		if(*p != ':')
-			return 0;
-		p++;
-	}	
-}
-
-Packet*
-vtRecvPacket(VtSession *z)
-{
-	uchar buf[10], *b;
-	int n;
-	Packet *p;
-	int size, len;
-
-	if(z->cstate != VtStateConnected) {
-		vtSetError("session not connected");
-		return 0;
-	}
-
-	vtLock(z->inLock);
-	p = z->part;
-	/* get enough for head size */
-	size = packetSize(p);
-	while(size < 2) {
-		b = packetTrailer(p, MaxFragSize);
-		assert(b != nil);
-		n = vtFdRead(z->fd, b, MaxFragSize);
-		if(n <= 0)
-			goto Err;
-		size += n;
-		packetTrim(p, 0, size);
-	}
-
-	if(!packetConsume(p, buf, 2))
-		goto Err;
-	len = (buf[0] << 8) | buf[1];
-	size -= 2;
-
-	while(size < len) {
-		n = len - size;
-		if(n > MaxFragSize)
-			n = MaxFragSize;
-		b = packetTrailer(p, n);
-		if(!vtFdReadFully(z->fd, b, n))
-			goto Err;
-		size += n;
-	}
-	p = packetSplit(p, len);
-	vtUnlock(z->inLock);
-	return p;
-Err:	
-	vtUnlock(z->inLock);
-	return nil;	
-}
-
-int
-vtSendPacket(VtSession *z, Packet *p)
-{
-	IOchunk ioc;
-	int n;
-	uchar buf[2];
-	
-	/* add framing */
-	n = packetSize(p);
-	if(n >= (1<<16)) {
-		vtSetError(EBigPacket);
-		packetFree(p);
-		return 0;
-	}
-	buf[0] = n>>8;
-	buf[1] = n;
-	packetPrefix(p, buf, 2);
-
-	for(;;) {
-		n = packetFragments(p, &ioc, 1, 0);
-		if(n == 0)
-			break;
-		if(!vtFdWrite(z->fd, ioc.addr, ioc.len)) {
-			packetFree(p);
-			return 0;
-		}
-		packetConsume(p, nil, n);
-	}
-	packetFree(p);
-	return 1;
-}
-
-
-int
-vtGetString(Packet *p, char **ret)
-{
-	uchar buf[2];
-	int n;
-	char *s;
-
-	if(!packetConsume(p, buf, 2))
-		return 0;
-	n = (buf[0]<<8) + buf[1];
-	if(n > VtMaxStringSize) {
-		vtSetError(EBigString);
-		return 0;
-	}
-	s = vtMemAlloc(n+1);
-	setmalloctag(s, getcallerpc(&p));
-	if(!packetConsume(p, (uchar*)s, n)) {
-		vtMemFree(s);
-		return 0;
-	}
-	s[n] = 0;
-	*ret = s;
-	return 1;
-}
-
-int
-vtAddString(Packet *p, char *s)
-{
-	uchar buf[2];
-	int n;
-
-	if(s == nil) {
-		vtSetError(ENullString);
-		return 0;
-	}
-	n = strlen(s);
-	if(n > VtMaxStringSize) {
-		vtSetError(EBigString);
-		return 0;
-	}
-	buf[0] = n>>8;
-	buf[1] = n;
-	packetAppend(p, buf, 2);
-	packetAppend(p, (uchar*)s, n);
-	return 1;
-}
-
-int
-vtConnect(VtSession *z, char *password)
-{
-	char buf[VtMaxStringSize], *p, *ep, *prefix;
-	int i;
-
-	USED(password);
-	vtLock(z->lk);
-	if(z->cstate != VtStateAlloc) {
-		vtSetError("bad session state");
-		vtUnlock(z->lk);
-		return 0;
-	}
-	if(z->fd < 0){
-		vtSetError("%s", z->fderror);
-		vtUnlock(z->lk);
-		return 0;
-	}
-
-	/* be a little anal */
-	vtLock(z->inLock);
-	vtLock(z->outLock);
-
-	prefix = "venti-";
-	p = buf;
-	ep = buf + sizeof(buf);
-	p = seprint(p, ep, "%s", prefix);
-	p += strlen(p);
-	for(i=0; vtVersions[i].version; i++) {
-		if(i != 0)
-			*p++ = ':';
-		p = seprint(p, ep, "%s", vtVersions[i].s);
-	}
-	p = seprint(p, ep, "-libventi\n");
-	assert(p-buf < sizeof(buf));
-	if(z->outHash)
-		vtSha1Update(z->outHash, (uchar*)buf, p-buf);
-	if(!vtFdWrite(z->fd, (uchar*)buf, p-buf))
-		goto Err;
-	
-	vtDebug(z, "version string out: %s", buf);
-
-	if(!vtVersionRead(z, prefix, &z->version))
-		goto Err;
-		
-	vtDebug(z, "version = %d: %s\n", z->version, vtGetVersion(z));
-
-	vtUnlock(z->inLock);
-	vtUnlock(z->outLock);
-	z->cstate = VtStateConnected;
-	vtUnlock(z->lk);
-
-	if(z->vtbl)
-		return 1;
-
-	if(!vtHello(z))
-		goto Err;
-	return 1;	
-Err:
-	if(z->fd >= 0)
-		vtFdClose(z->fd);
-	z->fd = -1;
-	vtUnlock(z->inLock);
-	vtUnlock(z->outLock);
-	z->cstate = VtStateClosed;
-	vtUnlock(z->lk);
-	return 0;	
-}
-
--- a/sys/src/liboventi/scorefmt.c
+++ /dev/null
@@ -1,20 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-
-int
-vtScoreFmt(Fmt *f)
-{
-	uchar *v;
-	int i;
-
-	v = va_arg(f->args, uchar*);
-	if(v == nil){
-		fmtprint(f, "*");
-	}else{
-		for(i = 0; i < VtScoreSize; i++)
-			fmtprint(f, "%2.2ux", v[i]);
-	}
-
-	return 0;
-}
--- a/sys/src/liboventi/server.c
+++ /dev/null
@@ -1,265 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-#include "session.h"
-
-static char EAuthState[] = "bad authentication state";
-static char ENotServer[] = "not a server session";
-static char EVersion[] = "incorrect version number";
-static char EProtocolBotch[] = "venti protocol botch";
-
-VtSession *
-vtServerAlloc(VtServerVtbl *vtbl)
-{
-	VtSession *z = vtAlloc();
-	z->vtbl = vtMemAlloc(sizeof(VtServerVtbl));
-	setmalloctag(z->vtbl, getcallerpc(&vtbl));
-	*z->vtbl = *vtbl;
-	return z;
-}
-
-static int
-srvHello(VtSession *z, char *version, char *uid, int , uchar *, int , uchar *, int )
-{
-	vtLock(z->lk);
-	if(z->auth.state != VtAuthHello) {
-		vtSetError(EAuthState);
-		goto Err;
-	}
-	if(strcmp(version, vtGetVersion(z)) != 0) {
-		vtSetError(EVersion);
-		goto Err;
-	}
-	vtMemFree(z->uid);
-	z->uid = vtStrDup(uid);
-	z->auth.state = VtAuthOK;
-	vtUnlock(z->lk);
-	return 1;
-Err:
-	z->auth.state = VtAuthFailed;
-	vtUnlock(z->lk);
-	return 0;
-}
-
-
-static int
-dispatchHello(VtSession *z, Packet **pkt)
-{
-	char *version, *uid;
-	uchar *crypto, *codec;
-	uchar buf[10];
-	int ncrypto, ncodec, cryptoStrength;
-	int ret;
-	Packet *p;
-
-	p = *pkt;
-
-	version = nil;	
-	uid = nil;
-	crypto = nil;
-	codec = nil;
-
-	ret = 0;
-	if(!vtGetString(p, &version))
-		goto Err;
-	if(!vtGetString(p, &uid))
-		goto Err;
-	if(!packetConsume(p, buf, 2))
-		goto Err;
-	cryptoStrength = buf[0];
-	ncrypto = buf[1];
-	crypto = vtMemAlloc(ncrypto);
-	if(!packetConsume(p, crypto, ncrypto))
-		goto Err;
-
-	if(!packetConsume(p, buf, 1))
-		goto Err;
-	ncodec = buf[0];
-	codec = vtMemAlloc(ncodec);
-	if(!packetConsume(p, codec, ncodec))
-		goto Err;
-
-	if(packetSize(p) != 0) {
-		vtSetError(EProtocolBotch);
-		goto Err;
-	}
-	if(!srvHello(z, version, uid, cryptoStrength, crypto, ncrypto, codec, ncodec)) {
-		packetFree(p);
-		*pkt = nil;
-	} else {
-		if(!vtAddString(p, vtGetSid(z)))
-			goto Err;
-		buf[0] = vtGetCrypto(z);
-		buf[1] = vtGetCodec(z);
-		packetAppend(p, buf, 2);
-	}
-	ret = 1;
-Err:
-	vtMemFree(version);
-	vtMemFree(uid);
-	vtMemFree(crypto);
-	vtMemFree(codec);
-	return ret;
-}
-
-static int
-dispatchRead(VtSession *z, Packet **pkt)
-{
-	Packet *p;
-	int type, n;
-	uchar score[VtScoreSize], buf[4];
-
-	p = *pkt;
-	if(!packetConsume(p, score, VtScoreSize))
-		return 0;
-	if(!packetConsume(p, buf, 4))
-		return 0;
-	type = buf[0];
-	n = (buf[2]<<8) | buf[3];
-	if(packetSize(p) != 0) {
-		vtSetError(EProtocolBotch);
-		return 0;
-	}
-	packetFree(p);
-	*pkt = (*z->vtbl->read)(z, score, type, n);
-	return 1;
-}
-
-static int
-dispatchWrite(VtSession *z, Packet **pkt)
-{
-	Packet *p;
-	int type;
-	uchar score[VtScoreSize], buf[4];
-
-	p = *pkt;
-	if(!packetConsume(p, buf, 4))
-		return 0;
-	type = buf[0];
-	if(!(z->vtbl->write)(z, score, type, p)) {
-		*pkt = 0;
-	} else {
-		*pkt = packetAlloc();
-		packetAppend(*pkt, score, VtScoreSize);
-	}
-	return 1;
-}
-
-static int
-dispatchSync(VtSession *z, Packet **pkt)
-{
-	(z->vtbl->sync)(z);
-	if(packetSize(*pkt) != 0) {
-		vtSetError(EProtocolBotch);
-		return 0;
-	}
-	return 1;
-}
-
-int
-vtExport(VtSession *z)
-{
-	Packet *p;
-	uchar buf[10], *hdr;
-	int op, tid, clean;
-
-	if(z->vtbl == nil) {
-		vtSetError(ENotServer);
-		return 0;
-	}
-
-	/* fork off slave */
-	switch(rfork(RFNOWAIT|RFMEM|RFPROC)){
-	case -1:
-		vtOSError();
-		return 0;
-	case 0:
-		break;
-	default:
-		return 1;
-	}
-
-	
-	p = nil;
-	clean = 0;
-	vtAttach();
-	if(!vtConnect(z, nil))
-		goto Exit;
-
-	vtDebug(z, "server connected!\n");
-if(0)	vtSetDebug(z, 1);
-
-	for(;;) {
-		p = vtRecvPacket(z);
-		if(p == nil) {
-			break;
-		}
-		vtDebug(z, "server recv: ");
-		vtDebugMesg(z, p, "\n");
-
-		if(!packetConsume(p, buf, 2)) {
-			vtSetError(EProtocolBotch);
-			break;
-		}
-		op = buf[0];
-		tid = buf[1];
-		switch(op) {
-		default:
-			vtSetError(EProtocolBotch);
-			goto Exit;
-		case VtQPing:
-			break;
-		case VtQGoodbye:
-			clean = 1;
-			goto Exit;
-		case VtQHello:
-			if(!dispatchHello(z, &p))
-				goto Exit;
-			break;
-		case VtQRead:
-			if(!dispatchRead(z, &p))
-				goto Exit;
-			break;
-		case VtQWrite:
-			if(!dispatchWrite(z, &p))
-				goto Exit;
-			break;
-		case VtQSync:
-			if(!dispatchSync(z, &p))
-				goto Exit;
-			break;
-		}
-		if(p != nil) {
-			hdr = packetHeader(p, 2);
-			hdr[0] = op+1;
-			hdr[1] = tid;
-		} else {
-			p = packetAlloc();
-			hdr = packetHeader(p, 2);
-			hdr[0] = VtRError;
-			hdr[1] = tid;
-			if(!vtAddString(p, vtGetError()))
-				goto Exit;
-		}
-
-		vtDebug(z, "server send: ");
-		vtDebugMesg(z, p, "\n");
-
-		if(!vtSendPacket(z, p)) {
-			p = nil;
-			goto Exit;
-		}
-	}
-Exit:
-	if(p != nil)
-		packetFree(p);
-	if(z->vtbl->closing)
-		z->vtbl->closing(z, clean);
-	vtClose(z);
-	vtFree(z);
-	vtDetach();
-
-	exits(0);
-	return 0;	/* never gets here */
-}
-
--- a/sys/src/liboventi/session.h
+++ /dev/null
@@ -1,74 +1,0 @@
-typedef struct VtAuth VtAuth;
-
-/* op codes */
-enum {
-	VtRError = 1,
-	VtQPing,
-	VtRPing,
-	VtQHello,
-	VtRHello,
-	VtQGoodbye,
-	VtRGoodbye,	/* not used */
-	VtQAuth0,
-	VtRAuth0,
-	VtQAuth1,
-	VtRAuth1,
-	VtQRead,
-	VtRRead,
-	VtQWrite,
-	VtRWrite,
-	VtQSync,
-	VtRSync,
-
-	VtMaxOp
-};
-
-/* connection state */
-enum {
-	VtStateAlloc,
-	VtStateConnected,
-	VtStateClosed,
-};
-
-/* auth state */
-enum {
-	VtAuthHello,
-	VtAuth0,
-	VtAuth1,
-	VtAuthOK,
-	VtAuthFailed,
-};
-
-struct VtAuth {
-	int state;
-	uchar client[VtScoreSize];
-	uchar sever[VtScoreSize];
-};
-
-struct VtSession {
-	VtLock *lk;
-	VtServerVtbl *vtbl;	/* == nil means client side */
-	int cstate;		/* connection state */
-	int fd;
-	char fderror[ERRMAX];
-
-	VtAuth auth;
-
-	VtSha1 *inHash;
-	VtLock *inLock;
-	Packet *part;		/* partial packet */
-
-	VtSha1 *outHash;
-	VtLock *outLock;
-
-	int debug;
-	int version;
-	int ref;
-	char *uid;
-	char *sid;
-	int cryptoStrength;
-	int compression;
-	int crypto;
-	int codec;
-};
-
--- a/sys/src/liboventi/strdup.c
+++ /dev/null
@@ -1,19 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-
-char*
-vtStrDup(char *s)
-{
-	int n;
-	char *ss;
-
-	if(s == nil)
-		return nil;
-	n = strlen(s) + 1;
-	ss = vtMemAlloc(n);
-	memmove(ss, s, n);
-	setmalloctag(ss, getcallerpc(&s));
-	return ss;
-}
-
--- a/sys/src/liboventi/venti.txt
+++ /dev/null
@@ -1,267 +1,0 @@
-
-protocol version id
-
-both client and server send '\n' terminated ascii of the form
-
-venti-<versions>-<software>
-
-
-<software> = is a software id which is ignored but may be useful for debugging
-
-If the server and client have the same version number then this
-version is used.  Otherwise backup to the greatest common
-major version number, e.g. 1.00 2.00 etc.  If no version in
-common then abort.  The idea is both client and server should
-support a continusous range of major versions.  The minor version
-numbers are used for development purposes.
-
-After protocol negotiation switch to binary format
-
-all numbers sent big endian
-
-strings are sent with 2 byte length without nulls and in utf-8 max size of 1K
-
-RPC protocol
-
-header 
-	op[1]	byte op
-	tid[2]	transation id
-
-client manages the tid space.  Until session is established tid must equal 0.
-i.e. only one outstanding op.
-
-CipherStrength
-	None,
-	Auth,
-	Weak,
-	Strong
-CipherAlgorithms
-	None
-	SSL3
-	TLS1
-CompressionAlgorithms
-	None
-	Deflate
-	Thwack?
-
-BlockTypes
-	Root
-	Pointer
-	Data
-
-==============================================
-
-TPing
-RPing
-
-RError
-	error: string
-
-THello
-	version:string;		know to be supported by both
-	uid: string
-	uhash[20]		use for cipher boot strapping
-	cipherstrength[1]
-	ncipher[1];
-	cipher[ncipher];
-	ncompressor[1];
-	compressor[ncompressor];
-RHello
-	sid: string
-	shash[20];		use for cipher bott strapping
-	cipher[1];
-	compressor[1];
-
-use srp style authentication
-	g=2
-	N is safe prime 1024 bits - find a good prime!
-
-	x = H("venti" H(sid) H(uid) H(password))
-	v = g^x
-	a = random
-	b = random
-	B = (v + g^b)
-	A = g^a
-	u = first four bytes of H(B)
-	S = (B - g^x) ^ (a + u*x) = (A * v^u) ^ b
-	K = H(S)
-	M1 = H(H(versions) H(THello) H(RHello) A B K)
-	M2 = H(A M1 K)
-
-TAuth0
-	A[128]
-RAuth0
-	B[128]
-TAuth1
-	M1[20]
-RAuth1
-	M2[20]
-
-push cipher
-push compression
-
-TWrite
-	length[2] max 56*1024
-	type[1]
-	data[length]
-RWrite
-	hash[20]
-
-TRead
-	hash[20]
-	type[1]
-	length[2]
-RRead
-	length[2]
-	data[length]
-
-============================================================
-
-simplified access when trusting the server
-reduces network bandwidth since pointer blocks are not
-sent to the client - can also enable permission checking
-
-RReadRoot
-	root[20]
-TReadRoot
-	name: string
-	type: string
-	blocksize[2]
-	nblock[8]
-	time[4]
-	uid: string;
-	gid: string
-
-RReadData
-	root[20]
-	block[8]
-	length[2]
-TReadData
-	length[2]
-	collision[1]
-	data[length]
-
-==============================================
-
-maybe some clients should be required to navigate to block via root nodes.
-This would enable permission checking via access to the root node.
-
-RTagOpen
-	tag[2]
-	root[20]
-TTagOpen
-
-QTagRead
-	tag[2]
-	type[1]
-	length[2]
-RTagRead
-	length[2]
-	data[length]
-	
-QTagWalkRead
-	tag[2]
-	ntag[2]		can reuse a tag to do an implict clunk
-	index[2]
-	type[1]
-	length[2]
-RTagWalkRead
-	length[2]
-	data[length]
-
-RTagClunk
-	tag[2]
-TTagClunk
-
-============================
-
-Types of blocks
-
-Data
-
-Root
-	name[128]
-	type[128]
-	score[20]	- DirBlock
-
-Pointer
-	score[20]*	the number of hashes can be less than fanout when the
-			tree is not full
-DirBlock
-	DirEntry[32]*
-
-DirEntry	
-	pointersize[2]	- pointer block size
-	datasize[2]	- data blocks size
-	flag[1]		directory
-	size[7]		in bytes - determines pointer depth - intermidate truncated block count as full
-	score[20]	root of pointer blocks or data block 
-
-============================
-
-mode flags
-	(1<<0)	ModeOtherExec
-	(1<<1)	ModeOtherWrite
-	(1<<2)	ModeOtherRead
-	(1<<3)	ModeGroupExec
-	(1<<4)	ModeGroupWrite
-	(1<<5)	ModeGroupRead
-	(1<<6)	ModeOwnerExec
-	(1<<7)	ModeOwnerWrite
-	(1<<8)	ModeOwnerRead
-	(1<<9)	ModeSticky
-	(1<<10)	ModeSetUid
-	(1<<11)	ModeSetGid
-	(1<<12)	ModeAppend
-	(1<<13)	ModeExclusive
-	(1<<14)	ModeLink
-	(1<<15)	ModeDir	- duplicates dir entry
-	(1<<16) ModeHidden
-	(1<<17) ModeSystem
-	(1<<18) ModeArchive
-	(1<<19) ModeTemporary
-	(1<<18) ModeCompressed
-	(1<<19) ModeEncrypted
-
-extraType
-	2	Plan9
-	version[4]
-	muid: string
-
-	3 NT Time
-	createTime[8];
-	modifyTime[8];
-	accessTime[8]
-	
-
-MetaEntry
-	name: string	/* must be first */
-	direntry[4]
-
-	id[8]
-
-	uid: string
-	gui: string
-	mtime[4]
-	ctime[4]
-	atime[4]
-	
-	mode[4] 
-	
-	extratype;
-	extrasize[2]
-	extra:[nextra]
-
-MetaEntry Block
-	magic[4]
-	size[2]
-	free[2]	- used to determine if work compacting
-	maxindex[2] - size of index table in bytes
-	nindex[2]
-	index[2*nindex]
-
-per OS directory entries?
-
-inode...
-
-
--- a/sys/src/liboventi/zero.c
+++ /dev/null
@@ -1,79 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <oventi.h>
-
-/* score of a zero length block */
-uchar	vtZeroScore[VtScoreSize] = {
-	0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b, 0x0d, 0x32, 0x55,
-	0xbf, 0xef, 0x95, 0x60, 0x18, 0x90, 0xaf, 0xd8, 0x07, 0x09
-};
-
-
-int
-vtZeroExtend(int type, uchar *buf, int n, int nn)
-{
-	uchar *p, *ep;
-
-	switch(type) {
-	default:
-		memset(buf+n, 0, nn-n);
-		break;
-	case VtPointerType0:
-	case VtPointerType1:
-	case VtPointerType2:
-	case VtPointerType3:
-	case VtPointerType4:
-	case VtPointerType5:
-	case VtPointerType6:
-	case VtPointerType7:
-	case VtPointerType8:
-	case VtPointerType9:
-		p = buf + (n/VtScoreSize)*VtScoreSize;
-		ep = buf + (nn/VtScoreSize)*VtScoreSize;
-		while(p < ep) {
-			memmove(p, vtZeroScore, VtScoreSize);
-			p += VtScoreSize;
-		}
-		memset(p, 0, buf+nn-p);
-		break;
-	}
-	return 1;
-}
-
-int 
-vtZeroTruncate(int type, uchar *buf, int n)
-{
-	uchar *p;
-
-	switch(type) {
-	default:
-		for(p = buf + n; p > buf; p--) {
-			if(p[-1] != 0)
-				break;
-		}
-		return p - buf;
-	case VtRootType:
-		if(n < VtRootSize)
-			return n;
-		return VtRootSize;
-	case VtPointerType0:
-	case VtPointerType1:
-	case VtPointerType2:
-	case VtPointerType3:
-	case VtPointerType4:
-	case VtPointerType5:
-	case VtPointerType6:
-	case VtPointerType7:
-	case VtPointerType8:
-	case VtPointerType9:
-		/* ignore slop at end of block */
-		p = buf + (n/VtScoreSize)*VtScoreSize;
-
-		while(p > buf) {
-			if(memcmp(p - VtScoreSize, vtZeroScore, VtScoreSize) != 0)
-				break;
-			p -= VtScoreSize;
-		}
-		return p - buf;
-	}
-}
--- a/sys/src/mkfile
+++ b/sys/src/mkfile
@@ -28,7 +28,6 @@
 	libmemlayer\
 	libmp\
 	libndb\
-	liboventi\
 	libplumb\
 	libregexp\
 	libscribble\