Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 3d2852aaa38a63cf72ff318506922add30bdf089)
+++ libcfa/src/iostream.cfa	(revision 40b54179e79c7f8d042e041392f0013ec10ed81b)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Apr 22 10:50:46 2020
-// Update Count     : 933
+// Last Modified On : Thu Apr 23 17:33:32 2020
+// Update Count     : 942
 //
 
@@ -593,9 +593,10 @@
 					(ostype &)(os | fmt | "" | fmt2); \
 				} else if ( f.base == 'o' ) { \
-					if ( fmt.flags.pc && fmt.pc > 21 ) fmt.pc -= 21; \
+					if ( fmt.flags.pc && fmt.pc > 22 ) fmt.pc -= 22; \
 					if ( fmt.flags.left ) { \
 						fmt.flags.left = false; \
 						fmt.wd = 1; \
 						fmt.val = (unsigned long long int)fmt.val >> 2; \
+						printf( "L %llo %d %d '%c' %x\n", fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); \
 						fmt2.wd = 1; \
 						fmt2.val = ((msig & 0x3) << 1) + 1; \
@@ -603,7 +604,9 @@
 						sepOff( os ); \
 						fmt2.flags.left = true;	\
-						fmt2.wd = f.wd - ( ceiling( high1( fmt.val ), 3 ) + 1 ); \
+						int msigd = ceiling( high1( fmt.val ), 3 ) + 1; \
+						fmt2.wd = f.wd - (fmt.pc > msigd ? fmt.pc : msigd); \
+						if ( fmt2.wd < 0 ) fmt2.wd = 21; \
 						fmt2.flags.pc = true; fmt2.pc = 21; \
-						if ( ! fmt.flags.nobsdp ) { fmt2.wd -= 1; } \
+						if ( ! fmt.flags.nobsdp ) { if ( fmt.pc < fmt.wd ) fmt.wd -= 1; else fmt.pc -= 1; } \
 						fmt2.val = lsig & 0x7fffffffffffffff; \
 						(ostype &)(os | fmt2); \
