brsmith@umn-cs.CS.UMN.EDU (Brian R. Smith) (12/31/88)
I think we've found a bug in Sequent Pascal - could someone verify this? The elements of a multi-dimensional packed arrays are not addressed properly when they can be represented in 4 bits or less. The real credit for this goes to Larry Lemay (lemay@umn-cs) who was just trying to do some graphics printouts. Example: with var foo: packed array[0..7,0..7] of boolean; { or array[0..7] of packed array[0..7] of boolean; - same thing.} foo[0,1] = foo[1,0], always foo[0,2] = foo[1,1] = foo[2,0], always foo[0,3] = foo[1,2] = foo[2,1] = foo[3,0], always etc. a 1 bit offset where there should be a 1 BYTE offset. and with var foo: packed array[0..7,0..7] of 0..3; foo[0,2] = foo[1,0], always foo[0,3] = foo[1,1], always foo[0,4] = foo[1,2] = foo[2,0], always etc. a 4 bit offset where there should be a 2 byte offset. Try it. ------------------------------ program simpletest(input,output); var A: array[0..7] of packed array[0..7] of 0..15; i,j: integer; begin for i:= 0 to 7 do begin for j:= 0 to 7 do A[i,j]:=i+j; end; for i:= 0 to 7 do begin for j:= 0 to 7 do begin write(A[i,j]:3); if A[i,j]<>i+j then write('*') else write(' '); end; writeln; end; end. ------------------------------ Brian brsmith@umn-cs.cs.umn.edu U of MN CSci dept.