Index: tests/abs.cfa
===================================================================
--- tests/abs.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/abs.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 18:26:16 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:50:44 2018
-// Update Count     : 54
+// Last Modified On : Tue Dec  4 21:33:15 2018
+// Update Count     : 55
 //
 
@@ -19,14 +19,14 @@
 int main( void ) {
 	signed char ch = -65;
-	sout | "char\t\t\t"					| ch     | "\tabs " | abs( ch ) | endl;
-	sout | "signed int\t\t"				| -65    | "\tabs" | abs( -65 ) | endl;
-	sout | "signed long int\t\t" 		| -65l   | "\tabs" | abs( -65l ) | endl;
-	sout | "signed long long int\t"		| -65ll  | "\tabs" | abs( -65ll ) | endl;
-	sout | "float\t\t\t" 				| -65.0f | "\tabs" | abs( -65.0f ) | endl;
-	sout | "double\t\t\t"				| -65.0  | "\tabs" | abs( -65.0 ) | endl;
-	sout | "long double\t\t"			| -65.0l | "\tabs" | abs( -65.0l ) | endl;
-	sout | "float _Complex\t\t"			| -65.0F-2.0iF | "\tabs" | abs( -65.0F-2.0iF ) | endl;
-	sout | "double _Complex\t\t"		| -65.0D-2.0iD | "\tabs" | abs( -65.0D-2.0iD ) | endl;
-	sout | "long double _Complex\t"		| -65.0L-2.0iL | "\tabs" | abs( -65.0L-2.0iL ) | endl;
+	sout | "char\t\t\t"					| ch     | "\tabs " | abs( ch );
+	sout | "signed int\t\t"				| -65    | "\tabs" | abs( -65 );
+	sout | "signed long int\t\t" 		| -65l   | "\tabs" | abs( -65l );
+	sout | "signed long long int\t"		| -65ll  | "\tabs" | abs( -65ll );
+	sout | "float\t\t\t" 				| -65.0f | "\tabs" | abs( -65.0f );
+	sout | "double\t\t\t"				| -65.0  | "\tabs" | abs( -65.0 );
+	sout | "long double\t\t"			| -65.0l | "\tabs" | abs( -65.0l );
+	sout | "float _Complex\t\t"			| -65.0F-2.0iF | "\tabs" | abs( -65.0F-2.0iF );
+	sout | "double _Complex\t\t"		| -65.0D-2.0iD | "\tabs" | abs( -65.0D-2.0iD );
+	sout | "long double _Complex\t"		| -65.0L-2.0iL | "\tabs" | abs( -65.0L-2.0iL );
 } // main
 
Index: tests/ato.cfa
===================================================================
--- tests/ato.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/ato.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Thu Feb  4 08:10:57 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:51:03 2018
-// Update Count     : 91
+// Last Modified On : Tue Dec  4 21:33:53 2018
+// Update Count     : 92
 //
 
@@ -20,100 +20,100 @@
 	const char * sptr = "-123";
 	int i = ato( sptr );
-	sout | i | sptr | endl;
+	sout | i | sptr;
 	sptr = "123";
 	unsigned int ui = ato( sptr );
-	sout | ui | sptr | endl;
+	sout | ui | sptr;
 
 	sptr = "-123";
 	long int li = ato( sptr );
-	sout | li | sptr | endl;
+	sout | li | sptr;
 	sptr = "123";
 	unsigned long int uli = ato( sptr );
-	sout | uli | sptr | endl;
+	sout | uli | sptr;
 
 	sptr = "-123";
 	long long int lli = ato( sptr );
-	sout | lli | sptr | endl;
+	sout | lli | sptr;
 	sptr = "123";
 	unsigned long long int ulli = ato( sptr );
-	sout | ulli | sptr | endl;
+	sout | ulli | sptr;
 
 	sptr = "-123.456";
 	float f = ato( sptr );
-	sout | f | sptr | endl;
+	sout | f | sptr;
 	sptr = "-123.4567890123456";
 	double d = ato( sptr );
-	sout | d | sptr | endl;
+	sout | d | sptr;
 	sptr = "-123.45678901234567890123456789";
 	long double ld = ato( sptr );
-	sout | ld | sptr | endl;
+	sout | ld | sptr;
 
 	sptr = "-123.456-123.456i";
 	float _Complex fc = ato( sptr );
-	sout | fc | sptr | endl;
+	sout | fc | sptr;
 	sptr = "-123.4567890123456+123.4567890123456i";
 	double _Complex dc = ato( sptr );
-	sout | dc | sptr | endl;
+	sout | dc | sptr;
 	sptr = "123.45678901234567890123456789-123.45678901234567890123456789i";
 	long double _Complex ldc = ato( sptr );
-	sout | ldc | sptr | endl;
+	sout | ldc | sptr;
 	sptr = "123.45678901234-123.4567890i";
 	long double _Complex ldc2 = ato( sptr );
-	sout | ldc2 | sptr | endl;
+	sout | ldc2 | sptr;
 
 
 	sptr = "-123";
 	i = strto( sptr, 0, 10 );
-	sout | i | sptr | endl;
+	sout | i | sptr;
 	sptr = "123";
 	ui = strto( sptr, 0, 10 );
-	sout | ui | sptr | endl;
+	sout | ui | sptr;
 
 	sptr = "-123";
 	li = strto( sptr, 0, 10 );
-	sout | li | sptr | endl;
+	sout | li | sptr;
 	sptr = "123";
 	uli = strto( sptr, 0, 10 );
-	sout | uli | sptr | endl;
+	sout | uli | sptr;
 
 	sptr = "-123";
 	lli = strto( sptr, 0, 10 );
-	sout | lli | sptr | endl;
+	sout | lli | sptr;
 	sptr = "123";
 	ulli = strto( sptr, 0, 10 );
-	sout | ulli | sptr | endl;
+	sout | ulli | sptr;
 
 	sptr = "-123.456";
 	f = strto( sptr, 0 );
-	sout | f | sptr | endl;
+	sout | f | sptr;
 	sptr = "-123.4567890123456";
 	d = strto( sptr, 0 );
-	sout | d | sptr | endl;
+	sout | d | sptr;
 	sptr = "-123.45678901234567890123456789";
 	ld = strto( sptr, 0 );
-	sout | ld | sptr | endl;
+	sout | ld | sptr;
 
 	sptr = "-123.456-123.456i";
 	fc = strto( sptr, 0 );
-	sout | fc | sptr | endl;
+	sout | fc | sptr;
 
 	char * eptr = 0;
 	// sptr = "2fred";
 	// fc = strto( sptr, &eptr );
-	// sout | fc | sptr | eptr | endl;
+	// sout | fc | sptr | eptr;
 
 	sptr = "2  3";
 	fc = strto( sptr, &eptr );
-	sout | fc | sptr | eptr | endl;
+	sout | fc | sptr | eptr;
 
 	sptr = "-123.4567890123456+123.4567890123456i";
 	dc = strto( sptr, 0 );
-	sout | dc | sptr | endl;
+	sout | dc | sptr;
 	sptr = "123.45678901234567890123456789-123.45678901234567890123456789i";
 	ldc = strto( sptr, 0 );
-	sout | ldc | sptr | endl;
+	sout | ldc | sptr;
 	sptr = "123.45678901234-123.4567890i";
 	ldc2 = strto( sptr, 0 );
-	sout | ldc2 | sptr | endl;
+	sout | ldc2 | sptr;
 } // main
 
Index: tests/complex.cfa
===================================================================
--- tests/complex.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/complex.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 24 22:07:31 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:51:22 2018
-// Update Count     : 3
+// Last Modified On : Tue Dec  4 21:34:21 2018
+// Update Count     : 4
 //
 
@@ -25,5 +25,5 @@
     printf( "x:%g+%gi y:%g+%gi z:%g+%gi\n", creal(x), cimag(x), creal(y), cimag(y), creal(z), cimag(z) );
 #ifdef __CFA__
-    sout | "x:" | x | "y:" | y | "z:" | z | endl;
+    sout | "x:" | x | "y:" | y | "z:" | z;
 #endif // __CFA
     x = 2.1 + 1.3i;
@@ -32,5 +32,5 @@
     printf( "x:%g+%gi y:%g+%gi z:%g+%gi\n", creal(x), cimag(x), creal(y), cimag(y), creal(z), cimag(z) );
 #ifdef __CFA__
-    sout | "x:" | x | "y:" | y | "z:" | z | endl;
+    sout | "x:" | x | "y:" | y | "z:" | z;
 #endif // __CFA
 }
Index: tests/concurrent/coroutineYield.c
===================================================================
--- tests/concurrent/coroutineYield.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/coroutineYield.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -27,9 +27,9 @@
 	while(true) {
 		#if !defined(TEST_FOREVER)
-			sout | "Coroutine 1" | endl;
+			sout | "Coroutine 1";
 		#endif
 		yield();
 		#if !defined(TEST_FOREVER)
-			sout | "Coroutine 2" | endl;
+			sout | "Coroutine 2";
 		#endif
 		suspend();
@@ -42,9 +42,9 @@
 	for(int i = 0; TEST(i < N); i++) {
 		#if !defined(TEST_FOREVER)
-			sout | "Thread 1" | endl;
+			sout | "Thread 1";
 		#endif
 		resume(c);
 		#if !defined(TEST_FOREVER)
-			sout | "Thread 2" | endl;
+			sout | "Thread 2";
 		#endif
 		yield();
Index: tests/concurrent/examples/boundedBufferEXT.c
===================================================================
--- tests/concurrent/examples/boundedBufferEXT.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/examples/boundedBufferEXT.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -8,6 +8,6 @@
 // Created On       : Wed Apr 18 22:52:12 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 16 08:17:03 2018
-// Update Count     : 8
+// Last Modified On : Tue Dec 11 21:55:02 2018
+// Update Count     : 9
 //
 
@@ -115,5 +115,5 @@
 		sum += sums[i];
 	} // for
-	sout | "total:" | sum | endl;
+	sout | "total:" | sum;
 }
 
Index: tests/concurrent/examples/boundedBufferINT.c
===================================================================
--- tests/concurrent/examples/boundedBufferINT.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/examples/boundedBufferINT.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -8,6 +8,6 @@
 // Created On       : Mon Oct 30 12:45:13 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 16 08:17:58 2018
-// Update Count     : 83
+// Last Modified On : Tue Dec 11 21:55:45 2018
+// Update Count     : 84
 //
 
@@ -116,5 +116,5 @@
 		sum += sums[i];
 	} // for
-	sout | "total:" | sum | endl;
+	sout | "total:" | sum;
 }
 
Index: tests/concurrent/examples/datingService.c
===================================================================
--- tests/concurrent/examples/datingService.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/examples/datingService.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -8,6 +8,6 @@
 // Created On       : Mon Oct 30 12:56:20 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 27 09:05:18 2018
-// Update Count     : 26
+// Last Modified On : Tue Dec 11 21:55:34 2018
+// Update Count     : 28
 //
 
@@ -58,5 +58,5 @@
 	yield( random( 100 ) );								// don't all start at the same time
 	unsigned int partner = girl( TheExchange, id, ccode );
-	sout | "Girl:" | id | "is dating Boy at" | partner | "with ccode" | ccode | endl;
+	sout | "Girl:" | id | "is dating Boy at" | partner | "with ccode" | ccode;
 	girlck[id] = partner;
 } // Girl main
@@ -69,5 +69,5 @@
 
 thread Boy {
-	DatingService &TheExchange;
+	DatingService & TheExchange;
 	unsigned int id, ccode;
 }; // Boy
@@ -76,5 +76,5 @@
 	yield( random( 100 ) );								// don't all start at the same time
 	unsigned int partner = boy( TheExchange, id, ccode );
-	sout | " Boy:" | id | "is dating Girl" | partner | "with ccode" | ccode | endl;
+	sout | " Boy:" | id | "is dating Girl" | partner | "with ccode" | ccode;
 	boyck[id] = partner;
 } // Boy main
Index: tests/concurrent/examples/matrixSum.c
===================================================================
--- tests/concurrent/examples/matrixSum.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/examples/matrixSum.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -11,6 +11,6 @@
 // Created On       : Mon Oct  9 08:29:28 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:51:32 2018
-// Update Count     : 14
+// Last Modified On : Tue Dec 11 21:54:55 2018
+// Update Count     : 15
 //
 
@@ -54,5 +54,5 @@
 		total += subtotals[r];							// total subtotals
 	} // for
-	sout | total | endl;
+	sout | total;
 }
 
Index: tests/concurrent/examples/quickSort.c
===================================================================
--- tests/concurrent/examples/quickSort.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/examples/quickSort.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -9,6 +9,6 @@
 // Created On       : Wed Dec  6 12:15:52 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 16 08:17:41 2018
-// Update Count     : 163
+// Last Modified On : Tue Dec  4 18:00:27 2018
+// Update Count     : 167
 //
 
@@ -88,5 +88,5 @@
 
 void usage( char * argv[] ) {
-	sout | "Usage:" | argv[0] | "( -s unsorted-file [ sorted-file ] | -t size (>= 0) [ depth (>= 0) ] )" | endl;
+	sout | "Usage:" | argv[0] | "( -s unsorted-file [ sorted-file ] | -t size (>= 0) [ depth (>= 0) ] )";
 	exit( EXIT_FAILURE );								// TERMINATE!
 } // usage
@@ -114,5 +114,5 @@
 				&sortedfile = new( (const char *)argv[2] ); // open the output file
 				if ( fail( sortedfile ) ) {
-					serr | "Error! Could not open sorted output file \"" | argv[2] | "\"" | endl;
+					serr | "Error! Could not open sorted output file \"" | argv[2] | "\"";
 					usage( argv );
 				} // if
@@ -121,5 +121,5 @@
 				&unsortedfile = new( (const char *)argv[1] ); // open the input file
 				if ( fail( unsortedfile ) ) {
-					serr | "Error! Could not open unsorted input file \"" | argv[1] | "\"" | endl;
+					serr | "Error! Could not open unsorted input file \"" | argv[1] | "\"";
 					usage( argv );
 				} // if
@@ -127,4 +127,5 @@
 		} // if
 	} // if
+	sortedfile | nlOff;									// turn off auto newline
 
 	enum { ValuesPerLine = 22 };						// number of values printed per line
@@ -137,18 +138,18 @@
 			for ( int counter = 0; counter < size; counter += 1 ) { // read unsorted numbers
 				unsortedfile | values[counter];
-				if ( counter != 0 && counter % ValuesPerLine == 0 ) sortedfile | endl | "  ";
+				if ( counter != 0 && counter % ValuesPerLine == 0 ) sortedfile | nl | "  ";
 				sortedfile | values[counter];
 				if ( counter < size - 1 && (counter + 1) % ValuesPerLine != 0 ) sortedfile | ' ';
 			} // for
-			sortedfile | endl;
+			sortedfile | nl;
 			if ( size > 0 ) {							// values to sort ?
 				Quicksort QS = { values, size - 1, 0 }; // sort values
 			} // wait until sort tasks terminate
 			for ( int counter = 0; counter < size; counter += 1 ) { // print sorted list
-				if ( counter != 0 && counter % ValuesPerLine == 0 ) sortedfile | endl | "  ";
+				if ( counter != 0 && counter % ValuesPerLine == 0 ) sortedfile | nl | "  ";
 				sortedfile | values[counter];
 				if ( counter < size - 1 && (counter + 1) % ValuesPerLine != 0 ) sortedfile | ' ';
 			} // for
-			sortedfile | endl | endl;
+			sortedfile | nl;
 
 			delete( values );
Index: tests/concurrent/monitor.c
===================================================================
--- tests/concurrent/monitor.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/monitor.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -40,4 +40,4 @@
 		MyThread f[4];
 	}
-	sout | global.value | endl;
+	sout | global.value;
 }
Index: tests/concurrent/multi-monitor.c
===================================================================
--- tests/concurrent/multi-monitor.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/multi-monitor.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -52,4 +52,4 @@
 		}
 	}
-	sout | global12 | global23 | global13 | endl;
+	sout | global12 | global23 | global13;
 }
Index: tests/concurrent/signal/block.c
===================================================================
--- tests/concurrent/signal/block.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/signal/block.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -57,5 +57,5 @@
 
 	if(a.last_thread != a.last_signaller || b.last_thread != b.last_signaller ) {
-		sout | "ERROR Barging detected, expected" | a.last_signaller | b.last_signaller | "got" | a.last_thread | b.last_thread | endl;
+		sout | "ERROR Barging detected, expected" | a.last_signaller | b.last_signaller | "got" | a.last_thread | b.last_thread;
 		abort();
 	}
@@ -85,5 +85,5 @@
 
 		if( ! signal_block( cond ) ) {
-			sout | "ERROR expected to be able to signal" | endl;
+			sout | "ERROR expected to be able to signal";
 			abort();
 		}
@@ -92,5 +92,5 @@
 
 		if(a.last_thread != next || b.last_thread != next) {
-			sout | "ERROR Barging detected, expected" | next | "got" | a.last_thread | b.last_thread | endl;
+			sout | "ERROR Barging detected, expected" | next | "got" | a.last_thread | b.last_thread;
 			abort();
 		}
@@ -130,9 +130,9 @@
 		Signaller s[4];
 		Barger b[13];
-		sout | "Starting waiters" | endl;
+		sout | "Starting waiters";
 		{
 			Waiter w[3];
 		}
-		sout | "Waiters done" | endl;
+		sout | "Waiters done";
 		done = true;
 	}
Index: tests/concurrent/signal/disjoint.c
===================================================================
--- tests/concurrent/signal/disjoint.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/signal/disjoint.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -66,10 +66,10 @@
 	wait( cond );
 	if( d.state != SIGNAL ) {
-		sout | "ERROR barging!" | endl;
+		sout | "ERROR barging!";
 	}
 
 	#if !defined(TEST_FOREVER)
 		d.counter++;
-		if( (d.counter % 1000) == 0 ) sout | d.counter | endl;
+		if( (d.counter % 1000) == 0 ) sout | d.counter;
 	#endif
 
@@ -99,5 +99,5 @@
 	bool running = TEST(data.counter < N) && data.counter > 0;
 	if( data.state != SIGNAL && running ) {
-		sout | "ERROR Eager signal" | data.state | endl;
+		sout | "ERROR Eager signal" | data.state;
 	}
 }
@@ -124,5 +124,5 @@
 			Waiter w[4];
 		}
-		sout | "All waiter done" | endl;
+		sout | "All waiter done";
 		all_done = true;
 	}
Index: tests/concurrent/signal/wait.c
===================================================================
--- tests/concurrent/signal/wait.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/signal/wait.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -83,5 +83,5 @@
 				break;
 			default:
-				sout | "Something went wrong" | endl;
+				sout | "Something went wrong";
 				abort();
 		}
@@ -140,5 +140,5 @@
 	waiter_left = 4;
 	processor p[2];
-	sout | "Starting" | endl;
+	sout | "Starting";
 	{
 		Signaler  e;
@@ -150,4 +150,4 @@
 		}
 	}
-	sout | "Done" | endl;
+	sout | "Done";
 }
