Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision b2ac656b65ec67cbcf7bccc00c660425d5ce0ee7)
+++ libcfa/src/iostream.cfa	(revision ed5e798d0f3f29bf7d35184b3a9df595b87a81dc)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 19 10:48:27 2019
-// Update Count     : 654
+// Last Modified On : Tue May 21 13:01:26 2019
+// Update Count     : 674
 //
 
@@ -154,17 +154,21 @@
 	} // ?|?
 
-	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
+	#define PrintWithDP( os, format, val, ... ) \
+		{ \
+			enum { size = 48 }; \
+			char buf[size]; \
+			int len = snprintf( buf, size, format, ##__VA_ARGS__, val ); \
+			fmt( os, "%s", buf ); \
+			if ( isfinite( val ) ) {					/* if number, always print decimal point */ \
+				for ( int i = 0;; i += 1 ) { \
+					if ( i == len ) { fmt( os, "." ); break; } \
+					if ( buf[i] == '.' ) break; \
+				} /* for */ \
+			} /* if */ \
+		}
 
 	ostype & ?|?( ostype & os, float f ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		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
+		PrintWithDP( os, "%g", f );
 		return os;
 	} // ?|?
@@ -175,8 +179,5 @@
 	ostype & ?|?( ostype & os, double d ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		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
+		PrintWithDP( os, "%.*lg", d, DBL_DIG );
 		return os;
 	} // ?|?
@@ -187,8 +188,5 @@
 	ostype & ?|?( ostype & os, long double ld ) {
 		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		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
+		PrintWithDP( os, "%.*Lg", ld, LDBL_DIG );
 		return os;
 	} // ?|?
@@ -201,12 +199,7 @@
 //		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
+		PrintWithDP( os, "%g", f );
 		f = cimagf( fc );
-		len = snprintf( buf, 48, "%+g", f );
-		fmt( os, "%s", buf );
-		if ( isfinite( f ) ) checkDecPt( os, buf, len ); // always print decimal point
+		PrintWithDP( os, "%+g", f );
 		fmt( os, "i" );
 		return os;
@@ -220,12 +213,7 @@
 //		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
+		PrintWithDP( os, "%.*lg", d, DBL_DIG );
 		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
+		PrintWithDP( os, "%+.*lg", d, DBL_DIG );
 		fmt( os, "i" );
 		return os;
@@ -239,12 +227,7 @@
 //		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
+		PrintWithDP( os, "%.*Lg", ld, LDBL_DIG );
 		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
+		PrintWithDP( os, "%+.*Lg", ld, LDBL_DIG );
 		fmt( os, "i" );
 		return os;
