This is the upgrade of Archimedes Emacs to release 3.11 (beta).

This port was implemented by

Paul Moore,
10, Mulberry Rise,
Firdale Park,
Northwich,
Cheshire
CW8 4UQ

E-Mail: pmoore@cix.compulink.co.uk

Thanks go to the original author(s) of MicroEMACS, for writing the
program in such a manner as to make porting a simple, and positively
pleasant, task!

Note: Documentation has not been included, as the Emacs 3.11 (beta)
      documentation is not fully complete yet. The same applies to the
      command files. Either the 3.10e or the 3.11 (beta) files as
      distributed are the best that is available yet.

Outstanding Issues
==================

1. In order to allow the use (or redefinition) of any combination of
   keypresses, the program claims the keypress event and the keyboard
   buffer insert vector, to trap all key depressions, and return unique
   codes. The program will handle the ALT key, allowing the use of ALT-key
   combinations within EMACS, provided the InternationalKeyboard module is
   killed. This is because InternationalKeyboard installs itself as a
   keyboard handler, and intercepts all keypresses before anything else
   can get at them (even before the "key pressed" event!). It is your
   choice - if you want to use InternationalKeyboard, Emacs will work
   perfectly well, just without the ALT-key combinations. If you kill
   InternationalKeyboard, you can use ALT-keys, but you cannot use the ALT
   functions provided by the international module. (I, personally, now
   have the international module permanently unplugged in my machine...)

   At present, there are still odd occasions when the handler gets
   confused, particularly about the state of the shift, control and ALT
   keys. This is (probably) because the event handler is switched off
   when OS commands are being run, and during this period Emacs cannot
   keep track of the key status. This problem may be impossible to fully
   solve. For now, if this occurs, try running an OS command (^XC, then
   Cat, for instance) to allow Emacs to "un-confuse" itself... If this
   fails, save your work and quit, and then restart. I realise that this
   is not wonderful, but the problem is rare and intermittent, and so
   very difficult to track down.

   A similar problem arises if you press two keys in very quick
   succession (notably, delete then a letter key). Sometimes, the first
   key is acted on twice, and the second key ignored. Again, this is a
   known bug, and will be solved as soon as I can work out what the
   problem is!

2. The use of colours. At present, I set the palette on start-up to
   correspond (roughly) to the standard EMACS colours. In particular, the
   standard set of colours (0-7) are black, red, blue, etc. to GREY, with
   colours 8-15 being gray ("light black"), light red, light blue, to
   white. Playing with the palette like this is not ideal, as I do not
   reset it later. So I may change this. But I would like to keep
   compatible, so that colour LBLUE (for instance) actually meant
   something. Maybe I'll add a couple of new environment variables, $fgcol
   and $bgcol, which give access to the full colour range (for 256-colour
   modes, for instance). On that note, $palette is not yet implemented.
   It's not at all difficult, I'm just lazy... (besides, if I waited until
   everything was done, this would never get released).

3. I haven't yet checked all the supplied command files. EmacsRC works
   (mostly), but there are definitely still problems in some of the
   others. Comments/fixes most appreciated.

