Index: doc/theses/andrew_beach_MMath/.gitignore
===================================================================
--- doc/theses/andrew_beach_MMath/.gitignore	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
+++ doc/theses/andrew_beach_MMath/.gitignore	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
@@ -0,0 +1,8 @@
+# Intermediate Results:
+out/
+
+# Final Files:
+thesis.pdf
+
+# The Makefile here is not generated.
+!Makefile
Index: doc/theses/andrew_beach_MMath/Makefile
===================================================================
--- doc/theses/andrew_beach_MMath/Makefile	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
+++ doc/theses/andrew_beach_MMath/Makefile	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
@@ -0,0 +1,43 @@
+### Makefile for Andrew Beach's Masters Thesis
+
+DOC=thesis.pdf
+BUILD=out
+TEXSRC=$(wildcard *.tex)
+BIBSRC=$(wildcard *.bib)
+TEXLIB= .:${BUILD}:
+BIBLIB= .:../../bibliography
+
+# Since tex programs like to add their own file extensions:
+BASE= ${DOC:%.pdf=%}
+
+### Special Rules:
+
+.PHONY: all clean deepclean
+
+### Commands:
+LATEX=TEXINPUTS=${TEXLIB} pdflatex -halt-on-error -output-directory=${BUILD}
+BIBTEX=BIBINPUTS=${BIBLIB} bibtex
+GLOSSARY=INDEXSTYLE=${BUILD} makeglossaries-lite
+
+### Rules and Recipies:
+
+all: ${DOC}
+
+${BUILD}/${DOC}: ${TEXSRC} ${BIBSRC} Makefile | ${BUILD}
+	${LATEX} ${BASE}
+	${BIBTEX} ${BUILD}/${BASE}
+	${GLOSSARY} ${BUILD}/${BASE}
+	${LATEX} ${BASE}
+	${LATEX} ${BASE}
+
+${DOC}: ${BUILD}/${DOC}
+	cp $< $@
+
+${BUILD}:
+	mkdir $@
+
+clean:
+	-@rm -rv ${BUILD}
+
+deepclean: clean
+	-@rm -v ${DOC}
Index: doc/theses/andrew_beach_MMath/thesis-frontpgs.tex
===================================================================
--- doc/theses/andrew_beach_MMath/thesis-frontpgs.tex	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
+++ doc/theses/andrew_beach_MMath/thesis-frontpgs.tex	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
@@ -0,0 +1,203 @@
+% Last updated June 14, 2017, by Stephen Carr, IST-Client Services
+% The title page is counted as page `i' but we need to suppress the
+% page number. Also, we don't want any headers or footers.
+%----------------------------------------------------------------------
+% TITLE PAGE
+%----------------------------------------------------------------------
+
+\pagestyle{empty}
+\pagenumbering{roman}
+
+% The contents of the title page are specified in the "titlepage"
+% environment.
+\begin{titlepage}
+        \begin{center}
+        \vspace*{1.0cm}
+
+        \Huge
+        {\bf University of Waterloo E-Thesis Template for \LaTeX }
+
+        \vspace*{1.0cm}
+
+        \normalsize
+        by \\
+
+        \vspace*{1.0cm}
+
+        \Large
+        Pat Neugraad \\
+
+        \vspace*{3.0cm}
+
+        \normalsize
+        A thesis \\
+        presented to the University of Waterloo \\ 
+        in fulfillment of the \\
+        thesis requirement for the degree of \\
+        Doctor of Philosophy \\
+        in \\
+        Zoology \\
+
+        \vspace*{2.0cm}
+
+        Waterloo, Ontario, Canada, 2017 \\
+
+        \vspace*{1.0cm}
+
+        \copyright\ Pat Neugraad 2017 \\
+        \end{center}
+\end{titlepage}
+
+% The rest of the front pages should contain no headers
+% and be numbered using Roman numerals starting with `ii'.
+\pagestyle{plain}
+\setcounter{page}{2}
+
+% Ends the current page and causes all figures and tables that have so far
+% appeared in the input to be printed. In a two-sided printing style, it also
+% makes the next page a right-hand (odd-numbered) page, producing a blank page
+% if necessary.
+\cleardoublepage
+
+ 
+%----------------------------------------------------------------------
+% EXAMINING COMMITTEE (Required for Ph.D. theses only)
+%----------------------------------------------------------------------
+% Remove or comment out the lines below to remove this page
+\begin{center}\textbf{Examining Committee Membership}\end{center}
+  \noindent
+The following served on the Examining Committee for this thesis. The decision of the Examining Committee is by majority vote.
+  \bigskip
+  
+  \noindent
+\begin{tabbing}
+Internal-External Member: \=  \kill % using longest text to define tab length
+External Examiner: \>  Bruce Bruce \\ 
+\> Professor, Dept. of Philosophy of Zoology, University of Wallamaloo \\
+\end{tabbing} 
+  \bigskip
+  
+  \noindent
+\begin{tabbing}
+Internal-External Member: \=  \kill % using longest text to define tab length
+Supervisor(s): \> Doris Johnson \\
+\> Professor, Dept. of Zoology, University of Waterloo \\
+\> Andrea Anaconda \\
+\> Professor Emeritus, Dept. of Zoology, University of Waterloo \\
+\end{tabbing}
+  \bigskip
+  
+  \noindent
+  \begin{tabbing}
+Internal-External Member: \=  \kill % using longest text to define tab length
+Internal Member: \> Pamela Python \\
+\> Professor, Dept. of Zoology, University of Waterloo \\
+\end{tabbing}
+  \bigskip
+  
+  \noindent
+\begin{tabbing}
+Internal-External Member: \=  \kill % using longest text to define tab length
+Internal-External Member: \> Deepa Thotta \\
+\> Professor, Dept. of Philosophy, University of Waterloo \\
+\end{tabbing}
+  \bigskip
+  
+  \noindent
+\begin{tabbing}
+Internal-External Member: \=  \kill % using longest text to define tab length
+Other Member(s): \> Leeping Fang \\
+\> Professor, Dept. of Fine Art, University of Waterloo \\
+\end{tabbing}
+
+\cleardoublepage
+
+%----------------------------------------------------------------------
+% DECLARATION PAGE
+%----------------------------------------------------------------------
+  % The following is a sample Delaration Page as provided by the GSO
+  % December 13th, 2006.  It is designed for an electronic thesis.
+  \noindent
+I hereby declare that I am the sole author of this thesis. This is a true copy of the thesis, including any required final revisions, as accepted by my examiners.
+
+  \bigskip
+  
+  \noindent
+I understand that my thesis may be made electronically available to the public.
+
+\cleardoublepage
+
+%----------------------------------------------------------------------
+% ABSTRACT
+%----------------------------------------------------------------------
+
+\begin{center}\textbf{Abstract}\end{center}
+
+This is the abstract.
+
+Vulputate minim vel consequat praesent at vel iusto et, ex delenit, esse euismod luptatum augue ut sit et eu vel augue autem feugiat, quis ad dolore. Nulla vel, laoreet lobortis te commodo elit qui aliquam enim ex iriure ea ullamcorper nostrud lorem, lorem laoreet eu ex ut vel in zzril wisi quis. Nisl in autem praesent dignissim, sit vel aliquam at te, vero dolor molestie consequat.
+
+Tation iriure sed wisi feugait odio dolore illum duis in accumsan velit illum consequat consequat ipsum molestie duis duis ut ullamcorper. Duis exerci odio blandit vero dolore eros odio amet et nisl in nostrud consequat iusto eum suscipit autem vero. Iusto dolore exerci, ut erat ex, magna in facilisis duis amet feugait augue accumsan zzril delenit aliquip dignissim at. Nisl molestie nibh, vulputate feugait nibh luptatum ea delenit nostrud dolore minim veniam odio volutpat delenit nulla accumsan eum vero ullamcorper eum. Augue velit veniam, dolor, exerci ea feugiat nulla molestie, veniam nonummy nulla dolore tincidunt, consectetuer dolore nulla ipsum commodo.
+
+At nostrud lorem, lorem laoreet eu ex ut vel in zzril wisi. Suscipit consequat in autem praesent dignissim, sit vel aliquam at te, vero dolor molestie consequat eros tation facilisi diam dolor. Odio luptatum dolor in facilisis et facilisi et adipiscing suscipit eu iusto praesent enim, euismod consectetuer feugait duis. Odio veniam et iriure ad qui nonummy aliquip at qui augue quis vel diam, nulla. Autem exerci tation iusto, hendrerit et, tation esse consequat ut velit te dignissim eu esse eros facilisis lobortis, lobortis hendrerit esse dignissim nisl. Nibh nulla minim vel consequat praesent at vel iusto et, ex delenit, esse euismod luptatum.
+
+Ut eum vero ullamcorper eum ad velit veniam, dolor, exerci ea feugiat nulla molestie, veniam nonummy nulla. Elit tincidunt, consectetuer dolore nulla ipsum commodo, ut, at qui blandit suscipit accumsan feugiat vel praesent. In dolor, ea elit suscipit nisl blandit hendrerit zzril. Sit enim, et dolore blandit illum enim duis feugiat velit consequat iriure sed wisi feugait odio dolore illum duis. Et accumsan velit illum consequat consequat ipsum molestie duis duis ut ullamcorper nulla exerci odio blandit vero dolore eros odio amet et.
+
+In augue quis vel diam, nulla dolore exerci tation iusto, hendrerit et, tation esse consequat ut velit. Duis dignissim eu esse eros facilisis lobortis, lobortis hendrerit esse dignissim nisl illum nulla minim vel consequat praesent at vel iusto et, ex delenit, esse euismod. Nulla augue ut sit et eu vel augue autem feugiat, quis ad dolore te vel, laoreet lobortis te commodo elit qui aliquam enim ex iriure. Ut ullamcorper nostrud lorem, lorem laoreet eu ex ut vel in zzril wisi quis consequat in autem praesent dignissim, sit vel. Dolore at te, vero dolor molestie consequat eros tation facilisi diam. Feugait augue luptatum dolor in facilisis et facilisi et adipiscing suscipit eu iusto praesent enim, euismod consectetuer feugait duis vulputate veniam et.
+
+Ad eros odio amet et nisl in nostrud consequat iusto eum suscipit autem vero enim dolore exerci, ut. Esse ex, magna in facilisis duis amet feugait augue accumsan zzril. Lobortis aliquip dignissim at, in molestie nibh, vulputate feugait nibh luptatum ea delenit nostrud dolore minim veniam odio. Euismod delenit nulla accumsan eum vero ullamcorper eum ad velit veniam. Quis, exerci ea feugiat nulla molestie, veniam nonummy nulla. Elit tincidunt, consectetuer dolore nulla ipsum commodo, ut, at qui blandit suscipit accumsan feugiat vel praesent.
+
+Dolor zzril wisi quis consequat in autem praesent dignissim, sit vel aliquam at te, vero. Duis molestie consequat eros tation facilisi diam dolor augue. Dolore dolor in facilisis et facilisi et adipiscing suscipit eu iusto praesent enim, euismod consectetuer feugait duis vulputate.
+
+\cleardoublepage
+
+%----------------------------------------------------------------------
+% ACKNOWLEDGEMENTS
+%----------------------------------------------------------------------
+
+\begin{center}\textbf{Acknowledgements}\end{center}
+
+I would like to thank all the little people who made this thesis possible.
+\cleardoublepage
+
+%----------------------------------------------------------------------
+% DEDICATION
+%----------------------------------------------------------------------
+\begin{center}\textbf{Dedication}\end{center}
+
+This is dedicated to the one I love.
+\cleardoublepage
+
+%----------------------------------------------------------------------
+% TABLE OF CONTENTS
+%----------------------------------------------------------------------
+\renewcommand\contentsname{Table of Contents}
+\tableofcontents
+\cleardoublepage
+\phantomsection    % allows hyperref to link to the correct page
+
+%----------------------------------------------------------------------
+% LIST OF TABLES
+%----------------------------------------------------------------------
+\addcontentsline{toc}{chapter}{List of Tables}
+\listoftables
+\cleardoublepage
+\phantomsection		% allows hyperref to link to the correct page
+
+%----------------------------------------------------------------------
+% LIST OF FIGURES
+%----------------------------------------------------------------------
+\addcontentsline{toc}{chapter}{List of Figures}
+\listoffigures
+\cleardoublepage
+\phantomsection		% allows hyperref to link to the correct page
+
+%----------------------------------------------------------------------
+% GLOSSARIES (Provided by the glossaries-extra package)
+%----------------------------------------------------------------------
+\printglossaries
+\cleardoublepage
+\phantomsection		% allows hyperref to link to the correct page
+
+% Change page numbering back to Arabic numerals
+\pagenumbering{arabic}
Index: doc/theses/andrew_beach_MMath/thesis.bib
===================================================================
--- doc/theses/andrew_beach_MMath/thesis.bib	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
+++ doc/theses/andrew_beach_MMath/thesis.bib	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
@@ -0,0 +1,28 @@
+% Bibliography of key references for "LaTeX for Thesis and Large Documents"
+% For use with BibTeX
+
+@book{goossens.book,
+	author =	"Michel Goossens and Frank Mittelbach and 
+			 Alexander Samarin",
+	title =		"The \LaTeX\ Companion",
+	year =		"1994",
+	publisher =	"Addison-Wesley",
+	address =	"Reading, Massachusetts"
+}
+
+@book{knuth.book,
+        author =        "Donald Knuth",
+        title =         "The \TeX book",
+        year =          "1986",
+        publisher =     "Addison-Wesley",
+        address =       "Reading, Massachusetts"
+}
+
+@book{lamport.book,
+	author =        "Leslie Lamport",
+	title =         "\LaTeX\ --- A Document Preparation System",
+        edition =       "Second",
+	year =		"1994",
+	publisher =     "Addison-Wesley",
+	address =       "Reading, Massachusetts"
+}
Index: doc/theses/andrew_beach_MMath/thesis.tex
===================================================================
--- doc/theses/andrew_beach_MMath/thesis.tex	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
+++ doc/theses/andrew_beach_MMath/thesis.tex	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
@@ -0,0 +1,403 @@
+% uWaterloo Thesis Template for LaTeX 
+% Last Updated June 14, 2017 by Stephen Carr, IST Client Services
+% FOR ASSISTANCE, please send mail to rt-IST-CSmathsci@ist.uwaterloo.ca
+
+% Effective October 2006, the University of Waterloo 
+% requires electronic thesis submission. See the uWaterloo thesis regulations at
+% https://uwaterloo.ca/graduate-studies/thesis.
+
+% DON'T FORGET TO ADD YOUR OWN NAME AND TITLE in the "hyperref" package
+% configuration. THIS INFORMATION GETS EMBEDDED IN THE FINAL PDF DOCUMENT.
+% You can view the information if you view Properties of the PDF document.
+
+% Many faculties/departments also require one or more printed
+% copies. This template attempts to satisfy both types of output. 
+% It is based on the standard "book" document class which provides all
+% necessary sectioning structures and allows multi-part theses.
+
+% DISCLAIMER
+% To the best of our knowledge, this template satisfies the current uWaterloo
+% requirements. However, it is your responsibility to assure that you have met
+% all  requirements of the University and your particular department.
+% Many thanks for the feedback from many graduates that assisted the
+% development of this template.
+
+% -----------------------------------------------------------------------
+
+% By default, output is produced that is geared toward generating a PDF 
+% version optimized for viewing on an electronic display, including 
+% hyperlinks within the PDF.
+ 
+% E.g. to process a thesis called "mythesis.tex" based on this template, run:
+
+% pdflatex mythesis	-- first pass of the pdflatex processor
+% bibtex mythesis	-- generates bibliography from .bib data file(s)
+% makeindex         -- should be run only if an index is used 
+% pdflatex mythesis	-- fixes numbering in cross-references,
+% pdflatex mythesis --   bibliographic references, glossaries, index, etc.
+
+% N.B. The "pdftex" program allows graphics in the following formats to be
+% included with the "\includegraphics" command: PNG, PDF, JPEG, TIFF
+% Tip 1: Generate your figures and photos in the size you want them to appear
+% in your thesis, rather than scaling them with \includegraphics options.
+% Tip 2: Any drawings you do should be in scalable vector graphic formats:
+% SVG, PNG, WMF, EPS and then converted to PNG or PDF, so they are scalable in
+% the final PDF as well.
+% Tip 3: Photographs should be cropped and compressed so as not to be too large.
+
+% To create a PDF output that is optimized for double-sided printing: 
+%
+% 1) comment-out the \documentclass statement in the preamble below, and
+% un-comment the second \documentclass line.
+%
+% 2) change the value assigned below to the boolean variable
+% "PrintVersion" from "false" to "true".
+
+% --------------------- Start of Document Preamble -----------------------
+
+% Specify the document class, default style attributes, and page dimensions
+% For hyperlinked PDF, suitable for viewing on a computer, use this:
+\documentclass[letterpaper,12pt,titlepage,oneside,final]{book}
+ 
+% For PDF, suitable for double-sided printing, change the PrintVersion
+% variable below to "true" and use this \documentclass line instead of the one
+% above:
+%\documentclass[letterpaper,12pt,titlepage,openright,twoside,final]{book}
+
+% Some LaTeX commands I define for my own nomenclature.
+% If you have to, it's better to change nomenclature once here than in a 
+% million places throughout your thesis!
+\newcommand{\package}[1]{\textbf{#1}} % package names in bold text
+\newcommand{\cmmd}[1]{\textbackslash\texttt{#1}} % command name in tt font 
+\newcommand{\href}[1]{#1} % does nothing, but defines the command so the
+  % print-optimized version will ignore \href tags (redefined by hyperref pkg).
+%\newcommand{\texorpdfstring}[2]{#1} % does nothing, but defines the command
+% Anything defined here may be redefined by packages added below...
+
+% This package allows if-then-else control structures.
+\usepackage{ifthen}
+\newboolean{PrintVersion}
+\setboolean{PrintVersion}{false} 
+% CHANGE THIS VALUE TO "true" as necessary, to improve printed results for
+% hard copies by overriding some options of the hyperref package below.
+
+% For a nomenclature (optional; available from ctan.org)
+%\usepackage{nomencl}
+% Lots of math symbols and environments
+\usepackage{amsmath,amssymb,amstext}
+% For including graphics N.B. pdftex graphics driver 
+\usepackage[pdftex]{graphicx}
+
+% I believe the general index function is covered by the glossaries.
+% \usepackage{makeidx}
+% \makeindex
+
+% Hyperlinks make it very easy to navigate an electronic document.
+% In addition, this is where you should specify the thesis title
+% and author as they appear in the properties of the PDF document.
+% Use the "hyperref" package 
+% N.B. HYPERREF MUST BE THE LAST PACKAGE LOADED; ADD ADDITIONAL PKGS ABOVE
+% N.B. pagebackref=true provides links back from the References to the body
+% text. This can cause trouble for printing.
+\usepackage[pdftex,pagebackref=false]{hyperref} % with basic options
+\hypersetup{
+    plainpages=false,       % needed if Roman numbers in frontpages
+    unicode=false,          % non-Latin characters in Acrobat’s bookmarks
+    pdftoolbar=true,        % show Acrobat’s toolbar?
+    pdfmenubar=true,        % show Acrobat’s menu?
+    pdffitwindow=false,     % window fit to page when opened
+    pdfstartview={FitH},    % fits the width of the page to the window
+    pdftitle={uWaterloo\ LaTeX\ Thesis\ Template},    % title: CHANGE THIS TEXT!
+%    pdfauthor={Author},    % author: CHANGE THIS TEXT! and uncomment this line
+%    pdfsubject={Subject},  % subject: CHANGE THIS TEXT! and uncomment this line
+%    pdfkeywords={keyword1} {key2} {key3}, % list of keywords, and uncomment this line if desired
+    pdfnewwindow=true,      % links in new window
+    colorlinks=true,        % false: boxed links; true: colored links
+    linkcolor=blue,         % color of internal links
+    citecolor=green,        % color of links to bibliography
+    filecolor=magenta,      % color of file links
+    urlcolor=cyan           % color of external links
+}
+\ifthenelse{\boolean{PrintVersion}}{
+  % for improved print quality, override some hyperref options
+\hypersetup{
+%    colorlinks,%
+    citecolor=black,%
+    filecolor=black,%
+    linkcolor=black,%
+    urlcolor=black}
+}{} % end of ifthenelse (no else)
+
+\usepackage[toc,abbreviations]{glossaries-extra} % Exception to the
+% rule of hyperref being the last add-on package. If glossaries-extra is not
+% in your LaTeX distribution, get it from CTAN
+% (http://ctan.org/pkg/glossaries-extra). 
+
+% Setting up the page margins...
+% uWaterloo thesis requirements specify a minimum of 1 inch (72pt) margin at
+% the top, bottom, and outside page edges and a 1.125 in. (81pt) gutter
+% margin (on binding side). While this is not an issue for electronic
+% viewing, a PDF may be printed, and so we have the same page layout for
+% both printed and electronic versions, we leave the gutter margin in.
+% Set margins to minimum permitted by uWaterloo thesis regulations:
+\setlength{\marginparwidth}{0pt} % width of margin notes
+% N.B. If margin notes are used, you must adjust \textwidth, \marginparwidth
+% and \marginparsep so that the space left between the margin notes and page
+% edge is less than 15 mm (0.6 in.)
+% Width of space between body text and margin notes.
+\setlength{\marginparsep}{0pt}
+\setlength{\evensidemargin}{0.125in} % Adds 1/8 in. to binding side of all 
+% even-numbered pages when the "twoside" printing option is selected
+\setlength{\oddsidemargin}{0.125in} % Adds 1/8 in. to the left of all pages
+% when "oneside" printing is selected, and to the left of all odd-numbered
+% pages when "twoside" printing is selected
+% Assuming US letter paper (8.5 in. x 11 in.) and side margins as above.
+\setlength{\textwidth}{6.375in}
+\raggedbottom
+
+% The following statement specifies the amount of space between paragraphs.
+% Other reasonable specifications are \bigskipamount and \smallskipamount.
+\setlength{\parskip}{\medskipamount}
+
+% The following statement controls the line spacing.  The default
+% spacing corresponds to good typographic conventions and only slight
+% changes (e.g., perhaps "1.2"), if any, should be made.
+\renewcommand{\baselinestretch}{1} % this is the default line space setting
+
+% By default, each chapter will start on a recto (right-hand side)
+% page.  We also force each section of the front pages to start on 
+% a recto page by inserting \cleardoublepage commands.
+% In many cases, this will require that the verso page be
+% blank and, while it should be counted, a page number should not be
+% printed.  The following statements ensure a page number is not
+% printed on an otherwise blank verso page.
+\let\origdoublepage\cleardoublepage
+\newcommand{\clearemptydoublepage}{%
+  \clearpage{\pagestyle{empty}\origdoublepage}}
+\let\cleardoublepage\clearemptydoublepage
+
+% Define Glossary terms (This is properly done here, in the preamble.
+% Could be \input{} from a file...)
+% Main glossary entries -- definitions of relevant terminology
+\newglossaryentry{computer}
+{
+name=computer,
+description={A programmable machine that receives input data,
+               stores and manipulates the data, and provides
+               formatted output}
+}
+
+% Nomenclature glossary entries -- New definitions, or unusual terminology
+\newglossary*{nomenclature}{Nomenclature}
+\newglossaryentry{dingledorf}
+{
+type=nomenclature,
+name=dingledorf,
+description={A person of supposed average intelligence who makes incredibly brainless misjudgments}
+}
+
+% List of Abbreviations (abbreviations are from the glossaries-extra package)
+\newabbreviation{aaaaz}{AAAAZ}{American Association of Amature Astronomers and Zoologists}
+
+% List of Symbols
+\newglossary*{symbols}{List of Symbols}
+\newglossaryentry{rvec}
+{
+name={$\mathbf{v}$},
+sort={label},
+type=symbols,
+description={Random vector: a location in n-dimensional Cartesian space, where each dimensional component is determined by a random process}
+}
+ 
+\makeglossaries
+
+%======================================================================
+%   L O G I C A L    D O C U M E N T -- the content of your thesis
+%======================================================================
+\begin{document}
+
+% For a large document, it is a good idea to divide your thesis
+% into several files, each one containing one chapter.
+% To illustrate this idea, the "front pages" (i.e., title page,
+% declaration, borrowers' page, abstract, acknowledgements,
+% dedication, table of contents, list of tables, list of figures,
+% nomenclature) are contained within the file "uw-ethesis-frontpgs.tex" which
+% is included into the document by the following statement.
+%----------------------------------------------------------------------
+% FRONT MATERIAL
+%----------------------------------------------------------------------
+\input{thesis-frontpgs} 
+
+%----------------------------------------------------------------------
+% MAIN BODY
+%----------------------------------------------------------------------
+% Because this is a short document, and to reduce the number of files
+% needed for this template, the chapters are not separate
+% documents as suggested above, but you get the idea. If they were
+% separate documents, they would each start with the \chapter command, i.e, do
+% not contain \documentclass or \begin{document} and \end{document} commands.
+%======================================================================
+\chapter{Introduction}
+%======================================================================
+In the beginning, there was $\pi$:
+
+\begin{equation}
+   e^{\pi i} + 1 = 0  \label{eqn_pi}
+\end{equation}
+A \gls{computer} could compute $\pi$ all day long. In fact, subsets of digits
+of $\pi$'s decimal approximation would make a good source for psuedo-random
+vectors, \gls{rvec} . 
+
+%----------------------------------------------------------------------
+\section{State of the Art}
+%----------------------------------------------------------------------
+
+See equation \ref{eqn_pi} on page \pageref{eqn_pi}.\footnote{A famous equation.}
+
+\section{Some Meaningless Stuff}
+
+The credo of the \gls{aaaaz} was, for several years, several paragraphs of gibberish, until the \gls{dingledorf} responsible for the \gls{aaaaz} Web site realized his mistake:
+
+"Velit dolor illum facilisis zzril ipsum, augue odio, accumsan ea augue molestie lobortis zzril laoreet ex ad, adipiscing nulla. Veniam dolore, vel te in dolor te, feugait dolore ex vel erat duis nostrud diam commodo ad eu in consequat esse in ut wisi. Consectetuer dolore feugiat wisi eum dignissim tincidunt vel, nostrud, at vulputate eum euismod, diam minim eros consequat lorem aliquam et ad. Feugait illum sit suscipit ut, tation in dolore euismod et iusto nulla amet wisi odio quis nisl feugiat adipiscing luptatum minim nisl, quis, erat, dolore. Elit quis sit dolor veniam blandit ullamcorper ex, vero nonummy, duis exerci delenit ullamcorper at feugiat ullamcorper, ullamcorper elit vulputate iusto esse luptatum duis autem. Nulla nulla qui, te praesent et at nisl ut in consequat blandit vel augue ut.
+
+Illum suscipit delenit commodo augue exerci magna veniam hendrerit dignissim duis ut feugait amet dolor dolor suscipit iriure veniam. Vel quis enim vulputate nulla facilisis volutpat vel in, suscipit facilisis dolore ut veniam, duis facilisi wisi nulla aliquip vero praesent nibh molestie consectetuer nulla. Wisi nibh exerci hendrerit consequat, nostrud lobortis ut praesent dignissim tincidunt enim eum accumsan. Lorem, nonummy duis iriure autem feugait praesent, duis, accumsan tation enim facilisi qui te dolore magna velit, iusto esse eu, zzril. Feugiat enim zzril, te vel illum, lobortis ut tation, elit luptatum ipsum, aliquam dolor sed. Ex consectetuer aliquip in, tation delenit dignissim accumsan consequat, vero, et ad eu velit ut duis ea ea odio.
+
+Vero qui, te praesent et at nisl ut in consequat blandit vel augue ut dolor illum facilisis zzril ipsum. Exerci odio, accumsan ea augue molestie lobortis zzril laoreet ex ad, adipiscing nulla, et dolore, vel te in dolor te, feugait dolore ex vel erat duis. Ut diam commodo ad eu in consequat esse in ut wisi aliquip dolore feugiat wisi eum dignissim tincidunt vel, nostrud. Ut vulputate eum euismod, diam minim eros consequat lorem aliquam et ad luptatum illum sit suscipit ut, tation in dolore euismod et iusto nulla. Iusto wisi odio quis nisl feugiat adipiscing luptatum minim. Illum, quis, erat, dolore qui quis sit dolor veniam blandit ullamcorper ex, vero nonummy, duis exerci delenit ullamcorper at feugiat. Et, ullamcorper elit vulputate iusto esse luptatum duis autem esse nulla qui.
+
+Praesent dolore et, delenit, laoreet dolore sed eros hendrerit consequat lobortis. Dolor nulla suscipit delenit commodo augue exerci magna veniam hendrerit dignissim duis ut feugait amet. Ad dolor suscipit iriure veniam blandit quis enim vulputate nulla facilisis volutpat vel in. Erat facilisis dolore ut veniam, duis facilisi wisi nulla aliquip vero praesent nibh molestie consectetuer nulla, iriure nibh exerci hendrerit. Vel, nostrud lobortis ut praesent dignissim tincidunt enim eum accumsan ea, nonummy duis. Ad autem feugait praesent, duis, accumsan tation enim facilisi qui te dolore magna velit, iusto esse eu, zzril vel enim zzril, te. Nisl illum, lobortis ut tation, elit luptatum ipsum, aliquam dolor sed minim consectetuer aliquip.
+
+Tation exerci delenit ullamcorper at feugiat ullamcorper, ullamcorper elit vulputate iusto esse luptatum duis autem esse nulla qui. Volutpat praesent et at nisl ut in consequat blandit vel augue ut dolor illum facilisis zzril ipsum, augue odio, accumsan ea augue molestie lobortis zzril laoreet. Ex duis, te velit illum odio, nisl qui consequat aliquip qui blandit hendrerit. Ea dolor nonummy ullamcorper nulla lorem tation laoreet in ea, ullamcorper vel consequat zzril delenit quis dignissim, vulputate tincidunt ut."
+
+%======================================================================
+\chapter{Observations}
+%======================================================================
+
+This would be a good place for some figures and tables.
+
+Some notes on figures and photographs\ldots
+
+\begin{itemize}
+\item A well-prepared PDF should be 
+  \begin{enumerate}
+    \item Of reasonable size, {\it i.e.} photos cropped and compressed.
+    \item Scalable, to allow enlargment of text and drawings. 
+  \end{enumerate} 
+\item Photos must be bit maps, and so are not scaleable by definition. TIFF and
+BMP are uncompressed formats, while JPEG is compressed. Most photos can be
+compressed without losing their illustrative value.
+\item Drawings that you make should be scalable vector graphics, \emph{not} 
+bit maps. Some scalable vector file formats are: EPS, SVG, PNG, WMF. These can
+all be converted into PNG or PDF, that pdflatex recognizes. Your drawing 
+package probably can export to one of these formats directly. Otherwise, a 
+common procedure is to print-to-file through a Postscript printer driver to 
+create a PS file, then convert that to EPS (encapsulated PS, which has a 
+bounding box to describe its exact size rather than a whole page). 
+Programs such as GSView (a Ghostscript GUI) can create both EPS and PDF from
+PS files. Appendix~\ref{AppendixA} shows how to generate properly sized Matlab
+plots and save them as PDF.
+\item It's important to crop your photos and draw your figures to the size that
+you want to appear in your thesis. Scaling photos with the 
+includegraphics command will cause loss of resolution. And scaling down 
+drawings may cause any text annotations to become too small.
+\end{itemize}
+ 
+For more information on \LaTeX\, see the uWaterloo Skills for the
+Academic Workplace \href{https://uwaterloo.ca/information-systems-technology/services/electronic-thesis-preparation-and-submission-support/ethesis-guide/creating-pdf-version-your-thesis/creating-pdf-files-using-latex/latex-ethesis-and-large-documents}{course notes}. 
+\footnote{
+Note that while it is possible to include hyperlinks to external documents,
+it is not wise to do so, since anything you can't control may change over time. 
+It \emph{would} be appropriate and necessary to provide external links to 
+additional resources for a multimedia ``enhanced'' thesis. 
+But also note that if the \package{hyperref} package is not included, 
+as for the print-optimized option in this thesis template, any \cmmd{href} 
+commands in your logical document are no longer defined.
+A work-around employed by this thesis template is to define a dummy
+\cmmd{href} command (which does nothing) in the preamble of the document, 
+before the \package{hyperref} package is included. 
+The dummy definition is then redifined by the
+\package{hyperref} package when it is included.
+}
+
+The classic book by Leslie Lamport \cite{lamport.book}, author of \LaTeX , is
+worth a look too, and the many available add-on packages are described by 
+Goossens \textit{et al} \cite{goossens.book}.
+
+%----------------------------------------------------------------------
+% END MATERIAL
+%----------------------------------------------------------------------
+
+% B I B L I O G R A P H Y
+% -----------------------
+
+% The following statement selects the style to use for references. It controls
+% the sort order of the entries in the bibliography and also the formatting
+% for the in-text labels.
+\bibliographystyle{plain}
+% This specifies the location of the file containing the bibliographic
+% information. It assumes you're using BibTeX (if not, why not?).
+
+% This is needed if the book class is used, to place the anchor in the correct
+% page, because the bibliography will start on its own page.
+% Use \clearpage instead if the document class uses the "oneside" argument.
+\cleardoublepage
+% With hyperref package, enables hyperlinking from the table of contents to
+% bibliography
+\phantomsection
+
+% The following statement causes the title "References" to be used for the
+% bibliography section:
+\renewcommand*{\bibname}{References}
+
+% Add the References to the Table of Contents
+\addcontentsline{toc}{chapter}{\textbf{References}}
+
+% Tip 5: You can create multiple .bib files to organize your references. Just
+% list them all in the \bibliogaphy command, separated by commas (no spaces).
+\bibliography{thesis}
+
+% The following statement causes the specified references to be added to the
+% bibliography even if they were not cited in the text. The asterisk is a
+% wildcard that causes all entries in the bibliographic database to be
+% included (optional).
+\nocite{*}
+
+% The \appendix statement indicates the beginning of the appendices.
+\appendix
+% Add a title page before the appendices and a line in the Table of Contents
+\chapter*{APPENDICES}
+\addcontentsline{toc}{chapter}{APPENDICES}
+%======================================================================
+\chapter[PDF Plots From Matlab]{Matlab Code for Making a PDF Plot}
+\label{AppendixA}
+% Tip 4: Example of how to get a short chapter title for the Table of Contents
+%======================================================================
+\section{Using the GUI}
+Properties of Matab plots can be adjusted from the plot window via a graphical
+interface. Under the Desktop menu in the Figure window, select the Property
+Editor. You may also want to check the Plot Browser and Figure Palette for
+more tools. To adjust properties of the axes, look under the Edit menu and
+select Axes Properties.
+
+To set the figure size and to save as PDF or other file formats, click the
+Export Setup button in the figure Property Editor.
+
+\section{From the Command Line} 
+All figure properties can also be manipulated from the command line. Here's an
+example: 
+\begin{verbatim}
+x=[0:0.1:pi];
+hold on % Plot multiple traces on one figure
+plot(x,sin(x))
+plot(x,cos(x),'--r')
+plot(x,tan(x),'.-g')
+title('Some Trig Functions Over 0 to \pi') % Note LaTeX markup!
+legend('{\it sin}(x)','{\it cos}(x)','{\it tan}(x)')
+hold off
+set(gca,'Ylim',[-3 3]) % Adjust Y limits of "current axes"
+set(gcf,'Units','inches') % Set figure size units of "current figure"
+set(gcf,'Position',[0,0,6,4]) % Set figure width (6 in.) and height (4 in.)
+cd n:\thesis\plots % Select where to save
+print -dpdf plot.pdf % Save as PDF
+\end{verbatim}
+
+\end{document}
Index: doc/user/user.tex
===================================================================
--- doc/user/user.tex	(revision a037f85b49948fe9469b696edd2db5dd4ad8751d)
+++ doc/user/user.tex	(revision bc9384ac98b86a4f4bbd5919145f683819765a6d)
@@ -11,6 +11,6 @@
 %% Created On       : Wed Apr  6 14:53:29 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Sat Jul 13 18:36:18 2019
-%% Update Count     : 3876
+%% Last Modified On : Thu Mar  5 12:09:42 2020
+%% Update Count     : 3885
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -211,13 +211,14 @@
 Even with all its problems, C continues to be popular because it allows writing software at virtually any level in a computer system without restriction.
 For system programming, where direct access to hardware, storage management, and real-time issues are a requirement, C is usually the only language of choice.
-The TIOBE index~\cite{TIOBE} for July 2018 ranks the top five most \emph{popular} programming languages as \Index*{Java} 16\%, C 14\%, \Index*[C++]{\CC{}} 7.5\%, Python 6\%, Visual Basic 4\% = 47.5\%, where the next 50 languages are less than 4\% each, with a long tail.
-The top 3 rankings over the past 30 years are:
+The TIOBE index~\cite{TIOBE} for February 2020 ranks the top six most \emph{popular} programming languages as \Index*{Java} 17.4\%, C 16.8\%, Python 9.3\%, \Index*[C++]{\CC{}} 6.2\%, \Csharp 5.9\%, Visual Basic 5.9\% = 61.5\%, where the next 50 languages are less than 2\% each, with a long tail.
+The top 4 rankings over the past 35 years are:
 \begin{center}
 \setlength{\tabcolsep}{10pt}
-\begin{tabular}{@{}rccccccc@{}}
-		& 2018	& 2013	& 2008	& 2003	& 1998	& 1993	& 1988	\\ \hline
-Java	& 1		& 2		& 1		& 1		& 16	& -		& -		\\
-\R{C}	& \R{2} & \R{1} & \R{2} & \R{2} & \R{1} & \R{1} & \R{1} \\
-\CC		& 3		& 4		& 3		& 3		& 2		& 2		& 5		\\
+\begin{tabular}{@{}rcccccccc@{}}
+		& 2020	& 2015	& 2010	& 2005	& 2000	& 1995	& 1990	& 1985	\\ \hline
+Java	& 1		& 2		& 1		& 2		& 3		& -		& -		& -		\\
+\R{C}	& \R{2} & \R{1} & \R{2} & \R{1} & \R{1} & \R{2} & \R{1} & \R{1} \\
+Python	& 3		& 7		& 6		& 6		& 22	& 21	& -		& -		\\
+\CC		& 4		& 4		& 4		& 3		& 2		& 1		& 2		& 12	\\
 \end{tabular}
 \end{center}
@@ -512,6 +513,6 @@
 Keyword clashes are accommodated by syntactic transformations using the \CFA backquote escape-mechanism:
 \begin{cfa}
-int ®`®otype®`® = 3; §\C{// make keyword an identifier}§
-double ®`®forall®`® = 3.5;
+int ®``®otype = 3; §\C{// make keyword an identifier}§
+double ®``®forall = 3.5;
 \end{cfa}
 
@@ -524,10 +525,8 @@
 // include file uses the CFA keyword "with".
 #if ! defined( with ) §\C{// nesting ?}§
-#define with ®`®with®`® §\C{// make keyword an identifier}§
+#define with ®``®with §\C{// make keyword an identifier}§
 #define __CFA_BFD_H__
 #endif
-
-®#include_next <bfdlink.h> §\C{// must have internal check for multiple expansion}§
-®
+§{\color{red}\#\textbf{include\_next} <bfdlink.h>}§ §\C{// must have internal check for multiple expansion}§
 #if defined( with ) && defined( __CFA_BFD_H__ ) §\C{// reset only if set}§
 #undef with
@@ -576,11 +575,11 @@
 \section{Exponentiation Operator}
 
-C, \CC, and Java (and many other programming languages) have no exponentiation operator\index{exponentiation!operator}\index{operator!exponentiation}, \ie $x^y$, and instead use a routine, like \Indexc{pow}, to perform the exponentiation operation.
-\CFA extends the basic operators with the exponentiation operator ©?\?©\index{?\\?@©?\?©} and ©?\=?©\index{?\\=?@©\=?©}, as in, ©x \ y© and ©x \= y©, which means $x^y$ and $x \leftarrow x^y$.
+C, \CC, and Java (and many other programming languages) have no exponentiation operator\index{exponentiation!operator}\index{operator!exponentiation}, \ie $x^y$, and instead use a routine, like \Indexc{pow(x,y)}, to perform the exponentiation operation.
+\CFA extends the basic operators with the exponentiation operator ©?®\®?©\index{?\\?@©?®\®?©} and ©?\=?©\index{?\\=?@©®\®=?©}, as in, ©x ®\® y© and ©x ®\®= y©, which means $x^y$ and $x \leftarrow x^y$.
 The priority of the exponentiation operator is between the cast and multiplicative operators, so that ©w * (int)x \ (int)y * z© is parenthesized as ©((w * (((int)x) \ ((int)y))) * z)©.
 
-As for \Index{division}, there are exponentiation operators for integral and floating types, including the builtin \Index{complex} types.
+There are exponentiation operators for integral and floating types, including the builtin \Index{complex} types.
 Integral exponentiation\index{exponentiation!unsigned integral} is performed with repeated multiplication\footnote{The multiplication computation is $O(\log y)$.} (or shifting if the exponent is 2).
-Overflow from large exponents or negative exponents return zero.
+Overflow for a large exponent or negative exponent returns zero.
 Floating exponentiation\index{exponentiation!floating} is performed using \Index{logarithm}s\index{exponentiation!logarithm}, so the exponent cannot be negative.
 \begin{cfa}
@@ -589,5 +588,5 @@
 1 1 256 -64 125 ®0® 3273344365508751233 ®0® ®0® -0.015625 18.3791736799526 0.264715-1.1922i
 \end{cfa}
-Note, ©5 ®\® 32© and ©5L ®\® 64© overflow, and ©-4 ®\® -3© is a fraction but stored in an integer so all three computations generate an integral zero.
+Note, ©5 \ 32© and ©5L \ 64© overflow, and ©-4 \ -3© is a fraction but stored in an integer so all three computations generate an integral zero.
 Parenthesis are necessary for complex constants or the expression is parsed as ©1.0f+®(®2.0fi \ 3.0f®)®+2.0fi©.
 The exponentiation operator is available for all the basic types, but for user-defined types, only the integral-computation version is available.
@@ -598,5 +597,5 @@
 OT ?®\®?( OT ep, unsigned long int y );
 \end{cfa}
-The user type ©T© must define multiplication, one, ©1©, and, ©*©.
+The user type ©T© must define multiplication, one (©1©), and ©*©.
 
 
@@ -626,147 +625,56 @@
 
 
-\subsection{Loop Control}
-
-The ©for©/©while©/©do-while© loop-control allows empty or simplified ranges (see Figure~\ref{f:LoopControlExamples}).
-\begin{itemize}
-\item
-An empty conditional implies ©1©.
-\item
-The up-to range ©~©\index{~@©~©} means exclusive range [M,N).
-\item
-The up-to range ©~=©\index{~=@©~=©} means inclusive range [M,N].
-\item
-The down-to range ©-~©\index{-~@©-~©} means exclusive range [N,M).
-\item
-The down-to range ©-~=©\index{-~=@©-~=©} means inclusive range [N,M].
-\item
-©@© means put nothing in this field.
-\item
-©0© is the implicit start value;
-\item
-©1© is the implicit increment value.
-\item
-The up-to range uses ©+=© for increment;
-\item
-The down-to range uses ©-=© for decrement.
-\item
-The loop index is polymorphic in the type of the start value or comparison value when start is implicitly ©0©.
-\end{itemize}
-
-\begin{figure}
+%\section{\texorpdfstring{\protect\lstinline@case@ Clause}{case Clause}}
+\subsection{\texorpdfstring{\LstKeywordStyle{case} Clause}{case Clause}}
+
+C restricts the ©case© clause of a ©switch© statement to a single value.
+For multiple ©case© clauses associated with the same statement, it is necessary to have multiple ©case© clauses rather than multiple values.
+Requiring a ©case© clause for each value does not seem to be in the spirit of brevity normally associated with C.
+Therefore, the ©case© clause is extended with a list of values, as in:
 \begin{cquote}
-\begin{tabular}{@{}l|l@{}}
-\multicolumn{1}{c|}{loop control} & \multicolumn{1}{c}{output} \\
-\hline
-\begin{cfa}
-sout | nlOff;
-while ®()® { sout | "empty"; break; } sout | nl;
-do { sout | "empty"; break; } while ®()®; sout | nl;
-for ®()® { sout | "empty"; break; } sout | nl;
-for ( ®0® ) { sout | "A"; } sout | "zero" | nl;
-for ( ®1® ) { sout | "A"; } sout | nl;
-for ( ®10® ) { sout | "A"; } sout | nl;
-for ( ®1 ~= 10 ~ 2® ) { sout | "B"; } sout | nl;
-for ( ®10 -~= 1 ~ 2® ) { sout | "C"; } sout | nl;
-for ( ®0.5 ~ 5.5® ) { sout | "D"; } sout | nl;
-for ( ®5.5 -~ 0.5® ) { sout | "E"; } sout | nl;
-for ( ®i; 10® ) { sout | i; } sout | nl;
-for ( ®i; 1 ~= 10 ~ 2® ) { sout | i; } sout | nl;
-for ( ®i; 10 -~= 1 ~ 2® ) { sout | i; } sout | nl;
-for ( ®i; 0.5 ~ 5.5® ) { sout | i; } sout | nl;
-for ( ®i; 5.5 -~ 0.5® ) { sout | i; } sout | nl;
-for ( ®ui; 2u ~= 10u ~ 2u® ) { sout | ui; } sout | nl;
-for ( ®ui; 10u -~= 2u ~ 2u® ) { sout | ui; } sout | nl;
-enum { N = 10 };
-for ( ®N® ) { sout | "N"; } sout | nl;
-for ( ®i; N® ) { sout | i; } sout | nl;
-for ( ®i; N -~ 0® ) { sout | i; } sout | nl;
-const int start = 3, comp = 10, inc = 2;
-for ( ®i; start ~ comp ~ inc + 1® ) { sout | i; } sout | nl;
-for ( ®i; 1 ~ @® ) { if ( i > 10 ) break;
-	sout | i; } sout | nl;
-for ( ®i; 10 -~ @® ) { if ( i < 0 ) break;
-	sout | i; } sout | nl;
-for ( ®i; 2 ~ @ ~ 2® ) { if ( i > 10 ) break;
-	sout | i; } sout | nl;
-for ( ®i; 2.1 ~ @ ~ @® ) { if ( i > 10.5 ) break;
-	sout | i; i += 1.7; } sout | nl;
-for ( ®i; 10 -~ @ ~ 2® ) { if ( i < 0 ) break;
-	sout | i; } sout | nl;
-for ( ®i; 12.1 ~ @ ~ @® ) { if ( i < 2.5 ) break;
-	sout | i; i -= 1.7; } sout | nl;
-for ( ®i; 5 : j; -5 ~ @® ) { sout | i | j; } sout | nl;
-for ( ®i; 5 : j; -5 -~ @® ) { sout | i | j; } sout | nl;
-for ( ®i; 5 : j; -5 ~ @ ~ 2® ) { sout | i | j; } sout | nl;
-for ( ®i; 5 : j; -5 -~ @ ~ 2® ) { sout | i | j; } sout | nl;
-for ( ®j; -5 ~ @ : i; 5® ) { sout | i | j; } sout | nl;
-for ( ®j; -5 -~ @ : i; 5® ) { sout | i | j; } sout | nl;
-for ( ®j; -5 ~ @ ~ 2 : i; 5® ) { sout | i | j; } sout | nl;
-for ( ®j; -5 -~ @ ~ 2 : i; 5® ) { sout | i | j; } sout | nl;
-for ( ®j; -5 -~ @ ~ 2 : i; 5 : k; 1.5 ~ @® ) {
-	sout | i | j | k; } sout | nl;
-for ( ®j; -5 -~ @ ~ 2 : k; 1.5 ~ @ : i; 5® ) {
-	sout | i | j | k; } sout | nl;
-for ( ®k; 1.5 ~ @ : j; -5 -~ @ ~ 2 : i; 5® ) {
-	sout | i | j | k; } sout | nl;
+\begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{2em}}l@{}}
+\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}	& \multicolumn{1}{c@{\hspace{2em}}}{\textbf{C}}	\\
+\begin{cfa}
+switch ( i ) {
+  case ®1, 3, 5®:
+	...
+  case ®2, 4, 6®:
+	...
+}
 \end{cfa}
 &
 \begin{cfa}
-
-empty
-empty
-empty
-zero
-A
-A A A A A A A A A A
-B B B B B
-C C C C C
-D D D D D
-E E E E E
-0 1 2 3 4 5 6 7 8 9
-1 3 5 7 9
-10 8 6 4 2
-0.5 1.5 2.5 3.5 4.5
-5.5 4.5 3.5 2.5 1.5
-2 4 6 8 10
-10 8 6 4 2
-
-N N N N N N N N N N
-0 1 2 3 4 5 6 7 8 9
-10 9 8 7 6 5 4 3 2 1
-
-3 6 9
-
-1 2 3 4 5 6 7 8 9 10
-
-10 9 8 7 6 5 4 3 2 1 0
-
-2 4 6 8 10
-
-2.1 3.8 5.5 7.2 8.9
-
-10 8 6 4 2 0
-
-12.1 10.4 8.7 7 5.3 3.6
-0 -5 1 -4 2 -3 3 -2 4 -1
-0 -5 1 -6 2 -7 3 -8 4 -9
-0 -5 1 -3 2 -1 3 1 4 3
-0 -5 1 -7 2 -9 3 -11 4 -13
-0 -5 1 -4 2 -3 3 -2 4 -1
-0 -5 1 -6 2 -7 3 -8 4 -9
-0 -5 1 -3 2 -1 3 1 4 3
-0 -5 1 -7 2 -9 3 -11 4 -13
-
-0 -5 1.5 1 -7 2.5 2 -9 3.5 3 -11 4.5 4 -13 5.5
-
-0 -5 1.5 1 -7 2.5 2 -9 3.5 3 -11 4.5 4 -13 5.5
-
-0 -5 1.5 1 -7 2.5 2 -9 3.5 3 -11 4.5 4 -13 5.5
+switch ( i ) {
+  case 1: case 3 : case 5:
+	...
+  case 2: case 4 : case 6:
+	...
+}
+\end{cfa}
+&
+\begin{cfa}
+
+// odd values
+
+// even values
+
+
 \end{cfa}
 \end{tabular}
 \end{cquote}
-\caption{Loop Control Examples}
-\label{f:LoopControlExamples}
-\end{figure}
+In addition, subranges are allowed to specify case values.\footnote{
+gcc has the same mechanism but awkward syntax, \lstinline@2 ...42@, because a space is required after a number, otherwise the period is a decimal point.}
+\begin{cfa}
+switch ( i ) {
+  case ®1~5:® §\C{// 1, 2, 3, 4, 5}§
+	...
+  case ®10~15:® §\C{// 10, 11, 12, 13, 14, 15}§
+	...
+}
+\end{cfa}
+Lists of subranges are also allowed.
+\begin{cfa}
+case ®1~5, 12~21, 35~42®:
+\end{cfa}
 
 
@@ -977,57 +885,195 @@
 
 
-%\section{\texorpdfstring{\protect\lstinline@case@ Clause}{case Clause}}
-\subsection{\texorpdfstring{\LstKeywordStyle{case} Statement}{case Statement}}
-
-C restricts the ©case© clause of a ©switch© statement to a single value.
-For multiple ©case© clauses associated with the same statement, it is necessary to have multiple ©case© clauses rather than multiple values.
-Requiring a ©case© clause for each value does not seem to be in the spirit of brevity normally associated with C.
-Therefore, the ©case© clause is extended with a list of values, as in:
-\begin{cquote}
-\begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{2em}}l@{}}
-\multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}}	& \multicolumn{1}{c@{\hspace{2em}}}{\textbf{C}}	\\
-\begin{cfa}
-switch ( i ) {
-  case ®1, 3, 5®:
+\subsection{Non-terminating and Labelled \texorpdfstring{\LstKeywordStyle{fallthrough}}{Non-terminating and Labelled fallthrough}}
+
+The ©fallthrough© clause may be non-terminating within a ©case© clause or have a target label to common code from multiple case clauses.
+\begin{center}
+\begin{tabular}{@{}lll@{}}
+\begin{cfa}
+choose ( ... ) {
+  case 3:
+	if ( ... ) {
+		... ®fallthru;® // goto case 4
+	} else {
+		...
+	}
+	// implicit break
+  case 4:
+
+
+
+
+\end{cfa}
+&
+\begin{cfa}
+choose ( ... ) {
+  case 3:
+	... ®fallthrough common;®
+  case 4:
+	... ®fallthrough common;®
+
+  ®common:® // below fallthrough
+			  // at case-clause level
+	...	// common code for cases 3/4
+	// implicit break
+  case 4:
+
+
+\end{cfa}
+&
+\begin{cfa}
+choose ( ... ) {
+  case 3:
+	choose ( ... ) {
+	  case 4:
+		for ( ... ) {
+			// multi-level transfer
+			... ®fallthru common;®
+		}
+		...
+	}
 	...
-  case ®2, 4, 6®:
-	...
-}
+  ®common:® // below fallthrough
+			  // at case-clause level
+\end{cfa}
+\end{tabular}
+\end{center}
+The target label must be below the ©fallthrough© and may not be nested in a control structure, and
+the target label must be at the same or higher level as the containing ©case© clause and located at
+the same level as a ©case© clause; the target label may be case ©default©, but only associated
+with the current ©switch©/©choose© statement.
+
+
+\subsection{Loop Control}
+
+The ©for©/©while©/©do-while© loop-control allows empty or simplified ranges (see Figure~\ref{f:LoopControlExamples}).
+\begin{itemize}
+\item
+The loop index is polymorphic in the type of the comparison value N (when the start value is implicit) or the start value M.
+\item
+An empty conditional implies comparison value of ©1© (true).
+\item
+A comparison N is implicit up-to exclusive range [0,N©®)®©.
+\item
+A comparison ©=© N is implicit up-to inclusive range [0,N©®]®©.
+\item
+The up-to range M ©~©\index{~@©~©} N means exclusive range [M,N©®)®©.
+\item
+The up-to range M ©~=©\index{~=@©~=©} N means inclusive range [M,N©®]®©.
+\item
+The down-to range M ©-~©\index{-~@©-~©} N means exclusive range [N,M©®)®©.
+\item
+The down-to range M ©-~=©\index{-~=@©-~=©} N means inclusive range [N,M©®]®©.
+\item
+©0© is the implicit start value;
+\item
+©1© is the implicit increment value.
+\item
+The up-to range uses operator ©+=© for increment;
+\item
+The down-to range uses operator ©-=© for decrement.
+\item
+©@© means put nothing in this field.
+\item
+©:© means start another index.
+\end{itemize}
+
+\begin{figure}
+\begin{tabular}{@{}l|l@{}}
+\multicolumn{1}{c|}{loop control} & \multicolumn{1}{c}{output} \\
+\hline
+\begin{cfa}[xleftmargin=0pt]
+while ®()® { sout | "empty"; break; }
+do { sout | "empty"; break; } while ®()®;
+for ®()® { sout | "empty"; break; }
+for ( ®0® ) { sout | "A"; } sout | "zero";
+for ( ®1® ) { sout | "A"; }
+for ( ®10® ) { sout | "A"; }
+for ( ®= 10® ) { sout | "A"; }
+for ( ®1 ~= 10 ~ 2® ) { sout | "B"; }
+for ( ®10 -~= 1 ~ 2® ) { sout | "C"; }
+for ( ®0.5 ~ 5.5® ) { sout | "D"; }
+for ( ®5.5 -~ 0.5® ) { sout | "E"; }
+for ( ®i; 10® ) { sout | i; }
+for ( ®i; = 10® ) { sout | i; }
+for ( ®i; 1 ~= 10 ~ 2® ) { sout | i; }
+for ( ®i; 10 -~= 1 ~ 2® ) { sout | i; }
+for ( ®i; 0.5 ~ 5.5® ) { sout | i; }
+for ( ®i; 5.5 -~ 0.5® ) { sout | i; }
+for ( ®ui; 2u ~= 10u ~ 2u® ) { sout | ui; }
+for ( ®ui; 10u -~= 2u ~ 2u® ) { sout | ui; }
+enum { N = 10 };
+for ( ®N® ) { sout | "N"; }
+for ( ®i; N® ) { sout | i; }
+for ( ®i; N -~ 0® ) { sout | i; }
+const int start = 3, comp = 10, inc = 2;
+for ( ®i; start ~ comp ~ inc + 1® ) { sout | i; }
+for ( i; 1 ~ ®@® ) { if ( i > 10 ) break; sout | i; }
+for ( i; 10 -~ ®@® ) { if ( i < 0 ) break; sout | i; }
+for ( i; 2 ~ ®@® ~ 2 ) { if ( i > 10 ) break; sout | i; }
+for ( i; 2.1 ~ ®@® ~ ®@® ) { if ( i > 10.5 ) break; sout | i; i += 1.7; }
+for ( i; 10 -~ ®@® ~ 2 ) { if ( i < 0 ) break; sout | i; }
+for ( i; 12.1 ~ ®@® ~ ®@® ) { if ( i < 2.5 ) break; sout | i; i -= 1.7; }
+for ( i; 5 ®:® j; -5 ~ @ ) { sout | i | j; }
+for ( i; 5 ®:® j; -5 -~ @ ) { sout | i | j; }
+for ( i; 5 ®:® j; -5 ~ @ ~ 2 ) { sout | i | j; }
+for ( i; 5 ®:® j; -5 -~ @ ~ 2 ) { sout | i | j; }
+for ( i; 5 ®:® j; -5 ~ @ ) { sout | i | j; }
+for ( i; 5 ®:® j; -5 -~ @ ) { sout | i | j; }
+for ( i; 5 ®:® j; -5 ~ @ ~ 2 ) { sout | i | j; }
+for ( i; 5 ®:® j; -5 -~ @ ~ 2 ) { sout | i | j; }
+for ( i; 5 ®:® j; -5 -~ @ ~ 2 ®:® k; 1.5 ~ @ ) { sout | i | j | k; }
+for ( i; 5 ®:® j; -5 -~ @ ~ 2 ®:® k; 1.5 ~ @ ) { sout | i | j | k; }
+for ( i; 5 ®:® k; 1.5 ~ @ ®:® j; -5 -~ @ ~ 2 ) { sout | i | j | k; }
 \end{cfa}
 &
 \begin{cfa}
-switch ( i ) {
-  case 1: case 3 : case 5:
-	...
-  case 2: case 4 : case 6:
-	...
-}
-\end{cfa}
-&
-\begin{cfa}
-
-// odd values
-
-// even values
-
-
+empty
+empty
+empty
+zero
+A
+A A A A A A A A A A
+A A A A A A A A A A A
+B B B B B
+C C C C C
+D D D D D
+E E E E E
+0 1 2 3 4 5 6 7 8 9
+0 1 2 3 4 5 6 7 8 9 10
+1 3 5 7 9
+10 8 6 4 2
+0.5 1.5 2.5 3.5 4.5
+5.5 4.5 3.5 2.5 1.5
+2 4 6 8 10
+10 8 6 4 2
+
+N N N N N N N N N N
+0 1 2 3 4 5 6 7 8 9
+10 9 8 7 6 5 4 3 2 1
+
+3 6 9
+1 2 3 4 5 6 7 8 9 10
+10 9 8 7 6 5 4 3 2 1 0
+2 4 6 8 10
+2.1 3.8 5.5 7.2 8.9
+10 8 6 4 2 0
+12.1 10.4 8.7 7. 5.3 3.6
+0 -5 1 -4 2 -3 3 -2 4 -1
+0 -5 1 -6 2 -7 3 -8 4 -9
+0 -5 1 -3 2 -1 3 1 4 3
+0 -5 1 -7 2 -9 3 -11 4 -13
+0 -5 1 -4 2 -3 3 -2 4 -1
+0 -5 1 -6 2 -7 3 -8 4 -9
+0 -5 1 -3 2 -1 3 1 4 3
+0 -5 1 -7 2 -9 3 -11 4 -13
+0 -5 1.5 1 -7 2.5 2 -9 3.5 3 -11 4.5 4 -13 5.5
+0 -5 1.5 1 -7 2.5 2 -9 3.5 3 -11 4.5 4 -13 5.5
+0 -5 1.5 1 -7 2.5 2 -9 3.5 3 -11 4.5 4 -13 5.5
 \end{cfa}
 \end{tabular}
-\end{cquote}
-In addition, subranges are allowed to specify case values.\footnote{
-gcc has the same mechanism but awkward syntax, \lstinline@2 ...42@, because a space is required after a number, otherwise the period is a decimal point.}
-\begin{cfa}
-switch ( i ) {
-  case ®1~5:® §\C{// 1, 2, 3, 4, 5}§
-	...
-  case ®10~15:® §\C{// 10, 11, 12, 13, 14, 15}§
-	...
-}
-\end{cfa}
-Lists of subranges are also allowed.
-\begin{cfa}
-case ®1~5, 12~21, 35~42®:
-\end{cfa}
-
+\caption{Loop Control Examples}
+\label{f:LoopControlExamples}
+\end{figure}
 
 % for ()  => for ( ;; )
@@ -6547,5 +6593,5 @@
 hence, names in these include files are not mangled\index{mangling!name} (see~\VRef{s:Interoperability}).
 All other C header files must be explicitly wrapped in ©extern "C"© to prevent name mangling.
-For \Index*[C++]{\CC{}}, the name-mangling issue is often handled internally in many C header-files through checks for preprocessor variable ©__cplusplus©, which adds appropriate ©extern "C"© qualifiers.
+This approach is different from \Index*[C++]{\CC{}} where the name-mangling issue is handled internally in C header-files through checks for preprocessor variable ©__cplusplus©, which adds appropriate ©extern "C"© qualifiers.
 
 
@@ -6561,94 +6607,120 @@
 The storage-management routines extend their C equivalents by overloading, alternate names, providing shallow type-safety, and removing the need to specify the allocation size for non-array types.
 
-Storage management provides the following capabilities:
+C storage management provides the following capabilities:
 \begin{description}
-\item[fill]
-after allocation the storage is filled with a specified character.
+\item[filled]
+after allocation with a specified character or value.
 \item[resize]
-an existing allocation is decreased or increased in size.
-In either case, new storage may or may not be allocated and, if there is a new allocation, as much data from the existing allocation is copied.
+an existing allocation to decreased or increased its size.
+In either case, new storage may or may not be allocated and, if there is a new allocation, as much data from the existing allocation is copied into the new allocation.
 For an increase in storage size, new storage after the copied data may be filled.
-\item[alignment]
-an allocation starts on a specified memory boundary, \eg, an address multiple of 64 or 128 for cache-line purposes.
+\item[align]
+an allocation on a specified memory boundary, \eg, an address multiple of 64 or 128 for cache-line purposes.
 \item[array]
 the allocation size is scaled to the specified number of array elements.
 An array may be filled, resized, or aligned.
 \end{description}
-The table shows allocation routines supporting different combinations of storage-management capabilities:
-\begin{center}
-\begin{tabular}{@{}r|r|l|l|l|l@{}}
+\VRef[Table]{t:AllocationVersusCapabilities} shows allocation routines supporting different combinations of storage-management capabilities:
+\begin{table}
+\centering
+\begin{tabular}{@{}r|l|l|l|l|l@{}}
 \multicolumn{1}{c}{}&		& \multicolumn{1}{c|}{fill}	& resize	& alignment	& array	\\
 \hline
 C		& ©malloc©			& no			& no		& no		& no	\\
 		& ©calloc©			& yes (0 only)	& no		& no		& yes	\\
-		& ©realloc©			& no/copy		& yes		& no		& no	\\
+		& ©realloc©			& copy			& yes		& no		& no	\\
 		& ©memalign©		& no			& no		& yes		& no	\\
+		& ©aligned_alloc©	& no			& no		& yes		& no	\\
 		& ©posix_memalign©	& no			& no		& yes		& no	\\
 \hline
-C11		& ©aligned_alloc©	& no			& no		& yes		& no	\\
-\hline
-\CFA	& ©alloc©			& no/copy/yes	& no/yes	& no		& yes	\\
-		& ©align_alloc©		& no/yes		& no		& yes		& yes	\\
+\CFA	& ©cmemalign©		& yes (0 only)	& no		& yes		& yes	\\
+		& ©realloc©			& copy			& yes		& yes		& no	\\
+		& ©alloc©			& no			& no		& no		& no	\\
+		& ©alloc©			& copy			& no/yes	& no		& yes	\\
+		& ©alloc©			& no/copy/yes	& no/yes	& no		& yes	\\
+		& ©alloc_set©		& no/yes		& no		& yes		& yes	\\
+		& ©alloc_align©		& no/yes		& no		& yes		& yes	\\
+		& ©alloc_align_set©	& no/yes		& no		& yes		& yes	\\
 \end{tabular}
-\end{center}
-It is impossible to resize with alignment because the underlying ©realloc© allocates storage if more space is needed, and it does not honour alignment from the original allocation.
+\caption{Allocation Routines versus Storage-Management Capabilities}
+\label{t:AllocationVersusCapabilities}
+\end{table}
+
+\CFA memory management extends the resize capability with the notion of \newterm{sticky properties}.
+Hence, initial allocation capabilities are remembered and maintained when resize requires copying.
+For example, an initial alignment and fill capability are preserved during a resize copy so the copy has the same alignment and extended storage is filled.
+Without sticky properties it is dangerous to use ©realloc©, resulting in an idiom of manually performing the reallocation to maintain correctness.
+
 
 \leavevmode
 \begin{cfa}[aboveskip=0pt,belowskip=0pt]
-// C unsafe allocation
 extern "C" {
-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}§
-void * memalign( size_t align, size_t size );§\indexc{memalign}§
-int posix_memalign( void ** ptr, size_t align, size_t size );§\indexc{posix_memalign}§
-
-// C unsafe initialization/copy
-void * memset( void * dest, int c, size_t size );
-void * memcpy( void * dest, const void * src, size_t size );
-}
+	// C unsafe allocation
+	void * malloc( size_t size );§\indexc{malloc}§
+	void * calloc( size_t dim, size_t size );§\indexc{calloc}§
+	void * realloc( void * ptr, size_t size );§\indexc{realloc}§
+	void * memalign( size_t align, size_t size );§\indexc{memalign}§
+	void * aligned_alloc( size_t align, size_t size );§\indexc{aligned_alloc}§
+	int posix_memalign( void ** ptr, size_t align, size_t size );§\indexc{posix_memalign}§
+	void * cmemalign( size_t alignment, size_t noOfElems, size_t elemSize );§\indexc{cmemalign}§ // CFA
+
+	// C unsafe initialization/copy
+	void * memset( void * dest, int c, size_t size );§\indexc{memset}§
+	void * memcpy( void * dest, const void * src, size_t size );§\indexc{memcpy}§
+}
+
+void * realloc( void * oaddr, size_t nalign, size_t size ); // CFA heap
 
 forall( dtype T | sized(T) ) {
-// §\CFA§ safe equivalents, i.e., implicit size specification
+	// §\CFA§ safe equivalents, i.e., implicit size specification
 	T * malloc( void );
 	T * calloc( size_t dim );
 	T * realloc( T * ptr, size_t size );
 	T * memalign( size_t align );
+	T * cmemalign( size_t align, size_t dim  );
 	T * aligned_alloc( size_t align );
 	int posix_memalign( T ** ptr, size_t align );
 
-// §\CFA§ safe general allocation, fill, resize, array
+	// §\CFA§ safe general allocation, fill, resize, alignment, array
 	T * alloc( void );§\indexc{alloc}§
-	T * alloc( char fill );
 	T * alloc( size_t dim );
-	T * alloc( size_t dim, char fill );
 	T * alloc( T ptr[], size_t dim );
-	T * alloc( T ptr[], size_t dim, char fill );
-
-// §\CFA§ safe general allocation, align, fill, array
-	T * align_alloc( size_t align );
-	T * align_alloc( size_t align, char fill );
-	T * align_alloc( size_t align, size_t dim );
-	T * align_alloc( size_t align, size_t dim, char fill );
-
-// §\CFA§ safe initialization/copy, i.e., implicit size specification
-	T * memset( T * dest, char c );§\indexc{memset}§
+	T * alloc_set( char fill );§\indexc{alloc_set}§
+	T * alloc_set( T fill );
+	T * alloc_set( size_t dim, char fill );
+	T * alloc_set( size_t dim, T fill );
+	T * alloc_set( size_t dim, const T fill[] );
+	T * alloc_set( T ptr[], size_t dim, char fill );
+
+	T * alloc_align( size_t align );
+	T * alloc_align( size_t align, size_t dim );
+	T * alloc_align( T ptr[], size_t align ); // aligned realloc array
+	T * alloc_align( T ptr[], size_t align, size_t dim ); // aligned realloc array
+	T * alloc_align_set( size_t align, char fill );
+	T * alloc_align_set( size_t align, T fill );
+	T * alloc_align_set( size_t align, size_t dim, char fill );
+	T * alloc_align_set( size_t align, size_t dim, T fill );
+	T * alloc_align_set( size_t align, size_t dim, const T fill[] );
+	T * alloc_align_set( T ptr[], size_t align, size_t dim, char fill );
+
+	// §\CFA§ safe initialization/copy, i.e., implicit size specification
+	T * memset( T * dest, char fill );§\indexc{memset}§
 	T * memcpy( T * dest, const T * src );§\indexc{memcpy}§
 
-// §\CFA§ safe initialization/copy array
-	T * amemset( T dest[], char c, size_t dim );
+	// §\CFA§ safe initialization/copy, i.e., implicit size specification, array types
+	T * amemset( T dest[], char fill, size_t dim );
 	T * amemcpy( T dest[], const T src[], size_t dim );
 }
 
-// §\CFA§ allocation/deallocation and constructor/destructor
-forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } ) T * new( Params p );§\indexc{new}§
-forall( dtype T | { void ^?{}( T * ); } ) void delete( T * ptr );§\indexc{delete}§
-forall( dtype T, ttype Params | { void ^?{}( T * ); void delete( Params ); } )
+// §\CFA§ allocation/deallocation and constructor/destructor, non-array types
+forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) T * new( Params p );§\indexc{new}§
+forall( dtype T | sized(T) | { void ^?{}( T & ); } ) void delete( T * ptr );§\indexc{delete}§
+forall( dtype T, ttype Params | sized(T) | { void ^?{}( T & ); void delete( Params ); } )
   void delete( T * ptr, Params rest );
 
-// §\CFA§ allocation/deallocation and constructor/destructor, array
-forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } ) T * anew( size_t dim, Params p );§\indexc{anew}§
-forall( dtype T | sized(T) | { void ^?{}( T * ); } ) void adelete( size_t dim, T arr[] );§\indexc{adelete}§
-forall( dtype T | sized(T) | { void ^?{}( T * ); }, ttype Params | { void adelete( Params ); } )
+// §\CFA§ allocation/deallocation and constructor/destructor, array types
+forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) T * anew( size_t dim, Params p );§\indexc{anew}§
+forall( dtype T | sized(T) | { void ^?{}( T & ); } ) void adelete( size_t dim, T arr[] );§\indexc{adelete}§
+forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } )
   void adelete( size_t dim, T arr[], Params rest );
 \end{cfa}
