[Oberon] Oberon.Text and "Registry".

Jörg joerg.straube at iaeth.ch
Wed Jan 29 06:38:10 CET 2020


If you want to configure your SW you have at least three options. The following sample code demonstrates these options with an imaginary command "setaccount" of an imaginary mail client.

a) write own parser code to parse parameters handed over to the called command.

  IMPORT Oberon, Text;
  PROCEDURE setaccount;
    VAR S: Texts.Scanner;
    BEGIN (* no code for error handling *)
      Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(S);
      IF S.class = Texts.String THEN method := S.s; Text.Scan(S) END;
      IF S.class = Texts.String THEN account := S.s; Text.Scan(S) END;
      IF S.class = Texts.String THEN pw := S.s END
    END setaccount;

b) write a "registry" module that parses an external text file (eg. Oberon.Text). With the help of that registry module parse your entries in that external file and fill internal variables with the data you got from the registry.

  IMPORT Registry;
  PROCEDURE setaccount;
      Registry.GetEntry("Mail", "method", method);
      Registry.GetEntry("Mail", "user", account);
      Registry.GetEntry("Mail", "password", pw)
    END setaccount;
c) fill internal variables with the configuration data you hardcoded in your code. Basically, the compiler is the parser for your data (
  PROECDURE setaccount;
      method := "IMAP";
      account := "Joerg.Straube at iaeth.ch";
      pw := "CiaoBello"
    END setaccount;

As always all options have pros and cons.
Counter-intuitively, c) is sometimes the easiest and fastest method. c) can be used as the Oberon system allows separate compilation and dynamic loading/unloading of modules. c) is especially useful if the module you re-configure is not too low in the module hierarchy and you don't have to unload tons of other modules.

a) is usable in a lot of scenarios without the need for an external registry.

b) seems easy, but needs a module "Registry" to be written first. In an embedded system, where size matters and you perhaps only reconfigure very seldom or use Registry only for one parameter in your code, this Registry code overhead might be too big. BTW: I wrote a module Registry.Mod for ProjectOberon (


Am 29.01.20, 01:00 schrieb "oberon-bounces at lists.inf.ethz.ch im Auftrag von peter at easthope.ca" <oberon-bounces at lists.inf.ethz.ch im Auftrag von peter at easthope.ca>:

    S3 and A2O (is A2O an acceptable name for the Oberon subsystem of 
    A2?) are configured by content of the file Oberon.Text.
    V5 doesn't have Oberon.Text.  
    Can anyone tell how V2 and V4 were configured?
    The sources of S3 and A2O have scattered references to the "Registry".
    That is the content of Oberon.Text beginning with LinkSchemes?
    I've added "Oberon.Text" and "Registry" to 
    https://en.wikibooks.org/wiki/Oberon#Glossary .  Corrections welcome.
    Thanks,              ... Lyall E.
    Tel: +1 604 670 0140            Bcc: peter at easthope. ca
    Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems

More information about the Oberon mailing list