                                !JFShared
                                =========

Why ?
=====
The !JFShared directory contains resources for use with any of Justin
Fletcher's programs. These mainly include Basic libraries which are used in
many of his programs. The idea behind this is that like the C DeskLib, these
libraries provide a simple way to write a Wimp program. To paraphrase
Doggysoft's WimpExtension, it hopes to make you think "it's a program to..."
rather than "Oh, God. It's a Desktop program to..."

(WimpExtension is not required, and although a nice module, almost all of
it's functionality is built into these libraries. Same goes for Interface.)


Files :
-------
These are the files in the JFShared resource :
   BasicLib.TestLib            For testing of programs
   BasicLib.WimpLib            Main Wimp applications library (RO3)
   BasicLib.DynMenu            A dynamic menu handling library
   BasicLib.HeapLib            Management of heap blocks in application space
   BasicLib.HeapLibD           Debugging version of HeapLib
   BasicLib.EconetLib          Simple Econet handling routines
   BasicLib.DispLib            Display library (undocumented)
   BasicLib.CGILibrary         A CGI Library
   BasicLib.PaneLib            A pane handling library
   BasicLibU.*                 Uncompressed versions of the libraries
   Compress, Clean             Obey files to maintain the compressed libraries
   Help.*                      StrongHelp manuals for the various libraries
   Skeleton.Standard.*         Skeleton Wimp application using MessageTrans
   Skeleton.Squashed.*         Files required by BasCompress to compress the
                               applications
   !ShowError                  Application which will display the error and
                               line of errors in WimpLib based applications.
   IServices                   A module which needs to be placed in
                               System:Modules.Network - this is done
                               automatically by InstallJF.


Usage on different OS's
=======================
This version of JFShared is not supplied with versions of WimpLib which will
work on RISC OS 3.00 or lower. I'm currently supporting RISC OS 3.10 as a
minimum, RISC OS 3.71 as a maximum. NC OS and Ursula may be supported in
future.


System Variables
================
The libraries which are in common usage are pointed to by various system
variables. If a library, or other resource within the JFShared application,
needs to be accessed (other than those with pointers) they should be
referenced by JFShared:BasicLib.<library name> or what ever.

The actual variables are :
JFExtEdit$File         External Edit protocol interface library
JFEconetLibrary$File   Econet SWI interface library
TestLibrary$File       For testing purposes only
HeapLibrary$File       Heap management library
PaneLibrary$File       Pane window handling
BasicLibrary$File      Pointer to WimpLib
CGILibrary$File        CGI Library
DynMenuLibrary$File    Dynamic Menu library
DispLibrary$File       Display library

Setting JFShared$UseUncompressed to any value, then running JFShared will
use the uncompressed versions of the libraries, rather than the compressed
versions. This should not be needed unless you are actually altering
parts of JFShared.

Setting JFShared$DebugHeap to any value, then running JFShared will force
the use of the uncompressed HeapLibD library. This is useful for checking
the use of the Heap.


Bugs
----
Due to a bug in my copy of BasCompress SocketLib will NOT compress correctly
from the compressed version. One of the constants becomes corrupt (losing its
- sign) and connections will subsequently block. Use the uncompressed
versions of the library if you wish to use SocketLib.


Use of JFShared
---------------
I hereby give explicit notice that you may use JFShared in any way shape or
form /except/ commercially. Commercial users should contact me first.
Inclusion of JFShared with a program, or BasCompressed into a program is
explicitly allowed and encouraged.

I know the documentation isn't that great, but I'm still working on it :-)


Future improvements
-------------------
Some of these may get done soon :

* Documentation for DispLib !
* Documentation for PaneLib, too
* Integrate FilerLike library in to JFShared.
* Add a 'utils' library for those fun things I write and just copy everywhere.
* Update all the documentation and include some examples; maybe even a
  tutorial.
* Make SocketLib use EasySockets.
* Change SocketLib to use ANTs resolver.
* Remove the code from DispLib dealing with ReleaseEntity.


History
-------
Version 1.00 : Unreleased program used internally.
Version 2.00 : Released to Arcade in form of !JFShared and !Install
Version 2.01 : 04 Mar 1995 - Release to Arcade
               Minor bug fixes to WimpLib and WimpLib2
Version 2.02 : 11 Mar 1995
               WimpLib 1.40 : Extra features for menus
               Fixed !Run file to stop running out of stack
Version 2.03 : 25 Mar 1995
               Added support for ForceLib in form of ForceLibrary$File
               ForceLib : Added PROCinitforce
Version 2.04 : 27 Mar 1995
               WimpLib 1.41 : Added FNsubstvars
Version 2.05 : 30 Mar 1995
               WimpLib 1.42 : Added support for status files
