Посмотрел, вариант в целом интересный. Особенно раздел CONST. : ) Ну, да ладно, это детали реализации.

Я тоже написал свой вариант. У меня получилась подсистема Cfg. Я постарался сделать ее с прицелом на возможность прозрачной работы с реестром и прочими хранилищами. Не знаю, насколько у меня это получилось.

Краткое описание:
Модуль CfgBase содержит абстрактный тип Group, представляющий некую группу параметров. Общий принцип: хранение параметров в виде пар "имя-значение". Каждый параметр однозначно идентифицируется именем (строка) и содержит строковое значение. Методы: GetVal, SetVal, DeleteKey.
Предполагается, что конечному пользвателю услуг модуля (т.е. тому объекту, который будет сохранять или читать свои свои параметры) достаточно передать экземпляр объекта CfgBase.Group, и он по имени найдет интересующие его значения. Остальное его не касается.

Модуль CfgIni содержит типы Section(CfgBase.Group) и File.
Тип Section представляет поименованную секцию ini-файла и реализует хранение параметров и доступ к ним. Экспортированные процедуры - те же, что в CfgBase.Group, ничего нового.
Тип File представляет набор секций (даже загруженных из нескольких разных файлов и прочих источников). Экспортированы следующие методы: FindSection, GetSection, DeleteSection, Load, Save.
File.FindSection отличается от File.GetSection тем, что последний никогда не вернет NIL. GetSection создает секцию с указанным именем, если она не существует в файле.
Методы Load и Save в качестве параметра принимают объект типа CfgIni.Reader и CfgIni.Writer соотвественно.
Типы Reader и Writer - абстрактные интерфейсы, экспортирующие по одной процедуре (экспорт только для реализации): ReadLine и WriteLine соответственно. Реализация данных райдеров вынесена в модуль CfgIniRiders.

Модуль CfgIniRiders реализует два типа: TextReader(CfgIni.Reader) и TextWriter(CfgIni.Writer). Эти типы поддерживают работу с TextModels.Reader и TextModels.Writer соответственно. При желании работать с другими носителями данных (например, с файлами напрямую), можно добавить в этот модуль реализацию нужных райдеров.

Модуль MateConfig используется в подсистеме Mate для сохранения настроек посредством подсистемы Cfg. В этом модуле мы решили, что хотим 1) работать с ini-файлами, а не, например, реестром; 2) работать через текстовые объекты TextModels.Model, а не, например, прямо с файлом. Оба эти решения локализованы в данном модуле и могут быть изменены без какой-либо правки клиентских модулей или подсистемы Cfg.

Клиенты модуля MateConfig в моем случае - это различные диалоговые окна, сохраняющие последние данные между запусками программы. Вот общий паттерн для их реализации:

## Код:
```
MODULE MatePortDlg;

   IMPORT Dialog, CfgBase, CfgMapper, MateConfig, ...;

   CONST
      iniSection = 'MatePortDlg'; (* имя модуля - уникальный идентификатор секции *)

   VAR
      rec*: RECORD
         port*: Dialog.String;
         x*: INTEGER (* это просто для примера *)
      END;

   PROCEDURE GetSection (): CfgBase.Group;
   BEGIN
      RETURN MateConfig.GetSection(iniSection)
   END GetSection;

   PROCEDURE LoadSettings ();
      VAR
         g: CfgBase.Group;
         val: POINTER TO ARRAY OF CHAR;
   BEGIN
      g := GetSection();
      g.GetVal('ComPort', val);
      IF val = NIL THEN
         Dialog.MapString('#Mate:Com1,19200', rec.port)
      ELSE
         rec.port := val$
      END;
      rec.x := CfgMapper.GetInt(g, 'x', rec.x)
   END LoadSettings;

   PROCEDURE SaveSettings ();
      VAR g: CfgBase.Group;
   BEGIN
      g := GetSection();
      g.SetVal('ComPort', rec.port$);
      CfgMapper.SetInt(g, 'x', rec.x)
   END SaveSettings;

(* ...различные процедуры модуля... *)

BEGIN
   LoadSettings()
END MatePortDlg.
```


Саму подсистему в стандартнокодированном виде выложил сюда:Cfg.

Всяческая критика, особенно конструктивная, категорически приветствуется!