Index: src/libcfa/fstream
===================================================================
--- src/libcfa/fstream	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/fstream	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,22 +10,21 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul  1 16:37:53 2017
-// Update Count     : 112
+// Last Modified On : Fri Jul  7 08:32:38 2017
+// Update Count     : 117
 //
 
-#ifndef __FSTREAM_H__
-#define __FSTREAM_H__
+#pragma once
 
 #include "iostream"
 
-enum { separateSize = 16 };
+enum { sepSize = 16 };
 struct ofstream {
 	void * file;
 	_Bool sepDefault;
 	_Bool sepOnOff;
-	_Bool lastSepOn;
+	_Bool sawNL;
 	const char * sepCur;
-	char separator[separateSize];
-	char tupleSeparator[separateSize];
+	char separator[sepSize];
+	char tupleSeparator[sepSize];
 }; // ofstream
 
@@ -36,5 +35,6 @@
 const char * sepGetCur( ofstream * );
 void sepSetCur( ofstream *, const char * );
-_Bool lastSepOn( ofstream * );
+_Bool getNL( ofstream * );
+void setNL( ofstream *, _Bool );
 
 // public
@@ -75,6 +75,4 @@
 extern ifstream * sin;
 
-#endif // __FSTREAM_H__
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/fstream.c
===================================================================
--- src/libcfa/fstream.c	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/fstream.c	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul  1 16:37:54 2017
-// Update Count     : 242
+// Last Modified On : Thu Jul  6 18:38:25 2017
+// Update Count     : 251
 //
 
@@ -33,5 +33,4 @@
 	this->sepDefault = sepDefault;
 	this->sepOnOff = sepOnOff;
-	this->lastSepOn = false;
 	sepSet( this, separator );
 	sepSetCur( this, sepGet( this ) );
@@ -40,19 +39,19 @@
 
 // private
-_Bool lastSepOn( ofstream * os ) { return os->lastSepOn; }
-_Bool sepPrt( ofstream * os ) { os->lastSepOn = false; return os->sepOnOff; }
+_Bool sepPrt( ofstream * os ) { setNL( os, false ); return os->sepOnOff; }
 void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; }
 void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; }
 const char * sepGetCur( ofstream * os ) { return os->sepCur; }
 void sepSetCur( ofstream * os, const char * sepCur ) { os->sepCur = sepCur; }
+_Bool getNL( ofstream * os ) { return os->sawNL; }
+void setNL( ofstream * os, _Bool state ) { os->sawNL = state; }
 
 // public
