Index: libcfa/src/collections/string.hfa
===================================================================
--- libcfa/src/collections/string.hfa	(revision efa8439ac439de6002beedb6d6dd84e54637ce0f)
+++ libcfa/src/collections/string.hfa	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Sep 14 10:58:28 2025
-// Update Count     : 311
+// Last Modified On : Sat May  2 19:09:55 2026
+// Update Count     : 322
 //
 
@@ -87,13 +87,16 @@
 
 static inline {
-	_Ostream_Manip(string) bin( string s ) { return (_Ostream_Manip(string))@{ s, 1, 0, 'b', { .all = 0 } }; }
-	_Ostream_Manip(string) oct( string s ) { return (_Ostream_Manip(string))@{ s, 1, 0, 'o', { .all = 0 } }; }
-	_Ostream_Manip(string) hex( string s ) { return (_Ostream_Manip(string))@{ s, 1, 0, 'x', { .all = 0 } }; }
-	_Ostream_Manip(string) wd( unsigned int w, string s ) { return (_Ostream_Manip(string))@{ s, w, 0, 's', { .all = 0 } }; }
-	_Ostream_Manip(string) wd( unsigned int w, unsigned int pc, string s ) { return (_Ostream_Manip(string))@{ s, w, pc, 's', { .flags.pc = true } }; }
-	_Ostream_Manip(string) & wd( unsigned int w, _Ostream_Manip(string) & fmt ) { fmt.wd = w; return fmt; }
-	_Ostream_Manip(string) & wd( unsigned int w, unsigned int pc, _Ostream_Manip(string) & fmt ) { fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; }
+	_Ostream_Manip(string) bin( string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 'b', { .all = 0 } }; }
+	_Ostream_Manip(string) oct( string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 'o', { .all = 0 } }; }
+	_Ostream_Manip(string) hex( string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 'x', { .all = 0 } }; }
+	_Ostream_Manip(string) quote( string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 's', { .flags.quote = true } }; }
+	_Ostream_Manip(string) wd( unsigned int wd, string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = wd, .pc = 0, .base = 's', { .all = 0 } }; }
+	_Ostream_Manip(string) wd( unsigned int wd, unsigned int pc, string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = wd, .pc = pc, .base = 's', { .flags.pc = true } }; }
+	_Ostream_Manip(string) & wd( unsigned int wd, _Ostream_Manip(string) & fmt ) { fmt.wd = wd; return fmt; }
+	_Ostream_Manip(string) & wd( unsigned int wd, unsigned int pc, _Ostream_Manip(string) & fmt ) { fmt.wd = wd; fmt.pc = pc; fmt.flags.pc = true; return fmt; }
 	_Ostream_Manip(string) & left( _Ostream_Manip(string) & fmt ) { fmt.flags.left = true; return fmt; }
 	_Ostream_Manip(string) & nobase( _Ostream_Manip(string) & fmt ) { fmt.flags.nobsdp = true; return fmt; }
+	_Ostream_Manip(string) & upcase( _Ostream_Manip(string) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; }
+	_Ostream_Manip(string) & quote( _Ostream_Manip(string) & fmt ) { fmt.flags.quote = true; return fmt; } \
 } // distribution
 
Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision efa8439ac439de6002beedb6d6dd84e54637ce0f)
+++ libcfa/src/iostream.cfa	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 18 08:23:40 2025
-// Update Count     : 2175
+// Last Modified On : Sun May  3 08:08:29 2026
+// Update Count     : 2241
 //
 
@@ -52,5 +52,5 @@
 		fmt( os, "%c", c );
 		if ( c == '\n' ) setNL$( os, true );
-		return nosep( os );
+		return nosep( os );								// no separator after char
 	} // ?|?
 	OSTYPE_VOID_IMPL( os, char )
@@ -204,5 +204,4 @@
 	ostype & ?|?( ostype & os, float _Complex fc ) with ( basic_ostream_table ) {
 		if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
-//		os | crealf( fc ) | nonl;
 		PRINT_WITH_DP( os, "%'g", crealf( fc ) );
 		PRINT_WITH_DP( os, "%'+g", cimagf( fc ) );
@@ -271,5 +270,4 @@
 		if ( ch == '\n' ) setNL$( os, true );			// check *AFTER* sepPrt$ call above as it resets NL flag
 		return os;
-//		return write( os, s, len );
 	} // ?|?
 	OSTYPE_VOID_IMPL( os, const char * )
