Things to be done to !Patch:

 * Case insensitive filename matching (case sensitive currently).
   Use Territory SWIs?

 * Canonicalise transforms filenames and filter out duplicates?.

 * Sort patch parser out - sensible (some!) error handling badly needed.

 * Register list of messages to Wimp_Initialise? Could be hard as there
   is no Risc_OSLib support for this I think. Turns out it can be done
   with a call to wimpt_messages(). All I need now is an o.Risc_OSLib
   with this function in it.

 * Throw away existing list of targets when a new selection is dragged in.
   (Wimp sends a message to say that it is the end of the selection.)

 * Interactive help.

 * Check ability to extend files at end.

 * Error messages from squeeze eg. insufficient memory, failure to
   write output file (locked, write protected disk etc.) come out in
   a wimp command window ie. they are printed. This should be an error
   passed to OS_Exit, so that it comes out in an error box. Also, when
   it can't write the output file, it doesn't say WHY (eg. Locked).
   Need to either modify squeeze source code, or do something like
   redirect the output to a file/pipe and then look in the file afterwards -
   non zero size implies error, convert contents of file to an error
   block and report it. I could then solve the destination file write
   problems, by opening the file myself up front, reading a few bytes from
   it, and writing the same bytes back out again although this would cause
   an extra disk swap on a floppy system unless it was done right at the
   start before UnSqueezing was attempted. Additionally I could
   check if the file is locked or not. Thus if the file can't be written to
   or deleted I can report the error nicely before squeeze gets its paws in.    That just leaves memory shortage errors in squeeze, which checking the
   output in a file should catch fairly well. Also memory shortage is less
   likely (I think) than locked files and write protected disks.

 * Errors from squeeze and UnSqueeze are not internationalised.

 * Add desktop save code.

 * Window moves (to where it is in Templates) when you hit full size tool.
   This is wrong - how do I fix it?

 * Escape key handling - while doing patches and while scanning for files
   to patch?

 * Fix window iconisation (doesn't close window when you iconise it!).

 * Handle squeezing of things too big to fit in memory currently (either
   by fixing squeeze or by reconfiguring CMOS RAM and rebooting machine
   with a script to squeeze things)?

 * Display of known patches?

 * File lengths or checksums (or both)?

 * Encrypt new version of file based on contents of old file. (Plus
   tool to generate this of course.)

 * msgtrans_lookup_all() - bit field to say which set of message files
   (ie. so transforms don't have to look in normal and interactive help
   messages files.)

 * Refresh menu option? (Runs check_patch() on all targets.) Sit on
   filing system upcalls? (Fixes problems of files being renamed under
   my feet and then having no selection icon after an error.)

 * VerifyWord <old> <new> for ReplaceFile - allows you to tell whether
   we are doing Apply or Remove. Similarly for encrypted replace.

 * Stop using RISCOS_Lib?

 * Use _kernel_osgbpb() and _kernel_file() (not R6) and _kernel_find()
   (or maybe my own equivalents which provide more registers and return
   a _kernel_oserror *).

 * Exclusive patches? (If select one, others deselected automatically.)
   For RISCiX 1.2 540/standard machine patches (have to cope with running
   out og ESGs, also watch for Adjust button.)

 * Removal of UnSqueeze when quit application (Module: keyword in
   patch file).

 * Make applications seperate by description as well as name?, so RISCiX
   1.1 only shows the 1.1 patch and RISCiX 1.2 only shows the 1.2 patch.
   (Need some way of determining which description eg. lengths, checksums,
   words to verify etc.)