Index: tests/concurrent/thread.c
===================================================================
--- tests/concurrent/thread.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/thread.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -12,5 +12,5 @@
 void main(First& this) {
 	for(int i = 0; i < 10; i++) {
-		sout | "First : Suspend No." | i + 1 | endl;
+		sout | "First : Suspend No." | i + 1;
 		yield();
 	}
@@ -21,5 +21,5 @@
 	P(*this.lock);
 	for(int i = 0; i < 10; i++) {
-		sout | "Second : Suspend No." | i + 1 | endl;
+		sout | "Second : Suspend No." | i + 1;
 		yield();
 	}
@@ -29,5 +29,5 @@
 int main(int argc, char* argv[]) {
 	semaphore lock = { 0 };
-	sout | "User main begin" | endl;
+	sout | "User main begin";
 	{
 		processor p;
@@ -37,4 +37,4 @@
 		}
 	}
-	sout | "User main end" | endl;
+	sout | "User main end";
 }
Index: tests/concurrent/waitfor/barge.c
===================================================================
--- tests/concurrent/waitfor/barge.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/waitfor/barge.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -48,5 +48,5 @@
 	yield(random( 10 ));
 	if( this.state != WAITFOR && !this.done && this.started ) {
-		serr | "Barging before caller detected" | endl;
+		serr | "Barging before caller detected";
 	}
 
@@ -66,9 +66,9 @@
 		this.state = WAITFOR;
 		waitfor(do_call, this) {
-			sout | i | endl;
+			sout | i;
 		}
 
 		if( this.state != CALL ) {
-			serr | "Barging after caller detected" | endl;
+			serr | "Barging after caller detected";
 		}
 	}
@@ -83,5 +83,5 @@
 
 int main() {
-	sout | "Starting" | endl;
+	sout | "Starting";
 	{
 		barger_t bargers[17];
@@ -89,4 +89,4 @@
 		waiter_t waiters;
 	}
-	sout | "Stopping" | endl;
+	sout | "Stopping";
 }
Index: tests/concurrent/waitfor/dtor.c
===================================================================
--- tests/concurrent/waitfor/dtor.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/waitfor/dtor.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -29,8 +29,8 @@
 	switch(state) {
 		case CTOR  : break;
-		case MAIN  : if( this.state != CTOR  ) { serr | "ERROR Expected state to be CTOR"  | endl; abort(); } this.state = state; break;
-		case AFTER : if( this.state != MAIN  ) { serr | "ERROR Expected state to be MAIN"  | endl; abort(); } this.state = state; break;
-		case END   : if( this.state != AFTER ) { serr | "ERROR Expected state to be AFTER" | endl; abort(); } this.state = state; break;
-		case DTOR  : if( this.state != END   ) { serr | "ERROR Expected state to be END"   | endl; abort(); } this.state = state; break;
+		case MAIN  : if( this.state != CTOR  ) { serr | "ERROR Expected state to be CTOR" ; abort(); } this.state = state; break;
+		case AFTER : if( this.state != MAIN  ) { serr | "ERROR Expected state to be MAIN" ; abort(); } this.state = state; break;
+		case END   : if( this.state != AFTER ) { serr | "ERROR Expected state to be AFTER"; abort(); } this.state = state; break;
+		case DTOR  : if( this.state != END   ) { serr | "ERROR Expected state to be END"  ; abort(); } this.state = state; break;
 	}
 }
@@ -54,5 +54,5 @@
 
 int main() {
-	sout | "Starting" | endl;
+	sout | "Starting";
 	processor p;
 	for( int i = 0; i < N; i++ ){
@@ -60,4 +60,4 @@
 		yield( random( 100 ) );
 	}
-	sout | "Stopping" | endl;
+	sout | "Stopping";
 }
Index: tests/concurrent/waitfor/else.c
===================================================================
--- tests/concurrent/waitfor/else.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/waitfor/else.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -12,33 +12,33 @@
 void test( M & mutex m ) {
 	int i = 0;
-	sout | "Starting" | endl;
+	sout | "Starting";
 
 	when( false ) waitfor( notcalled, m );
 
-	sout | "Step" | i++ | endl;
+	sout | "Step" | i++;
 
 	waitfor( notcalled, m ); or else {
-		sout | "else called" | endl;
+		sout | "else called";
 	}
 
-	sout | "Step" | i++ | endl;
+	sout | "Step" | i++;
 
 	when( true ) waitfor( notcalled, m ); or when( true ) else {
-		sout | "else called" | endl;
+		sout | "else called";
 	}
 
-	sout | "Step" | i++ | endl;
+	sout | "Step" | i++;
 
 	when( false ) waitfor( notcalled, m ); or when( true ) else {
-		sout | "else called" | endl;
+		sout | "else called";
 	}
 
-	sout | "Step" | i++ | endl;
+	sout | "Step" | i++;
 
 	when( false ) waitfor( notcalled, m ); or when( false ) else {
-		sout | "else called" | endl;
+		sout | "else called";
 	}
 
-	sout | "Done" | endl;
+	sout | "Done";
 }
 
Index: tests/concurrent/waitfor/recurse.c
===================================================================
--- tests/concurrent/waitfor/recurse.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/waitfor/recurse.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -95,5 +95,5 @@
 	rand_yield();
 
-	sout | "1st" | endl;
+	sout | "1st" | nl;
 
 	return this.counter < N ? (state_t)this.actions[idx] : (state_t)STOP;
@@ -123,5 +123,5 @@
 			case THIRD  : while( !global.ready ) { yield(); } this.state = call3( global, this.idx ); break;
 			case LAST   : while( !global.ready ) { yield(); } this.state = call4( global, this.idx ); break;
-			case STOP   : serr | "This should not happen" | endl;
+			case STOP   : serr | "This should not happen" | nl;
 		}
 	}
@@ -132,5 +132,6 @@
 int main() {
 	srandom( time(NULL) );
-	sout | "Starting" | endl;
+	sout | nlOff;					// turn off auto newline
+	sout | "Starting" | nl;
 	{
 		waiter_t waiters[4] = {
@@ -142,4 +143,4 @@
 		the_threads = waiters;
 	}
-	sout | "Stopping" | endl;
+	sout | "Stopping" | nl;
 }
Index: tests/concurrent/waitfor/simple.c
===================================================================
--- tests/concurrent/waitfor/simple.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/waitfor/simple.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -31,8 +31,8 @@
 
 void do_wait( global_t * mutex a ) {
-	sout | "Waiting to accept" | endl;
+	sout | "Waiting to accept";
 	yield( random( 10 ) );
 
-	sout | "Accepting" | endl;
+	sout | "Accepting";
 
 	__acceptable_t acceptable;
@@ -43,5 +43,5 @@
 	__waitfor_internal( 1, &acceptable );
 
-	sout | "Accepted" | endl;
+	sout | "Accepted";
 	yield( random( 10 ) );
 }
@@ -50,5 +50,5 @@
 	for( int i = 0; i < N; i++ ) {
 		do_wait( &globalA );
-		sout | i | endl;
+		sout | i;
 	}
 
@@ -76,5 +76,5 @@
 	srandom( time( NULL ) );
 	printf("%p\n", &globalA);
-	sout | "Starting" | endl;
+	sout | "Starting";
 	{
 		Acceptor r;
@@ -82,4 +82,4 @@
 
 	}
-	sout | "Done" | endl;
+	sout | "Done";
 }
Index: tests/concurrent/waitfor/statment.c
===================================================================
--- tests/concurrent/waitfor/statment.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/waitfor/statment.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -84,5 +84,5 @@
 		case 7: return call7( m );
 		default :
-			serr | "Incorrect index" | index | endl;
+			serr | "Incorrect index" | index;
 			abort();
 	}
@@ -102,11 +102,11 @@
 	while( !done ) {
 		   waitfor( get_index, this );
-		or waitfor( call1, this ) { sout | "Statement" | endl; if( this.last_val != 1 ) { serr | "Incorrect index: expected" | 1 | "got" | this.last_val | endl; } }
-		or waitfor( call2, this ) { sout | "Statement" | endl; if( this.last_val != 2 ) { serr | "Incorrect index: expected" | 2 | "got" | this.last_val | endl; } }
-		or waitfor( call3, this ) { sout | "Statement" | endl; if( this.last_val != 3 ) { serr | "Incorrect index: expected" | 3 | "got" | this.last_val | endl; } }
-		or waitfor( call4, this ) { sout | "Statement" | endl; if( this.last_val != 4 ) { serr | "Incorrect index: expected" | 4 | "got" | this.last_val | endl; } }
-		or waitfor( call5, this ) { sout | "Statement" | endl; if( this.last_val != 5 ) { serr | "Incorrect index: expected" | 5 | "got" | this.last_val | endl; } }
-		or waitfor( call6, this ) { sout | "Statement" | endl; if( this.last_val != 6 ) { serr | "Incorrect index: expected" | 6 | "got" | this.last_val | endl; } }
-		or waitfor( call7, this ) { sout | "Statement" | endl; if( this.last_val != 7 ) { serr | "Incorrect index: expected" | 7 | "got" | this.last_val | endl; } }
+		or waitfor( call1, this ) { sout | "Statement"; if( this.last_val != 1 ) { serr | "Incorrect index: expected" | 1 | "got" | this.last_val; } }
+		or waitfor( call2, this ) { sout | "Statement"; if( this.last_val != 2 ) { serr | "Incorrect index: expected" | 2 | "got" | this.last_val; } }
+		or waitfor( call3, this ) { sout | "Statement"; if( this.last_val != 3 ) { serr | "Incorrect index: expected" | 3 | "got" | this.last_val; } }
+		or waitfor( call4, this ) { sout | "Statement"; if( this.last_val != 4 ) { serr | "Incorrect index: expected" | 4 | "got" | this.last_val; } }
+		or waitfor( call5, this ) { sout | "Statement"; if( this.last_val != 5 ) { serr | "Incorrect index: expected" | 5 | "got" | this.last_val; } }
+		or waitfor( call6, this ) { sout | "Statement"; if( this.last_val != 6 ) { serr | "Incorrect index: expected" | 6 | "got" | this.last_val; } }
+		or waitfor( call7, this ) { sout | "Statement"; if( this.last_val != 7 ) { serr | "Incorrect index: expected" | 7 | "got" | this.last_val; } }
 
 		done = true;
@@ -128,9 +128,9 @@
 int main() {
 	processor p[2];
-	sout | "Starting" | endl;
+	sout | "Starting";
 	{
 		caller c[7];
 		waiter w;
 	}
-	sout | "Stopping" | endl;
+	sout | "Stopping";
 }
Index: tests/concurrent/waitfor/when.c
===================================================================
--- tests/concurrent/waitfor/when.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/concurrent/waitfor/when.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -58,12 +58,12 @@
 void arbiter( global_t & mutex this ) {
 	for( int i = 0; i < N; i++ ) {
-		   when( this.last_call == 6 ) waitfor( call1, this ) { if( this.last_call != 1) { serr | "Expected last_call to be 1 got" | this.last_call | endl; } }
-		or when( this.last_call == 1 ) waitfor( call2, this ) { if( this.last_call != 2) { serr | "Expected last_call to be 2 got" | this.last_call | endl; } }
-		or when( this.last_call == 2 ) waitfor( call3, this ) { if( this.last_call != 3) { serr | "Expected last_call to be 3 got" | this.last_call | endl; } }
-		or when( this.last_call == 3 ) waitfor( call4, this ) { if( this.last_call != 4) { serr | "Expected last_call to be 4 got" | this.last_call | endl; } }
-		or when( this.last_call == 4 ) waitfor( call5, this ) { if( this.last_call != 5) { serr | "Expected last_call to be 5 got" | this.last_call | endl; } }
-		or when( this.last_call == 5 ) waitfor( call6, this ) { if( this.last_call != 6) { serr | "Expected last_call to be 6 got" | this.last_call | endl; } }
+		   when( this.last_call == 6 ) waitfor( call1, this ) { if( this.last_call != 1) { serr | "Expected last_call to be 1 got" | this.last_call; } }
+		or when( this.last_call == 1 ) waitfor( call2, this ) { if( this.last_call != 2) { serr | "Expected last_call to be 2 got" | this.last_call; } }
+		or when( this.last_call == 2 ) waitfor( call3, this ) { if( this.last_call != 3) { serr | "Expected last_call to be 3 got" | this.last_call; } }
+		or when( this.last_call == 3 ) waitfor( call4, this ) { if( this.last_call != 4) { serr | "Expected last_call to be 4 got" | this.last_call; } }
+		or when( this.last_call == 4 ) waitfor( call5, this ) { if( this.last_call != 5) { serr | "Expected last_call to be 5 got" | this.last_call; } }
+		or when( this.last_call == 5 ) waitfor( call6, this ) { if( this.last_call != 6) { serr | "Expected last_call to be 6 got" | this.last_call; } }
 
-		sout | this.last_call | endl;
+		sout | this.last_call;
 	}
 
@@ -78,5 +78,5 @@
 int main() {
 	srandom( time(NULL) );
-	sout | "Starting" | endl;
+	sout | "Starting";
 	{
 		arbiter_t arbiter;
@@ -84,4 +84,4 @@
 
 	}
-	sout | "Stopping" | endl;
+	sout | "Stopping";
 }
Index: tests/coroutine/.expect/fmtLines.txt
===================================================================
--- tests/coroutine/.expect/fmtLines.txt	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/coroutine/.expect/fmtLines.txt	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -16,7 +16,7 @@
 difi  ed B  y :   Pete  r A.  
  Buh  r//   Last   Mod  ifie  
-d On   : M  on S  ep 1  8 11  
-:35:  57 2  017/  / Up  date  
- Cou  nt       :   31/  /#in  
+d On   : T  ue D  ec 1  1 23  
+:31:  12 2  018/  / Up  date  
+ Cou  nt       :   32/  /#in  
 clud  e <f  stre  am.h  fa>#  
 incl  ude   <cor  outi  ne.h  
@@ -34,46 +34,45 @@
 t )   {      if   ( fm  t.g   
 != 0   ||   fmt.  b !=   0 )  
- sou  t |   endl  ;}vo  id m  
-ain(   For  mat   & fm  t )   
-{	fo  r (   ;; )   {		  				  
-				  // f  or a  s ma  ny c  
-hara  cter  s		f  or (   fmt  
-.g =   0;   fmt.  g <   5; f  
-mt.g   +=   1 )   {		/  / gr  
-oups   of   5 bl  ocks  			f  
-or (   fmt  .b =   0;   fmt.  
-b <   4; f  mt.b   +=   1 )   
-{	//   blo  cks   of 4   cha  
-ract  ers	  			f  or (   ;;   
-) {	  				  		//   for   new  
-line   cha  ract  ers	  				  
-susp  end(  );		  			i  f (   
-fmt.  ch !  = '\  n' )   bre  
-ak;	  	//   igno  re n  ewli  
-ne		  		}   // f  or		  		so  
-ut |   fmt  .ch;  				  			/  
-/ pr  int   char  acte  r			  
-} //   for  			s  out   | "   
- ";	  				  			/  / pr  int   
-bloc  k se  para  tor	  	} /  
-/ fo  r		s  out   | en  dl;	  
-				  				  // p  rint   gro  
-up s  epar  ator  	} /  / fo  
-r} /  / ma  invo  id p  rt(   
-Form  at &   fmt  , ch  ar c  
-h )   {      fmt  .ch   = ch  
-;      res  ume(   fmt   );}  
- //   prti  nt m  ain(  ) {	  
-Form  at f  mt;	  char   ch;  
-	for   ( ;  ; )   {		s  in |  
- ch;  				  				  		//   rea  
-d on  e ch  arac  ter	    if  
- ( e  of(   sin   ) )   brea  
-k;		  				  	//   eof   ?		p  
-rt(   fmt,   ch   );	}   //   
-for}   //   main  // L  ocal  
- Var  iabl  es:   ////   tab  
--wid  th:   4 //  // c  ompi  
-le-c  omma  nd:   "cfa   fmt  
-Line  s.c"   ///  / En  d: /  
-/
+ sou  t |   nl;}  void   mai  
+n( F  orma  t &   fmt   ) {	  
+for   ( ;;   ) {  				  				  
+		//   for   as   many   cha  
+ract  ers	  	for   ( f  mt.g  
+ = 0  ; fm  t.g   < 5;   fmt  
+.g +  = 1   ) {	  	//   grou  
+ps o  f 5   bloc  ks		  	for  
+ ( f  mt.b   = 0  ; fm  t.b   
+< 4;   fmt  .b +  = 1   ) {	  
+// b  lock  s of   4 c  hara  
+cter  s			  	for   ( ;  ; )   
+{			  				  // f  or n  ewli  
+ne c  hara  cter  s			  		su  
+spen  d();  				  	if   ( fm  
+t.ch   !=   '\n'   ) b  reak  
+;		/  / ig  nore   new  line  
+				  } //   for  				  sout  
+ | f  mt.c  h;		  				  	//   
+prin  t ch  arac  ter	  		}   
+// f  or		  	sou  t |   "  "  
+;			  				  	//   prin  t bl  
+ock   sepa  rato  r		}   //   
+for	  	sou  t |   nl;	  				  
+				  // p  rint   gro  up s  
+epar  ator  	} /  / fo  r} /  
+/ ma  invo  id p  rt(   Form  
+at &   fmt  , ch  ar c  h )   
+{      fmt  .ch   = ch  ;     
+ res  ume(   fmt   );}   //   
+prti  nt m  ain(  ) {	  Form  
+at f  mt;	  char   ch;  	for  
+ ( ;  ; )   {		s  in |   ch;  
+				  				  		//   rea  d on  
+e ch  arac  ter	    if   ( e  
+of(   sin   ) )   brea  k;		  
+				  	//   eof   ?		p  rt(   
+fmt,   ch   );	}   //   for}  
+ //   main  // L  ocal   Var  
+iabl  es:   ////   tab  -wid  
+th:   4 //  // c  ompi  le-c  
+omma  nd:   "cfa   fmt  Line  
+s.c"   ///  / En  d: /  /
Index: tests/coroutine/.in/fmtLines.txt
===================================================================
--- tests/coroutine/.in/fmtLines.txt	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/coroutine/.in/fmtLines.txt	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Sun Sep 17 21:56:15 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 18 11:35:57 2017
-// Update Count     : 31
+// Last Modified On : Tue Dec 11 23:31:12 2018
+// Update Count     : 32
 //
 
@@ -27,5 +27,5 @@
 
 void ^?{}( Format & fmt ) {
-    if ( fmt.g != 0 || fmt.b != 0 ) sout | endl;
+    if ( fmt.g != 0 || fmt.b != 0 ) sout | nl;
 }
 
@@ -42,5 +42,5 @@
 			sout | "  ";								// print block separator
 		} // for
-		sout | endl;									// print group separator
+		sout | nl;									// print group separator
 	} // for
 } // main
Index: tests/coroutine/fibonacci.c
===================================================================
--- tests/coroutine/fibonacci.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/coroutine/fibonacci.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jun  8 07:29:37 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Aug 18 11:21:58 2018
-// Update Count     : 24
+// Last Modified On : Tue Dec 11 21:57:33 2018
+// Update Count     : 25
 //
 
