1*9a747e4fSDavid du Colombier #include <u.h>
2*9a747e4fSDavid du Colombier #include <libc.h>
3*9a747e4fSDavid du Colombier #include <thread.h>
4*9a747e4fSDavid du Colombier
5*9a747e4fSDavid du Colombier int quiet;
6*9a747e4fSDavid du Colombier int goal;
7*9a747e4fSDavid du Colombier int buffer;
8*9a747e4fSDavid du Colombier int (*fn)(void(*)(void*), void*, uint) = threadcreate;
9*9a747e4fSDavid du Colombier
10*9a747e4fSDavid du Colombier void
primethread(void * arg)11*9a747e4fSDavid du Colombier primethread(void *arg)
12*9a747e4fSDavid du Colombier {
13*9a747e4fSDavid du Colombier Channel *c, *nc;
14*9a747e4fSDavid du Colombier int p, i;
15*9a747e4fSDavid du Colombier
16*9a747e4fSDavid du Colombier c = arg;
17*9a747e4fSDavid du Colombier p = recvul(c);
18*9a747e4fSDavid du Colombier if(p > goal)
19*9a747e4fSDavid du Colombier threadexitsall(nil);
20*9a747e4fSDavid du Colombier if(!quiet)
21*9a747e4fSDavid du Colombier print("%d\n", p);
22*9a747e4fSDavid du Colombier nc = chancreate(sizeof(ulong), buffer);
23*9a747e4fSDavid du Colombier (*fn)(primethread, nc, 1024);
24*9a747e4fSDavid du Colombier for(;;){
25*9a747e4fSDavid du Colombier i = recvul(c);
26*9a747e4fSDavid du Colombier if(i%p)
27*9a747e4fSDavid du Colombier sendul(nc, i);
28*9a747e4fSDavid du Colombier }
29*9a747e4fSDavid du Colombier }
30*9a747e4fSDavid du Colombier
31*9a747e4fSDavid du Colombier void
threadmain(int argc,char ** argv)32*9a747e4fSDavid du Colombier threadmain(int argc, char **argv)
33*9a747e4fSDavid du Colombier {
34*9a747e4fSDavid du Colombier int i;
35*9a747e4fSDavid du Colombier Channel *c;
36*9a747e4fSDavid du Colombier
37*9a747e4fSDavid du Colombier ARGBEGIN{
38*9a747e4fSDavid du Colombier case 'q':
39*9a747e4fSDavid du Colombier quiet = 1;
40*9a747e4fSDavid du Colombier break;
41*9a747e4fSDavid du Colombier case 'b':
42*9a747e4fSDavid du Colombier buffer = atoi(ARGF());
43*9a747e4fSDavid du Colombier break;
44*9a747e4fSDavid du Colombier case 'p':
45*9a747e4fSDavid du Colombier fn=proccreate;
46*9a747e4fSDavid du Colombier break;
47*9a747e4fSDavid du Colombier }ARGEND
48*9a747e4fSDavid du Colombier
49*9a747e4fSDavid du Colombier if(argc>0)
50*9a747e4fSDavid du Colombier goal = atoi(argv[0]);
51*9a747e4fSDavid du Colombier else
52*9a747e4fSDavid du Colombier goal = 100;
53*9a747e4fSDavid du Colombier
54*9a747e4fSDavid du Colombier c = chancreate(sizeof(ulong), buffer);
55*9a747e4fSDavid du Colombier threadcreate(primethread, c, 1024);
56*9a747e4fSDavid du Colombier for(i=2;; i++)
57*9a747e4fSDavid du Colombier sendul(c, i);
58*9a747e4fSDavid du Colombier }
59