-void sepOn( ofstream * os ) { os->lastSepOn = true; os->sepOnOff = true; }
-void sepOff( ofstream * os ) { os->lastSepOn = false; os->sepOnOff = 0; }
+void sepOn( ofstream * os ) { os->sepOnOff = ! getNL( os ); }
+void sepOff( ofstream * os ) { os->sepOnOff = false; }
 
 _Bool sepDisable( ofstream *os ) {
 	_Bool temp = os->sepDefault;
 	os->sepDefault = false;
-	os->lastSepOn = false;
 	sepReset( os );
 	return temp;
@@ -69,6 +68,6 @@
 void sepSet( ofstream * os, const char * s ) {
 	assert( s );
-	strncpy( os->separator, s, separateSize - 1 );
-	os->separator[separateSize - 1] = '\0';
+	strncpy( os->separator, s, sepSize - 1 );
+	os->separator[sepSize - 1] = '\0';
 } // sepSet
 
@@ -76,6 +75,6 @@
 void sepSetTuple( ofstream * os, const char * s ) {
 	assert( s );
-	strncpy( os->tupleSeparator, s, separateSize - 1 );
-	os->tupleSeparator[separateSize - 1] = '\0';
+	strncpy( os->tupleSeparator, s, sepSize - 1 );
+	os->tupleSeparator[sepSize - 1] = '\0';
 } // sepSet
 
@@ -153,11 +152,11 @@
 
 void open( ifstream * is, const char * name, const char * mode ) {
-	FILE *t = fopen( name, mode );
-	if ( t == 0 ) {										// do not change unless successful
+	FILE *file = fopen( name, mode );
+	if ( file == 0 ) {									// do not change unless successful
 		fprintf( stderr, IO_MSG "open input file \"%s\", ", name );
 		perror( 0 );
 		exit( EXIT_FAILURE );
 	} // if
-	is->file = t;
+	is->file = file;
 } // open
 
Index: src/libcfa/gmp
===================================================================
--- src/libcfa/gmp	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/gmp	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,9 +10,11 @@
 // Created On       : Tue Apr 19 08:43:43 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May 27 09:55:51 2017
-// Update Count     : 14
+// Last Modified On : Fri Jul  7 09:33:20 2017
+// Update Count     : 15
 // 
 
 // https://gmplib.org/gmp-man-6.1.1.pdf
+
+#pragma once
 
 #include <gmp.h>										// GNU multi-precise integers
Index: src/libcfa/iostream
===================================================================
--- src/libcfa/iostream	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/iostream	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,10 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul  2 08:42:56 2017
-// Update Count     : 110
+// Last Modified On : Fri Jul  7 08:35:59 2017
+// Update Count     : 118
 //
 
-#ifndef __IOSTREAM_H__
-#define __IOSTREAM_H__
+#pragma once
 
 #include "iterator"
@@ -26,5 +25,6 @@
 	const char * sepGetCur( ostype * );					// get current separator string
 	void sepSetCur( ostype *, const char * );			// set current separator string
-	_Bool lastSepOn( ostype * );						// last manipulator is setOn (context sensitive)
+	_Bool getNL( ostype * );							// check newline
+	void setNL( ostype *, _Bool );						// saw newline
 	// public
 	void sepOn( ostype * );								// turn separator state on
@@ -82,4 +82,6 @@
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
 forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
+forall( dtype ostype | ostream( ostype ) ) ostype * sep( ostype * );
+forall( dtype ostype | ostream( ostype ) ) ostype * sepTuple( ostype * );
 forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
 forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
@@ -137,6 +139,4 @@
 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC );
 
-#endif // __IOSTREAM_H
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/iostream.c
===================================================================
--- src/libcfa/iostream.c	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/iostream.c	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul  2 08:54:02 2017
-// Update Count     : 375
+// Last Modified On : Thu Jul  6 18:14:17 2017
+// Update Count     : 396
 //
 
@@ -18,4 +18,5 @@
 extern "C" {
 #include <stdio.h>
+#include <stdbool.h>									// true/false
 #include <string.h>										// strlen
 #include <float.h>										// DBL_DIG, LDBL_DIG
@@ -24,6 +25,7 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, char c ) {
-	fmt( os, "%c", c );
+ostype * ?|?( ostype * os, char ch ) {
+	fmt( os, "%c", ch );
+	if ( ch == '\n' ) setNL( os, true );
 	sepOff( os );
 	return os;
@@ -180,6 +182,6 @@
 
 	// last character IS spacing or opening punctuation => turn off separator for next item
-	unsigned int len = strlen( cp ), posn = len - 1;
-	ch = cp[posn];										// must make unsigned
+	size_t len = strlen( cp );
+	ch = cp[len - 1];									// must make unsigned
 	if ( sepPrt( os ) && mask[ ch ] != Open && mask[ ch ] != OpenClose ) {
 		sepOn( os );
@@ -187,4 +189,5 @@
 		sepOff( os );
 	} // if
+	if ( ch == '\n' ) setNL( os, true );				// check *AFTER* sepPrt call above as it resets NL flag
 	return write( os, cp, len );
 } // ?|?
@@ -216,7 +219,19 @@
 
 forall( dtype ostype | ostream( ostype ) )
+ostype * sep( ostype * os ) {
+	os | sepGet( os );
+	return os;
+} // sep
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * sepTuple( ostype * os ) {
+	os | sepGetTuple( os );
+	return os;
+} // sepTuple
+
+forall( dtype ostype | ostream( ostype ) )
 ostype * endl( ostype * os ) {
-	if ( lastSepOn( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	os | '\n';
+	setNL( os, true );
 	flush( os );
 	sepOff( os );										// prepare for next line
Index: src/libcfa/iterator
===================================================================
--- src/libcfa/iterator	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/iterator	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,10 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar  2 18:06:05 2016
-// Update Count     : 9
+// Last Modified On : Fri Jul  7 08:37:25 2017
+// Update Count     : 10
 //
 
-#ifndef ITERATOR_H
-#define ITERATOR_H
+#pragma once
 
 // An iterator can be used to traverse a data structure.
@@ -39,10 +38,8 @@
 
 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
-void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
+void for_each( iterator_type begin, iterator_type end, void (* func)( elt_type ) );
 
 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
-void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
-
-#endif // ITERATOR_H
+void for_each_reverse( iterator_type begin, iterator_type end, void (* func)( elt_type ) );
 
 // Local Variables: //
Index: src/libcfa/iterator.c
===================================================================
--- src/libcfa/iterator.c	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/iterator.c	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar  2 18:08:11 2016
-// Update Count     : 27
+// Last Modified On : Fri Jul  7 08:38:23 2017
+// Update Count     : 28
 //
 
@@ -17,17 +17,17 @@
 
 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
-void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
+void for_each( iterator_type begin, iterator_type end, void (* func)( elt_type ) ) {
 	for ( iterator_type i = begin; i != end; ++i ) {
 		func( *i );
-	}
-}
+	} // for
+} // for_each
 
 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
-void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
+void for_each_reverse( iterator_type begin, iterator_type end, void (* func)( elt_type ) ) {
 	for ( iterator_type i = end; i != begin; ) {
 		--i;
 		func( *i );
-	}
-}
+	} // for
+} // for_each_reverse
 
 // Local Variables: //
Index: src/libcfa/limits
===================================================================
--- src/libcfa/limits	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/limits	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,10 +10,9 @@
 // Created On       : Wed Apr  6 18:06:52 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Apr  6 21:08:16 2016
-// Update Count     : 6
+// Last Modified On : Fri Jul  7 09:33:57 2017
+// Update Count     : 7
 //
 
-#ifndef LIMITS_H
-#define LIMITS_H
+#pragma once
 
 // Integral Constants
@@ -110,6 +109,4 @@
 extern const long _Complex _1_SQRT_2;					// 1 / sqrt(2)
 
-#endif // LIMITS_H
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/math
===================================================================
--- src/libcfa/math	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/math	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,10 +10,9 @@
 // Created On       : Mon Apr 18 23:37:04 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 24 17:40:39 2017
-// Update Count     : 60
-//
-
-#ifndef MATH_H
-#define MATH_H
+// Last Modified On : Fri Jul  7 09:34:15 2017
+// Update Count     : 61
+//
+
+#pragma once
 
 extern "C" {
@@ -345,6 +344,4 @@
 long double scalbln( long double, long int );
 
-#endif // MATH_H
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/rational
===================================================================
--- src/libcfa/rational	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/rational	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -12,10 +12,9 @@
 // Created On       : Wed Apr  6 17:56:25 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 15 21:30:12 2017
-// Update Count     : 90
+// Last Modified On : Fri Jul  7 09:34:33 2017
+// Update Count     : 93
 //
 
-#ifndef RATIONAL_H
-#define RATIONAL_H
+#pragma once
 
 #include "iostream"
@@ -47,5 +46,5 @@
 // implementation
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 struct Rational {
 	RationalImpl numerator, denominator;				// invariant: denominator > 0
@@ -54,93 +53,92 @@
 // constructors
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, RationalImpl n );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, RationalImpl n, RationalImpl d );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, zero_t );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, one_t );
 
