
    Recent History of XDME (by Aaron Digulla)
    ----------------------------------------

This file was done by hand and is a bit disturbed. I changed the
format of history between V1.46 and V1.50. Sorry.

There are the following differences between the original DME V1.45 and
this Version 1.46 :

File main.c:

     Added Support for req.library in main (). The additions do open and
     close the lib and take care for PurgeFiles() before exit.

     Done some work on RAWKEY-Messages. Now XDME will not hang behind
     RAWKEY-Messages which sometimes cause XDME to go (almost) infinitely.
     Now all RAWKEY-Messages with IEQUALIFIER_REPEAT are removed, before
     XDME starts over with MSG-processing.

File afilereq.a:

     This file is now obsolete and has been removed.

File filereq.c:

     Now XDME remebers its last PATH and starts with a complete PATH !

     This file was copied from another XDME-Update by someone called TJM.
     Unfortunately the LHA-File was corrupt but I could extract this one and
     I immediately included it. It supports ASL- (OS2.0), ReqTools- (FISH) or
     Arp-Library (also FISH) for File-Requesters. This file is mostly from
     TJM.

     The commands are still

	arpload
	arpsave
	arpinsfile
	barpsave
	arpfont

     but will open an ASL-, ReqTools or Arp-Filerequester (in that order), i.e.
     if you don't have ASL (e.g. OS1.3), you will get a ReqTools-Requester.
     If that ain't working you'll get a standard Arp-Requester.

File cmd1.c:

     Made XDME check if it can go one page up. Avoids anoying flicker at the
     top of the text.

     Also, I modified (enhaced) text_sync() and text_displayseg(). Both now
     go faster.

     Goto will fail, if block is undefined.