Version 2.06 : 02 Apr 1995
               WimpLib 1.43 : Added FNgstrans function
                              Reorganised structure into groups
                              Added REM help messages for most routines
                              Corrected mistake in CreateIconBarIcon which
                                did not fill the icon
Version 2.07 : 02 May 1995
               WimpLib 1.44 : Added FNsubstvarsp for prefixed vars
Version 2.08 : 04 Jun 1995
               WimpLib 1.45 : Many alterations to FNsubstvars to cope with
                                errors.
                              Almost everything can now take Message file
                                input.
Version 2.09 : 07 Jun 1995
               WimpLib 1.45 : Version for RO2 created correctly.
Version 2.10 : 08 Jun 1995
               Application  : Recognises RO2 and sets BasicLibrary$File
                                correctly.
Version 2.11 : 14 Jun 1995
               WimpLib 1.46 : Fixed bug in FNsubstvars which didn't claim
                                error handler as local.
Version 2.12 : 15 Jun 1995
               TestLib 2.00 : Version number given and data logging to
                                <Wimp$Scrap> added.
                              Renamed variable from <Test$Lib> to
                                <TestLibrary$File>.
               ExtEditLib 1.00 : Written in basic form.
Version 2.13 : 28 Jun 1995
               ExtEditLib 1.01 : Revised to be slightly easier to use.
Version 2.14 : 30 Jun 1995
               WimpLib 1.47 : Fixed bug in PROCreadhelp for menus
               WimpLib2 1.46: Fixed bug in PROCwinsetextent for bit 0 setting
               AreaLib 2.00 : Given version.
Version 2.15 : 04 Jul 1995
               ExtEditLib 1.02 : Editor support added
               ExtEditLib 1.03 : Many bug fixes for editor section
Version 2.16 : 18 Aug 1995
               WimpLib 1.49 : Bug fix for FNLongfilename
Version 2.17 : 25 Aug 1995
               WimpLib 1.50 : CreateIconBarIcon changed to not filling icons
                                to fix display problem when marbling.

Version 2.18 : 25 Aug 1995
               ShowError 1.00 : Moved within structure.
               Help structure added
               Help.WimpLib 1.00 : Copied from StongHelp

Version 2.19 : 26 Aug 1995
               WimpLib 1.51 : redrawicon modified to use ForceRedraw.
                              seticontext and seticonvalid check for same.
               WimpLib2 1.47 : Changes made in WimpLib transfered, pressicon
                               added.
               WimpLib 1.52 : PROCshowfree added to display free space
               Skeleton : Modified Template to cope with showfree.
               Skeleton : Set mask null polls bit

Version 2.20 : 28 Aug 1995
               HeapLib 1.00 : Written and incorporated into JFShared.

Version 2.21 : 29 Aug 1995
               HeapLib 1.01 : lock and unlock of blocks added.

Version 2.22 : 01 Sep 1995
               WimpLib 1.53 : windowtitle modified to update only if changed
                               and redraw only title bar (correctly, unlike
                               FormEd or TemplEd !)
               Help.HeapLib : Written.
               Help.WimpLib : Updated.
               Help.ExtEditLib : Written.
               ExtEditLib 1.04 : modifications to use client FNedit_saverq.

Version 2.23 : 11 Sep 1995
               HeapLib 1.02 : PROCheap_reduce added for not reloc blocks
               WimpLib 1.54 : FNfiletype modified, and FNbasetype added.
                              May mean modification required.
                              FNmenuuntick now allows end of menu.
                              Fix to FNwindowtask to not bother tasks.
                              FNfindtask added.
                              PROCstatusflag and FNstatusgetflag added.
               WimpLib2 1.48 : FNfiletype and FNbasetype modified.
                              FNmenuuntick changed.
                              Fix to FNwindowtask.
                              FNfindtask added.
                              FNtaskname returns Unknown.
                              PROCwindowtitle modified.
               Help.WimpLib : Updated
               Help.HeapLib : Updated
               Help.ExtEditLib : Updated

Version 2.24 : 23 Sep 1995
               !Boot : JFPatch files give error if JFPatch not known.
               WimpLib 1.55 : FNfiletype and FNbase type modified to not give
                              error if bad filename.
                              PROCeerror for External errors in non-wimp
                              programs.
               WimpLib2 1.49 : Ditto
               Help.WimpLib : Updated
               Help.HeapLib : Updated
               Help.ExtEditLib : Updated

Version 2.25 : 30 Oct 1995
               WimpLib2 1.50 : Modifications to FNcreateicon to bring in line
                               with WimpLib.

Version 2.26 : 15 Apr 1996
               WimpLib 1.56 : FNstring0 passed null will return null
               WimpLib2 1.51 : ditto
               InstallJF 1.02 : Now in a handy desktop application :-)
               Help.WimpLib : Updated
               Help.HeapLib : Updated
               Help.ExtEditLib : Updated

