[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]
{
William Schroeder wrote in a message to All:
WS> PROCEDURE CopyScreen(First, Second, Mask: Byte);
WS> BEGIN
WS> Move(VirtualScreen[First],VirtualScreen[Second],64000);
WS> END;
I would suggest that you use First and Second as Pointers as opposed to Bytes
and pass the address of your screens.
Try this procedure and see what this does for ya.
--------------------------------------------------------------------------
}
Program Mask;
Var
s1, s2 : String;
Procedure CopyMask(Org, Dst: Pointer; Size: Word; Mask: Byte); Assembler;
ASM
PUSH DS
LDS SI, Org
LES DI, Dst
MOV CX, Size
MOV BL, Mask
@@1: LODSB
CMP AL, BL
JNZ @@2
INC DI
JMP @@3
@@2: STOSB
@@3: LOOP @@1
POP DS
End;
Begin
s1 := 'Hello';
s2 := 'XXXXXXXXX';
CopyMask(@s1, @s2, 255, Byte('l'));
WriteLn(s1);
WriteLn(s2);
End.
-------------------------------------------------------------------------
If you run this program, you'll notice that s1 ('Hello') is copied to s2 with
the exception that 'l' was not copied giving s2 a value of 'HeXXo'. Be
carefull in using this on Pascal type strings, because byte[0] (the length
byte) is also "masked".
In order for you to use this procedure for your virtual screens, you would have
to call it passing the address of your screens. Example:
CopyMask(@VirtualScreen[first], @VirtualScreen[Second], 64000, Mask);
David
[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]