#include "u.h"
#include "libc.h"
#include "thread.h"

enum
{
	STACK = 8192
};

int max = 10000;
int (*mk)(void (*fn)(void*), void *arg, uint stack);

void
countthread(void *v)
{
	uint i;
	Channel *c;

	c = v;
	for(i=2;; i++){
		sendul(c, i);
	}
}

void
filterthread(void *v)
{
	uint i, p;
	Channel *c, *nextc;

	c = v;
	p = recvul(c);
	print("%d\n", p);
	if(p > max)
		threadexitsall(0);
	nextc = chancreate(sizeof(ulong), 0);
	mk(filterthread, nextc, STACK);
	for(;;){
		i = recvul(c);
		if(i%p)
			sendul(nextc, i);
	}
}

void
usage(void)
{
	fprint(2, "usage: tprimes [-p] [max]\n");
	threadexitsall("usage");
}

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

	nbuf = 0;
	mk = threadcreate;
	ARGBEGIN{
	default:
		usage();
	case 'b':
		nbuf = atoi(EARGF(usage()));
		break;
	case 'p':
		mk = proccreate;
		max = 1000;
		break;
	}ARGEND

	if(argc == 1)
		max = atoi(argv[0]);
	else if(argc)
		usage();

	c = chancreate(sizeof(ulong), nbuf);
	mk(countthread, c, STACK);
	mk(filterthread, c, STACK);
	recvp(chancreate(sizeof(void*), 0));
}