File cmd2.c:

     The scanf-routine has been GREATLY enhaved !!! The following is now
     available:

	  scanf type

     type is one of :

	  %s - like c-scanf
	  %[] - dito, but '~' equals '^' ('^' is XDMEs ESCAPE-char !)

     the follwing types have been added. Any of these takes an additional
     '+' as precedence. This means, that the whole thing is grabbed. (e.g.:
     l will get the line from the cursor to its end, +l will get the WHOLE
     line !)

	  l    - line
	  w    - word (everything between two whitespaces)
	  n    - number (all digits)
	  b    - anything that fits into isalnum()
	  r    - remark. Begins at "/*" or cursor until "*/" or line-end
	  c    - one char ('+' is useless)
	  t    - like l, but will get only text, i.e. without preceding and
		 trailing spaces.
	  a    - anything that fits into isalpha()


     Also, I did some work on IF(ELSE) and WHILE. There is a new condition:

     IF
     IFELSE
     WHILE

	  c[<=>]"x
	  block

     Which means, that c is compared with the char 'x'. I had to use '"'
     instead of '\'', because '\'' is already a special char for XDME and
     I didn't want the user to do that much escaping.
	  The 'block' will return TRUE, if the cmd block will fail (i.e.
     `if bl unblock block' will ALWAYS work !).

File command.c:

     We have some new command:

     barpsave  - save a block via a FileRequester.
     n <cmd>   - repeat <cmd> n times

     Furthermore I removed the STRTOLOWER-loop since XDME expects all its
     commands in lowercase. This will speed up things.

File cmd4.c:

     This file will contain all NEW commands.

     INDENT range how	 - Do indent lines
	  range :   .	   - actual line
		    [0-9]* - Line-Number
		    $[0-9] - Ping-Marker #
		    bs	   - block start
		    be	   - block end
		    b	   - whole block
		    _	   - last line
		    t	   - whole text

	       Examples :

		    1,bs      - from line 1 to the block start (both included)
		    1,_       - all lines
		    15,be     - from line 15 to the end of the block
		    .,_       - from current to EOF


	  how :     '-'       - move line left (instead of right)
		    '.'       - Align to a multiple instead of just inserting
				(deleting) `indent' spaces.
		    't'       - `indent' = size of the tabs
		    [0-9]     - `indent' = n chars
		    'c'       - start at current column (insead of column 1)

	  INDENT takes care, that no chars are pushed over the borders to the
	  left (1. column) or right (column 255) ! If chars would be lost, the lines
	  are only moved as far as possible in the desired direction.

	  Example: INDENT 1,_ -255	will make the whole text left-aligned
		   INDENT 1,_ 255		    -""-         right-aligned


     rudimentary CharBlocks. Not worth to mention it.

     left/right scrolling to complete the scrolling abilities.
     SCROLLLEFT     - scroll 1 char to the left
     SCROLLRIGHT    - scroll 1 char to the right
     INSLINES n     - inserts n lines


File *.c:

     I did some work on allocb (). Now, if the length of the requested line
     is 1 or less, a static pointer will be returned. So we will not have
     any empty memory blocks any more. (Can you imagine what EXEC will do
     with MANY 8-Byte blocks allocated and freed in random order ??).
     Furthermore, I did change all the FreeMem (line, strlen(line)+1)-calls
     to a routine freeline (line), which takes care for a correct freeing
     of the specified line.

     Another good idea might be to check the true line length (8-Byte aligned)
     and to try to push the new one into the old one.

     Furthermore I did optimize many routines. Always remember : One
     Gfx-Operation takes more time than 8 if()s ! Also loops were optimized
     and more ...

     Also line-handling has been changed. Now XDME uses much more
     object-oriented line-handling (i.e. allocline, alloclptr, freeline).
     In future, there is a chance that XDME will support folding and more
     ...


Differences between V1.46 and V1.50:

     - Scrolls FASTER again ...
     - added the following :

	  n <cmd>     - works like "repeat n <cmd>"
	  delines n   - deletes n lines
	  projectsave - Saves all current windows of XDME with filename and
			position
	  projectload - loads them again
	  projectinfo - AREXX-ONLY ! Returns the info for the current
			window (filename, position, iconpos)
	  select what - Makes another window the actual window. All following
			commands work now on this window !

			what is one of :

			    first
			    last
			    next
			    previous
			    window=<window_name>    Select window with that
						    name
			    save		    Remember actual window.
						    There is no stacking !
			    load		    Return to the last saved
						    window
	  delete      - Delete to next space

     - deleting now works again (display was NOT correctly updated in
       V1.46). Gulp.
     - XDME has now a working AREXX-PORT !!!!!!!!!!!!!!!!!!
       You can now send all XDME-Commands to XDMEs port "XDME.#" where #
       is the number of the XDME (usually 1)
     - Correct loading of lines > 255 chars.

Differences between V1.50 and V1.51:

     - added:

	  match     - Looks for the matching paren. Recognises (), {}, []
		      Ideal for checking paren-errors
	  taskpri n - Sets the taskpri of XDME to n, -5 < n < 5

     - removed some errors in scanf. This should work now !

Differences between V1.51 and V1.53g:

    - Search&Replay if FAAAAAAAST now. Needs only ~1s (vanilla Amiga) for
      "Pattern not found" in cmd2.c
    - Many memory-bugs (introduced by me) removed. Ooops.
    - Better memory-handling. XDME now handles memory better (less
      fragmentation).
    - Several Speed-Ups.
    - General reformating of source and more logical construction of source,
      i.e. all routines are now found in the file where they're prototyped.
      Furthermore many bugs and wrong declarations removed. Better local
      variables and many other things.
    - Supports CLIPBOARD !!! WHOW ! (Only rudimentary yet, sigh.)

Differencies between V1.53g and V1.54:

    - Blocks are now VISIBLE (background).
    - added:
	clipins     - Insert actual contents of clipboard. Works with ConClip,
		      Snap and the like.
	arpfont     - FontRequester
	quitall     - Close ALL XDME windows and leave XDME.
    - Replaced most SetXPen's by DEFINES
    - Changed tomouse(). XDME will now scroll to mouse-pointer if left button
      is held down near a border.
    - Some changes in TOGGLEs including bug-remove from IF toggle ... (Ooops)
    - Received a copy of TJM_DME, a DME-Update by Thomas J. Moore. I used
      the following things from him:

	filereq.c: Most things got changed. XDME now supports ASL-, REQTOOLS-
		   and ARP-FileRequesters. You may also request a font via
		   requester (uuaah, what a sentence).
	PropGadget: Support for a proportional gadget.
	*appendsave: Append a block/the file to a diskfile
	sizewindow: resize and move window
    - SELECT now activates the selected window via ActivateWindow().
    - Removed a bug in menu_strip(). This routine cleared the WFLG_RMBTRAP
      for iconified windows which made it a bit difficult to de-iconify them.

Differencies between V1.54 and V1.55 (Pre-Release):

    - introduced IMakefile
    - New windows are now AddTail'ed instead of AddHead'ed.
    - New commands:

	DEBUG what  - Sets an internal flag for debugging on/off. Usefull for
		      Debugging small routines.
	PATTERN pat - Set pattern for filerequester

    - If you don't start XDME with -n, XDME will look for an ARexx-Port XDME.1
      and make this XDME load'n'display the new files.
    - XDME now accepts the following CMD-Line options:

	-n	- Don't care for any oth XDME hanging around. Start a NEW one.
	-i	- Iconify all new windows.
	-f file - Read local "file" instead of ".edrc". S:.edrc is unaffected
		  by this.

    - Began to split source into logical parts (i.e. all blockops into block.c)
    - You can scroll via MOUSE now. Just click near a border. Clicking near an
      edge will also work, but looks a bit strange.
    - New s:.edrc which follows more the styleguide
    - XDME will no longer save files named "unnamed".
    - Inceased the size for file- and dirnames to 108/256 bytes.
    - Changed TLATE. it will now accept DEC-, OCT- and HEX-numbers.
    - New modes for IF:

	if c="hello" ..     - TRUE, if the cursor is on the 'h' of "hello"
			      You can write any string between the '"', but
			      beware of spaces ! If the string contains
			      spaces, you must put it in XDME's parentheses.
	if `c=[. A-Z]'      - TRUE, if cursor is on '.', space or an uppercase
			      letter.


Differencies between V1.55 and V1.55b (Release):

    Comment: I incorporate all bug-fixes from V1.55 in this release.

    - Fixed a bug that caused DME to crash if you did
      "run xdme xdme_project_file" if there was no project-file. Ooops.
      Fixed a bug with char-codes > 127 and the ASCII-Value-display.
      This used to result in a 32bit value (i.e. ffffffe4). Thanks to
      Tero Turtiainen for this bug-report.
    - REMOVED THAT DAMN BUG IN SEARCH ! YEAH !!
    - New .edrc & keymappings that follow the StyleGuide !
    - New commands:

	pageleft	    - "page" left: If not at the far left, go to
			      the beginning of the line or the left border of
			      the window, whichever comes first. If already at
			      the left border, scroll one windowfull to the
			      left.
	pageright	    - Dito, only to the right.

V1.55.03:
    - Bug: XDME didn't release its Port (DeletePort()). This caused a loss
      of 40 bytes each time XDME was invoked :-( FIXED !
    - XDME has now a sub-release-number !

V1.55.04:
    - BUG: a bug in text_sync() made XDME ignore a NULL-byte at the end
      of the line. All appended text would be IGNORED! =8*O FIXED !! (phew ..)
    - BUG: XDME used to ignore the settings from S:.edrc for all but the last
      window. This should have been gone. :-/
    - You can get the settings of ANY key via $keyspec ! Example:

	$A-o -> arpload

      This works like all other variables.
    - Due to public request I added the support for PublicScreens. Invoke
      XDME with "-ps <name>". NOTE: you can open XDME-windows on more than
      one Screen, if you call it a second time with "-n -ps <other_name>"
      but you have to take care that you don't loose overview. If you
      call it without "-n", the "-ps" will be ignored. Tell me, if you
      take this for a bug !
    - New function:

	error(char * fmt, ...)      Display an Error-Requester with
				    printf()-style formatstring.
    - Changed getyn() use EasyRequest() if possible.
    - QUIT and QUITALL will inquire if the file has not yet been saved !
      Now you can quit WITHOUT saving, quit WITH saving and CANCEL the quit.
    - SAVEOLD will query for a file-name if the file is still "unnamed".
    - it is no longer possible to save a file named "unnamed".
    - XDME produces some enforcer hits. I fixed a bug, but I'm not sure
      whether they have gone. Some who can run enforcer should test XDME
      extensively. Thank you !
    - XDME no longer scrolls when u click near a border. This has gone due
      to public request. Now you can scroll via the scroll-bar on the left.
      XDME will follow when you pick&drag.

V1.55.05

    - removed forgotten printf() in toggle-support
    - Removed bug in uniconify(). This used to draw an anoying 2nd cursor
      when you uniconified XDME e.g. via a cursor-key.
    - error() will set Abortcommand now.
    - XDME is now compiled with -mRR
    - bug in block_ok() removed. This had impact on BSAVE, IF bl and some more

V1.55.06

    - XDME uses now SetWrMsk while scroll. This saves quite some time when
      on a deep screen (more that 1 bitplane :-). Make sure you use a FGPEN
      that is a power of 2 ! On a VERY deep screen, XDME is still AWFULLY slow
      :-( I'm working on this.
    - The cursor was sometimes lost when a long command-line was displayed.
      This command-line was also drawn over the window-border. This has been
      fixed long ago, but I forgot to mention it :-)
    - Sometimes XDME didn't follow the PropGadget. This was especially true,
      when one did click outside the knob. This has been fixed.
    - When one inserted text via CLIPINS or middle-mousebutton, and XDME had
      to scroll (i.e. the text get beyond the right window-border) the cursor
      disapeared.
    - XDME used to crash when QUITALL was selected and there was more than
      one window open. FIXED !
    - XDME asked for a file <pubscreenname> when invoked via "-ps <psname>".
      FIXED !

V1.55.07

    - Checked XDME with SAS/C 6.0 for errors. Found and fixed some. XDME
      should now compile with SAS/C and DICE.
    - Did some work on blocks. New commands:

	BSTART	    - Specify start of block
	BEND	    - Specify end of block
		In both cases the other end of the block must already have been
		specified.

    - Again did some work on SetWrMsk(). XDME .06 used wrong colors for blocks
      and cursor on screens with other than 2 bitplanes.
    - Fixed a bug in QUITALL. again :-)
    - When clicking near the left border, XDME jumped left. FIXED
    - Variables have changed. XDME now uses the following vars to identify
      the file, path and currentdir:

      $filename 	- full path with filename (i.e. "s:.edrc")
      $path		- path only ("s:"). Path is delimited with ':' or '/'
      $file		- filename only (".edrc")
      $currentdir	- the current dir of XDME ("dice:source/XDME/")

      This allows easy AREXX-access of the file :-) To get a result via AREXX
      use

	RXRESULT <any>	- this will copy <any> to RESULT in an AREXX-script:

			    OPTIONS RESULTS

			    address 'XDME.1'

			    'rxresult $filename'

			    say 'The actual filename is' RESULT

    - a bug in drexx.c has been fixed that prevented obtaining of a RESULT-
      string in AREXX.
    - Some bugs concerning the placement of windows have been fixed. XDME used
      to ignore the position of windows when using SAVECONFIG, PROJECTSAVE or
      PROJECTINFO. Now XDME checks for the actual position and size BEFORE
      saveing the stuff. You can also set the position of a filerequester
      (at least the ASL-requester) by dragging and sizing it and clicking on
      "Cancel". To save this position use SAVECONFIG.
    - Added my EMail-address to the version-info ... just in case you forget
      it :-)
    - Reorgranised the structure of the XDME-directory.

V1.55.08

    - Removed Debugging-output in PropGradget-Handling. (Left over from
      V1.55.06)
    - Fixed a hidden bug in mods.c:do_pong. The if was always TRUE due to
      the type of pong.
    - Bug in main() fixed which caused XDME to block if there was more than
      one file in XDME_Project_File AND XDME was invoced with XDME_Project_File
    - Did some work in command.c. All commands have been checked whether they
      should uniconify XDME. Now all SAVEcmds and settings don't deiconify,
      all commands that CHANGE something VISIBLE deiconify ! If you find
      something that is wrong in your eyes, tell me !
    - Removed a buffer of 256 bytes in drexx.c

V1.55.09

    - Format of drexx.c adjusted
    - Iconified XDME is no long active because I think that's not usefull.
      You iconify a window to work on another, no ?
    - Another place where the placement of windows is used has been fixed.
      if you rearrange the last XDME-icon and open another XDME, the window
      was opened where it would have been, if you DIDN'T move the other icon.
      Now it's adjusted to the ACTUAL position of the last window.
    - XDME now sets the cursor BELOW the block after BCOPY and BMOVE
    - XDME unneccessarily redrawed the screen afetr BCOPY. Now copying blocks
      is great :-) no more flicker !
    - var.c created. contains all stuff for variables.
    - edit.c created. contains all stuff for editing like DEL, BS, DELINE,
      INDENT, etc.
    - cmd.c created. contains all stuff for programming and logic, i.e.
      IF, IFELSE, REPEAT, WHILE.
    - win.c created. All window-related stuff
    - prefs.c created. All settings-stuff.
    - contents of mods.c moved into subs.c, cursor.c, block.c
    - cleaned up some unneeded Prototypes and moved some functions to more
      suitable places.
    - Fixed SWAPMARK. I suppose nobody used this one ever. It was TOTALLY
      broken !
    - moved all stuff from cmd3.c and cmd4.c to cmd1.c. cmd3.c and cmd4.c
      have been deleted.
    - moved some last functions from cmd2.c to cmd1.c and renamed cmd2.c as
      io.c. Now the sources are mostly cleaned up.
    - BMOVE now sets the cursor in the first line AFTER the block when it was
      inside.
    - all functions inside cmd1.c were moved in the appropriate files. cmd1.c
      was deleted. Now the source should be cleaned up ! Whow ! :-)
    - Removed a BIG bug in unset(). There were two accesses in a freed var-
      struct ! Now all constructs of the type IF x=$var work :-) Phew !
    - All variables in XDME are now caseINsensitive like the ENV-vars.
    - moved names of internal variables into the structure. This saves
      some memory.
    - The format of the XDME_Project_file has changed. You need not to delete
      the old ones :-) XDME now also remembers the last line the cursor was
      in !
    - XDME -i now iconifies all new windows :-)
    - the path and file in XDME_Project_File are now enclosed in '"'. Also
      PROJECTLOAD now checks for '"' before the path and file. This allows
      blanks in the path or file (ie. "Ram Disk:")
    - new function warn(char * fmt, ...). like error(), but just displays
      text in the title.
    - do_edit (NEWFILE) and search now use warn() instead of error().
    - Visited all error()-calls. All errors are now displayed in a equal form
      with the command that failed in the first line and the error-text below.
    - New commands:

	PUBSCREEN name	    - open next window on screen "name". Use an
			      empty string to turn off (ie. "pubscreen `'")
	GLOBAL what	    - turn global search on/off
	PUSH item	    - Push an item on the stack
	POP item	    - Pop something from the stack and store it in
			      item. The special item AUTO stores the thing
			      back where it was taken from.
	GLOBAL what	    - turn GLOBAL SEARCH on/off. if on, XDME searches
			      from the actual window through all following.
			      This depends on the sequence the windows were
			      opened !

    - You can temporarily store items on stack. These item are

	- settings of XDME
	    POS 	- actual cursor position (like PING)
	    MODIFIED	- modified flag
	    ICONMODE	- iconify-state (!! DO NOT USE !!)
	    TABSTOP	- tab-size
	    SAVETABS	- Should I convert spaces to tabs ?
	    MARGIN	- right margin
	    INSERTMODE	- obvious :-)
	    IGNORECASE	- for search
	    WORDWRAP	- word-wrapping on/off
	    WWCOL	- col. of wordwrap
	    WINDOW	- position and size of window
	    ICON	- position of icon
	    PENS	- all four pens
	    BLOCK	- like PUSH-/POPMARK
	    ED		- actual window. Like SELECT SAVE, but can be nested
	    AUTO	- POP only ! This automatically put the topmost
			  thing from stack to its original place.
	    DISCARD	- POP only ! Discards the topmost item from the stack.

      This can be used for printing:

	    push savetabs	; Remember SAVETABS and MODIFIED
	    push modified
	    savetabs off	; Don't replace spaces by tabs
	    saveas prt: 	; write to printer
	    pull auto		; restore old state of MODIFIED and
	    pull auto		; SAVETABS

      If you see or want something not in here, tell me !