@@ -39,5 +39,5 @@
 	Fibonacci f1, f2;
 	for ( 10 ) {										// print N Fibonacci values
-		sout | next( f1 ) | next( f2 ) | endl;
+		sout | next( f1 ) | next( f2 );
 	} // for
 }
Index: tests/coroutine/fibonacci_1.c
===================================================================
--- tests/coroutine/fibonacci_1.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/coroutine/fibonacci_1.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Thu Apr 26 23:20:08 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Aug 18 11:21:02 2018
-// Update Count     : 13
+// Last Modified On : Tue Dec 11 21:57:54 2018
+// Update Count     : 14
 // 
 
@@ -36,5 +36,5 @@
 	Fibonacci f1, f2;
 	for ( 10 ) {										// print N Fibonacci values
-		sout | next( f1 ) | next( f2 ) | endl;
+		sout | next( f1 ) | next( f2 );
 	} // for
 }
Index: tests/coroutine/fmtLines.c
===================================================================
--- tests/coroutine/fmtLines.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/coroutine/fmtLines.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Sun Sep 17 21:56:15 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 16 08:20:54 2018
-// Update Count     : 45
+// Last Modified On : Tue Dec 11 21:58:49 2018
+// Update Count     : 47
 //
 
@@ -34,5 +34,5 @@
 			sout | "  ";								// print block separator
 		} // for
-		sout | endl;									// print group separator
+		sout | nl;										// print group separator
 	} // for
 } // main
@@ -43,5 +43,5 @@
 
 void ^?{}( Format & fmt ) with( fmt ) {
-	if ( g != 0 || b != 0 ) sout | endl;
+	if ( g != 0 || b != 0 ) sout | nl;
 }
 
@@ -52,4 +52,5 @@
 int main() {
 	Format fmt;
+	sout | nlOff;										// turn off auto newline
 
   eof: for () {											// read until end of file
Index: tests/coroutine/pingpong.c
===================================================================
--- tests/coroutine/pingpong.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/coroutine/pingpong.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed Sep 20 11:55:23 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Aug 18 11:31:11 2018
-// Update Count     : 28
+// Last Modified On : Tue Dec 11 21:58:06 2018
+// Update Count     : 29
 //
 
@@ -40,5 +40,5 @@
 void main( PingPong & pingpong ) {						// ping's starter ::main, pong's starter ping
 	for ( pingpong.N ) {								// N ping-pongs
-		sout | pingpong.name | endl;
+		sout | pingpong.name;
 		cycle( *pingpong.part );
 	} // for
Index: tests/coroutine/prodcons.c
===================================================================
--- tests/coroutine/prodcons.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/coroutine/prodcons.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Mon Sep 18 12:23:39 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Aug 18 12:55:10 2018
-// Update Count     : 51
+// Last Modified On : Tue Dec 11 21:58:25 2018
+// Update Count     : 52
 //
 
@@ -32,12 +32,12 @@
 		int p1 = random( 100 );
 		int p2 = random( 100 );
-		sout | p1 | " " | p2 | endl;
+		sout | p1 | " " | p2;
 		int status = delivery( *c, p1, p2 );
-		sout | " $" | money | endl;
-		sout | status | endl;
+		sout | " $" | money;
+		sout | status;
 		receipt += 1;
 	}
 	stop( *c );
-	sout | "prod stops" | endl;
+	sout | "prod stops";
 }
 int payment( Prod & prod, int money ) {
@@ -68,12 +68,12 @@
 	int money = 1, receipt;
 	for ( ; ! done; ) {
-		sout | p1 | " " | p2 | endl;
-		sout | " $" | money | endl;
+		sout | p1 | " " | p2;
+		sout | " $" | money;
 		status += 1;
 		receipt = payment( *p, money );
-		sout | " #" | receipt | endl;
+		sout | " #" | receipt;
 		money += 1;
 	}
-	sout | "cons stops" | endl;
+	sout | "cons stops";
 }
 int delivery( Cons & cons, int p1, int p2 ) {
@@ -92,5 +92,5 @@
 	srandom( /* getpid() */ 103 );						// fixed seed for testing
 	start( prod, 5, cons );
-	sout | "main stops" | endl;
+	sout | "main stops";
 }
 
Index: tests/coroutine/runningTotal.c
===================================================================
--- tests/coroutine/runningTotal.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/coroutine/runningTotal.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed Dec  6 08:05:27 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 16 08:22:29 2018
-// Update Count     : 3
+// Last Modified On : Tue Dec 11 21:59:00 2018
+// Update Count     : 4
 //
 
@@ -42,5 +42,5 @@
 	RunTotal rntl;
 	for ( i; 10 ) {
-		sout | i | add( rntl, i ) | endl;
+		sout | i | add( rntl, i );
 	} // for
 }
Index: tests/div.cfa
===================================================================
--- tests/div.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/div.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,10 +10,10 @@
 // Created On       : Tue Aug  8 16:28:43 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:53:10 2018
-// Update Count     : 19
+// Last Modified On : Tue Dec  4 21:35:01 2018
+// Update Count     : 20
 //
 
 #include <fstream.hfa>
-#include <stdlib.hfa>										// div
+#include <stdlib.hfa>									// div
 
 struct T { int i; };
@@ -23,9 +23,9 @@
 
 int main( void ) {
-	sout | "div" | div( 13, 5 ) | div( 13L, 5L ) | div( 13LL, 5LL ) | endl;
+	sout | "div" | div( 13, 5 ) | div( 13L, 5L ) | div( 13LL, 5LL );
 	short s1 = 13, s2 = 5;
-	sout | "div" | div( s1, s2 ) | endl;
+	sout | "div" | div( s1, s2 );
 	T t1 = { 13 }, t2 = { 5 };
-	sout | "div" | div( t1, t2 ) | endl;				// polymorphic div
+	sout | "div" | div( t1, t2 );						// polymorphic div
 } // main
 
Index: tests/except-0.cfa
===================================================================
--- tests/except-0.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/except-0.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -25,5 +25,5 @@
 void ^?{}(signal_exit * this) {
 	printf("Exiting: %s\n", this->area);
-//	sout | "Exiting:" | this->area | endl;
+//	sout | "Exiting:" | this->area;
 }
 
Index: tests/fallthrough.cfa
===================================================================
--- tests/fallthrough.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/fallthrough.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar 14 10:06:25 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Nov  8 09:09:09 2018
-// Update Count     : 16
+// Last Modified On : Tue Dec  4 21:36:14 2018
+// Update Count     : 17
 //
 
@@ -19,45 +19,45 @@
 	choose ( choice ) {
 		case 1:
-			sout | "case 1" | endl;
+			sout | "case 1";
 			fallthru;
 		case 2:
-			sout | "case 2" | endl;
+			sout | "case 2";
 			fallthru;
-			sout | "did not fallthru" | endl;
+			sout | "did not fallthru";
 			if ( 7 ) fallthru common2;
 			fallthru common1;
 		case 3:
-			sout | "case 3" | endl;
+			sout | "case 3";
 			fallthru default;
 			fallthru common1;
 		common1:
-			sout | "common1" | endl;
+			sout | "common1";
 		// break
 		case 4:
-			sout | "case 4" | endl;
+			sout | "case 4";
 			fallthru common2;
 		case 5:
-			sout | "case 5" | endl;
+			sout | "case 5";
 			fallthru common2;
 			fallthru default;
 		case 6:
-			sout | "case 6" | endl;
+			sout | "case 6";
 			fallthru common2;
 		common2:
-			sout | "common2" | endl;
+			sout | "common2";
 		// break
 		default:
-			sout | "default" | endl;
+			sout | "default";
 			fallthru;
 	}
 
