Index: src/examples/Makefile.in
===================================================================
--- src/examples/Makefile.in	(revision 267cb3dd82e30767dcf559734fc52fec82cce964)
+++ src/examples/Makefile.in	(revision 083cf3181fe3a210bc837e36dd40f9dc8d3ae198)
@@ -191,7 +191,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/examples/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/examples/Makefile
+	  $(AUTOMAKE) --foreign src/examples/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: src/examples/fstream_test.c
===================================================================
--- src/examples/fstream_test.c	(revision 267cb3dd82e30767dcf559734fc52fec82cce964)
+++ src/examples/fstream_test.c	(revision 083cf3181fe3a210bc837e36dd40f9dc8d3ae198)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:13:43 2015
-// Update Count     : 2
+// Last Modified On : Mon Nov 23 14:43:32 2015
+// Update Count     : 40
 //
 
@@ -20,7 +20,18 @@
 	ifstream *sin = ifstream_stdin();
 	int nombre;
-	sout << "Appuyez un nombre, s'il vous plâit:\n";
-	sin >> &nombre;
-	sout << "Vous avez appuyé: " << nombre << "\n";
+	sout | "Entrez un nombre, s'il vous plaît:\n";
+	sin  | &nombre;
+	sout | "Vous avez entré " | nombre | " stocké à l'adresse " | &nombre | endl;
+	sout | "nombre " | nombre | " est "
+		 | (nombre > 0 ? "plus grand que" :
+		   nombre == 0 ? "égal à" : "moins de")
+		 | " zéro" | endl;
+
+	sout | "Entrez trois nombres, s'il vous plaît:\n";
+	int i, j, k;
+	sin  | &i | &j | &k;
+	sout | "Vous avez entré " | "i:" | i | " j:" | j | " k:" | k | endl;
+
+	sout | 3 | ' ' | 3.5 | ' ' | 'a' | ' ' | "abc" | endl;
 }
 
Index: src/examples/hello.c
===================================================================
--- src/examples/hello.c	(revision 267cb3dd82e30767dcf559734fc52fec82cce964)
+++ src/examples/hello.c	(revision 083cf3181fe3a210bc837e36dd40f9dc8d3ae198)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Nov 20 16:02:50 2015
-// Update Count     : 3
+// Last Modified On : Sun Nov 22 17:40:37 2015
+// Update Count     : 5
 //
 
@@ -19,9 +19,5 @@
 	ofstream *sout = ofstream_stdout();
 	ifstream *sin = ifstream_stdin();
-	sout << "Bonjour au monde!\n";
-	sout << 3 << " " << 3.5 << " " << 'a' << " " << "abc" << "\n";
-	int i, j, k;
-	sin >> &i >> &j >> &k;
-	sout << "i:" << i << " j:" << j << " k:" << k << "\n";
+	sout | "Bonjour au monde!\n";
 }
 
Index: src/examples/iostream.c
===================================================================
--- src/examples/iostream.c	(revision 267cb3dd82e30767dcf559734fc52fec82cce964)
+++ src/examples/iostream.c	(revision 083cf3181fe3a210bc837e36dd40f9dc8d3ae198)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Nov 20 13:19:19 2015
-// Update Count     : 9
+// Last Modified On : Mon Dec  7 23:08:02 2015
+// Update Count     : 24
 //
 
