Index: doc/user/user.tex
===================================================================
--- doc/user/user.tex	(revision 86f384bba584191182741295324fe1ca6656b380)
+++ doc/user/user.tex	(revision f32e53e30b4af98515bb21383011871019944d11)
@@ -11,6 +11,6 @@
 %% Created On       : Wed Apr  6 14:53:29 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Sun Jul  2 09:49:56 2017
-%% Update Count     : 2503
+%% Last Modified On : Fri Jul  7 10:36:39 2017
+%% Update Count     : 2547
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -2450,9 +2450,9 @@
 \end{cfa}
 \\
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
 1® ®2® ®3
 \end{cfa}
 &
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
 1 2 3
 \end{cfa}
@@ -2461,10 +2461,10 @@
 The \CFA form has half the characters of the \CC form, and is similar to \Index*{Python} I/O with respect to implicit separators.
 Similar simplification occurs for \Index{tuple} I/O, which prints all tuple values separated by ``\lstinline[showspaces=true]@, @''.
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 3, [ 4, 5 ] ];
+\begin{cfa}
+[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 4, [ 5, 6 ] ];
 sout | t1 | t2 | endl;					§\C{// print tuples}§
 \end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,belowskip=0pt]
-1®, ®2®, ®3 3®, ®4®, ®5
+\begin{cfa}[showspaces=true,aboveskip=0pt]
+1®, ®2®, ®3 4®, ®5®, ®6
 \end{cfa}
 Finally, \CFA uses the logical-or operator for I/O as it is the lowest-priority overloadable operator, other than assignment.
@@ -2485,5 +2485,5 @@
 \\
 &
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt]
 3 3 12 0 3 1 2
 \end{cfa}
@@ -2503,5 +2503,5 @@
 sout | 1 | 2 | 3 | endl;
 \end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
 1 2 3
 \end{cfa}
@@ -2570,12 +2570,12 @@
 \subsection{Manipulator}
 
-The following routines and \CC-style \Index{manipulator}s control implicit seperation.
+The following \CC-style \Index{manipulator}s and routines control implicit seperation.
 \begin{enumerate}
 \item
-Routines \Indexc{sepSet}\index{manipulator!sepSet@©sepSet©} and \Indexc{sepGet}\index{manipulator!sepGet@©sepGet©} set and get the separator string.
+Routines \Indexc{sepSet}\index{manipulator!sepSet@©sepSet©} and \Indexc{sep}\index{manipulator!sep@©sep©}/\Indexc{sepGet}\index{manipulator!sepGet@©sepGet©} set and get the separator string.
 The separator string can be at most 16 characters including the ©'\0'© string terminator (15 printable characters).
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[mathescape=off,belowskip=0pt]
 sepSet( sout, ", $" );						§\C{// set separator from " " to ", \$"}§
-sout | 1 | 2 | 3 | " \"" | ®sepGet( sout )® | "\"" | endl;
+sout | 1 | 2 | 3 | " \"" | ®sep® | "\"" | endl;
 \end{cfa}
 %$
@@ -2584,82 +2584,108 @@
 \end{cfa}
 %$
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[belowskip=0pt]
 sepSet( sout, " " );						§\C{// reset separator to " "}§
 sout | 1 | 2 | 3 | " \"" | ®sepGet( sout )® | "\"" | endl;
 \end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt]
 1® ®2® ®3 ®" "®
 \end{cfa}
-
-\item
-Routine \Indexc{sepSetTuple}\index{manipulator!sepSetTuple@©sepSetTuple©} and \Indexc{sepGetTuple}\index{manipulator!sepGetTuple@©sepGetTuple©} get and set the tuple separator-string.
+©sepGet© can be used to store a separator and then restore it:
+\begin{cfa}[belowskip=0pt]
+char store[®sepSize®];						§\C{// sepSize is the maximum separator size}§
+strcpy( store, sepGet( sout ) );
+sepSet( sout, "_" );
+sout | 1 | 2 | 3 | endl;
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+1®_®2®_®3
+\end{cfa}
+\begin{cfa}[belowskip=0pt]
+sepSet( sout, store );
+sout | 1 | 2 | 3 | endl;
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt]
+1® ®2® ®3
+\end{cfa}
+
+\item
+Routine \Indexc{sepSetTuple}\index{manipulator!sepSetTuple@©sepSetTuple©} and \Indexc{sepTuple}\index{manipulator!sepTuple@©sepTuple©}/\Indexc{sepGetTuple}\index{manipulator!sepGetTuple@©sepGetTuple©} get and set the tuple separator-string.
 The tuple separator-string can be at most 16 characters including the ©'\0'© string terminator (15 printable characters).
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[belowskip=0pt]
 sepSetTuple( sout, " " );					§\C{// set tuple separator from ", " to " "}§
-sout | t1 | t2 | " \"" | ®sepGetTuple( sout )® | "\"" | endl;
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt]
-1 2 3 4 ®" "®
-\end{cfa}
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
+sout | t1 | t2 | " \"" | ®sepTuple® | "\"" | endl;
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt]
+1 2 3 4 5 6 ®" "®
+\end{cfa}
+\begin{cfa}[belowskip=0pt]
 sepSetTuple( sout, ", " );					§\C{// reset tuple separator to ", "}§
 sout | t1 | t2 | " \"" | ®sepGetTuple( sout )® | "\"" | endl;
 \end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt]
