Index: tests/.expect/copyfile.txt
===================================================================
--- tests/.expect/copyfile.txt	(revision c7816be39e9fafbbe77688acfe2381ca95e39035)
+++ tests/.expect/copyfile.txt	(revision 4b84e35cc70a09df095e0ebca35e4f074e690d5b)
@@ -8,39 +8,42 @@
 // 
 // Author           : Peter A. Buhr
-// Created On       : Tue Jul 16 16:47:22 2019
+// Created On       : Fri Jun 19 13:44:05 2020
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun  1 09:10:58 2020
-// Update Count     : 28
+// Last Modified On : Fri Jun 19 17:58:03 2020
+// Update Count     : 4
 // 
 
 #include <fstream.hfa>
-#include <stdlib.hfa>									// new/delete
+#include <exception.hfa>
 
 int main( int argc, char * argv[] ) {
-	ifstream & in  = stdin;								// default files
-	ofstream & out = stdout;
+	ifstream in  = stdin;								// copy default files
+	ofstream out = stdout;
+
 	try {
 		choose ( argc ) {
 		  case 2, 3:
-			  &in = new( (const char *)argv[1] );		// open input file first as output creates file
-			  if ( argc == 3 ) &out = new( (const char *)argv[2] ); // only open output if input opens as output created if nonexistent
-		  case 1: ;					// use default files
+			open( in, argv[1] );						// open input file first as output creates file
+			if ( argc == 3 ) open( out, argv[2] );		// do not create output unless input opens
+		  case 1: ;										// use default files
 		  default:
-			  exit | "Usage [ input-file (default stdin) [ output-file (default stdout) ] ]";
+			exit | "Usage" | argv[0] | "[ input-file (default stdin) [ output-file (default stdout) ] ]";
 		} // choose
+	} catch( Open_Failure * ex ; ex->istream == &in ) {
+		exit | "Unable to open input file" | argv[1];
+	} catch( Open_Failure * ex ; ex->ostream == &out ) {
+		close( in );									// optional
+		exit | "Unable to open output file" | argv[2];
+	} // try
 
-		char ch;
-		out | nlOff;									// turn off auto newline
-		in  | nlOn;										// turn on reading newline
+	out | nlOff;										// turn off auto newline
+	in  | nlOn;											// turn on reading newline
 
-		for () {										// read all characters
-			in | ch;
-		  if ( eof( in ) ) break;						// eof ?
-			out | ch;
-		} // for
-	} finally {
-		if ( &in  != &stdin  ) delete( &in );			// close file, do not delete stdin!
-		if ( &out != &stdout ) delete( &out );			// close file, do not delete stdout!
-	} // try
+	char ch;
+	for () {											// read all characters
+		in | ch;
+	  if ( eof( in ) ) break;							// eof ?
+		out | ch;
+	} //for
 } // main
 
Index: tests/.expect/time.txt
===================================================================
--- tests/.expect/time.txt	(revision c7816be39e9fafbbe77688acfe2381ca95e39035)
+++ tests/.expect/time.txt	(revision 4b84e35cc70a09df095e0ebca35e4f074e690d5b)
@@ -1,3 +1,4 @@
 10800 2 3.375 12 1.00001
+0.125 0.0333333333333333 3.375 12000. 1000010.
 0 2 3.375
 7 7 7
Index: tests/.in/copyfile.txt
===================================================================
--- tests/.in/copyfile.txt	(revision c7816be39e9fafbbe77688acfe2381ca95e39035)
+++ tests/.in/copyfile.txt	(revision 4b84e35cc70a09df095e0ebca35e4f074e690d5b)
@@ -8,39 +8,42 @@
 // 
 // Author           : Peter A. Buhr
-// Created On       : Tue Jul 16 16:47:22 2019
+// Created On       : Fri Jun 19 13:44:05 2020
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun  1 09:10:58 2020
-// Update Count     : 28
+// Last Modified On : Fri Jun 19 17:58:03 2020
+// Update Count     : 4
 // 
 
 #include <fstream.hfa>