-	sout | endl;
+	sout | nl;
 
 	switch ( choice ) {
 	  case 1:
-		sout | "case 1" | endl;
+		sout | "case 1";
 		switch ( choice ) {
 		  case 1:
-			sout | "case 1" | endl;
+			sout | "case 1";
 			for ( int i = 0; i < 4; i += 1 ) {
 				printf("%d\n", i);
@@ -67,10 +67,10 @@
 		break;
 	  case 5:
-		sout | "case 5" | endl;
+		sout | "case 5";
 		if ( choice == 5 ) {
 			if ( choice != 5 ) {
-				sout | "error" | endl;
+				sout | "error";
 			} else {
-				sout | "check" | endl;
+				sout | "check";
 				fallthru common;
 			} // if
@@ -117,5 +117,5 @@
 int main() {
 	test( 1 );
-	sout | endl;
+	sout | nl;
 	test( 5 );
 }
Index: tests/fstream_test.cfa
===================================================================
--- tests/fstream_test.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/fstream_test.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:53:56 2018
-// Update Count     : 66
+// Last Modified On : Tue Dec  4 21:36:34 2018
+// Update Count     : 67
 //
 
@@ -18,14 +18,14 @@
 int main( void ) {
 	int nombre;
-	sout | "Entrez un nombre, s'il vous plaît:" | endl;
+	sout | "Entrez un nombre, s'il vous plaît:";
 	sin  | nombre;
-	sout | "Vous avez entré" | nombre | endl;
+	sout | "Vous avez entré" | nombre;
 	sout | "le nombre" | nombre | "est"
-		 | (nombre > 0 ? "positif" : nombre == 0 ? "zéro" : "négatif") | endl;
+		 | (nombre > 0 ? "positif" : nombre == 0 ? "zéro" : "négatif");
 
-	sout | "Entrez trois nombres, s'il vous plaît: " | endl;
+	sout | "Entrez trois nombres, s'il vous plaît: ";
 	int i, j, k;
 	sin  | i | j | k;
-	sout | "Vous avez entré" | "i:" | "" | i | "j:" | "" | j | "k:" | "" | k | endl;
+	sout | "Vous avez entré" | "i:" | "" | i | "j:" | "" | j | "k:" | "" | k;
 }
 
Index: tests/function-operator.cfa
===================================================================
--- tests/function-operator.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/function-operator.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Fri Aug 25 15:21:11 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  2 09:27:53 2018
-// Update Count     : 8
+// Last Modified On : Tue Dec  4 21:37:09 2018
+// Update Count     : 9
 //
 
@@ -83,5 +83,5 @@
 // TODO: abstract over (os, T)
 os_wrapper ?=?(os_wrapper & wrapper, int x) {
-	*wrapper.out | x | endl;
+	*wrapper.out | x;
 	return wrapper;
 }
Index: tests/gmp.cfa
===================================================================
--- tests/gmp.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/gmp.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Tue Apr 19 08:55:51 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:54:34 2018
-// Update Count     : 557
+// Last Modified On : Tue Dec  4 21:37:29 2018
+// Update Count     : 558
 //
 
@@ -19,87 +19,87 @@
 
 int main( void ) {
-	sout | "constructors" | endl;
+	sout | "constructors";
 	short int si = 3;
 	Int x = { "50000000000000000000" }, y = { si }, z = x + y;
-	sout | x | y | z | endl;
-	sout | "x:" | x | "y:" | y | "z:" | z | endl;
+	sout | x | y | z;
+	sout | "x:" | x | "y:" | y | "z:" | z;
 
-	sout | "conversions" | endl;
+	sout | "conversions";
 	y = 'a';
-	sout | "y:" | y | endl;
+	sout | "y:" | y;
 	y = "12345678901234567890123456789";
-	sout | "y:" | y | endl;
+	sout | "y:" | y;
 	y = 100`mp + 100`mp;
-	sout | "y:" | y | endl;
+	sout | "y:" | y;
 	y = -200u`mp + -200u`mp;
-	sout | "y:" | y | endl;
+	sout | "y:" | y;
 	y = "12345678901234567890123456789"`mp + "12345678901234567890123456789"`mp;
-	sout | "y:" | y | endl;
+	sout | "y:" | y;
 	y = si;
-	sout | "y:" | y | endl;
+	sout | "y:" | y;
 	y = -3;
-	sout | "y:" | y | endl;
+	sout | "y:" | y;
 	y += 7;
-	sout | "y:" | y | endl;
+	sout | "y:" | y;
 	y -= 1;
-	sout | "y:" | y | endl;
+	sout | "y:" | y;
 	int b;
 	b = y;
 	si = y;
-	sout | "y:" | y | "b:" | b | "si:" | si | endl;
+	sout | "y:" | y | "b:" | b | "si:" | si;
 
-	sout | "comparison" | endl;
-	sout | x == x | endl;
-	sout | x != x | endl;
-	sout | x < x | endl;
-	sout | x <= x | endl;
-	sout | x > x | endl;
-	sout | x >= x | endl;
+	sout | "comparison";
+	sout | x == x;
+	sout | x != x;
+	sout | x < x;
+	sout | x <= x;
+	sout | x > x;
+	sout | x >= x;
 
-	sout | "arithmetic" | endl;
+	sout | "arithmetic";
 	z = x + y + z;
-	sout | "z:" | z | endl;
+	sout | "z:" | z;
 	z = z = x;
-	sout | "z:" | z | endl;
+	sout | "z:" | z;
 	z = x - y - z;
-	sout | "z:" | z | endl;
+	sout | "z:" | z;
 	z = x * y * z;
-	sout | "z:" | z | endl;
+	sout | "z:" | z;
 	z = x * 3;
-	sout | "z:" | z | endl;
+	sout | "z:" | z;
 	z = 3 * x;
-	sout | "z:" | z | endl;
+	sout | "z:" | z;
 	z = x / 3;
-	sout | "z:" | z | endl;
-	sout | div( x, 3 ) | x / 3 | "," | x % 3 | endl;
+	sout | "z:" | z;
+	sout | div( x, 3 ) | x / 3 | "," | x % 3;
 	[ x, y ] = div( x, 3 );
-	sout | "x:" | x | "y:" | y | endl;
+	sout | "x:" | x | "y:" | y;
 
-	sout | endl;
+	sout;
 
 	sin | x | y | z;
-	sout | x | y | z | endl;
+	sout | x | y | z;
 
-	sout | endl;
+	sout;
 
-	sout | "Fibonacci Numbers" | endl;
+	sout | "Fibonacci Numbers";
 	Int fn, fn1, fn2;
 	fn = (Int){0}; fn1 = fn;							// 1st case
-	sout | (int)0 | fn | endl;
+	sout | (int)0 | fn;
 	fn = 1; fn2 = fn1; fn1 = fn;						// 2nd case
-	sout | 1 | fn | endl;
+	sout | 1 | fn;
 	for ( i; 2u ~= 200 ) {
 		fn = fn1 + fn2; fn2 = fn1; fn1 = fn;			// general case
-		sout | i | fn | endl;
+		sout | i | fn;
 	} // for
 
-	sout | endl;
+	sout;
 
-	sout | "Factorial Numbers" | endl;
+	sout | "Factorial Numbers";
 	Int fact = 1;										// 1st case
-	sout | (int)0 | fact | endl;
+	sout | (int)0 | fact;
 	for ( i; 1u ~= 40u ) {
 		fact *= i;										// general case
-		sout | i | fact | endl;
+		sout | i | fact;
 	} // for
 } // main
Index: tests/heap.cfa
===================================================================
--- tests/heap.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/heap.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Tue Nov  6 17:54:56 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Nov  8 09:03:54 2018
-// Update Count     : 17
+// Last Modified On : Tue Dec 11 21:52:40 2018
+// Update Count     : 18
 // 
 
@@ -45,23 +45,23 @@
 		for ( i; NoOfAllocs ) {
 			locns[i] = alloc( i );
-			//sout | (void *)locns[i] | endl;
+			//sout | (void *)locns[i];
 			for ( k; i ) locns[i][k] = '\345';
 		} // for
-		//sout | (char *)sbrk(0) - start | " bytes" | endl;
+		//sout | (char *)sbrk(0) - start | " bytes";
 
 		for ( i; NoOfAllocs ) {
-			//sout | (void *)locns[i] | endl;
+			//sout | (void *)locns[i];
 			for ( k; i ) if ( locns[i][k] != '\345' ) abort( "new/delete corrupt storage1" );
 			free( locns[i] );
 		} // for
-		//sout | (char *)sbrk(0) - start | " bytes" | endl;
+		//sout | (char *)sbrk(0) - start | " bytes";
 
 		for ( i; NoOfAllocs ) {
 			locns[i] = alloc( i );
-			//sout | (void *)locns[i] | endl;
+			//sout | (void *)locns[i];
 			for ( k; i ) locns[i][k] = '\345';
 		} // for
 		for ( i; NoOfAllocs - 1 -~= 0 ) {
-			//sout | (void *)locns[i] | endl;
+			//sout | (void *)locns[i];
 			for ( k; i ) if ( locns[i][k] != '\345' ) abort( "new/delete corrupt storage2" );
 			free( locns[i] );
@@ -186,9 +186,9 @@
 
 	for ( a; libAlign() ~= limit ~ a ) {				// generate powers of 2
-		//sout | alignments[a] | endl;
+		//sout | alignments[a];
 		for ( s; 1 ~ NoOfAllocs ) {						// allocation of size 0 can return null
 			char * area = (char *)memalign( a, s );
 			if ( area == 0 ) abort( "memalign/free out of memory" );
-			//sout | i | " " | area | endl;
+			//sout | i | " " | area;
 			if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
 				abort( "memalign/free bad alignment : memalign(%d,%d) = %p", (int)a, s, area );
@@ -203,10 +203,10 @@
 
 	for ( a; libAlign() ~= limit ~ a ) {				// generate powers of 2
-		//sout | alignments[a] | endl;
+		//sout | alignments[a];
 		for ( i; 1 ~ NoOfMmaps ) {
 			size_t s = i + default_mmap_start();		// cross over point
 			char * area = (char *)memalign( a, s );
 			if ( area == 0 ) abort( "memalign/free out of memory" );
-			//sout | i | " " | area | endl;
+			//sout | i | " " | area;
 			if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
 				abort( "memalign/free bad alignment : memalign(%d,%d) = %p", (int)a, (int)s, area );
@@ -268,5 +268,5 @@
 		char * area = (char *)memalign( a, amount );	// aligned N-byte allocation
 		if ( area == 0 ) abort( "memalign/realloc/free out of memory" ); // no storage ?
-		//sout | alignments[a] | " " | area | endl;
+		//sout | alignments[a] | " " | area;
 		if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
 			abort( "memalign/realloc/free bad alignment : memalign(%d,%d) = %p", (int)a, (int)amount, area );
@@ -279,5 +279,5 @@
 			area = (char *)realloc( area, s );			// attempt to reuse storage
 			if ( area == 0 ) abort( "memalign/realloc/free out of memory" ); // no storage ?
-			//sout | i | " " | area | endl;
+			//sout | i | " " | area;
 			if ( (size_t)area % a != 0 ) {				// check for initial alignment
 				abort( "memalign/realloc/free bad alignment %p", area );
@@ -291,9 +291,9 @@
 
 	for ( a; libAlign() ~= limit ~ a ) {				// generate powers of 2
-		//sout | alignments[a] | endl;
+		//sout | alignments[a];
 		for ( s; 1 ~ limit ) {							// allocation of size 0 can return null
 			char * area = (char *)cmemalign( a, 1, s );
 			if ( area == 0 ) abort( "cmemalign/free out of memory" );
-			//sout | i | " " | area | endl;
+			//sout | i | " " | area;
 			if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
 				abort( "cmemalign/free bad alignment : cmemalign(%d,%d) = %p", (int)a, s, area );
@@ -314,5 +314,5 @@
 		char * area = (char *)cmemalign( a, 1, amount ); // aligned N-byte allocation
 		if ( area == 0 ) abort( "cmemalign/realloc/free out of memory" ); // no storage ?
-		//sout | alignments[a] | " " | area | endl;
+		//sout | alignments[a] | " " | area;
 		if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
 			abort( "cmemalign/realloc/free bad alignment : cmemalign(%d,%d) = %p", (int)a, (int)amount, area );
@@ -328,5 +328,5 @@
 			area = (char *)realloc( area, s );			// attempt to reuse storage
 			if ( area == 0 ) abort( "cmemalign/realloc/free out of memory" ); // no storage ?
-			//sout | i | " " | area | endl;
+			//sout | i | " " | area;
 			if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment
 				abort( "cmemalign/realloc/free bad alignment %p", area );
@@ -339,5 +339,5 @@
 		free( area );
     } // for
-	//sout | "worker" | thisTask() | "successful completion" | endl;
+	//sout | "worker" | thisTask() | "successful completion";
 } // Worker main
 
Index: tests/hello.cfa
===================================================================
--- tests/hello.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/hello.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:56:22 2018
-// Update Count     : 16
+// Last Modified On : Tue Dec  4 21:38:39 2018
+// Update Count     : 17
 //
 
@@ -17,16 +17,16 @@
 
 int main() {
-	sout | "Hello world!" | endl;
-	sout | "Bonjour le monde!" | endl;
-	sout | "Hola Mundo!" | endl;
-	sout | "Hallo Welt!" | endl;
-	sout | "Kaixo Mundua!" | endl;
-	sout | "Chào thế giới!" | endl;
-	sout | "Привет мир!" | endl;
-	sout | "שלום עולם!" | endl;
-	sout | "你好，世界!" | endl;
-	sout | "こんにちは世界!" | endl;
-	sout | "안녕하세요 세계!" | endl;
-	sout | "नमस्ते दुनिया!" | endl;
+	sout | "Hello world!";
+	sout | "Bonjour le monde!";
+	sout | "Hola Mundo!";
+	sout | "Hallo Welt!";
+	sout | "Kaixo Mundua!";
+	sout | "Chào thế giới!";
+	sout | "Привет мир!";
+	sout | "שלום עולם!";
+	sout | "你好，世界!";
+	sout | "こんにちは世界!";
+	sout | "안녕하세요 세계!";
+	sout | "नमस्ते दुनिया!";
 }
 
Index: tests/identity.cfa
===================================================================
--- tests/identity.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/identity.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:56:54 2018
-// Update Count     : 19
+// Last Modified On : Tue Dec  4 21:38:59 2018
+// Update Count     : 20
 //
 
@@ -22,17 +22,17 @@
 
 int main() {
-	sout | "char\t\t\t"					| identity( 'z' ) | endl;
-	sout | "signed int\t\t"				| identity( 4 ) | endl;
-	sout | "unsigned int\t\t"			| identity( 4u ) | endl;
-	sout | "signed long int\t\t" 		| identity( 4l ) | endl;
-	sout | "unsigned long int\t" 		| identity( 4ul ) | endl;
-	sout | "signed long long int\t"		| identity( 4ll ) | endl;
-	sout | "unsigned long long int\t"	| identity( 4ull ) | endl;
-	sout | "float\t\t\t" 				| identity( 4.1f ) | endl;
-	sout | "double\t\t\t"				| identity( 4.1 ) | endl;
-	sout | "long double\t\t"			| identity( 4.1l ) | endl;
-	sout | "float _Complex\t\t"			| identity( -4.1F-2.0iF ) | endl;
-	sout | "double _Complex\t\t"		| identity( -4.1D-2.0iD ) | endl;
-	sout | "long double _Complex\t"		| identity( -4.1L-2.0iL ) | endl;
+	sout | "char\t\t\t"					| identity( 'z' );
+	sout | "signed int\t\t"				| identity( 4 );
+	sout | "unsigned int\t\t"			| identity( 4u );
+	sout | "signed long int\t\t" 		| identity( 4l );
+	sout | "unsigned long int\t" 		| identity( 4ul );
+	sout | "signed long long int\t"		| identity( 4ll );
+	sout | "unsigned long long int\t"	| identity( 4ull );
+	sout | "float\t\t\t" 				| identity( 4.1f );
+	sout | "double\t\t\t"				| identity( 4.1 );
+	sout | "long double\t\t"			| identity( 4.1l );
+	sout | "float _Complex\t\t"			| identity( -4.1F-2.0iF );
+	sout | "double _Complex\t\t"		| identity( -4.1D-2.0iD );
+	sout | "long double _Complex\t"		| identity( -4.1L-2.0iL );
 }
 
Index: tests/ifwhileCtl.cfa
===================================================================
--- tests/ifwhileCtl.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/ifwhileCtl.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Sat Aug 26 10:13:11 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:57:07 2018
-// Update Count     : 22
+// Last Modified On : Tue Dec  4 21:39:18 2018
+// Update Count     : 23
 //
 
@@ -22,42 +22,42 @@
 
 	if ( int x = 1 ) {
-		sout | "x != 0 correct" | endl;
+		sout | "x != 0 correct";
 	} else {
-		sout | "x == 0 incorrect" | endl;
+		sout | "x == 0 incorrect";
 	} // if
 
 	if ( int x = 4, y = 0 ) {
-		sout | "x != 0 && y != 0 incorrect" | endl;
+		sout | "x != 0 && y != 0 incorrect";
 	} else if ( int x = 4, y = 1 ) {
-		sout | "x != 0 && y != 0 correct" | endl;
+		sout | "x != 0 && y != 0 correct";
 	} else {
-		sout | "x == 0 || y == 0 incorrect" | endl;
+		sout | "x == 0 || y == 0 incorrect";
 	} // if
 
 	if ( int x = 5, y = f( x ); x == y ) {
-		sout | "x == y correct" | endl;
+		sout | "x == y correct";
 	} else {
-		sout | "x != y incorrect" | endl;
+		sout | "x != y incorrect";
 	} // if
 
 	if ( struct S { int i; } s = { 3 }; s.i < 4 ) {
 		S s1;
-		sout | "s.i < 4 correct" | endl;
+		sout | "s.i < 4 correct";
 	} else {
 		S s1;
-		sout | "s.i >= 4 incorrect" | endl;
+		sout | "s.i >= 4 incorrect";
 	} // if
 
 	while ( int x = 1 ) {
-		sout | "x != 0 correct" | endl;
+		sout | "x != 0 correct";
 		break;
 	} // while
 
 	while ( int x = 4, y = 0 ) {
-		sout | "x != 0 && y != 0 incorrect" | endl;
+		sout | "x != 0 && y != 0 incorrect";
 	} // while
 
 	while ( int x = 5, y = f( x ); x == y ) {
-		sout | "x == y correct" | endl;
+		sout | "x == y correct";
 		break;
 	} // while
@@ -65,5 +65,5 @@
 	while ( struct S { int i; } s = { 3 }; s.i < 4 ) {
 		S s1;
-		sout | "s.i < 4 correct" | endl;
+		sout | "s.i < 4 correct";
 		break;
 	} // while
Index: tests/io1.cfa
===================================================================
--- tests/io1.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/io1.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar  2 16:56:02 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:57:17 2018
-// Update Count     : 105
+// Last Modified On : Tue Dec  4 21:40:28 2018
+// Update Count     : 106
 //
 
@@ -18,11 +18,11 @@
 int main() {
 	int x = 3, y = 5, z = 7;
-	sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;
-	sout | 1 | 2 | 3 | endl;
-	sout | '1' | '2' | '3' | endl;
-	sout | 1 | "" | 2 | "" | 3 | endl;
-	sout | endl;
+	sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2);
+	sout | 1 | 2 | 3;
+	sout | '1' | '2' | '3';
+	sout | 1 | "" | 2 | "" | 3;
+	sout;
 
-	sout | "opening delimiters" | endl;
+	sout | "opening delimiters";
 	sout
 		 | "x (" | 1
@@ -36,7 +36,7 @@
 		 | "x ¿" | 9
 		 | "x «" | 10
-		 | endl | endl;
+		 | nl;
 
-	sout | "closing delimiters" | endl;
+	sout | "closing delimiters";
 	sout
 		 | 1 | ", x"
@@ -51,7 +51,7 @@
 		 | 10 | "] x"
 		 | 11 | "} x"
-		 | endl | endl;
+		 | nl;
 
-	sout | "opening/closing delimiters" | endl;
+	sout | "opening/closing delimiters";
 	sout
 		 | "x`" | 1 | "`x'" | 2
@@ -61,9 +61,9 @@
 		 | "\vx\n" | 9 | "\nx\r" | 10
 		 | "\rx"
-		 | endl | endl;
+		 | nl;
 
-	sout | "override opening/closing delimiters" | endl;
-	sout | "x ( " | 1 | " ) x" | 2 | " , x" | 3 | " :x: " | 4 | endl;
-	sout | endl;
+	sout | "override opening/closing delimiters";
+	sout | "x ( " | 1 | " ) x" | 2 | " , x" | 3 | " :x: " | 4;
+	sout;
 }
 
Index: tests/io2.cfa
===================================================================
--- tests/io2.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/io2.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,11 +10,11 @@
 // Created On       : Wed Mar  2 16:56:02 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:57:28 2018
-// Update Count     : 104
+// Last Modified On : Tue Dec 11 21:51:52 2018
+// Update Count     : 109
 //
 
 #include <fstream.hfa>
 
- #define xstr(s) str(s)
+#define xstr(s) str(s)
 #define str(s) #s
 
@@ -41,7 +41,7 @@
 	char s1[size], s2[size];
 
-	ifstream in = { xstr(IN_DIR) "io.data" };						// create / open file
+	ifstream in = { xstr(IN_DIR) "io.data" };			// create / open file
 
-	sout | "input bacis types" | endl;
+	sout | "input bacis types";
 	in	 | b											// boolean
 		 | c | sc | usc									// character
@@ -50,84 +50,83 @@
 		 | fc | dc | ldc								// floating-point complex
 		 | cstr( s1 ) | cstr( s2, size );				// C string, length unchecked and checked
-	sout | endl;
+	sout | nl;
 
-	sout | "output basic types" | endl;
-	sout | b | endl										// boolean
-		 | c | ' ' | sc | ' ' | usc | endl				// character
-		 | si | usi | i | ui | li | uli | lli | ulli | endl // integral
-		 | f | d | ld | endl							// floating point
-		 | fc | dc | ldc | endl;						// complex
-	sout | endl;
+	sout | "output basic types";
+	sout | b | nl										// boolean
+		 | c | ' ' | sc | ' ' | usc | nl				// character
+		 | si | usi | i | ui | li | uli | lli | ulli | nl // integral
+		 | f | d | ld | nl								// floating point
+		 | fc | dc | ldc;								// complex
+	sout | nl;
 
-	sout | "tuples" | endl;
+	sout | "tuples";
 	[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 4, [ 5, 6 ] ];
-	sout | t1 | t2 | endl;								// print tuple
-	sout | endl;
+	sout | t1 | t2;										// print tuple
+	sout | nl;
 
-	sout | "toggle separator" | endl;
-	sout | f | "" | d | "" | ld | endl					// floating point without separator
-		 | sepDisable | fc | dc | ldc | endl			// complex without separator
-		 | fc | sepOn | dc | ldc | endl					// local separator add
-		 | sepEnable | fc | dc | ldc | endl				// complex with separator
-		 | fc | sepOff | dc | ldc | endl				// local separator removal
-		 | s1 | sepOff | s2 | endl						// local separator removal
-		 | s1 | "" | s2 | endl;							// local separator removal
-	sout | endl;
+	sout | "toggle separator";
+	sout | f | "" | d | "" | ld | nl					// floating point without separator
+		 | sepDisable | fc | dc | ldc | nl				// complex without separator
+		 | fc | sepOn | dc | ldc | nl					// local separator add
+		 | sepEnable | fc | dc | ldc | nl				// complex with separator
+		 | fc | sepOff | dc | ldc | nl					// local separator removal
+		 | s1 | sepOff | s2 | nl						// local separator removal
+		 | s1 | "" | s2;								// local separator removal
+	sout | nl;
 
-	sout | "change separator" | endl;
-	sout | "from \"" | sep | "\"";
+	sout | "change separator";
+	sout | "from \"" | sep | "\"" | nonl;
 	sepSet( sout, ", $" );								// change separator, maximum of 15 characters
-	sout | " to \"" | sep | "\"" | endl;
-	sout | f | d | ld | endl
-		 | fc | dc | ldc | endl
-		 | s1 | s2 | endl
-		 | t1 | t2 | endl;								// print tuple
-	sout | endl;
-	sout | "from \"" | sep | "\" ";
+	sout | " to \"" | sep | "\"";
+	sout | f | d | ld | nl
+		 | fc | dc | ldc | nl
+		 | s1 | s2 | nl
+		 | t1 | t2;										// print tuple
+	sout | nl;
+	sout | "from \"" | sep | "\" " | nonl;
 	sepSet( sout, " " );								// restore separator
-	sout | "to \"" | sep | "\"" | endl;
-	sout | f | d | ld | endl
-		 | fc | dc | ldc | endl
-		 | s1 | s2 | endl
-		 | t1 | t2 | endl;								// print tuple
-	sout | endl;
+	sout | "to \"" | sep | "\"";
+	sout | f | d | ld | nl
+		 | fc | dc | ldc | nl
+		 | s1 | s2 | nl
+		 | t1 | t2;										// print tuple
+	sout | nl;
 
-	sout | "check sepOn/sepOff" | endl;
-	sout | sepOn | 1 | 2 | 3 | sepOn | endl;			// no separator at start/end of line
-	sout | 1 | sepOff | 2 | 3 | endl;					// locally turn off implicit separator
+	sout | "check sepOn/sepOff";
+	sout | sepOn | 1 | 2 | 3 | sepOn;					// no separator at start/end of line
+	sout | 1 | sepOff | 2 | 3;							// locally turn off implicit separator
 	sout | sepOn | sepOn | 1 | 2 | 3 | sepOn | sepOff | sepOn | '\n'; // no separator at start/end of line
 	sout | 1 | 2 | 3 | "\n\n" | sepOn;					// no separator at start of next line
-	sout | 1 | 2 | 3 | endl;
-	sout | endl;
+	sout | 1 | 2 | 3;
+	sout | nl;
 
-	sout | "check enable/disable" | endl;
-	sout | sepDisable | 1 | 2 | 3 | endl;				// globally turn off implicit separation
-	sout | 1 | sepOn | 2 | 3 | endl;					// locally turn on implicit separator
-	sout | sepEnable | 1 | 2 | 3 | endl | sepDisable;	// globally turn on/off implicit separation
-	sout | 1 | 2 | 3 | endl | sepEnable;				// globally turn on implicit separation
-	sout | 1 | 2 | 3 | sepOn | sepDisable | endl;		// ignore seperate at end of line
-	sout | 1 | 2 | 3 | sepOn | sepEnable | endl;		// separator at end of line
-	sout | 1 | 2 | 3 | endl;
-	sout | endl;
+	sout | "check enable/disable";
+	sout | sepDisable | 1 | 2 | 3;						// globally turn off implicit separation
+	sout | 1 | sepOn | 2 | 3;							// locally turn on implicit separator
+	sout | sepEnable | 1 | 2 | 3 | sepDisable;			// globally turn on/off implicit separation
+	sout | 1 | 2 | 3 | sepEnable;						// globally turn on implicit separation
+	sout | 1 | 2 | 3 | sepOn | sepDisable;				// ignore seperate at end of line
+	sout | 1 | 2 | 3 | sepOn | sepEnable;				// separator at end of line
+	sout | 1 | 2 | 3;
+	sout | nl;
 
-//	sout | fmt( d, "%8.3f" ) || endl;
-//	sout | endl;
+//	sout | fmt( d, "%8.3f" );
 
 	sepSetTuple( sout, " " );							// set tuple separator from ", " to " "
-	sout | t1 | t2 | " \"" | sep | "\"" | endl;
+	sout | t1 | t2 | " \"" | sep | "\"";
 	sepSetTuple( sout, ", " );							// reset tuple separator to ", "
-	sout | t1 | t2 | " \"" | sep | "\"" | endl;
-	sout | t1 | t2 | endl;								// print tuple
-	sout | endl;
+	sout | t1 | t2 | " \"" | sep | "\"";
+	sout | t1 | t2;										// print tuple
+	sout | nl;
 
 	[int, int, const char *, double] t3 = { 3, 4, "a", 7.2 };
-	sout | [ 3, 4, "a", 7.2 ] | endl;
-	sout | t3 | endl;
+	sout | [ 3, 4, "a", 7.2 ];
+	sout | t3;
 	sepSetTuple( sout, " " );
-	sout | t3 | endl;
-	sout | sepOn | t3 | sepDisable | t3 | sepEnable | t3 | endl;
+	sout | t3;
+	sout | sepOn | t3 | sepDisable | t3 | sepEnable | t3;
 	sepSet( sout, "^" );
 	sepSetTuple( sout, "-" );
-	sout | t3 | 3 | 4 | t3 | endl;
+	sout | t3 | 3 | 4 | t3;
 }
 
Index: tests/literals.cfa
===================================================================
--- tests/literals.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/literals.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  9 16:34:38 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:58:07 2018
-// Update Count     : 138
+// Last Modified On : Tue Dec  4 21:44:01 2018
+// Update Count     : 139
 //
 
@@ -18,10 +18,10 @@
 #include <fstream.hfa>
 
-void f( char v ) { sout | "char " | v | endl; }
-void f( signed char v ) { sout | "signed char " | v | endl; }
-void f( unsigned char v ) { sout | "unsigned char " | v | endl; }
-void f( signed short v ) { sout | "signed short int" | v | endl; }
-void f( unsigned short v ) { sout | "unsigned short int" | v | endl; }
-void f( size_t v ) { sout | "size_t" | v | endl; }
+void f( char v ) { sout | "char " | v; }
+void f( signed char v ) { sout | "signed char " | v; }
+void f( unsigned char v ) { sout | "unsigned char " | v; }
+void f( signed short v ) { sout | "signed short int" | v; }
+void f( unsigned short v ) { sout | "unsigned short int" | v; }
+void f( size_t v ) { sout | "size_t" | v; }
 #endif // __CFA__
 
Index: tests/loopctrl.cfa
===================================================================
--- tests/loopctrl.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/loopctrl.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed Aug  8 18:32:59 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Nov  7 16:54:11 2018
-// Update Count     : 62
+// Last Modified On : Wed Dec 12 08:14:44 2018
+// Update Count     : 76
 // 
 
@@ -32,47 +32,49 @@
 S ?-=?( S & t, one_t ) { t.i -= 1; t.j -= 1; return t; }
 ofstream & ?|?( ofstream & os, S v ) { return os | '(' | v.i | v.j | ')'; }
+void & ?|?( ofstream & os, S v ) { (ofstream)(os | v); if ( getANL( os ) ) nl( os ); }
 
 int main() {
-	while () { sout | "empty"; break; }			sout | endl;
-	do { sout | "empty"; break; } while ();		sout | endl;
-	for () { sout | "empty"; break; }			sout | endl | endl;
+	sout | nlOff;										// turn off auto newline
+	while () { sout | "empty"; break; }					sout | nl;
+	do { sout | "empty"; break; } while ();				sout | nl;
+	for () { sout | "empty"; break; }					sout | nl;
 
-	for ( 0 ) { sout | "A"; }					sout | "zero" | endl;
-	for ( 1 ) { sout | "A"; }					sout | endl;
-	for ( 10 ) { sout | "A"; }					sout | endl;
-	for ( 1 ~= 10 ~ 2 ) { sout | "B"; }			sout | endl;
-	for ( 10 -~= 1 ~ 2 ) { sout | "C"; }		sout | endl;
-	for ( 0.5 ~ 5.5 ) { sout | "D"; }			sout | endl;
-	for ( 5.5 -~ 0.5 ) { sout | "E"; }			sout | endl | endl;
+	for ( 0 ) { sout | "A"; }							sout | "zero" | nl;
+	for ( 1 ) { sout | "A"; }							sout | nl;
+	for ( 10 ) { sout | "A"; }							sout | nl;
+	for ( 1 ~= 10 ~ 2 ) { sout | "B"; }					sout | nl;
+	for ( 10 -~= 1 ~ 2 ) { sout | "C"; }				sout | nl;
+	for ( 0.5 ~ 5.5 ) { sout | "D"; }					sout | nl;
+	for ( 5.5 -~ 0.5 ) { sout | "E"; }					sout | nl | nl;
 
-	for ( i; 10 ) { sout | i; }					sout | endl;
-	for ( i; 1 ~= 10 ~ 2 ) { sout | i; }		sout | endl;
-	for ( i; 10 -~= 1 ~ 2 ) { sout | i; }		sout | endl;
-	for ( i; 0.5 ~ 5.5 ) { sout | i; }			sout | endl;
-	for ( i; 5.5 -~ 0.5 ) { sout | i; }			sout | endl;
-	for ( ui; 2u ~= 10u ~ 2u ) { sout | ui; }	sout | endl;
-	for ( ui; 10u -~= 2u ~ 2u ) { sout | ui; }	sout | endl | endl | endl;
+	for ( i; 10 ) { sout | i; }							sout | nl;
+	for ( i; 1 ~= 10 ~ 2 ) { sout | i; }				sout | nl;
+	for ( i; 10 -~= 1 ~ 2 ) { sout | i; }				sout | nl;
+	for ( i; 0.5 ~ 5.5 ) { sout | i; }					sout | nl;
+	for ( i; 5.5 -~ 0.5 ) { sout | i; }					sout | nl;
+	for ( ui; 2u ~= 10u ~ 2u ) { sout | ui; }			sout | nl;
+	for ( ui; 10u -~= 2u ~ 2u ) { sout | ui; }			sout | nl | nl | nl;
 
 	enum { N = 10 };
-	for ( N ) { sout | "N"; }					sout | endl;
-	for ( i; N ) { sout | i; }					sout | endl;
-	for ( i; N -~ 0 ) { sout | i; }				sout | endl | endl | endl;
+	for ( N ) { sout | "N"; }							sout | nl;
+	for ( i; N ) { sout | i; }							sout | nl;
+	for ( i; N -~ 0 ) { sout | i; }						sout | nl | nl | nl;
 
 	const int start = 3, comp = 10, inc = 2;
-	for ( i; start ~ comp ~ inc + 1 ) { sout | i; } sout | endl | endl;
+	for ( i; start ~ comp ~ inc + 1 ) { sout | i; }		sout | nl | nl;
 
-	sout | endl;
-	for ( S s = (S){0}; s < (S){10,10}; s += (S){1} ) { sout | s; } sout | endl;
-	for ( s; (S){10,10} ) { sout | s; } sout | endl;
-	sout | endl;
-	for ( s; (S){0} ~ (S){10,10} ) { sout | s; } sout | endl;
-	for ( s; (S){0} ~ (S){10,10} ~ (S){1} ) { sout | s; } sout | endl;
-	for ( s; (S){0} ~= (S){10,10} ) { sout | s; } sout | endl;
-	for ( s; (S){0} ~= (S){10,10} ~ (S){1} ) { sout | s; } sout | endl;
-	sout | endl;
-	for ( s; (S){10,10} -~ (S){0} ) { sout | s; } sout | endl;
-	for ( s; (S){10,10} -~ (S){0} ~ (S){1} ) { sout | s; } sout | endl;
-	for ( s; (S){10,10} -~= (S){0} ) { sout | s; } sout | endl;
-	for ( s; (S){10,10} -~= (S){0} ~ (S){1} ) { sout | s; } sout | endl;
+	sout | nl;
+	for ( S s = (S){0}; s < (S){10,10}; s += (S){1} ) { sout | s; } sout | nl;
+	for ( s; (S){10,10} ) { sout | s; } sout | nl;
+	sout | nl;
+	for ( s; (S){0} ~ (S){10,10} ) { sout | s; }		 sout | nl;
+	for ( s; (S){0} ~ (S){10,10} ~ (S){1} ) { sout | s; } sout | nl;
+	for ( s; (S){0} ~= (S){10,10} ) { sout | s; }		 sout | nl;
+	for ( s; (S){0} ~= (S){10,10} ~ (S){1} ) { sout | s; } sout | nl;
+	sout | nl;
+	for ( s; (S){10,10} -~ (S){0} ) { sout | s; }		 sout | nl;
+	for ( s; (S){10,10} -~ (S){0} ~ (S){1} ) { sout | s; } sout | nl;
+	for ( s; (S){10,10} -~= (S){0} ) { sout | s; }		 sout | nl;
+	for ( s; (S){10,10} -~= (S){0} ~ (S){1} ) { sout | s; } sout | nl;
 }
 
Index: tests/math1.cfa
===================================================================
--- tests/math1.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/math1.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Fri Apr 22 14:59:21 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:58:37 2018
-// Update Count     : 86
+// Last Modified On : Tue Dec 11 10:24:31 2018
+// Update Count     : 88
 //
 
@@ -22,30 +22,30 @@
 	long double l;
 
-	sout | "fmod:" | 5.0F % -2.0F | fmod( 5.0F, -2.0F ) | 5.0D % -2.0D | fmod( 5.0D, -2.0D ) | 5.0L % -2.0L | fmod( 5.0L, -2.0L ) | endl;
-	sout | "remainder:" | remainder( 2.0F, 3.0F ) | remainder( 2.0D, 3.0D ) | remainder( 2.0L, 3.0L ) | endl;
+	sout | "fmod:" | 5.0F % -2.0F | fmod( 5.0F, -2.0F ) | 5.0D % -2.0D | fmod( 5.0D, -2.0D ) | 5.0L % -2.0L | fmod( 5.0L, -2.0L );
+	sout | "remainder:" | remainder( 2.0F, 3.0F ) | remainder( 2.0D, 3.0D ) | remainder( 2.0L, 3.0L );
 	int quot;
 	f = remquo( 3.6F, 0.5F, &quot );
-	sout | "remquo:" | quot | f;
+	sout | "remquo:" | quot | f | nonl;
 	d = remquo( 3.6D, 0.5F, &quot );
-	sout | quot | d;
+	sout | quot | d | nonl;
 	l = remquo( 3.6L, 0.5L, &quot );
-	sout | quot | l | endl;
-	sout | "div:" | div( 3.6F, 0.5F ) | div( 3.6D, 0.5D ) | div( 3.6L, 0.5L ) | endl;
-	sout | "fma:" | fma( 3.0F, -1.0F, 1.0F ) | fma( 3.0D, -1.0D, 1.0D ) | fma( 3.0L, -1.0L, , 1.0L ) | endl;
-	sout | "fdim:" | fdim( 1.0F, -1.0F ) | fdim( 1.0D, -1.0D ) | fdim( 1.0L, -1.0L ) | endl;
-	sout | "nan:" | (float)nan( "" ) | (double)nan( "" ) | (long double)nan( "" ) | endl;
+	sout | quot | l;
+	sout | "div:" | div( 3.6F, 0.5F ) | div( 3.6D, 0.5D ) | div( 3.6L, 0.5L );
+	sout | "fma:" | fma( 3.0F, -1.0F, 1.0F ) | fma( 3.0D, -1.0D, 1.0D ) | fma( 3.0L, -1.0L, , 1.0L );
+	sout | "fdim:" | fdim( 1.0F, -1.0F ) | fdim( 1.0D, -1.0D ) | fdim( 1.0L, -1.0L );
+	sout | "nan:" | (float)nan( "" ) | (double)nan( "" ) | (long double)nan( "" );
 
 	//---------------------- Exponential ----------------------
 
-	sout | "exp:" | exp( 1.0F ) | exp( 1.0D ) | exp( 1.0L ) | exp( 1.0F+1.0FI ) | exp( 1.0D+1.0DI ) | exp( 1.0DL+1.0LI ) | endl;
-	sout | "exp2:" | exp2( 1.0F ) | exp2( 1.0D ) | exp2( 1.0L ) | endl;
-	sout | "expm1:" | expm1( 1.0F ) | expm1( 1.0D ) | expm1( 1.0L ) | endl;
-	sout | "pow:" | pow( 1.0F, 1.0F ) | pow( 1.0D, 1.0D ) | pow( 1.0L, 1.0L ) | pow( 1.0F+1.0FI, 1.0F+1.0FI ) | pow( 1.0D+1.0DI, 1.0D+1.0DI ) | pow( 1.5DL+1.5LI, 1.5DL+1.5LI ) | endl;
+	sout | "exp:" | exp( 1.0F ) | exp( 1.0D ) | exp( 1.0L ) | exp( 1.0F+1.0FI ) | exp( 1.0D+1.0DI ) | exp( 1.0DL+1.0LI );
+	sout | "exp2:" | exp2( 1.0F ) | exp2( 1.0D ) | exp2( 1.0L );
+	sout | "expm1:" | expm1( 1.0F ) | expm1( 1.0D ) | expm1( 1.0L );
+	sout | "pow:" | pow( 1.0F, 1.0F ) | pow( 1.0D, 1.0D ) | pow( 1.0L, 1.0L ) | pow( 1.0F+1.0FI, 1.0F+1.0FI ) | pow( 1.0D+1.0DI, 1.0D+1.0DI ) | pow( 1.5DL+1.5LI, 1.5DL+1.5LI );
 
 	int b = 4;
 	unsigned int e = 2;
     b \= e;
-    sout | "\\" | b | b \ e | endl;
-    sout | "\\" | 'a' \ 3u | 2 \ 8u | 4 \ 3u | -4 \ 3u | 4 \ -3 | -4 \ -3 | 4.0 \ 2.1 | (1.0f+2.0fi) \ (3.0f+2.0fi) | endl;
+    sout | "\\" | b | b \ e;
+    sout | "\\" | 'a' \ 3u | 2 \ 8u | 4 \ 3u | -4 \ 3u | 4 \ -3 | -4 \ -3 | 4.0 \ 2.1 | (1.0f+2.0fi) \ (3.0f+2.0fi);
 } // main
 
Index: tests/math2.cfa
===================================================================
--- tests/math2.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/math2.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Fri Apr 22 14:59:21 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:58:55 2018
-// Update Count     : 83
+// Last Modified On : Tue Dec  4 23:11:12 2018
+// Update Count     : 85
 //
 
@@ -24,25 +24,25 @@
 	//---------------------- Logarithm ----------------------
 
-	sout | "log:" | log( 1.0F ) | log( 1.0D ) | log( 1.0L ) | log( 1.0F+1.0FI ) | log( 1.0D+1.0DI ) | log( 1.0DL+1.0LI ) | endl;
-	sout | "log2:" | log2( 8.0F ) | log2( 8.0D ) | log2( 8.0L ) | endl;
-	sout | "log10:" | log10( 100.0F ) | log10( 100.0D ) | log10( 100.0L ) | endl;
-	sout | "log1p:" | log1p( 1.0F ) | log1p( 1.0D ) | log1p( 1.0L ) | endl;
-	sout | "ilogb:" | ilogb( 1.0F ) | ilogb( 1.0D ) | ilogb( 1.0L ) | endl;
-	sout | "logb:" | logb( 8.0F ) | logb( 8.0D ) | logb( 8.0L ) | endl;
+	sout | "log:" | log( 1.0F ) | log( 1.0D ) | log( 1.0L ) | log( 1.0F+1.0FI ) | log( 1.0D+1.0DI ) | log( 1.0DL+1.0LI );
+	sout | "log2:" | log2( 8.0F ) | log2( 8.0D ) | log2( 8.0L );
+	sout | "log10:" | log10( 100.0F ) | log10( 100.0D ) | log10( 100.0L );
+	sout | "log1p:" | log1p( 1.0F ) | log1p( 1.0D ) | log1p( 1.0L );
+	sout | "ilogb:" | ilogb( 1.0F ) | ilogb( 1.0D ) | ilogb( 1.0L );
+	sout | "logb:" | logb( 8.0F ) | logb( 8.0D ) | logb( 8.0L );
 
-	sout | "sqrt:" | sqrt( 1.0F ) | sqrt( 1.0D ) | sqrt( 1.0L ) | sqrt( 1.0F+1.0FI ) | sqrt( 1.0D+1.0DI ) | sqrt( 1.0DL+1.0LI ) | endl;
-	sout | "cbrt:" | cbrt( 27.0F ) | cbrt( 27.0D ) | cbrt( 27.0L ) | endl;
-	sout | "hypot:" | hypot( 1.0F, -1.0F ) | hypot( 1.0D, -1.0D ) | hypot( 1.0L, -1.0L ) | endl;
+	sout | "sqrt:" | sqrt( 1.0F ) | sqrt( 1.0D ) | sqrt( 1.0L ) | sqrt( 1.0F+1.0FI ) | sqrt( 1.0D+1.0DI ) | sqrt( 1.0DL+1.0LI );
+	sout | "cbrt:" | cbrt( 27.0F ) | cbrt( 27.0D ) | cbrt( 27.0L );
+	sout | "hypot:" | hypot( 1.0F, -1.0F ) | hypot( 1.0D, -1.0D ) | hypot( 1.0L, -1.0L );
 
 	//---------------------- Trigonometric ----------------------
 
-	sout | "sin:" | sin( 1.0F ) | sin( 1.0D ) | sin( 1.0L ) | sin( 1.0F+1.0FI ) | sin( 1.0D+1.0DI ) | sin( 1.0DL+1.0LI ) | endl;
-	sout | "cos:" | cos( 1.0F ) | cos( 1.0D ) | cos( 1.0L ) | cos( 1.0F+1.0FI ) | cos( 1.0D+1.0DI ) | cos( 1.0DL+1.0LI ) | endl;
-	sout | "tan:" | tan( 1.0F ) | tan( 1.0D ) | tan( 1.0L ) | tan( 1.0F+1.0FI ) | tan( 1.0D+1.0DI ) | tan( 1.0DL+1.0LI ) | endl;
-	sout | "asin:" | asin( 1.0F ) | asin( 1.0D ) | asin( 1.0L ) | asin( 1.0F+1.0FI ) | asin( 1.0D+1.0DI ) | asin( 1.0DL+1.0LI ) | endl;
-	sout | "acos:" | acos( 1.0F ) | acos( 1.0D ) | acos( 1.0L ) | acos( 1.0F+1.0FI ) | acos( 1.0D+1.0DI ) | acos( 1.0DL+1.0LI ) | endl;
-	sout | "atan:" | atan( 1.0F ) | atan( 1.0D ) | atan( 1.0L ) | atan( 1.0F+1.0FI ) | atan( 1.0D+1.0DI ) | atan( 1.0DL+1.0LI ) | endl;
-	sout | "atan2:" | atan2( 1.0F, 1.0F ) | atan2( 1.0D, 1.0D ) | atan2( 1.0L, 1.0L );
-	sout | "atan:" | atan( 1.0F, 1.0F ) | atan( 1.0D, 1.0D ) | atan( 1.0L, 1.0L ) | endl;
+	sout | "sin:" | sin( 1.0F ) | sin( 1.0D ) | sin( 1.0L ) | sin( 1.0F+1.0FI ) | sin( 1.0D+1.0DI ) | sin( 1.0DL+1.0LI );
+	sout | "cos:" | cos( 1.0F ) | cos( 1.0D ) | cos( 1.0L ) | cos( 1.0F+1.0FI ) | cos( 1.0D+1.0DI ) | cos( 1.0DL+1.0LI );
+	sout | "tan:" | tan( 1.0F ) | tan( 1.0D ) | tan( 1.0L ) | tan( 1.0F+1.0FI ) | tan( 1.0D+1.0DI ) | tan( 1.0DL+1.0LI );
+	sout | "asin:" | asin( 1.0F ) | asin( 1.0D ) | asin( 1.0L ) | asin( 1.0F+1.0FI ) | asin( 1.0D+1.0DI ) | asin( 1.0DL+1.0LI );
+	sout | "acos:" | acos( 1.0F ) | acos( 1.0D ) | acos( 1.0L ) | acos( 1.0F+1.0FI ) | acos( 1.0D+1.0DI ) | acos( 1.0DL+1.0LI );
+	sout | "atan:" | atan( 1.0F ) | atan( 1.0D ) | atan( 1.0L ) | atan( 1.0F+1.0FI ) | atan( 1.0D+1.0DI ) | atan( 1.0DL+1.0LI );
+	sout | "atan2:" | atan2( 1.0F, 1.0F ) | atan2( 1.0D, 1.0D ) | atan2( 1.0L, 1.0L ) | nonl;
+	sout | "atan:" | atan( 1.0F, 1.0F ) | atan( 1.0D, 1.0D ) | atan( 1.0L, 1.0L );
 } // main
 
Index: tests/math3.cfa
===================================================================
--- tests/math3.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/math3.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Fri Apr 22 14:59:21 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:59:05 2018
-// Update Count     : 83
+// Last Modified On : Tue Dec 11 10:15:49 2018
+// Update Count     : 85
 //
 
@@ -24,24 +24,24 @@
 	//---------------------- Hyperbolic ----------------------
 
-	sout | "sinh:" | sinh( 1.0F ) | sinh( 1.0D ) | sinh( 1.0L ) | sinh( 1.0F+1.0FI ) | sinh( 1.0D+1.0DI ) | sinh( 1.0DL+1.0LI ) | endl;
-	sout | "cosh:" | cosh( 1.0F ) | cosh( 1.0D ) | cosh( 1.0L ) | cosh( 1.0F+1.0FI ) | cosh( 1.0D+1.0DI ) | cosh( 1.0DL+1.0LI ) | endl;
-	sout | "tanh:" | tanh( 1.0F ) | tanh( 1.0D ) | tanh( 1.0L ) | tanh( 1.0F+1.0FI ) | tanh( 1.0D+1.0DI ) | tanh( 1.0DL+1.0LI ) | endl;
-	sout | "acosh:" | acosh( 1.0F ) | acosh( 1.0D ) | acosh( 1.0L ) | acosh( 1.0F+1.0FI ) | acosh( 1.0D+1.0DI ) | acosh( 1.0DL+1.0LI ) | endl;
-	sout | "asinh:" | asinh( 1.0F ) | asinh( 1.0D ) | asinh( 1.0L ) | asinh( 1.0F+1.0FI ) | asinh( 1.0D+1.0DI ) | asinh( 1.0DL+1.0LI ) | endl;
-	sout | "atanh:" | atanh( 1.0F ) | atanh( 1.0D ) | atanh( 1.0L ) | atanh( 1.0F+1.0FI ) | atanh( 1.0D+1.0DI ) | atanh( 1.0DL+1.0LI ) | endl;
+	sout | "sinh:" | sinh( 1.0F ) | sinh( 1.0D ) | sinh( 1.0L ) | sinh( 1.0F+1.0FI ) | sinh( 1.0D+1.0DI ) | sinh( 1.0DL+1.0LI );
+	sout | "cosh:" | cosh( 1.0F ) | cosh( 1.0D ) | cosh( 1.0L ) | cosh( 1.0F+1.0FI ) | cosh( 1.0D+1.0DI ) | cosh( 1.0DL+1.0LI );
+	sout | "tanh:" | tanh( 1.0F ) | tanh( 1.0D ) | tanh( 1.0L ) | tanh( 1.0F+1.0FI ) | tanh( 1.0D+1.0DI ) | tanh( 1.0DL+1.0LI );
+	sout | "acosh:" | acosh( 1.0F ) | acosh( 1.0D ) | acosh( 1.0L ) | acosh( 1.0F+1.0FI ) | acosh( 1.0D+1.0DI ) | acosh( 1.0DL+1.0LI );
+	sout | "asinh:" | asinh( 1.0F ) | asinh( 1.0D ) | asinh( 1.0L ) | asinh( 1.0F+1.0FI ) | asinh( 1.0D+1.0DI ) | asinh( 1.0DL+1.0LI );
+	sout | "atanh:" | atanh( 1.0F ) | atanh( 1.0D ) | atanh( 1.0L ) | atanh( 1.0F+1.0FI ) | atanh( 1.0D+1.0DI ) | atanh( 1.0DL+1.0LI );
 
 	//---------------------- Error / Gamma ----------------------
 
-	sout | "erf:" | erf( 1.0F ) | erf( 1.0D ) | erf( 1.0L ) | endl;
-	sout | "erfc:" | erfc( 1.0F ) | erfc( 1.0D ) | erfc( 1.0L ) | endl;
-	sout | "lgamma:" | lgamma( 4.0F ) | lgamma( 4.0D ) | lgamma( 4.0L ) | endl;
+	sout | "erf:" | erf( 1.0F ) | erf( 1.0D ) | erf( 1.0L );
+	sout | "erfc:" | erfc( 1.0F ) | erfc( 1.0D ) | erfc( 1.0L );
+	sout | "lgamma:" | lgamma( 4.0F ) | lgamma( 4.0D ) | lgamma( 4.0L );
 	int sign;
 	f = lgamma( 4.0F, &sign );
-	sout | "lgamma:" | f | sign;
+	sout | "lgamma:" | f | sign | nonl;
 	d = lgamma( 4.0D, &sign );
-	sout | d | sign;
+	sout | d | sign | nonl;
 	l = lgamma( 4.0L, &sign );
-	sout | l | sign | endl;
-	sout | "tgamma:" | tgamma( 4.0F ) | tgamma( 4.0D ) | tgamma( 4.0L ) | endl;
+	sout | l | sign;
+	sout | "tgamma:" | tgamma( 4.0F ) | tgamma( 4.0D ) | tgamma( 4.0L );
 } // main
 
Index: tests/math4.cfa
===================================================================
--- tests/math4.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/math4.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Thu May 24 20:56:54 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:59:14 2018
-// Update Count     : 3
+// Last Modified On : Tue Dec  4 18:15:01 2018
+// Update Count     : 4
 //
 
@@ -24,45 +24,45 @@
 	//---------------------- Nearest Integer ----------------------
 
-	sout | "floor:" | floor( 1.2F ) | floor( 1.2D ) | floor( 1.2L ) | endl;
-	sout | "ceil:" | ceil( 1.6F ) | ceil( 1.6D ) | ceil( 1.6L ) | endl;
-	sout | "trunc:" | trunc( 3.5F ) | trunc( 3.5D ) | trunc( 3.5L ) | endl;
-	sout | "rint:" | (float)rint( 1.5F ) | (double)rint( 1.5D ) | (long double)rint( 1.5L ) | endl;
-	sout | "rint:" | (long int)rint( 1.5F ) | (long int)rint( 1.5D ) | (long int)rint( 1.5L ) | endl;
-	sout | "rint:" | (long long int)rint( 1.5F ) | (long long int)rint( 1.5D ) | (long long int)rint( 1.5L ) | endl;
-	sout | "lrint:" | lrint( 1.5F ) | lrint( 1.5D ) | lrint( 1.5L ) | endl;
-	sout | "llrint:" | llrint( 1.5F ) | llrint( 1.5D ) | llrint( 1.5L ) | endl;
-	sout | "nearbyint:" | nearbyint( 3.5F ) | nearbyint( 3.5D ) | nearbyint( 3.5L ) | endl;
-	sout | "round:" | (float)round( 1.5F ) | (double)round( 1.5D ) | (long double)round( 1.5L ) | endl;
-	sout | "round:" | (long int)round( 1.5F ) | (long int)round( 1.5D ) | (long int)round( 1.5L ) | endl;
-	sout | "round:" | (long long int)round( 1.5F ) | (long long int)round( 1.5D ) | (long long int)round( 1.5L ) | endl;
-	sout | "lround:" | lround( 1.5F ) | lround( 1.5D ) | lround( 1.5L ) | endl;
-	sout | "llround:" | llround( 1.5F ) | llround( 1.5D ) | llround( 1.5L ) | endl;
+	sout | "floor:" | floor( 1.2F ) | floor( 1.2D ) | floor( 1.2L );
+	sout | "ceil:" | ceil( 1.6F ) | ceil( 1.6D ) | ceil( 1.6L );
+	sout | "trunc:" | trunc( 3.5F ) | trunc( 3.5D ) | trunc( 3.5L );
+	sout | "rint:" | (float)rint( 1.5F ) | (double)rint( 1.5D ) | (long double)rint( 1.5L );
+	sout | "rint:" | (long int)rint( 1.5F ) | (long int)rint( 1.5D ) | (long int)rint( 1.5L );
+	sout | "rint:" | (long long int)rint( 1.5F ) | (long long int)rint( 1.5D ) | (long long int)rint( 1.5L );
+	sout | "lrint:" | lrint( 1.5F ) | lrint( 1.5D ) | lrint( 1.5L );
+	sout | "llrint:" | llrint( 1.5F ) | llrint( 1.5D ) | llrint( 1.5L );
+	sout | "nearbyint:" | nearbyint( 3.5F ) | nearbyint( 3.5D ) | nearbyint( 3.5L );
+	sout | "round:" | (float)round( 1.5F ) | (double)round( 1.5D ) | (long double)round( 1.5L );
+	sout | "round:" | (long int)round( 1.5F ) | (long int)round( 1.5D ) | (long int)round( 1.5L );
+	sout | "round:" | (long long int)round( 1.5F ) | (long long int)round( 1.5D ) | (long long int)round( 1.5L );
+	sout | "lround:" | lround( 1.5F ) | lround( 1.5D ) | lround( 1.5L );
+	sout | "llround:" | llround( 1.5F ) | llround( 1.5D ) | llround( 1.5L );
 
 	//---------------------- Manipulation ----------------------
 
-	sout | "copysign:" | copysign( 1.0F, -1.0F ) | copysign( 1.0D, -1.0D ) | copysign( 1.0L, -1.0L ) | endl;
+	sout | "copysign:" | copysign( 1.0F, -1.0F ) | copysign( 1.0D, -1.0D ) | copysign( 1.0L, -1.0L );
 	int exp;
 	f = frexp( 4.0F, &exp );
-	sout | "frexp:" | f | exp;
+	sout | "frexp:" | f | exp | nonl;
 	d = frexp( 4.0D, &exp );
-	sout | d | exp;
+	sout | d | exp | nonl;
 	l = frexp( 4.0L, &exp );
-	sout | l | exp | endl;
-	sout | "ldexp:" | ldexp( 2.0F, 2 ) | ldexp( 2.0D, 2 ) | ldexp( 2.0L, 2 ) | endl;
+	sout | l | exp;
+	sout | "ldexp:" | ldexp( 2.0F, 2 ) | ldexp( 2.0D, 2 ) | ldexp( 2.0L, 2 );
 	float fi;
 	double di;
 	long double ldi;
 	f = modf( 2.3F, &fi );
-	sout | "modf:" | fi | f;
+	sout | "modf:" | fi | f | nonl;
 	d = modf( 2.3D, &di );
-	sout | di | d;
+	sout | di | d | nonl;
 	l = modf( 2.3L, &ldi );
-	sout | ldi | l | endl;
-	sout | "modf:" | modf( 2.3F ) | modf( 2.3D ) | modf( 2.3L ) | endl;
-	sout | "nextafter:" | nextafter( 2.0F, 3.0F ) | nextafter( 2.0D, 3.0D ) | nextafter( 2.0L, 3.0L ) | endl;
-	sout | "nexttoward:" | nexttoward( 2.0F, 3.0F ) | nexttoward( 2.0D, 3.0D ) | nexttoward( 2.0L, 3.0L ) | endl;
+	sout | ldi | l;
+	sout | "modf:" | modf( 2.3F ) | modf( 2.3D ) | modf( 2.3L );
+	sout | "nextafter:" | nextafter( 2.0F, 3.0F ) | nextafter( 2.0D, 3.0D ) | nextafter( 2.0L, 3.0L );
+	sout | "nexttoward:" | nexttoward( 2.0F, 3.0F ) | nexttoward( 2.0D, 3.0D ) | nexttoward( 2.0L, 3.0L );
 
-	sout | "scalbn:" | scalbn( 2.0F, 3 ) | scalbn( 2.0D, 3 ) | scalbn( 2.0L, 3 ) | endl;
-	sout | "scalbln:" | scalbln( 2.0F, 3L ) | scalbln( 2.0D, 3L ) | scalbln( 2.0L, 3L ) | endl;
+	sout | "scalbn:" | scalbn( 2.0F, 3 ) | scalbn( 2.0D, 3 ) | scalbn( 2.0L, 3 );
+	sout | "scalbln:" | scalbln( 2.0F, 3L ) | scalbln( 2.0D, 3L ) | scalbln( 2.0L, 3L );
 } // main
 
Index: tests/minmax.cfa
===================================================================
--- tests/minmax.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/minmax.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:59:26 2018
-// Update Count     : 51
+// Last Modified On : Tue Dec  4 21:45:31 2018
+// Update Count     : 52
 //
 
@@ -22,27 +22,27 @@
 	int ?>?( char op1, char op2 ) { return (int)op1 > (int)op2; }
 
-	sout | "char\t\t\t"					| 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ) | endl;
-	sout | "signed int\t\t"				| 4 | 3 | "\tmin" | min( 4, 3 ) | endl;
-	sout | "unsigned int\t\t"			| 4u | 3u | "\tmin" | min( 4u, 3u ) | endl;
-	sout | "signed long int\t\t" 		| 4l | 3l | "\tmin" | min( 4l, 3l ) | endl;
-	sout | "unsigned long int\t" 		| 4ul | 3ul | "\tmin" | min( 4ul, 3ul ) | endl;
-	sout | "signed long long int\t"		| 4ll | 3ll | "\tmin" | min( 4ll, 3ll ) | endl;
-	sout | "unsigned long long int\t"	| 4ull | 3ull | "\tmin" | min( 4ull, 3ull ) | endl;
-	sout | "float\t\t\t" 				| 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ) | endl;
-	sout | "double\t\t\t"				| 4.0 | 3.1 | "\tmin" | min( 4.0, 3.1 ) | endl;
-	sout | "long double\t\t"			| 4.0l | 3.1l | "\tmin" | min( 4.0l, 3.1l ) | endl;
+	sout | "char\t\t\t"					| 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' );
+	sout | "signed int\t\t"				| 4 | 3 | "\tmin" | min( 4, 3 );
+	sout | "unsigned int\t\t"			| 4u | 3u | "\tmin" | min( 4u, 3u );
+	sout | "signed long int\t\t" 		| 4l | 3l | "\tmin" | min( 4l, 3l );
+	sout | "unsigned long int\t" 		| 4ul | 3ul | "\tmin" | min( 4ul, 3ul );
+	sout | "signed long long int\t"		| 4ll | 3ll | "\tmin" | min( 4ll, 3ll );
+	sout | "unsigned long long int\t"	| 4ull | 3ull | "\tmin" | min( 4ull, 3ull );
+	sout | "float\t\t\t" 				| 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f );
+	sout | "double\t\t\t"				| 4.0 | 3.1 | "\tmin" | min( 4.0, 3.1 );
+	sout | "long double\t\t"			| 4.0l | 3.1l | "\tmin" | min( 4.0l, 3.1l );
 
-	sout | endl;
+	sout | nl;
 
-	sout | "char\t\t\t"					| 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ) | endl;
-	sout | "signed int\t\t"				| 4 | 3 | "\tmax" | max( 4, 3 ) | endl;
-	sout | "unsigned int\t\t"			| 4u | 3u | "\tmax" | max( 4u, 3u ) | endl;
-	sout | "signed long int\t\t" 		| 4l | 3l | "\tmax" | max( 4l, 3l ) | endl;
-	sout | "unsigned long int\t" 		| 4ul | 3ul | "\tmax" | max( 4ul, 3ul ) | endl;
-	sout | "signed long long int\t"		| 4ll | 3ll | "\tmax" | max( 4ll, 3ll ) | endl;
-	sout | "unsigned long long int\t"	| 4ull | 3ull | "\tmax" | max( 4ull, 3ull ) | endl;
-	sout | "float\t\t\t" 				| 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f ) | endl;
-	sout | "double\t\t\t"				| 4.0 | 3.1 | "\tmax" | max( 4.0, 3.1 ) | endl;
-	sout | "long double\t\t"			| 4.0l | 3.1l | "\tmax" | max( 4.0l, 3.1l ) | endl;
+	sout | "char\t\t\t"					| 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' );
+	sout | "signed int\t\t"				| 4 | 3 | "\tmax" | max( 4, 3 );
+	sout | "unsigned int\t\t"			| 4u | 3u | "\tmax" | max( 4u, 3u );
+	sout | "signed long int\t\t" 		| 4l | 3l | "\tmax" | max( 4l, 3l );
+	sout | "unsigned long int\t" 		| 4ul | 3ul | "\tmax" | max( 4ul, 3ul );
+	sout | "signed long long int\t"		| 4ll | 3ll | "\tmax" | max( 4ll, 3ll );
+	sout | "unsigned long long int\t"	| 4ull | 3ull | "\tmax" | max( 4ull, 3ull );
+	sout | "float\t\t\t" 				| 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f );
+	sout | "double\t\t\t"				| 4.0 | 3.1 | "\tmax" | max( 4.0, 3.1 );
+	sout | "long double\t\t"			| 4.0l | 3.1l | "\tmax" | max( 4.0l, 3.1l );
 } // main
 
