Index: tests/designations.cfa
===================================================================
--- tests/designations.cfa	(revision 7d25f441f46f87f370858dbcac73c01f4b7bc14f)
+++ tests/designations.cfa	(revision 4bae7b4e4a434778d66ee17c5aa961b8b246ab9c)
@@ -10,7 +10,9 @@
 // Created On       : Thu Jun 29 15:26:36 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Mar 28 22:41:55 2022
-// Update Count     : 15
-//
+// Last Modified On : Thu Jun 29 11:31:21 2023
+// Update Count     : 28
+//
+
+#include <fstream.hfa>
 
 // Note: this test case has been crafted so that it compiles with both cfa and with gcc without any modifications.
@@ -21,5 +23,4 @@
 #define AT @
 #else
-int printf( const char *, ...);
 #define _ =
 #define AT
@@ -28,7 +29,5 @@
 const int indentAmt = 2;
 void indent( int level ) {
-	for ( int i = 0; i < level; ++i ) {
-		printf( " " );
-	}
+	sout | wd( level, "" ) | nonl;
 }
 
@@ -40,5 +39,5 @@
 void printA( struct A a, int level ) {
 	indent( level );
-	printf( "(A){ %d %d %p }\n", a.x, a.y, a.ptr );
+	sout | "(A){ " | a.x | a.y | a.ptr | " }";
 }
 
@@ -49,9 +48,9 @@
 void printB( struct B b, int level ) {
 	indent( level );
-	printf( "(B){\n" );
+	sout | "(B){";
 	printA( b.a0, level+indentAmt );
 	printA( b.a1, level+indentAmt );
 	indent( level );
-	printf( "}\n" );
+	sout | "}";
 }
 
@@ -63,10 +62,10 @@
 void printC( struct C c, int level ) {
 	indent( level );
-	printf( "(C){\n" );
+	sout | "(C){";
 	indent( level+indentAmt );
-	printf( "(int[]{ %d %d %d }\n", c.arr[0], c.arr[1], c.arr[2]);
+	sout | "(int[]{ " | c.arr[0] | c.arr[1] | c.arr[2] | " }";
 	printB( c.b, level+indentAmt );
 	indent( level );
-	printf( "}\n" );
+	sout | "}";
 }
 
@@ -79,5 +78,5 @@
 void printD( struct D d, int level ) {
 	indent( level);
-	printf( "(D ){ %d }\n", d.x );
+	sout | "(D){ " | d.x | "}";
 }
 
@@ -92,12 +91,12 @@
 
 struct Fred {
-    double i[3];
-    int j;
-    struct Mary {
-	struct Jane {
-	    double j;
-	} j;
-	double i;
-    } m;
+	double i[3];
+	int j;
+	struct Mary {
+		struct Jane {
+			double j;
+		} j;
+		double i;
+	} m;
 };
 struct Fred s1 AT= { .m.j _ 3 };
@@ -129,9 +128,9 @@
 #endif
 
-	printf( "=====A=====\n" );
+	sout | "=====A=====";
 	printA( y0, 0 );
 	printA( y1, 0 );
 	printA( y2, 0 );
-	printf( "=====A=====\n\n" );
+	sout | "=====A=====" | nl | nl;
 
 	// initialize only first element (z0.a.x), leaving everything else default-initialized (zero), no nested curly-braces
@@ -172,5 +171,5 @@
 	};
 
-	printf( "=====B=====\n" );
+	sout | "=====B=====";
 	printB( z0, 0 );
 	printB( z1, 0 );
@@ -179,5 +178,5 @@
 	printB( z5, 0 );
 	printB( z6, 0 );
-	printf( "=====B=====\n\n" );
+	sout | "=====B=====" | nl | nl;
 
 	// TODO: what about extra things in a nested init? are empty structs skipped??
@@ -190,7 +189,7 @@
 	};
 
-	printf( "=====C=====\n" );
+	sout | "=====C=====";
 	printC( c1, 0 );
-	printf( "=====C=====\n\n" );
+	sout | "=====C=====" | nl | nl;
 
 #if ERROR
@@ -246,10 +245,10 @@
 	};
 
-	printf( "=====E=====\n" );
+	sout | "=====E=====";
 	printA( e0.a, 0 );
 	printA( e1.a, 0 );
 	printA( e2.a, 0 );
 	printB( e3.b, 0 );
-	printf( "=====E=====\n\n" );
+	sout | "=====E=====" | nl | nl;
 
 	// special case of initialization: char[] can be initialized with a string literal
