
   DirMenu history:
   ----------------


0.00	July 1992
	Stored the whole HD directory tree as a file
	and loaded it each time it was run. To update
	the tree, had to delete the file and run again.
	A bit crap, but I used it every day for
	months, and it saved a lot of time!

1.00	May 1993
	Having seen !QuickDir by Clive Jones, I decided
	to provide menu-making on the fly as well, so
	the menu tree was always up-to-date. Also
	converted to DeskLib, which is superb.
	Added the configuable root menu featue.

1.10	May 5 1993
	Now displays icons in the menus. Discovered 
	that the Wimp sends a message with action code
	0x400c9 when a menu is removed without a 
	selection being made (e.g. a click off the 
	menu). This is used to release all claims on 
	further messages, which are detected when the 
	menu is open in order to create new sub-menus
	when MENU_WARNING messages are sent by the WIMP.

1.20	May 12 1993 ** First release **
	Added the Info/Quit menu.
	The Info box is my first ever dialogue box, 
	and I don't know how to make it moveable like 
	all other dialogue boxes I've seen.

1.21	May 24 1993
	Added the options to open the root menu on the
	left hand side of the screen, as suggested by
	Kai Schlichting.
	Fixed a minor bug which resulted in a garbled
	title bar of the submenu of a '@' root item.
	I've now read the comp.sys.acorn Application 
	Writer's Guide, so there is now no !Boot file,
	and I've found out how to make the Info window 
	movable (process event_OPEN events).
	
1.30	** Second release **
	Added Help to normal menu. 
	Added 'Edit Configs' and 'Update' to normal menu.
	These do a poor-man's implementation of a proper
	dialogue-box configuration setter/saver. If I
	had more time... Actually, you shouldn't want to 
	change the configs very often, so this method 
	isn't too bad.
	Changed the template file so that the program
	fills in the version/date when it is run.

1.31	Looks for File_0fb instead of File_fb, when
	searching for a file-type sprite when the file-
	-type is < &100.

1.32	Compiled without function names in code, to
	make it slightly smaller.
	
1.40	20 June 1993
	Can have multiple icons on the icon-bar, with 
	independent root menus.
	
1.41	Can have text under the icons.

1.42	28 June 1993
	If a directory has bit 6 of its Access atributes 
	set, !DirMenu now displays it as an application 
	(i.e. looks for a wimp sprite with same name).
	This is for compatability with FilerPatch, by
	Jens Ovesen.

1.43	4 July 1993
	The WIMP doesn't seem to invert text+sprite 
	icons in the same way as normal icons in menus, 
	so I've padded all items with spaces, making 
	highlighted icons in the menu easier to see.

2.00	11 July 1993
	Now creates a menu for Filer windows, like
	!QuickDir.
	This is done by ataching a filter to the Filer
	which sends !DirMenu an event_CLICK when 
	Alt-Menu is clicked on a filer window.
	
2.10	13 July 1993
	Opens a menu when there is a menu-click on the 
	filer window title bar. I think this is a lot
	more convenient than going to the keyboard to
	press <Alt>. 
	Couldn't use a filter for this because menu-clicks 
	on title bars don't seem to be passed on to apps 
	by the Wimp. Hence had to make a module which 
	claims OS (not Wimp) mouse button events, and 
	sends event_CLICK's to DirMenu.
	
	
2.11	13 July 1993
	Opens a Filer-window menu for both cases - menu
	on title bar, and alt-menu on workarea.
	!MakeMod makes a single module which acts as a
	filter on the Filer, and also catches mouse
	events.
	Couldn't use mouse-event-detector for the Alt-Menu 
	case because the filer would flash open its menu 
	just before DirMenu opens its menu. 
	!RunImage runs the Basic prog '!MakeMod' after it 
	has initialised as a task. !MakeMod then 
	assembles the module, called DirMenuMouse, 
	assembling in the Filer and DirMenu task_handles.
	When DirMenu is quit, it RMKill's the module.
	Assembling a module every time DirMenu is run
	is a bit clumsy, but I am a new-comer to ARM
	assembler, so a module that actively finds the 
	relevant task handles (like in !QuickDir) is a bit 
	too advanced for me. My method makes for a smaller 
	module anyway, and anyway Acorn have gone to the 
	trouble of including an assembler on every machine, 
	so I might as well take advantage of it!
	
	I don't know of any way of preventing the Wimp from 
	seeing a mouse click. This caused a few problems 
	when making DirMenu respond to non-Wimp events from
	the module. Any suggestions ?

2.20	14 July 1993
	Uses a simple Wimp_Poll loop instead of DeskLib's
	Event_ functions, which are a bit of a luxury in 
	such a simple program. This makes !RunImage nearly 
	5k smaller. However, it still can't fit into a 32k 
	wimpslot.

2.21	18 July 1993 *** third release ***
	Can set DirMenu to expand all system variables in 
	file-paths prior to Filer_Run-ing them. This is 
	for when iconbar icons are specified to use 
	system variables such as <Wimp$ScrapDir> or @. It 
	makes file/application windows contain the full 
	path name of the files that are clicked on. This 
	just uses SWI "OS_FSControl" with r0=37.

2.22    27 July 1993
	Oh dear! The click-on-Filer-titlebar thing seems to
	be a bit wobbly. Changes:

	1. Detects true menu button click i.e. buttons 
	   000 -> 010, rather than xxx -> y1y.
	   
	2. When opening a Filer-window menu, the main 
	   program now rechecks that the pointer is over a 
	   titlebar, as a drag closely followed by a menu 
	   click on a workarea seem to result in 
	   Wimp_GetPointerInfo returning the poition of the 
	   start of the drag i.e. a titlebar. This resulted
	   in spurious menu opening sometimes.
	   Unfortunately, if you now move the pointer away 
	   from a titlebar very quickly after clicking menu, 
	   this modification may mean that DirMenu won't 
	   open a menu.
	   
	3. In !MakeMod, changed SWI calls to have 'X' bit 
	   set, and return if the SWI signals an error. 
	   The normal OS default error handling can give a 
	   horrid crash when using MemFS's non-multitasking 
	   'free' window. I don't think this is my fault, 
	   as the OS error handling should cope with errors, 
	   and the SWI was Wimp_GetPointerInfo - hardly a 
	   complicated system-altering one. There was no 
	   problem with other non-multitasking windows.

	Thanks to Kai Schlichting for noticing these problems.


Can anybody tell me why a 20K program needs more 
than a 32k wimpslot to run?

