Index: doc/uC++toCFA/uC++toCFA.tex
===================================================================
--- doc/uC++toCFA/uC++toCFA.tex	(revision de8a028648afb4f162e05619a68ce70b9eb807a6)
+++ doc/uC++toCFA/uC++toCFA.tex	(revision 80860043c337e175b8a9d0aef0b4c32d4dc2102e)
@@ -11,6 +11,6 @@
 %% Created On       : Wed Apr  6 14:53:29 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Mon Nov 17 11:14:48 2025
-%% Update Count     : 6677
+%% Last Modified On : Fri Feb 20 11:19:31 2026
+%% Update Count     : 6717
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -194,19 +194,23 @@
 
 The @choose@ statement provides an implicit @break@ after the @case@ clause for safety.
-It is possible to @break default@ in a @case@ clause to transfer to common code in the @default@ clause.
-\begin{cquote}
-\begin{tabular}{@{}l|l@{}}
-\begin{uC++}
+It is possible to @fallthrough@ label in a @case@ clause to transfer to common code or the @default@ clause.
+\begin{cquote}
+\begin{tabular}{@{}l|l@{}}
+\begin{cfa}
 switch ( i ) {
-  case 1: ... @break@; // explicit break
-  case 2: ... @break@; // explicit break
+  case 3: ... @fallthrough common@;
+  case 2: if ( ... ) @fallthrough@;
+  case 1:
+  common: ... ; // implicit fall through
   default: ... ;
 }
-\end{uC++}
+\end{cfa}
 &
 \begin{cfa}
 choose ( i ) {
-  case 1: ... ; // implicit break
-  case 2: ... ; // implicit break
+  case 3: ... @fallthrough common@; // labelled explicit fallthrough
+  case 2: if ( ... ) @fallthrough@; // conditional explicit fallthrough
+  case 1:
+  common: ... ; // implicit break
   default: ... ;
 }
@@ -250,6 +254,6 @@
 for ( i; @5@ ~ @15@ ~ @2@ ) { ... } // 5 to 14 by 2
 for ( i; -2 ~@=@ 10 ~ 3 ) { ... } // -2 to 10 by 3
-for ( i; -3 @-@~ 10 ) { ... } // not 10 -~= -3, 10 to -2 by -1
-for ( i; 0 @-@~@=@ 10 ) { ... } // not 10 -~= 0, 10 to 0 by -1
+for ( i; -3 @-@~ 10 ) { ... } // 10 to -2 by -1, not 10 -~= -3
+for ( i; 0 @-@~@=@ 10 ) { ... } // 10 to 0 by -1, not 10 -~= 0
 \end{cfa}
 \end{tabular}
@@ -908,4 +912,6 @@
   public:
 };
+T t;
+uProcessor p[3];
 \end{uC++}
 &
@@ -917,10 +923,10 @@
 };
 void main( @T & t@ ) {
-	... @resumeAt( partner, ExceptionInst( E, ... )@ );
+	... @resumeAt( partner, ExceptionInst( E, ... ) )@;
 	... @active_thread();@ ...
 }
-\end{cfa}
-\\
-\multicolumn{2}{@{}l@{}}{\lstinline{T t; // start thread in main routine}}
+T t;  // create thread object and start thread in main
+processor p[3]; // 4 kernel threads including program main
+\end{cfa}
 \end{tabular}
 \end{cquote}
@@ -1009,6 +1015,5 @@
 	}
 };
-enum { N = 3 };
-Barrier b{ N };
+Barrier b{ 3 };
 \end{uC++}
 &
@@ -1034,6 +1039,5 @@
 	}
 }
-enum { N = 3 };
-Barrier b{ N };
+Barrier b{ 3 };
 \end{cfa}
 \end{tabular}
@@ -1178,5 +1182,5 @@
 
 
-{\lstset{tabsize=3}
+{\lstset{tabsize=4}
 \setlength{\tabcolsep}{5pt}
 \begin{tabular}{@{}l|ll@{}}
@@ -1186,28 +1190,28 @@
 @Future_ISM@<double> fd;
 struct Msg { int i, j; }; @Future_ISM@<Msg> fm;
-struct Stop {}; @Future_ISM@<Stop> fs;
 struct Cont {}; @Future_ISM@<Cont> fc;
+_Exception Stop {};
 
 _Task Worker {
 	void main() {
-
-		for ( ;; ) {
-			_Select( fi ) { cout << fi() << endl; fi.reset(); }
-			and _Select( fd ) { cout << fd() << endl; fd.reset(); }
-			and _Select( fm ) {
-				cout << fm().i << " " << fm().j << endl; fm.reset();
-			} or _Select( fs ) { cout << "stop" << endl; break; }
-			fc.delivery( (Cont){} );	// synchronize
-		}
-	}
-
+		try {
+			for ( ;; ) {
+				_Select( fi ) { cout << fi() << endl; fi.reset(); }
+				and _Select( fd ) { cout << fd() << endl; fd.reset(); }
+				and _Select( fm ) {
+					cout << fm().i << " " << fm().j << endl; fm.reset();
+				}
+				fc( (Cont){} );		// synchronize
+			}
+		} catch( Stop & ) { cout << "stop" << endl;}
+	}
 };
 int main() {
 	Worker worker;
 	for ( int i = 0; i < 10; i += 1 ) {
-		fi( i );   fd( i + 2.5 );   fm( (Msg){ i, 2 } ); // fulfil
+		fi( i );   fd( i + 2.5 );   fm( (Msg){ i, 2 } );  // fulfil
 		fc(); fc.reset();				// synchronize
 	}
-	fs( (Stop){} );
+	fi( new Stop{} );				// trigger exception
 } // wait for worker to terminate
 \end{uC++}
@@ -1215,10 +1219,10 @@
 \begin{cfa}
 #include <future.hfa>
-@future_rc@(int) fi;
-@future_rc@(double) fd;
-struct Msg { int i, j; }; @future_rc@(Msg) fm;
-struct Stop {}; @future_rc@(Stop) fs;
-struct Cont {}; @future_rc@(Cont) fc;
-ExceptionDecl( Break );
+@future_rc@( int ) fi;
+@future_rc@( double ) fd;
+struct Msg { int i, j; }; @future_rc@( Msg ) fm;
+struct Cont {}; @future_rc@( Cont ) fc;
+ExceptionDecl( Stop );
+
 thread Worker {};
 void main( Worker & ) {
@@ -1227,19 +1231,19 @@
 			waituntil( fi ) { sout | fi(); reset( fi ); }
 			and waituntil( fd ) { sout | fd(); reset( fd ); }
-			and waituntil( fm ) { sout | fm().i | fm().j; reset( fm ); }
-			or waituntil( fs ) { sout | "stop";
-				throw ExceptionInst( Break );
+			and waituntil( fm ) {
+				sout | fm().i | fm().j; reset( fm );
 			}
 			fc( (Cont){} );		// synchronize
 		}
-	} catch( Break * ) {}
-}
+	} catch( Stop * ) { sout | "stop"; }
+}
+
 int main() {
 	Worker worker;
 	for ( i; 10 ) {
-		fi( i );   fd( i + 2.5 );   fm( (Msg){ i, 2 } ); // fulfil
+		fi( i );   fd( i + 2.5 );   fm( (Msg){ i, 2 } );  // fulfil
 		fc(); reset( fc );		// synchronize
 	}
-	fs( (Stop){} );
+	fi( ExceptionPtr( ExceptionInst( Stop ) ) );
 } // wait for worker to terminate
 \end{cfa}
