Index: doc/refrat/Makefile
===================================================================
--- doc/refrat/Makefile	(revision d0d9610725d49c2e0d9d2b8389ea9602b6e245e4)
+++ doc/refrat/Makefile	(revision 8ee15ffd47e5d21ecdb01b73e239eb2393b6d540)
@@ -7,5 +7,5 @@
 ## Define the text source files.
 
-SOURCE = ${addsuffix .tex, \
+SOURCES = ${addsuffix .tex, \
 refrat \
 }
@@ -32,5 +32,6 @@
 
 clean :
-	rm -f *.bbl *.aux *.dvi *.idx *.ilg *.ind *.brf *.out *.log *.toc *.blg *.pstex_t ${FIGURES} ${PICTURES} ${PROGRAMS} ${GRAPHS} ${basename ${DOCUMENT}}.ps ${DOCUMENT}
+	rm -f *.bbl *.aux *.dvi *.idx *.ilg *.ind *.brf *.out *.log *.toc *.blg *.pstex_t \
+		${FIGURES} ${PICTURES} ${PROGRAMS} ${GRAPHS} ${basename ${DOCUMENT}}.ps ${DOCUMENT}
 
 # File Dependencies #
@@ -42,17 +43,18 @@
 	dvips $< -o $@
 
-${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCE} ${basename ${DOCUMENT}}.bbl
+${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib
+	# Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
+	if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
+	# Must have *.aux file containing citations for bibtex
+	if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
+	-${BibTeX} ${basename $@}
+	# Some citations reference others so run steps again to resolve these citations
 	${LaTeX} ${basename $@}.tex
-	if fgrep -s "Label(s) may have changed" ${basename $@}.log ; then ${LaTeX} ${basename $@}.tex ; fi
+	-${BibTeX} ${basename $@}
+	# Make index from *.aux entries and input index at end of document
 	makeindex -s indexstyle ${basename $@}.idx
 	${LaTeX} ${basename $@}.tex
-	${LaTeX} ${basename $@}.tex		% to get index title in toc
-
-${basename ${DOCUMENT}}.bbl : ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib
-	if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
-	if [ ! -r ${basename $@}.aux ] ; then ${LaTeX} ${basename $@}.tex ; fi
-	-${BibTeX} ${basename $@}
+	# Run again to get index title into table of contents
 	${LaTeX} ${basename $@}.tex
-	-${BibTeX} ${basename $@}
 
 ## Define the default recipes.
Index: doc/refrat/refrat.tex
===================================================================
--- doc/refrat/refrat.tex	(revision d0d9610725d49c2e0d9d2b8389ea9602b6e245e4)
+++ doc/refrat/refrat.tex	(revision 8ee15ffd47e5d21ecdb01b73e239eb2393b6d540)
@@ -2,4 +2,8 @@
 
 \documentclass[openright,twoside]{report}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Latex packages used in the document.
+
 \usepackage{fullpage,times}
 \usepackage{xspace}
@@ -14,6 +18,44 @@
 \urlstyle{sf}
 
-%\input code.sty
-\input xref.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Names used in the document.
+
+\newcommand{\CFA}{Cforall\xspace}		% set language text name
+\newcommand{\CFAA}{C$\forall$\xspace}	% set language symbolic name
+\newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
+\def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Specialized macros used in the document.
+
+\newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
+\newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
+\newcommand{\see}[1]{\emph{see} #1}
+
+\makeatletter
+% Define some commands that produce formatted index entries suitable for cross-references.
+% ``\spec'' produces entries for specifications of entities.  ``\impl'' produces entries for their
+% implementations, and ``\use'' for their uses.
+
+%  \newcommand{\bold}[1]{{\bf #1}}
+%  \def\spec{\@bsphack\begingroup
+%             \def\protect##1{\string##1\space}\@sanitize
+%             \@wrxref{|bold}}
+\def\impl{\@bsphack\begingroup
+          \def\protect##1{\string##1\space}\@sanitize
+          \@wrxref{|definition}}
+\newcommand{\indexcode}[1]{{\lstinline$#1$}}
+\def\use{\@bsphack\begingroup
+         \def\protect##1{\string##1\space}\@sanitize
+         \@wrxref{|hyperpage}}
+\def\@wrxref#1#2{\let\thepage\relax
+    \xdef\@gtempa{\write\@indexfile{\string
+    \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
+    \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+\makeatother
+%\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}}
+%\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
 
 \newcommand{\define}[1]{\emph{#1\/}\index{#1}}
@@ -37,8 +79,8 @@
 \def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]}
 \let\endsyntax=\endtrivlist
-\newcommand{\lhs}[1]{\par{\it #1:}\index{#1@{\it #1}|italic}}
+\newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}}
 \newcommand{\rhs}{\hfil\break\hbox{\hskip1in}}
-\newcommand{\oldlhs}[1]{{\it #1: \ldots}\index{#1@{\it #1}|italic}}
-\newcommand{\nonterm}[1]{{\it #1\/}\index{#1@{\it #1}|italic}}
+\newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}}
+\newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}}
 \newcommand{\opt}{$_{opt}$\ }
 
@@ -52,9 +94,4 @@
 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
 
-\newcommand{\CFA}{Cforall\xspace}
-\newcommand{\CFAA}{C$\forall$\xspace}
-\newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace}
-\def\c11{ISO/IEC C}% cannot have numbers in latex command name
-
 % replace/adjust characters that look bad in sanserif
 \makeatletter
@@ -63,7 +100,8 @@
 \lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than
 \lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than
-\lst@ProcessOther{"5E}{$\sim$} % circumflex
+\lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % circumflex
 \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore
-\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
+%\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
+\lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % lower tilde
 \@empty\z@\@empty
 
@@ -74,5 +112,6 @@
 
 \lstdefinelanguage{CFA}[ANSI]{C}%
-  {morekeywords={asm,_Atomic,catch,choose,_Complex,context,dtype,fallthru,forall,ftype,_Imaginary,lvalue,restrict,throw,try,type,},
+  {morekeywords={asm,_Atomic,catch,catchResume,choose,_Complex,context,disable,dtype,enable,
+	fallthru,finally,forall,ftype,_Imaginary,lvalue,restrict,throw,throwResume,try,type,},
 }
 
@@ -84,6 +123,9 @@
 xleftmargin=\parindent,
 escapechar=@,
+%fancyvrb=true,
 %showtabs=true,
-%tab=\rightarrowfill,
+keepspaces=true,
+showtabs=true,
+tab=,
 }
 
@@ -91,4 +133,6 @@
 \setcounter{tocdepth}{3}		% subsubsections in table of contents
 \makeindex
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 \begin{document}
@@ -691,5 +735,5 @@
 
 \examples
-The expression \lstinline$(void *)0}$\use{0} specializes the (polymorphic) null pointer to a null
+The expression \lstinline$(void *)0$\use{0} specializes the (polymorphic) null pointer to a null
 pointer to \lstinline$void$. \lstinline$(const void *)0$ does the same, and also uses a safe
 conversion from \lstinline$void *$ to \lstinline$const void *$. In each case, the null pointer
@@ -2425,5 +2469,5 @@
 
 The operands of the expression ``\lstinline$a || b$'' are treated as ``\lstinline$(int)((a)!=0)$''
-and ``\lstinline$(int)((b})!=0)$'', which shall both be unambiguous. The expression has only one
+and ``\lstinline$(int)((b))!=0)$'', which shall both be unambiguous. The expression has only one
 interpretation, which is of type \lstinline$int$.
 
@@ -4036,4 +4080,9 @@
 \section{Statements and blocks}
 
+\begin{syntax}
+\oldlhs{statement}
+\rhs \nonterm{exception-statement}
+\end{syntax}
+
 Many statements contain expressions, which may have more than one interpretation. The following
 sections describe how the \CFA translator selects an interpretation. In all cases the result of the
@@ -4058,13 +4107,12 @@
 The following have identical meaning:
 \begin{lstlisting}
-case 1:@\ \ @case 2:@\ \ @case 3:@\ \ @case 4:@\ \ @case 5:
+case 1:  case 2:  case 3:  case 4:  case 5:
 case 1, 2, 3, 4, 5:
 case 1~5:
 \end{lstlisting}
-The multiple subranges are allowed:
+Multiple subranges are allowed:
 \begin{lstlisting}
 case 1~4, 9~14, 27~32:
 \end{lstlisting}
-
 The \lstinline$case$ and \lstinline$default$ clauses are restricted within the \lstinline$switch$ and \lstinline$choose$ statements, precluding Duff's device.
 
@@ -4087,7 +4135,7 @@
 choose ( E ) ...
 \end{lstlisting}
-may have more than one interpretation, but it shall have only one interpretation with an integral
-type. An \Index{integer promotion} is performed on the expression if necessary.  The constant
-expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
+may have more than one interpretation, but it shall have only one interpretation with an integral type.
+An \Index{integer promotion} is performed on the expression if necessary.
+The constant expressions in \lstinline$case$ statements with the switch are converted to the promoted type.
 
 
@@ -4097,5 +4145,4 @@
 The \lstinline$choose$ statement is the same as the \lstinline$switch$ statement except control transfers to the end of the \lstinline$choose$ statement at a \lstinline$case$ or \lstinline$default$ labeled statement.
 The \lstinline$fallthru$ statement is used to fall through to the next \lstinline$case$ or \lstinline$default$ labeled statement.
-
 The following have identical meaning:
 \begin{flushleft}
@@ -4122,5 +4169,5 @@
 \end{tabular}
 \end{flushleft}
-The \lstinline$choose$ statement addresses the problem of accidental fall-through associated with \lstinline$switch$ statement.
+The \lstinline$choose$ statement addresses the problem of accidental fall-through associated with the \lstinline$switch$ statement.
 
 
@@ -4151,4 +4198,8 @@
 \rhs \lstinline$continue$ \nonterm{identifier}\opt
 \rhs \lstinline$break$ \nonterm{identifier}\opt
+\rhs \ldots
+\rhs \lstinline$throw$ \nonterm{assignment-expression}\opt
+\rhs \lstinline$throwResume$ \nonterm{assignment-expression}\opt \nonterm{at-expression}\opt
+\lhs{at-expression} \lstinline$_At$ \nonterm{assignment-expression}
 \end{syntax}
 
@@ -4157,5 +4208,5 @@
 L1: {							// compound
   L2: switch ( ... ) {			// switch
-    case ...:
+	  case ...:
 	  L3: for ( ;; ) {			// outer for
 		L4: for ( ;; ) {		// inner for
@@ -4192,6 +4243,59 @@
 \subsubsection{The \lstinline$return$ statement}
 
-An expression in a \lstinline$return$ statement is treated as being cast to the result type of the
-function.
+An expression in a \lstinline$return$ statement is treated as being cast to the result type of the function.
+
+
+\subsubsection{The \lstinline$throw$ statement}
+
+When an exception is raised, \Index{propagation} directs control from a raise in the source execution to a handler in the faulting execution.
+
+
+\subsubsection{The \lstinline$throwResume$ statement}
+
+
+\subsection{Exception statements}
+
+\begin{syntax}
+\lhs{exception-statement}
+\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list}
+\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{finally-clause}
+\rhs \lstinline$try$ \nonterm{compound-statement} \nonterm{handler-list} \nonterm{finally-clause}
+\lhs{handler-list}
+\rhs \nonterm{handler-clause}
+\rhs \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
+\rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
+\rhs \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
+\rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \ldots \lstinline$)$ \nonterm{compound-statement}
+\lhs{handler-clause}
+\rhs \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
+\rhs \nonterm{handler-clause} \lstinline$catch$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
+\rhs \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
+\rhs \nonterm{handler-clause} \lstinline$catchResume$ \lstinline$($ \nonterm{exception-declaration} \lstinline$)$ \nonterm{compound-statement}
+\lhs{finally-clause}
+\rhs \lstinline$finally$ \nonterm{compound-statement}
+\lhs{exception-declaration}
+\rhs \nonterm{type-specifier}
+\rhs \nonterm{type-specifier} \nonterm{declarator}
+\rhs \nonterm{type-specifier} \nonterm{abstract-declarator}
+\rhs \nonterm{new-abstract-declarator-tuple} \nonterm{identifier}
+\rhs \nonterm{new-abstract-declarator-tuple}
+\lhs{asynchronous-statement}
+\rhs \lstinline$enable$ \nonterm{identifier-list} \nonterm{compound-statement}
+\rhs \lstinline$disable$ \nonterm{identifier-list} \nonterm{compound-statement}
+\end{syntax}
+
+\Index{Exception statement}s allow a dynamic call to a handler for \Index{recovery} (\Index{termination}) or \Index{correction} (\Index{resumption}) of an \Index{abnormal event}.
+
+
+\subsubsection{The \lstinline$try$ statement}
+
+The \lstinline$try$ statement is a block with associated handlers, called a \Index{guarded block};
+all other blocks are \Index{unguarded block}s.
+A \lstinline$goto$, \lstinline$break$, \lstinline$return$, or \lstinline$continue$ statement can be used to transfer control out of a try block or handler, but not into one.
+
+
+\subsubsection{The \lstinline$enable$/\lstinline$disable$ statements}
+
+The \lstinline$enable$/\lstinline$disable$ statements toggle delivery of \Index{asynchronous exception}s.
 
 
Index: c/refrat/xref.tex
===================================================================
--- doc/refrat/xref.tex	(revision d0d9610725d49c2e0d9d2b8389ea9602b6e245e4)
+++ 	(revision )
@@ -1,26 +1,0 @@
-\makeatletter
-  % Define some commands that produce formatted index entries suitable for
-  % cross-references.  ``\spec'' produces entries for specifications of
-  % entities.  ``\impl'' produces entries for their implementations, and
-  % ``\use'' for their uses.
-%  \newcommand{\bold}[1]{{\bf #1}}
-  \def\spec{\@bsphack\begingroup
-             \def\protect##1{\string##1\space}\@sanitize
-             \@wrxref{|bold}}
-  \newcommand{\italic}[1]{{\em #1}}
-  \def\impl{\@bsphack\begingroup
-             \def\protect##1{\string##1\space}\@sanitize
-             \@wrxref{|italic}}
-  \newcommand{\indexcode}[1]{{\lstinline$#1$}}
-  \def\use{\@bsphack\begingroup
-             \def\protect##1{\string##1\space}\@sanitize
-             \@wrxref{|indexcode}}
-  \newcommand{\see}[2]{\emph{see} #1}
-  %% \def\use{\@bsphack\begingroup
-  %%            \def\protect##1{\string##1\space}\@sanitize
-  %%            \@wrxref{}}
-  \def\@wrxref#1#2{\let\thepage\relax
-     \xdef\@gtempa{\write\@indexfile{\string
-        \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
-     \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
-\makeatother
