Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 13600e80d758d89bf509ac8aa232e7e1de5210bb)
+++ libcfa/src/iostream.cfa	(revision c1f502c57447a91436c016f20d732eb7a2f65741)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug  9 10:10:56 2023
-// Update Count     : 1432
+// Last Modified On : Thu Aug 10 18:15:44 2023
+// Update Count     : 1442
 //
 
@@ -172,5 +172,6 @@
 				for ( i; 0 ~ @ ) { \
 					if ( i == len ) { fmt( os, "." ); break; } \
-					if ( buf[i] == '.' || buf[i] == 'e' || buf[i] == 'E' ) break; /* decimal point or scientific ? */ \
+					if ( buf[i] == '.' || buf[i] == 'e' || buf[i] == 'E' || \
+						 buf[i] == 'p' || buf[i] == 'P' ) break; /* decimal point or scientific ? */ \
 				} /* for */ \
 			} /* if */ \
@@ -465,4 +466,11 @@
 		fmtstr[star] = '%'; \
 \
+		/* Special case printing 0 in hexadecimal as printf does not put the base. */ \
+		if ( (f.base == 'x' | f.base == 'X') && ! f.flags.nobsdp && f.val == 0 ) { \
+			fmt( os, f.base == 'x' ? "0x" : "0X" ); \
+			f.wd -= 2; \
+			if ( f.wd < 0 ) f.wd = 1; \
+		} /* if */ \
+\
 		if ( ! f.flags.pc ) {							/* no precision */ \
 			fmtstr[sizeof(IFMTNP)-2] = f.base;			/* sizeof includes '\0' */ \
@@ -595,5 +603,6 @@
 			len = snprintf( buf, size, format, ##__VA_ARGS__ ); \
 			if ( isfinite( f.val ) && ( f.pc != 0 || ! f.flags.nobsdp ) ) { /* if number, print decimal point when no fraction or exponent */ \
-				for ( i = 0; i < len && buf[i] != '.' && buf[i] != 'e' && buf[i] != 'E'; i += 1 ); /* decimal point or scientific ? */ \
+				for ( i = 0; i < len && buf[i] != '.' && buf[i] != 'e' && buf[i] != 'E' && \
+								 buf[i] != 'p' && buf[i] != 'P'; i += 1 ); /* decimal point or scientific ? */ \
 				if ( i == len ) { \
 					if ( ! f.flags.left ) { \