@@ -21,33 +21,46 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?<<?( ostype *os, char c ) {
+ostype * ?|?( ostype *os, char c ) {
 	return write( os, &c, 1 );
-} // ?<<?
+} // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?<<?( ostype *os, int i ) {
+ostype * ?|?( ostype *os, int i ) {
 	char buffer[32];									// larger than the largest integer
 	sprintf( buffer, "%d", i );
 	return write( os, buffer, strlen( buffer ) );
-} // ?<<?
+} // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?<<?( ostype *os, double d ) {
+ostype * ?|?( ostype *os, double d ) {
 	char buffer[32];									// larger than the largest double
 	sprintf( buffer, "%g", d );
 	return write( os, buffer, strlen( buffer ) );
-} // ?<<?
+} // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?<<?( ostype *os, const char *cp ) {
+ostype * ?|?( ostype *os, const char *cp ) {
 	return write( os, cp, strlen( cp ) );
-} // ?<<?
+} // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?<<?( ostype *os, const void *p ) {
+ostype * ?|?( ostype *os, const void *p ) {
 	char buffer[32];									// larger than the largest pointer
 	sprintf( buffer, "%p", p );
 	return write( os, buffer, strlen( buffer ) );
-} // ?<<?
+} // ?|?
+
+
+forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) 
+retostype * ?|?( ostype *os, retostype * (*manip)(ostype*) ) {
+  return manip(os);
+}
+
+forall( dtype ostype | ostream( ostype ) ) 
+ostype * endl( ostype * os ) {
+  os | "\n";
+  // flush
+  return os;
+} // endl
 
 forall( type elt_type | writeable( elt_type ),
@@ -56,8 +69,8 @@
 void write( iterator_type begin, iterator_type end, os_type *os ) {
 	void print( elt_type i ) {
-		os << i << ' ';
+		os | i | ' ';
 	}
 	for_each( begin, end, print );
-} // ?<<?
+} // ?|?
 
 forall( type elt_type | writeable( elt_type ),
@@ -65,23 +78,21 @@
 		dtype os_type | ostream( os_type ) )
 void write_reverse( iterator_type begin, iterator_type end, os_type *os ) {
-	void print( elt_type i ) {
-		os << i << ' ';
-	}
+	void print( elt_type i ) { os | i | ' '; }
 	for_each_reverse( begin, end, print );
-} // ?<<?
+} // ?|?
 
 
 forall( dtype istype | istream( istype ) )
-istype * ?>>?( istype *is, char *cp ) {
+istype * ?|?( istype *is, char *cp ) {
 	return read( is, cp, 1 );
-} // ?>>?
+} // ?|?
 
 forall( dtype istype | istream( istype ) )
-istype * ?>>?( istype *is, int *ip ) {
+istype * ?|?( istype *is, int *ip ) {
 	char cur;
   
 	// skip some whitespace
 	do {
-		is >> &cur;
+		is | &cur;
 		if ( fail( is ) || eof( is ) ) return is;
 	} while ( !( cur >= '0' && cur <= '9' ) );
@@ -91,5 +102,5 @@
 	while ( cur >= '0' && cur <= '9' ) {
 		*ip = *ip * 10 + ( cur - '0' );
-		is >> &cur;
+		is | &cur;
 		if ( fail( is ) || eof( is ) ) return is;
 	}
@@ -97,5 +108,5 @@
 	unread( is, cur );
 	return is;
-} // ?>>?
+} // ?|?
 
 // Local Variables: //
Index: src/examples/iostream.h
===================================================================
--- src/examples/iostream.h	(revision 267cb3dd82e30767dcf559734fc52fec82cce964)
+++ src/examples/iostream.h	(revision 083cf3181fe3a210bc837e36dd40f9dc8d3ae198)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Nov 19 17:56:51 2015
-// Update Count     : 5
+// Last Modified On : Mon Nov 23 14:15:25 2015
+// Update Count     : 17
 //
 
@@ -27,14 +27,17 @@
 
 context writeable( type T ) {
-	forall( dtype ostype | ostream( ostype ) ) ostype * ?<<?( ostype *, T );
+	forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
 };
 
 // implement writable for some intrinsic types
 
-forall( dtype ostype | ostream( ostype ) ) ostype * ?<<?( ostype *, char );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?<<?( ostype *, int );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?<<?( ostype *, double );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?<<?( ostype *, const char * );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?<<?( ostype *, void * );
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char );
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int );
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double );
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * );
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );
+
+forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) retostype * ?|?( ostype *os, retostype * (* manip)(ostype*) );
+forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
 
 // writes the range [begin, end) to the given stream