Version 2.27 : 17 Apr 1996
               Application updated to use version number of library.
               Skeleton : checks the version number

Version 2.28 : 23 May 1996
               WimpLib2 1.52 : Various fixes and changes - works now !
               EconetLib 1.00 : Added (very rudimentary)
               Help.* : Updated
               Help.EconetLib : Added

Version 2.29 : 05 Jun 1996
               CGILibrary 1.00 : Incorporated into JFShared
               WimpLib 1.56  : Added PROCdragsave
               WimpLib2 1.53 : ditto
               Help.* : Updated
               Help.CGILibrary : Added

Version 2.30 : 08 Aug 1996
               TestLib 2.01 : Bug in creating log file fixed
               SocketLib 1.00 : Written and added.
               WimpLib 1.58 : Added PROCresizewinto, M option for menus
               WimpLib2 1.54 : Ditto
               Help.* : Updated
               Help.SocketLib : Added

Version 2.31 : 10 Aug 1996
               SocketLib 1.01 : Fixed memory release bug
               SocketLib 1.02 : Fixed many bugs - Thanks to Dave Thomas

Version 2.32 : 21 Aug 1996
               WimpLib 1.59 : Fixed menu heights at Daves request
                              resizewinto code fixed so that it works !
               WimpLib2 1.55 : Ditto

Version 2.33 : 23 Aug 1996
               WimpLib 1.60 : Added support for keystrokes on menus in
                              createmenu, decodemenu and the menu help.
               WimpLib2 1.56 : Ditto
               Help.WimpLib : Updated
               WimpLib 1.61 : Changed PROCseticontext to just update icon,
                              not force a redraw (undo of 2.19!) use Needs
                              Help if things don't redraw properly.
               WimpLib2 1.57 : Ditto

Version 2.34 : 31 Aug 1996
               WimpLib 1.62 : Thoughtlessness in FNmsgtoken meant that
                              I couldn't pass filenames as parameters - fixed
               WimpLib2 1.58 : Ditto
               Help.WimpLib : Updated.

Version 2.35 : 27 Sep 1996
               SocketLib 1.03 : Modified service routines to use my IServices
                                module.
               WimpLib 1.63 : Resized iconbar icon to the size used by the
                              network icon
               WimpLib2 1.59 : Ditto
               Help.WimpLib : Updated

Version 2.36 : 30 Sep 1996
               WimpLib 1.64 : Added facility to create iconbar icons with
                              priorities.
               WimpLib2 1.60 : Removed priority comments and added code to
                               emulate extended positions.

Version 2.37 : 15 Oct 1996
               HeapLib 1.03 : Fixed Heap_Garbage so that it actually works;
                              previously it had been attempting to move locked
                              blocks.

Version 2.38 : 17 Oct 1996
               IServices 1.04 : Placed in the JFShared directory.
               Released in two forms - the standard and aol releases.
               AOL is simply the standard version with a prettier install
               program.
               WimpLib 1.65 : Fixed bug in MsgToken from v1.61
               WimpLib2 1.61 : Ditto

Version 2.39 : 22 Nov 1996
               SocketLib 1.04 : RMEnsure's InetServices now.

Version 2.40 : 23 Nov 1996
               WimpLib 1.66 : Added F11 to the keystroke list, why did I
                              forget that ?
               DynMenu 1.00 : Added to the libraries.

Version 2.41 : 14 Dec 1996
               WimpLib 1.67 : Found a way of resizing windows without causing
                              them to redraw the space they would have occupied
               Skeleton : Support for web links to the pages in the template
                          file.
               InetServices 1.07 : Included
               HeapLib 1.04 : Added FNstrdup.

Version 2.42 : 25 Jan 1997
               WimpLib 1.68 : Minor change to PROCeerror to stop progs looking
                              silly when displaying Appname$
               WimpLib 1.62 : Ditto
               SocketLib 1.05 : Minor changes to allow BasCompress to squash
                                it.
               Skeleton : Modifications for BasCompress - new init% variable
                          introduced for 'error handling' (!) and RESTORE <x>
                          removed.

Version 2.43 : 29 Jan 1997
               AreaLib : removed.
               CGILib-LTP : removed.
               PBSLibrary : removed.
               ForceLib : removed.
               Help.* : Updated with some of the 'new' changes.
               Skeleton.Message : renamed to Skeleton.Standard and made to use
                                  the URI protocol. handle renamed to
                                  taskhandle.
               Skeleton.ArcWeb : created for 'just in case'.
               Squashed.Compress : copied from IRServer to allow compression
                                   without loss of variable or routine names.
               Squashed.CompressVF : created to allow compression including
                                     the use of special files.
               SocketLib 1.06 : Added many updates from Reuben Thomas to allow
                                multitasking connects and lookups.

