program test;

type Ptr = ^Integer;
    Foo = record a, b, c, d : Byte end;
    PFoo = ^Foo;

var x, y : Ptr;
    z : PFoo;

procedure PrintXY(n : Integer);
begin
    WriteLn(n:4, '. x = ', x^:6, ', y = ', y^:6)
end;

procedure PrintZ(n : Integer);
begin
    WriteLn(n:4, '. z = {', z^.a:6, ',', z^.b:6, ',', z^.c:6, ',', z^.d:6, '}');
end;

begin
    x := New(Ptr); x^ := 0;
    y := x;
    z := New(PFoo); z^.a := 0; z^.b := 0; z^.c := 0; z^.d := 0;
    PrintXY(1);
    Inc(x, 1);
    PrintXY(2);
    x^ := 123;
    PrintXY(3);
    x := @z^;
    PrintXY(4); PrintZ(4);
    x^ := 123456;
    PrintXY(5); PrintZ(5);
    Dispose(y);
    Dispose(z);
end.