@@ -645,5 +643,5 @@
 #define FLOATING_POINT_FMT_IMPL( T, DFMTNP, DFMTP ) \
 forall( ostype & | basic_ostream( ostype ) ) { \
-	static void eng( T &value, int & pc, int & exp10 ) { \
+	static void eng( T & value, int & pc, int & exp10 ) { \
 		exp10 = lrint( floor( log10( abs( value ) ) ) ); /* round to desired precision */ \
 		if ( exp10 < 0 ) exp10 -= 2; \
@@ -697,12 +695,18 @@
 			fmtuc.flags.pc = f.flags.pc;
 			fmtuc.flags.nobsdp = f.flags.nobsdp;
-//			os | fmtuc | nonl;
+			return (ostype &)(os | fmtuc);
+		} // if
+		if ( f.flags.quote ) {							// print as string
+			char qv[] = "' '";
+			qv[1] = f.val;
+			f.flags.quote = false;						// already quoted
+			_Ostream_Manip(const char *) fmtuc @= { qv, f.wd, f.pc, 's', {f.all} };
 			(ostype &)(os | fmtuc);
-			return os;
-		} // if
-
-		if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
-
-		#define CFMTNP "% * "
+			return nosep( os );							// no separator after char
+		} // if
+
+		if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
+
+		#define CFMTNP "% *c"
 		char fmtstr[sizeof(CFMTNP)];					// sizeof includes '\0'
 		memcpy( &fmtstr, CFMTNP, sizeof(CFMTNP) );
@@ -713,8 +717,7 @@
 		fmtstr[star] = '%';
 
-		fmtstr[sizeof(CFMTNP)-2] = f.base;				// sizeof includes '\0'
 		// printf( "%d %s\n", f.wd, &fmtstr[star] );
 		fmt( os, &fmtstr[star], f.wd, f.val );
-		return os;
+		return nosep( os );								// no separator after char
 	} // ?|?
 	OSTYPE_VOID_IMPL( os, _Ostream_Manip(char) )
@@ -733,15 +736,25 @@
 			for ( i; 0 ~ @ : @; f.val[i] != '\0' ) {
 				fmtuc.val = f.val[i];
-//				os | fmtuc | nonl;
 				(ostype &)(os | fmtuc);
 			} // for
 			return os;
 		} // if
+		if ( f.flags.quote ) {							// print as string
+			int len = strlen( f.val );
+			char qv[len + 3];							// space for quotes and '\0'
+			qv[0] = '"';								// copy string surrounded with quotes
+			strcpy( &qv[1], f.val );
+			qv[len + 1] = '"';
+			qv[len + 2] = '\0';
+			f.flags.quote = false;						// already quoted
+			_Ostream_Manip(const char *) fmtuc @= { qv, f.wd, f.pc, 's', {f.all} };
+			return (ostype &)(os | fmtuc);
+		} // if
 
 		if ( f.val[0] != '\0' &&						// null string => no leading separator
 			 sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
 
-		#define SFMTNP "% * "
-		#define SFMTP "% *.* "
+		#define SFMTNP "% *s"
+		#define SFMTP "% *.*s"
 		char fmtstr[sizeof(SFMTP)];						// sizeof includes '\0'
 		if ( ! f.flags.pc ) memcpy( &fmtstr, SFMTNP, sizeof(SFMTNP) );
@@ -755,8 +768,6 @@
 		if ( ! f.flags.pc ) {							// no precision
 			// printf( "%d %s\n", f.wd, &fmtstr[star] );
-			fmtstr[sizeof(SFMTNP)-2] = f.base;			// sizeof includes '\0'
 			fmt( os, &fmtstr[star], f.wd, f.val );
 		} else {										// precision
-			fmtstr[sizeof(SFMTP)-2] = f.base;			// sizeof includes '\0'
 			// printf( "%d %d %s\n", f.wd, f.pc, &fmtstr[star] );
 			fmt( os, &fmtstr[star], f.wd, f.pc, f.val );
@@ -796,8 +807,8 @@
 		for () {
 			int args = fmt( is, "%c", &temp );			// can be called with EOF on
-			if ( eof( is ) ) throwResume ExceptionInst( end_of_file );
+		  if ( eof( is ) ) throwResume ExceptionInst( end_of_file );
 			assert( args == 1 );						// if not EOF => a single character must be read
 			// do not overwrite parameter with newline unless appropriate
-			if ( temp != '\n' || getANL$( is ) ) { c = temp; break; }
+		  if ( temp != '\n' || getANL$( is ) ) { c = temp; break; }
 		} // for
 		return is;
Index: libcfa/src/iostream.hfa
===================================================================
--- libcfa/src/iostream.hfa	(revision efa8439ac439de6002beedb6d6dd84e54637ce0f)
+++ libcfa/src/iostream.hfa	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jan 14 21:23:53 2026
-// Update Count     : 772
+// Last Modified On : Sat May  2 18:48:56 2026
+// Update Count     : 780
 //
 
@@ -193,4 +193,5 @@
 	unsigned char sign:1;								// plus / minus sign
 	unsigned char pad0:1;								// zero pad
+	unsigned char quote:1;								// print quotes
 };
 
@@ -224,7 +225,7 @@
 	_Ostream_Manip(T) & upcase( _Ostream_Manip(T) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; } \
 	_Ostream_Manip(T) & nobase( _Ostream_Manip(T) & fmt ) { fmt.flags.nobsdp = true; return fmt; } \
-	_Ostream_Manip(T) & pad0( _Ostream_Manip(T) & fmt ) { fmt.flags.pad0 = true; return fmt; } \
 	_Ostream_Manip(T) sign( T val ) { return (_Ostream_Manip(T))@{ .val = val, .wd = 1, .pc = 0, .base = CODE, { .flags.sign = true } }; } \
 	_Ostream_Manip(T) & sign( _Ostream_Manip(T) & fmt ) { fmt.flags.sign = true; return fmt; } \
+	_Ostream_Manip(T) & pad0( _Ostream_Manip(T) & fmt ) { fmt.flags.pad0 = true; return fmt; } \
 } /* distribution */ \
 forall( ostype & | basic_ostream( ostype ) ) { \
@@ -288,9 +289,11 @@
 	_Ostream_Manip(char) oct( char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'o', { .all = 0 } }; }
 	_Ostream_Manip(char) hex( char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'x', { .all = 0 } }; }