Differencies between V1.55.09 and V1.60 (Release):

    - Bug in INDENT removed. INDENT used 256 bytes for indent, but the last
      byte is used by the '\0'. Ooops :-)
    - MAX_FONT_SIZE defined in all.h. This defines the max. pixelsize of a
      font a user may use. 64 might be enough, no ?
    - MAX_STACK_SIZE defines how many items can there be on the stack. Set to
      64. Should suffice. Maybe I implement dynamic stacking. Should be easy
      enough ...
    - SETFONT now accepts the fontname without the ".font" extension, ie.
      `setfont topaz 11' will load "topaz.font" with a size of 11 pixels.
      `setfont topaz.font 11' too :-)
    - Fixed a bug in uninit_init() which caused XDME to copy the last used
      font, but not USE it. Now XDME uses the last specified font in all
      new windows.
    - Added check_stack(). This routine clears the internal stack in case
      an editor is closed and/or XDME exits.
    - New commands:

	PICK item   - like POP, but doesn't remove the topmost element from
		      stack !
	SWAP item   - exchange the topmost item on stack with the actual
		      item

    - Removed a bug in main() which caused XDME to hang, if it wasn't called
      with at least one file. This was a good example for deadlocking with
      only ONE task :-) WHOW !
    - New nice WB-Icon for XDME and it's drawer
    - Fixed a bug in the startup-code from WB. XDME used to crash if invoked
      via WB with some files selected. FIXED
    - Forgot to update version :-)
    - removed SWAPMARK, PUSHMARK, POPMARK because they are obsolete !
    - Added the Macros-directory. I'll put some tools/scripts in there.

