Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 5ea5b28f99a21543ee16545ccb212eddbb550eff)
+++ libcfa/src/iostream.cfa	(revision 9d362a0aa105cc54a0a3b9de3a600875b0ade8ae)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Dec 22 23:09:56 2018
-// Update Count     : 569
+// Last Modified On : Mon Dec 24 18:33:40 2018
+// Update Count     : 589
 //
 
@@ -33,6 +33,5 @@
 	} // ?|?
 	void ?|?( ostype & os, bool b ) {
-		(ostype)(os | b); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | b); nl( os );
 	} // ?|?
 
@@ -43,6 +42,5 @@
 	} // ?|?
 	void ?|?( ostype & os, char c ) {
-		(ostype)(os | c); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | c); nl( os );
 	} // ?|?
 
@@ -53,6 +51,5 @@
 	} // ?|?
 	void ?|?( ostype & os, signed char sc ) {
-		(ostype)(os | sc); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | sc); nl( os );
 	} // ?|?
 
@@ -63,6 +60,5 @@
 	} // ?|?
 	void ?|?( ostype & os, unsigned char usc ) {
-		(ostype)(os | usc); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | usc); nl( os );
 	} // ?|?
 
@@ -73,6 +69,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, short int si ) {
-		(ostype)(os | si); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | si); nl( os );
 	} // ?|?
 
@@ -83,6 +78,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, unsigned short int usi ) {
-		(ostype)(os | usi); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | usi); nl( os );
 	} // ?|?
 
@@ -93,6 +87,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, int i ) {
-		(ostype)(os | i); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | i); nl( os );
 	} // ?|?
 
@@ -103,6 +96,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, unsigned int ui ) {
-		(ostype)(os | ui); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | ui); nl( os );
 	} // ?|?
 
@@ -113,6 +105,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, long int li ) {
-		(ostype)(os | li); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | li); nl( os );
 	} // ?|?
 
@@ -123,6 +114,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, unsigned long int uli ) {
-		(ostype)(os | uli); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | uli); nl( os );
 	} // ?|?
 
@@ -133,6 +123,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, long long int lli ) {
-		(ostype)(os | lli); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | lli); nl( os );
 	} // ?|?
 
@@ -143,6 +132,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, unsigned long long int ulli ) {
-		(ostype)(os | ulli); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | ulli); nl( os );
 	} // ?|?
 
@@ -153,6 +141,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, float f ) {
-		(ostype)(os | f); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | f); nl( os );
 	} // ?|?
 
@@ -163,6 +150,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, double d ) {
-		(ostype)(os | d); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | d); nl( os );
 	} // ?|?
 
@@ -173,6 +159,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, long double ld ) {
-		(ostype)(os | ld); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | ld); nl( os );
 	} // ?|?
 
@@ -183,6 +168,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, float _Complex fc ) {
-		(ostype)(os | fc); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | fc); nl( os );
 	} // ?|?
 
@@ -193,6 +177,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, double _Complex dc ) {
-		(ostype)(os | dc); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | dc); nl( os );
 	} // ?|?
 
@@ -203,6 +186,5 @@
 	} // ?|?
 	void & ?|?( ostype & os, long double _Complex ldc ) {
-		(ostype)(os | ldc); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | ldc); nl( os );
 	} // ?|?
 
@@ -246,6 +228,5 @@
 	} // ?|?
 	void ?|?( ostype & os, const char * str ) {
-		(ostype)(os | str); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | str); nl( os );
 	} // ?|?
 
@@ -276,21 +257,20 @@
 	} // ?|?
 	void ?|?( ostype & os, const void * p ) {
-		(ostype)(os | p); if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		(ostype &)(os | p); nl( os );
 	} // ?|?
 
 	// manipulators
 	ostype & ?|?( ostype & os, ostype & (* manip)( ostype & ) ) {
-		(ostype)(manip( os ));
+		(ostype &)(manip( os ));
 		return os;
 	} // ?|?
 	void ?|?( ostype & os, ostype & (* manip)( ostype & ) ) {
-		(ostype)(manip( os ));
-		if ( getANL( os ) && getPrt( os ) ) nl( os );	// ignore auto nl?
+		(ostype &)(manip( os ));
+		if ( getPrt( os ) ) nl( os );					// something printed ?
 		setPrt( os, false );							// turn off
 	} // ?|?
 
 	ostype & sep( ostype & os ) {
-		return (ostype)(os | sepGet( os ));
+		return (ostype &)(os | sepGet( os ));
 	} // sep
 
@@ -300,5 +280,5 @@
 
 	ostype & nl( ostype & os ) {
-		(ostype)(os | '\n');
+		(ostype &)(os | '\n');
 		setPrt( os, false );							// turn off
 		setNL( os, true );
@@ -307,4 +287,9 @@
 	} // nl
 
+	void nl( ostype & os ) {
+		if ( getANL( os ) ) (ostype &)(nl( os ));		// implementation only
+		else setPrt( os, false );						// turn off
+	} // nl
+
 	ostype & nonl( ostype & os ) {
 		setPrt( os, false );							// turn off
@@ -346,18 +331,17 @@
 forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } ) {
 	ostype & ?|?( ostype & os, T arg, Params rest ) {
-		(ostype)(os | arg);								// print first argument
+		(ostype &)(os | arg);							// print first argument
 		sepSetCur( os, sepGetTuple( os ) );				// switch to tuple separator
-		(ostype)(os | rest);							// print remaining arguments
+		(ostype &)(os | rest);							// print remaining arguments
 		sepSetCur( os, sepGet( os ) );					// switch to regular separator
 		return os;
 	} // ?|?
 	void ?|?( ostype & os, T arg, Params rest ) {
-//		(ostype)(?|?( os, arg, rest )); if ( getANL( os ) ) nl( os );
-		(ostype)(os | arg);								// print first argument
+		// (ostype &)(?|?( os, arg, rest )); nl( os );
+		(ostype &)(os | arg);							// print first argument
 		sepSetCur( os, sepGetTuple( os ) );				// switch to tuple separator
-		(ostype)(os | rest);							// print remaining arguments
+		(ostype &)(os | rest);							// print remaining arguments
 		sepSetCur( os, sepGet( os ) );					// switch to regular separator
-		if ( getANL( os ) ) nl( os );
-		setPrt( os, false );							// turn off
+		nl( os );
 	} // ?|?
 } // distribution
