Index: libcfa/src/fstream.cfa
===================================================================
--- libcfa/src/fstream.cfa	(revision 5806745a897f36dc86c6ea9c1d3e59534cef8410)
+++ libcfa/src/fstream.cfa	(revision 0efb26929e1396507033dfb87f35284ba533db90)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 28 17:39:53 2019
-// Update Count     : 307
+// Last Modified On : Sat Apr 20 12:03:43 2019
+// Update Count     : 311
 //
 
@@ -33,4 +33,5 @@
 	os.nlOnOff = nlOnOff;
 	os.prt = prt;
+	os.sawNL = false;
 	sepSet( os, separator );
 	sepSetCur( os, sepGet( os ) );
@@ -162,4 +163,5 @@
 void ?{}( ifstream & is, void * file ) {
 	is.file = file;
+	is.nlOnOff = false;
 }
 
@@ -173,4 +175,8 @@
 	open( is, name, "r" );
 }
+
+void nlOn( ifstream & os ) { os.nlOnOff = true; }
+void nlOff( ifstream & os ) { os.nlOnOff = false; }
+bool getANL( ifstream & os ) { return os.nlOnOff; }
 
 int fail( ifstream & is ) {
Index: libcfa/src/fstream.hfa
===================================================================
--- libcfa/src/fstream.hfa	(revision 5806745a897f36dc86c6ea9c1d3e59534cef8410)
+++ libcfa/src/fstream.hfa	(revision 0efb26929e1396507033dfb87f35284ba533db90)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Dec 24 18:33:41 2018
-// Update Count     : 149
+// Last Modified On : Sat Apr 20 12:03:58 2019
+// Update Count     : 151
 //
 
@@ -73,7 +73,11 @@
 struct ifstream {
 	void * file;
+	bool nlOnOff;
 }; // ifstream
 
 // public
+void nlOn( ifstream & );
+void nlOff( ifstream & );
+bool getANL( ifstream & );
 int fail( ifstream & is );
 int eof( ifstream & is );
Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 5806745a897f36dc86c6ea9c1d3e59534cef8410)
+++ libcfa/src/iostream.cfa	(revision 0efb26929e1396507033dfb87f35284ba533db90)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Mar  4 20:57:24 2019
-// Update Count     : 593
+// Last Modified On : Sat Apr 20 14:02:43 2019
+// Update Count     : 617
 //
 
@@ -396,5 +396,11 @@
 
 	istype & ?|?( istype & is, char & c ) {
-		fmt( is, "%c", &c );							// must pass pointer through varg to fmt
+		char temp;
+		for () {
+			fmt( is, "%c", &temp );							// must pass pointer through varg to fmt
+			// do not overwrite parameter with newline unless appropriate
+			if ( temp != '\n' || getANL( is ) ) { c = temp; break; }
+			if ( eof( is ) ) break;
+		} // for
 		return is;
 	} // ?|?
@@ -498,4 +504,14 @@
 		return is;
 	} // nl
+
+	istype & nlOn( istype & is ) {
+		nlOn( is );										// call void returning
+		return is;
+	} // nlOn
+
+	istype & nlOff( istype & is ) {
+		nlOff( is );									// call void returning
+		return is;
+	} // nlOff
 } // distribution
 
Index: libcfa/src/iostream.hfa
===================================================================
--- libcfa/src/iostream.hfa	(revision 5806745a897f36dc86c6ea9c1d3e59534cef8410)
+++ libcfa/src/iostream.hfa	(revision 0efb26929e1396507033dfb87f35284ba533db90)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Feb 26 16:57:22 2019
-// Update Count     : 221
+// Last Modified On : Sat Apr 20 12:04:07 2019
+// Update Count     : 226
 //
 
@@ -149,4 +149,7 @@
 
 trait istream( dtype istype ) {
+	void nlOn( istype & );								// read newline
+	void nlOff( istype & );								// scan newline
+	bool getANL( istype & );							// get scan newline (on/off)
 	int fail( istype & );
 	int eof( istype & );
@@ -187,4 +190,6 @@
 
 	// manipulators
+	istype & nlOn( istype & );
+	istype & nlOff( istype & );
 	istype & ?|?( istype &, istype & (*)( istype & ) );
 	istype & nl( istype & is );