Index: tests/quotedKeyword.cfa
===================================================================
--- tests/quotedKeyword.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/quotedKeyword.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 17:46:20 2018
-// Update Count     : 22
+// Last Modified On : Tue Dec  4 21:45:53 2018
+// Update Count     : 23
 //
 
@@ -41,5 +41,5 @@
 	st.`struct` = 3;
 	`throw` = 4;
-	sout | `catch` + st.`otype` + st.`struct` + `throw` | endl;
+	sout | `catch` + st.`otype` + st.`struct` + `throw`;
 }
 
Index: tests/raii/dtor-early-exit.c
===================================================================
--- tests/raii/dtor-early-exit.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/raii/dtor-early-exit.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed Aug 17 08:26:25 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Aug 11 07:58:39 2018
-// Update Count     : 8
+// Last Modified On : Tue Dec 11 22:05:24 2018
+// Update Count     : 9
 //
 
@@ -25,14 +25,14 @@
 // don't want these called
 void ?{}(A & a) { assert( false ); }
-void ?{}(A & a, const char * name) { a.name = name; sout | "construct " | name | endl; a.x = (int*)malloc(); }
+void ?{}(A & a, const char * name) { a.name = name; sout | "construct " | name; a.x = (int*)malloc(); }
 void ?{}(A & a, const char * name, int * ptr) { assert( false ); }
 
 A ?=?(A & a, A b) {  sout | "assign " | a.name | " " | b.name; return a; }
