[Oberon] FPGA - DIY Dialogs

Tomas Kral thomas.kral at email.cz
Tue Jan 15 17:02:50 CET 2019

On Mon, 14 Jan 2019 11:26:27 +0100
Jörg Straube <joerg.straube at iaeth.ch> wrote:

> So while storing the list, first store the constant object elements
> if the object is not stored already (so you have to remember whether
> you stored an object’s instance already) and then store the list
> elements.


Thanks. I keep unique names in an array, referring to them by an
index, or if first instance by index+name. Testing it.

This sets a fixed limit on numer of object types (frames, buttons, text boxes, ...) e.g. max 16. While INTEGER number of instances. 
I would like to keep unique name list instead, reading from the root and adding at an end. But not sure what is better.

The file has this format { id [name] x y w h [obj properties] }

  PROCEDURE ReadObjName(VAR r: Files.Rider; VAR mod: ObjName);
    VAR id: BYTE; mods: ARRAY 16 OF ObjName;
  BEGIN Files.ReadByte(r, id);
    IF id = end THEN Files.ReadString(r, mod); mods[id] := mod; INC(end)
    ELSE mod := mods[id] END
  END ReadObjName;

  PROCEDURE WriteObjName(VAR r: Files.Rider; mod: ObjName);
    VAR id: BYTE; found: BOOLEAN; mods: ARRAY 16 OF ObjName;
  BEGIN  found := FALSE; id := 1;
    WHILE ~ found & (id < end) DO
      IF mod = mods[id] THEN found := TRUE END ; INC(id)
    END ;
    Files.WriteByte(r, id);
    IF ~ found THEN Files.WriteString(r, mod); mods[id] := mod; INC(end) END
  END WriteObjName;

Tomas Kral <thomas.kral at email.cz>

More information about the Oberon mailing list