-// getter for numerator/denominator
+// numerator/denominator getter
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl numerator( Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl denominator( Rational(RationalImpl) r );
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 [ RationalImpl, RationalImpl ] ?=?( * [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src );
 
-// setter for numerator/denominator
+// numerator/denominator setter
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d );
 
 // comparison
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
 // arithmetic
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) +?( Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) -?( Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r );
 
 // conversion
-forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )
+forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )
 double widen( Rational(RationalImpl) r );
-forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl );  RationalImpl convert( double );} )
+forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl );  RationalImpl convert( double );} )
 Rational(RationalImpl) narrow( double f, RationalImpl md );
 
 // I/O
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 forall( dtype istype | istream( istype ) | { istype * ?|?( istype *, RationalImpl * ); } )
 istype * ?|?( istype *, Rational(RationalImpl) * );
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 forall( dtype ostype | ostream( ostype ) | { ostype * ?|?( ostype *, RationalImpl ); } )
 ostype * ?|?( ostype *, Rational(RationalImpl ) );
-
-#endif // RATIONAL_H
 
 // Local Variables: //
Index: src/libcfa/rational.c
===================================================================
--- src/libcfa/rational.c	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/rational.c	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,6 +10,6 @@
 // Created On       : Wed Apr  6 17:54:28 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 15 21:29:23 2017