-	_Ostream_Manip(char) wd( unsigned int wd, char c ) { return (_Ostream_Manip(char))@{ c, wd, 0, .base = 'c', { .all = 0 } }; }
+	_Ostream_Manip(char) quote( char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'c', { .flags.quote = true } }; }
+	_Ostream_Manip(char) wd( unsigned int wd, char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = wd, .pc = 0, .base = 'c', { .all = 0 } }; }
 	_Ostream_Manip(char) & wd( unsigned int wd, _Ostream_Manip(char) & fmt ) { fmt.wd = wd; return fmt; }
 	_Ostream_Manip(char) & left( _Ostream_Manip(char) & fmt ) { fmt.flags.left = true; return fmt; }
 	_Ostream_Manip(char) & upcase( _Ostream_Manip(char) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; }
 	_Ostream_Manip(char) & nobase( _Ostream_Manip(char) & fmt ) { fmt.flags.nobsdp = true; return fmt; }
+	_Ostream_Manip(char) & quote( _Ostream_Manip(char) & fmt ) { fmt.flags.quote = true; return fmt; }
 } // distribution
 forall( ostype & | basic_ostream( ostype ) ) {
@@ -305,10 +308,13 @@
 	_Ostream_Manip(const char *) oct( const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 'o', { .all = 0 } }; }
 	_Ostream_Manip(const char *) hex( const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 'x', { .all = 0 } }; }
-	_Ostream_Manip(const char *) wd( unsigned int wd, const char s[] ) { return (_Ostream_Manip(const char *))@{ s, wd, 0, .base = 's', { .all = 0 } }; }
-	_Ostream_Manip(const char *) wd( unsigned int wd, unsigned int pc, const char s[] ) { return (_Ostream_Manip(const char *))@{ s, .wd = wd, .pc = pc, .base = 's', { .flags.pc = true } }; }
+	_Ostream_Manip(const char *) quote( const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 's', { .flags.quote = true } }; }
+	_Ostream_Manip(const char *) wd( unsigned int wd, const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = wd, .pc = 0, .base = 's', { .all = 0 } }; }
+	_Ostream_Manip(const char *) wd( unsigned int wd, unsigned int pc, const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = wd, .pc = pc, .base = 's', { .flags.pc = true } }; }
 	_Ostream_Manip(const char *) & wd( unsigned int wd, _Ostream_Manip(const char *) & fmt ) { fmt.wd = wd; return fmt; }
 	_Ostream_Manip(const char *) & wd( unsigned int wd, unsigned int pc, _Ostream_Manip(const char *) & fmt ) { fmt.wd = wd; fmt.pc = pc; fmt.flags.pc = true; return fmt; }
 	_Ostream_Manip(const char *) & left( _Ostream_Manip(const char *) & fmt ) { fmt.flags.left = true; return fmt; }