V1.60.01

    - removed a bug in main() which caused a FreeMem() with a size of NULL.
      It seems as if DICE doesn't complain about unknown structs in SIZEOF.
    - removed an OLD bug in keyboard.c. The mapping for the brackets on the
      numeric-pad is now nk[ and nk] instead of the wrong nk( and nk).
    - moved do_return() from do_cursor() to do_edit()
    - removed a bug in MATCH. Upto now, match would produce NEGATIVE line-
      numbers if it couldn't find and matching parens before your current
      position. Also it won't move the cursor anymore, if was unable to
      find a matching paren and shows a warning in the headline.
    - Size of stack is no longer FIXED, ie. the stack grows if you push
      many items and doesn't exist at all, you don't do so !
    - Removed support for ARP.LIBRARY.
    - XDME now asks for ASL- or ReqTools-library.
    - Fixed an enforcer-hit in do_command() which only occurred if you
      started XDME with a project-file for the first time. (do_command()
      was called while there was no ED yet)
    - XDME now displays an error-dialog, if it was started via WB and there
      were some error(s).
    - fixed a bug that still was in setfont(). Setfont now accepts names
      with and without the prefix ".font"
    - geoskip() can now read parameters that contain spaces
    - did some work on BSTART and BEND. Now only the portion that changed
      is redrawn. Also, if you make the block smaller, this is updated
      correctly.
    - The iconified XDME-window has now a depth-gadget.