-// Update Count     : 149
+// Last Modified On : Tue May 16 18:35:36 2017
+// Update Count     : 150
 // 
 
@@ -22,5 +22,5 @@
 // Calculate greatest common denominator of two numbers, the first of which may be negative. Used to reduce rationals.
 // alternative: https://en.wikipedia.org/wiki/Binary_GCD_algorithm
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 static RationalImpl gcd( RationalImpl a, RationalImpl b ) {
 	for ( ;; ) {										// Euclid's algorithm
@@ -33,5 +33,5 @@
 } // gcd
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 static RationalImpl simplify( RationalImpl * n, RationalImpl * d ) {
 	if ( *d == (RationalImpl){0} ) {
@@ -46,15 +46,15 @@
 // constructors
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r ) {
 	r{ (RationalImpl){0}, (RationalImpl){1} };
 } // rational
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, RationalImpl n ) {
 	r{ n, (RationalImpl){1} };
 } // rational
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 void ?{}( Rational(RationalImpl) * r, RationalImpl n, RationalImpl d ) {
 	RationalImpl t = simplify( &n, &d );				// simplify
@@ -66,15 +66,15 @@
 // getter for numerator/denominator
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl numerator( Rational(RationalImpl) r ) {
 	return r.numerator;
 } // numerator
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl denominator( Rational(RationalImpl) r ) {
 	return r.denominator;
 } // denominator
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 [ RationalImpl, RationalImpl ] ?=?( * [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src ) {
 	return *dest = src.[ numerator, denominator ];
@@ -83,5 +83,5 @@
 // setter for numerator/denominator
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n ) {
 	RationalImpl prev = r.numerator;
@@ -92,5 +92,5 @@
 } // numerator
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d ) {
 	RationalImpl prev = r.denominator;
@@ -104,30 +104,30 @@
 // comparison
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return l.numerator * r.denominator == l.denominator * r.numerator;
 } // ?==?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return ! ( l == r );
 } // ?!=?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return l.numerator * r.denominator < l.denominator * r.numerator;
 } // ?<?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return l.numerator * r.denominator <= l.denominator * r.numerator;
 } // ?<=?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return ! ( l <= r );
 } // ?>?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	return ! ( l < r );
@@ -137,5 +137,5 @@
 // arithmetic
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) +?( Rational(RationalImpl) r ) {
 	Rational(RationalImpl) t = { r.numerator, r.denominator };
@@ -143,5 +143,5 @@
 } // +?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) -?( Rational(RationalImpl) r ) {
 	Rational(RationalImpl) t = { -r.numerator, r.denominator };
@@ -149,5 +149,5 @@
 } // -?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	if ( l.denominator == r.denominator ) {				// special case
@@ -160,5 +160,5 @@
 } // ?+?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	if ( l.denominator == r.denominator ) {				// special case
@@ -171,5 +171,5 @@
 } // ?-?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	Rational(RationalImpl) t = { l.numerator * r.numerator, l.denominator * r.denominator };
@@ -177,5 +177,5 @@
 } // ?*?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 	if ( r.numerator < (RationalImpl){0} ) {
