Versions:


1.00   * Development verson.

1.00a  * Included hints suggested by Ricky Sarge.

1.01   * Now tries to load data at startup, so can be 'RMLoad'd.
       * Tidied the *VoteModule_Statistics output.
       * VoteModule now treats vote '1' as '1' (previously '0').
       * More vigourous checking is applied to input.
       * Changed CMHG header to make more sense.

       * AmendVote coded but NOT tested.
       * Now handles 0 votes files.

1.03   * Internal version.

1.04   * Now can refuse it's own initialisation if something goes wrong.

1.05   * Better exit handling. Won't lock up and crash horribly if no data
         file.
         Added test code for vote deletion.

1.06   * Added statistics output and SWI call.

1.07   * Tidied up vote deletion code.
         Code optimisations on load/save routines.

1.08   * PutVote tidied up and optimised for NVP.
         Added routine to compare votes against entry - for NVP.
         Horrible crashes being experienced in NVP. Checked and rechecked
         the VoteModule code. Turns out it is something weird with BASIC's
         variable use.

1.09   * Can now load/save heap entries. Experimental routines.

1.10   * Internal checking will allow one-character option strings.
         Delete routine brought into use.
         Experimental heap manipulation routines (not linked in).
         Registration code added.

1.11   * As for v1.12 below, but withdrawn due to bug when saving.

1.12   * Delete heap entry, tidy heap entry and increment/decrement
         heap entry routines. Linked in for testing.
         AmendVote checked and passed okay.
         Changed *VoteModule_Extent and added to *VoteModule_Statistics.

1.14   * Now will refuse to load vote files under 60 bytes. These will
         be classed as "empty" and assumed to have 0 votes. Previously
         a blank file would cause a crash.
         Heap entry increment/decrement pointers swapped. I'm still not
         sure if the start/end points are correct, but it helps if it
         increments when you tell it to and not the reverse. :-)
         Blanks out the strings output on GetVote, GetVoteHeader and
         AmendVote. Therefore you get a 'new' vote (like "Hello[00][00]")
         without old bits showing through (like "Hello[00]re you?[00][00]").

1.15   * Steve told me the new CastAWote did not return the voted-on data,
         started at 1. Hmmm... Worked fine for me but did uncover a fatal
         flaw in VoteModule if your HasVoted file had few entries and you
         tried to read heap for a non-existant user. Infinite loop time!
         Blame C... I put || instead of &&. "OR" and "AND" would make life
         easier!
         In some cases, the return string for user-not-found would NOT be
         "". Now it is always "".

1.16  * Some minor changes to the interface.

1.17  * I think now the vote heap increment/decrement bits work. I've not
        given them a full bashing -- but they /appear/ to. Anybody care to
        back up their vote data then give the new VoteEdit a spin?

1.18  * Changed registration data.
        Now reads/writes the option flags for each question. The programmer
        uses the data block. VoteModule will poke the values into the software
        options area. Programmers should treat flag value "0" the same as "X"
        (ie, unsupported) because whilst VoteModule supports flags -- the
        software might not.
        Cherche Encore!

1.19  * There was a cock-up with the numbering of v1.18, so this version
        (1.19) was released to correct it.

1.19b * Email address updated. All changes for "CastA*W*ote". Now removed
        old "BudgieSoft" name in preference of "HeyRick".
        Removed unnecessary RiscOSLib dependencies.
