Blob
1 #include <lib9.h>2 #include <thread.h>4 int quiet;5 int goal;6 int buffer;7 int (*fn)(void(*)(void*), void*, uint) = threadcreate;9 void10 primethread(void *arg)11 {12 Channel *c, *nc;13 int p, i;15 c = arg;16 p = recvul(c);17 if(p > goal)18 threadexitsall(nil);19 if(!quiet)20 print("%d\n", p);21 nc = chancreate(sizeof(ulong), buffer);22 (*fn)(primethread, nc, 8192);23 for(;;){24 i = recvul(c);25 if(i%p)26 sendul(nc, i);27 }28 }30 extern int _threaddebuglevel;32 void33 threadmain(int argc, char **argv)34 {35 int i;36 Channel *c;38 ARGBEGIN{39 case 'D':40 _threaddebuglevel = atoi(ARGF());41 break;42 case 'q':43 quiet = 1;44 break;45 case 'b':46 buffer = atoi(ARGF());47 break;48 case 'p':49 fn=proccreate;50 break;51 }ARGEND53 if(argc>0)54 goal = atoi(argv[0]);55 else56 goal = 100;58 c = chancreate(sizeof(ulong), buffer);59 (*fn)(primethread, c, 8192);60 for(i=2;; i++)61 sendul(c, i);62 }