[Oberon] FPGA - OberonV4 Dialogs
    Tomas Kral 
    thomas.kral at email.cz
       
    Thu Nov 29 19:53:52 CET 2018
    
    
  
On Thu, 29 Nov 2018 14:49:16 +0100
Tomas Kral <thomas.kral at email.cz> wrote:
> how to
> get to their pointers at run time?
How about this?
MODULE TLoader; (* TK  29.11.2018 RISC type init loader *)
  IMPORT In, Out, Modules;
  TYPE
    Object* = POINTER TO ObjDesc;
    ObjDesc* = RECORD
      i, j, k: INTEGER;
    END;
  VAR o: Object; (* scratch variable *)
  
  PROCEDURE Run*;
    VAR name: Modules.ModuleName; module: Modules.Module; Init: PROCEDURE;
  BEGIN In.Open; In.Name(name);
    WHILE In.Done DO
      Out.String(name); Out.String(" loading ");
      Modules.Load(name, module);
      Init := Modules.ThisCommand(module, "Init");
      IF Modules.res = 0 THEN Init() END ;
      In.Name(name); Out.Ln
    END;
  END Run;
  PROCEDURE SetObjPtr*(obj: Object);
  BEGIN o := obj
  END SetObjPtr;
BEGIN
END TLoader.
TLoader.Run M0 M1 ~
MODULE M0;
  IMPORT TLoader, Out;
  TYPE
    Item = POINTER TO ItemDesc;
    ItemDesc = RECORD(TLoader.ObjDesc)
      x, y, z: BYTE;
    END;
  VAR it0: Item;
  PROCEDURE Init*;
  BEGIN Out.String("Item0"); NEW(it0); TLoader.SetObjPtr(it0)
  END Init;
BEGIN
END M0.
MODULE M1;
  IMPORT TLoader, M0, Out;
  
  TYPE
    Item = POINTER TO ItemDesc;
    ItemDesc = RECORD(TLoader.ObjDesc)
      a, b, c: CHAR;
    END;
  VAR it1: Item;
  PROCEDURE Init*;
  BEGIN Out.String("Item1"); NEW(it1); TLoader.SetObjPtr(it1)
  END Init;
BEGIN
END M1.
-- 
Tomas Kral <thomas.kral at email.cz>
    
    
More information about the Oberon
mailing list