Introduction
************

One of the oldest and, perhaps, most used X utilities is the ubiquitous
`xterm' program.  An indispensible part of the "X Window
System", it is nonetheless showing its age.  Due largely to creeping
featurism and the somewhat strenuous process of being ported to a number
of varied and idiosyncratic platforms, the `xterm' source has also
reached a state where further extension and maintainance has become
a non-trivial exercise.

Almost two years ago, we faced the choice of either further extending
`xterm' or starting over from scratch.  After a long evaluation,
we came to the conclusion that further attempts to modify `xterm'
would benefit neither us or the X community at large.

About 18 months ago, we suddenly had a need for a feature that
`xterm' did not have.  `Ah,' said we.  `Should be easy
to add it in.' We looked at the code.  We looked away again hastily.
Clearly, even lint could not save this code; it was one enormous ball of
fur.

Combining our altruistic impulses with a genuine need for a VT220
compliant `xterm' (`Can you make the cursor blink in
`xterm'?' said our database people.  `We can't find the
cursor in our inverted text! We need blinking text too! Argh!'), we then
set out to completely rewrite `xterm' from scratch.  Using some of
the lessons learned from the original `xterm' (design vs creeping
mutation) and taking full advantage of having a nice toolkit to work
with (something, to be fair, the original designers did not have), we
managed to add many new features without significantly exceeding the
size of the old `xterm' program.  We were also able to use the
toolkit's widget mechanism almost exclusively as a framework, a major
win in and of itself.

A secondary, but by no means trivial, design goal was to release not so
much `an `xterm' done right' but also a set of tools with
which users could go well beyond what is initially offered here.  Given
that the needs of users are many and varied, we focused more on
providing a logical and portable framework than on providing a
single-purpose canned solution.  Using this system, users can easily add
custom terminal emulators, display `canvases', menus and other
`decorations' using either an `Athena' or `Motif'
*look and feel* as desired.  Application writers will also now find
it quite simple to use a "slave" `xterm' from a larger
application; one simply creates a couple of widgets and takes advantage
of the hooks provided for getting at the incoming and outgoing data
streams.  A number of programmers accustomed to fighting with the old
`xterm''s *slave mode* should now find life much easier.  Like
the `X Toolkit' itself, we have attempted to provide mechanism, not
policy, wherever possible.

The end result, after almost 2 man years of work, is something both
simpler and more complicated than the original `xterm'.  As we were
stuck for a really clever name, we decided to call it "emu", which
is short for emu-lator.  Whether or not the code makes one think of
large, hairy, flightless birds is purely a subjective issue and we
refuse to touch it.

Being the kind souls that we are, we present this code free of charge to
the X user community for their collective enjoyment and/or amusement.
Caveat Emptor.
