Intuition 38.59:

* NEWLOOK TITLEBAR

On aware screens, the title-bar has a nicer appearance.

There are three new pens in the DrawInfo:

BARDETAILPEN - pen to use for details like text in the screen-bar and menus
BARBLOCKPEN - pen to fill the screen-bar and menus with
BARTRIMPEN - pen to use for the trim-line under the screen-bar

The intended colors are:
	BARDETAILPEN & BARTRIMPEN: black
	BARBLOCKPEN: white

These pens default to the old Screen->DetailPen and ->BlockPen, for
compatibility.  However, if you set them when you open your screen,
your titlebar will carry the new appearance.


* NEWLOOK MENUS

Intuition now provides control over the colors used for menu
rendering, and also provides scaling of the Amiga-key and checkmark
symbols.

To request NewLook menus, set the (new) WA_NewLookMenus tag to TRUE.
This instructs Intuition to use the new BARDETAILPEN and BARBLOCKPEN
for rendering the elements of your menus.  (Be sure to use these pens
yourself when you make up your menu items.)

The "sysiclass" image-class can now generate the Amiga-key and
checkmark images.

Per screen, the Amiga-key and checkmark images used will be
appropriately colored and scaled to the screen's font.  (You can find
pointers to their imagery in the DrawInfo structure for that screen).

"sysiclass" recognizes a new tag, SYSIA_ReferenceFont, which you can
use to make a checkmark or Amiga-key appropriately sized for your
chosen font.  You can then use the (V36) WA_CheckMark tag or the new
WA_AmigaKey tag to override the imagery Intuition will use in the
menus.

HIGHCOMP menu items in NewLook menus complement in such a way that
BARDETAILPEN and BARBLOCKPEN are interchanged one with the other.

V38 GadTools will have corresponding changes to make using NewLook
menus trivial (already done, awaiting release).


* MENU DELAY

Menu-rendering is deferred as long as the mouse is travelling quickly.
This gives the "menu delay" that allows easier access to sub-menus.
You probably won't like this feature at first, but we'll see how it
goes as you get used to it.  It may be modified or made optional in
the future.


* MISCELLANEOUS IMPROVEMENTS AND FIXES

* OpenScreen() now allocates an appropriate-sized ColorMap for new
modes.  The SA_ColorMapEntries tag can override this, to let the
application increase the ColorMap size if needed.

* Clicking in the no-window area of a screen now activates that screen
(for purposes of autoscrolling).

* The mouse-pointer no longer blanks in the first gap when three
interlaced screens up.

* Intuition no longer uses AllocRemember().

* In struct Preferences, the unused WorkName[] field is now split into
PrtDevName[], DefaultSerUnit, and DefaultPrtUnit, for multi-serial
preferences and more flexible printer-preferences.

* OpenScreen() can no longer can lose sizeof(RasInfo) bytes if it
fails.

* To avoid collision with C++ keywords, intuition_lib.sfd no longer
use the variable named "class".

* I fixed a scaling error in the vector image-class stuff that made
the resulting images a bit too small.

* Performed a good many size optimizations.

* The WindowPort is now embedded in the extended-window structure.
The most commonly used way in which ModifyIDCMP() could fail is when
you set the window->UserPort to your shared port, then call
ModifyIDCMP() to create the WindowPort.  This case can no longer fail.

* Trying to get an attribute unknown to imageclass no longer invokes the
superclass twice.

* The names of the internal Preferences structures have been reworked
to be understandable.
Intuition 38.116:

Intuition now relies on graphics.library CalcIVG() to determine the
inter-screen gap.

Added a kludge to poke the FMode to zero and set the VPXF_HAVE_FMODE
flag, conditional on a temporary IBase flag.  This is needed to run on
most current new chipset machines.  The standalone program
V38:aug/bin/ZeroFMode toggles this flag.

Intuition now supports attached screens.  The {SA_Attach,parent} tag
is used for this purpose.  First open the parent screen.  Then open
one or more child screens with this tag.  Child screens can be dragged
independently of each other and their parent (though never above their
parent).  Pulling down the parent below its natural top causes the
child screens to move together.

Attached screens also depth-arrange as a group, whenever the user
does the depth-arranging.  Programmatic depth arrangement of the
parent does the same.  Programmatic depth arrangement of a child
moves it alone, but only with respect to the group.

An attached-screens demo has been released to V38:aug/bin/asdemo,
V38:aug/doc/asdemo.doc, and V38:aug/src/asdemo.c.

If an image-class of a gadget's image returns TRUE for the new
IA_SupportsDisable tag, then Intuition doesn't ghost the gadget
itself, but passes the IDS_DISABLED or (the new) IDS_SELECTEDDISABLED
state to DrawImageState().

Updated OpenWindow() and OpenScreen() autodocs to list new tags.
Intuition 38.159:

When Intuition allocates the screen's BitMap planes, it now uses the
new AllocBitMapData() and FreeBitMapData() functions, which ensure
correct scan-line alignment.

Intuition now uses the graphics.library pen-sharing scheme.  As per
spec, for all screens, pens found in the DrawInfo->dri_Pens are
obtained as sharable.  For existing public screens, all other pens are
allocated as exclusive.  For custom screens and aware public screens
(those that set the new SA_SharePens tag), all other pens are left
unallocated.  On the Workbench screen, pens 0-3 are guaranteed to be
sharable.

The sprite pens are not yet allocated (they will be allocated as
shared).

This week's new custom chip means that I could remove the kludge where
Intuition had to poke GfxBase->FMode to zero.

DisplayBeep() now saves and restores 32 bit-per-gun colors, and is
smaller as a result.

The new OpenScreen() tag SA_Draggable allows the caller to make a
screen non-draggable.

The new OpenScreen() tag SA_Exclusive allows the caller to make a
screen exclusive, meaning it will never share the display with another
screen.  Dragging down a screen that's in front of this screen won't
reveal this screen, and vice-versa.

The SA_Draggable and SA_Exclusive tags are designed to help implement
"game screens" that co-exist with Intuition.

The new OpenWindow() tag WA_NotifyDepth allows a window to request
IDCMP_CHANGEWINDOW messages when that window is depth-arranged.  These
messages arrive with a Code value of CWCODE_DEPTH (1) to distinguish
them from move/size IDCMP_CHANGEWINDOW messages, which have a Code
value of CW_MOVESIZE (0).

Menu-delay has been removed.  It wasn't very good, and was a good
distance away from the nearest thing that might be better.

Intuition no longer keeps conditional code so it can run with V37
graphics.  V38 is now required.

The term "V38" is replaced by "V39", in includes, autodocs, and
comments.
Intuition 39.161:

AttachPalExtra() is now called in the right place.  I was calling it
too early on.

Bumped version number to 39.
Intuition 37.327:

This Intuition contains a number of optimizations that do not affect
its behavior.  (An asterisk indicates an optimization that has been in
V39 Intuition for some time.  A dash indicates a new one that is being
added simultaneously to V39).


- The library jump table is now built from short-form vectors
  (saves 256 bytes)

* The internal routine DrawVectorA() no longer handles LeftEdge and
  TopEdge parameters (DrawVectorA() was always called with LeftEdge = 0
  and TopEdge = 0).
  (saves 420 bytes)

* The vector imageclass routines no longer use a clipping layer.  This
  is unnecessary since vector descriptions always come from ROM, and
  thus are "known" to not go out of bounds.
  (saves 220 bytes)