-void ?{}(A & a, A b) { sout | "copy construct " | b.name | endl; a.x = (int*)malloc(); }
-void ^?{}(A & a) { sout | "destruct " | a.name | endl; free(a.x); }
+void ?{}(A & a, A b) { sout | "copy construct " | b.name; a.x = (int*)malloc(); }
+void ^?{}(A & a) { sout | "destruct " | a.name; free(a.x); }
 
 // test returns
 void f(int i) {
-	sout | "f i=" | i | endl;
+	sout | "f i=" | i;
 	A x = { "x" };  // construct x
 	{
@@ -55,14 +55,14 @@
 void g() {
 	for (int i = 0; i < 10; i++) {
-		sout | "g for i=" | i | endl;
+		sout | "g for i=" | i;
 		A x = { "x" };
 		// construct x
 		// destruct x
 	}
-	sout | endl;
+	sout | nl;
 	{
 		int i = 0;
 		while (i < 10) {
-			sout | "g while i=" | i | endl;
+			sout | "g while i=" | i;
 			A x = { "x" };
 			// construct x
@@ -71,5 +71,5 @@
 		}
 	}
-	sout | endl;
+	sout;
 	for (int i = 0; i < 10; i++) {
 		switch(10) {
@@ -78,10 +78,10 @@
 			case 10: {
 				A y = { "y" };
-				sout | "g switch i=" | i | endl;
+				sout | "g switch i=" | i;
 				// construct y
 				break; // destruct y
 			}
 			default: {
-				sout | "g switch i=" | i | endl;
+				sout | "g switch i=" | i;
 				A x = { "x" };
 				// construct x
@@ -90,33 +90,33 @@
 		}
 	}
-	sout | endl;
+	sout | nl;
 	for (int k = 0; k < 2; k++) {
-		sout | "g for k=" | k | endl;
+		sout | "g for k=" | k;
 		L1: for (int i = 0; i < 10; i++) {
-			sout | "g for i=" | i | endl;
+			sout | "g for i=" | i;
 
 			A x = { "x" };
 			if (i == 2) {
-				sout | "continue L1" | endl;
+				sout | "continue L1";
 				continue;  // destruct x
 			} else if (i == 3) {
-				sout | "break L1" | endl;
+				sout | "break L1";
 				break;  // destruct x
 			}
 
 			L2: for (int j = 0; j < 10; j++) {
-				sout | "g for j=" | j | endl;
+				sout | "g for j=" | j;
 				A y = { "y" };
 				if (j == 0) {
-					sout | "continue L2" | endl;
+					sout | "continue L2";
 					continue; // destruct y - missing because object that needs to be destructed is not a part of this block, it's a part of the for's block
 				} else if (j == 1) {
-					sout | "break L2" | endl;
+					sout | "break L2";
 					break;  // destruct y
 				} else if (i == 1) {
-					sout | "continue L1" | endl;
+					sout | "continue L1";
 					continue L1; // destruct x,y - note: continue takes you to destructors for block, so only generate destructor for y
 				} else if (k == 1) {
-					sout | "break L1" | endl;
+					sout | "break L1";
 					break L1;  // destruct x,y
 				}
@@ -125,10 +125,10 @@
 	}
 
-	sout | endl;
+	sout | nl;
 	L3: if( 3 ) {
 		A w = { "w" };
 		if( 4 ) {
 			A v = { "v" };
-			sout | "break L3" | endl;
+			sout | "break L3";
 			break L3;
 		}
@@ -144,5 +144,5 @@
 	// * if S_L-S_G is non-empty, error
 	// * emit destructors for all variables in S_G-S_L
-	sout | "h" | endl;
+	sout | "h";
 	{
 		L0: ;
@@ -152,11 +152,11 @@
 			A y = { "y" };
 			// S_L1 = { y }
-		L1: sout | "L1" | endl;
+		L1: sout | "L1";
 			A x = { "x" };
 			// S_L2 = { y, x }
-		L2: sout | "L2" | endl;
+		L2: sout | "L2";
 			if (i == 0) {
 				++i;
-				sout | "goto L1" | endl;
+				sout | "goto L1";
 				// S_G = { y, x }
 				goto L1;  // jump back, destruct b/c before x definition
@@ -165,5 +165,5 @@
 			} else if (i == 1) {
 				++i;
-				sout | "goto L2" | endl;
+				sout | "goto L2";
 				// S_G = { y, x }
 				goto L2;  // jump back, do not destruct
@@ -172,5 +172,5 @@
 			} else if (i == 2) {
 				++i;
-				sout | "goto L3" | endl;
+				sout | "goto L3";
 				// S_G = { y, x }
 				goto L3;  // jump ahead, do not destruct
@@ -180,5 +180,5 @@
 				++i;
 				A z = { "z" };
-				sout | "goto L3-2" | endl;
+				sout | "goto L3-2";
 				// S_G = { z, y, x }
 				goto L3;
@@ -187,5 +187,5 @@
 			} else {
 				++i;
-				sout | "goto L4" | endl;
+				sout | "goto L4";
 				// S_G = { y, x }
 				goto L4;  // jump ahead, destruct b/c left block x was defined in
@@ -194,6 +194,6 @@
 			}
 			// S_L3 = { y, x }
-		L3: sout | "L3" | endl;
-			sout | "goto L2-2" | endl;
+		L3: sout | "L3";
+			sout | "goto L2-2";
 			// S_G = { y, x }
 			goto L2; // jump back, do not destruct
@@ -202,7 +202,7 @@
 	}
 	// S_L4 = {}
-	L4: sout | "L4" | endl;
+	L4: sout | "L4";
 	if (i == 4) {
-		sout | "goto L0" | endl;
+		sout | "goto L0";
 		// S_G = {}
 		goto L0;
@@ -240,7 +240,7 @@
 		f(i);
 	}
-	sout | endl;
+	sout | nl;
 	g();
-	sout | endl;
+	sout | nl;
 	h();
 
Index: tests/raii/globals.c
===================================================================
--- tests/raii/globals.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/raii/globals.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -70,14 +70,14 @@
 
 int main() {
-	sout | "static\t\tinline\t\tautogen\t\tvalue" | endl;
+	sout | "static\t\tinline\t\tautogen\t\tvalue";
 
-	sout | "no \t\tno \t\tno \t\t" | g.val.value    | endl;
-	sout | "no \t\tno \t\tyes\t\t" | ga.val.value   | endl;
-	sout | "no \t\tyes\t\tno \t\t" | gi.val.value   | endl;
-	sout | "no \t\tyes\t\tyes\t\t" | gia.val.value  | endl;
-	sout | "yes\t\tno \t\tno \t\t" | gs.val.value   | endl;
-	sout | "yes\t\tno \t\tyes\t\t" | gsa.val.value  | endl;
-	sout | "yes\t\tyes\t\tno \t\t" | gsi.val.value  | endl;
-	sout | "yes\t\tyes\t\tyes\t\t" | gsia.val.value | endl;
+	sout | "no \t\tno \t\tno \t\t" | g.val.value;
+	sout | "no \t\tno \t\tyes\t\t" | ga.val.value;
+	sout | "no \t\tyes\t\tno \t\t" | gi.val.value;
+	sout | "no \t\tyes\t\tyes\t\t" | gia.val.value;
+	sout | "yes\t\tno \t\tno \t\t" | gs.val.value;
+	sout | "yes\t\tno \t\tyes\t\t" | gsa.val.value;
+	sout | "yes\t\tyes\t\tno \t\t" | gsi.val.value;
+	sout | "yes\t\tyes\t\tyes\t\t" | gsia.val.value;
 
 }
Index: tests/random.cfa
===================================================================
--- tests/random.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/random.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,10 +10,10 @@
 // Created On       : Tue Jul  5 21:29:30 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 18:00:15 2018
-// Update Count     : 20
+// Last Modified On : Tue Dec  4 21:46:25 2018
+// Update Count     : 22
 //
 
 #include <fstream.hfa>
-#include <stdlib.hfa>										// random
+#include <stdlib.hfa>									// random
 #include <unistd.h>										// getpid
 
@@ -24,52 +24,52 @@
 	// test polymorphic calls to random and stream
 	char c = random();
-	sout | c | endl;
+	sout | c;
 	c = random( 'A' );
-	sout | c | endl;
+	sout | c;
 	c = random( 'A', 'Z' );
-	sout | c | endl;
+	sout | c;
 
 	int i = random();
-    sout | i | endl;
+    sout | i;
 	i = random( 10 );
-    sout | i | endl;
+    sout | i;
 	i = random( -10, 20 );
-    sout | i | endl;
+    sout | i;
 
 	unsigned int ui = random();
-    sout | ui | endl;
+    sout | ui;
 	ui = random( 10u );
-    sout | ui | endl;
+    sout | ui;
 	ui = random( 10u, 20u );
-    sout | ui | endl;
+    sout | ui;
 
 	long int li = random();
-    sout | li | endl;
+    sout | li;
 	li = random( 10l );
-    sout | li | endl;
+    sout | li;
 	li = random( -10l, 20l );
-    sout | li | endl;
+    sout | li;
 
 	unsigned long int uli = random();
-    sout | uli | endl;
+    sout | uli;
 	uli = random( 10ul );
-    sout | uli | endl;
+    sout | uli;
 	uli = random( 10ul, 20ul );
-    sout | uli | endl;
+    sout | uli;
 
     float f = random();
-    sout | f | endl;
+    sout | f;
 
     double d = random();
-    sout | d | endl;
+    sout | d;
 
     float _Complex fc = random();
-    sout | fc | endl;
+    sout | fc;
 
     double _Complex dc = random();
-    sout | dc | endl;
+    sout | dc;
 
     long double _Complex ldc = random();
-    sout | ldc | endl;
+    sout | ldc;
 } // main
 
Index: tests/rational.cfa
===================================================================
--- tests/rational.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/rational.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Mon Mar 28 08:43:12 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 18:00:27 2018
-// Update Count     : 68
+// Last Modified On : Tue Dec  4 21:46:42 2018
+// Update Count     : 69
 //
 
@@ -27,71 +27,71 @@
 
 int main() {
-	sout | "constructor" | endl;
+	sout | "constructor";
 	Rational(int) a = { 3 }, b = { 4 }, c;
-	sout | a | b | c | endl;
+	sout | a | b | c;
 
 	a = (Rational(int)){ 4, 8 };
 	b = (Rational(int)){ 5, 7 };
-	sout | a | b | endl;
+	sout | a | b;
 	a = (Rational(int)){ -2, -3 };
 	b = (Rational(int)){ 3, -2 };
-	sout | a | b | endl;
+	sout | a | b;
 	a = (Rational(int)){ -2, 3 };
 	b = (Rational(int)){ 3, 2 };
-	sout | a | b | endl;
+	sout | a | b;
 
-	sout | "logical" | endl;
+	sout | "logical";
 	a = (Rational(int)){ -2 };
 	b = (Rational(int)){ -3, 2 };
-	sout | a | b | endl;
-//	sout | a == 1 | endl; // FIX ME
-	sout | a != b | endl;
-	sout | a <  b | endl;
-	sout | a <= b | endl;
-	sout | a >  b | endl;
-	sout | a >= b | endl;
+	sout | a | b;
+//	sout | a == 1; // FIX ME
+	sout | a != b;
+	sout | a <  b;
+	sout | a <= b;
+	sout | a >  b;
+	sout | a >= b;
 
-	sout | "arithmetic" | endl;
-	sout | a | b | endl;
-	sout | a + b | endl;
-	sout | a - b | endl;
-	sout | a * b | endl;
-	sout | a / b | endl;
+	sout | "arithmetic";
+	sout | a | b;
+	sout | a + b;
+	sout | a - b;
+	sout | a * b;
+	sout | a / b;
 
-	sout | "conversion" | endl;
+	sout | "conversion";
 	a = (Rational(int)){ 3, 4 };
-	sout | widen( a ) | endl;
+	sout | widen( a );
 	a = (Rational(int)){ 1, 7 };
-	sout | widen( a ) | endl;
+	sout | widen( a );
 	a = (Rational(int)){ 355, 113 };
-	sout | widen( a ) | endl;
-	sout | narrow( 0.75, 4 ) | endl;
-	sout | narrow( 0.14285714285714, 16 ) | endl;
-	sout | narrow( 3.14159265358979, 256 ) | endl;
+	sout | widen( a );
+	sout | narrow( 0.75, 4 );
+	sout | narrow( 0.14285714285714, 16 );
+	sout | narrow( 3.14159265358979, 256 );
 
-	sout | "decompose" | endl;
+	sout | "decompose";
 	int n, d;
 //	[n, d] = a;
-//	sout | a | n | d | endl;
+//	sout | a | n | d;
 
-	sout | "more tests" | endl;
+	sout | "more tests";
 	Rational(int) x = { 1, 2 }, y = { 2 };
-	sout | x - y | endl;
-	sout | x > y | endl;
-	sout | x | numerator( x, 2 ) | x | endl;
-	sout | y | denominator( y, -2 ) | y | endl;
+	sout | x - y;
+	sout | x > y;
+	sout | x | numerator( x, 2 ) | x;
+	sout | y | denominator( y, -2 ) | y;
 
 	Rational(int) z = { 0, 5 };
-	sout | z | endl;
+	sout | z;
 
-	sout | x | numerator( x, 0 ) | x | endl;
+	sout | x | numerator( x, 0 ) | x;
 
 	x = (Rational(int)){ 1, MAX } + (Rational(int)){ 1, MAX };
-	sout | x | endl;
+	sout | x;
 	x = (Rational(int)){ 3, MAX } + (Rational(int)){ 2, MAX };
-	sout | x | endl;
+	sout | x;
 
 	sin | a | b;
-	sout | a | b | endl;
+	sout | a | b;
 } // main
 
Index: tests/searchsort.cfa
===================================================================
--- tests/searchsort.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/searchsort.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,10 +10,10 @@
 // Created On       : Thu Feb  4 18:17:50 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 18:00:38 2018
-// Update Count     : 102
+// Last Modified On : Wed Dec  5 08:18:42 2018
+// Update Count     : 106
 //
 
 #include <fstream.hfa>
-#include <stdlib.hfa>										// bsearch, qsort
+#include <stdlib.hfa>									// bsearch, qsort
 #include <stdlib.h>										// C version of bsearch
 
@@ -24,9 +24,11 @@
 	int iarr[size];
 
+	sout | nlOff;										// turn off auto newline
+
 	for ( i; 0u ~ size ) {
 		iarr[i] = size - i;
 		sout | iarr[i] | ", ";
 	} // for
-	sout | endl | endl;
+	sout | nl;
 
 	// ascending sort/search by changing < to >
@@ -35,5 +37,5 @@
 		sout | iarr[i] | ", ";
 	} // for
-	sout | endl;
+	sout | nl;
 	for ( i; 0u ~ size ) {		// C version
 		int key = size - i;
@@ -41,5 +43,5 @@
 		sout | key | ':' | *v | ", ";
 	} // for
-	sout | endl;
+	sout | nl;
 
 	for ( i; 0u ~ size ) {
@@ -47,10 +49,10 @@
 		sout | size - i | ':' | *v | ", ";
 	} // for
-	sout | endl;
+	sout | nl;
 	for ( i; 0u ~ size ) {
 		unsigned int posn = bsearch( size - i, iarr, size );
 		sout | size - i | ':' | iarr[posn] | ", ";
 	} // for
-	sout | endl | endl;
+	sout | nl;
 
 	// descending sort/search by changing < to >
@@ -59,5 +61,5 @@
 		sout | iarr[i] | ", ";
 	} // for
-	sout | endl;
+	sout | nl;
 	{
 		int ?<?( int x, int y ) { return x > y; }
@@ -66,10 +68,10 @@
 			sout | iarr[i] | ", ";
 		} // for
-		sout | endl;
+		sout | nl;
 		for ( i; 0u ~ size ) {
 			int * v = bsearch( size - i, iarr, size );
 			sout | size - i | ':' | *v | ", ";
 		} // for
-		sout | endl;
+		sout | nl;
 		for ( i; 0u ~ size ) {
 			unsigned int posn = bsearch( size - i, iarr, size );
@@ -77,5 +79,5 @@
 		} // for
 	}
-	sout | endl | endl;
+	sout | nl;
 
 	double darr[size];
@@ -84,20 +86,20 @@
 		sout | darr[i] | ", ";
 	} // for
-	sout | endl;
+	sout | nl;
 	qsort( darr, size );
 	for ( i; 0u ~ size ) {
 		sout | darr[i] | ", ";
 	} // for
-	sout | endl;
+	sout | nl;
 	for ( i; 0u ~ size ) {
 		double * v = bsearch( size - i + 0.5, darr, size );
 		sout | size - i + 0.5 | ':' | *v | ", ";
 	} // for
-	sout | endl;
+	sout | nl;
 	for ( i; 0u ~ size ) {
 		unsigned int posn = bsearch( size - i + 0.5, darr, size );
 		sout | size - i + 0.5 | ':' | darr[posn] | ", ";
 	} // for
-	sout | endl | endl;
+	sout | nl;
 
 	struct S { int i, j; } sarr[size];
@@ -109,10 +111,10 @@
 		sout | sarr[i] | ", ";
 	} // for
-	sout | endl;
+	sout | nl;
 	qsort( sarr, size );
 	for ( i; 0u ~ size ) {
 		sout | sarr[i] | ", ";
 	} // for
-	sout | endl;
+	sout | nl;
 	for ( i; 0u ~ size ) {
 		S temp = { size - i, size - i + 1 };
@@ -120,5 +122,5 @@
 		sout | temp | ':' | *v | ", ";
 	} // for
-	sout | endl;
+	sout | nl;
 	for ( i; 0u ~ size ) {
 		S temp = { size - i, size - i + 1 };
@@ -126,5 +128,5 @@
 		sout | temp | ':' | sarr[posn] | ", ";
 	} // for
-	sout | endl | endl;
+	sout | nl;
 	{
 		unsigned int getKey( const S & s ) { return s.j; }
@@ -132,15 +134,15 @@
 			sout | sarr[i] | ", ";
 		} // for
-		sout | endl;
+		sout | nl;
 		for ( i; 0u ~ size ) {
 			S * v = bsearch( size - i + 1, sarr, size );
 			sout | size - i + 1 | ':' | *v | ", ";
 		} // for
-		sout | endl;
+		sout | nl;
 		for ( i; 0u ~ size ) {
 			unsigned int posn = bsearch( size - i + 1, sarr, size );
 			sout | size - i + 1 | ':' | sarr[posn] | ", ";
 		} // for
-		sout | endl | endl;
+		sout | nl;
 	}
 } // main
