Initial commit -- cal-3040 from Osmosian.com

This commit is a copy of the official version as it was on
March 5, 2014 (in www.osmosian.com/cal-3040.zip).
It is a complete development environment for Plain English
programming including an iconoclastic interface, a simplified file
manager, an elegant text editor, a hexadecimal dumper, a Win32/x86
native-code-generating compiler/linker, and a wysiwyg page layout
facility for documentation.  A 65,000 word lexicon is provided for
spell-checking; the lexicon is not used by the compiler since the
vocabulary and much of the grammar of a Plain English program are
defined by the programmer.  This commit includes the native version
of the documentation.  (PDFs can be generated directly from within
the integrated development environment.)

This commit does not include the PDF version of the documentation.
Although the documentation provides instructions for writing
the sample program, this commit does not include the sample
program as a distinct file.

Both the PDF documentation and the sample program
are available as part of the official version's zip download.

The PDF version of the documentation is also available at
http://www.osmosian.com/instructions.pdf
Made main window not fill up whole screen; organized working folder.

Made the main window about 1000 pixels wide.
Made the main window about 50 pixels shorter than the screen,
so that the operating system's taskbar can appear at the bottom.
The pixel counts are approximate, because the program assumes
that Windows thinks there are 96 pixels per inch
(regardless of what Windows thinks the pixel density is).
The program still does not have any resize functionality,
and still might not yield control merely because the user
clicks outside of its display area.

Changed the name of the executable (used for editing code)
from cal-3040.exe to cal-3041.exe.
Moved the source code to a draft subfolder,
which is where the draft executable is built.
Described and prioritized 66 possible GUI fixes and code scaling fixes.
Wrapped long lines in the compiler.

Pretty printing, to make it easier to put two copies
of CAL side-by-side.
Wrapped long lines in the noodle.

Pretty printed, to make it easier
to put two instances of CAL side-by-side.
Refactored how menus are populated.  Wrapped long lines in the desktop.

Wrote procedures to get each letter's submenu.
This will make it easier to check whether a menu is empty.
Pretty printed the desktop, to make it easier to
put two instances of CAL side-by-side.
Grayed out letter menus that do not have submenus.
Added F3 and F5 shortcuts.  The Home and End keys already worked.

Made the F3 key call the find next handler (aka Ctrl-F).
Made the F5 key (in editor mode) call the run handler (aka Ctrl-R).
The desktop continues to silently ignore other function keys.

Added a "fixed issues.txt" file.  Moved the explanations
from "issues.txt" to "fixed issues.txt".

The Home and End keys already behaved correctly;
it is Ctrl-Home and Ctrl-End that go to the start and end of a file.
Added regression testing, and a tool for displaying test results.

This feature stores the results of regression tests
in a structure attached to the status button.
The tests are run as the last step of the program's
initialization.  If all tests pass, the status button
is tinted lightest green.  If any test(s) fail,
the status button is tinted lightest red.
The status button returns to white the next time
a program is compiled or run.

Clicking on the status button re-tints the status button,
and shows more details about the test results.
Specifically, it brings up a menu item summarizing
how many tests passed and/or failed.  Clicking the
menu item brings up a similar summary, followed by
summaries of up to 5 tests.  If all tests passed,
the 5 tests are the first 5 tests that were run.
If any tests failed, the 5 tests are the first
5 failing tests.  The number of summaries can
be adjusted using a global variable.
Changed the font of the test results to match the current source file.
Fixed memory allocation/deallocation for status' command.

In order to use submenus to show the regression test
results, there needs to be a command.  Because a command
is a thing (an element of a doubly linked list),
the command needs to be manually allocated and destroyed.

Made the command belong to the status,
so it is initialized by the status' initializer,
and destroyed by the status' finalizer.

Updated .gitignore to ignore WINE-generated dump(s),
such as those caused if the status' command is unallocated.

Also highlighted the current font height
in the font height menu.
In regression test results, adjusted font height and refactored.

If the current font height
(which is user chosen on a tab-by-tab basis)
is smaller than the default font height,
use the current font height when displaying
the regression test results.

Reduced duplicate code in the event handlers
that display the regression test results.

Reduced duplicated code when summarizing how many
tests passed and/or failed.
Started writing unit tests for the talker.  Improved the test results' grammar.

Wrote a failing unit test for the talker.  The test tries to get
the class ID for "winmm.dll".  Presumably said class ID can be gotten
on Windows.  Currently said class ID cannot be gotten on a basic WINE
system.  (Wine also has a winmm.dll, but it is not registered
in Wine's registry by default.)  The test fails either way,
because it does not know what to expect.

Dumbed down the test result summaries:
If one test fails, that does not necessarily mean all tests failed.
Therefore started such sentences with the number, not "All" or "The".

Began work to let user copy a test result summary to the clipboard,
by clicking on the test result.  This work is not complete yet,
so such a click will not be handled.

Began work to let the user change the number of test results
that can be shown.  This work is not complete yet,
so such a click will not be handled.
Extracted 'the dialog' from 'the desktop'.
extracted 'the status' from 'the desktop'.

The status feature includes the regression test framework
(but not most of the regression tests themselves),
plus the code to summarize the regression test results
and display sample test results as a menu.
The status feature also includes the feature (in CAL-3040)
that displays the result of the most recent action.

The only regression tests in 'the status'
are to test the features in the file.
extracted 'the colors' from 'the noodle'.

'The colors' includes the colors themselves,
plus the most of the code for manipulating the colors.

'The colors' does not include any brushes or pens,
nor any code for drawing strings, lines or shapes.
There is one exception:  Windows' null pen and null brush are included,
because they are in a procedure that mostly defines colors.
Renamed 'the colors' to 'colors', because it is not a major component.
extracted 'characters' from 'the noodle'.

'characters' includes the definitions of the bytes, the keys,
and their respective pointers.  It does not include nibbles or numbers.
The file also includes much of the code that manipulates bytes and keys.
Any manipulations that require Windows API calls are in other file(s).
Most manipulations involving nibbles or strings are in other file(s).
Allowed user to change the test quota by clicking on the detailed test summary.
refactored the menu handler switch so yank, font height, and test result do not need every choice hard coded in the switch.

Added code to the desktop, so that the menu handler switch can call shorter
menu handler switch functions for yank, font height, and test result's
handle ... given ... menu handlers.  The shorter switches extract
the relevant number or height from the handlers, and in turn call
the relevant menu handler procedures.

This refactoring allows the number of test results that can be displayed
to only be limited by the screen size, and allows each test result
to be handled differently.  (For example, to be copied to the clipboard.)

This refactoring also allows the choices for font heights and yank distances
to be set dynamically.  (For example, the user can enter an "other" font height,
and CAL will be able to add the new font height to the menu.  Similarly,
the yank distances in the menu can depend on the number of twips per pixel.)