- The vector data is now downcoded to assembler.  This allows me to
  use a short-offset instead of a long-pointer, and frees up some
  unneeded pad-bytes.
  (saves 160 bytes)

* Other odd optimizations in the vector imageclass routines.
  (saves 100 bytes)


As well, the MOUSEMOVE IDCMP message now contains the correct data in
the IAddress pointer.  SetPatch will cover the problem for those with
2.04 ROMs.

A few changes were made to comments in the includes and autodocs,
including comments about the NextPubScreen() call overwriting the
supplied buffer by one character.

There will likely be one more space-savings pass on Intuition before
the A300 ROM is made.
Intuition 37.328:

It turns out that Intuition has been incrementing location $28 by one
during its init.  (When Intuition init's a boopsi class, it bumps the
SubClassCount of the superclass of that class.  However, the root-class
has a NULL superclass).

The effect of this is to damage the Line-1010 trap vector, turning
it into an odd address.  A program that dies with a Line-1010 emulation
fault should bring up a Dos "Software Failure" requester with guru A,
but instead reboots the system with guru 3.

A matching SetPatch will fix the same problem in 2.04.
Intuition 39.171:

Now use SetABPenDrMd() instead of individual calls, when possible.
Intuition 39.185:

All the optimizations recently taken for 2.05 are now folded into V39
Intuition as well.  These include making Intuition use short-form
vectors to build its library jump-table and downcoding the vector
image data to assembler, thereby allowing a short-pointer to be used.

The IAddress field of MOUSEMOVE IDCMP messages once again contains
the window pointer.  (This is also fixed for 2.05.  SetPatch will fix
this for 2.04 people.)

NextPubScreen() was writing a zero-byte one byte past the end of
the buffer the caller supplies.  It no longer does this.  Further,
the NextPubScreen() autodoc and screens.h and screens.i advise
passing a buffer one character bigger than previously requested.

Fixed the bug where location $28 was incremented during Intuition's
initialization.  (This is also fixed for 2.05.  SetPatch will fix this
for 2.04 people.)

SA_ColorMapEntries can no longer be used to reduce the number of
entries below the default.

The window depth-gadget now uses the new LayerObscured() function in
layers.library to decide whether a click should send the window to
front or to back.

Fixed a mistake in the prototype in the autodoc for AutoRequest().
Intuition 37.331:

It turns out that MOUSEBUTTONS IDCMP messages had the same IAddress
problem as MOUSEMOVE messages.

This is now fixed.
Intuition 39.222:

This release consists of a partial re-write and heavy optimizations
in the vector-imageclass code.  As well, the IAddress for MOUSEBUTTONS
IDCMP messages is correct again.
Intuition 39.254:

Intuition no longer has coercion tables.  Rather, it lets
graphics.library figure out the correct coercion, through the new
CoerceMode() function call.

DClips of coerced ViewPorts are finally scaled correctly.

Coercion is no longer recalculated just because the global LACE mode
changes.

Clicking on the depth gadget of windows having requesters always
brought them forward.  This is now fixed.  The layers.library
LayerObscured() call wasn't good enough to determine whether to send a
window to the front or back when depth-arranging.  This is because a
window with a requester is automatically obscured, and therefore
always was coming to the front.  By agreement with Mike, Intuition now
implements the test internally, and LayerObscured() is going away.

Menus now use AllocBitMap() and FreeBitMap(), which saves ROM space,
as well as allows menus on interleaved-bitmap screens.

Each instance of vector imageclass now takes 40 bytes less RAM.

Took some optimizations in frameiclass; began work toward supporting
the double-thick frame that GadTools could use.

Some screen depth handling was incorrect for custom bitmap screens
(color map entries and DrawInfo dri_Depth could be wrong).
Intuition 39.277:

In intuition.h/.i, WA_BackFill is no longer marked as unimplemented.

For SCREENQUIET bar-layers and menu clip-layers, OpenScreen() now uses
the new LAYERS_NOBACKFILL magic constant instead of a stub do-nothing
hook.

OpenScreen() installs a no-op layer-info backfill hook instead of
letting CloseScreen() poke the RastPort mask to zero.  This was
necessary so that disposing the menu-layer didn't clear the underlying
bits.  The new method is more legal.

OpenScreen() now supports the new SA_BackFill tag.

Since graphics now supports the ObtainPen() PEN_NO_SETCOLOR flag,
Intuition no longer kludges around its absence.

Now get CoerceMode() flags from <graphics/coerce.h>.  The last release
of Intuition had AVOID FLICKER and PRESERVE_COLORS interchanged.
Coercion routines now rely on graphics.library to handle exclusion
based on monitor-compatibility flags.

Changing IControl coercion settings now causes the coercion to be
refigured immediately, instead of waiting for the next screen shuffle.

Fixed bug where ViewPort offsets were only being set up when the
ViewPort was visible and MEGAFORCE was in effect.  This had caused
problems with scaling DClips, where ViewPort offsets need setting even
if the ViewPort is invisible.

Took a few optimizations and removed some unneeded code.
Intuition 39.295:

* This release of Intuition introduces the first part of promotion.
  Crudely speaking, promotion is flicker-fixing in software for new
  chipset machines.  Intuition is now capable of displaying the front
  screen in a mode other than the one the programmer requested, based on
  Preferences Promotion settings and the CoerceMode() call in graphics.

  Currently, IControl supports a single on/off promotion option.  If
  this option is on (and the double-NTSC monitor is available), then
  NTSC modes will be shown as their double-NTSC (i.e.  de-interlaced)
  equivalents.

  Some work still needs to be done to perfect graphics/CoerceMode().
  (Intuition relies entirely on graphics to pick the best mode to
  coerce to).  Also, some of the doubleNTSC modes don't always work
  right yet (eg. the 320x200 equivalent one).  Also, doublePAL does
  not exist yet.

  As well, we need to present the user with the appropriate promotion
  choices.  I believe these choices will be:

  	- no promotion
  	- promote to 31 KHz family (i.e. Productivity family, doubleNTSC,
  		or doublePAL) when reasonable
  	- promote to 31 KHz family always
  	- promote to a particular monitor (eg. Super72) always

* The standard system arrows are improved (and take less ROM).

* A ghosted string gadget no longer causes patterning in string
  gadgets that precede it in the list and have a non-zero container
  background-pen.

* The endcode pointer in Intuition's romtag is now correct.

* If a prop gadget's knob was all the way up (or left), but the pot
  value was not zero, 2.0 gave no way to drag it to zero without first
  dragging it down (or right).  It now behaves correctly (like 1.3).

* I've investigated a little bit the prop-gadget trashing bug that
  Martin and Darren noticed.  NewModifyProp() pokes the PropInfo
  fields unprotected, while the prop-gadget-processing code caches
  some values that NewModifyProp() would seem to invalidate.
  Finding the solution may take a bit...
Intuition 39.323:

When a WFLG_ACTIVATE window is opened, Intuition now activates it
synchronously.  The big benefit is that the window's border isn't
first drawn inactive, then activated.  (There still is a minor
behavior change I need to correct.  This happens if such a window
tries to open while the user is holding down a gadget).

The default string edit hook now ignores Return or Enter keystrokes
that have the repeat-qualifier set.

Intuition now ensures that WB screen is at least 640x200.  We need
this to safely allow low-res (and other odd resolution) Workbenches.

