Index: doc/uC++toCFA/uC++toCFA.tex
===================================================================
--- doc/uC++toCFA/uC++toCFA.tex	(revision 0d49efb94c4526e735efdb8e90144d4d8dfbe53f)
+++ doc/uC++toCFA/uC++toCFA.tex	(revision 946a6e4d6e22aa9ec049796a1ac9b96286d7e852)
@@ -11,6 +11,6 @@
 %% Created On       : Wed Apr  6 14:53:29 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Sun Sep 17 09:10:12 2023
-%% Update Count     : 5883
+%% Last Modified On : Sun Oct 15 23:09:58 2023
+%% Update Count     : 5926
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -119,5 +119,5 @@
 
 \title{\vspace*{-0.5in}
-\CC/\uC to \CFA Cheat Sheet}
+\uC to \CFA Cheat Sheet}
 %\author{Peter A. Buhr}
 \date{}
@@ -195,5 +195,30 @@
 \end{cfa}
 \noindent
-In subsequent code examples, the left example is \CC/\uC and the right example is \CFA.
+In subsequent code examples, the left example is \uC and the right example is \CFA.
+
+
+\section{Stream I/O}
+
+\CFA output streams automatically separate values and insert a newline at the end of the print.
+
+\begin{cquote}
+\begin{tabular}{l|l}
+\begin{uC++}
+#include <@iostream@>
+using namespace std;
+int i;   double d;   char c;
+cin >> i >> d >> c;
+cout << i << ' ' << d << ' ' << c | endl;
+\end{uC++}
+&
+\begin{cfa}
+#include <@fstream.hfa@>
+
+int i;   double d;   char c;
+sin | i | d | c;
+sout | i | d | c
+\end{cfa}
+\end{tabular}
+\end{cquote}
 
 
@@ -203,25 +228,53 @@
 \begin{tabular}{l|l}
 \begin{uC++}
-for ( ;; ) { ... } / while ( true ) { ... }
-for ( int i = 0; i < 10; i += 1 ) { ... }
-for ( int i = 5; i < 15; i += 2 ) { ... }
+for ( @;;@ ) { ... }  /  while ( @true@ ) { ... }
+for ( int i = 0; i < @10@; i += 1 ) { ... }
+for ( int i = @5@; i < @15@; i += @2@ ) { ... }
+for ( int i = -1; i <@=@ 10; i += 3 ) { ... }
+for ( int i = 10; i > 0; i @-@= 1 ) { ... }
+\end{uC++}
+&
+\begin{cfa}
+for () { ... }  /  while () { ... }
+for ( @10@ ) { ... }  /  for ( i; @10@ ) { ... }
+for ( i; @5@ ~ @15@ ~ @2@ ) { ... }
+for ( i; -1 ~@=@ 10 ~ 3 ) { ... }
+for ( i; 0 @-@~ 10 ) { ... }
+\end{cfa}
+\\
+\hline
+\begin{uC++}
 int i = 0
 for ( i = 0; i < 10; i += 1 ) { ... }
-if ( i == 10 ) { ... }
-\end{uC++}
-&
-\begin{cfa}
-for () { ... } / while () { ... }
-for ( 10 ) { ... } / for ( i; 10 ) { ... }
-for ( i; 5~15~2 ) { ... }
+@if ( i == 10 )@ { ... }
+\end{uC++}
+&
+\begin{cfa}
 
 for ( i; 10 ) { ... }
-else { ... } // i == 10
-\end{cfa}
-\end{tabular}
-\end{cquote}
-
-
-\section{Exceptions}
+@else@ { ... } // i == 10
+\end{cfa}
+\\
+\hline
+\begin{uC++}
+L1: for ( ;; ) {
+	L2: for ( ;; ) {
+		... @break L1@; ... @break L2@; ...
+	}
+}
+\end{uC++}
+&
+\begin{cfa}
+L1: for () {
+	L2: for () {
+		... @break L1@; ... @break L2@; ...
+	}
+}
+\end{cfa}
+\end{tabular}
+\end{cquote}
+
+
+\section{Exception}
 
 Currently, \CFA uses macros @ExceptionDecl@ and @ExceptionInst@ to declare and instantiate an exception.
