program CopyArray;
{$ModeSwitch advancedrecords}
type
TOneBit = 0..1;
{ TPackedBoolRec }
TPackedBoolRec = bitpacked record
b0, b1, b2, b3, b4, b5, b6, b7: TOneBit;
procedure Init(a0, a1, a2, a3, a4, a5, a6, a7: Boolean);
procedure Report;
end;
T2DArr = array of array of TPackedBoolRec;
procedure ShowArray(anArray: T2DArr);
var
r, c: Integer;
begin
for r := Low(anArray) to High(anArray) do
begin
for c := Low(anArray[0]) to High(anArray[0]) do begin
Write('(', r, ',', c, ')');
anArray[r,c].Report;
end;
end;
end;
var
A, B: T2DArr;
r, c, i: Integer;
const
dimR = 10;
dimC = 2;
{ TPackedBoolRec }
procedure TPackedBoolRec.Init(a0, a1, a2, a3, a4, a5, a6, a7: Boolean);
begin
b0:=Byte(a0); b1:=Byte(a1); b2:=Byte(a2); b3:=Byte(a3);
b4:=Byte(a4); b5:=Byte(a5); b6:=Byte(a6); b7:=Byte(a7);
end;
procedure TPackedBoolRec.Report;
begin
Write('b0 ',Boolean(b0),', b1 ',Boolean(b1),', b2 ',Boolean(b2),', b3 ',Boolean(b3),
', b4 ',Boolean(b4),', b5 ',Boolean(b5),', b6 ',Boolean(b6));
WriteLn(', b7 ',Boolean(b7));
end;
begin
SetLength(A, dimR, dimC);
for r := Low(A) to High(A) do
for c := Low(A[0]) to High(A[0]) do begin
for i:=0 to 7 do
case i of
0: A[r, c].b0 := Byte(Odd(r) or Odd(c) and Odd(i));
1: A[r, c].b1 := Byte(Odd(r) or Odd(c) or Odd(i));
2: A[r, c].b2 := Byte(Odd(r) or Odd(c) and Odd(i));
3: A[r, c].b3 := Byte(Odd(r) or Odd(c) or Odd(i));
4: A[r, c].b4 := Byte(Odd(r) or Odd(c) and Odd(i));
5: A[r, c].b5 := Byte(Odd(r) or Odd(c) or Odd(i));
6: A[r, c].b6 := Byte(Odd(r) or Odd(c) and Odd(i));
7: A[r, c].b7 := Byte(Odd(r) or Odd(c) or Odd(i));
end;
end;
WriteLn('------------- A -------------');
ShowArray(A);
WriteLn;
WriteLn('------------- B -------------');
SetLength(B, dimR, dimC);
B:=Copy(A); // or B:=A; if you prefer
ShowArray(B);
end.