Index: doc/user/user.tex
===================================================================
--- doc/user/user.tex	(revision 8bc4ef87e90fcb9fc6232c6c4e9d2137b79d50b0)
+++ doc/user/user.tex	(revision 1048b31f5b050d15213318bad3c6c6b904db14b4)
@@ -11,9 +11,15 @@
 %% Created On       : Wed Apr  6 14:53:29 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Thu Apr 28 14:45:07 2016
-%% Update Count     : 181
+%% Last Modified On : Sat Apr 30 13:54:32 2016
+%% Update Count     : 221
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 % requires tex packages: texlive-base texlive-latex-base tex-common texlive-humanities texlive-latex-extra texlive-fonts-recommended
+
+% red highlighting ®...® (registered trademark sumbol)
+% blue highlighting ©...© (copyright symbol)
+% latex escape §...§ (section symbol)
+% keyword escape ¶...¶ (pilcrow symbol)
+% math escape $...$ (dollar symbol)
 
 \documentclass[openright,twoside]{article}
@@ -231,23 +237,17 @@
 This command works like the GNU \lstinline@gcc@\index{gcc} command, e.g.:
 \begin{lstlisting}
-cfa [ gcc-options ] C/@{\CFA}@-files [ assembler/loader-files ]
+cfa [ gcc-options ] C/§\CFA§-files [ assembler/loader-files ]
 \end{lstlisting}
 \indexc{cfa}\index{compilation!cfa@\lstinline$cfa$}
 By default, \CFA programs having the following \lstinline@gcc@ flags turned on:
 \begin{description}
-\item
-\hspace*{-4pt}\lstinline@-std=gnu99@
-\indexc{-std=gnu99}\index{compilation option!-std=gnu99@{\lstinline$-std=gnu99$}}
+\item\hspace*{-4pt}\Indexc{-std=gnu99}\index{compilation option!-std=gnu99@{\lstinline$-std=gnu99$}}
 The 1999 C standard plus GNU extensions.
-\item
-\hspace*{-4pt}\lstinline@-fgnu89-inline@
-\indexc{-fgnu89-inline}\index{compilation option!-fgnu89-inline@{\lstinline$-fgnu89-inline$}}
+\item\hspace*{-4pt}\Indexc{-fgnu89-¶inline¶}\index{compilation option!-fgnu89-inline@{\lstinline$-fgnu89-¶inline¶$}}
 Use the traditional GNU semantics for inline routines in C99 mode.
 \end{description}
 The following new \CFA option is available:
 \begin{description}
-\item
-\hspace*{-4pt}\lstinline@-CFA@
-\indexc{-CFA}\index{compilation option!-CFA@{\lstinline$-CFA$}}
+\item\hspace*{-4pt}\Indexc{-CFA}\index{compilation option!-CFA@{\lstinline$-CFA$}}
 Only the C preprocessor and the \CFA translator steps are performed and the transformed program is written to standard output, which makes it possible to examine the code generated by the \CFA translator.
 \end{description}
@@ -255,24 +255,16 @@
 The following preprocessor variables are available:
 \begin{description}
-\item
-\hspace*{-4pt}\lstinline$__CFA__$
-\indexc{__CFA__}\index{preprocessor variables!__CFA__@{\lstinline$__CFA__$}}
+\item\hspace*{-4pt}\Indexc{__CFA__}\index{preprocessor variables!__CFA__@{\lstinline$__CFA__$}}
 is always available during preprocessing and its value is the current major \Index{version number} of \CFA.\footnote{
 The C preprocessor allows only integer values in a preprocessor variable so a value like ``\Version'' is not allowed.
 Hence, the need to have three variables for the major, minor and patch version number.}
 
-\item
-\hspace*{-4pt}\lstinline$__CFA_MINOR__$
-\indexc{__CFA_MINOR__}\index{preprocessor variables!__CFA_MINOR__@{\lstinline$__CFA_MINOR__$}}
+\item\hspace*{-4pt}\Indexc{__CFA_MINOR__}\index{preprocessor variables!__CFA_MINOR__@{\lstinline$__CFA_MINOR__$}}
 is always available during preprocessing and its value is the current minor \Index{version number} of \CFA.
 
-\item
-\hspace*{-4pt}\lstinline$__CFA_PATCH__$
-\indexc{__CFA_PATCH__}\index{preprocessor variables!__CFA_PATCH__@\lstinline$__CFA_PATCH__$}
+\item\hspace*{-4pt}\Indexc{__CFA_PATCH__}\index{preprocessor variables!__CFA_PATCH__@\lstinline$__CFA_PATCH__$}
 is always available during preprocessing and its value is the current patch \Index{version number} of \CFA.
 
-\item
-\hspace*{-4pt}\lstinline$__CFORALL__$
-\indexc{__CFORALL__}\index{preprocessor variables!__CFORALL__@\lstinline$__CFORALL__$}
+\item\hspace*{-4pt}\Indexc{__CFORALL__}\index{preprocessor variables!__CFORALL__@\lstinline$__CFORALL__$}
 is always available during preprocessing and it has no value.
 \end{description}
