Some really ancient history:

1.00 ------------------------------------------------------------------------
   Original BASIC program, only converted to Sprites, never distributed.

2.00 (17 March 2000) --------------------------------------------------------
   Re-coded in C with full WIMP interface, two-way conversion, animations handled.

2.01 (27 June 2000) ---------------------------------------------------------
   A major new update to SFtoSpr is in the works. In the mean time, here are some nice new icons (low-res, hi-res & RO4) for SFtoSpr and the Star Fighter texture files. SFtoSpr will automatically load the RISC OS 4 icons if it detects OS 4.

2.10 (20th July 2000) -------------------------------------------------------
This is the first major update:
   Recompiled with common functions removed to library.
   Save dialogues now open with input focus, and are positioned more appropriately.
   Click on iconbar icon now brings all open windows to the front.
   All message-handling code has been completely rewritten, and is now incredibly robust and conforms exactly to the protocol specifications in the PRMs.
   Sprites need no longer be in order in the sprite file, to be converted to textures. Masks and palettes are now ignored.
   Sprite files created from texture files are now checked for validity before being output. So are incoming sprite files.
   Huge number of error messages reduced slightly.
   Textures can now be converted simply by double-clicking on a textures file icon in a Filer window. If SFtoSpr isn't loaded (but has been booted), then double-clicking on a textures file in this way will load SFtoSpr, to process the file.

Bugs fixed in version 2.10:
   Converted textures are now output the correct way up(!)
   The contents of all three writable icons are now read, rather than using the contents of the top one three times over(!)
   A bug causing a phantom icon at the start of drags has been fixed.
   Global keypresses such as Ctrl-Shift-F12 are now passed on.
   RAM transfer fixed, more robust response to failed saves.
   Formerly leaky memory management has been improved.

Ow, my head hurts. I'm off to bed now, Night-night! (5.06am)

2.11 (17th Feb 2001) --------------------------------------------------------
   Made 16-colour RO3-style versions of the application and file icons, because having three completely different sets of icons was confusing.

2.12 (8th March 2001) -------------------------------------------------------
   Recompiled with Pace's new 32-bit C components. This is, of course, rather pointless since the Comp and Decomp modules would not be loaded by a 32-bit RISC OS.
   Bugfix to stop the your_ref field of DataSaveAck message from being corrupt, when sent after failed attempts at RAM transfer.
   Less fussy now about being 'busy' - e.g. when an application probing for a pathname sends SFtoSpr a DataSave message without any intention of ever sending any data.

2.13 (20th April 2001) ------------------------------------------------------
   Internal fiddling with code structure.
   Changes to icons, inclusion of planet file icons (guess what comes next!)
   Now keeps modules in !FednetRes rather than inside application.

3.00 (13th June 2001) -------------------------------------------------------
   Added support for two-way conversion of SFSkyPic files (&406).
   Substantially rewritten as a toolbox application, and distributed as
    squeezed AIF code.
   Multiple windows may be open at any time, e.g. many batch windows or
    many save dialogues.
   Redesigned all dialogue boxes, including display of input file path and
    removal of the redundant third map tiles header field.
   For single file conversion, you now have the option of continuing a
    conversion operation after encountering a dud sprite.
   A batch operation will only output necessary sub-directories of the
    output tree.
   Timing of scan progress messages corrected.
   Included set of alternative (old) high-res 16 colour sprites.

3.01 (16th June 2001) -------------------------------------------------------
   Compiled with improved public release version of automatic Loader
    component - e.g. 1kb bigger, but with proper multi-dialogue handling.

3.10 (6th July 2001) --------------------------------------------------------
   Added "Windows" submenu from icon bar, to allow open dialogues and scan
    progress windows to be brought to the front of the window stack.
   If a dialogue is already open for a file then attempting to load it
    again will cause this to be shown.

3.11 (15th August 2001) -----------------------------------------------------
   Fixed problem where save box would be shown, but not respond to drag of
    icon.
   Changes to ViewsMenu to avoid errors removing premature dialogue box from
    menu (when application launched by file double-click).
   Fixed progress window bugs where wrong path shown when "Reading", and
    errors caused by mis-named messages.
   Fixed dangerous misinterpretation of error pointer returned by
    loader_buffer_file().
   Window names on list now include truncated not full file paths.
   Increased verbosity and downgraded seriousness of errors on load/save.
   Error reporting is now slightly prettier for RISC OS 3.5+ computers.
   If launched to load double-clicked file, errors cause it to quit again.
   Can now do without SpriteExtend 0.99 (implemented auto-detection).
   Attempted to improve 16 colour icon set.