Index: tests/shortCircuit.cfa
===================================================================
--- tests/shortCircuit.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/shortCircuit.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -1,2 +1,17 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+// 
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// shortCircuit.cfa -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Thu Jan 28 18:26:16 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Dec  4 18:26:05 2018
+// Update Count     : 4
+// 
+
 void g( float f ) {}
 void g( int i ) {}
@@ -33,7 +48,6 @@
 }
 
-
-int main(int argc, char const *argv[])
-{
+int main( int argc, char const *argv[] ) {
+	sout | nlOff;
 	test_t true_val, false_val;
 	true_val.x = 1;
@@ -41,15 +55,20 @@
 
 	true_val && false_val;
-	sout | endl;
+	sout | nl;
 
 	true_val || false_val;
-	sout | endl;
+	sout | nl;
 
 	false_val && true_val;
-	sout | endl;
+	sout | nl;
 
 	false_val || true_val;
-	sout | endl;
+	sout | nl;
 
 	return 0;
 }
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa abs.cfa" //
+// End: //
Index: tests/sum.cfa
===================================================================
--- tests/sum.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/sum.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -11,6 +11,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 18:01:10 2018
-// Update Count     : 280
+// Last Modified On : Tue Dec 11 21:50:41 2018
+// Update Count     : 285
 //
 
@@ -56,5 +56,5 @@
 	} // for
 	sout | "sum from" | low | "to" | High | "is"
-		 | sum( size, (unsigned char *)a ) | ", check" | (int)s | endl;
+		 | sum( size, (unsigned char *)a ) | ", check" | (int)s;
 
 	int s = 0, a[size], v = low;
@@ -64,5 +64,5 @@
 	} // for
 	sout | "sum from" | low | "to" | High | "is"
-		 | sum( size, (int *)a ) | ", check" | (int)s | endl;
+		 | sum( size, (int *)a ) | ", check" | (int)s;
 
 	float s = 0.0f, a[size], v = low / 10.0f;
@@ -72,5 +72,5 @@
 	} // for
 	sout | "sum from" | low / 10.0f | "to" | High / 10.0f | "is"
-		 | sum( size, (float *)a ) | ", check" | (float)s | endl;
+		 | sum( size, (float *)a ) | ", check" | (float)s;
 
 	double s = 0.0, a[size], v = low / 10.0;
@@ -80,5 +80,5 @@
 	} // for
 	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