@@ -230,13 +283,13 @@
 \begin{uC++}
 
-struct E {		// local or global scope
+@_Exception@ E {	// local or global scope
 	... // exception fields
 };
 try {
 	...
-	if ( ... ) _Resume E( /* initialization */ );
-	if ( ... ) _Throw E( /* initialization */ );
-	...
-} _CatchResume( E & ) { // should be reference
+	if ( ... ) @_Resume@ E( /* initialization */ );
+	if ( ... ) @_Throw@ E( /* initialization */ );
+		...
+} @_CatchResume@( E & ) { // should be reference
 	...
 } catch( E & ) {
@@ -252,8 +305,8 @@
 try {
 	...
-	if ( ... ) throwResume @ExceptionInst@( E, /* intialization */ );
-	if ( ... ) throw @ExceptionInst@( E, /* intialization */ );
+	if ( ... ) @throwResume@ @ExceptionInst@( E, /* intialization */ );
+	if ( ... ) @throw@ @ExceptionInst@( E, /* intialization */ );
 	...
-} catchResume( E * ) { // must be pointer
+} @catchResume@( E * ) { // must be pointer
 	...
 } catch( E * ) {
@@ -265,24 +318,61 @@
 
 
-\section{Stream I/O}
-
-\CFA output streams automatically separate values and insert a newline at the end of the print.
+\section{Non-local Exception}
+
+\begin{cquote}
+\begin{tabular}{l|ll}
+\begin{uC++}
+
+
+void main() {
+	try {
+		_Enable {
+			... suspend(); ...
+		}
+	} @_CatchResume@( E & ) { // reference
+		...
+	} catch( E & ) {
+		...
+	}
+}
+\end{uC++}
+&
+\begin{cfa}
+#define resumePoll( coroutine ) resume( coroutine ); checked_poll()
+#define suspendPoll suspend; checked_poll()
+void main() {
+	try {
+		enable_ehm();
+		... suspendPoll ...
+		disable_ehm();
+	} @catchResume@( E * ) { // pointer
+		...
+	} catch( E & ) {
+		...
+	}
+}
+\end{cfa}
+\end{tabular}
+\end{cquote}
+
+
+\section{Constructor / Destructor}
 
 \begin{cquote}
 \begin{tabular}{l|l}
 \begin{uC++}
-#include <@iostream@>
-using namespace std;
-int i;   double d;   char c;
-cin >> i >> d >> c;
-cout << i << ' ' << d << ' ' << c | endl;
-\end{uC++}
-&
-\begin{cfa}
-#include <@fstream.hfa@>
-
-int i;   double d;   char c;
-sin | i | d | c;
-sout | i | d | c
+struct S {
+	... // fields
+	@S@(...) { ... }
+	@~S@(...) { ... }
+};
+\end{uC++}
+&
+\begin{cfa}
+struct S {
+	... // fields
+};
+@?{}@( @S & s,@ ...) { ... }
+@^?{}@( @S & s@ ) { ... }
 \end{cfa}
 \end{tabular}
@@ -332,27 +422,4 @@
 
 
-\section{Constructor / Destructor}
-
-\begin{cquote}
-\begin{tabular}{l|l}
-\begin{uC++}
-struct S {
-	... // fields
-	@S@(...) { ... }
-	@~S@(...) { ... }
-};
-\end{uC++}
-&
-\begin{cfa}
-struct S {
-	... // fields
-};
-@?{}@( @S & s,@ ...) { ... }
-@^?{}@( @S & s@ ) { ... }
-\end{cfa}
-\end{tabular}
-\end{cquote}
-
-
 \section{\texorpdfstring{Structures (object-oriented \protect\vs routine style)}{Structures (object-oriented vs. routine style)}}
 