@@ -282,7 +274,7 @@
 \begin{lstlisting}
 #ifndef __CFORALL__
-#include <stdio.h>		// C header file
+#include <stdio.h>			// C header file
 #else
-#include <fstream>		// @\CFA{}@ header file
+#include <fstream>			// §\CFA{}§ header file
 #endif
 \end{lstlisting}
@@ -294,5 +286,5 @@
 Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, e.g.:
 \begin{lstlisting}
-2`_`147`_`483`_`648;				// decimal constant
+2®_®147®_®483®_®648;				// decimal constant
 56_ul;						// decimal unsigned long constant
 0_377;						// octal constant
@@ -360,5 +352,5 @@
 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}	& \multicolumn{1}{c}{\textbf{C}}	\\
 \begin{lstlisting}
-`* int x, y;`
+®* int x, y;®
 \end{lstlisting}
 &
@@ -488,6 +480,6 @@
 The point of the new syntax is to allow returning multiple values from a routine~\cite{CLU,Galletly96}, e.g.:
 \begin{lstlisting}
-`[ int o1, int o2, char o3 ]` f( int i1, char i2, char i3 ) {
-	@\emph{routine body}@
+®[ int o1, int o2, char o3 ]® f( int i1, char i2, char i3 ) {
+	§\emph{routine body}§
 }
 \end{lstlisting}
@@ -500,10 +492,10 @@
 Declaration qualifiers can only appear at the start of a routine definition, e.g.:
 \begin{lstlisting}
-extern [ int x ] g( int y ) {@\,@}
+extern [ int x ] g( int y ) {§\,§}
 \end{lstlisting}
 Lastly, if there are no output parameters or input parameters, the brackets and/or parentheses must still be specified;
 in both cases the type is assumed to be void as opposed to old style C defaults of int return type and unknown parameter types, respectively, as in:
 \begin{lstlisting}
-[@\,@] g();						// no input or output parameters
+[§\,§] g();						// no input or output parameters
 [ void ] g( void );			// no input or output parameters
 \end{lstlisting}
@@ -556,7 +548,7 @@
 Because the value in the return variable is automatically returned when a \CFA routine terminates, the \lstinline@return@ statement \emph{does not} contain an expression, as in:
 \begin{lstlisting}
-`[ int x ]` f() {
+®[ int x ]® f() {
 	... x = 0; ... x = y; ...
-	`return;` // implicitly return x
+	®return;® // implicitly return x
 }
 \end{lstlisting}
@@ -836,8 +828,8 @@
 
 int fred() {
-	s.t.c = `S.`R;	// type qualification
-	struct `S.`T t = { `S.`R, 1, 2 };
-	enum `S.`C c;
-	union `S.T.`U u;
+	s.t.c = ®S.®R;	// type qualification
+	struct ®S.®T t = { ®S.®R, 1, 2 };
+	enum ®S.®C c;
+	union ®S.T.®U u;
 }
 \end{lstlisting}
@@ -863,5 +855,5 @@
 qsort( ia, size );		// sort ascending order using builtin ?<?
 {
-	`int ?<?( int x, int y ) { return x > y; }` // nested routine
+	®int ?<?( int x, int y ) { return x > y; }® // nested routine
 	qsort( ia, size );	// sort descending order by local redefinition
 }
@@ -873,8 +865,8 @@
 \begin{lstlisting}
 [* [int]( int )] foo() {		// int (*foo())( int )
-	int `i` = 7;
+	int ®i® = 7;
 	int bar( int p ) {
-		`i` += 1;					// dependent on local variable
-		sout | `i` | endl;
+		®i® += 1;					// dependent on local variable
+		sout | ®i® | endl;
 	}
 	return bar;					// undefined because of local dependence
@@ -897,5 +889,5 @@
 The general syntax of a tuple is:
 \begin{lstlisting}
-[ $\emph{exprlist}$ ]
+[ §\emph{exprlist}§ ]
 \end{lstlisting}
 where \lstinline@$\emph{exprlist}$@ is a list of one or more expressions separated by commas.
@@ -917,5 +909,5 @@
 The general syntax of a tuple type is:
 \begin{lstlisting}
-[ @\emph{typelist}@ ]
+[ §\emph{typelist}§ ]
 \end{lstlisting}
 where \lstinline@$\emph{typelist}$@ is a list of one or more legal \CFA or C type specifications separated by commas, which may include other tuple type specifications.
@@ -1047,7 +1039,7 @@
 Mass assignment has the following form:
 \begin{lstlisting}
-[ @\emph{lvalue}@, ..., @\emph{lvalue}@ ] = @\emph{expr}@;
-\end{lstlisting}
-The left-hand side is a tuple of \lstinline@$\emph{lvalues}$@, which is a list of expressions each yielding an address, i.e., any data object that can appear on the left-hand side of a conventional assignment statement.
+[ §\emph{lvalue}§, ..., §\emph{lvalue}§ ] = §\emph{expr}§;
+\end{lstlisting}
+The left-hand side is a tuple of \emph{lvalues}, which is a list of expressions each yielding an address, i.e., any data object that can appear on the left-hand side of a conventional assignment statement.
 \lstinline@$\emph{expr}$@ is any standard arithmetic expression.
 Clearly, the types of the entities being assigned must be type compatible with the value of the expression.
@@ -1086,8 +1078,8 @@
 Multiple assignment has the following form:
 \begin{lstlisting}
-[ @\emph{lvalue}@, . . ., @\emph{lvalue}@ ] = [ @\emph{expr}@, . . ., @\emph{expr}@ ];
-\end{lstlisting}
-The left-hand side is a tuple of \lstinline@$\emph{lvalues}$@, and the right-hand side is a tuple of \lstinline@$\emph{expr}$@s.
-Each \lstinline@$\emph{expr}$@ appearing on the righthand side of a multiple assignment statement is assigned to the corresponding \lstinline@$\emph{lvalues}$@ on the left-hand side of the statement using parallel semantics for each assignment.
+[ §\emph{lvalue}§, . . ., §\emph{lvalue}§ ] = [ §\emph{expr}§, . . ., §\emph{expr}§ ];
+\end{lstlisting}
+The left-hand side is a tuple of \emph{lvalues}, and the right-hand side is a tuple of \emph{expr}s.
+Each \emph{expr} appearing on the righthand side of a multiple assignment statement is assigned to the corresponding \emph{lvalues} on the left-hand side of the statement using parallel semantics for each assignment.
 An example of multiple assignment is:
 \begin{lstlisting}
@@ -1126,5 +1118,5 @@
 Cascade assignment has the following form:
 \begin{lstlisting}
-@\emph{tuple}@ = @\emph{tuple}@ = ... = @\emph{tuple}@;
+§\emph{tuple}§ = §\emph{tuple}§ = ... = §\emph{tuple}§;
 \end{lstlisting}
 and it has the same parallel semantics as for mass and multiple assignment.
@@ -1144,9 +1136,9 @@
 Its general form is:
 \begin{lstlisting}
-@\emph{expr}@ . [ @\emph{fieldlist}@ ]
-@\emph{expr}@ -> [ @\emph{fieldlist}@ ]
-\end{lstlisting}
-\lstinline@$\emph{expr}$@ is any expression yielding a value of type record, e.g., \lstinline@struct@, \lstinline@union@.
-Each element of \lstinline@$\emph{ fieldlist}$@ is an element of the record specified by \lstinline@$\emph{expr}$@.
+§\emph{expr}§ . [ §\emph{fieldlist}§ ]
+§\emph{expr}§ -> [ §\emph{fieldlist}§ ]
+\end{lstlisting}
+\emph{expr} is any expression yielding a value of type record, e.g., \lstinline@struct@, \lstinline@union@.
+Each element of \emph{ fieldlist} is an element of the record specified by \emph{expr}.
 A record-field tuple may be used anywhere a tuple can be used. An example of the use of a record-field tuple is
 the following:
@@ -1188,10 +1180,10 @@
 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}	& \multicolumn{1}{c}{\textbf{C}}	\\
 \begin{lstlisting}
-`L1:` for ( ... ) {
-	`L2:` for ( ... ) {
-		`L3:` for ( ... ) {
-			... break `L1`; ...
-			... break `L2`; ...
-			... break `L3`; // or break
+®L1:® for ( ... ) {
+	®L2:® for ( ... ) {
+		®L3:® for ( ... ) {
+			... break ®L1®; ...
+			... break ®L2®; ...
+			... break ®L3®; // or break
 		}
 	}
@@ -1218,10 +1210,10 @@
 \multicolumn{1}{c@{\hspace{30pt}}}{\textbf{\CFA}}	& \multicolumn{1}{c}{\textbf{C}}	\\
 \begin{lstlisting}
-`L1`: for ( ... ) {
-	`L2`: for ( ... ) {
-		`L3`: for ( ... ) {
-			... continue `L1`; ...
-			... continue `L2`; ...
-			... continue `L3`; ...
+®L1®: for ( ... ) {
+	®L2®: for ( ... ) {
+		®L3®: for ( ... ) {
+			... continue ®L1®; ...
+			... continue ®L2®; ...
+			... continue ®L3®; ...
 
 		}
@@ -1459,7 +1451,7 @@
 \begin{lstlisting}
 switch ( i ) {
-  `case 1, 3, 5`:
+  ®case 1, 3, 5®:
 	...
-  `case 2, 4, 6`:
+  ®case 2, 4, 6®:
 	...
 }
@@ -1491,7 +1483,7 @@
 \begin{lstlisting}
 switch ( i ) {
-  `case 1~5:`
+  ®case 1~5:®
 	...
-  `case 10~15:`
+  ®case 10~15:®
 	...
 }
@@ -2048,9 +2040,9 @@
 For example, given
 \begin{lstlisting}
-auto j = `...`
+auto j = ®...®
 \end{lstlisting}
 and the need to write a routine to compute using \lstinline@j@
 \begin{lstlisting}
-void rtn( `...` parm );
+void rtn( ®...® parm );
 rtn( j );
 \end{lstlisting}
@@ -2372,9 +2364,9 @@
 To make this work, a space is required after the field selection:
 \begin{lstlisting}
-`s.@\textvisiblespace@0` = 0;
-`s.@\textvisiblespace@1` = 1;
+®s.§\textvisiblespace§0® = 0;
+®s.§\textvisiblespace§1® = 1;
 \end{lstlisting}
 While this sytact is awkward, it is unlikely many programers will name fields of a structure 0 or 1.
-Like the \CC lexical problem with closing template-syntax, e.g, \lstinline@Foo<Bar<int`>>`@, this issue can be solved with a more powerful lexer/parser.
+Like the \CC lexical problem with closing template-syntax, e.g, \lstinline@Foo<Bar<int®>>®@, this issue can be solved with a more powerful lexer/parser.
 
 There are several ambiguous cases with operator identifiers, e.g., \lstinline@int *?*?()@, where the string \lstinline@*?*?@ can be lexed as \lstinline@*@/\lstinline@?*?@ or \lstinline@*?@/\lstinline@*?@.
@@ -2383,6 +2375,6 @@
 The first case is for the function-call identifier \lstinline@?()@:
 \begin{lstlisting}
-int *@\textvisiblespace@?()();	// declaration: space required after '*'
-*@\textvisiblespace@?()();		// expression: space required after '*'
+int *§\textvisiblespace§?()();	// declaration: space required after '*'
+*§\textvisiblespace§?()();		// expression: space required after '*'
 \end{lstlisting}
 Without the space, the string \lstinline@*?()@ is ambiguous without N character look ahead;
@@ -2391,8 +2383,8 @@
 The 4 remaining cases occur in expressions:
 \begin{lstlisting}
-i++@\textvisiblespace@?i:0;		// space required before '?'
-i--@\textvisiblespace@?i:0;		// space required before '?'
-i@\textvisiblespace@?++i:0;		// space required after '?'
-i@\textvisiblespace@?--i:0;		// space required after '?'
+i++§\textvisiblespace§?i:0;		// space required before '?'
+i--§\textvisiblespace§?i:0;		// space required before '?'
+i§\textvisiblespace§?++i:0;		// space required after '?'
+i§\textvisiblespace§?--i:0;		// space required after '?'
 \end{lstlisting}
 In the first two cases, the string \lstinline@i++?@ is ambiguous, where this string can be lexed as \lstinline@i@ / \lstinline@++?@ or \lstinline@i++@ / \lstinline@?@;
@@ -4079,5 +4071,4 @@
 Given that nested types in C are equivalent to not using them, i.e., they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.
 
-
 \item
 Change: In C++, the name of a nested class is local to its enclosing class.
@@ -4090,14 +4081,8 @@
 struct Y yy; // valid C, invalid C++
 \end{lstlisting}
-Rationale: C++ classes have member functions which require that classes establish scopes. The C rule
-would leave classes as an incomplete scope mechanism which would prevent C++ programmers from maintaining
-locality within a class. A coherent set of scope rules for C++ based on the C rule would be very
-complicated and C++ programmers would be unable to predict reliably the meanings of nontrivial examples
-involving nested or local functions.
-Effect on original feature: Change of semantics of welldefined
-feature.
-Difficulty of converting: Semantic transformation. To make the struct type name visible in the scope of
-the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing
-struct is defined. Example:
+Rationale: C++ classes have member functions which require that classes establish scopes.
+The C rule would leave classes as an incomplete scope mechanism which would prevent C++ programmers from maintaining locality within a class. A coherent set of scope rules for C++ based on the C rule would be very complicated and C++ programmers would be unable to predict reliably the meanings of nontrivial examples involving nested or local functions.
+Effect on original feature: Change of semantics of welldefined feature.
+Difficulty of converting: Semantic transformation. To make the struct type name visible in the scope of the enclosing struct, the struct tag could be declared in the scope of the enclosing struct, before the enclosing struct is defined. Example:
 \begin{lstlisting}
 struct Y; // struct Y and struct X are at the same scope
@@ -4106,7 +4091,6 @@
 };
 \end{lstlisting}
-All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of
-the enclosing struct could be exported to the scope of the enclosing struct. Note: this is a consequence of
-the difference in scope rules, which is documented in 3.3.
+All the definitions of C struct types enclosed in other struct definitions and accessed outside the scope of the enclosing struct could be exported to the scope of the enclosing struct.
+Note: this is a consequence of the difference in scope rules, which is documented in 3.3.
 How widely used: Seldom.
 \end{enumerate}
@@ -4124,5 +4108,5 @@
 \begin{lstlisting}
 int x = 0, y = 1, z = 2;
-`sout` `|` x `|` y `|` z `| endl`;
+®sout® ®|® x ®|® y ®|® z ®| endl®;
 \end{lstlisting}
 &
@@ -4133,5 +4117,5 @@
 \end{tabular}
 \end{quote2}
-The \CFA form is half as many characters, and is similar to Python I/O with respect to implicit separators.
+The \CFA form is half as many characters, and is similar to \Index{Python} I/O with respect to implicit separators.
 
 The logical-or operator is used because it is the lowest-priority overloadable operator, other than assignment.
@@ -4179,12 +4163,12 @@
 which is a local mechanism to disable insertion of the separator character.
 \item
-A seperator does not appear before a C string starting with the (extended) \Index{ASCII}\index{ASCII!extended} characters: \lstinline[mathescape=off]@([{$£¥¿«@
+A seperator does not appear before a C string starting with the (extended) \Index{ASCII}\index{ASCII!extended} characters: \lstinline[mathescape=off]@([{$£¥¡¿«@
 %$
 \begin{lstlisting}[mathescape=off]
-sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¿" | 7 | "x «" | 8 | endl;
+sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl;
 \end{lstlisting}
 %$
 \begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
-x (1 x [2 x {3 x $4 x £5 x ¥6 x ¿7 x «8
+x (1 x [2 x {3 x $4 x £5 x ¥6 x ¡7 x ¿8 x «9
 \end{lstlisting}
 %$
@@ -4199,14 +4183,10 @@
 \end{lstlisting}
 \item
-A seperator does not appear before or after a C string begining/ending with the characters: \lstinline[showspaces=true]@\`'" \f\n\r\t\v@
+A seperator does not appear before or after a C string begining/ending with the \Index{ASCII} quote or whitespace characters: \lstinline[showspaces=true]@`'" \t\v\f\r\n@
 \begin{lstlisting}[belowskip=0pt]
-sout | "x\`" | 1 | "\`x'" | 2 | "'x\"" | 3 | "\"x" | "x " | 4 | " x" | endl;
-\end{lstlisting}
-\begin{lstlisting}[mathescape=off,showspaces=true,aboveskip=0pt,belowskip=0pt]
-x\`1\`x'2'x"3"x x 4 x
-\end{lstlisting}
-\begin{lstlisting}[showtabs=true,aboveskip=0pt]
-sout | "x\t" | 1 | "\tx" | endl;
-x	1	x
+sout | "x`" | 1 | "`x'" | 2 | "'x\"" | 3 | "\"x" | "x " | 4 | " x" | "x\t" | 1 | "\tx" | endl;
+\end{lstlisting}
+\begin{lstlisting}[mathescape=off,showspaces=true,showtabs=true,aboveskip=0pt,belowskip=0pt]
+x`1`x'2'x"3"x x 4 x x	1	x
 \end{lstlisting}
 \end{enumerate}
@@ -4260,9 +4240,8 @@
 	sout | '1' | '2' | '3' | endl;
 	sout | 1 | "" | 2 | "" | 3 | endl;
-	sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¿" | 7 | "x «" | 8 | endl;
+	sout | "x (" | 1 | "x [" | 2 | "x {" | 3 | "x $" | 4 | "x £" | 5 | "x ¥" | 6 | "x ¡" | 7 | "x ¿" | 8 | "x «" | 9 | endl;
 	sout | 1 | ", x" | 2 | ". x" | 3 | ": x" | 4 | "; x" | 5 | "! x" | 6 | "? x" | 7 | ") x" | 8 | "] x" | 9 | "} x"
 		 | 10 | "% x" | 11 | "¢ x" | 12 | "» x" | endl;
-	sout | "x`" | 1 | "`x'" | 2 | "'x\"" | 3 | "\"x" | "x " | 4 | " x" | endl;
-	sout | "x\t" | 1 | "\tx" | endl;
+	sout | "x`" | 1 | "`x'" | 2 | "'x\"" | 3 | "\"x" | "x " | 4 | " x" | "x\t" | 1 | "\tx" | endl;
 	sout | sepOn | 1 | 2 | 3 | sepOn | endl;	// separator at start of line
 	sout | 1 | sepOff | 2 | 3 | endl;			// turn off implicit separator temporarily
@@ -4290,14 +4269,14 @@
 \subsection{malloc}
 
-\begin{lstlisting}[escapechar=^]
-forall( otype T ) T * malloc( void );^\indexc{malloc}^
+\begin{lstlisting}
+forall( otype T ) T * malloc( void );§\indexc{malloc}§
 forall( otype T ) T * malloc( char fill );
 forall( otype T ) T * malloc( T * ptr, size_t size );
 forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
-forall( otype T ) T * calloc( size_t nmemb );^\indexc{calloc}^
-forall( otype T ) T * realloc( T * ptr, size_t size );^\indexc{ato}^
+forall( otype T ) T * calloc( size_t nmemb );§\indexc{calloc}§
+forall( otype T ) T * realloc( T * ptr, size_t size );§\indexc{ato}§
 forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
 
-forall( otype T ) T * aligned_alloc( size_t alignment );^\indexc{ato}^
+forall( otype T ) T * aligned_alloc( size_t alignment );§\indexc{ato}§
 forall( otype T ) T * memalign( size_t alignment );		// deprecated
 forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
@@ -4310,6 +4289,6 @@
 \subsection{ato / strto}
 
-\begin{lstlisting}[escapechar=^]
-int ato( const char * ptr );^\indexc{ato}^
+\begin{lstlisting}
+int ato( const char * ptr );§\indexc{ato}§
 unsigned int ato( const char * ptr );
 long int ato( const char * ptr );
@@ -4341,10 +4320,10 @@
 \subsection{bsearch / qsort}
 
-\begin{lstlisting}[escapechar=^]
+\begin{lstlisting}
 forall( otype T | { int ?<?( T, T ); } )
-T * bsearch( const T key, const T * arr, size_t dimension );^\indexc{bsearch}^
+T * bsearch( const T key, const T * arr, size_t dimension );§\indexc{bsearch}§
 
 forall( otype T | { int ?<?( T, T ); } )
-void qsort( const T * arr, size_t dimension );^\indexc{qsort}^
+void qsort( const T * arr, size_t dimension );§\indexc{qsort}§
 \end{lstlisting}
 
@@ -4352,6 +4331,6 @@
 \subsection{abs}
 
-\begin{lstlisting}[escapechar=^]
-char abs( char );^\indexc{abs}^
+\begin{lstlisting}
+char abs( char );§\indexc{abs}§
 int abs( int );
 long int abs( long int );
@@ -4368,7 +4347,7 @@
 \subsection{random}
 
-\begin{lstlisting}[escapechar=^]
-void rand48seed( long int s );^\indexc{rand48seed}^
-char rand48();^\indexc{rand48}^
+\begin{lstlisting}
+void rand48seed( long int s );§\indexc{rand48seed}§
+char rand48();§\indexc{rand48}§
 int rand48();
 unsigned int rand48();
@@ -4385,13 +4364,13 @@
 \subsection{min / max / swap}
 
-\begin{lstlisting}[escapechar=^]
+\begin{lstlisting}
 forall( otype T | { int ?<?( T, T ); } )
-T min( const T t1, const T t2 );^\indexc{min}^
+T min( const T t1, const T t2 );§\indexc{min}§
 
 forall( otype T | { int ?>?( T, T ); } )
-T max( const T t1, const T t2 );^\indexc{max}^
+T max( const T t1, const T t2 );§\indexc{max}§
 
 forall( otype T )
-void swap( T * t1, T * t2 );^\indexc{swap}^
+void swap( T * t1, T * t2 );§\indexc{swap}§
 \end{lstlisting}
 
@@ -4405,6 +4384,6 @@
 \subsection{General}
 
-\begin{lstlisting}[escapechar=^]
-float fabs( float );^\indexc{fabs}^
+\begin{lstlisting}
+float fabs( float );§\indexc{fabs}§
 double fabs( double );
 long double fabs( long double );
@@ -4413,5 +4392,5 @@
 long double cabs( long double _Complex );
 
-float ?%?( float, float );^\indexc{fmod}^
+float ?%?( float, float );§\indexc{fmod}§
 float fmod( float, float );
 double ?%?( double, double );
@@ -4420,9 +4399,9 @@
 long double fmod( long double, long double );
 
-float remainder( float, float );^\indexc{remainder}^
+float remainder( float, float );§\indexc{remainder}§
 double remainder( double, double );
 long double remainder( long double, long double );
 
-[ int, float ] remquo( float, float );^\indexc{remquo}^
+[ int, float ] remquo( float, float );§\indexc{remquo}§
 float remquo( float, float, int * );
 [ int, double ] remquo( double, double );
@@ -4432,5 +4411,5 @@
 
 [ int, float ] div( float, float );						// alternative name for remquo
-float div( float, float, int * );^\indexc{div}^
+float div( float, float, int * );§\indexc{div}§
 [ int, double ] div( double, double );
 double div( double, double, int * );
@@ -4438,13 +4417,13 @@
 long double div( long double, long double, int * );
 
-float fma( float, float, float );^\indexc{fma}^
+float fma( float, float, float );§\indexc{fma}§
 double fma( double, double, double );
 long double fma( long double, long double, long double );
 
-float fdim( float, float );^\indexc{fdim}^
+float fdim( float, float );§\indexc{fdim}§
 double fdim( double, double );
 long double fdim( long double, long double );
 
-float nan( const char * );^\indexc{nan}^
+float nan( const char * );§\indexc{nan}§
 double nan( const char * );
 long double nan( const char * );
@@ -4454,6 +4433,6 @@
 \subsection{Exponential}
 
-\begin{lstlisting}[escapechar=^]
-float exp( float );^\indexc{exp}^
+\begin{lstlisting}
+float exp( float );§\indexc{exp}§
 double exp( double );
 long double exp( long double );
@@ -4462,5 +4441,5 @@
 long double _Complex exp( long double _Complex );
 
-float exp2( float );^\indexc{exp2}^
+float exp2( float );§\indexc{exp2}§
 double exp2( double );
 long double exp2( long double );
@@ -4469,9 +4448,9 @@
 long double _Complex exp2( long double _Complex );
 
-float expm1( float );^\indexc{expm1}^
+float expm1( float );§\indexc{expm1}§
 double expm1( double );
 long double expm1( long double );
 
-float log( float );^\indexc{log}^
+float log( float );§\indexc{log}§
 double log( double );
 long double log( long double );
@@ -4480,5 +4459,5 @@
 long double _Complex log( long double _Complex );
 
-float log2( float );^\indexc{log2}^
+float log2( float );§\indexc{log2}§
 double log2( double );
 long double log2( long double );
@@ -4487,5 +4466,5 @@
 long double _Complex log2( long double _Complex );
 
-float log10( float );^\indexc{log10}^
+float log10( float );§\indexc{log10}§
 double log10( double );
 long double log10( long double );
@@ -4494,13 +4473,13 @@
 long double _Complex log10( long double _Complex );
 
-float log1p( float );^\indexc{log1p}^
+float log1p( float );§\indexc{log1p}§
 double log1p( double );
 long double log1p( long double );
 
-int ilogb( float );^\indexc{ilogb}^
+int ilogb( float );§\indexc{ilogb}§
 int ilogb( double );
 int ilogb( long double );
 
-float logb( float );^\indexc{logb}^
+float logb( float );§\indexc{logb}§
 double logb( double );
 long double logb( long double );
@@ -4510,6 +4489,6 @@
 \subsection{Power}
 
-\begin{lstlisting}[escapechar=^]
-float sqrt( float );^\indexc{sqrt}^
+\begin{lstlisting}
+float sqrt( float );§\indexc{sqrt}§
 double sqrt( double );
 long double sqrt( long double );
@@ -4518,13 +4497,13 @@
 long double _Complex sqrt( long double _Complex );
 
-float cbrt( float );^\indexc{cbrt}^
+float cbrt( float );§\indexc{cbrt}§
 double cbrt( double );
 long double cbrt( long double );
 
-float hypot( float, float );^\indexc{hypot}^
+float hypot( float, float );§\indexc{hypot}§
 double hypot( double, double );
 long double hypot( long double, long double );
 
-float pow( float, float );^\indexc{pow}^
+float pow( float, float );§\indexc{pow}§
 double pow( double, double );
 long double pow( long double, long double );
@@ -4537,6 +4516,6 @@
 \subsection{Trigonometric}
 
-\begin{lstlisting}[escapechar=^]
-float sin( float );^\indexc{sin}^
+\begin{lstlisting}
+float sin( float );§\indexc{sin}§
 double sin( double );
 long double sin( long double );
@@ -4545,5 +4524,5 @@
 long double _Complex sin( long double _Complex );
 
-float cos( float );^\indexc{cos}^
+float cos( float );§\indexc{cos}§
 double cos( double );
 long double cos( long double );
@@ -4552,5 +4531,5 @@
 long double _Complex cos( long double _Complex );
 
-float tan( float );^\indexc{tan}^
+float tan( float );§\indexc{tan}§
 double tan( double );
 long double tan( long double );
@@ -4559,5 +4538,5 @@
 long double _Complex tan( long double _Complex );
 
-float asin( float );^\indexc{asin}^
+float asin( float );§\indexc{asin}§
 double asin( double );
 long double asin( long double );
@@ -4566,5 +4545,5 @@
 long double _Complex asin( long double _Complex );
 
-float acos( float );^\indexc{acos}^
+float acos( float );§\indexc{acos}§
 double acos( double );
 long double acos( long double );
@@ -4573,5 +4552,5 @@
 long double _Complex acos( long double _Complex );
 
-float atan( float );^\indexc{atan}^
+float atan( float );§\indexc{atan}§
 double atan( double );
 long double atan( long double );
@@ -4580,10 +4559,10 @@
 long double _Complex atan( long double _Complex );
 
-float atan2( float, float );^\indexc{atan2}^
+float atan2( float, float );§\indexc{atan2}§
 double atan2( double, double );
 long double atan2( long double, long double );
 
 float atan( float, float );								// alternative name for atan2
-double atan( double, double );^\indexc{atan}^
+double atan( double, double );§\indexc{atan}§
 long double atan( long double, long double );
 \end{lstlisting}
@@ -4592,6 +4571,6 @@
 \subsection{Hyperbolic}
 
-\begin{lstlisting}[escapechar=^]
-float sinh( float );^\indexc{sinh}^
+\begin{lstlisting}
+float sinh( float );§\indexc{sinh}§
 double sinh( double );
 long double sinh( long double );
@@ -4600,5 +4579,5 @@
 long double _Complex sinh( long double _Complex );
 
-float cosh( float );^\indexc{cosh}^
+float cosh( float );§\indexc{cosh}§
 double cosh( double );
 long double cosh( long double );
@@ -4607,5 +4586,5 @@
 long double _Complex cosh( long double _Complex );
 
-float tanh( float );^\indexc{tanh}^
+float tanh( float );§\indexc{tanh}§
 double tanh( double );
 long double tanh( long double );
@@ -4614,5 +4593,5 @@
 long double _Complex tanh( long double _Complex );
 
-float asinh( float );^\indexc{asinh}^
+float asinh( float );§\indexc{asinh}§
 double asinh( double );
 long double asinh( long double );
@@ -4621,5 +4600,5 @@
 long double _Complex asinh( long double _Complex );
 
-float acosh( float );^\indexc{acosh}^
+float acosh( float );§\indexc{acosh}§
 double acosh( double );
 long double acosh( long double );
@@ -4628,5 +4607,5 @@
 long double _Complex acosh( long double _Complex );
 
-float atanh( float );^\indexc{atanh}^
+float atanh( float );§\indexc{atanh}§
 double atanh( double );
 long double atanh( long double );
@@ -4639,6 +4618,6 @@
 \subsection{Error / Gamma}
 
-\begin{lstlisting}[escapechar=^]
-float erf( float );^\indexc{erf}^
+\begin{lstlisting}
+float erf( float );§\indexc{erf}§
 double erf( double );
 long double erf( long double );
@@ -4647,5 +4626,5 @@
 long double _Complex erf( long double _Complex );
 
-float erfc( float );^\indexc{erfc}^
+float erfc( float );§\indexc{erfc}§
 double erfc( double );
 long double erfc( long double );
@@ -4654,5 +4633,5 @@
 long double _Complex erfc( long double _Complex );
 
-float lgamma( float );^\indexc{lgamma}^
+float lgamma( float );§\indexc{lgamma}§
 double lgamma( double );
 long double lgamma( long double );
@@ -4661,5 +4640,5 @@
 long double lgamma( long double, int * );
 
-float tgamma( float );^\indexc{tgamma}^
+float tgamma( float );§\indexc{tgamma}§
 double tgamma( double );
 long double tgamma( long double );
@@ -4669,18 +4648,18 @@
 \subsection{Nearest Integer}
 
-\begin{lstlisting}[escapechar=^]
-float floor( float );^\indexc{floor}^
+\begin{lstlisting}
+float floor( float );§\indexc{floor}§
 double floor( double );
 long double floor( long double );
 
-float ceil( float );^\indexc{ceil}^
+float ceil( float );§\indexc{ceil}§
 double ceil( double );
 long double ceil( long double );
 
-float trunc( float );^\indexc{trunc}^
+float trunc( float );§\indexc{trunc}§
 double trunc( double );
 long double trunc( long double );
 
-float rint( float );^\indexc{rint}^
+float rint( float );§\indexc{rint}§
 long double rint( long double );
 long int rint( float );
@@ -4691,5 +4670,5 @@
 long long int rint( long double );
 
-long int lrint( float );^\indexc{lrint}^
+long int lrint( float );§\indexc{lrint}§
 long int lrint( double );
 long int lrint( long double );
@@ -4698,9 +4677,9 @@
 long long int llrint( long double );
 
-float nearbyint( float );^\indexc{nearbyint}^
+float nearbyint( float );§\indexc{nearbyint}§
 double nearbyint( double );
 long double nearbyint( long double );
 
-float round( float );^\indexc{round}^
+float round( float );§\indexc{round}§
 long double round( long double );
 long int round( float );
@@ -4711,5 +4690,5 @@
 long long int round( long double );
 
-long int lround( float );^\indexc{lround}^
+long int lround( float );§\indexc{lround}§
 long int lround( double );
 long int lround( long double );
@@ -4722,18 +4701,18 @@
 \subsection{Manipulation}
 
-\begin{lstlisting}[escapechar=^]
-float copysign( float, float );^\indexc{copysign}^
+\begin{lstlisting}
+float copysign( float, float );§\indexc{copysign}§
 double copysign( double, double );
 long double copysign( long double, long double );
 
-float frexp( float, int * );^\indexc{frexp}^
+float frexp( float, int * );§\indexc{frexp}§
 double frexp( double, int * );
 long double frexp( long double, int * );
 
-float ldexp( float, int );^\indexc{ldexp}^
+float ldexp( float, int );§\indexc{ldexp}§
 double ldexp( double, int );
 long double ldexp( long double, int );
 
-[ float, float ] modf( float );^\indexc{modf}^
+[ float, float ] modf( float );§\indexc{modf}§
 float modf( float, float * );
 [ double, double ] modf( double );
@@ -4742,17 +4721,17 @@
 long double modf( long double, long double * );
 
-float nextafter( float, float );^\indexc{nextafter}^
+float nextafter( float, float );§\indexc{nextafter}§
 double nextafter( double, double );
 long double nextafter( long double, long double );
 
-float nexttoward( float, long double );^\indexc{nexttoward}^
+float nexttoward( float, long double );§\indexc{nexttoward}§
 double nexttoward( double, long double );
 long double nexttoward( long double, long double );
 
-float scalbn( float, int );^\indexc{scalbn}^
+float scalbn( float, int );§\indexc{scalbn}§
 double scalbn( double, int );
 long double scalbn( long double, int );
 
-float scalbln( float, long int );^\indexc{scalbln}^
+float scalbln( float, long int );§\indexc{scalbln}§
 double scalbln( double, long int );
 long double scalbln( long double, long int );
@@ -4766,7 +4745,7 @@
 When creating and computing with rational numbers, results are constantly reduced to keep the numerator and denominator as small as possible.
 
-\begin{lstlisting}[escapechar=^]
+\begin{lstlisting}
 // implementation
-struct Rational {^\indexc{Rational}^
+struct Rational {§\indexc{Rational}§
 	long int numerator, denominator;					// invariant: denominator > 0
 }; // Rational
