
                      Changes file for Zap 1.40
                      =========================

                      Taken from Zap's log file
                      ~~~~~~~~~~~~~~~~~~~~~~~~~

Desktop Zap LOG file (created 15/7/92). Author D.H.Symes BA GIMA :-).

[big snip]

Version 1.35 sent to Hensa & Stuttgart on 05/10/96

Changes by Tim Tyler:

*	Font sub-styles are now available.  These supplement the exisiting
	  syntax colouring, and allow a choice of bold, italic and underlined
	  variants of the main font to be used.  This allows syntax
	  information from the selected area to remain visible, and can help
	  to provide additional visual clues about a document's meaning to
	  readers.  Sub-styles are available with DSA bitmap fonts (where
	  suitable fonts have been designed) and with the outline fonts
	  drawn by the VDU drivers.  They are not currently available with
	  fast DSA outline fonts, or with the system font.

*	There is a soft-link protocol to allow fonts to be linked to files in
	  other places in the font directory.  Links are text files with
	  a self-explanatory format.  The idea is largely to prevent the
	  need to store multiple copies of a font (in memory and on disc)
	  when it is to be used as a main font and as a sub-style.

*	Support within ZapRedraw for altering the aspect ratio of displays
	  using outline fonts.  DSA and VDU modes both benefit.  The top 16
	  bits of the font size now contain the aspect ratio (as 100xY/X).

*	FONTASPECT command provided within Zap to allow the aspect ratio of
	  outline fonts to be altered.

*	Coloured throwback.  The colouring is still quite simple with no
	  highlighting of matched words implemented.

*	There are now an additional fifteen colours in the code mode.
	  You can probably guess that it is felt that the only disadvantage
	  of large numbers of colours is the hassle of configuring them.
	  The old colours are still there, but are now usually confined to
	  the mnemonics.  Perhaps most interesting is the condition
	  colouring - which is best used as a condition style.  This can
	  take some getting used to when reading code, but it can be
	  genuinely useful.  It has now been tested fairly extensively with
	  Darren Salt's excellent disassembler.

*	Added BITMAPFONT <string> command.  This simply sets the bitmap font
	  in the relevant window to be "ZapFont:<string>" e.g. to force
	  a BITMAPFONT change, use: BITMAPFONT "08x15.Teletext" : FONTTYPE 1
	  The main uses of this command are:
	    1 Using the useful feature of being able to execute arbitrary
	      strings of Zap commands whenever a new file is loaded (these
	      commands go in the filetype or path sections of the keys file)
	      to put different types of files into windows with different
	      fonts.
	    2 Putting frequently used fonts at the bottom of the font menu to
	      avoid unnecessarily wading into the main font menu.

*	Added the OUTLINEFONT <string> command.  This acts much like the
	  BITMAPFONT command. <string> is a fontname, optionally preceded
	  by a '#' character.  If present, the hash prevents the font from
	  being installed and cached - useful to stop the font from
	  being cached twice when used in conjunction with the FONTSIZE
	  command.  'OUTLINEFONT "#Corpus.Bold" :  FONTSIZE 12 : FONTTYPE 3'
	  is an example of its use.

*	A fix for truncated descenders when using anti-aliased outline font
	  displays has been implemented.

*	Anti-aliasing is now applied to all text colours in modes with 256,
	  32K and 16M colours.  The technique involves no memory overhead,
	  and incurs no speed penalty, but it can produce imperfect
	  displays.  The inaccuracies are best seen with a magnifier on
	  characters which have a low contrast between themselves and the
	  background.  With a black backdrop dark grey characters are
	  displayed poorly.  It may be possible to filter out these low-
	  contrast cases and feed them to the non-anti-aliased routines
	  for a slightly better display.  It may also be possible to use the
	  technique to some extent in < 256 colour modes in the future.
	  If the effect is disliked then it can be disabled by setting
	  the keys file variable &31F to a non-zero value.

*	Added code to filter out the very worst cases in the anti-aliased
	  DSA redraw code.  Unfortunately ATM this only filters out *very*
	  low contrast combinations that are unlikely to be being used in the
	  first place.

*	Interactive help messages for third-party windows are now passed on
	  correctly.  There have also been a number of other modifications
	  to allow applications which open their own windows to behave in a
	  more responsive manner.

