[Oberon] Library
Dan Parnete
parnete at aladata.it
Sun Aug 31 18:40:41 CEST 2003
Hello,
I'm writing a simple database engine based on Library. Practically I'm
collecting objects in lib and store libs in a database file. For now I
have a running version with volatile indexes, witch is a nice experience
with less the 5000 libs stored, but above that, building indexes on the
fly is no more funny. Expecialy do to an anoing problem with
Objects.LoadLibrary procedure.
I should like to do that:
PROCEDURE ReadLib*( f: Files.File, pos: LONGINT ): Objects.Library;
VAR i, len: LONGINT;
L: Objects.Library;
BEGIN
NEW( L ); Objects.OpenLibrary( L ); Objects.LoadLibrary( L, f,
pos+1, len );
RETURN L
END ReadLib;
But the result is:
TRAP 7 Index out of range in thread Oberon.Loop
Files.ReadString PC = 7278
R = 00411878H Files.Rider
ch = 00000020X
i = 64
x = "
" ...
Objects.LoadLibrary PC = 6475
@for = 8223
@for = 13
L = 014E0200H Objects.LibDesc
N = 8224
R = 00411878H Files.Rider
dict = 00000000H (Objects.ListDictDesc)
dorg = 595
entry = 00000000H (Objects.EntryDesc)
f = 01C1CA20H Files.File
gorg = 512
i = 14
ind = 014AAF40H Objects.ArrayIndexDesc
key = 8224
len = 597
n = 0
pos = 200017
version = 1380272450
DpsDb.ReadLib PC = 11734
L = 014E0200H Objects.LibDesc
ch = 00000000X
f = 01C1CA20H Files.File
fl = 00000000H (Files.File)
i = 0
len = 597
rl = 00411878H Files.Rider
size = 597
And is nothing wrong with the data because doing that:
PROCEDURE ReadLib*( size: LONGINT; f: Files.File; r: Files.Rider ):
Objects.Library;
VAR i, len: LONGINT;
ch: CHAR;
fl: Files.File; rl: Files.Rider;
L: Objects.Library;
BEGIN
fl := Files.New( "TempLib" ); Files.Set( rl, fl, 0 );
FOR i:=0 TO size-1 DO Files.Read( r, ch ); Files.Write( rl, ch ) END;
Files.Register( fl ); fl := Files.Old( "TempLib" );
NEW( L ); Objects.OpenLibrary( L ); Objects.LoadLibrary( L, fl, 1,
len );
RETURN L
END ReadLib;
works fine, but writing on disk when you just want to read, is very time
consuming. And if you use it to build and index, it's another nice mess.
Have any of you experienced this problem? I'm using Windows Plugin
version 14.05.2001 but it's the same on WinAos and Linux.
Thank you,
Dan Parnete
More information about the Oberon
mailing list