I have found a couple of apparent bugs in GPC:
1. Debugger and objects.
------------------------------
There appears to be an error in debug entries generated for objects.
When viewing
object fields under the debugger, the wrong values are shown for the
right field.
If I set a breakpoint at the end of the constructor and examine *Self, I
get
*Self: {One = 74404, Two = 1, Three = 2}
program bad;
type
MyObject = object
One : Integer;
Two : Integer;
Three : Integer;
constructor init;
end;
var
x : MyObject;
constructor MyObject.init;
begin
One := 1;
Two := 2;
Three := 3;
end;
begin
x.init;
end.
Direct Access Files
-----------------------
There appears to be some discrepancy between record numbering for
reading and writing.
To read record n, I specify SeekRead(n). But to write record n, I
specify SeekWrite(n).
When I execute the following program, I get:
Created File
0 : 0
1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
Modified file at position 0 to 55
Modified file at position 2 to 66
Modified file at position 6 to 77
0 : 0
1 : 66
2 : 2
3 : 3
4 : 4
5 : 77
PROGRAM Bad1;
TYPE
DAFile = File [0..5] of Integer;
VAR
MyFile : bindable DAFile;
procedure AssignFile;
var
b : BindingType;
begin
unbind(MyFile);
b := binding(MyFile);
b.name := 'test.dat' + chr(0);
bind(MyFile,b);
end;
procedure CreateFile;
var
i : Integer;
begin
AssignFile;
Rewrite(MyFile);
for i := 0 to 5 do
Write(MyFile,i);
Close(MyFile);
end;
procedure ModifyFile(index : Integer; val : Integer);
var
pos : Integer;
begin
AssignFile;
SeekWrite(MyFile,Index);
pos := Position(MyFile);
Write(MyFile,val);
Close(MyFile);
Writeln('Modified file at position ',pos,' to ',val);
end;
procedure PrintFile;
var
i,val,pos : Integer;
begin
AssignFile;
for i := 0 to 5 do
begin
SeekRead(MyFile,i);
pos := Position(MyFile);
Read(MyFile,val);
WRITELN(pos,' : ',val);
end;
Close(MyFile);
end;
begin
CreateFile;
WRITELN('Created File');
PrintFile;
ModifyFile(0,55);
ModifyFile(2,66);
ModifyFile(6,77);
PrintFile;
end.
TurboVision
---------------
I was surprised to see that the Turbo Vision source code is in C++ and I
see that
Turbo Vision is still in the TO DO list for GPC.
Whats the current situation?
I presume that GPC can't access Gnu C++ classes. Therefore someone needs
to
either write a wrapper or to convert the C++ classes into PASCAL
objects.
Is anyone currently working on a port?
Turbo Vision is fairly important to me so I'd be interested porting it
to GPC.
Russell Thamm