*	A second Zap-handled mode word for storing options in has been
	  created.  This modifies the format of the !Config file in an
	  appropriate manner.  This enables:
	   * Universal soft-wrap (w_format bit 27);
	   * Universal window-wrap (w_format bit 26);
	   * Smart shift-cursor keys option (w_format bit 25);
	   * Confined action of cursor-right (w_format bit 24).
	  Notes about the above options:
	   * The 'Confined action of cursor-right' (confine H) option does
	     not currently work in BASIC mode.
	   * The smart shift-cursor keys option also affects how the
	     '!Edit tab' option operates.

	(Thanks are due to Martin Ebourne for the 'Smart shift-cursor keys'
	code and to Daniel Wagennar for giving permission for his 'SoftWrap'
	mode's code to be incorporated into Zap.)

*	Added a new variable to the Keys file.  "Dialogue box offsets"
	  is variable &31D and crudely controls where dialogue boxes which
	  are associated with windows are brought up.  The format is:
	  <xoffs>,<yoffs> with default values of &80,&80 if no offsets are
	  given.  The format is currently subject to change.

*	The number of permitted command tables has been increased from
	  16 to 32.

*	Emulation of a cursor movement pattern of some other editors is
	  now available.  The "Confine V" cursor option (w_format bit 23)
	  acts to give the cursor a 'current column'.  The cursor is then
	  moved to the nearest available position when cursor up and down
	  are executed.

*	Last, To eof and Exit buttons now close window when adjust-clicked.

*	Q (quit) abbreviation added as a synonym for E (exit) in the replace
	  buttons d-box and the load d-box.

*	To Front (T or F) option added in Edit/Overwrite/Cancel d-box
	  [icon 6]. All options now close this window when adjust-clicked on.

*	New option not to use hourglass in search routines added (b22 of R5).

*	Pressing 'tab' repeatedly now repositions caret properly in
	  search/replace d-boxes (instead of painting carets all over the
	  place and not rubbing them out).

*	For the benefit of '!Clipboard' users who use cZ, cX, cC and cV to
	  provide a 'writable icon clipboard', Zap's search and replace
	  dialogues now pass these keys on to the WIMP so clipboard programs
	  can use them.  Note that as cC is used for toggling the 'Case
	  sensitive' flag this may be generated by pressing cD or cF instead.

*	Clicking on the title of a file in a throwback window (or on the
	  blank lines surrounding it now simply loads the relevant file.

*	Added support for a new system variable: Zap$DummyOSVsn.  If this
	  exists then it overrides Zap$OSVsn when Wimp_Initialise is called.

*	'To front' button (icon 4, 'T' or 'F') added to the quit dialogue.

*	Problems with double-adjust-click and then single select click on
	  Throwback windows sorted out.

*	The "Zap_SaveWindowStatus" routine no longer indiscriminately clears
	  any current selection; it now only does this if the selection is in
	  the current window.  This routine is called when a window changes
	  mode and on font changes.

*	Zap now uses the <Zap$HelpData> variable when looking for its
	  HelpData.

*	There is a bug in the WIMP (from OSs 3.10 and 3.70) which means that
	  the ends of drags are not always reported properly.  Until now
	  when these circumstances occurred, Zap got confused and could
	  crash.  This problem has been worked around by always checking to
	  see that a mouse button is being pressed while a drag is occurring
	  and faking a drop drag event for the benefit of any dragging
	  clients if this is not the case.  The bug affects most RISC-OS
	  programs that use the WIMP dragging routines.  It can usually be
	  provoked by not calling wimp poll for a while. One very common
	  cause for this is using the !MoveWindo application.  To observe the
	  bug in programs, the easiest method is to start the drag and press
	  F12.  In Zap doing this while dragging a selection caused severe
	  problems if that window was subsequently closed.

*	With the cursor in one window and a selection in another ctrl-ADJUST
	  to extend the selection, and watch the cursor redraw and move
	  around in the other window.  This bug has now been fixed.

*	Extending the selection with ctrl-ADJUST would, under some
	  circumstances, cause the selected area to flicker when the drag
	  kicked in.  This has been rectified.

*	The "Load mode" menu now only contains the modes not already loaded.
	  The shorter menu should make it easier to find things, though there
	  is no longer an exhaustive alphabetical list available when
	  choosing modes.

*	The cursor no longer wraps incorrectly when cursor-right is pressed
	  and held down at the end of files.

*	"Copy ops" i.e. the MAKEDEFAULT command, when issued from a
	  read-only window no longer makes all subsequently opened windows
	  read-only.

*	Handling of the Save box's type picker modified to allow prettier
	  templates.  Clicking with select now brings up the type menu.

*	In the 'Replace?' box, RETURN now performs a replacement.

*	A change has been made to the default routines which select words
	  of text when these are double-clicked on. Such selections now
	  terminate at brackets, quotes and various other symbols.

*	The command 'TMT_UPDATEWINDOW' has been rewritten, renamed and moved
	  into the kernel.  As a consequence, window-wrap redraw has improved
	  massively.

*	Added routines designed to make window update much smoother when
	  using window wrap with a selected region.

*	The horizontal scroll bar and scroll icons are no longer active
	  when window-wrap is engaged.

*	SOFTWRAP and WINDOWWRAP commands added.  These *must* be used
	  in place of their flag-toggling equivalents.

*	'Infinite' window wrap implemented.  It can be toggles on a
	  per-window basis as INFINITEWRAP.  It defaults to being off.
	  One point to note about it is that the old width is not stored,
	  and so deselecting window wrap sets the current width as the new
	  window width.

*	Soft-wrap and line-wrap are now mutually exclusive - using one will
	  deselect the use of the other.

*	Soft wrap now *never* wraps spaces onto the start of the next line.

*	Soft-wrap is now indicated by an 's' in the title bar.
	  Window-wrap is now indicated by a 'W'.

*	Added the AUTOSOFTWRAP command.  This uses w_format, bit 22.

*	"Copy ops" i.e. the MAKEDEFAULT command now also copies the data
	  for the mode of the window it was issued from (i.e. the options
	  usually accessible through that mode's menu) into the default
	  options.  This is useful as it can save some wading around in the
	  icon-bar menu.  However, there seem to be some imperfections in
	  the original command which have not been tracked down yet.

*	Added absolute cursor positioning on a mouse click as an option.
	  Controlled by w_format, bit 21, this option is is sometimes useful
	  when performing such activities as creating ASCII art.

*	The UPDATEWINDOW command (and so also window wrap) have been updated
	  so they now keep track of the position of the mark left when the
	  cursor is not in a file.

*	ZapRedraw has been modified to cope with *small* negative horizontal
	  window offsets.  This allows a left-hand margin to be used.

*	Zap has been changed to take advantage of this.  The selection is
	  intended to extend into the margin.  Zap variable &30C (which
	  should now be titled "Window left margin (os)") now works.

*	When auto soft-wrap selects soft-wrapping, it now makes sure
	  line-wrap is deselected.

*	The auto soft-wrap detection routines now fire whenever a mode change
	  takes place.  Also when auto soft-wrap selects soft-wrapping, it
	  now makes sure line-wrap is deselected.

*	Auto-width now does not operate if the mode is currently being
	  soft-wrapped.  The auto-width option will remain ticked, though.
	  When auto-width is on and soft-wrap is off there are still some
	  circumstances which will cause auto-width to kick in unexpectedly.
	  To observe this load a file with auto-width and soft-wrap on.
	  Then toggle soft-wrap, and then window-wrap.  When window-wrap
	  is toggled, the auto-width will suddenly wake up.  I know about
	  this issue.

*	Changing the type of a saved file no longer resets the path name
	  in the Save box.

*	Adjust-click on throwback windows now pays attention to the file's
	  read-only status.

*	Long-standing bug in Zap's selection routines fixed.  The problem
	  involved starting a drag, pressing a button and then continuing
	  the drag.

*	Selections can now be made by pressing and holding down ESCAPE and
	  then using the cursor keys.  Shift- and control-cursor
	  combinations work with this, as do Page Up and Page Down.

*	Selections made using SELREGION are now *always* confined in such
	  a manner that the cursor follows the text exactly.  This should
	  eliminate long standing redraw 'issues' associated with selecting
	  regions that start or end in empty space.

*	A number of Zap commands currently being proposed for being in
	  Zap's kernel have been placed there.  Hopefully the ones picked
	  are fairly uncontroversial, and they are all very short.
	  "DELETEFILE", "DISCARDFILE", "DISCARDWINDOW", "DROPMARK",
	  "INSERTBLOCK", "INSERTBLOCKGS", "OPENPARENT", "GOTOADDR", "STARTOP"
	  and "STOPOP" have been done so far.

*	A fairly radical change has been made to the passing of parameters
	  to Zap commands.  Commands which take string parameters may now
	  have them passed enclosed in brackets, instead of inside quotes.
	  WARNING!: this change *may* require changes to your 'Keys' file.

*	There are new options in the Code mode to control the colouring as
	  the default options may not always be appropriate.

*	Code mode now handles instructions whose disassembly depends on the
	  last two instructions being disassembled immediately beforehand (as
	  implemented in the disassembler to provide LDRL, etc). LDRL and
	  LDRX also now work properly when left-arrow is pressed over them.

*	Code mode is now aware of offset &2C (Messages file offset RO>3.5)

*	Code mode is now aware of bit 31 of addresses acting as a flag bit.
	  In particular in module finalisation offset where this acts as
	  a flag preventing the module from being killed on RMClear.
	  (Thanks to Darren Salt for information relating to these issues.)

*	The Save selection box has been modified to be more like the Save
	  box.  Filetype information, and load and execution addresses can
	  *not* yet be modified independently of those of the main file.

*	Soft-wrap modified so different modes can choose which characters
	  are soft-wrapped on.  Text mode (i.e. most modes) now wrap by
	  default on spaces, tabs and "-".  HTML modes (for example) should
	  also wrap on ">" for the best display.

*	Soft-wrap now permits characters to extend into the last column,
	  on the proviso that they are followed immediately by a CR.

*	Tabs are now being handled much more sensibly when soft-wrapped.

*	Made dialogue box buttons press themselves in when the relevant
	  short cut key is pressed to provide visual feedback.

*	SCLEFT and SCRIGHT are now 'window wrap aware' and don't do anything
	  if window wrap is turned on.

*	STILLUP and STILLDOWN commands have been implemented.  These are
	  roughly equivalent to UP:SCUP and DOWN:SCDOWN.  The latter are
	  fairly useless, however as those combinations would fail to repeat
	  in an intelligent manner when bound to cursor up and cursor down in
	  the keys file.  STILLLEFT and STILLRIGHT would be easy to
	  implement, but also not particularly useful.

*	SCUP, SCDOWN, SCLEFT and SCRIGHT have had their 'auto-repeat' bit
	  set.  This will probably only normally make a difference for those
	  with rapid keyboard auto-repeat rates and slow machines.  To get
	  the effect of the original commands, it is possible to use commands
	  like SCUP:NULL to stop multiple SCUPs being combined.

*	The Save/Discard/Cancel box now offers the same options as the
	  Save box, in addition to its normal functions.  The main advantage
	  of this is it is easier to save from a window's close icon.
	  Discard and Cancel are still supported.  There is a 'To Save' icon
	  (probably to be deleted) which brings up the normal save box as
	  before for those who prefer the old style for some reason.
	   * Note that the templates are no no-longer backwards compatible
	     with previous versions of Zap.  I will endeavour to change
	     the minimum number of templates.  A two-dimensional set is
	     available, in the tradition of supporting RISC-OS 2.

*	Zap now uses the Zap$Keys, Zap$Settings and Zap$Types variables when
	  looking for its resources, and loads them separately.  This means
	  that changes to the keys file (for instance) no longer cause
	  CreateConf to perform a complete rescan of the Modules directory
	  when Zap loads.  The 'types' section in CreateConf's configuration
	  file will need changing (see notes) and Zap$Settings and Zap$Types
	  will need to be set up in the !Run file.

*	A new template has been added.  This is used for a save->CSD query
	  when saving the selection.

*	Drag-and-drop of the current selection implemented.  To activate
	  this, shift-select-drag while the pointer is over the selected
	  region.  If the drag is to a Zap window, the cursor is positioned
	  appropriately before the text is copied.  The leafname used for
	  exported selections will be that present in the 'Save selection'
	  box.  Drags may be aborted by pressing ESCAPE.

*	Inserting and deleting regions which are not currently visible on the
	  screen has, until now, failed completely to update the screen.
	  These circumstances are very commonly produced while undoing or
	  redoing insertions or deletions.  Now the integrity of the display
	  is always maintained.  This is currently done by catching the cases
	  which would cause redraw problems and then updating the whole
	  window, rather than just the sections which need doing.

*	Auto soft-wrap now no longer selects soft-wrap if it finds any
	  control characters in the file.  This will usually occur when
	  binary files which are being viewed in Text mode.

*	Inserting text by dragging it into a Zap window now inserts by
	  placing the cursor at the dropped position if SHIFT is pressed.
	  This applies to both imported texts, and selections which are
	  SHIFT-dragged from Zap itself.  If SHIFT is not pressed then the
	  text is inserted at the position of the cursor (or the 'point'
	  marker).  The way the SHIFT operation works could easily be
	  reversed - it is set the way it is mainly for the sake of
	  backwards compatibility.

*	Added Darren Salt's exception-handling code.  A 'COREDUMP' is
	  generated when an exception occurs if there is a file called
	  'Debug' in !Zap's root.  Please don't mail this file in unless
	  someone askes for it specifically.

*	Trying to execute 'To EOF' the the 'Replace?' dialogue on a read-only
	  file no longer generates a WIMP error box with a message full of
	  top-bit-set characters.

*	Modes can now specify whether the various cursor options are relevant
	  to them.  The corresponding menu entries are greyed out if the
	  options are not applicable.

*	Zap no longer causes address exceptions when the desktop is shut down
	  and restarted.  This problem seems to have been introduced with
	  Zap 1.35.  The fix is a crude one and has the consequence that
	  Zap does not reinitialise itself and place an icon on the icon bar
	  upon restart any more.  For the technically minded, Zap now traps,
	  Service_WimpCloseDown, looks for itself dying, and issues a
	  OS_ExitAndDie on itself if this happens.

*	A number of 'irritations' associated with the last character on soft-
	  wrapped lines have been removed. In particular control-K (DELTOEND)
	  now always works properly, clicking beyond the end of the line
	  positions the cursor as it should, the cursor "Confine V" option
	  now works properly with SoftWrap and selecting the last character
	  of the line now functions properly.  One problem has been
	  introduced, however - double and triple clicks beyond the end of a
	  soft-wrapped line select text on the following line...

*	New commands CONFINEHORIZONTALLY, CONFINEVERTICALLY and FREECLICK
	  added.  This means that the occasional conflict between
	  CONFINEHORIZONTALLY and FREECLICK has been eliminated, and that
	  the corresponding menu entries will now have sensible interactive
	  help on them.

*	WFORMAT_TOGGLE and WFORMAT_ALTER WILL now no-longer affect bits
	  0-7 of w_format.  This is to stop commands like WFORMAT_TOGGLE 6
	  from crashing Zap.  The change is a potentially serious one as it
	  means that you can no longer use (for example) WFORMAT_TOGGLE 1
	  to swap between Text and Byte mode.

*	MOVESEL now leaves the region MOVE'd selected.  Probably YANK should
	  do this too.  The old behaviour was questionable; it is not
	  available as an option.

*	Modified the behaviour of COPYSEL, MOVESEL, PASTE and YANK so that
	  they insert the text at the cursor position, rather than at the 
	  nearest offset.  The old behaviour was poor and so is not even
	  available now as an option.  Note that these changes make using the
	  'Non-standard' option in BASIC mode *much* more viable.  This
	  strips spaces from the ends of lines, including ones which are
	  otherwise blank, as they are typed.

*	Serious long standing bug in the MAKEDEFAULT command has been located
	  and cured.  It was copying most of the options from the current
	  window into the default opinions of whatever mode was currently
	  selected in the icon bar menu.  No wonder it seemed unreliable.  It
	  now correctly copies the options across from the specified window
	  into the options of the relevant mode.

*	More changes to MAKEDEFAULT (and thus copy ops).  It should be saving
	  its settings more reliably (again).  Also it no longer affects
	  options in any modes apart from the mode of the file it was issued
	  from.  It was (for example) saving the colours in all the modes
	  whenever it was issued.  I think this was not good behaviour.

*	Variable width line numbers implemented.  The interface is via the
	  SETMARGINWIDTH and COLONSEPARATOR commands.  These will come
	  set up higgle-de-piggledy for those who have been following the
	  progress here; upgraders straight from 1.35 should not experience
	  this.  Hopefully there will eventually be a way of setting things
	  up so that BASIC mode gets a width of 5 and no colons by default.
	  If the margin width is set to 1 and the colons are turned off then
	  then a '*' (or, if the 'Hex' option is selected, a '>') will be
	  displayed where the last visible digit of the line number would
	  normally go.  This can sometimes be useful to provide feedback
	  about which lines are logical and which are physical, especially in
	  soft-wrapped modes where  the distinction between these is being
	  deliberately blurred.

*	WC and WCSEL commands added to Zap.  Having WC in Zap means that it
	  can be properly used as a submenu in the File menu without loading
	  an extra Zap mode by default.  And menu entries using the WCSEL
	  command are now shaded depending on whether there is a current
	  selection, and ADJUST-clicking on the commands in menu entries
	  works correctly.  WCSEL no longer beeps to indicate that there is a
	  current selection and gives a minibuffer warning if it is executed
	  without one.  The commands were originally written by Elliot Hughes
	  as part of his ZapENH module.  Many thanks are due to Elliot for
	  kindly providing his source code.

*	Added NEXTCYLINDER and LASTCYLINDER commands.  These were written by
	  Darren Salt.

*	If a minibuffer warning is given when a command is issued from the
	  minibuffer the warning no longer disappears immediately.  The
	  input focus is retained by the minibuffer's owning window, even
	  while the warning is being displayed.  I think the psychology of
	  doing this is questionable, but it does mean that Zap behaves more
	  responsively, and in particular, that long minibuffer warnings can
	  be cancelled by pressing ESCAPE.

*	The undo buffer now stores a flag to indicate the position of the
	  cursor when text is inserted or deleted.  This is then used to
	  reposition the cursor when UNDO is executed.  When deletions are
	  undone, the cursor now moves to the start of the inserted region if
	  it was there when the deletion occurred.  This mainly affects
	  CUTSEL, DELETENEXT and DELETETOEND.  Storing the position of the
	  cursor (if it is inside the deleted region) would be a superior
	  strategy, but it would also be a more expensive one.
	    Note: DELETENEXT in ZapBASIC currently words 'the old way'.
	          I can't /neatly/ fix this without making ZapBASIC non-
	          backwards compatible with Z135.  The intention is to
	          do this just before the release.  Apologies in the interim.

*	A 'count the number of matches' option added to the Zap_Search call.

*	A front end integrated into the Zap search and replace dialogues
	  based on the above call.  This counts the number of matches of a
	  specified search string in one or all of the loaded files. There
	  are in fact two possible methods used to display the search
	  information.  One (currently being used in the search box)
	  involves a popup window (which saves on template real estate).
	  The other (currently in service in the search and replace dialogue
	  box) uses a simple display icon to show the number of matches.
	  Whether you get the pop-up box is controlled in the templates
	  file; set a non-zero ESG for icon 3 to stop it from appearing.

*	Text mode now uses "-------I" to display tabs.  It was using
	  "]]]]]]I" mainly because both "]" and "I" are control characters,
	  so this was easier and faster as the foreground colour buffer
	  didn't have to be used.  The soft-wrap code has also been changed,
	  so this change also applies to any modes which have soft-wrap
	  turned on.  I have minimised any performance loss by recoding the
	  (already pretty well optimised) redraw routines.  In text mode, an
	  unused register was found and half the branch instructions were
	  eliminated.  In principle this change could affect modes which use
	  the text mode's code to perform their redraw.  AFAIK there aren't
	  any modes which adversely affected.  There is an unfortunate side
	  effect - selected tabs no longer look quite so good.

*	It is no longer possible to open the minibuffer from the icon bar
	  menu.  Commands which use the minibuffer in this context now abort
	  themselves if they are supplied without any string.  The minibuffer
	  would have been opened at the position dictated in the template
	  file.
	  The functionality has been removed largely for aesthetic reasons;
	  On most of the occasions the minibuffer was being opened in this
	  manner, it was in error.

*	Added ALLMODES and ALLWINDOWS commands.  These execute a given string
	  of Zap commands once in each Zap window, and once for each loaded
	  mode respectively.

*	Byte, Word, ASCII and Code modes are now using their background
	  colours for the first time.

*	Zap now tries to reset Alias$Taskwindow if it thinks it needs to do
	  so if it exits ungracefully.  This should prevent the symptom of
	  cF12 from not working until Zap is reloaded.

*	An old throwback bug cured.  If entries were deleted from the end of
	  a throwback buffer so that all the entries for the last file were
	  deleted, and then more entries added, these subsequent entries
	  failed to operate.

*	Title display of information read from disc changed from (t)rack to
	  (c)ylinder.

*	Integration with (recent versions of) ZapSpell. Double/triple
	  clicking on a throwback entry generated by ZapSpell now looks up
	  the relevant word in the dictionary.

*	Support for inserting selected regions.  Currently the clients for
	  this are the CUT and MOVESEL commands which use it to mark the cut
	  text as being in need of reselection when they are undone.
	  EMAIL_SNIP and possibly some other commands could helpfully
	  cooperate here (set bit 6 (&40) on entry to Zap_(Do)Command).

*	The mode_0 template has been deleted from templates file.
	  The 'Main' template has been introduced and this acts as a
	  prototype for the main windows created by Zap.  This has been done
	  mainly to allow different coloured borders to be used.  The
	  supplied default template uses a dark grey/colour 6 background.
	  The idea is to allow users to colour their border differently from
	  their most commonly used background colour, to help with situations
	  where one Zap window lies on top of another one.  Regrettably, the
	  colour controlling window borders also controls the title bar text
	  foreground colour :(

*	Old bug involving the selection not getting redrawn in the right hand
	  margin fixed.  If you don't have a right-hand margin configured,
	  (not recommended) then you won't notice any change here.

*	Executing BINDTOKEY now terminates any learned key sequence.  This
	  prevents LEARN:RETURN:BINDTOKEY:TAB:TAB:TAB...TAB:TAB:TAB from
	  crashing Zap.

*	An old bug which caused the undo buffer to become corrupted cured.
	  This bug could be consistently reproduced by using FULLUNDO in
	  conjunction with attempts to undo beyond the first undo in files
	  whose undo data contained concatenated sections of insertions and
	  deletions at critical points.

*	Some changes to the definition of what Zap takes to be a 'word' (in
	  the context of double clicking in 'Text' mode).

*	'!Edit tab' mode now searches backwards through the file to find a
	  line long enough to provide it with a guide if the previous line
	  is inadequate for this purpose.  If no such line is found the
	  default tab setting of 8 columns is used.

*	An old bug in ZapRedraw cured.  This only affected VDU redraw mode.
	  It meant that areas were often redrawn using an incorrect
	  background colour in the anti-aliasing - it was most noticeable on
	  partly selected lines and could usually be reproduced simply by
	  dragging a selection.  The area under the cursor is now also
	  redrawn correctly.

*	Pressing 'Tab' in the INDENTBY command's minibuffer gives the current
	  indentation string.

*	ADDLF and ADDLFSEL commands added to partly replace DUMPFILE.

*	Configuration of the Disassembler in Code mode is now better
	  integrated into Zap.  Use of the CODE_DISASMTOGGLE command should
	  soon be discontinued as the command will be dropped from Zap.
	  The Disassembler options may now be set up on a per-window basis
	  and preferred options may be saved in the !Config file.
	  Any existing Code mode options will be scrambled - sorry.
	  Changing the Disassembler options from within Zap no longer affects
	  the behaviour of the Disassembler with other RISC-OS applications,
	  as Zap now preserves its flags.

*	Zap now 'WimpTask's a number of items on the ZapExtensions path when
	  it feels it needs the resources they provide.  BootDisasm,
	  BootExtAsm, BootHide BootLineEd BootIClear and BootRedraw are
	  supplied. If your main use for any of these is from within Zap
	  then it may be preferable to load them with this interface, to
	  avoid them being loaded unnecessarily.

*	INSERTTIME and INSERTDATE can now take strings as parameters.
	  These specify the format used in the same way as they are specified
	  in the default settings.

*	Cured a bug involving auto-clear selections not working with multiple
	  views of a single file.  The code that stopped this from working
	  looked like it was intended to only clear the selection if it was
	  in the document being edited, but it wasn't working properly, so
	  it's been commented out.

*	UNDOing an operation performed using Zap_ReplaceArea now higlights
	  the result (if this was selected when the operation was performed).

*	The INDENT command can now indent by a supplied string.

*	Fixed an old bug which caused DELTOEND and DELLINE at the end of
	  files to add regions to the yank buffer repeatedly.

*	Function keys are now active on a file when some dialogue boxes
	  associated with the file have the input focus.  This can take some
	  getting used to, but is very useful.

*	Option to set the global disassembler options in Code mode menu
	  provided.

*	Added highlighting of floating point and co-processor instructions
	  to code mode.

*	CODE_DISASMTOGGLE command added to toggle bits in Darren Salt's
	  'Disassembler' module.

*	Added a new option in 'Code' mode to allow stripping of comments.

*	'Binary OP codes' option added to Code mode.

*	EDITWORD command added.  This acts like the ASSEMBLE command, only
	  it always disassembles the word at the cursor into a DCD
	  instruction.  If the file has a binary display option turned on
	  then it uses a binary DCD, otherwise a Hex one is used.
	  It is used in Word mode when RETURN is executed, and in Code
	  mode if RETURNNOINDENT is.

*	EDITBYTE command added.  This acts like the EDITWORD command
	  It is used in Byte mode when RETURN is executed.

*	Word mode now executes the EDITWORD command on RETURN, and
	  ASSEMBLE on RETURNNOINDENT.  Code mode does the same (only the
	  other way around).  Byte mode uses EDITBYTE.  This allows easy
	  entry of hex, decimal and binary numbers and assembler.
	  
*	Zap now offers the option to try to stay up when an exception
	  occurrs.  There may be occasions when Zap objects to this
	  happening and will need to be restarted.  Users are recommended to
	  attempt to preserve anything they have unsaved when this happens.
	  This change was originally implemented by Darren Salt.

*	'Ghost' images of the cursor are now no longer left lying around
	  if performing a concatenated sequence of insertion/deletions.

*	The LineEditor module now helps to provide a history in the 'Search'
	  'Search and Replace' and Goto dialogue boxes.  It may be navigated
	  by using Page Up/Page Down.  Everywhere, except in the Search and
	  Replace dialogue, the cursor keys also perform this function.
	  Tab restores the original setting as before. Ctrl-K clears the
	  history of the current icon.  Ctrl-T copes text between the icons.
	  There is a WIMP front-end available by calling up menus containing
	  the history.  Adjust performs a different action from Select in
	  many places. (* SearchBox, ReplaceBox and Goto Box).

*	'Last' button in the 'Replace?' dialogue box [icon 4] and 'Undo'
	  button [icon 5] added.

*	Added 'Silent operation' (MISCOPS 14) option which causes Zap never
	  to beep.  Third-party extensions may still make noise, but it is
	  recommeneded that they use Zap's BEEP command to do this (or read
	  this flag before making their noise).

*	Added DELTOSOF and DELTOEOF commands.  These delete to the start of
	  the file and to the end of the file respectively, maintaining the
	  current selection.

*	Goto box revamped, so that the displayed co-ordinates of the cursor
	  are continuously updated while it is open.

*	FINDFUNCTION command added.  This also currently appears in ZapBASIC,
	  a location from which it will shortly be deleted.

*	WINFO_TOGGLE and WINFO_ALTER commands added.

*	A line based selection model is now available as an option in all
	  text-like modes.  The selection model is closely related to the
	  one used by ZapBASIC.

*	SENDSEL command added.  This sends the selected text into the
	  keyboard buffer, a character at a time.  It may be aborted by
	  pressing ESCAPE.

*	The fonts used in the font sub-styles should now be placed in a
	  directory with the name of the main font.  The fonts should be
	  files within this directory, called 'B', 'I' and 'U' for the Bold,
	  Italic and Underlined sub-styles, and '0' for the main font.
	  Fonts which have no substyles should /not/ be directories with a
	  single '0' file, but simple font files as normal.
	  A '0' file (which should usually be a link) may be placed inside
	  the main directories to provide a shortcut to a commonly used font
	  of that size/type.
	   Note: These changes may cause incompatabilities with other
		 ZapRedraw clients which expect the existing font structure
		 (which has now also changed in some other respects).

*	Zap provides an interface to allow ZapSpell to spell-as-you-type.

*	Added the '-noicon' command line switch and the INSTALLICON command
	  This latter installs an icon bar icon if one is not already
	  present.

*	Use of directories starting with '~' for backup files now has a
	  minimum time (specified in seconds) which may be used to control
	  when backups are made.  If the file in the first backup directory
	  is newer than the specified time, then no backups are made.  This
	  stops the backup directory from being flodded with recent files
	  when rapid multiple saves are made.

*	A number of options which were global (namely Wordwrap, Linewrap,
	  And the 'Insert tabs as spaces' option are now stored on a per
	  mode/per window basis.

*	Zap now no-longer trusts throwback tasks to feed it filenames in the
	  correct case (as some of them failed to do this).  It now double-
	  checks the case of the letters in the leaf with the filing system
	  if it is asked to load the file.

*	'Strong soft wrap' option added (bit 9 of w_info).

Tim would like to thank Reuben Thomas for innumerable helpful comments,
Rich Walker and Alexander Thoukydides for help in tight corners, all the
other developers, and all who contributed to the zap-devel mailing list.


Changes by James Aylett:

*	Global clipboard support added. The PASTE, CUT and KEEPREGION
	  commands all now affect the global clipboard by default.  There
	  is also the CLEARGC command which may be used to determine whether
	  Zap is currently maintaining the clipboard.

*	OLE support internally to Zap.  This uses code from !ZapOLE - which
	  is no longer required as an extension mode.  Note that this
	  requires an alteration to Zap's !Run and !Boot files to work
	  properly.

*	Flexible support for modes to interact with help lookup
	  (e.g. StrongHelp).

*	Newfile command takes mode name and filetype as parameters. From the
	  iconbar it defaults to &FFF and the mode associated with the
	  specified filetype; from a window it defaults to the window's
	  current filetype and mode. This is expected to replace Createfile.
	  (It doesn't set the caret correctly in cases such as "Byte &FFF".
	  This is being looked into.)

*	Select and adjust clicks on Zap's iconbar are now bound to an
	  arbitrary command string. This affects 'Settings' variables
	  &30E / &30F, which must be changed.

*	Byte and word mode alterations: number and ascii dumps optionally
	  grouped;  number dumps optionally displayed in binary (hex input
	  mode inputs in binary in this case); optionally suppress control
	  characters; tidied colouring.

*	Fixed bug in Zap->Remove menu when dealing with modified files.

*	The FINDFILE command now brings the found window to the front of
	  the window stack if it is already loaded.


Changes by Darren Salt:

*	Block editing implemented on a per-mode basis. It affects CHAR,
	DELETE, DELETENEXT, TAB and related commands (more specifically, the
	mode entry points e_char, e_delete and e_tab). Text mode provides
	support in these places; many modes will inherit this behaviour.
	  Wordwrap and linewrap are disabled when editing within the
	selection with this option enabled.

*	Dynamic substyle loading implemented.

*	Alt double click causes some action to be taken on the text at the
	cursor. Normally, this is a word; it may, however, be something
	looked up by a function.
	  The action is a Zap command which takes a string parameter; the
	function used is of the same name as the command, but takes as its
	parameter the file offset, and returns a string.
	  An extra configuration file, ZapUser:Config.ClickSend
	(<Zap$ClickSend>), is provided for this.

*	ClickSend changes:
	  &600	.<function>		<command>	<modes|mode types>
	  &600	.	.<function>	<command>	<modes|mode types>
	now allowed.

*	Command arguments:
	  Dynamic (evaluated on the fly):
	    $(...)  string parameter (numbers automatically converted)
	    #(...)  byte or word parameter
	    @(...)  as $(...); deprecated
	  Static (evaluated once only, at parse time):
	    $<fn>   string parameter (numbers automatically converted)
	    #<fn>   byte or word parameter
	    @<fn>   as $<fn>; deprecated
	  These changes are intended to allow bracketed expressions to be
	    supplied to commands and functions which require byte or word
	    parameters.
	Function arguments:
	  Syntax as above. The argument is always evaluated when the function
	    is evaluated.
	Note to Zap developers and extension authors:
	  Zap_ProcessCommand and Zap_ProcessKeyCommand have changed slightly;
	  this will only affect usage where the command data has been
	  generated from a string supplied by the user or read from a config
	  file.

*	Colour optionally added to fancy print :-)
	The 'use colour' option is initialised according to the printer
	  driver settings.

*	Dynamic expression arguments may be used for commands in menus, keys
	  and types definitions.

*	Keyboard handling markedly improved via the keycode and modifier
	buffering performed by the newly-written (and probably very buggy)
	KeyboardExtend module. (Zap will revert to the old behaviour if this
	module is not present.)
	Note that this requires that commands (except for those which cannot
	be sensibly bound to a key) may not check Shift or Ctrl unless
	they're waiting for them to be pressed or released.

*	New commands SET, UNSET for Zap variables.
	Variable names may contain letters, digits, '`', '_' and '$'; they
	  must not start with a digit or '$'.
	Variables may be included in expressions as follows:
	  @$<var>  string variable
	  @#<var>  int variable
	  @=<var>  string variable, evaluate as Zap expression

*	New Zap call, Zap_ClaimMessage. Necessary for protocols where a SWI
	  may be replied to with a WIMP message; Acorn's URI dispatch
	  protocol is one such. (ZapDS uses this call.)

*	Command strings may now include comments, eg.
	  WIBBLE "foo" ; do something:WIBBLE "bar" ; do something else
	Comments may not include ':'.

*	Byte & Word modes: clicking on a character in the character dump now
	positions the cursor over the appropriate byte or word.

*	IF...THEN...[ELSE]...ENDIF implemented.

*	REPEAT...UNTIL and WHILE...ENDWHILE implemented.
	  Infinite loops may be escaped from by pressing Alt-Escape.

*	CASE...WHEN...DEFAULT...ENDCASE implemented

*	CWHEN implemented; functionally like 'case' in C/C++/Java.

*	BREAK and CONTINUE implemented for looping constructs.

*	Unconditional bug fixed in CONTINUE and BREAK

*	Zap_Ensure and Zap_Extend may have R0=0 (if so, they set R0=R1 and
	  jump to Zap_Claim)

*	LOCAL variables implemented

*	String expression evaluation now available (Zap_EvaluateExpression).

*	Minibuffer filename completion improved: will now work in situations
	  such as
		FINDFILE "ADFS::HardDisc4.$.Apps.!Zap.C"
	  (command flags permitting).
	  Note that it will *not* work where the partial filename is enclosed
	  in parentheses, since these *may* be part of the filename.

*	Some support for 'big' discs added to the 'DZap' dialogue.

*	'Big' disks (>=512MB) use a sector address instead of a disk address.
	(The sector address is the disk address divided by the sector size.)
	The disk size will be given as a 16-digit number, and the file title
	will contain the disk address (again, 16 digits). Small disks
	(<512MB) are unaffected by these changes.

*	New dbox "Movebox" for use with dzap buffers, and a command MOVEBOX
	  to open it. It's opened automatically when you click on one of the
	  "Read..." icons in the dzap box.

*	'Taskwindow' program extensively modified and improved.

*	Input focus change problem fixed.

*	RETURN shortcut implemented in Quit box.

*	Minibuffer scrolling improved, wrt caret position.

*	Minibuffer now allows Ctrl-C to paste in the current selection,
	  with control codes being converted to spaces. There's also an
	  option to have it drawn using Wimp_TextOp (if available).
	  Tick 'Options.Minifuffer.System font' to disable this.

*	More keypress changes:
	  Selected text may be pasted into the search & replace dboxes via
	  ctrl-P. The minibuffer now also uses ctrl-P for consistency; its
	  contents may be pasted at the cursor via ctrl-W, ctrl-Copy takes
	  on the role of ctrl-K (del to end). Clear history extended to Goto
	  (ctrl-K) and minibuffer (ctrl-K/ctrl-N). Minibuffer command codes
	  16, 14 and 23 correspond to ctrl-P, ctrl-N and ctrl-W.

*	^P (paste selection into dbox) translates control codes into escape
	sequences, according to the '\ commands' option; it'll stop after a
	\n if not in raw mode. Note that no notice is taken of any macros you
	may have defined...

*	Search and replace:
	- new special character, \?, representing DEL (chr code &7F).
	- \[...] construct fixed:
	  - now allows ] to be included as a literal at the start of the
	    string, eg. "\[][]" (find '[' or ']') or "\[^][]" (find anything
	    except '[' and ']'). "\[[x]y]" will still match "[y]" or "xy]".
	  - ranges may now be specified in reverse order, eg. "Z-A".

*	Hourglass percentage for 'all files' search/replace now uses the sum
	  of the file lengths.

*	'Possibly modified' status for large files which are of their
	  original length and marked as modified. This will be resolved on
	  various actions which require to know whether the files are
	  actually modified.

*	Fixed "move down unnecessarily" redraw bug (eg. "x\ny\n\nz\n\n\n",
	  first five lines selected, INDENT).

*	Commands accepting string parameters are now allowed to force the
	string to be supplied with the command; omitting the string for such
	commands (which would normally cause the minibuffer to be opened)
	will cause an error.

*	Numeric arguments may now be enclosed in "".

*	New file naming fixed wrt unnamed types: "xxx_n" instead of "&xxxn".

*	Horizontal scrollbar removal implemented (MISCOPS 18).
	There are two situations in which the scrollbar will be missing:
	  - window wrap
	  - full-width window
	The former works with any WindowManager; if it's recent enough, the
	  extended Wimp_OpenWindow is used, else the window is deleted and
	  recreated.
	The latter only works with WindowManager >=3.80 to avoid the possibly
	  excessive redraws which would occur due to having to delete and
	  recreate the window. (It uses the extended Wimp_OpenWindow; I could
	  hack the window definition directly for older versions, but...)

*	BASEMAP per window and as a default per mode :-)
	  From the extension author's POV, this means that Zap variables 13
	(key_basemap) and 23 (key_current) are now in the window block as
	w_basemap and w_currentmap. Zap_ReadVar and Zap_WriteVar will access
	these via R8; if R8=0 then attempts to read will return key_default
	and attempts to write will quietly fail.
	  The per-mode default is stored in the low byte of mode data
	variable 2, and as such, will be stored in <Zap$Config>.

*	Keymap naming implemented; new commands BASEMAPN and KEYMAPN. Names
	  may currently be anything except ""; given a declaration
		&401 &000 &1FF wibble
	  then keymap 1 will be named "wibble" and may be selected as the
	  basemap via BASEMAPN "wibble" (exactly equivalent to BASEMAP 1).
	  Names are matched case insensitively.
	Two keymaps with the same name is silly; the first declared will be
	  found.

*	Keymap 0 is called "Default".

*	The EMACS command expects to find a keymap named "Emacs".

*	BASEMAPLIST added (builds a keymaps list menu for basemap selection).

*	BASEMAPN now tickable on menus (in addition to BASEMAP and the
	  BASEMAPLIST menu entries)

*	Editing window click handler now distinguishes between mouse buttons.

*	The HELP commands now tell you if no help text has been found.

*	Careful optimisation of all Zap's string-handling routines for
	  maximum speed.

*	Changes to the replacement Debugger to allow faster and better
	  support from within Zap for syntax-colouring of assembler
	  conditions.

*	Dragging a file or directory to the minibuffer results in its name
	  being inserted.

*	Menu handling altered such that including an extension command in
	  menus will not cause the extension module containing that command
	  to be loaded unless the command has to be called when the menu is
	  opened, updated or clicked on.

*	Hourglass activity added around file load/save operations

*	Exit handler modified so as not to dump registers for *ShowRegs.

*	Default click behaviour in Byte, Word and Ascii modes changed to
	  allow double and triple clicks to select words and lines.

*	Clicking Select or Adjust on certain dialogue box backgrounds will
	  give them the input focus.

*	Code mode branch-following now correctly sets the disassembler flags.

*	HelpKey (and Help) now use the keymap selected by the most recent
	  KeyMap, BaseMap, Emacs etc. thus more easily allowing for help for
	  keys in maps other than the current base map. If accessed via a
	  keypress, HelpKey/Help must be present in that keymap.
	A second HelpKey will, without first selecting a different keymap,
	  use the base map.

*	Zap_UpdateWholeWindow now calls UPDATEWINDOW.
	Zap_UpdateArea and Zap_UpdateWindow are deprecated; they will
	eventually be replaced with new (and different) Zap calls.

*	Save box for untyped file now opens with Load/Exec writable

*	DELETENEXT no longer checks Shift, always copying if the copy cursor
	is active. If you want the delete behaviour regardless, use
	DELETENEXTNOCOPY instead.

*	New command PASSTHROUGH. Use in TaskWindow mode to override Zap's
	  claiming of certain keys/commands.
	New function @COPY, indicating whether the copy cursor is active.

*	If you have both LineEditor and Zap set up such that DELETENEXT is
	bound to Copy, then changing the Zap key definition to
	  IF (@MODET=3 AND @COPY=0):PASSTHROUGH &18B:ELSE:DELETENEXT:ENDIF
	will allow Copy to work in a taskwindow exactly as it does in any
	other window or at the (F12) command prompt.

*	Mode entry point e_return modified: on entry, R0=0 if RETURN, 1 if
	  RETURNNOINDENT. Code mode suitably modified so that RETURN maps to
	  ASSEMBLE and RETURNNOINDENT to EDITWORD.

*	The search code can now check for a string starting at the given
	  offset; to use this, set R4 (search direction) to 0. Also, setting
	  b21 of R5 causes the search code to set R3 to the cursor/point
	  offset and R4 to 0 (useful for conditional commands).

*	Adjust-click fixed for the case where the input focus is in a
	different Zap editing window.

*	Save boxes' TAB bug fixed

*	Calls to Zap_UpdateArea and Zap_UpdateWindow generate 'deprecated'
	warnings.

*	Zap_Warning modification: R1 bit 30 set -> no "Warning: " prefix.

*	Minibuffer early closure bug fixed. (This bug affected any warning
	  displayed before the previous one had timed out.)

*	Parentheses may be used around numeric arguments.

*	Zap_ReturnWord allows \ddd, \xnn, \&nn (search-like).

*	Zap_ProcessKeyCommand now relies on the parameter type passed in R2
	  b24-27 (it used to rely on the type given in the command's flag
	  word). Ensure that you're setting R2 up correctly...

*	Zap_ReadValidateCommand always returns R1=0 or R1->heap block. It is
	  up to the calling code to free this block even if this call has
	  returned an error.

*	Fixed all the conditional commands, various functions and
	  MULTICOMMAND (in practice, COMMAND or a command sequence) to work
	  from places such as the iconbar menu.

*	DELTOSTART and DELTOEND now work with block editing.

*	Clicking on the portrait and landscape options in the 'fancy print'
	  dbox now causes update of the page dimensions. Also, the 'add
	  title' option icon is now initialised correctly.

*	Clipboard paste bug fixed (trasfer via scrap file, Shift held down).

*	Exception-handling code now tries to write <Zap$Dir>.ZapDump on a
	number low level errors if a <Zap$Dir>.Debug file is present.

*	Adjusted the self-modifying code in a disc-reading subroutine so that
	it works on StrongARMs.

*	Minibuffer redraw using WIMP font now optional - it may be toggled
	from the icon bar's options menu.  The minibuffer is redrawn if open.

*	ClickSend protocol: mode type "BASIC" renamed as "Tokenised".

*	New cursor variable c_charoff. This is used to maintain offsets
	  within tokens; it (mostly) fixes the situation in BASIC mode where
	  the copy cursor is in a token below or to the right of the input
	  cursor).
	Zap_UpdateCaret sets c_charoff to 0.
	Zap_SetCaret calculates a value for c_charoff.
	Zap_AlterCaret uses c_charoff.