3.12 (17th August 2001) -----------------------------------------------------
   Fixed bugs causing progress window to open in a zombified state - bad
    string causing OS_GBPB error, in conjunction with failure to expand
    window to show error.
   Changed misleading 'number converted' count in the progress window to
    'number written', only incremented after successful saving the output
    data.

3.13 (25th August 2001) -----------------------------------------------------
   Fixed bug where animations data read wrongly from writable icons - this
    was causing corrupt headers on output map tiles files.

3.20 (28th August 2001) -----------------------------------------------------
   After observing some strange splash effects with SFMapGfx files that had
    been through SFToSpr, I finally went back to the game sourcecode to
    recheck my interpretation of the header information. Oh dear, the fourth
    word *is* important!
   Restored ability to set the third animations field (which I had removed
    in version 3) - this data is now preserved in the animations text file
    rather than being zeroed.
   Updated documentation with new-found information on third animations
    field.
   Animations data preserved in text files now has textual prefixes e.g.
    "Splash1:" rather than just raw numbers.
   Warns of corrupt animations data when loading from text file, and checks
    typed values before building a SFMapGfx file.

3.30 (17th September 2001) --------------------------------------------------
   Fixed bug where displayed animations data was not zeroed on direct task-
    to-task transfer of sprite file.
   Now auto-detects whether to convert sprite files to SFSkyPic or SFMapGfx.
    This allows one-step conversion from sprites to SFSkyPic and return of
    two-way scan conversion.
   Completely redesigned map tiles set creation dialogue, with NumberRange
    gadgets used to provide a clearer layout and simpler user interface. The
    role and interpretation of the third animations field is now clearly
    shown, as is the maximum valid map tile number.
   Now does conversion of sprite file before opening any dialogue box,
    reporting any problems. You can go back to the create map tiles set
    dbox to amend duff animations data.
   During scan, silently ignores sprite files that contain no valid
    planets/map tiles graphics.
   Where an open dialogue already exists for a source file, this is now
    deleted and replaced rather than bringing the old dialogue to the front.
   Updated section 5.2 "File formats" in this manual.
   Various other internal changes.

3.31 (19th September 2001) --------------------------------------------------
   Fixed bug in Loader component regarding multi-stage RAM transfers. This
    had manifested as corruption when a single sprite was exported by Paint
    from a multi-sprite file.

3.40 (24th December 2001) ---------------------------------------------------
   Total overhaul of source code from the ground up, with many improvements
    and fixes not really externally visible.
   Now uses flexlib to buffer data in memory. The effect of this is that
    having expanded the Wimpslot, it now reduces again when the memory is
    freed.
   Double-clicks on SFSkyPic or SFMapGfx files in a directory display will
    now immediately display the graphics (in Paint), rather than bringing up
    a savebox. Like DoomGFX, this is done by saving the converted sprites to
    !Scrap.
   Redesigned saveboxes along more minimalist lines. Re-integrated
    animations dialogue and map tiles savebox into single window. Can no
    longer drop new input files on saveboxes (except for animations).
   Now defers removal of entries from 'Windows' menu until such time as it
    is closed. This prevents potentially serious problems when scan progress
    windows are closing.
   Saveboxes now pop up neatly over icon bar rather than on top of it.
   General improvements to directory scanning code, including elimination
    of depth limit and reduced memory usage.
   A new option on the icon bar menu controls whether or not to allow
    multiple saveboxes, according to taste.
   Now accepts any 8bpp sprite of correct pixel dimensions (e.g. ignoring
    dpi) as input, not just mode 13.
   Can optionally output sprites in new format rather than with old-style
    'mode' number.
   Fixed bug in Loader component with !Scrap transfer from other tasks,
    where suggested leaf name was shorter than "<Wimp$Scrap>".

3.41 (17th March 2002) ------------------------------------------------------
   No longer null polls when all progress windows are idle (e.g. paused or
    error).
   Added warning dialogue to confirm that user wants to quit with
    operations still in progress.

