In general, the goal of these changes is to be more type-specific wherever
possible, reduce duplicated code, and avoid magic numbers. The biggest
individual change is to use Location triples of integers wherever possible
rather than three separate int variables. Another very helpful change for
understanding what is going on in the code is introducing the MarkState enum
for tracking the process of marking and unmarking blocks of cell.
The MarkState change was motivated by the issues with Ctrl-C,
and this commit, in fact,
resolves#28.
Because of the lack of a test harness, it is possible that a change of
this scope has created some bugs as well, but teapot was running OK for
me at the time of the commit. However, I don't know how good my coverage of
the changed code was -- I certainly did not save or load a Lotus 1-2-3 file!