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

enum
{
	STACK = 8192
};

int quiet;
int goal;
int buffer;
int (*fn)(void(*)(void*), void*, uint) = threadcreate;

void
primethread(void *arg)
{
	Channel *c, *nc;
	int p, i;

	c = arg;
	p = recvul(c);
	if(p > goal)
		threadexitsall(nil);
	if(!quiet)
		print("%d\n", p);
	nc = chancreate(sizeof(ulong), buffer);
	(*fn)(primethread, nc, STACK);
	for(;;){
		i = recvul(c);
		if(i%p)
			sendul(nc, i);
	}
}

extern int _threaddebuglevel;

void
threadmain(int argc, char **argv)
{
	int i;
	Channel *c;

	ARGBEGIN{
	case 'D':
		_threaddebuglevel = atoi(ARGF());
		break;
	case 'q':
		quiet = 1;
		break;
	case 'b':
		buffer = atoi(ARGF());
		break;
	case 'p':
		fn = proccreate;
		break;
	}ARGEND

	if(argc>0)
		goal = atoi(argv[0]);
	else
		goal = 100;

	c = chancreate(sizeof(ulong), buffer);
	(*fn)(primethread, c, STACK);
	for(i=2;; i++)
		sendul(c, i);
}
