Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 7b149bc32dd824b0b1d56d7ba3ad6199222bc3e5)
+++ libcfa/src/iostream.cfa	(revision 19e567ddd7b3d0af80fcbf6caca69894939adc7f)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 13 12:46:45 2019
-// Update Count     : 650
+// Last Modified On : Sun May 19 10:48:27 2019
+// Update Count     : 654
 //
 
@@ -23,5 +23,5 @@
 extern size_t strlen (const char *__s) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
 #include <float.h>										// DBL_DIG, LDBL_DIG
-#include <math.h>										// modff, modf, modlf
+#include <math.h>										// isfinite
 #include <complex.h>									// creal, cimag
 }
@@ -154,9 +154,17 @@
 	} // ?|?
 
+	static void checkDecPt( ostype & os, const char * buf, int len ) {
+		for ( int i = 0;; i += 1 ) {
+			if ( i == len ) { fmt( os, "." ); break; }
+			if ( buf[i] == '.' ) break;
+		} // for
+	} // checkDecPt
+
 	ostype & ?|?( ostype & os, float f ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		fmt( os, "%g", f );
-		float tempi;
-		if ( isfinite( f ) && modff( f, &tempi ) == 0.0F ) fmt( os, "." ); // always print decimal point
+		char buf[48];
+		int len = snprintf( buf, 48, "%g", f );
+		fmt( os, "%s", buf );
+		if ( isfinite( f ) ) checkDecPt( os, buf, len ); // always print decimal point
 		return os;
 	} // ?|?
@@ -167,8 +175,8 @@
 	ostype & ?|?( ostype & os, double d ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		fmt( os, "%.*lg", DBL_DIG, d );
-		// fmt( os, "%lg", d );
-		double tempi;
-		if ( isfinite( d ) && modf( d, &tempi ) == 0.0D ) fmt( os, "." ); // always print decimal point
+		char buf[48];
+		int len = snprintf( buf, 48, "%.*lg", DBL_DIG, d );
+		fmt( os, "%s", buf );
+		if ( isfinite( d ) ) checkDecPt( os, buf, len ); // always print decimal point
 		return os;
 	} // ?|?
@@ -179,8 +187,8 @@
 	ostype & ?|?( ostype & os, long double ld ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		fmt( os, "%.*Lg", LDBL_DIG, ld );
-		// fmt( os, "%Lg", ld );
-		long double tempi;
-		if ( isfinite( ld ) && modfl( ld, &tempi ) == 0.0L ) fmt( os, "." ); // always print decimal point
+		char buf[48];
+		int len = snprintf( buf, 48, "%.*Lg", LDBL_DIG, ld );
+		fmt( os, "%s", buf );
+		if ( isfinite( ld ) ) checkDecPt( os, buf, len ); // always print decimal point
 		return os;
 	} // ?|?
@@ -191,10 +199,14 @@
 	ostype & ?|?( ostype & os, float _Complex fc ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		float temp = crealf( fc ), tempi;
-		fmt( os, "%g", temp );
-		if ( isfinite( temp ) && modff( temp, &tempi ) == 0.0F ) fmt( os, "." ); // always print decimal point
-		temp = cimagf( fc );
-		fmt( os, "%+g", temp );
-		if ( isfinite( temp ) && modff( temp, &tempi ) == 0.0F ) fmt( os, "." ); // always print decimal point
+//		os | crealf( fc ) | nonl;
+		float f = crealf( fc );
+		char buf[48];
+		int len = snprintf( buf, 48, "%g", f );
+		fmt( os, "%s", buf );
+		if ( isfinite( f ) ) checkDecPt( os, buf, len ); // always print decimal point
+		f = cimagf( fc );
+		len = snprintf( buf, 48, "%+g", f );
+		fmt( os, "%s", buf );
+		if ( isfinite( f ) ) checkDecPt( os, buf, len ); // always print decimal point
 		fmt( os, "i" );
 		return os;
@@ -206,12 +218,15 @@
 	ostype & ?|?( ostype & os, double _Complex dc ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		double temp = creal( dc ), tempi;
-		fmt( os, "%.*lg", DBL_DIG, temp );
-		if ( isfinite( temp ) && modf( temp, &tempi ) == 0.0D ) fmt( os, "." ); // always print decimal point
-		temp = cimag( dc );
-		fmt( os, "%+.*lg", DBL_DIG, temp );
-		if ( isfinite( temp ) && modf( temp, &tempi ) == 0.0D ) fmt( os, "." ); // always print decimal point
+//		os | creal( dc ) | nonl;
+		double d = creal( dc );
+		char buf[48];
+		int len = snprintf( buf, 48, "%.*lg", DBL_DIG, d );
+		fmt( os, "%s", buf );
+		if ( isfinite( d ) ) checkDecPt( os, buf, len ); // always print decimal point
+		d = cimag( dc );
+		len = snprintf( buf, 48, "%+.*lg", DBL_DIG, d );
+		fmt( os, "%s", buf );
+		if ( isfinite( d ) ) checkDecPt( os, buf, len ); // always print decimal point
 		fmt( os, "i" );
-		// fmt( os, "%lg%+lgi", creal( dc ), cimag( dc ) );
 		return os;
 	} // ?|?
@@ -222,12 +237,15 @@
 	ostype & ?|?( ostype & os, long double _Complex ldc ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		long double temp = creall( ldc ), tempi;
-		fmt( os, "%.*Lg", LDBL_DIG, temp );
-		if ( isfinite( temp ) && modfl( temp, &tempi ) == 0.0L ) fmt( os, "." ); // always print decimal point
-		temp = cimagl( ldc );
-		fmt( os, "%+.*Lg", LDBL_DIG, cimagl( ldc ) );
-		if ( isfinite( temp ) && modfl( temp, &tempi ) == 0.0L ) fmt( os, "." ); // always print decimal point
+//		os | creall( ldc ) || nonl;
+		long double ld = creall( ldc );
+		char buf[48];
+		int len = snprintf( buf, 48, "%.*Lg", LDBL_DIG, ld );
+		fmt( os, "%s", buf );
+		if ( isfinite( ld ) ) checkDecPt( os, buf, len ); // always print decimal point
+		ld = cimagl( ldc );
+		len = snprintf( buf, 48, "%+.*Lg", LDBL_DIG, ld );
+		fmt( os, "%s", buf );
+		if ( isfinite( ld ) ) checkDecPt( os, buf, len ); // always print decimal point
 		fmt( os, "i" );
-		// fmt( os, "%Lg%+Lgi", creall( ldc ), cimagl( ldc ) );
 		return os;
 	} // ?|?