*	In an editing window, DEFAULTMAP will now reselect the default keymap
	  for the mode in use in that window. Otherwise, it will select the
	  global default keymap (as defined in the Keys file, variable number
	  &400) as the default for the default mode. In either case, if the
	  keymap doesn't exist, it'll fall back on keymap 0.

*	When selecting a mode, if its configured basemap doesn't exist, Zap
	  will now fall back on the global default keymap then on keymap 0.

*	Calling Zap_ReadVar for key_default will now return w_defaultmap if
	  R8<>0. Similarly, Zap_WriteVar will write to w_defaultmap.


Changes by Justin Fletcher (last updated 22 Feb 1998)
==========================

Changes to Code mode :
  * Code mode now uses embedded debugging information to provide the names of
    functions in branches, strings and some other pointer information and
    when they are defined, in compiled and linked code. [see below]

Other changes :
  * Zap_Command command added centrally to Zap from ZapJRF.  This allows
    other applications to execute Zap commands conveniently.

Additional information :
  Within Code mode, AIF files are now recognised (by the SWI OS_Exit) and
  their headers are given descriptive names to complement those given for
  modules.
  Chunk files are described in a comment at the head. This is experimental.
  Other descriptions :
  
  'func: <name>'
        C style function names embedded prior to the function. These are
        recognised by a 'SWINV' instruction for a SWI which is both < 256
        and a multiple of 4. The number is the length of the function name
        embedded. The function name comes before the SWINV and is word
        aligned and zero padded.
  '-> code: <func>'
  '-> code: at <address>'
        C style function reference, or unidentified code reference. The
        function names are recognised by being a B or BL to an address within
        the file, preceeded by a SWINV instruction which complies to the
        above criteria. 'Unidentified' code must be word aligned and have the
        'AL' condition set.
        SharedCLibrary routines are identified in AIF files, if they have not
        been 'grabbed' from memory.
  'error: <string>'
        Reference to a standard error block. These are ADR instructions which
        are followed by a ORRxxS pc,r#,#vbit instruction, or a variant of
        LDMxx rx[!],{...r14}. Only the string is shown, not the number.
  'string: <string>'
        Reference to a string. These are ADR instructions for which the
        destination contains no control characters but 10, 13 and 9 and which
        do not meet the criteria of the previous two checks.
  '-> string: <string>'
        Reference to a string pointer. These are LDR instructions for which
        the destination contains an address within the file and which the
        contents of meet the criteria for being a string (above). Phew!
  '-> <header definition>'
        Any reference to the head of the file will be displayed with a
        descriptive name. This should work correctly in both AIF and Modules.
  '-> ->... recursion: at <address>'
        A reference refers to itself. This is /not/ recursive so will not spot
        loops.
  '-> ->... too deep: at <address>'
        References which would imply more than 4 arrows. This limits is
        currently fixed, but may change in future depending on if I can
        work out how !

  Obviously these are, at best, rules of thumb and can never get things 100%
  correct. However, if you find anything that is a blatant lie within the
  disassembled code I would appreciate knowing so that I can update the code
  in the future.
  