@@ -190,5 +190,5 @@
 // conversion
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )
+forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )
 double widen( Rational(RationalImpl) r ) {
  	return convert( r.numerator ) / convert( r.denominator );
@@ -196,5 +196,5 @@
 
 // http://www.ics.uci.edu/~eppstein/numth/frap.c
-forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); RationalImpl convert( double ); } )
+forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); RationalImpl convert( double ); } )
 Rational(RationalImpl) narrow( double f, RationalImpl md ) {
 	if ( md <= (RationalImpl){1} ) {					// maximum fractional digits too small?
@@ -227,5 +227,5 @@
 // I/O
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 forall( dtype istype | istream( istype ) | { istype * ?|?( istype *, RationalImpl * ); } )
 istype * ?|?( istype * is, Rational(RationalImpl) * r ) {
@@ -238,5 +238,5 @@
 } // ?|?
 
-forall ( otype RationalImpl | arithmetic( RationalImpl ) )
+forall( otype RationalImpl | arithmetic( RationalImpl ) )
 forall( dtype ostype | ostream( ostype ) | { ostype * ?|?( ostype *, RationalImpl ); } )
 ostype * ?|?( ostype * os, Rational(RationalImpl ) r ) {
Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/libcfa/stdlib	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,10 +10,9 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun  2 15:51:03 2017
-// Update Count     : 218
-//
-
-#ifndef STDLIB_H
-#define STDLIB_H
+// Last Modified On : Fri Jul  7 09:34:49 2017
+// Update Count     : 219
+//
+
+#pragma once
 
 //---------------------------------------
@@ -232,6 +231,4 @@
 void swap( T * t1, T * t2 );
 
-#endif // STDLIB_H
-
 // Local Variables: //
 // mode: c //
Index: src/tests/.expect/io.txt
===================================================================
--- src/tests/.expect/io.txt	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/tests/.expect/io.txt	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -4,11 +4,11 @@
 123
 
-opening delimiters 
+opening delimiters
 x (1 x [2 x {3 x =4 x $5 x £6 x ¥7 x ¡8 x ¿9 x «10
 
-closing delimiters 
-1, x 2. x 3; x 4! x 5? x 6% x 7¢ x 8» x 9) x 10] x 11} x 
+closing delimiters
+1, x 2. x 3; x 4! x 5? x 6% x 7¢ x 8» x 9) x 10] x 11} x
 
-opening/closing delimiters 
+opening/closing delimiters
 x`1`x'2'x"3"x:4:x 5 x	6	x
 7
@@ -19,12 +19,12 @@
 x
 10
-x 
+x
 
-override opening/closing delimiters 
+override opening/closing delimiters
 x ( 1 ) x 2 , x 3 :x: 4
 
-input bacis types 
+input bacis types
 
-output basic types 
+output basic types
 A 
 1 2 3 4 5 6 7 8
@@ -32,32 +32,38 @@
 1.1+2.3i 1.1-2.3i 1.1-2.3i
 
-tuples 
-1, 2, 3 3, 4, 5
+tuples
+1, 2, 3 4, 5, 6
 
-toggle separator 
+toggle separator
 1.11.21.3
 1.1+2.3i1.1-2.3i1.1-2.3i
- abcxyz 
-abcxyz 
+1.1+2.3i 1.1-2.3i1.1-2.3i
+1.1+2.3i 1.1-2.3i 1.1-2.3i
+1.1+2.3i1.1-2.3i 1.1-2.3i
+abcxyz
+abcxyz
 
-change separator 
-from "  "to " , $"
+change separator
+from " " to ", $"
 1.1, $1.2, $1.3
 1.1+2.3i, $1.1-2.3i, $1.1-2.3i
-abc, $xyz, $
-1, 2, 3, $3, 4, 5
+abc, $xyz
+1, 2, 3, $4, 5, 6
 
-from ", $"to " "
+from ", $" to " "
 1.1 1.2 1.3
 1.1+2.3i 1.1-2.3i 1.1-2.3i
