Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 1076d05688c3384e8cffb420e43cc293bc3d3d7c)
+++ libcfa/src/iostream.cfa	(revision 1488f94b2c5f54e383b5cd7a37fbea2c23ba5d54)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Apr 30 10:50:31 2020
-// Update Count     : 1001
+// Last Modified On : Sat May  2 18:30:25 2020
+// Update Count     : 1017
 //
 
@@ -583,27 +583,20 @@
 					if ( fmt.flags.pc && fmt.pc > 64 ) fmt.pc -= 64; else { fmt.flags.pc = false; fmt.pc = 0; } \
 					if ( fmt.flags.left ) { \
-						fmt2.wd = fmt.wd; \
-						if ( fmt2.wd <= 64 ) { \
-							fmt2.wd = 64; \
-						} else { \
-							if ( fmt.pc > 0 ) { \
-								fmt2.wd -= fmt.pc; \
-							} else { \
-								fmt2.wd = fmt.wd - high1( msig ); \
-							} /* if */ \
-							if ( ! fmt.flags.nobsdp ) fmt2.wd -= 2; \
-							if ( fmt2.wd < 0 ) fmt2.wd = 0; \
-							fmt2.flags.left = true; \
-							fmt.wd = 0; \
-						} /* if */ \
-						printf( "left %d %d %x\n", f.wd, f.pc, f.all ); \
-						printf( "left %d %d %x\n", fmt.wd, fmt.pc, fmt.all ); \
+						fmt.flags.left = false; \
+						fmt.wd = 0; \
+						/* printf( "L %llo %llo %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); */ \
+						fmt2.flags.left = true;	\
+						int msigd = high1( msig ); \
+						fmt2.wd = f.wd - (fmt.pc > msigd ? fmt.pc : msigd); \
+						if ( ! fmt.flags.nobsdp ) fmt2.wd -= 2; /* compensate for 0b base specifier */ \
+						if ( (int)fmt2.wd < 64 ) fmt2.wd = 64; /* cast deals with negative value */ \
+						fmt2.flags.pc = true; fmt2.pc = 64; \
 					} else { \
 						if ( fmt.wd > 64 ) fmt.wd -= 64; \
-						/* if ( ! fmt.flags.nobsdp && fmt.pc < fmt.wd ) fmt.wd -= 1; */ \
+						else fmt.wd = 1; \
+						/* printf( "R %llo %llo %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); */ \
 						fmt2.wd = 64; \
-						/* printf( "R %llo %llo %llo %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt2.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); */ \
 					} /* if */ \
-					/* printf( "\nC %llo %d %d '%c' %x\n", fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
+					/* printf( "C %llo %d %d '%c' %x\n", fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
 					(ostype &)(os | fmt | "" | fmt2); \
 				} else if ( f.base == 'o' ) { \
@@ -614,18 +607,16 @@
 						fmt.flags.left = false; \
 						fmt.wd = 0; \
-						/* if ( fmt2.val > 1 && fmt.flags.pc && fmt.pc > 0 ) fmt.pc -= 1; */ \
 						/* printf( "L %llo %llo %llo %d %d '%c' %x %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all, fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
 						(ostype &)(os | fmt | "" | fmt2); \
 						sepOff( os ); \
 						fmt2.flags.left = true;	\
-						int msigd = ceiling( high1( fmt.val ), 3 ) + 1; \
-						fmt2.wd = f.wd - (fmt.pc > msigd ? fmt.pc : msigd) - 1; \
+						int msigd = ceiling( high1( fmt.val ), 3 ); \
+						fmt2.wd = f.wd - (fmt.pc > msigd ? fmt.pc : msigd); \
+						if ( ! fmt.flags.nobsdp ) fmt2.wd -= 1; /* compensate for 0 base specifier */ \
 						if ( (int)fmt2.wd < 21 ) fmt2.wd = 21; /* cast deals with negative value */ \
 						fmt2.flags.pc = true; fmt2.pc = 21; \
 					} else { \
 						if ( fmt.wd > 22 ) fmt.wd -= 22; \
-						/* compensate for leading 0 */ \
-						/*if ( ! fmt.flags.nobsdp && fmt.pc < fmt.wd ) fmt.wd -= 1;*/ \
-						fmt2.wd = 1; \
+						else fmt.wd = 1; \
 						/* printf( "R %llo %llo %llo %d %d '%c' %x %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all, fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
 						(ostype &)(os | fmt | "" | fmt2); \
@@ -636,26 +627,23 @@
 					/* printf( "\nC %llo %d %d '%c' %x\n", fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
 					(ostype &)(os | fmt2); \
-				} else { \
-					if ( fmt.flags.pc && fmt.pc > 16 ) fmt.pc -= 16; \
+				} else { /* f.base == 'x'  | f.base == 'X' */ \
+					if ( fmt.flags.pc && fmt.pc > 16 ) fmt.pc -= 16; else { fmt.flags.pc = false; fmt.pc = 0; } \
 					if ( fmt.flags.left ) { \
-						fmt2.wd = fmt.wd; \
-						if ( fmt2.wd <= 16 ) { \
-							fmt2.wd = 16; \
-						} else { \
-							if ( fmt.pc > 0 ) { \
-								fmt2.wd -= fmt.pc; \
-							} else { \
-								fmt2.wd = fmt.wd - ceiling2( high1( msig ), 4 ) / 4; \
-							} /* if */ \
-							if ( ! fmt.flags.nobsdp ) fmt2.wd -= 2; \
-							if ( fmt2.wd < 0 ) fmt2.wd = 0; \
-							fmt2.flags.left = true; \
-							fmt.wd = 0; \
-						} /* if */ \
+						fmt.flags.left = false; \
+						fmt.wd = 0; \
+						/* printf( "L %llo %llo %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); */ \
+						fmt2.flags.left = true;	\
+						int msigd = high1( msig ); \
+						fmt2.wd = f.wd - (fmt.pc > msigd ? fmt.pc : msigd); \
+						if ( ! fmt.flags.nobsdp ) fmt2.wd -= 2; /* compensate for 0x base specifier */ \
+						if ( (int)fmt2.wd < 16 ) fmt2.wd = 16; /* cast deals with negative value */ \
+						fmt2.flags.pc = true; fmt2.pc = 16; \
 					} else { \
+						if ( fmt.wd > 16 ) fmt.wd -= 16; \
+						else fmt.wd = 1; \
+						/* printf( "R %llo %llo %llo %d %d '%c' %x\n", msig, lsig, fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); */ \
 						fmt2.wd = 16; \
-						if ( fmt.wd > 16 ) fmt.wd -= 16; \
 					} /* if */ \
-					fmt2.pc = 16; fmt2.flags.pc = true; \
+					/* printf( "C %llo %d %d '%c' %x\n", fmt2.val, fmt2.wd, fmt2.pc, fmt2.base, fmt2.all ); */ \
 					(ostype &)(os | fmt | "" | fmt2); \
 				} /* if */ \
