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