Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision fd4d3017a6c341cbc364e580b8b6740cb795380c)
+++ libcfa/src/iostream.cfa	(revision c7978c0d3d2a459859659a62d13584611c72d4ee)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Apr 29 07:44:02 2020
-// Update Count     : 994
+// Last Modified On : Thu Apr 30 10:50:31 2020
+// Update Count     : 1001
 //
 
@@ -463,19 +463,35 @@
 			int bits = high1( f.val );					/* position of most significant bit */ \
 			if ( bits == 0 ) bits = 1;					/* 0 value => force one bit to print */ \
-			int spaces = f.wd - bits;					/* can be negative */ \
-			if ( ! f.flags.nobsdp ) { spaces -= 2; }	/* base prefix takes space */ \
-			/* printf( "%d %d\n", bits, spaces ); */ \
+			int spaces; \
 			if ( ! f.flags.left ) {						/* right justified ? */ \
 				/* Note, base prefix then zero padding or spacing then prefix. */ \
-				if ( f.flags.pad0 || f.flags.pc ) { \
+				if ( f.flags.pc ) { \
+					spaces = f.wd - f.pc; \
+					if ( ! f.flags.nobsdp ) { spaces -= 2; } /* base prefix takes space */ \
+					if ( spaces > 0 ) fmt( os, "%*s", spaces, " " ); /* space pad */ \
 					if ( ! f.flags.nobsdp ) { fmt( os, "0%c", f.base ); } \
-					if ( f.flags.pc ) spaces = f.pc - bits; \
+					spaces = f.pc - bits; \
 					if ( spaces > 0 ) fmt( os, "%0*d", spaces, 0 ); /* zero pad */ \
 				} else { \
-					if ( spaces > 0 ) fmt( os, "%*s", spaces, " " ); /* space pad */ \
-					if ( ! f.flags.nobsdp ) { fmt( os, "0%c", f.base ); } \
+					spaces = f.wd - bits; \
+					if ( ! f.flags.nobsdp ) { spaces -= 2; } /* base prefix takes space */ \
+					if ( f.flags.pad0 ) { \
+						if ( ! f.flags.nobsdp ) { fmt( os, "0%c", f.base ); } \
+						if ( spaces > 0 ) fmt( os, "%0*d", spaces, 0 ); /* zero pad */ \
+					} else { \
+						if ( spaces > 0 ) fmt( os, "%*s", spaces, " " ); /* space pad */ \
+						if ( ! f.flags.nobsdp ) { fmt( os, "0%c", f.base ); } \
+					} /* if */ \
 				} /* if */ \
-			} else if ( ! f.flags.nobsdp ) { \
-				fmt( os, "0%c", f.base ); \
+			} else { \
+				if ( ! f.flags.nobsdp ) fmt( os, "0%c", f.base ); \
+				if ( f.flags.pc ) { \
+					spaces = f.pc - bits; \
+					if ( spaces > 0 ) fmt( os, "%0*d", spaces, 0 ); /* zero pad */ \
+					spaces = f.wd - f.pc; \
+				} else { /* pad0 flag ignored with left flag */ \
+					spaces = f.wd - bits; \
+				} /* if */ \
+				if ( ! f.flags.nobsdp ) { spaces -= 2; } /* base prefix takes space */ \
 			} /* if */ \
 			int shift = floor( bits - 1, 4 ); \
