столкнулся с непроходимой трудностью. при компиляции данного кода:
## Код:
```
PROCEDURE (h: Handler) Do* (op: INTEGER; f, g: Views.Frame; VAR msg: Views.CtrlMessage; VAR mark, front, req: BOOLEAN);
<...>   WITH msg: CursorMessage DO
            msg.x := msg.x + f.gx - g.gx;
            msg.y := msg.y + f.gy - g.gy
         ELSE
         END
<...>
   END Do;
```

компилятор выдаёт:
## Код:
```
402                                 msg.x := msg.x + f.gx - g.gx;
**** This variable is read-only------^
 403                                 msg.y := msg.y + f.gy - g.gy
**** This variable is read-only------^
```


казалось бы, VAR параметр. и если написать тестовый модуль, то компилятор пропускает такую конструкцию:

## Код:
```
PROCEDURE DoMy*(VAR m: MyMsg);
   BEGIN
      m.x:=0;
   END DoMy;
```

однако стоит ввести абстрактный/расширяемый тип записи и оформить процедуру вот так:
## Код:
```
PROCEDURE Do*(VAR m: Msg);
   BEGIN   
      WITH m: MyMsg DO
         m.x:=0;
      ELSE END;
   END Do;
```

получим то же самое предупреждение от компилятора:
## Код:
```
14                         m.x:=0;
**** ------------------------^ This variable is read-only
```


собственно, такое поведение описано в ReleaseNotes
> -- Цитата:
> The semantics of the WITH statement have been slightly modiﬁed so as to strengthenthe guarantees on the properties of the selected variable. In the code —WITH x : TypeTi DO... (* guarded region *)| x : TypeTj DO... (* guarded region *)END;the variable x is asserted to have the speciﬁed type throughout the so-called guardedregion. The base language guarantees that the type of the selected variable cannot be“widened” in the guarded region, but might possibly be narrowed. In gpcp the selectedvariable is treated as a constant, and neither the type nor the value can be modiﬁedeither directly or indirectly. Any attempt to do so attracts a compile-time error message.

это сводит все возможности реализации хоть какого-то подобия ББ к нулю, потому что, если посмотреть код хэндлеров сообщений реализаций Views.View то мы увидим, что в половине из них присваиваются значения внутри секций WITH а значит код становится непотрируемым. проще говоря, если у меня не получится просто взять и перетащить свой прикладной модуль без правок в будущий возможный клон GPCP то этот клон не имеет смысла.
такие вот дела.