Index: tests/coroutine/.expect/fmtLines.txt
===================================================================
--- tests/coroutine/.expect/fmtLines.txt	(revision c8f0199daff0565cb3f18b3bc6e07c382220342a)
+++ tests/coroutine/.expect/fmtLines.txt	(revision 5c6d4391a774a836741d9e89d2cd3febae9e4d44)
@@ -9,70 +9,73 @@
 E" d  istr  ibut  ed w  ith   
 Cfor  all.  ////   fmt  Line  
-s.cc   --/  ///   Auth  or    
-             : P  eter   A.   
-Buhr  // C  reat  ed O  n     
-      : Su  n Se  p 17   21:  
-56:1  5 20  17//   Las  t Mo  
-difi  ed B  y :   Pete  r A.  
- Buh  r//   Last   Mod  ifie  
-d On   : F  ri M  ar 2  2 13  
-:41:  03 2  019/  / Up  date  
- Cou  nt       :   33/  /#in  
-clud  e <f  stre  am.h  fa>#  
-incl  ude   <cor  outi  ne.h  
-fa>c  orou  tine   For  mat   
-{	ch  ar c  h;		  				  				  
-	//   used   for   com  muni  
-cati  on	i  nt g  , b;  				  
-				  			/  / gl  obal   bec  
-ause   use  d in   des  truc  
-tor}  ;voi  d ?{  }( F  orma  
-t &   fmt   ) {      r  esum  
-e( f  mt )  ;			  				  			/  
-/ st  art   coro  utin  e}vo  
-id ^  ?{}(   For  mat   & fm  
-t )   {      if   ( fm  t.g   
-!= 0   ||   fmt.  b !=   0 )  
- sou  t |   nl;}  void   mai  
-n( F  orma  t &   fmt   ) {	  
-for   ( ;;   ) {  				  				  
-		//   for   as   many   cha  
-ract  ers	  	for   ( f  mt.g  
- = 0  ; fm  t.g   < 5;   fmt  
-.g +  = 1   ) {	  	//   grou  
+s.cc   --   form  at c  hara  
+cter  s in  to b  lock  s of  
+ 4 a  nd g  roup  s of   5 b  
+lock  s pe  r li  ne//  // A  
+utho  r                 : Pe  
+ter   A. B  uhr/  / Cr  eate  
+d On           :   Sun   Sep  
+ 17   21:5  6:15   201  7//   
+Last   Mod  ifie  d By   : P  
+eter   A.   Buhr  // L  ast   
+Modi  fied   On   : Sa  t Au  
+g 17   14:  26:0  3 20  24//  
+ Upd  ate   Coun  t       :   
+60//  #inc  lude   <fs  trea  
+m.hf  a>#i  nclu  de <  coro  
+utin  e.hf  a>co  rout  ine   
+Form  at {  	cha  r ch  ;			  
+				  				  // u  sed   for   
+comm  unic  atio  n	in  t g,  
+ b;	  				  				  		//   glo  
+bal   beca  use   used   in   
+dest  ruct  or};  void   mai  
+n( F  orma  t &   fmt   ) wi  
+th(   fmt   ) {	  for   () {  
+				  				  			/  / fo  r as  
+ man  y ch  arac  ters  		fo  
+r (   g =   0; g   < 5  ; g   
++= 1   ) {  				  	//   grou  
 ps o  f 5   bloc  ks		  	for  
- ( f  mt.b   = 0  ; fm  t.b   
-< 4;   fmt  .b +  = 1   ) {	  
-// b  lock  s of   4 c  hara  
-cter  s			  	for   ( ;  ; )   
-{			  				  // f  or n  ewli  
-ne c  hara  cter  s			  		su  
-spen  d;		  			i  f (   fmt.  
-ch !  = '\  n' )   bre  ak;	  
-	//   igno  re n  ewli  ne		  
-		}   // f  or		  		so  ut |  
- fmt  .ch;  				  			/  / pr  
-int   char  acte  r			  } //  
- for  			s  out   | "    ";	  
-				  			/  / pr  int   bloc  
-k se  para  tor	  	} /  / fo  
-r		s  out   | nl  ;			  				  
-		//   pri  nt g  roup   sep  
-arat  or	}   //   for}   //   
-main  void   prt  ( Fo  rmat  
- & f  mt,   char   ch   ) {   
-   f  mt.c  h =   ch;      r  
-esum  e( f  mt )  ;} /  / pr  
-tint   mai  n()   {	Fo  rmat  
- fmt  ;	ch  ar c  h;	f  or (  
- ;;   ) {	  	sin   | c  h;		  
-				  				  // r  ead   one   
-char  acte  r	    if (   eof  
-( si  n )   ) br  eak;  				  
-			/  / eo  f ?	  	prt  ( fm  
-t, c  h );  	} /  / fo  r} /  
-/ ma  in//   Loc  al V  aria  
-bles  : //  // t  ab-w  idth  
-: 4   ////   com  pile  -com  
-mand  : "c  fa f  mtLi  nes.  
-cfa"   ///  / En  d: /  /
+ ( b   = 0  ; b   < 4;   b +  
+= 1   ) {	  			/  / bl  ocks  
+ of   4 ch  arac  ters  				  
+for   () {  				  				  // f  
+or n  ewli  ne c  hara  cter  
+s			  		su  spen  d;		  		    
+if (   ch   != '  \n'   ) br  
+eak;  				  // i  gnor  e ne  
+wlin  e			  	} /  / fo  r			  
+	sou  t |   ch;	  				  			/  
+/ pr  int   char  acte  r			  
+} //   for  			s  out   | "   
+ ";	  				  			/  / pr  int   
+bloc  k se  para  tor	  	} /  
+/ fo  r		s  out   | nl  ;			  
+				  			/  / pr  int   grou  
+p se  para  tor	  } //   for  
+} //   mai  nvoi  d ?{  }( F  
+orma  t &   fmt   ) {	  resu  
+me(   fmt   );		  				  				  
+// p  rime   (st  art)   cor  
+outi  ne}v  oid   ^?{}  ( Fo  
+rmat   & f  mt )   wit  h( f  
+mt )   {	i  f (   g !=   0 |  
+| b   != 0   ) s  out   | nl  
+;}vo  id f  orma  t( F  orma  
+t &   fmt   ) {	  resu  me(   
+fmt   );}   // f  orma  tint  
+ mai  n()   {	Fo  rmat   fmt  
+;	so  ut |   nlO  ff;	  				  
+				  	//   turn   off   aut  
+o ne  wlin  e	tr  y {	  	for  
+ ()   {			  				  			/  / re  
+ad u  ntil   end   of   file  
+			s  in |   fmt  .ch;  				  
+				  // r  ead   one   char  
+acte  r			  form  at(   fmt   
+);		  				  		//   pus  h ch  
+arac  ter   for   form  atti  
+ng		  } //   for  	} c  atch  
+( en  d_of  _fil  e *   ) {	  
+} //   try  } //   mai  n
Index: tests/coroutine/.in/fmtLines.txt
===================================================================
--- tests/coroutine/.in/fmtLines.txt	(revision c8f0199daff0565cb3f18b3bc6e07c382220342a)
+++ tests/coroutine/.in/fmtLines.txt	(revision 5c6d4391a774a836741d9e89d2cd3febae9e4d44)
@@ -5,11 +5,11 @@
 // file "LICENCE" distributed with Cforall.
 //
-// fmtLines.cc --
+// fmtLines.cc -- format characters into blocks of 4 and groups of 5 blocks per line
 //
 // Author           : Peter A. Buhr
 // Created On       : Sun Sep 17 21:56:15 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 22 13:41:03 2019
-// Update Count     : 33
+// Last Modified On : Sat Aug 17 14:26:03 2024
+// Update Count     : 60
 //
 
@@ -22,46 +22,42 @@
 };
 
-void ?{}( Format & fmt ) {
-    resume( fmt );										// start coroutine
-}
-
-void ^?{}( Format & fmt ) {
-    if ( fmt.g != 0 || fmt.b != 0 ) sout | nl;
-}
-
-void main( Format & fmt ) {
-	for ( ;; ) {										// for as many characters
-		for ( fmt.g = 0; fmt.g < 5; fmt.g += 1 ) {		// groups of 5 blocks
-			for ( fmt.b = 0; fmt.b < 4; fmt.b += 1 ) {	// blocks of 4 characters
-				for ( ;; ) {							// for newline characters
+void main( Format & fmt ) with( fmt ) {
+	for () {											// for as many characters
+		for ( g = 0; g < 5; g += 1 ) {					// groups of 5 blocks
+			for ( b = 0; b < 4; b += 1 ) {				// blocks of 4 characters
+				for () {								// for newline characters
 					suspend;
-					if ( fmt.ch != '\n' ) break;		// ignore newline
+				  if ( ch != '\n' ) break;				// ignore newline
 				} // for
-				sout | fmt.ch;							// print character
+				sout | ch;								// print character
 			} // for
 			sout | "  ";								// print block separator
 		} // for
-		sout | nl;									// print group separator
+		sout | nl;										// print group separator
 	} // for
 } // main
 
-void prt( Format & fmt, char ch ) {
-    fmt.ch = ch;
-    resume( fmt );
-} // prt
+void ?{}( Format & fmt ) {
+	resume( fmt );										// prime (start) coroutine
+}
+
+void ^?{}( Format & fmt ) with( fmt ) {
+	if ( g != 0 || b != 0 ) sout | nl;
+}
+
+void format( Format & fmt ) {
+	resume( fmt );
+} // format
 
 int main() {
 	Format fmt;
-	char ch;
+	sout | nlOff;										// turn off auto newline
 
-	for ( ;; ) {
-		sin | ch;										// read one character
-	  if ( eof( sin ) ) break;							// eof ?
-		prt( fmt, ch );
-	} // for
+	try {
+		for () {										// read until end of file
+			sin | fmt.ch;								// read one character
+			format( fmt );								// push character for formatting
+		} // for
+	} catch( end_of_file * ) {
+	} // try
 } // main
-
-// Local Variables: //
-// tab-width: 4 //
-// compile-command: "cfa fmtLines.cfa" //
-// End: //
Index: tests/coroutine/cntparens.cfa
===================================================================
--- tests/coroutine/cntparens.cfa	(revision c8f0199daff0565cb3f18b3bc6e07c382220342a)
+++ tests/coroutine/cntparens.cfa	(revision 5c6d4391a774a836741d9e89d2cd3febae9e4d44)
@@ -10,6 +10,6 @@
 // Created On       : Sat Apr 20 11:04:45 2019
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Apr 20 11:06:21 2019
-// Update Count     : 1
+// Last Modified On : Thu Aug 15 20:39:34 2024
+// Update Count     : 2
 //
 
@@ -46,11 +46,14 @@
 	char ch;
 
-	for () {											// read until end of file
-		sin | ch;										// read one character
-	  if ( eof( sin ) ) { sout | "Error"; break; }		// eof ?
-		Status ret = next( cpns, ch );					// push character for formatting
-	  if ( ret == Match ) { sout | "Match"; break; }
-	  if ( ret == Error ) { sout | "Error"; break; }
-	} // for
+	try {
+		for () {											// read until end of file
+			sin | ch;										// read one character
+			Status ret = next( cpns, ch );					// push character for formatting
+			if ( ret == Match ) { sout | "Match"; break; }
+			if ( ret == Error ) { sout | "Error"; break; }
+		} // for
+	} catch( end_of_file * ) {
+		sout | "Error";
+	} // try
 } // main
 
Index: tests/coroutine/devicedriver.cfa
===================================================================
--- tests/coroutine/devicedriver.cfa	(revision c8f0199daff0565cb3f18b3bc6e07c382220342a)
+++ tests/coroutine/devicedriver.cfa	(revision 5c6d4391a774a836741d9e89d2cd3febae9e4d44)
@@ -10,6 +10,6 @@
 // Created On       : Sat Mar 16 15:30:34 2019
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 17 09:11:56 2023
-// Update Count     : 94
+// Last Modified On : Thu Aug 15 18:45:45 2024
+// Update Count     : 96
 //
 
@@ -71,15 +71,17 @@
 
 	sin | nlOn;											// read newline (all) characters
-  eof: for () {											// read until end of file
-		sin | byte;										// read one character
-	  if ( eof( sin ) ) break eof;						// eof ?
-		choose( next( driver, byte ) ) {				// analyse character
-		  case CONT: ;
-		  case MSG: sout | "msg:" | msg;
-		  case ESTX: sout | "STX in message";
-		  case ELNTH: sout | "message too long";
-		  case ECRC: sout | "CRC failure";
-		} // choose
-	} // for
+	try {
+		for () {										// read until end of file
+			sin | byte;									// read one character
+			choose( next( driver, byte ) ) {			// analyse character
+			  case CONT: ;
+			  case MSG: sout | "msg:" | msg;
+			  case ESTX: sout | "STX in message";
+			  case ELNTH: sout | "message too long";
+			  case ECRC: sout | "CRC failure";
+			} // choose
+		} // for
+	} catch( end_of_file * ) {
+	} // try
 } // main
 
Index: tests/coroutine/fmtLines.cfa
===================================================================
--- tests/coroutine/fmtLines.cfa	(revision c8f0199daff0565cb3f18b3bc6e07c382220342a)
+++ tests/coroutine/fmtLines.cfa	(revision 5c6d4391a774a836741d9e89d2cd3febae9e4d44)
@@ -10,6 +10,6 @@
 // Created On       : Sun Sep 17 21:56:15 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 22 13:41:16 2019
-// Update Count     : 58
+// Last Modified On : Sat Aug 17 14:26:03 2024
+// Update Count     : 60
 //
 
@@ -54,13 +54,10 @@
 	sout | nlOff;										// turn off auto newline
 
-  eof: for () {											// read until end of file
-		sin | fmt.ch;									// read one character
-	  if ( eof( sin ) ) break eof;						// eof ?
-		format( fmt );									// push character for formatting
-	} // for
+	try {
+		for () {										// read until end of file
+			sin | fmt.ch;								// read one character
+			format( fmt );								// push character for formatting
+		} // for
+	} catch( end_of_file * ) {
+	} // try
 } // main
-
-// Local Variables: //
-// tab-width: 4 //
-// compile-command: "cfa fmtLines.cfa" //
-// End: //
