mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-21 00:09:33 +02:00
no message
This commit is contained in:
parent
c08ec5fbf3
commit
085d1e6f12
98
tests/webtbs/tw3540.pp
Normal file
98
tests/webtbs/tw3540.pp
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
{ %cpu=i386 %opt=-s -Amasm -TWin32 -Rintel}
|
||||||
|
{ Source provided for Free Pascal Bug Report 3540 }
|
||||||
|
{ Submitted by "Vladimir Panteleev" on 2005-01-11 }
|
||||||
|
{ e-mail: thecybershadow@gmail.com }
|
||||||
|
library Test;
|
||||||
|
|
||||||
|
type
|
||||||
|
Integer=LongInt;
|
||||||
|
|
||||||
|
ULONG=Cardinal;
|
||||||
|
PUCHAR=PChar;
|
||||||
|
|
||||||
|
type
|
||||||
|
TMyVars=record
|
||||||
|
RandSeed: Integer;
|
||||||
|
SX: Integer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TMyData=record
|
||||||
|
SomeConst: Integer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
RMyData:TMyData=(
|
||||||
|
SomeConst: 31337;
|
||||||
|
);
|
||||||
|
|
||||||
|
{$R-,Q-}
|
||||||
|
|
||||||
|
function CalcAddr(const V):Pointer;stdcall;assembler;
|
||||||
|
var
|
||||||
|
P: Integer absolute V;
|
||||||
|
asm
|
||||||
|
call @@next
|
||||||
|
@@next:
|
||||||
|
pop eax
|
||||||
|
sub eax, offset @@next
|
||||||
|
add eax, P
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
PMyVars=^TMyVars;
|
||||||
|
|
||||||
|
var
|
||||||
|
RMyVars: TMyVars;
|
||||||
|
|
||||||
|
function MyVars:PMyVars;
|
||||||
|
begin MyVars:=CalcAddr(RMyVars) end;
|
||||||
|
|
||||||
|
type
|
||||||
|
PMyData=^TMyData;
|
||||||
|
|
||||||
|
function MyData:PMyData;
|
||||||
|
begin MyData:=CalcAddr(RMyData) end;
|
||||||
|
|
||||||
|
procedure VidBufferToScreenBlt(Buffer:PUCHAR; x:ULONG; y:ULONG; width:ULONG; height:ULONG; lDelta:ULONG); stdcall; external;
|
||||||
|
type TPalette=array[0..15,0..3]of byte;PPalette=^TPalette;
|
||||||
|
function Palette:PPalette; external;
|
||||||
|
|
||||||
|
type
|
||||||
|
TBitmapInfo=record
|
||||||
|
Width, Height: Word;
|
||||||
|
Bits: Pointer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure DrawBitmap(X, Y: Integer; const Bitmap: TBitmapInfo);
|
||||||
|
begin
|
||||||
|
VidBufferToScreenBlt(CalcAddr(Bitmap.Bits^), X, Y, Bitmap.Width, Bitmap.Height, 4);
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
test_palette: TPalette = (
|
||||||
|
($00, $00, $00, 0),
|
||||||
|
($80, $00, $00, 0),
|
||||||
|
($00, $80, $00, 0),
|
||||||
|
($80, $80, $00, 0),
|
||||||
|
($00, $00, $80, 0),
|
||||||
|
($80, $00, $80, 0),
|
||||||
|
($00, $80, $80, 0),
|
||||||
|
($80, $80, $80, 0),
|
||||||
|
($C0, $C0, $C0, 0),
|
||||||
|
($FF, $00, $00, 0),
|
||||||
|
($00, $FF, $00, 0),
|
||||||
|
($FF, $FF, $00, 0),
|
||||||
|
($00, $00, $FF, 0),
|
||||||
|
($FF, $00, $FF, 0),
|
||||||
|
($00, $FF, $FF, 0),
|
||||||
|
($FF, $FF, $FF, 0));
|
||||||
|
|
||||||
|
procedure Draw; stdcall;
|
||||||
|
var
|
||||||
|
i:integer;
|
||||||
|
x1,y1,x2,y2:integer;
|
||||||
|
begin
|
||||||
|
Palette^:=TPalette(CalcAddr(Test_palette)^);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user