Introduction
The project is broken down into the following sub projects.
1. The Cal library.
This is the engine that does all the work. It is written in C++ and has a only a small (included in the project) utf-8 C library as a dependent. Only a small API is needed to use the library and it would be very easy to provide a C API which in turn could be used to make the library available in other languages, such as Basic or Python.
It is also intended that this library can be used in other programs, such as my own genealogy program The Family Pack.
2. The Calendar Scripts
The script language currently fulfils two main functions. It is used to evaluate the date expressions, the Input Expression used by the calculator is converted into a Script expression before being evaluated. And it is also used to define the calendar schemes, as can be seen from the Calendar Definitions. These schemes can be developed, and supplied if necessary, quite independently from the code library.
3. The Test Programs.
There are 3 command line test programs written in C++ and are OS independent. Two of these programs use the CppUnit C++ library.
3.1. Unit Test Program
Using the CppUnit C++ library, these are a series of tests using the Cal library API. It is a fairly rapid set of tests designed to show regressions when making changes to the library.
3.2. Soak Test Program
Also using the CppUnit C++ library, these tests are designed to exercise the calendar schemes by stepping through the entire usage range one day at time. This should give confidence that all corner cases have been checked, and no regressions have occurred. By the nature of these tests, the full suit may take some time to run.
3.3. Script Test Program
A series of HistoryCal Script files have been created using a standard comment format to indicate the expected output of the script. The test program then runs through each file and compares its output to that expected. This program is still a work in progress.
4. The Reference Program.
This is the main HistoryCal calculator. It is a GUI program written in C++ using the wxWigets library, meaning it can be compiled to run on Windows, Mac, Linux and other Unix type OS's. Development is currently carried out on Windows (using Visual Studio 2008 Express) but as you can see from the screen prints in the manual section, it has also been compiled on Linux (Mint) and Mac OS X.
Most effort to date has gone into developing the Cal library, so this program is fairly basic. However, a completely independent project has also been set up to create a new enhanced graphic user interface, details are at http://historycalhci.wordpress.com or (Spanish version) http://historycalhcies.wordpress.com. You are invited (indeed encouraged) to participate.
In the future, this program could be give several alternative interfaces. Such as more calculator like interface with buttons numbers and months etc. or a more conventional calendar like interface laid out in years and months. There are lots of possibilities.
5. A Web Application
This is a possible future project. Tools exist to convert C++ libraries into JavaScript and this would make it possible to create a web app. This would be an attractive tool for anyone with only a passing interest in date conversion and calculations since it would work anywhere (including with tablets and smartphones) without needing any set up.