4. There are some key-combinations available on the Arc, which do not
   fit the standard key names. For example, in addition to TAB and
   SHIFT-TAB, we have CONTROL-TAB, etc. At present I have

	In all cases

	F0 (PRINT)		FN`
	F11			FN-
	F12			FN=

	And the following	Without CONTROL		With CONTROL

	TAB			^I			FN^T	("Tab")
	BS			^H			FN^L	("Left")

   As usual, these can have Alt (A-), Shift (S-), or Control (^) added,
   although the second group have different codes when used with CONTROL
   compared to when used without CONTROL.

   To get the code for any keypress, you can simply type ^X ? followed
   by the key combination. This gives you the key code, and the current
   binding.

   Further specials:

	DELETE		^?		when used alone
			FND		otherwise

	RETURN		^M		when used alone
			^J		when used with SHIFT only
			FNR		in any other combination

	ENTER		^M		when used alone
			^J		when used with SHIFT only
			FNE		in any other combination

   In particular, note that SHIFT-RETURN is ^J (newline-and-indent),
   which retains the current indentation level. This is probably helpful
   when typing in indented text (tables, prorgams when not in CMODE,
   etc).

6. The previous (David Pilling) version of MicroEMACS allowed you to use
   Shift-RETURN to produce a ^M character. This was useful for stripping
   CRs from MS-DOS files, among other uses. This is not yet implemented,
   mainly because I haven't worked out where to put it in the code! I
   may also add the option (the code is already there, in part) to strip
   CRs when a file is read in. At the moment it's a compile time option
   - I'd just need to make it selectable at run-time. As of version
   3.11 (beta), the $lterm variable caters for this. Note: I have
   altered the code which reads a file in, so that $lterm is used both
   for reading and writing. So, to read MS-DOS files, you can do
   "M-X set $lterm ^Q^M^Q^J" (ie CR/LF), then read the file, then "M-X
   set $lterm ^Q^J", to restore the default. Note that the file is not
   flagged as changed simply by setting $lterm. If you want to write the
   converted version, you must first modify the file (eg, insert a
   character, and then delete it again).

7. THE FOLLOWING PARAGRAPH IS CURRENTLY UNTRUE. KEYPAD KEYS ACT AS
   NORMAL NUMERIC KEYS. I have left the following here to remind me to
   have another think about this one...

   At present, the keypad keys are handled a bit strangely. What I
   wanted to do, is to allow numeric arguments (such as "ESC-12") to be
   typed directly (as "12" on the keypad). So the numeric keypad 0-9
   currently act as ESC-0 to ESC-9. Unfortunately, the code to gather a
   numeric argument grabs a SEQUENCE of digits after an ESC, and the
   keypad method looks like ESC-1-ESC-2 instead of ESC-1-2. This will be
   fixed, but it's going to require some messing about, which I haven't
   had time to do yet.

8. Mouse support. Standard EMACS-style support should be fairly easy. A
   full WIMP interface is probably significantly harder, but may be
   possible.


Implementation-specific Details
===============================

1. The environment variable $sres holds the current screen mode. It is
   read-write, so you can change mode within EMACS. All modes are
   supported, including new user-defined modes. Don't expect miracles
   from mode 7, though!

2. The environment variable $cftype holds the file type of the file in
   the current buffer. This is set when the file is read in (default is
   TEXT, for new files), and is used to set the file type on exit. Thus,
   MicroEMACS maintains file types for such things as Obey files.
   $cftype can be set as for any other variable. Suitable values are as
   for *SetType (eg, FFF, Text, Obey, 2_0000100, etc). It can also be
   read, but the value is in decimal, and hence not as readable as it
   might be. I may fix this, if I can figure a way which doesn't break
   anything...

3. MicroEMACS looks for command files, the EmacsRC file, and the help
   file, in the places set up in the source file H.Epath, with the names
   defined in H.Estruct. As the comments state, the current values are
   fairly provisional. At present, we have

	Startup file		EmacsRC
	Help file		EmacsHLP
	Log file		EmacsLOG
	C error parser		Error

   Files are searched for in

	Current directory
	Lib:Emacs.
	Emacs:

   That is, if the file is not in the current directory, it is searched
   for in a directory "Emacs" somewhere along <Lib$Path>, and if not,
   then the file is looked for along <Emacs$Path>.

   Note that EmacsLOG is only used if a compile time option to write all
   commands executed to the log file, is switched on. This is NOT the
   case in the distributed version.

   The C error parser is used in conjunction with the -E flag, and at
   present does NOT work with Acorn C. I may change this to work one
   day, as I could sure use help in sorting out my C code!


I hope you find this program of use. Please report all bugs, and if you
have any ideas for enhancements, let me know. I can't promise to include
them (I'd like to keep as close as possible to the original code, to
allow me to upgrade when new versions come along), but I'll see what I
can do.

Gustav. (Paul Moore)
