|
@@ -0,0 +1,56 @@
|
|
|
+{$mode macpas}
|
|
|
+
|
|
|
+program packed_offset_bug;
|
|
|
+
|
|
|
+type
|
|
|
+ SInt16 = integer;
|
|
|
+ Point = record
|
|
|
+ case SInt16 of
|
|
|
+ 0: (
|
|
|
+ v: SInt16;
|
|
|
+ h: SInt16;
|
|
|
+ );
|
|
|
+ 1: (
|
|
|
+ vh: array [0..1] of SInt16;
|
|
|
+ );
|
|
|
+ end;
|
|
|
+ PointPtr = ^Point;
|
|
|
+ Rect = record
|
|
|
+ case SInt16 of
|
|
|
+ 0: (
|
|
|
+ top: SInt16;
|
|
|
+ left: SInt16;
|
|
|
+ bottom: SInt16;
|
|
|
+ right: SInt16;
|
|
|
+ );
|
|
|
+ 1: (
|
|
|
+ topLeft: Point;
|
|
|
+ botRight: Point;
|
|
|
+ );
|
|
|
+ end;
|
|
|
+ RectPtr = ^Rect;
|
|
|
+
|
|
|
+var
|
|
|
+ gMeasStrs: packed array[1..64] of string[4];
|
|
|
+ gMeasStrRects: array[1..64] of Rect;
|
|
|
+
|
|
|
+var
|
|
|
+ i,j,k: longint;
|
|
|
+begin
|
|
|
+ writeln( 'SizeOf gMeasStrs) = ', SizeOf( gMeasStrs));
|
|
|
+ writeln( 'SizeOf gMeasStrRects) = ', SizeOf( gMeasStrRects));
|
|
|
+ writeln( 'Offset gMeasStrs[ 1 ] = ', ptruint( @gMeasStrs[ 1]) -ptruint( @gMeasStrs));
|
|
|
+ writeln( 'Offset gMeasStrs[ 64, 4] = ', ptruint( @gMeasStrs[ 64, 4]) - ptruint( @gMeasStrs));
|
|
|
+ writeln( 'Offset gMeasStrRects = ', ptruint( @gMeasStrRects) - ptruint( @gMeasStrs));
|
|
|
+ i:=1;
|
|
|
+ j:=64;
|
|
|
+ k:=4;
|
|
|
+ if (SizeOf( gMeasStrs) <> 320) or
|
|
|
+ (SizeOf( gMeasStrRects) <> 512) or
|
|
|
+ (ptruint( @gMeasStrs[ 1]) - ptruint( @gMeasStrs) <> 0) or
|
|
|
+ (ptruint( @gMeasStrs[ 64, 4])- ptruint( @gMeasStrs)<>319) or
|
|
|
+ (ptruint( @gMeasStrs[ i]) - ptruint( @gMeasStrs) <> 0) or
|
|
|
+ (ptruint( @gMeasStrs[ j, k])- ptruint( @gMeasStrs)<>319) then
|
|
|
+ halt(1);
|
|
|
+end.
|
|
|
+
|