A:
unit Move1;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, wincrt;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
const
MaxLargeArr = 256;
MaxSmallArr = 128;
var
OfsArr, ArrayDest, ArraySource: ^byte;
i: integer;
begin
{ fill destination array with 0 1 2 3 4 5...}
ArrayDest := AllocMem(MaxLargeArr);
OfsArr := ArrayDest;
for i := 0 to MaxLargeArr - 1 do begin
OfsArr^ := i;
inc(OfsArr);
end;
{ fill source array with 127 126 125 124...}
ArraySource := AllocMem(MaxSmallArr);
OfsArr := ArraySource;
for i := MaxSmallArr - 1 downto 0 do begin
OfsArr^ := i;
inc(OfsArr);
end;
{ move destination array to the left 128 bytes }
OfsArr := ArrayDest;
inc(OfsArr, MaxSmallArr);
move(OfsArr^, ArrayDest^, MaxLargeArr - MaxSmallArr);
{ append source array ( 128 bytes ) }
inc(OfsArr, MaxLargeArr - (MaxSmallArr * 2));
move(ArraySource^, OfsArr^, MaxSmallArr);
{ print destination array }
OfsArr := ArrayDest;
for i := 0 to MaxLargeArr - 1 do begin
write(OfsArr^, ' ');
inc(OfsArr);
end;
{ free arrays }
FreeMem(ArrayDest, MaxLargeArr);
FreeMem(ArraySource, MaxSmallArr);
end;
end.