!BasLink, 1.10 (29-Aug-90)
~~~~~~~~~~~~~~~~~~~~~~~~~~

!BasLink is a combined linker and compactor for BASIC programs. There are
three fundamental operations that can be performed by !BasLink:

* link and compact a project (an application directory containing
  !RunImageZ, and perhaps !RunImage1 and !RunImage) as required by the
  datestamps of the files.

* link a BASIC program to produce a stand-alone BASIC program (ie one that
  contains all of the required procedures and functions to operate).
  !BasLink can either use libraries specified by the LIBRARY token or it can
  use files dropped onto the window by the user in response to the name of
  whatever routine !BasLink is currently looking for. !BasLink can also
  remove any REMs contained in the code to make the resulting file slightly
  smaller than it would otherwise be (it also makes the compaction stage
  more efficient).

  Note that if the REM looks like an ABC directive, eg REM {NOCOMPILE} then
  the REM will always be copied out, regardless of the option setting.

  When copying routines from a library, !BasLink defines a routine as one
  which starts with a DEF and goes up to the next DEF. This has two
  implications:

  1) Routines with multiple entry points will not be correctly copied, eg

        DEFPROCentry_point1(A%)
        B%=FALSE
        DEFPROCentry_point2(A%,B%)
        ...
        ENDPROC

     !BasLink will just copy the first two lines for PROCentry_point1.

  2) !BasLink's definition of a routine does mean that more data than
     necessary will be copied, but it does mean that routines will multiple
     exit points will be copied correctly. Multiple exit routines are more
     common than multiple entry routines.

* compact a BASIC program. There are 2 options possible:

  1) to enable/disable the conversion of SWI name strings, eg
     "Wimp_Initialise", to the equivalent SWI number. Note that for
     extension SWIs, the relevant module must be loaded otherwise !BasLink
     may not be able to convert some of the names. If this happens, a
     warning will be given.

  2) to not copy REMs out. This is useful when the program contains ABC
     directives (see above).