3.42 (11th November 2002) ---------------------------------------------------
   Uses Wimp_PollIdle rather than Wimp_Poll to limit frequency of null
    polling.
   Improvements to some widely used error-checking macros allowed code size
    to be reduced together with increased efficiency.
   Now copes properly with sprite files that have extension areas between
    the header and sprites data.
   Minor optimisation of conversion routines.
   Added a couple of missing flex budge safeguards.
   Added signal handler.
   Minor correction to interactive help for pre-quit dialogue box.
   Corrected mistake in !Run file where the CallASWI module was not being
    loaded on RISC OS 3.6, despite being required on all OSes prior to 3.7.
   Simultaneous directory scans now share a single OS_GBPB buffer, thus
    using less memory.
   Recompiled using the official Castle release of 32-bit Acorn C/C++.

3.50 (9th June 2003) --------------------------------------------------------
   The compression and decompression code has been incorporated directly
    into the front-end application, which no longer invokes external
    modules. This allowed improvement to the quality of multi-tasking.
   In particular, the granularity of multi-tasking no longer depends upon
    the size of the files being processed. Instead, file operations are
    effectively preempted after a certain time has elapsed.
   A round-robin system is used so that the amount of work done per wimp
    poll no longer varies according to the number of simultaneous batch
    operations.
   Non-interactive load and save operations (e.g. with an hourglass) now
    display the percentage done, and may be safely aborted by the user
    pressing ESCAPE.
   Moved the "Help" entry to the top of icon bar menu, as suggested by
    Castle.
   More sensible response to error on Toolbox_Initialise (doesn't rely on
    messages file, which isn't open).
   All dialogue boxes can now be reset by ADJUST-clicking on the 'Cancel'
    button.
   Now creates root output directory before replying to SaveAs_SaveToFile
    event, just to be nice to whoever is on the other end.
   Integrates much better with the pinboard - any iconised window icon is
    removed when that window is re-opened independently by the application.
   Now uses the Toolbox's standard 'Quit' dbox object - hence the DCS
    module is now a requirement. The default action is now 'Cancel' rather
    than 'Quit'.
   When closed, transient dialogue boxes that claim the input focus now
    restore it to the previous owner. Implementing this required special code
    to work around deficiencies in the Toolbox and/or Window Manager.
   Added work-around for a Toolbox bug that causes non-delivery of
    Window_HasBeenHidden events for windows opened with Wimp_CreateMenu
    semantics, when OS 4 !Help is running. This bug could cause permanent
    suspension of all running threads after the 'Quit' dbox had been opened!
   Now scans inside 'Image' files (typed files that can be accessed as
    directories) rather than ignoring them completely, as it did previously.
   Parsing of command line parameters is no longer case sensitive.
   Added new command line option '-timeslice' to control the granularity of
    multi-tasking.
   No longer uses Wimp_PollIdle. Programs running under TaskWindow poll as
    often as possible so why shouldn't we?
   Where possible reports file errors using the OS messages rather than
    custom ones, for example 'The disc has no more available space' rather
    than 'Error writing to...'
   File paths are now canonicalised before being displayed or compared
    (i.e. "IDEFS::Tamzin.$.!Boot.Choices" rather than "<Choices$Write>")

3.51 (19th August 2003) -----------------------------------------------------
   Even if upon receipt of a PreQuit message we do not object to dying, we
    now wait for the Quit message rather than dying prematurely.
   Where possible, changed to use SWIs instead of Star Commands for file
    access. This is faster and also reduces code size.
   Now demands version 5.43 of the shared C library, since this is the
    earliest version documented as supporting C99 functions (some of which
    are used).
   Formatted the manual text for a fixed-width 77 column display (Zap's
    default).

3.52 (5th September 2003) ---------------------------------------------------
   Fixed a memory leak; the half-written map tiles / planets set was not
    being freed when a conversion operation was abandoned.
   Belatedly added the message "BadSpriteCont", which has been required
    since version 3.40 but had accidentally been omitted.
   Abandoned all 'texture' terminology in favour of the more honest
    description 'map tile'. This change also affects sprite names and the
    name given to file type &407.
   Changed to an alternative method of loading and saving flex blocks, in
    order to combat the appearance of 'Not enough memory for I/O buffer'
    errors while heap expansion is disabled.

3.53 (8th September 2003) ---------------------------------------------------
   Fixed bug a introduced into the loading of sprite files in v3.52. On
    encountering EOF the last bit of data was discarded, which meant that
    up to 64 bytes at the end of the sprite area would be garbage.

13th September 2003
   Re-released with source code under the GNU General Public Licence.

3.54 (23rd October 2003) ----------------------------------------------------
   Internal changes.

3.55 (7th November 2003) ----------------------------------------------------
   On shutdown, no longer quits immediately that 'Quit' is selected from
    the quit confirm dbox. Instead all batch operations are aborted and we
    wait for a Quit message (analogous to what Paint, Edit & Draw do).
   Now restarts desktop shutdown by sending a key press event to the task
    that sent us the PreQuit message (as recommended by the PRM), instead of
    using SWI Wimp_ProcessKey.

3.56 (1st March 2004) -------------------------------------------------------
   Re-compiled with release 9 of CBLibrary.

3.57 (7th November 2004) ----------------------------------------------------
   Now uses dedicated OS_GBPB veneer provided by Acorn library kernel, which
    is faster than generic SWI calling methods and type-safe.
   Made changes necessary and/or desirable to compile with release 12 of
    CBLibrary.
   We no longer restore the initial savebox filename when a user clicks
    ADJUST on the Cancel button, because by rights this should be handled by
    the SaveAs module (which will hopefully be fixed, as Scale has been).
   Added system variables to !Boot file for Castle's proposed help system.

3.58 (19th November 2004) ---------------------------------------------------
   English default messages are now used to report flex memory errors
    because a bug in the library prevents use of our messages file.

3.59 (14 May 2005) ----------------------------------------------------------
   Many internal changes - notably to processing of Toolbox events (now use
    our own event numbers) and tidying up upon object deletion. Code size
    has actually shrunk compared with previous versions!
   Updated 4Sprites version of application icon to match latest version of
    RISC OS 4 'Sprite' file type icon.
   An error will now be reported if any of the files specified on the
    command line are not found.
   Now uses global 'BadParm' message instead of similar hard-wired English
    message.

3.60 (05 Aug 2005) ----------------------------------------------------------
   Fixed bug where insufficient memory upon initialisation of a batch
    operation would go unreported. Also source code fixes for problems that
    never manifested.
   Updated ResFind from version 2.01b to latest version 2.12 (improved
    support for truncated country names & long paths).
   Built with release 18 of CBLibrary (which it requires).
   No longer requires the new (C99, APCS-32) shared C library or a version
    of the floating point emulator that supports LFM/SFM instructions.

3.61 (11 Aug 2005) ----------------------------------------------------------
   Moved definition of system variables for Castle's proposed help system
    from !Boot file to Obey file in sub-directory for relevant country (to
    allow internationalisation).
   !Run file no longer invokes ResFind a second time, having executed !Boot
    (which does so).

3.62 (02 Feb 2006) ----------------------------------------------------------
   Removed redundant paragraph from 'Licence and Disclaimer' section of
    manual.
   General tidy up of excessive brackets and casting in the source code; the
    most insane case being the pointer arithmetic in c.SFgfxconv.
   Updated manual text, !Boot file, Resource file and Messages text for
    revised file type names.

3.70 (09 Nov 2006) ----------------------------------------------------------
   A sprite file output by SFToSpr may now include embedded animations data
    (if converted from SFMapGfx) or paint offsets (if converted from
    SFSkyPic). Batch conversions rely on each input sprite file containing
    this embedded data.
   The non-graphical data extracted from a SFMapGfx or SFSkyPic file can
    now be saved independently of the sprites. CSV is used instead of the
    esoteric text-based format in which animations were previously saved.
   The dialogue box shown when a sprite file has been converted to SFSkyPic
    format now includes input fields to allow the paint offsets to be
    specified.
   Corrected a pervasive mis-understanding of the significance of the second
    copy of each image in a SFSkyPic file. Files of this type produced by
    earlier versions of SFToSpr caused jerky animation when used in the game.
   Together, the above improvements finally allow SFSkyPic files to be
    faithfully reconstructed from their constituent parts.
   SFSkyPic and SFMapGfx files are now validated after being loaded.
   Added a 'Web' button to the 'About this program' window. This requires
    a later version of the ProgInfo module.
   No longer neglects to deregister any event handlers already registered
    for a save dialogue box or scan progress window, if an error occurs
    during initialisation.
   Fixed memory leaks caused by the fact that event handlers registered
    for the Window object underlying a SaveAs object were never deregistered.
   Updated source code for compatibility with release 24 of CBLibrary.
   Experimentally removed dependence on CBLibrary's Loader module.
   Moved the naming of file types into the country-specific Obey file
    'SFToSprRes:SysVars'.

(For more recent updates see the application manual.)