-		 | sum( size, (double *)a ) | ", check" | (double)s | endl;
+		 | sum( size, (double *)a ) | ", check" | (double)s;
 
 	struct S { int i, j; };
@@ -93,4 +93,5 @@
 	S ?++( S & t ) { S temp = t; t += (S){1}; return temp; }
 	ofstream & ?|?( ofstream & os, S v ) { return os | v.i | v.j; }
+	void ?|?( ofstream & os, S v ) { (ofstream)(os | v); if ( getANL( os ) ) nl( os ); }
 
 	S s = (S){0}, a[size], v = { low, low };
@@ -100,5 +101,5 @@
 	} // for
 	sout | "sum from" | low | "to" | High | "is"
-		 | sum( size, (S *)a ) | ", check" | (S)s | endl;
+		 | sum( size, (S *)a ) | ", check" | (S)s;
 
 	forall( otype Impl | sumable( Impl ) )
@@ -114,5 +115,5 @@
 	} // for
 	sout | "sum from" | low | "to" | High | "is"
-		 | sum( size, gs.x ) | ", check" | (int)s | endl; // add field array in generic type
+		 | sum( size, gs.x ) | ", check" | (int)s;		// add field array in generic type
 	delete( gs.x );
 } // main
Index: tests/swap.cfa
===================================================================
--- tests/swap.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/swap.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 18:01:23 2018
-// Update Count     : 72
+// Last Modified On : Tue Dec 11 10:17:40 2018
+// Update Count     : 74
 //
 
@@ -19,73 +19,73 @@
 int main( void ) {
 	char c1 = 'a', c2 = 'b';
-	sout | "char\t\t\t" | c1 | ' ' | c2 | "\t\t\tswap ";
+	sout | "char\t\t\t" | c1 | ' ' | c2 | "\t\t\tswap " | nonl;
 	swap( c1, c2 );
-	sout | '\t' | c1 | ' ' | c2 | endl;
+	sout | '\t' | c1 | ' ' | c2;
 
 	signed int i1 = -1, i2 = -2;
-	sout | "signed int\t\t" | i1 | i2 | "\t\t\tswap ";
+	sout | "signed int\t\t" | i1 | i2 | "\t\t\tswap " | nonl;
 	swap( i1, i2 );
-	sout | '\t' | i1 | i2 | endl;
+	sout | '\t' | i1 | i2;
 
 	unsigned int ui1 = 1, ui2 = 2;
-	sout | "unsigned int\t\t" | ui1 | ui2 | "\t\t\tswap ";
+	sout | "unsigned int\t\t" | ui1 | ui2 | "\t\t\tswap " | nonl;
 	swap( ui1, ui2 );
-	sout | '\t' | ui1 | ui2 | endl;
+	sout | '\t' | ui1 | ui2;
 
 	signed long int li1 = -1, li2 = -2;
-	sout | "signed long int\t\t" | li1 | li2 | "\t\t\tswap ";
+	sout | "signed long int\t\t" | li1 | li2 | "\t\t\tswap " | nonl;
 	swap( li1, li2 );
-	sout | '\t' | li1 | li2 | endl;
+	sout | '\t' | li1 | li2;
 
 	unsigned long int uli1 = 1, uli2 = 2;
-	sout | "unsigned long int\t" | uli1 | uli2 | "\t\t\tswap ";
+	sout | "unsigned long int\t" | uli1 | uli2 | "\t\t\tswap " | nonl;
 	swap( uli1, uli2 );
-	sout | '\t' | uli1 | uli2 | endl;
+	sout | '\t' | uli1 | uli2;
 
 	signed long long int lli1 = -1, lli2 = -2;
-	sout | "signed long long int\t" | lli1 | lli2 | "\t\t\tswap ";
+	sout | "signed long long int\t" | lli1 | lli2 | "\t\t\tswap " | nonl;
 	swap( lli1, lli2 );
-	sout | '\t' | lli1 | lli2 | endl;
+	sout | '\t' | lli1 | lli2;
 
 	unsigned long long int ulli1 = 1, ulli2 = 2;
-	sout | "unsigned long long int\t" | ulli1 | ulli2 | "\t\t\tswap ";
+	sout | "unsigned long long int\t" | ulli1 | ulli2 | "\t\t\tswap " | nonl;
 	swap( ulli1, ulli2 );
-	sout | '\t' | ulli1 | ulli2 | endl;
+	sout | '\t' | ulli1 | ulli2;
 
 	float f1 = 1.5, f2 = 2.5;
-	sout | "float\t\t\t" | f1 | f2 | "\t\t\tswap ";
+	sout | "float\t\t\t" | f1 | f2 | "\t\t\tswap " | nonl;
 	swap( f1, f2 );
-	sout | '\t' | f1 | f2 | endl;
+	sout | '\t' | f1 | f2;
 
 	double d1 = 1.5, d2 = 2.5;
-	sout | "double\t\t\t" | d1 | d2 | "\t\t\tswap ";
+	sout | "double\t\t\t" | d1 | d2 | "\t\t\tswap " | nonl;
 	swap( d1, d2 );
-	sout | '\t' | d1 | d2 | endl;
+	sout | '\t' | d1 | d2;
 
 	long double ld1 = 1.5, ld2 = 2.5;
-	sout | "long double\t\t" | ld1 | ld2 | "\t\t\tswap ";
+	sout | "long double\t\t" | ld1 | ld2 | "\t\t\tswap " | nonl;
 	swap( ld1, ld2 );
-	sout | '\t' | ld1 | ld2 | endl;
+	sout | '\t' | ld1 | ld2;
 
 	float _Complex fc1 = 1.5f+1.5if, fc2 = 2.5f+2.5if;
-	sout | "float _Complex\t\t" | fc1 | fc2 | "\tswap ";
+	sout | "float _Complex\t\t" | fc1 | fc2 | "\tswap " | nonl;
 	swap( fc1, fc2 );
-	sout | '\t' | fc1 | fc2 | endl;
+	sout | '\t' | fc1 | fc2;
 
 	double _Complex dc1 = 1.5d+1.5id, dc2 = 2.5d+2.5id;
-	sout | "double _Complex\t\t" | dc1 | dc2 | "\tswap ";
+	sout | "double _Complex\t\t" | dc1 | dc2 | "\tswap " | nonl;
 	swap( dc1, dc2 );
-	sout | '\t' | dc1 | dc2 | endl;
+	sout | '\t' | dc1 | dc2;
 
 	long double _Complex ldc1 = 1.5d+1.5il, ldc2 = 2.5d+2.5il;
-	sout | "long double _Complex\t" | ldc1 | ldc2 | "\tswap ";
+	sout | "long double _Complex\t" | ldc1 | ldc2 | "\tswap " | nonl;
 	swap( ldc1, ldc2 );
-	sout | '\t' | ldc1 | ldc2 | endl;
+	sout | '\t' | ldc1 | ldc2;
 
 	struct S { int i, j; } s1 = { 1, 2 }, s2 = { 2, 1 };
 	ofstream & ?|?( ofstream & os, S s ) { return os | s.i | s.j; }
-	sout | "struct S\t\t" | s1 | "," | s2 | "\t\tswap ";
+	sout | "struct S\t\t" | s1 | "," | s2 | "\t\tswap " | nonl;
 	swap( s1, s2 );
-	sout | '\t' | s1 | "," | s2 | endl;
+	sout | '\t' | s1 | "," | s2;
 } // main
 
Index: tests/time.cfa
===================================================================
--- tests/time.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/time.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Tue Mar 27 17:24:56 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 18:01:45 2018
-// Update Count     : 17
+// Last Modified On : Tue Dec 11 21:44:03 2018
+// Update Count     : 22
 //
 
@@ -19,48 +19,46 @@
 int main() {
 	Duration d1 = 3`h, d2 = 2`s, d3 = 3.375`s, d4 = 12`s, d5 = 1`s + 10_000`ns;
-	sout | d1 | d2 | d3 | d4 | d5 | endl;
+	sout | d1 | d2 | d3 | d4 | d5;
 	int i;
 	d1 = 0;
-	sout | d1 | d2 | d3 | endl;
+	sout | d1 | d2 | d3;
 	d1 = 7`s;
 	d3 = d2 = d1;
-	sout | d1 | d2 | d3 | endl;
+	sout | d1 | d2 | d3;
 	d1 = d1 + d2;
-	sout | d1 | endl;
-	sout | d1 == 7`s | d1 == d2 | d1 == 0 | endl;
-	sout | div( 7`s, 2`s ) | endl;
-	sout | endl;
+	sout | d1;
+	sout | d1 == 7`s | d1 == d2 | d1 == 0;
+	sout | div( 7`s, 2`s );
 
 	Time t = { 1970, 1, 2, 0, 0, 0, 10_000_000 };
-	sout | t | endl;
+	sout | t;
 	t = t + d1;
-	sout | t | t.tv | endl;
+	sout | t | t.tv;
 	Time t1 = (timespec){ 104_414, 10_000_000 };
-	sout | t1 | t1.tv | endl;
-	sout | t - t  | t + d5 | t.tv | endl;
+	sout | t1 | t1.tv;
+	sout | t - t  | t + d5 | t.tv;
 	char buf[16];
-	sout | "yy/mm/dd" | [t, buf]`ymd;					// shared buf => separate calls
-	sout | "mm/dd/yy" | mm_dd_yy( t, buf );
+	sout | "yy/mm/dd" | [t, buf]`ymd | nonl;			// shared buf => separate calls
+	sout | "mm/dd/yy" | mm_dd_yy( t, buf ) | nonl;
 	strftime( buf, 16, "%D", t );						// %D => mm/dd/yy
-	sout | "mm/dd/yy" | buf;
-	sout | "dd/yy/mm" | [t, buf]`dmy | endl;
+	sout | "mm/dd/yy" | buf | nonl;
+	sout | "dd/yy/mm" | [t, buf]`dmy;
 	Time t2 = { 2001, 7, 4, 0, 0, 1, 0 }, t3 = (timeval){ 994_219_201 };
-	sout | t2 | t2.tv | endl | t3 | t3.tv | endl;
-	sout | endl;
+	sout | t2 | t2.tv | nl | t3 | t3.tv;
 
 	// Clock Newfoundland = { -3.5`h }, PST = { -8`h };	// distance from GMT (UTC)
-	// sout | "Clock Resolution" | getRes() | endl
-	// 	 | "Newfoundland" | getTime( Newfoundland ) | endl
-	// 	 | "local" | getTime() | endl
-	// 	 | "local nsec" | getTimeNsec() | endl
-	// 	 | "PST" | PST() | endl;						// getTime short form
-	// sout | endl;
+	// sout | "Clock Resolution" | getRes()
+	// 	 | "Newfoundland" | getTime( Newfoundland )
+	// 	 | "local" | getTime()
+	// 	 | "local nsec" | getTimeNsec()
+	// 	 | "PST" | PST();								// getTime short form
+	// sout;
 
 	// http://en.cppreference.com/w/cpp/chrono/duration/operator_arith4
 	Duration s = 1`h + 2 * 10`m + 70`s / 10;
-	sout | "1 hour + 2*10 min + 70/10 sec = " | s | "seconds" | endl;
-	sout | "Dividing that by 2 minutes gives" | s / 2`m | endl;
-	sout | "Dividing that by 2 gives" | s / 2 | "seconds\n";
-	sout | s | "seconds is" | s`h | "hours," | (s % 1`h)`m | "minutes," | (s % 1`m)`s | "seconds" | endl;
+	sout | "1 hour + 2*10 min + 70/10 sec = " | s | "seconds";
+	sout | "Dividing that by 2 minutes gives" | s / 2`m;
+	sout | "Dividing that by 2 gives" | s / 2 | "seconds";
+	sout | s | "seconds is" | s`h | "hours," | (s % 1`h)`m | "minutes," | (s % 1`m)`s | "seconds";
 } // main
 
Index: tests/tuple/tupleAssign.c
===================================================================
--- tests/tuple/tupleAssign.c	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/tuple/tupleAssign.c	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Tue Nov 15 17:24:32 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Mar  6 21:23:58 2017
-// Update Count     : 34
+// Last Modified On : Tue Dec  4 22:03:48 2018
+// Update Count     : 35
 //
 
@@ -24,13 +24,13 @@
 		// swap x, y and store the new [x, y] in [u, v] and in z;
 		printf( "u=%d v=%d x=%d y=%d z=[%d, %d]\n", u, v, x, y, z );
-		sout | "u=" | u | "v=" | v | "x=" | x | "y=" | y | "z=[" | z | "]" | endl;
+		sout | "u=" | u | "v=" | v | "x=" | x | "y=" | y | "z=[" | z | "]";
 		z = [u, v] = [x, y] = [y, x];
 		printf( "u=%d v=%d x=%d y=%d z=[%d, %d]\n", u, v, x, y, z );
-		sout | "u=" | u | "v=" | v | "x=" | x | "y=" | y | "z=[" | z | "]" | endl;
+		sout | "u=" | u | "v=" | v | "x=" | x | "y=" | y | "z=[" | z | "]";
 
 		// shuffle elements -- v = z.0, z.0 = z.1, z.1 = u, u = v
 		[v, z, u] = [z, u, v];
 		printf( "u=%d v=%d z=[%d, %d]\n", u, v, z );
-		sout | "u=" | u | "v=" | v | "z=[" | z | "]" | endl;
+		sout | "u=" | u | "v=" | v | "z=[" | z | "]";
 
 		// multiple assignment with tuple expression on right
@@ -38,5 +38,5 @@
 		[u, v] = [123, 456];
 		printf( "u=%d v=%d z=[%d, %d]\n", u, v, z );
-		sout | "u=" | u | "v=" | v | "z=[" | z | "]" | endl;
+		sout | "u=" | u | "v=" | v | "z=[" | z | "]";
 	}
 	{
@@ -55,8 +55,8 @@
 		[t, x, d, i, c, x] = (double)94.12;
 		printf( "d=%lg i=%d c=%c t=[%d, %lg, %d]\n", d, i, (int)c, t );
-		sout | "d=" | d | "i=" | i | "c=" | c | ' ' | "t=[" | t | "]" | endl;
+		sout | "d=" | d | "i=" | i | "c=" | c | ' ' | "t=[" | t | "]";
 		[x, c, i, d, x, t] = (double)-94.12;
 		printf( "d=%lg i=%d c=%c t=[%d, %lg, %d]\n", d, i, c, t );
-		sout | "d=" | d | "i=" | i | "c=" | c | ' ' | "t=[" | t | "]" | endl;
+		sout | "d=" | d | "i=" | i | "c=" | c | ' ' | "t=[" | t | "]";
 	}
 }
Index: tests/userLiterals.cfa
===================================================================
--- tests/userLiterals.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/userLiterals.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Wed Sep  6 21:40:50 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 18:02:03 2018
-// Update Count     : 55
+// Last Modified On : Tue Dec  4 22:03:10 2018
+// Update Count     : 56
 //
 
@@ -18,15 +18,15 @@
 #include <uchar.h>
 
-int ?`s( int s ) { sout | "secs" | s | endl; return s; }
-int ?`m( int m ) { sout | "mins" | m | endl; return m * 60; }
-int ?`h( int h ) { sout | "hours" | h | endl; return h * 3600; }
-int ?`_A_( int x ) { sout | "_A_" | x | endl; return x; }
-int ?`__thingy_( int x ) { sout | "_thingy_" | x | endl; return x; }
+int ?`s( int s ) { sout | "secs" | s; return s; }
+int ?`m( int m ) { sout | "mins" | m; return m * 60; }
+int ?`h( int h ) { sout | "hours" | h; return h * 3600; }
+int ?`_A_( int x ) { sout | "_A_" | x; return x; }
+int ?`__thingy_( int x ) { sout | "_thingy_" | x; return x; }
 
-int ?`s( const char * s ) { sout | "secs" | s | endl; return 0; }
-int ?`m( const char16_t * m ) { sout | "mins" | m | endl; return 0;}
-int ?`h( const char32_t * h ) { sout | "hours" | h | endl; return 0; }
-int ?`_A_( const wchar_t * str ) { sout | "_A_" | str | endl; return 0; }
-int ?`__thingy_( const char * str ) { sout | "_thingy_" | str | endl; return 0; }
+int ?`s( const char * s ) { sout | "secs" | s; return 0; }
+int ?`m( const char16_t * m ) { sout | "mins" | m; return 0;}
+int ?`h( const char32_t * h ) { sout | "hours" | h; return 0; }
+int ?`_A_( const wchar_t * str ) { sout | "_A_" | str; return 0; }
+int ?`__thingy_( const char * str ) { sout | "_thingy_" | str; return 0; }
 
 
@@ -46,17 +46,17 @@
 	Weight w, heavy = { 20 };							// 20 stone
 	w = 155`lb;
-	sout | w | endl;
+	sout | w;
 	w = 0b_1111`st;
-	sout | w | endl;
+	sout | w;
 	w = 0_233`lb;										// octal weight (155)
-	sout | w | endl;
+	sout | w;
 	w = 0x_9b_u`kg;
-	sout | w | endl;
+	sout | w;
 	w = 70.3`kg;
-	sout | w | endl;
+	sout | w;
 	w = 11`st + 1`lb;
-	sout | w | endl;
+	sout | w;
 	w = 5`st + 8`kg + 25`lb + heavy;
-	sout | w | endl;
+	sout | w;
 
 //	0`secs;
Index: tests/vector.cfa
===================================================================
--- tests/vector.cfa	(revision 3d99498b41b7a24512b21baeb42c27ede778ece8)
+++ tests/vector.cfa	(revision 200fcb3c496b08f843f691550554b21d786aad38)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jul  4 23:36:19 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov  6 18:02:26 2018
-// Update Count     : 28
+// Last Modified On : Tue Dec  4 22:02:39 2018
+// Update Count     : 29
 //
 
@@ -21,5 +21,5 @@
 	do {										\
 		if ( !(x) ) {							\
-			sout | "CHECK failed :" | #x | "at" | __FILE__ | " :" | __LINE__ | endl;	\
+			sout | "CHECK failed :" | #x | "at" | __FILE__ | " :" | __LINE__;	\
 			abort();							\
 		}										\
@@ -31,17 +31,17 @@
 	assert( empty( &iv ) );
 	assert( size( &iv ) == 0 );
-	sout | size( &iv ) | endl;
+	sout | size( &iv );
 
 	push_back( &iv, 1 );
 	assert( size( &iv ) == 1 );
-	sout | size( &iv ) | endl;
+	sout | size( &iv );
 
 	push_back( &iv, 2 );
 	assert( size( &iv ) == 2 );
-	sout | size( &iv ) | endl;
+	sout | size( &iv );
 
 	push_back( &iv, 3 );
 	assert( size( &iv ) == 3 );
-	sout | size( &iv ) | endl;
+	sout | size( &iv );
 
 	assert( !empty( &iv ) );
@@ -58,5 +58,5 @@
 	assert( empty( &iv ) );
 	assert( size( &iv ) == 0 );
-	sout | size( &iv ) | endl;
+	sout | size( &iv );
 }
 