+	_Ostream_Manip(const char *) & upcase( _Ostream_Manip(const char *) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; }
 	_Ostream_Manip(const char *) & nobase( _Ostream_Manip(const char *) & fmt ) { fmt.flags.nobsdp = true; return fmt; }
+	_Ostream_Manip(const char *) & quote( _Ostream_Manip(const char *) & fmt ) { fmt.flags.quote = true; return fmt; } \
 } // distribution
 forall( ostype & | basic_ostream( ostype ) ) {
Index: tests/collections/.expect/string-ostream.txt
===================================================================
--- tests/collections/.expect/string-ostream.txt	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
+++ tests/collections/.expect/string-ostream.txt	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
@@ -0,0 +1,9 @@
+string
+abcd "abcd"     abcd   "abcd"   abcd abcd     "abcd"  
+abcd "abcd"     abcd   "abcd"   abcd abcd     "abcd"  
+141 142 143 144 0141 0142 0143 0144      141      142      143      144 0141     0142     0143     0144    
+141 142 143 144 0141 0142 0143 0144      141      142      143      144 0141     0142     0143     0144    
+61 62 63 64 0X61 0X62 0X63 0X64       61       62       63       64 0x61     0x62     0x63     0x64    
+61 62 63 64 0X61 0X62 0X63 0X64       61       62       63       64 0x61     0x62     0x63     0x64    
+1100001 1100010 1100011 1100100 0B1100001 0B1100010 0B1100011 0B1100100      1100001      1100010      1100011      1100100 0b1100001 0b1100010 0b1100011 0b1100100
+1100001 1100010 1100011 1100100 0B1100001 0B1100010 0B1100011 0B1100100      1100001      1100010      1100011      1100100 0b1100001 0b1100010 0b1100011 0b1100100
Index: tests/collections/string-ostream.cfa
===================================================================
--- tests/collections/string-ostream.cfa	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
+++ tests/collections/string-ostream.cfa	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
@@ -0,0 +1,35 @@
+//                               -*- Mode: C -*- 
+// 
+// Copyright (C) Peter A. Buhr 2026
+// 
+// string-ostream.cfa -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Sat May  2 18:02:34 2026
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sat May  2 19:06:22 2026
+// Update Count     : 7
+// 
+
+#include <fstream.hfa>
+#include <string.hfa>
+
+int main() {
+	sout | "string";
+	const char * cs = "abcd";
+	sout | cs | quote( cs ) | wd(8,cs) | quote(wd(8,cs)) | wd(6,8,cs) | left(wd(8,cs)) | quote(left(wd(8,cs)));
+	string s = "abcd";
+	sout | s | quote( s ) | wd(8,s) | quote(wd(8,s)) | wd(6,8,s) | left(wd(8,s)) | quote(left(wd(8,s)));
+
+	sout | nobase(oct(cs)) | upcase(oct(cs)) | nobase(wd(8,oct(cs))) | left(wd(-8,oct(cs)));
+	sout | nobase(oct(s)) | upcase(oct(s)) | nobase(wd(8,oct(s))) | left(wd(-8,oct(s)));
+	sout | nobase(hex(cs)) | upcase(hex(cs)) | nobase(wd(8,hex(cs))) | left(wd(-8,hex(cs)));
+	sout | nobase(hex(s)) | upcase(hex(s)) | nobase(wd(8,hex(s))) | left(wd(-8,hex(s)));
+	sout | nobase(bin(cs)) | upcase(bin(cs)) | nobase(wd(12,bin(cs))) | left(wd(-12,bin(cs)));
+	sout | nobase(bin(s)) | upcase(bin(s)) | nobase(wd(12,bin(s))) | left(wd(-12,bin(s)));
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa -Wall -Wextra string-ostream.cfa" //
+// End: //
Index: tests/io/.expect/manipulatorsOutput1.arm64.txt
===================================================================
--- tests/io/.expect/manipulatorsOutput1.arm64.txt	(revision efa8439ac439de6002beedb6d6dd84e54637ce0f)
+++ tests/io/.expect/manipulatorsOutput1.arm64.txt	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
@@ -38,13 +38,13 @@
 
 char
-a  a     a a     141 0141 61 0x61     0x61     0X61 a               a
-a  a     a a     141 0141 61 0x61     0x61     0X61 a               a
+a'a' ' '       a     'a'    aa    
+a'a' ' '       a     'a'    aa    
+141 0141      141 0141     61 0x61       61 0x61    
+141 0141      141 0141     61 0X61       61 0x61     1100001 0B1100001      1100001 0b1100001
 
-string
-abcd     abcd   abcd abcd    
-abcd     abcd   abcd abcd    
-
-binary string
-0b110000 0b1100001 0b1100010 0b1100011 0b1100100 0141 0142 0143 0144 0x61 0x62 0x63 0x64
-110000 1100001 1100010 1100011 1100100 141 142 143 144 61 62 63 64
-  110000  1100001  1100010  1100011  1100100  141  142  143  144  61  62  63  64
+char *
+abcd "abcd"     abcd   "abcd"   abcd abcd     "abcd"  
+abcd "abcd"     abcd   "abcd"   abcd abcd     "abcd"  
+141 142 143 144 0141 0142 0143 0144      141      142      143      144 0141     0142     0143     0144    
+61 62 63 64 0X61 0X62 0X63 0X64       61       62       63       64 0x61     0x62     0x63     0x64    
+1100001 1100010 1100011 1100100 0B1100001 0B1100010 0B1100011 0B1100100      1100001      1100010      1100011      1100100 0b1100001 0b1100010 0b1100011 0b1100100
Index: tests/io/.expect/manipulatorsOutput1.x64.txt
===================================================================
--- tests/io/.expect/manipulatorsOutput1.x64.txt	(revision efa8439ac439de6002beedb6d6dd84e54637ce0f)
+++ tests/io/.expect/manipulatorsOutput1.x64.txt	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
@@ -38,13 +38,13 @@
 
 char
-a  a     a a     141 0141 61 0x61     0x61     0X61 a               a
-a  a     a a     141 0141 61 0x61     0x61     0X61 a               a
+a'a' ' '       a     'a'    aa    
+a'a' ' '       a     'a'    aa    
+141 0141      141 0141     61 0x61       61 0x61    
+141 0141      141 0141     61 0X61       61 0x61     1100001 0B1100001      1100001 0b1100001
 
-string
-abcd     abcd   abcd abcd    
-abcd     abcd   abcd abcd    
-
-binary string
-0b110000 0b1100001 0b1100010 0b1100011 0b1100100 0141 0142 0143 0144 0x61 0x62 0x63 0x64
-110000 1100001 1100010 1100011 1100100 141 142 143 144 61 62 63 64
-  110000  1100001  1100010  1100011  1100100  141  142  143  144  61  62  63  64
+char *
+abcd "abcd"     abcd   "abcd"   abcd abcd     "abcd"  
+abcd "abcd"     abcd   "abcd"   abcd abcd     "abcd"  
+141 142 143 144 0141 0142 0143 0144      141      142      143      144 0141     0142     0143     0144    
+61 62 63 64 0X61 0X62 0X63 0X64       61       62       63       64 0x61     0x62     0x63     0x64    
+1100001 1100010 1100011 1100100 0B1100001 0B1100010 0B1100011 0B1100100      1100001      1100010      1100011      1100100 0b1100001 0b1100010 0b1100011 0b1100100
Index: tests/io/.expect/manipulatorsOutput1.x86.txt
===================================================================
--- tests/io/.expect/manipulatorsOutput1.x86.txt	(revision efa8439ac439de6002beedb6d6dd84e54637ce0f)
+++ tests/io/.expect/manipulatorsOutput1.x86.txt	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
@@ -38,13 +38,14 @@
 
 char
-a  a     a a     141 0141 61 0x61     0x61     0X61 a               a
-a  a     a a     141 0141 61 0x61     0x61     0X61 a               a
+a'a' ' '       a     'a'    aa    
+a'a' ' '       a     'a'    aa    
+141 0141      141 0141     61 0x61       61 0x61    
+141 0141      141 0141     61 0X61       61 0x61     1100001 0B1100001      1100001 0b1100001
 
-string
-abcd     abcd   abcd abcd    
-abcd     abcd   abcd abcd    
+char *
+abcd "abcd"     abcd   "abcd"   abcd abcd     "abcd"  
+abcd "abcd"     abcd   "abcd"   abcd abcd     "abcd"  
+141 142 143 144 0141 0142 0143 0144      141      142      143      144 0141     0142     0143     0144    
+61 62 63 64 0X61 0X62 0X63 0X64       61       62       63       64 0x61     0x62     0x63     0x64    
+1100001 1100010 1100011 1100100 0B1100001 0B1100010 0B1100011 0B1100100      1100001      1100010      1100011      1100100 0b1100001 0b1100010 0b1100011 0b1100100
 
-binary string
-0b110000 0b1100001 0b1100010 0b1100011 0b1100100 0141 0142 0143 0144 0x61 0x62 0x63 0x64
-110000 1100001 1100010 1100011 1100100 141 142 143 144 61 62 63 64
-  110000  1100001  1100010  1100011  1100100  141  142  143  144  61  62  63  64
Index: tests/io/manipulatorsOutput1.cfa
===================================================================
--- tests/io/manipulatorsOutput1.cfa	(revision efa8439ac439de6002beedb6d6dd84e54637ce0f)
+++ tests/io/manipulatorsOutput1.cfa	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
@@ -7,6 +7,6 @@
 // Created On       : Sat Jun  8 18:04:11 2019
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Apr 10 08:42:15 2021
-// Update Count     : 18
+// Last Modified On : Sat May  2 18:50:48 2026
+// Update Count     : 65
 // 
 
@@ -100,18 +100,19 @@
 
 	sout | nl | "char";
-	char c = 'a';
-	printf( "%c %2c %5c %-5c %hho %#hho %hhx %#hhx %#8hhx %#8hhX %-8c %8c\n", c, c, c, c, c, c, c, c, c, c, c, c );
-	sout | c | ' ' | wd(2,c) | wd(5,c) | left(wd(5,c)) | nobase(oct(c)) | oct(c) | nonl;
-	sout | nobase(hex(c)) | hex(c) | wd(8,hex(c)) | upcase(wd(8,hex(c))) | left(wd(8,c)) | wd(8,c);
+	char c = 'a', * qc = "'a'";
+	printf( "%c%s%c'%c'%8c%8s%5c%-5c\n", c, qc, ' ', ' ', c, qc, c, c );
+	sout | c | quote(c) | ' ' | quote(' ') | wd(8,c) | quote( wd(8,c) ) | wd(5,c) | left(wd(5,c));
+	printf( "%hho %#hho %8hho %#-8hho %hhx %#hhx %8hhx %#-8hhx\n", c, c, c, c, c, c, c, c );
+	sout | nobase(oct(c)) | upcase(oct(c)) | nobase(wd(8,oct(c))) | left(wd(-8,oct(c))) | nonl;
+	sout | nobase(hex(c)) | upcase(hex(c)) | nobase(wd(8,hex(c))) | left(wd(-8,hex(c))) | nonl;
+	sout | nobase(bin(c)) | upcase(bin(c)) | nobase(wd(12,bin(c))) | left(wd(-12,bin(c)));
 
-	sout | nl | "string";
-	const char * s = "abcd";
-	printf( "%s %8s %6.8s %-8s\n", s, s, s, s );
-	sout | s | wd(8,s) | wd(6,8,s) | left(wd(8,s));
-
-	sout | nl | "binary string";
-	sout | bin("0") | bin(s) | oct(s) | hex(s);
-	sout | nobase(bin("0")) | nobase(bin(s)) | nobase(oct(s)) | nobase(hex(s));
-	sout | nobase(wd(8,bin("0"))) | nobase(wd(8,bin(s))) | nobase(wd(4,oct(s))) | nobase(wd(3,hex(s)));
+	sout | nl | "char *";
+	const char * s = "abcd", * qs = "\"abcd\"";
+	printf( "%s %s %8s %8s %6.8s %-8s %-8s\n", s, qs, s, qs, s, s, qs );
+	sout | s | quote( s ) | wd(8,s) | quote(wd(8,s)) | wd(6,8,s) | left(wd(8,s)) | quote(left(wd(8,s)));
+	sout | nobase(oct(s)) | upcase(oct(s)) | nobase(wd(8,oct(s))) | left(wd(-8,oct(s)));
+	sout | nobase(hex(s)) | upcase(hex(s)) | nobase(wd(8,hex(s))) | left(wd(-8,hex(s)));
+	sout | nobase(bin(s)) | upcase(bin(s)) | nobase(wd(12,bin(s))) | left(wd(-12,bin(s)));
 }
 