-------------------------------------------------------------------------------

			       !!! IMPORTANT !!!

-------------------------------------------------------------------------------

		!! This is the last release under OS1.3 !!

	   (Though this one has already been compiled with -2.0)

-------------------------------------------------------------------------------

KNOWN BUGS

    - Under OS39, the window-title is drawn only partially when XDME calls
      SetWindowTitle(). This is nice feature, but in terms of XDME the XDME-
      title isn't overwritten. This just looks a bit ugly.
    - XDME still has some problems in handling memory. I was reported of
      unchecked AllocMem()s and malloc()s. Also XDME will surely crash if you
      e.g. produce too many lines (i.e. "top block bottom block downadd
      repeat -1 bcopy" will crash XDME).
    - If you load a file in another directory and select PROJECTSAVE in this
      window, the XDME_Project_File is written to that directory. This is not
      actually a bug, but may cause confusion.
    - POP ICONMODE crashes XDME !!

TODO
    (Lines near the top are more likely to come or better: they will be
    realized sooner ...)

    - check for changes in window_title() instead of doing Text() every time.
      Maybe I move the status-line from the title-bar down one line.
    - Add a special option which specifies the name of the project-file
    - Use ParseTemplate() instead of ops().
    - Asynchronous ARexx-commands
    - I'll do some work on the line-concept of XDME (see all.h:LINE) to
      allow lines of upto 64k length and some other things.
    - Other variable concept in XDME (i.e. access of ALL variables via
      get_var(). Also easier add of new variables).
    - The scrollbar needs arrows.
    - Documentation of XDME. The current docs are HORRIBLE ! What about
      XDME.guide ?
    - Better handling of '\' in mappings i.e. (map f1 `scanf w ... `...
      `... `\$scanf ...''') will replace the contents of $scanf lately not
      early.
    - Other Search&Replace. First position cursor, ask to replace, and
      search next.
    - ARexx (ARexx as defined in Amiga Styleguide).
    - Specify the amount XDME should scroll, when cursor leaves window.
    - Folding. Here we will need to save an extra file or find something
      that we can include in any file or ???? I tend now to the "pattern"
      solution, i.e. ony can specify a FOLD-START and a FOLD-END pattern.
    - Multicolumn (incl. vertical blocks)
    - better Autosplit (automatic splitting of too-long lines WITHOUT
      reformat !)
    - Sorting of lines (alphabetically and reverse)
    - inline-calculator for complex expressions (i.e. `goto lines-8*16')
    - for-loops (for var=start:stop[+-]step cmds)
    - other variable concept (i.e. int-, float- or string-vars)
    - own screen for XDME (optional of course)
    - menus with submenues
    - macros
    - better keymapping with recorder. The recorder must do this:

	- start recording. Display the new state in the headline
	- add strings to the macro
	- allow the following actions:

	    enter keys, commands in the commandline, change windows

	- map the macro to a key through a simple key-press

    - better GUI (graphical user interface), e.g. Search&Replace-Requester,
      ...)
    - templates (i.e. fill-in-sheets)
    - Char-Blocks (incl. Mouse-selection): cut, copy, paste, move, etc.
	 CBLOCK RECT CUT COPY PASTE MOVE
    - Every requester has to get it's own filename and dirname.
    - Copy output of a programm into text (i.e. "dir")
    - precompilation of commands for faster programs
    - real programming language (maybe C-interpreter)
    - Support of XPK-lib
    - general optimization of several routines
    - more and more cmds !
    - and so on ...

FUTURE

    1. When I get how Obj-Hunks work, I will implement ONLINE-LOADING of
       Amiga-Obj-Hunks. This will enable you to write e.g your own
       TextDisplay-routine which handles e.g. bold and italics. You may
       be able to introduce own commands without changing DME in any way !
    2. Maybe there will be a DME.library which allows to handle TextFields
       like string-gadgets but with full text in two dimensions.
    3. DME V2.00 will be full Amiga-Style-Guide compatible. I strongly expect
       that none of the pre-2.0 commands/things will work under V2.00.
       I do try not to mess everything up but will not hesitate to do so, if
       that make DME more stright-foreward. Sorry.
	    Also V2.00 will only work with KS2.0 and beyond. This will make
       DME much smaller and much more powerfull. Also most of the TODOs will
       only come in V2.00.
    4. I have a X11-Version (UNIX) of DME. This version is quite old and
       misses most features of XDME. Is had most things of DME though. I'm
       thinking of doing some work on XDME to be able to compile it under
       UNIX. :-)

