Toni Gorrengourt, TERRA Basel                 07-Jan-92, Ref. TB-920107.1
=========================================================================

Subject: BlockOps_BlockMove Problem when Running in Protected Mode
------------------------------------------------------------------

Note: This message is published only for information reasons.
      Later, we will provide a corrected version of the
      module 'BLOCKOPS.ASM'. Meanwhile you can use this version
      without problems since the bug occurs only in rare conditions
      in Protected Mode.

When running in proctected mode it may happen that BlockOps_BlockMove
does not move the block at all. BlockOps_BlockMove first tries to find
out whether a forward or backward move should be used (in order to copy
correctly if source and destination overlap). It does this by comparing
the normalized addresses. When running in protected mode, this distinction
would only be necessary when the selectors are identical. If they are
not, we may assume that there's no overlap (let's forget about aliasing)
and either method works correctly. Therefore, the normalization does
no harm, and all that code works correctly in protected mode, too.
However, the current implementation of BlockOps_BlockMove decides that
there is no need to do anything if the NORMALIZED addresses are equal.
While this optimization is fine in real mode, it is in general not
allowed in protected mode (two addresses with different selectors are
never the same, even if their "normalizations" by chance are identical).

Possible alternatives for a correction:

(a) Remove this probelmatic optimization by deleting the line
	JE	MVEPILOG	; dst = src, no action
    in front of label "WARD:".
    In addition, one could do a real/protected mode independent
    optimization by comparing the ORIGINAL source and destination
    addresses.

(b) Use conditional assembly to distinguish OS/2 and Windows version
    from real mode DOS version. (--> Different object files for DOS
    and Windows).

                                * * *