-#include <stdlib.hfa>									// new/delete
+#include <exception.hfa>
 
 int main( int argc, char * argv[] ) {
-	ifstream & in  = stdin;								// default files
-	ofstream & out = stdout;
+	ifstream in  = stdin;								// copy default files
+	ofstream out = stdout;
+
 	try {
 		choose ( argc ) {
 		  case 2, 3:
-			  &in = new( (const char *)argv[1] );		// open input file first as output creates file
-			  if ( argc == 3 ) &out = new( (const char *)argv[2] ); // only open output if input opens as output created if nonexistent
-		  case 1: ;					// use default files
+			open( in, argv[1] );						// open input file first as output creates file
+			if ( argc == 3 ) open( out, argv[2] );		// do not create output unless input opens
+		  case 1: ;										// use default files
 		  default:
-			  exit | "Usage [ input-file (default stdin) [ output-file (default stdout) ] ]";
+			exit | "Usage" | argv[0] | "[ input-file (default stdin) [ output-file (default stdout) ] ]";
 		} // choose
+	} catch( Open_Failure * ex ; ex->istream == &in ) {
+		exit | "Unable to open input file" | argv[1];
+	} catch( Open_Failure * ex ; ex->ostream == &out ) {
+		close( in );									// optional
+		exit | "Unable to open output file" | argv[2];
+	} // try
 
-		char ch;
-		out | nlOff;									// turn off auto newline
-		in  | nlOn;										// turn on reading newline
+	out | nlOff;										// turn off auto newline
+	in  | nlOn;											// turn on reading newline
 
-		for () {										// read all characters
-			in | ch;
-		  if ( eof( in ) ) break;						// eof ?
-			out | ch;
-		} // for
-	} finally {
-		if ( &in  != &stdin  ) delete( &in );			// close file, do not delete stdin!
-		if ( &out != &stdout ) delete( &out );			// close file, do not delete stdout!
-	} // try
+	char ch;
+	for () {											// read all characters
+		in | ch;
+	  if ( eof( in ) ) break;							// eof ?
+		out | ch;
+	} //for
 } // main
 
Index: tests/copyfile.cfa
===================================================================
--- tests/copyfile.cfa	(revision c7816be39e9fafbbe77688acfe2381ca95e39035)
+++ tests/copyfile.cfa	(revision 4b84e35cc70a09df095e0ebca35e4f074e690d5b)
@@ -8,39 +8,42 @@
 // 
 // Author           : Peter A. Buhr
-// Created On       : Tue Jul 16 16:47:22 2019
+// Created On       : Fri Jun 19 13:44:05 2020
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun  1 09:10:58 2020
-// Update Count     : 28
+// Last Modified On : Fri Jun 19 17:58:03 2020
+// Update Count     : 4
 // 
 
 #include <fstream.hfa>
-#include <stdlib.hfa>									// new/delete
+#include <exception.hfa>
 
 int main( int argc, char * argv[] ) {
-	ifstream & in  = stdin;								// default files
-	ofstream & out = stdout;
+	ifstream in  = stdin;								// copy default files
+	ofstream out = stdout;
+
 	try {
 		choose ( argc ) {
 		  case 2, 3:
-			  &in = new( (const char *)argv[1] );		// open input file first as output creates file
-			  if ( argc == 3 ) &out = new( (const char *)argv[2] ); // only open output if input opens as output created if nonexistent
-		  case 1: ;					// use default files
+			open( in, argv[1] );						// open input file first as output creates file
+			if ( argc == 3 ) open( out, argv[2] );		// do not create output unless input opens
+		  case 1: ;										// use default files
 		  default:
-			  exit | "Usage [ input-file (default stdin) [ output-file (default stdout) ] ]";
+			exit | "Usage" | argv[0] | "[ input-file (default stdin) [ output-file (default stdout) ] ]";
 		} // choose
+	} catch( Open_Failure * ex ; ex->istream == &in ) {
+		exit | "Unable to open input file" | argv[1];
+	} catch( Open_Failure * ex ; ex->ostream == &out ) {
+		close( in );									// optional
+		exit | "Unable to open output file" | argv[2];
+	} // try
 
-		char ch;
-		out | nlOff;									// turn off auto newline
-		in  | nlOn;										// turn on reading newline
+	out | nlOff;										// turn off auto newline
+	in  | nlOn;											// turn on reading newline
 
-		for () {										// read all characters
-			in | ch;
-		  if ( eof( in ) ) break;						// eof ?
-			out | ch;
-		} // for
-	} finally {
-		if ( &in  != &stdin  ) delete( &in );			// close file, do not delete stdin!
-		if ( &out != &stdout ) delete( &out );			// close file, do not delete stdout!
-	} // try
+	char ch;
+	for () {											// read all characters
+		in | ch;
+	  if ( eof( in ) ) break;							// eof ?
+		out | ch;
+	} //for
 } // main
 