@@ -49,4 +52,5 @@
 void write_reverse( iterator_type begin, iterator_type end, os_type *os );
 
+//******************************************************************************
 
 context istream( dtype istype ) {
@@ -58,12 +62,12 @@
 
 context readable( type T ) {
-	forall( dtype istype | istream( istype ) ) istype * ?<<?( istype *, T );
+	forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T );
 };
 
 forall( dtype istype | istream( istype ) )
-istype * ?>>?( istype *, char * );
+istype * ?|?( istype *, char * );
 
 forall( dtype istype | istream( istype ) )
-istype * ?>>?( istype *, int * );
+istype * ?|?( istype *, int * );
 
 #endif // IOSTREAM_H
Index: src/examples/sum.c
===================================================================
--- src/examples/sum.c	(revision 267cb3dd82e30767dcf559734fc52fec82cce964)
+++ src/examples/sum.c	(revision 083cf3181fe3a210bc837e36dd40f9dc8d3ae198)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 28 15:09:55 2015
-// Update Count     : 118
+// Last Modified On : Sat Nov 21 18:08:18 2015
+// Update Count     : 119
 //
 
@@ -53,5 +53,5 @@
 	}
 	sout << "sum from " << low << " to " << High << " is "
-		 << (int)sum( size, a ) << ", check " << (int)s << "\n";
+		 << (int)sum( size, a ) << ", check " << (int)s << endl;
 
 	int s = 0, a[size];
@@ -62,5 +62,5 @@
 	}
 	sout << "sum from " << low << " to " << High << " is "
-		 << sum( size, (int *)a ) << ", check " << (int)s << "\n";
+		 << sum( size, (int *)a ) << ", check " << (int)s << endl;
 
 	double s = 0.0, a[size];
@@ -72,5 +72,5 @@
 	printf( "%g\n", sum( size, (double *)a ) );
 //	sout << "sum from " << low / 10.0 << " to " << High / 10.0 << " is "
-//		 << sum( size, (double *)a ) << ", check " << (double)s << "\n";
+//		 << sum( size, (double *)a ) << ", check " << (double)s << endl;
 
 	float s = 0.0, a[size];
@@ -82,5 +82,5 @@
 	printf( "%g\n", sum( size, (float *)a ) );
 //	sout << "sum from " << low / 10.0 << " to " << High / 10.0 << " is "
-//		 << sum( size, (float *)a ) << ", check " << (float)s << "\n";
+//		 << sum( size, (float *)a ) << ", check " << (float)s << endl;
 }
 
Index: src/examples/vector_test.c
===================================================================
--- src/examples/vector_test.c	(revision 267cb3dd82e30767dcf559734fc52fec82cce964)
+++ src/examples/vector_test.c	(revision 083cf3181fe3a210bc837e36dd40f9dc8d3ae198)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Nov 19 17:54:34 2015
-// Update Count     : 9
+// Last Modified On : Tue Dec 15 16:02:56 2015
+// Update Count     : 13
 //
 
@@ -27,7 +27,7 @@
 	int num;
 
-	sout << "enter N elements and C-d on a separate line:\n";
+	sout | "enter N elements and C-d on a separate line:" | endl;
 	for ( ;; ) {
-		sin >> &num;
+		sin | &num;
 	  if ( fail( sin ) || eof( sin ) ) break;
 		append( &vec, num );
@@ -35,11 +35,11 @@
 	// write out the numbers
 
-	sout << "Array elements:\n";
+	sout | "Array elements:" | endl;
 	write( begin( vec ), end( vec ), sout );
-	sout << "\n";
+	sout | endl;
 
-	sout << "Array elements reversed:\n";
+	sout | "Array elements reversed:" | endl;
 	write_reverse( begin( vec ), end( vec ), sout );
-	sout << "\n";
+	sout | endl;
 }
 