Future plans :
  
  Long ADR needs fixing - it's currently 'odd'. It doesn't a) display the
    correct instruction from Darren's disassembler, and b) doesn't work on
    the ADD/SUB following the ADR. The 'Long ADR' message is a debug feature
    to let me know that it has identified the instruction as such.
  ADR's where the next instruction is LDM but the following is not ORRS
    pc,r#,#vbit don't come out correctly.
  LDR and LDRB
  Chunk files.


Changes by Martin Ebourne:

*	CreateConf written and used to provide plug-and-play configuration
	  for Zap extension modules.  More details are in the documentation
	  which accompanies CreateConf (in !Zap.Code.Config).
*	ALTERSEL command added to Zap's core.
*	Lots of changes to ZapMJE.


Changes by Daniel Wagenaar:

*	Softwrap mode has now been added centrally to Zap.  It has been
	  extended so that soft-wrap may be an aspect of most modes, and
	  modes may choose which characters may be soft-wrapped on.


			Possible problems
			~~~~~~~~~~~~~~~~~

A warning for those using commands from old Keys files:

Previously, any brackets after a command were ignored. Structures such as
"NULL (does nothing)" were legal.

A change has been made to the way parameters are parsed so that, executing
the above command would try to pass "does nothing" as a string to the NULL
command which will be rejected with an error message.  If there are any such
structures in your Keys or Menus files, Zap may fail to load. This change
has been made to better facilitate passing commands as parameters to other
commands, and to pave the way towards a native Zap evaluator.  Quotes do not
need to be doubled up inside such structures.

'COMMAND (INSERT ")...(")' is legal, but note that 'INSERT (()' is *not*.


Note that Zap now has its own soft-wrap option and no longer requires the
'SoftWrap' mode.  Similarly, OLE is now centrally placed - the old ZapOLE
should not be used with this version of Zap.

Enjoy
__________
 |im |yler  The Mandala Centre - tt@cryogen.com - http://www.mandala.co.uk