Version 2.44 : 05 Feb 1997
               SocketLib 1.07 : Fixed use of THEN=<x> ELSE=<x> so that
                                BasCompress likes it.

Version 2.45 : 23 Feb 1997
               SocketLib 1.08 : Added logging calls

Version 2.46 : 14 Mar 1997
               WimpLib 1.69 : Modified CreateIconBarIcon to resize to the
                              sprite.
               Skeleton.*.!RunImage : Added the PROCloadfile erroneously
                                      removed :-(
               SocketLib 1.09 : Fixed FNsocket_eof and modified PROCsocket_close
                                to ignore <0 sockets
                                FNsocket_connected and FNinet_decodeerror
                                written to fill some gaps.
               WimpLib 1.70 : Made FNcreatemenu put the right length into icons

Version 2.47 : 20 May 1997
               DynMenu 1.01 : Added check for 0 as restore handle safely
               DispLib 1.02 : Added to JFShared (still under development)

Version 2.48 : 30 May 1997
               WimpLib 1.71 : Now allows attaching of child windows :-)
               WimpLib2 : removed. Anyone who requires a copy should contact
                          me. I'm no longer supporting this.
               ISvcs.* : Added for those people who enjoy C code as well,
                         along with the documentation for it.
               Help.WimpLib : Updated

Version 2.49 : 06 Jun 1997
               DispLib 1.04 : Added handling for adding lines mid-way, opening
                              windows with a little more control and reading
                              the co-ordinates of an entry.
               WimpLib 1.72 : Embedding child windows can now use window
                              flags
               SocketLib 1.10 : Fixed bug in SocketLib which prevented you
                                from ports > 65535 (now performs an AND).
               DispLib 1.05 : Can read line, open windows, resize and add lines
                              mid-way now. Colour works.
               WimpLib 1.73 : PROCseticontext will now move the cursor if is
                              in the same icon.
               DispLib 1.06 : Minimum width and natural height added.
               SocketLib 1.11 : Fixed bug in buffer_getrest which looped
                                infinitely.
               DynMenuLib 1.02 : Menu titles may now be indirected
               DynMenuLib 1.03 : Allowed modifying of the last items flags
               ExtExitLib 1.05 : Minor change to work with BasCompress

Version 2.50 : 10 Sep 1997 (released to HENSA/FreeNet)
               WimpLib 1.74 : PROCnotemessage didn't work. At all. Ever. Can
                              you believe it ? (!)
               SocketLib 1.12 : Added '0' as a port number to generate one in
                                FNfindlisten.

Version 2.51 : 13 May 1998
               SocketLib 1.13 : GetHostByAddr now works correctly with the ANT
                                resolver (without using any patches).
               DispLib 1.13 : Selections work. display_resize works, lines can
                              be deleted and totally cleared. Saving of text
                              and selection via simple routines. Stepping
                              through selection via simple function.
                              Fonts added. Very rudimentary, but work. All
                              non-fonts aware DispLib clients will work
                              unaltered.
               WimpLib 1.75 : FNdecodemenu improved for font menus. May have
                              side effects for things using the built in font
                              menus. PROCmenutickitem added. FNwildcard added.
               DispLib 1.17 : Fonts now work and allow selections. DispLib now
                              provides an almost complete text display library.
                              It's not perfect, but it's the best we have in
                              BASIC at present.
               SocketLib 1.14 : Added vague hand-waving type implementation
                                of SOCKS 5 support. If you want a simpler
                                socketing system than SocketLib, I recommend
                                you use the EasySockets module.
               PaneLib 1.00 : Added to the libraries.
               WimpLib 1.76 : FNoptionsfile added.
               HeapLib 1.05 : Added the linked list management to make life
                              a little easier. Integerified everything. This
                              is a /big/ change and I hope it'll speed up
                              things that deal with the heap.

Version 2.52 : 09 Jun 1998
               Many miscellaneous changes, and updated version number because
               there have been so many releases of the intermediate versions
               with JFTerm and such like.

Version 2.53 :11 Jul 1998
               DispLib 1.19 : Fixed background display bugs, and partial line
                              selection should work properly now.
               Compressed versions of libraries created.
               WimpLib 1.77 : PROCdragicon fixed when bounding box used, and
                              should now allow drags over the edges of the
                              screen (used to bound the box, not the pointer)
                              PROCdragsprite added
                              PROCsetexpliciticontext added (doesn't do a
                              messagetrans lookup).

Version 2.54 : 30 Jul 1998
               HeapLibD 1.05 : A 'debug' HeapLib which should 'check' that
                              claims and releases are actually valid, rather
                              than accidentally releasing things twice or
                              releasing an address which hasn't actually
                              been claimed.
               DispLib 1.20 : Added ability to set just the font name. Found
                              bug in PROCdisplay_kill highlighted by HeapLibD
                              (wow, it is useful!).
               Additional notes in the Help files.
