Index: tests/.expect/copyfile.txt
===================================================================
--- tests/.expect/copyfile.txt	(revision 8d321f9ffd1d3a589910069a0e4f111e09118f1f)
+++ tests/.expect/copyfile.txt	(revision 6c4bd02a766661c9ac564fbdcde07ec5211f2c1a)
@@ -8,39 +8,43 @@
 // 
 // 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 14:16:44 2020
+// Update Count     : 3
 // 
 
 #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 ) {
+			char ch;
 		  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/.in/copyfile.txt
===================================================================
--- tests/.in/copyfile.txt	(revision 8d321f9ffd1d3a589910069a0e4f111e09118f1f)
+++ tests/.in/copyfile.txt	(revision 6c4bd02a766661c9ac564fbdcde07ec5211f2c1a)
@@ -8,39 +8,43 @@
 // 
 // 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 14:16:44 2020
+// Update Count     : 3
 // 
 
 #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 ) {
+			char ch;
 		  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 8d321f9ffd1d3a589910069a0e4f111e09118f1f)
+++ tests/copyfile.cfa	(revision 6c4bd02a766661c9ac564fbdcde07ec5211f2c1a)
@@ -8,39 +8,43 @@
 // 
 // 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 14:16:44 2020
+// Update Count     : 3
 // 
 
 #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 ) {
+			char ch;
 		  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
 