-1, 2, 3, 4 ®", "®
-\end{cfa}
-
-\item
-Manipulators \Indexc{sepOn}\index{manipulator!sepOn@©sepOn©} and \Indexc{sepOff}\index{manipulator!sepOff@©sepOff©} \emph{locally} toggle printing the separator, \ie the seperator is adjusted only with respect to the next printed item.
-\begin{cfa}[mathescape=off,belowskip=0pt]
-sout | sepOn | 1 | 2 | 3 | sepOn | endl;	§\C{// separator at start/end of line}§
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
-® ®1 2 3® ®
-\end{cfa}
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-sout | 1 | sepOff | 2 | 3 | endl;			§\C{// locally turn off implicit separator}§
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
-12 3
-\end{cfa}
-The tuple separator also responses to being turned on and off.
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-sout | sepOn | t1 | sepOff | t2 | endl;		§\C{// locally turn on/off implicit separation}§
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
-, 1, 23, 4
-\end{cfa}
-Notice a tuple seperator starts the line because the next item is a tuple.
-
-\item
-Manipulators \Indexc{sepDisable}\index{manipulator!sepDisable@©sepDisable©} and \Indexc{sepEnable}\index{manipulator!sepEnable@©sepEnable©} \emph{globally} toggle printing the separator, \ie the seperator is adjusted with respect to all subsequent printed items, unless locally adjusted.
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-sout | sepDisable | 1 | 2 | 3 | endl;		§\C{// globally turn off implicit separation}§
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
+\begin{cfa}[showspaces=true,aboveskip=0pt]
+1, 2, 3 4, 5, 6 ®", "®
+\end{cfa}
+As for ©sepGet©, ©sepGetTuple© can be use to store a tuple separator and then restore it.
+
+\item
+Manipulators \Indexc{sepDisable}\index{manipulator!sepDisable@©sepDisable©} and \Indexc{sepEnable}\index{manipulator!sepEnable@©sepEnable©} \emph{globally} toggle printing the separator, \ie the seperator is adjusted with respect to all subsequent printed items.
+\begin{cfa}[belowskip=0pt]
+sout | sepDisable | 1 | 2 | 3 | endl;		§\C{// globally turn off implicit separator}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
 123
 \end{cfa}
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-sout | 1 | ®sepOn® | 2 | 3 | endl;			§\C{// locally turn on implicit separator}§
-\end{cfa}
-\begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
-1® ®23
-\end{cfa}
-\begin{cfa}[mathescape=off,aboveskip=0pt,belowskip=0pt]
-sout | sepEnable | 1 | 2 | 3 | endl;		§\C{// globally turn on implicit separation}§
+\begin{cfa}[belowskip=0pt]
+sout | sepEnable | 1 | 2 | 3 | endl;		§\C{// globally turn on implicit separator}§
 \end{cfa}
 \begin{cfa}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
 1 2 3
 \end{cfa}
+
+\item
+Manipulators \Indexc{sepOn}\index{manipulator!sepOn@©sepOn©} and \Indexc{sepOff}\index{manipulator!sepOff@©sepOff©} \emph{locally} toggle printing the separator, \ie the seperator is adjusted only with respect to the next printed item.
+\begin{cfa}[belowskip=0pt]
+sout | 1 | sepOff | 2 | 3 | endl;			§\C{// locally turn off implicit separator}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+12 3
+\end{cfa}
+\begin{cfa}[belowskip=0pt]
+sout | sepDisable | 1 | sepOn | 2 | 3 | endl; §\C{// locally turn on implicit separator}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+1 23
+\end{cfa}
+The tuple separator also responses to being turned on and off.
+\begin{cfa}[belowskip=0pt]
+sout | t1 | sepOff | t2 | endl;				§\C{// locally turn on/off implicit separator}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+1, 2, 34, 5, 6
+\end{cfa}
+©sepOn© \emph{cannot} be used to start/end a line with a separator because separators do not appear at the start/end of a line;
+use ©sep© to accomplish this functionality.
+\begin{cfa}[belowskip=0pt]
+sout | sepOn | 1 | 2 | 3 | sepOn | endl ;	§\C{// sepOn does nothing at start/end of line}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+1 2 3
+\end{cfa}
+\begin{cfa}[belowskip=0pt]
+sout | sep | 1 | 2 | 3 | sep | endl ;		§\C{// use sep to print separator at start/end of line}§
+\end{cfa}
+\begin{cfa}[showspaces=true,aboveskip=0pt,belowskip=0pt]
+® ®1 2 3® ®
+\end{cfa}
 \end{enumerate}
 
 \begin{comment}
 #include <fstream>
+#include <string.h>										// strcpy
 
 int main( void ) {
 	int x = 1, y = 2, z = 3;
 	sout | x | y | z | endl;
-	[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 3, [ 4, 5 ] ];
+	[int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 4, [ 5, 6 ] ];
 	sout | t1 | t2 | endl;						// print tuples
 	sout | x * 3 | y + 1 | z << 2 | x == y | (x | y) | (x || y) | (x > z ? 1 : 2) | endl;
@@ -2675,22 +2701,30 @@
 
 	sepSet( sout, ", $" );						// set separator from " " to ", $"
-	sout | 1 | 2 | 3 | " \"" | sepGet( sout ) | "\"" | endl;
+	sout | 1 | 2 | 3 | " \"" | sep | "\"" | endl;
 	sepSet( sout, " " );						// reset separator to " "
 	sout | 1 | 2 | 3 | " \"" | sepGet( sout ) | "\"" | endl;
 
-	sout | sepOn | 1 | 2 | 3 | sepOn | endl;	// separator at start of line
-	sout | 1 | sepOff | 2 | 3 | endl;			// locally turn off implicit separator
-
-	sout | sepDisable | 1 | 2 | 3 | endl;		// globally turn off implicit separation
-	sout | 1 | sepOn | 2 | 3 | endl;			// locally turn on implicit separator
-	sout | sepEnable | 1 | 2 | 3 | endl;		// globally turn on implicit separation
+	char store[sepSize];
+	strcpy( store, sepGet( sout ) );
+	sepSet( sout, "_" );
+	sout | 1 | 2 | 3 | endl;
+	sepSet( sout, store );
+	sout | 1 | 2 | 3 | endl;
 
 	sepSetTuple( sout, " " );					// set tuple separator from ", " to " "
-	sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
+	sout | t1 | t2 | " \"" | sepTuple | "\"" | endl;
 	sepSetTuple( sout, ", " );					// reset tuple separator to ", "
 	sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl;
 
-	sout | t1 | t2 | endl;						// print tuple
-	sout | sepOn | t1 | sepOff | t2 | endl;		// locally turn on/off implicit separation
+	sout | sepDisable | 1 | 2 | 3 | endl;		// globally turn off implicit separator
+	sout | sepEnable | 1 | 2 | 3 | endl;		// globally turn on implicit separator
+	
+	sout | 1 | sepOff | 2 | 3 | endl;			// locally turn on implicit separator
+	sout | sepDisable | 1 | sepOn | 2 | 3 | endl; // globally turn off implicit separator
+	sout | sepEnable;
+	sout | t1 | sepOff | t2 | endl;				// locally turn on/off implicit separator
+
+	sout | sepOn | 1 | 2 | 3 | sepOn | endl ;	// sepOn does nothing at start/end of line
+	sout | sep | 1 | 2 | 3 | sep | endl ;		// use sep to print separator at start/end of line
 }
 
@@ -5548,5 +5582,5 @@
 // C unsafe allocation
 extern "C" {
-void * mallac( size_t size );§\indexc{memset}§
+void * malloc( size_t size );§\indexc{memset}§
 void * calloc( size_t dim, size_t size );§\indexc{calloc}§
 void * realloc( void * ptr, size_t size );§\indexc{realloc}§
