#include <u.h>
#include <libc.h>
#include <thread.h>
#include <venti.h>
#include <bio.h>

enum
{
	// XXX What to do here?
	VtMaxLumpSize = 65535,
};

char *host;
Biobuf b;
VtConn *z;
uchar *buf;
void run(Biobuf*);
int nn;

void
usage(void)
{
	fprint(2, "usage: readlist [-h host] list\n");
	threadexitsall("usage");
}

int
parsescore(uchar *score, char *buf, int n)
{
	int i, c;

	memset(score, 0, VtScoreSize);

	if(n != VtScoreSize*2){
		werrstr("score wrong length %d", n);
		return -1;
	}
	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 {
			c = buf[i];
			werrstr("bad score char %d '%c'", c, c);
			return -1;
		}

		if((i & 1) == 0)
			c <<= 4;
	
		score[i>>1] |= c;
	}
	return 0;
}

void
threadmain(int argc, char *argv[])
{
	int fd, i;

	ARGBEGIN{
	case 'h':
		host = EARGF(usage());
		break;
	default:
		usage();
		break;
	}ARGEND

	fmtinstall('V', vtscorefmt);
	buf = vtmallocz(VtMaxLumpSize);
	z = vtdial(host);
	if(z == nil)
		sysfatal("could not connect to server: %r");
	if(vtconnect(z) < 0)
		sysfatal("vtconnect: %r");

	if(argc == 0){
		Binit(&b, 0, OREAD);
		run(&b);
	}else{
		for(i=0; i<argc; i++){
			if((fd = open(argv[i], OREAD)) < 0)
				sysfatal("open %s: %r", argv[i]);
			Binit(&b, fd, OREAD);
			run(&b);
		}
	}
	threadexitsall(nil);
}

void
run(Biobuf *b)
{
	char *p, *f[10];
	int nf;
	uchar score[20];
	int type, n;

	while((p = Brdline(b, '\n')) != nil){
		p[Blinelen(b)-1] = 0;
		nf = tokenize(p, f, nelem(f));
		if(nf != 2)
			sysfatal("syntax error in work list");
		if(parsescore(score, f[0], strlen(f[0])) < 0)
			sysfatal("bad score %s in work list", f[0]);
		type = atoi(f[1]);
		n = vtread(z, score, type, buf, VtMaxLumpSize);
		if(n < 0)
			sysfatal("could not read %s %s: %r", f[0], f[1]);
		/* write(1, buf, n); */
		if(++nn%1000 == 0)
			print("%d...", nn);
	}
}