OpenScreen() and the routine which open the Workbench now call
OpenScreenTagList() through the LVO, which will allow some useful
SetFunctioning.

Intuition now depends on ThinLayerInfo() testing for itself if a layer
is non-fattened.

The ProPage transparent-menus fix needs to be in two places in
Intuition.  I added it to the second place (fairly rare case, though).

Intuition has always forced backdrop windows to have no system gadgets
except close.  Zoom had been forgotten.

The missing MIDDLEDOWN, MIDDLEUP, KEYCODE_Z, SCREEN_DRAG, and
MOUSE_ACCEL definitions have been added to intuition.i and
preferences.i.

Minor updates to autodocs and includes.  The only biggie is that
ActivateWindow() was documented as returning a LONG under V36 and
higher, but it's always been (and still is) returning VOID.

The V36 beta-only names have been removed from iobsolete.h

Took some easy optimizations I found along the way.
Intuition 39.336:

Made a small change to properly support oversized scrollable Hedley
screens.  There is no point in being able to pull a MCOMPAT_NOBODY
screen down below its DClip top (since you can't see any other screens
behind an MCOMPAT_NOBODY screen).  Intuition now enforces this, since
it's sensible, and easier than teaching Hedley mode how to work when
pulled down.

(Remember that there are a bunch of differences between a screen
pulled down below its nominal position and an oversized screen which
is moved around, but its DClip is always full).

Fixed a long-standing bug where REQCLEAR messages weren't being sent
when a requester having no layer is taken down while other requesters
are still up in the window.

Added missing WaitBlit()s in three places:  before screen's bitmap is
freed, before system-image-class data is freed, and before that
class's TmpRas is freed.  Should fix Martin's report of trashed
menu-checkmark.  (Under 2.0x, only the GadTools radio button was
vulnerable to this bug).
Intuition 39.371:

Every time a window border was redrawn, Intuition used to perform a
TextFit() to figure out how many characters of the window's title were
displayable.  To speed things up, that result is now stored and only
recalculated when the window's size or title changes.

OpenScreenTagList() now supports the SA_Interleaved boolean tag to
request an interleaved bitmap from AllocBitMap().

	#define SA_Interleaved	(SA_Dummy + 0x0022)

Fixed 1.3-style CUSTOMBITMAP screens, which have been broken since
November of last year.

In certain screen mode changes (eg.  promotion on/off), the sprite
used to jump.  This happened because MoveSprite() was called after the
viewports were reworked, but before the copper lists were regenerated
and installed.  Now, if the copper lists are going to be rebuilt,
MoveSprite() isn't called until right after the LoadView().

For 3.0, Intuition must ensure that the Workbench is at least 640x200.
This was broken.  It's now fixed.

The width of the screen's menu Amiga-key and checkmark symbols is now
based on the screen's font's "m" width, instead of tf_XSize.

I took some space optimizations I encountered along the way.

The ROM default sprite pointer now is the 2.0 one, instead of the 1.3 one.

Also, I now call graphics through the new ObtainPen(), etc. vectors.
Intuition 39.383:

Workbench is now interleaved by default.  The idea is that the alpha
release should go out like this so we can explore compatibility
aspects of interleaved bitmaps.  V39:aug/bin and /src contain a
program called NoInterleaveWB that turns this off.

When inactive, window borders are filled with BACKGROUNDPEN, instead
of pen zero.  There are presumably more places when pen zero is used,
but they're going to be hard to track down.

Intuition's gadget and interconnect classes now select the MapTags()
option to preserve unknown tags.  This is reasonable and necessary,
and under V37, a utility.library bug gave Intuition this option even
though it had requested tossing unknown tags.

Did some preparatory work for the new pointer stuff (renamed some old
variables, removed an unnecessary call to setMouse(), removed unused
return code from setWindow()).
Intuition 39.416:

EasyRequests and AutoRequests used to consist of a window with a
requester inside, which meant two layers.  Now, they're brought up
without the requester, saving a layer.  This makes them much snappier.

Major optimizations for space and speed (without sacrificing
appearance) of the window sizing/dragging rubber-band box.  Intuition
had support for variable-thickness rubber bands, but this was unused.
As well, the vertical strokes were rendered with two lines each,
instead of a RectFill() each, which would be faster.  Also, there was
unnecessary clipping code (which was incorrect for interleaved
BitMaps).
Intuition 39.495:

The last release had a bug for AutoRequests (but not EasyRequests)
that munged their title and caused an enforcer hit.  This is fixed.

Fixed documentation of struct ColorSpec.

Intuition now has most of the support for double (or multiple)
buffering inside an Intuition screen, with full support for menus, and
full support for gadgets whose imagery returns to the initial state
when you release them (eg.  buttons).  To use other kinds of gadgets
(eg. sliders) you need to put them on a separate (can be attached)
screen.

For each buffer you wish to use, you need to call the
AllocScreenBuffer() function.  This will return a ScreenBuffer
structure, which contains a pointer to a BitMap and to a graphics
DBufInfo structure.  The BitMap can be allocated by you, for you, or
it can be the screen's own, depending.  Intuition will optionally copy
the imagery from the orignal bitmap into the buffer, so that you can
pick up the initial imagery of the gadgets and screen-bar.

To change the bitmap, call ChangeScreenBuffer().  ChangeScreenBuffer()
will return failure if gadgets or menus are active on your screen,
otherwise it will cause the bitmap to be changed.

To clean up, call FreeScreenBuffer().  Consult the autodocs for full
details.

Note:  at this time, the graphics AllocDBufInfo()/FreeDBufInfo() calls
are not public.  Those functions are required for proper notification
of when it's safe to re-use a ScreenBuffer.

When Intuition allocates a BitMap (i.e.  a non-CUSTOMBITMAP screen),
it now uses AllocBitMap(), and copies the struct BitMap into
screen->BitMap, instead of performing AllocBitMapData() on
&screen->BitMap.  This is the direction we're headed anyways for RTG,
and is needed for double-buffering.  Intuition internally now uses the
real bitmap (screen->RastPort.BitMap) instead of &screen->BitMap.

Took some optimizations in the default-routines of the state-machine.

Two LVOs (that exist but do nothing under V37) have been reserved for
IPrefs to implement a Reset-WB handler, which would allow applications
to get notified to shut-down / re-open when the Workbench is reset.
Intuition 39.510:

Did some minor cleanup in preparation for more work on attached
screens.  Programmatic depth arrangement of child screens now moves
the whole family.  (It used to affect just the child; this
functionality will come through a new function).

AllocScreenBuffer() and FreeScreenBuffer() now actually call
AllocDBufInfo() and FreeDBufInfo() respectively.

Put back bounds check in RectFill used to fill around string gadgets,
because I broke people with zero-width string gadgets.
Intuition 39.551:

