replace 235 with sieve - less problematic
add programs, not yet described, to demonstrate servers.

R=gri
DELTA=279  (177 added, 16 deleted, 86 changed)
OCL=15380
CL=15389
diff --git a/doc/progs/sieve1.go b/doc/progs/sieve1.go
new file mode 100644
index 0000000..2cb9060
--- /dev/null
+++ b/doc/progs/sieve1.go
@@ -0,0 +1,49 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+// Send the sequence 2, 3, 4, ... to returned channel 
+func Generate() *chan int {
+	ch := new(chan int);
+	go func(ch *chan int){
+		for i := 2; ; i++ {
+			ch -< i
+		}
+	}(ch);
+	return ch;
+}
+
+// Filter out input values divisible by 'prime', send rest to returned channel
+func Filter(in *chan int, prime int) *chan int{
+	out := new(chan int);
+	go func(in *chan int, out *chan int, prime int) {
+		for {
+			if i := <-in; i % prime != 0 {
+				out -< i
+			}
+		}
+	}(in, out, prime);
+	return out;
+}
+
+func Sieve() *chan int {
+	out := new(chan int);
+	go func(out *chan int) {
+		ch := Generate();
+		for {
+			prime := <-ch;
+			out -< prime;
+			ch = Filter(ch, prime);
+		}
+	}(out);
+	return out;
+}
+
+func main() {
+	primes := Sieve();
+	for {
+		print(<-primes, "\n");
+	}
+}