Index: tests/exceptions/.expect/resume.txt
===================================================================
--- tests/exceptions/.expect/resume.txt	(revision c7816be39e9fafbbe77688acfe2381ca95e39035)
+++ tests/exceptions/.expect/resume.txt	(revision 4b84e35cc70a09df095e0ebca35e4f074e690d5b)
@@ -31,2 +31,6 @@
 inner catch
 outer catch
+
+throw
+rethrow
+handle
Index: tests/exceptions/.expect/terminate.txt
===================================================================
--- tests/exceptions/.expect/terminate.txt	(revision c7816be39e9fafbbe77688acfe2381ca95e39035)
+++ tests/exceptions/.expect/terminate.txt	(revision 4b84e35cc70a09df095e0ebca35e4f074e690d5b)
@@ -29,2 +29,6 @@
 inner catch
 outer catch
+
+throw
+rethrow
+handle
Index: tests/exceptions/resume.cfa
===================================================================
--- tests/exceptions/resume.cfa	(revision c7816be39e9fafbbe77688acfe2381ca95e39035)
+++ tests/exceptions/resume.cfa	(revision 4b84e35cc70a09df095e0ebca35e4f074e690d5b)
@@ -8,4 +8,6 @@
 TRIVIAL_EXCEPTION(zen);
 TRIVIAL_EXCEPTION(moment_of, zen);
+
+void in_void(void);
 
 int main(int argc, char * argv[]) {
@@ -121,3 +123,21 @@
 		printf("outer catch\n");
 	}
+	printf("\n");
+
+	in_void();
 }
+
+// Do a throw and rethrow in a void function.
+void in_void(void) {
+	try {
+		try {
+			printf("throw\n");
+			throwResume (zen){};
+		} catchResume (zen *) {
+			printf("rethrow\n");
+			throwResume;
+		}
+	} catchResume (zen *) {
+		printf("handle\n");
+	}
+}
Index: tests/exceptions/terminate.cfa
===================================================================
--- tests/exceptions/terminate.cfa	(revision c7816be39e9fafbbe77688acfe2381ca95e39035)
+++ tests/exceptions/terminate.cfa	(revision 4b84e35cc70a09df095e0ebca35e4f074e690d5b)
@@ -8,4 +8,6 @@
 TRIVIAL_EXCEPTION(zen);
 TRIVIAL_EXCEPTION(moment_of, zen);
+
+void in_void(void);
 
 int main(int argc, char * argv[]) {
@@ -121,3 +123,22 @@
 		printf("outer catch\n");
 	}
+	printf("\n");
+
+	in_void();
 }
+
+// Do a throw and rethrow in a void function.
+void in_void(void) {
+	try {
+		try {
+			printf("throw\n");
+			throw (zen){};
+		} catch (zen *) {
+			printf("rethrow\n");
+			throw;
+		}
+	} catch (zen *) {
+		printf("handle\n");
+	}
+}
+
Index: tests/time.cfa
===================================================================
--- tests/time.cfa	(revision c7816be39e9fafbbe77688acfe2381ca95e39035)
+++ tests/time.cfa	(revision 4b84e35cc70a09df095e0ebca35e4f074e690d5b)
@@ -10,6 +10,6 @@
 // Created On       : Tue Mar 27 17:24:56 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jan  5 18:27:37 2020
-// Update Count     : 34
+// Last Modified On : Thu Jun 18 18:14:49 2020
+// Update Count     : 37
 //
 
@@ -20,4 +20,5 @@
 	Duration d1 = 3`h, d2 = 2`s, d3 = 3.375`s, d4 = 12`s, d5 = 1`s + 10_000`ns;
 	sout | d1 | d2 | d3 | d4 | d5;
+	sout | d1`dd | d2`dm | d3`ds | d4`dms | d5`dus;
 	d1 = 0;
 	sout | d1 | d2 | d3;