Pulling down a parent down moves the child.  However, the child screen
normally moves independently of the parent (with the exception that it
may not rise about the screen's top).  This is fine if the two screens
are supposed to appear somewhat separate from each other, but there
are times when they're supposed to masquerade strongly as a single
screen.  Set the new SA_ChildDrag tag to FALSE to get a child-screen
which drags the parent (when dragged through MoveScreen(), its
drag-bar, or mouse-screen-drag).  A future function call will allow
the application to independently move even such a screen.

Eliminated some redundancy in the screen-drag code, which means that
dragging a screen should be a little faster.  Dragging a bunch of
attached screens is now a great deal faster.

SA_Exclusive screens can no longer be pulled down below their normal
top.

The new SA_Colors32 tag can be used to provide 32-bit color
information at OpenScreen() time.  ti_Data points to a longword-array
that Intuition will pass to LoadRGB32().  See the autodoc for
LoadRGB32() for details.

The new SA_VideoControl tag allows an application to provide a taglist
which Intuition will pass to VideoControl() after opening the screen.
This can be useful to turn on border-sprites, for example.

The GadTools checkbox and GadTools radio-button imagery is now marked
as scaling, to allow the next release of GadTools to support that.

When I changed the ROM default pointer to match the 2.04 default
pointer, I forgot to change the hot-spot.  That's now fixed.

A couple of releases ago, I broke alternate-image custom knob prop
gadgets.  (When selected, they would still use GadgetRender, instead
of SelectRender).  It once again uses SelectRender.
Intuition 39.553:

Fixed defaults for SA_Draggable and SA_ChildDrag, which were
defaulting to FALSE.
Intuition 39.557:

Two releases ago, I broke the Hedley scrolling trick.  In this trick,
screens which are exclusive (on account of the database saying they're
MCOMPAT_NOBODY or if the app specifies SA_Exclusive, TRUE) can't be
pulled down below their normal top.  Anyways, I managed to
accidentally clear the flag that was being set based on
MCOMPAT_NOBODY.  Now fixed.

Intuition now relies on LoadRGB32(vp,NULL) to be safe.
Intuition 39.702:

The major thrust has been to complete attached screens.
OpenScreenTags() now supports the SA_Parent tag to attach a new child
to an existing parent.  The SA_FrontChild and SA_BackChild tags can be
used to attach an existing child in front of or behind a new parent.
When opening a parent screen you can specify multiple SA_xxxChild
tags, in order to attach multiple children.

Closing a screen automatically detaches it from its parent, or
detaches any children it might have.

The {SA_Draggable,FALSE} tag applied to a child screen produces a
child-screen that drags only with its parent.

The new ScreenDepth() call combines the functionality of
ScreenToFront() and ScreenToBack(), and adds the ability to optionally
depth-arrange a child-screen within its family.  (By default,
depth-arranging a child-screen sends its whole family to the front or
back as a group).

The new ScreenPosition() call includes the function of MoveScreen()
but optionally allows specification of absolute screen coordinates.
In addition, it is optionally possible to force-move a screen that was
opened non-draggable.

The new ScrollWindowRaster() call has been added.  This call basically
does a ScrollRasterBF(), then if there is any damage in your window,
it repairs it and sends you an IDCMP_REFRESHWINDOW event.  This
function may change a bit if we decide that ScrollRasterBF() should
optionally allow backfilling of the newly-damaged area.

The screen's bar-layer now has a no-backfill backfill hook, because
Intuition always fully renders the bar.

I fixed the enforcer hit caused by EasyRequest() on a window with a
NULL Title.

Downcoded and optimized many of the Intuition locking calls, to save
space.

Took some miscellaneous optimizations, including hardcoding the verify
timeout (IControl lost this option for 2.1).

Fixed an uninitialized variable in buttongclass.

Intuition 39.757

OpenScreen() now sets the new PENSHARED bit in screen->Flags if
SA_SharePens was TRUE.  Console and other things may need to know this
information.

Changed the calling interface to ScreenPosition() to allow the new
SPOS_MAKEVISIBLE flag.  This flag tells ScreenPosition() to scroll the
screen so that a rectangle you specify is in the displayed part.  The
new interface is:

	ScreenPosition( screen, flags, x1, y1, x2, y2 );

'flags' can be one of:

    SPOS_RELATIVE: (x1,y1) are deltas to move the screen by, x2,y2 ignored
    SPOS_ABSOLUTE: (x1,y1) are coords to move the screen to, x2,y2 ignored
    SPOS_MAKEVISIBLE: (x1,y1)-(x2,y2) is a rectangle you'd like to scroll
	to the visible part of the screen

    SPOS_FORCEDRAG: This flag can be used in combination with any one
	of the above three, and it tells Intuition that you mean to
	move this screen even though {SA_Draggable,FALSE} was set
	for it.

FrameIClass now supports the standard frame types used by GadTools and
recommended by the style guide.  The new IA_FrameType attribute is
used to control the frame type.  The existing IA_Recessed attribute
allows you to recess those borders:

    FRAME_DEFAULT - the default skinny frame used by frbuttonclass
	and V37 frameiclass.
    FRAME_BUTTON - the standard GadTools style bevel box with thicker
	vertical strokes and bevelled corners.  Recess it for a pushed-in
	frame.
    FRAME_RIDGE - the double bevel box used by GadTools string gadgets.
	Recess it for a groove, sometimes used to delineate sub-areas
	of the UI.
    FRAME_ICONDROPBOX - the Style-Guide recommended AppIcon drop-area
	delimiter.

Not only are these cool features to have public, they save a lot of
ROM in GadTools for not much cost here.

Under 2.0, NewModifyProp() with numgad=1 of a disabled prop gadget
doesn't ensure that the ghosting is redrawn over the old+new knob
area.  This is now fixed.

When you supply the "alternate-size" rectangle for zooming using the
WA_Zoom tag, you can now specify (-1,-1) for the Left and Top edges.
This instructs Intuition to perform size-only zooming.  Whereever the
window is placed, zooming will toggle size but not affect position
(unless moving the window would be required to keep it on-screen).

Windows that have the WA_AutoAdjust property are now moved to the
visible portion of an oversized screen if they try to open above or to
the left of the display-clip.

Intuition 39.1073

Intuition grew several major features this release, including:

New sprite support, menu lending, gadget help, new tablet support, new
gadget relativity support, and more.

SPRITE SUPPORT

The Intuition pointer now supports the various new sprite modes of the
AA chipset.  This includes 16, 32, and 64-bit wide sprites, as well
as the sprite-pixel resolution control.

For applications, there is a new boopsi class called "pointerclass",
which is used to create Intuition pointer objects.  The new pointer.h
include file contains definitions for the attributes that pointerclass
supports, including:

	POINTERA_BitMap - bitmap to use for sprite imagery
	POINTERA_XOffset, POINTERA_YOffset - sprite hot-spot
	POINTERA_WordWidth - intended width in words of this pointer
	POINTERA_Resolution - intended resolution of this pointer

The resolution can be any of the hardware resolutions (ECS-compatible,
140 ns, 70 ns, or 35 ns), but Intuition also adds choices for
	- sprite resolution to match screen pixel resolution
	- sprite resolution to be "always lores"
	- sprite resolution to be "always hires"

There are is a new call, SetWindowPointerA(), which takes a window and
a taglist.  The WA_Pointer tag is used to set the pointer to a custom
pointer obtained from pointer class or to restore the default pointer.
The WA_BusyPointer tag requests the system default busy pointer (!).
The WA_PointerDelay tag requests that changing the pointer be deferred
a short while.  The pointer-change will be called off by a subsequent
call to SetWindowPointerA(), SetPointer(), or ClearPointer().  This is
very useful for applications that don't know how long they'll be busy
for.  The same three tags are now recognized by OpenWindowTagList(),
so you can now open a window with a custom (or standard busy) pointer
in place.

The old SetPointer() and ClearPointer() still work.

>From the Preferences side, Intuition now accepts wide sprites from
IPrefs.  As well, Intuition accepts new Preferences busy-pointers
from IPrefs.  The changes I made to IPrefs need to be integrated
into V39 IPrefs.

Intuition is now doing its part of the sprite-compatibility game.
Basically, if an application requests a sprite of its own whose mode
is incompatible with the Intuition pointer, then Graphics will blank
the pointer and notify Intuition.  Intuition will rebound by putting
up a new pointer which is compatible.

What doesn't work:
- Using attached sprites for the Intuition pointer is currently
  broken.
- There are some hot-spot scaling issues not yet addressed
- The pointer information returned by GetPrefs() is no longer kept
  up-to-date.  I think GetDefPrefs() is also returning weird stuff
  for the pointer part.
- Calling SetPointer() or ClearPointer() from an input handler is now
  unsafe.


EXTENDED GADGETS, GADGET HELP, and SPECIAL GADGET RELATIVITY

The gadget structure has been extended to include a new long-word of
flags and a bounding box.  "gadgetclass" (hence all its subclasses)
are now ExtGadgets.  The bounding box is used for size damage and
gadget help processing (it defaults to the same as the gadget box).
The GA_Bounds tag is supported for setting these bounds.

Intuition now supports Gadget Help.  If a window is opened with
WA_GadgetHelp,TRUE, and the user hits the help key over the bounding
box of a gadget which has the GMORE_GADGETHELP property, then
an IDCMP_GADGETHELP event will be sent.  There is a corresponding
boopsi GM_HELPTEST method which boopsi gadgets can use to refine
their hit areas or to delegate hit-testing to member gadgets.  Boopsi
gadgets can also return values for the IntuiMessage Code field of
the IDCMP_GADGETHELP message.

The routine that manages erasing and redrawing GREL gadgets during
window resizing now uses the bounding box instead of the gadget box.
This means that you can finally have GREL gadgets which have imagery
(eg.  a gadget label) extending outside of the select box.  As well,
there is a new boopsi GM_LAYOUT method.  If your gadget has any of the
GREL properties, it will receive a GM_LAYOUT method when the gadget is
first added (or the window containing the gadget is first opened), as
well as whenever the window size changes.  At GM_LAYOUT time, the
gadget can change its gadget select box and/or bounding box.  It can
re-allocate or change its image dimensions if it likes.  If it's a
group-gadget, it can move its members around.  To round this all out,
there is a new "special relativity" property, GFLG_RELSPECIAL or
GA_RelSpecial.  This property doesn't affect the interpretation of the
gadget box, but it does allow your gadget to receive GM_LAYOUT
methods, hence have arbitrary layout power.


NEW TABLET SUPPORT

There is a new subclass of IECLASS_NEWPOINTERPOS called
IESUBCLASS_NEWTABLET.  This subclass should hopefully solve tablet
handling quite nicely.  The tablet driver fills out a few
tablet-oriented properties (like the current value and range in X and
Y), and then Intuition calls the driver back through a hook once it
has established what the active screen is and what the rectangle the
tablet should scale itself to should be.  This handles screen
resolution changes, autoscroll screens, pulled down screens (as well
as possible), and attached screens.  The tablet can then scale
according to some tablet preferences settings it manages (eg.
preserve aspect, center, best fit horizontal, best fit vertical) The
tablet can leave the hook NULL and reasonable default scaling will
occur.


OTHER

The DrawImageState()/EraseImage() weren't cloning the RastPort, meaning
that RastPort settings could be affected by boopsi images.

Menu lending has been implemented.

There is a new boopsi function in Intuition called DoGadgetMethodA(),
which invokes the specified method, but includes a valid GadgetInfo
structure if possible.  SetGadgetAttrsA() now uses DoGadgetMethodA().
Two SetGadgetAttrsA() bugs were fixed in the process.  First, if
a requester is off-window, it has no layer.  SGA() of a gadget in such
a requester wasn't being sent to the gadget.  OM_SET is now sent
with a GadgetInfo of NULL.  Second, there was no locking around the
call.

Mike supplied some new alert code which saves 100 bytes, allows for
time-out of alerts, and regularizes the flashing speed (the death of
0x6809!).

The basic gadget types now support GFLG_LABELIMAGE.

On the Workbench screen, pens ~0 to ~3 are now also obtained as
shared.   Custom screens are now just like public screens (i.e.
all non-DrawInfo pens obtained as exclusive if SA_SharePens is FALSE
or absent, or all such pens left unallocated if SA_SharePens is TRUE).

Took some minor optimizations.

Began to use PackStructureTags() internally.  Already saved about
400 bytes, with more to come.

Intuition 39.1100

Now checks PAL/NTSC state of machine during open instead of init.  This
allows BootMenu to change this successfully.

Juggled and finalized data structures for tablet support.  The
TabletData and TabletHookData structures are now in
<intuition/intuition.h|i>.  Look for IENewTablet soon in
<devices/inputevent.h|i>.

The mouse-pointer definitions are now in <intuition/intuition.h|i>.

Now use TaggedOpenLibrary() to save 96 bytes.

strgadclass uses PackStructureTags() saves 96 bytes.

No longer need a kludge to support rebooting with Intuition in $F00000
space.

Intuition 39.1116

The default Code value for the IDCMP_GADGETHELP IntuiMessage is now
~0, so that the value zero is free for things like "which item in a
listview was help hit for".  The GMR_HELPHIT return value for boopsi
gadgets is unchanged.  New is GMR_HELPCODE, which you "or" with the
UWORD you'd like returned.  This also saves 8 bytes.

When an application called old SetPointer(), Intuition was passing the
pointer width instead of the height to the new graphics pointer calls.
This explains the DPaint and CygnusEd pointer trash.

ScrollWindowRaster() was taking its first parameter from A0 instead of
A1 as documented.  This has been fixed.

The flags for screens and windows now use PackStructureTags(), saving
160 bytes.

I broke the pointer definitions out into pointerclass.h and
pointerclass.i, which is more like the other classes.
Intuition 39.1120
The WA_SmartRefresh tag was broken in an unspecifiable way.  Which is
to say, I don't know what PackStructureTags() does when operating on a
bit-attribute whose flag value is zero, but it doesn't work as
Intuition needs.  All that because WFLG_SMART_REFRESH is 0.

Fixes David's mail program.
Intuition 39.1141

Boopsi gadgets are now marked as GFLG_EXTENDED.  (They were extended
but not marked as such in the last release).

AutoRequest and EasyRequest windows are now RMBTrap.  They used to
behave that way because there used to be a requester in those windows.

Internal calls to SetWindowPointerA() and ScreenDepth() go through the
LVO.  OpenWindowXXX() calls SetWindowPointerA().  ScreenToFront(),
ScreenToBack(), and EasyRequest() call ScreenDepth().  Amiga-M/N
processing and screen depth-gadget processing do not (yet) call
ScreenDepth().

All system gadgets (eg. close, drag, size, depth) have GMORE_GADGETHELP
set, so GadgetHelp-aware applications can (almost must) provide help
on them too.

Oversize parent screens can now be pulled up and the child screen
moves correctly.

Non-draggable child screens no longer autoscroll independently of the
parent.

Intuition no longer does spurious border and gadget refresh and sends
a spurious IDCMP_REFRESHWINDOW event.  Formerly, if an application had
not cleared its window's damage, and any other damage-causing
operation (eg.  menus, window sizing/movement) occurred on the same
screen, another round of refresh was performed.  Intuition now can
tell if the window's layer had been damaged since the last
IDCMP_REFRESHWINDOW message went out.

Intuition functions that go synchronously through the state machine
(in the style of quick-IO) were unsafe to call from within the
input-device task.  It is now made safer, though it's still illegal.
Intuition 39.1143

There was an error in the ScreenDepth() stub, which made ScreenToFront()
actually bring the Workbench to front.  Thanks, Martin, for the quick
catch/analysis.
Intuition 39.1147

Intuition now sets the new VP_LAST flag in the bottommost viewport
of its view, for graphics.
Intuition 39.1324

Intuition now notices and repairs damage when boopsi gadgets use
ScrollRaster().  Such gadgets MUST set GMORE_SCROLLRASTER to declare
that they use ScrollRaster().

Alert viewports now have colormaps.  This should fix the problem where
recoverable alerts sometimes came up in red.

Fixed the bug where a window could open with the gadgets not drawn if
autopoint or the user activated the window after it was opened but
before Intuition activated the window.

OpenScreenTagList(), OpenScreen(), OpenWindowTagList(), OpenWindow(),
and the internal BorderPatrol() routine now go through stack-swapping.

Intuition now holds the GfxBase->ActiViewCprSemaphore across
MakeVPort() through to MrgCop().  This is true in all internal cases.
Intuition cannot do this for applications calling MakeScreen() then
RethinkDisplay().

Intuition now handles Preferences colors in 8 bits-per-gun.  A new
IPrefs is required, or else color preferences won't come through.
(The interface to IPrefs now allows for higher color resolution in the
future).  A side-effect of these changes is that GetPrefs() no longer
returns up-to-date colors.  (SetPrefs() of colors continues to work
until colors come in from IPrefs, at which point that part of
SetPrefs() is disabled).

Preferences is now able to change the DrawInfo pens for the Workbench
screen.

Preferences will now be able to control the SA_Interleaved property of
the Workbench screen.

Did a bunch of optimizations for space.  The major one is that
sysiclass is no longer a subclass of vectorclass, it _is_ vectorclass.
Another one is that we don't clone the RastPort in vectorclass any
more (saves stack).

Graphics wants me to denote the last viewport with a VPExtra flag
(VPXF_LAST) instead of a ViewPort flag (VP_LAST).

DisplayBeep(~0) is treated the same as DisplayBeep(0).  This
has some useful properties for future disk-based features.

Intuition no longer uses VP_HIDE as an internal signal that a viewport
needs remaking.  A private screen flag is used instead.

GM_HITTEST is supposed to return zero or a specific non-zero value.
gadgetclass and frbuttonclass used the wrong value when returning a
non-zero result.

Fixed deadlock case in pointer code.

Added missing locks in SetPrefs() logic.

The window drag/resize rubber band is now limited to the first two
planes, for speed.

The stack-swapping code in Intuition is now smaller and faster.
Intuition 39.1360:

This release and last release together save about 300 bytes of RAM.

The alert flash speed is now even more constant across different
machines, and the timeout value is now defined in video frames.

When a window border is redrawn, we used to draw the fill, the edges,
the gadgets, and the edges again.  I removed the first drawing of the
edges in an earlier release, but it looks ugly that way.  So now I put
it back, but this time it happens before the fill.

Fixed a deadlock condition I caused in the OM_NOTIFY processing of
gadgetclass and icclass.

Begin/EndRefresh() now handles failure of the BeginUpdate() function.

Fixed the Intuition colors/pens scheme:

The SA_LikeWorkbench tag gives you a screen just like the Workbench.
This was basically a consequence of getting pens settable through
preferences while keeping NewLook menus on the Workbench screen.

When the SA_Pens pen-array is evaluated, pens are masked to the number
of available colors.  As well, special definitions of pen-number
(PEN_C3, PEN_C2, PEN_C1, and PEN_C0) mean the complementary pen
numbers of pens 0-3.

Preferences now listens to only 8 colors for the bitmap, which
Intuition will set as the first four and the last four colors of the
Workbench or any "Workbench-like" screen (those having the
SA_FullPalette or SA_LikeWorkbench attributes).

The way the DrawInfo pens are determined is Intuition picks a default
pen-array.  Then, any pens you supply with SA_Pens override the
defaults, up until the ~0 in your array.

If the screen is monochrome or old-look, the default will be the
standard two-color pens.

If the screen is two or more planes deep, the default will be the
standard four-color pens, which now include the new-look menu colors.

If the screen has the SA_LikeWorkbench property, the default will be
the user's preferred pen-array, changeable through preferences.
Intuition 39.1368:

Fixed a bug introduced in the last release where the screen bar colors
were incorrect for screens having the "compatible monochrome look".

Screen depth-gadgets and Amiga-M/N now go through the ScreenDepth()
function, which saves some space and adds flexibility.

Updated some of the autodocs and some of the pointerclass tags.
Intuition 39.1405:

The "all-new" promotion scheme is now done.  Now, the promotion flag
instructs Intuition to call graphics/SetDefaultMonitor() and let
graphics worry about things in the database.  Intuition rethinks all
it has to rethink, and everything is marvellous.  There are a few
behavior differences from the old way of doing promotion, but this is
what we want, we believe.

The only current problem is very minor, and I punted on fixing it so I
could release:  screen owners that poked their ViewModes and called
MakeScreen()/RethinkDisplay() no longer have their DClips restored to
default.  V37 does this, but it interferes with the way I handle
promotion.  I expect to be able to sort that out easily early next
week.

The scaling of the horizontal position of the mouse-pointer hot-spot
is now correct.  (Note that there is a fixed error in some modes,
which I believe is a graphics bug).

NewLook props in the borders of an active window have their knobs
rendered in FILLPEN instead of SHINEPEN.  When you click on the knob,
they become SHINEPEN as before.  This looks a lot better, is more
consistent with inactive windows, and finally restores that
all-important feedback to these prop gadgets.

Fixed a bug in ScrollWindowRaster() where the application was always
getting a refresh message, whether or not there was damage.

Fixed a bug introduced in the last release where old-look screens had
the wrong BACKGROUNDPEN.
Intuition 39.1456

Fixed the handling of vertical mouse size and scaling.  See
pointerclass.h/i for the options.  Note that until there are changes
to the monitors and until gfx implements the sprite-scan-doubling tag,
there may still be hot-spot errors.

GadgetHelp has been reworked to the new passive form.  You need to
call the HelpControl() function to turn on gadget-help state.  When
enabled, you only need to pass the mouse over a gadget (no click or
help-press required), and IDCMP_GADGETHELP will be sent.

WA_HelpGroup allows you to declare several windows as being in the
same group for help-purposes.  Only the active window and others
of the same group receive help.

The IAddress of the IDCMP_GADGETHELP message can be one of the
following:

NULL - indicates mouse is not over the active window or any other
window of the same HelpGroup.

pointer to a gadget - indicates mouse is over some gadget which
reports Gadget-Help.

pointer to a window - indicates mouse is inside a window, but not over
any help-reporting gadget.

Intuition now always calls SetDefaultMonitor() (it was poking
GfxBase directly during its init).

Screen depth is always validated.  Making a request for a screen
too deep causes failure with OSERR_TOODEEP.

Intuition now holds the graphics copper-list semaphore only during view
operations.  When Intuition started to hold this semaphore, it also
held it during pointer/sprite operations (Intuition's internal
"view lock" was used for both operations).  There are now two different
locks.
Intuition 39.1458

Temporarily short-circuited the code in Intuition which decides
whether to turn on sprite scan-doubling, since graphics doesn't do
this yet.  That (combined with Spence's monitors) should hopefully
solve the hot-spot scaling errors.  I'll re-enable the code when
sprite scan-doubling works.

I needed to make a change to the way preferences DrawInfo pens are
handled, to support separate pens for four and eight+ colors.
Intuition 39.1461

The IControl Promotion setting is now ignored unless Intuition detects
an enabled AA system.  This fixes David Junod's enforcer report.  What
was happening is that his system had enlighten removed, so was coming
up ECS, but he had promotion on.  Intuition failed to open his Workbench
screen (because it was too deep for ECS), so fell back to hires 640x200x2,
which, due to promotion being on was a double-NTSC mode that was
not available.
Intuition 39.1485

It is no longer possible to deadlock Intuition by judicious playing
with menus or window dragging while another window attempts to open.

Fixed the long-standing bug where if a new window tries to open active
while the user is holding down some other gadget, the new window's
borders and gadgets weren't being rendered until the user let go.

Made a fix to the sprite-scan-doubling code to use the correct test
for availability of this feature.  No change in the executable yet,
since that section of code is still compiled out.

Intuition 39.1508:

Fixed the bug which prevented the system from booting in PAL.
Intuition accidentally overwrote a flag and thought the system was
NTSC.  This bug turns out to be in 2.04, but for various reasons is of
no real consequence there.

If an input event is a new tablet event, boopsi gadgets now get a
pointer to the TabletData structure in the gpInput structure they
receive through the GM_GOACTIVE and GM_HANDLEINPUT methods.

When a tablet driver sends a new tablet event and the active window is
tablet-aware, IDCMP_MOUSEMOVE events are sent to that window even if
the mouse-position is apparently unchanged.  This is to allow
applications to hear changes in sub-pixel position or other parameters
such as pressure.  Applications that don't request the attribute
{WA_TabletMessages, TRUE} or input events stemming from other than the
tablet are unaffected.  This means that tablet drivers must be careful
to only send events when something actually changed.

The code in Intuition to manage sprite scan-doubling is now enabled.
Note that graphics (or the hardware) is currently having some problems
in the area, so the latest monitor files all claim that scan-doubling
is not supported.  Thus, you probably won't see anything from this
code change.

Fixed a bug which could keep hidden viewports from being properly
remade when made visible.  A third-party tester did stumble across
the bug, and it is now fixed.

Minor documentation clarifications to ScreenDepth(), ScreenPosition(),
struct DrawInfo, tag POINTERA_BitMap, and flag SDEPTH_CHILDONLY.
Intuition 39.1621:

Fixed a bug where if an IESUBCLASS_NEWTABLET input event arrived when
no screens were open, enforcer hits would result.

The default tablet scaling routine now correctly provides sub-pixel
position.

Intuition's internal mouse-position variables are now long words
instead of short words.  This is needed to prevent overflow when
mapping a new tablet event to an autoscroll screen which is more than
a few times larger than normal.

A screen would only autoscroll if the mouse was already at the extreme
of the screen.  If the mouse was say 5 pixels from the left screen
edge, and an input event caused it to jump 20 pixels left, it would
only move 5.  Now it moves 5 and autoscrolls 15.  This wasn't very
noticable with ordinary mouse events, but the fix is needed to
correctly support programmed input events, especially non-relative
ones.

Fixed another window of vulnerability which could result in unrendered
gadgets in a newly opened window.

Intuition now obtains the three sprite pens (as shared).

The internal call which allows IPrefs to change the pointer now returns
the BitMap to be freed in all cases.

The special values for DrawInfo pens (PEN_C0 ..  PEN_C3) were supposed
to be evaluated to specific pen numbers.  This was only happening if
the pens came from SA_Pens, and not if they came from Preferences.
The result was Intuition failed to ObtainPen() some pens on
SA_LikeWorkbench screens.

Intuition's own use of OpenWorkBench() goes through the LVO.  IPrefs
requires this.

Took a bunch of major space optimizations:
- Mike gave me downcoded versions of a bunch of miscellaneous and rectangle
  routines.
- Even though Intuition can render scaled images for the menu checkmark and
  Amiga-key, it still kept the hand-drawn versions of each in two sizes.
  Those defaults now come from sysiclass.  (The result is a slight change
  in appearance (but with compatible dimensions) on lores screens).
- MoveScreen(), WBenchToFront(), WBenchToBack() have been downcoded.
- Changing the screen mode no longer affects the old Preferences LACEWB
  bit, since that bit doesn't really have a clear meaning any more.
- Simplified how OpenScreen() and OpenWindow() deal with the presence
  or absence of a NewScreen/NewWindow structure.
- Now use the math functions from utility.library, instead of including
  my own.

Some documentation improvements:
- Clarified NextPubScreen() doc (can return a private-mode public
  screen)

- Clarified GM_HELPTEST definition (no longer involves hitting the
  help key)

- Tablet hook return value is specified (must be zero for now)

- Clarified definition of TabletData->td_RangeX/Y, and
  IENewTablet->ient_RangeX/Y (if tablet runs from 0-999, the Range value
  should be 1000)
Intuition 39.1695

Fixed a deadlock condition in DoGadgetMethod() and SetGadgetAttrsA().
This was caused by the "exception to the rule" of Intuition locking
order.

If OpenScreen() is unable to attach screens (due to illegal
hierarchies, etc.), the screen used to open unattached.  Now, the
screen fails to open, with secondary error OSERR_ATTACHFAIL.

Trying to open a screen as the parent of an existing screen that
already has children now fails, instead of resulting in confusion.

Last release's repairs and optimization to autoscrolling introduced a
bug where if a screen was pulled down but you slid the mouse all the
way up, the screen would jump up to its normal position.  Fixed.

The new menu pens are now compatibly initialized.  If your SA_Pens
array is empty (i.e.  just ~0), then you get the new menu colors.  If
you specify any pens in SA_Pens, then you'll look just like 2.0.

Setting a negative minimum width or height with WindowLimits() no
longer allows you to crash the computer by turning a window inside
out.

If you opened a really big window (size greater than 0x7FFF), the
system would crash due to a signed math error.

SetGadgetAttrs() to a proportional gadget no longer can cause the
window's installed clip-region to be lost.

Ghosting of the menu-headers is now done through a layered RastPort,
to fix a bug which occurs when using very wide fonts.

The thd_ScreenChanged field of the TabletHookData structure is now
properly established.

Defined TABLETA_Pressure to be unsigned.  Defined new
TABLETA_InProximity to handle the stylus entering/leaving proximity.

Intuition recently started to fail to obtain sprite zero.  This has
been fixed.

The radio-button imagery no longer has gaps when it is scaled large.

The imagery for the screen depth gadget, radio button, and checkmark
gadget are now filled with BACKGROUNDPEN instead of pen zero.

The width of the scaled menu-checkmark and Amiga-key symbol has been
reduced to look better.
Intuition 39.1783:

On AA systems downgraded to emulate prior chipsets via BootMenu,
Intuition will no longer attempt to use a sprite of higher bandwidth
than permitted.

If you open a window of the same HelpGroup ID as an existing window,
the newly opened window takes its HelpControl() state from the
existing one.

The SDEPTH_INFAMILY flag now successfully depth-arranges a parent
within its family.

The flag which indicates whether a window is using NewLook menus is
now public (WFLG_NEWLOOKMENUS).

The code which copies the TextAttr used for the menu command-key font
now deals correctly with TTextAttrs.

The ROM busy pointer is now lores by default.

If gadget help is turned on, and the mouse is still over the same
gadget, a new IDCMP_GADGETHELP message is now sent if the gadget
reports a different help code.

Intuition now correctly initializes and obtains sprite zero.

Intuition now correctly handles y-resolution flags for old mouse
pointers.

The default value of SYSIA_Size now comes from the DrawInfo.  This
helps Workbench look good on lores screens.

The boopsi strgadclass was ignoring most of its tags, due to an error
introduced during optimizations.  Now fixed.

The Preferences->LaceWB field is now kept up-to-date based on the
screen mode.  I pulled this to save space, but its absence causes
compatibility problems.

Intuition is supposed to set up initial preferences based on
devs:system-configuration, then override with new preferences
information from IPrefs.  Intuition was ignoring font and screen mode
information from devs:system-configuration.

If a screen failed to open due to a bad attachment, OpenScreen() was
returning a secondary error of OSERR_NOMONITOR instead of
OSERR_ATTACHFAIL.

Implemented WA_HelpGroupWindow, needed by ASL.

Intuition 39.1805:

On SA_LikeWorkbench screens, Intuition now guarantees that pens ~0 and
~1 are allocated.

SetWindowTitles() now properly erases remnants of the previous title.

The windowObscured() function (used to determine whether clicking on
the depth gadget should send the window to the front or back) has been
downcoded.
Intuition 39.1819:

Fixed enforcer hit in SetWindowTitles() caused during a recent fix.

Improved Intuition's locking of the graphics ActiViewCprSemaphore.

Intuition now handles MakeVPort() failure.  Intuition will blank any
failed ViewPort, and attempt to remake it at each opportunity.
MakeScreen(), RethinkDisplay(), and RemakeDisplay() now have return
codes that reflect MakeVPort() failure.
Intuition 39.1985:

Due to a missing RTS, ClearPointer() was falling into CloseScreen().
This has been wrong since April, but a twist of fate kept it hidden
until the weekend.

Intuition now blanks the pointer around size/shape changes, so it
looks better.

The SetPrefs() of devs:system-configuration now changes the pointer,
like in V37.  Subsequent SetPrefs() are ignored.

The pointer information returned by GetPrefs() is now the ROM default
pointer, instead of blank.  (Keeping GetPrefs() up to date with
pointer changes is no longer reasonably feasible).

The ROM default pointers as well as pointers that come in through
the old SetPointer() call are now POINTERXRESN_LORES.  This gives them
a better appearance on 320 wide 31 kHz screens.

There was a vulnerability in SetPointer() and ClearPointer() which
could result in enforcer hits if either was called while Intuition was
regenerating the pointer.

When the mouse-pointer image is in 140 ns mode, the sprite-hotspot
calculation was off by 1/4.

A rounding error in the sprite's vertical hot-spot calculation put the
sprite off by one in 31 kHz scan-doubled modes when the sprite was in
high vertical resolution.

Changing Pointer Preferences no longer causes a permanent 40 byte
memory loss.

Menu-lending now works for menu command-key equivalents.

When promotion is on, changing Overscan preferences no longer affects
old struct Preferences.

When an active string-gadget is refreshed, its imagery is no longer
rendered in IDS_SELECTED state.

The Preferences LaceWB field (and whether the pretend screen mode from
GetScreenData() is lace or not) now solely depends on the height of
the TextOverscan of the true mode of the Workbench.  This helps older
applications opening on modes such as double-NTSC 640x400.

Pens and colors are now set correctly on HAM and extra-halfbrite
screens.

The window rubber-band is once again rendered into all planes.

Fixed another enforcer hit in SetWindowTitles() caused by changing
the window titles during resizing of a window.

WA_AutoAdjust no longer attempts to move the window onto the DClip.
A better solution will appear in some future version...

Intuition 39.2012:

Now detect and handle the technique Disney Animator uses to achieve
their "onion" effect.
Intuition 39.2017:

If the pointer image comes from SetPrefs(), its resolution will be
POINTERXRESN_LORES, instead of POINTERXRESN_DEFAULT.  This matches the
other source of old pointers (SetPointer()), and looks better on
320-wide VGA-type modes.

Now relies on the fact that the classic MoveSprite() off-by-one bug
(which we have to keep for compatibility) is fixed when dealing with
ExtSprites.  This is much simpler and preferable to figuring out what
"off-by-one" should be when dealing with variable sprite and bitmap
resolutions.  Along with a forthcoming graphics, this should fix all
sprite hot-spot errors with the exception of MaxOScan double-NTSC and
etc.  screens.

Took a small very safe optimization involving GetTagData() where the
default value is zero.
Intuition 39.2051:

Pointers installed via SetPointer() no longer have a sprite-hotspot
error.  (This should be the very last hotspot bug).

A timing hole in OpenScreen() and CloseScreen() could cause Intuition
to LoadView(NULL) even though there were screens that could be
displayed.  This can lead to unnecessary monitor resynching, or
enforcer hits in certain cases.

Intuition passes bad coordinates to MoveSprite() in certain cases
(eg. screen movement, depth-arrangement, opening/closing), which can
cause the pointer to jump momentarily.

Gadget Help no longer reports the mouse is in the window when it is
actually over the screen drag bar.
Intuition 39.2058:

Now avoid a possible infinite recursion between pointer changes and
RethinkDisplay().  This fixes a problem which kills DPaint 4.1 when
animation is stopped.
Intuition 39.2073:

Now detect screen bitmap depth-pokers.  Detection of this and bitplane
pokers now happens at MakeScreen() time as well as at RethinkDisplay().

If the graphics database tells Intuition that a mode is unavailable
for any reason other than no chips or no monitor, OpenScreen() will
now fail.  (This currently applies to modes that are unavailable with
genlock).  The error code will be OSERR_NOTAVAILABLE.
Intuition 39.2076:

Modified SetPointer() to do nothing if the window is in refresh.  Some
applications called SetPointer() inside of BeginRefresh() or
BeginUpdate(), which used to work.  Under V39, they had been
deadlocking.

Fixed definition of GTYP_GTYPEMASK in intuition.i.
Intuition 39.2082:

For an AUTOKNOB proportional gadget, an application must supply a
struct Image for Intuition's use.  It used to be unnecessary to
initialize this Image structure, since Intuition initialized all the
fields it cared about.  The test for IA_SupportsDisable (added for
V39) checks to see if an image is a custom image before sending it an
OM_GET method.  This test is checking if the Image Depth is
CUSTOMIMAGEDEPTH, which is -1.  An uninitialized Image structure could
have had this value, causing a system crash.  We no longer send OM_GET
to AUTOKNOB images.

EasyRequests once again open in the on-screen portion of an oversized
screen.  This was how V37 worked, and it fell out of V39 by accident.
Intuition 39.2084:

The menu code was checking FSF_TAGGED in ta_Flags instead of ta_Style.
Correcting this fixes support for tagged TextAttrs in Intuition menus.