-abc xyz 
-1, 2, 3 3, 4, 5
+abc xyz
+1, 2, 3 4, 5, 6
 
- 1 2 3 
+check sepOn/sepOff
+1 2 3
 12 3
- 1 2 3
 1 2 3
- 1 2 3
+1 2 3
 
+1 2 3
+
+check enable/disable
 123
 1 23
@@ -65,14 +71,14 @@
 123
 1 2 3
-123 
+123
 1 2 3
 
-1 2 3 3 4 5 " "
-1, 2, 3 3, 4, 5 ", "
-1, 2, 3 3, 4, 5
+1 2 3 4 5 6 " "
+1, 2, 3 4, 5, 6 " "
+1, 2, 3 4, 5, 6
 
 3, 4, a, 7.2
 3, 4, a, 7.2
 3 4 a 7.2
- 3 4 a 7.234a7.23 4 a 7.2
+3 4 a 7.234a7.23 4 a 7.2
 3-4-a-7.2^3^4^3-4-a-7.2
Index: src/tests/io.c
===================================================================
--- src/tests/io.c	(revision 52a90045acf5a81e6b419c6be5b7276f78d78ae0)
+++ src/tests/io.c	(revision 53a6c2a24c63e4878fd4222e11fef110ba3ee85a)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar  2 16:56:02 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul  2 09:40:58 2017
-// Update Count     : 68
+// Last Modified On : Thu Jul  6 23:26:12 2017
+// Update Count     : 78
 // 
 
@@ -104,5 +104,5 @@
 
 	sout | "tuples" | endl;
-	[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 3, [ 4, 5 ] ];
+	[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 4, [ 5, 6 ] ];
 	sout | t1 | t2 | endl;								// print tuple
 	sout | endl;
@@ -110,13 +110,16 @@
 	sout | "toggle separator" | endl;
 	sout | f | "" | d | "" | ld | endl					// floating point without separator
-		| sepDisable | fc | dc | ldc | sepEnable | endl	// complex without separator
-		| sepOn | s1 | sepOff | s2 | endl				// local separator removal
-		| s1 | "" | s2 | endl;							// C string 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 | "change separator" | endl;
-	sout | "from \" " | sepGet( sout ) | "\"";
+	sout | "from \"" | sep | "\"";
 	sepSet( sout, ", $" );								// change separator, maximum of 15 characters
-	sout | "to \" " | sepGet( sout ) | "\"" | endl;
+	sout | " to \"" | sep | "\"" | endl;
 	sout | f | d | ld | endl
 		| fc | dc | ldc | endl
@@ -124,7 +127,7 @@
 		| t1 | t2 | endl;								// print tuple
 	sout | endl;
-	sout | "from \"" | sepGet( sout ) | "\"";
+	sout | "from \"" | sep | "\" ";
 	sepSet( sout, " " );								// restore separator
-	sout | "to \"" | sepGet( sout ) | "\"" | endl;
+	sout | "to \"" | sep | "\"" | endl;
 	sout | f | d | ld | endl
 		| fc | dc | ldc | endl
@@ -133,11 +136,13 @@
 	sout | endl;
 
-	sout | sepOn | 1 | 2 | 3 | sepOn | endl;			// separator at start/end of line
+	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 | sepOn | 1 | 2 | 3 | sepOn | sepOff | endl;	// separator at start of line
-	sout | 1 | 2 | 3 | endl | sepOn;					// separator at start of next line
+	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 | "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
@@ -149,8 +154,11 @@
 	sout | endl;
 
+//	sout | fmt( d, "%8.3f" ) || endl;
+//	sout | endl;
+
 	sepSetTuple( sout, " " );							// set tuple separator from ", " to " "
-	sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
+	sout | t1 | t2 | " \"" | sep | "\"" | endl;
 	sepSetTuple( sout, ", " );							// reset tuple separator to ", "
-	sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
+	sout | t1 | t2 | " \"" | sep | "\"" | endl;
 	sout | t1 | t2 | endl;								// print tuple
 	sout | endl;
