Долго думал, и додумался:

В модуль типа In
(сам In я предпочитаю не трогать по той же причине, по какой его не трогали авторы ББ; у меня для этих целей есть стандартная замена i21sysIn)
добавить средство типа "открыть входной поток"
и оно делает потоком ввода выделенный фрагмент текста в окне с фокусом (точнее, его копию).

А потом программа (которая вызывается из меню или командиром в другом документе) не открывает поток, а только, если надо, читает с начала (Restart).
Все старые рутины (т.е. уже налаженные программы с командирами и данными, организованными по старой схеме) сохраняются и работают.

Плюс явно экспортирован сканер, чтобы полноценно сканить поток ввода.

## Код:
```
DEFINITION i21sysIn;

   IMPORT TextModels, TextMappers;

   VAR
      Done-: BOOLEAN;
      done-: BOOLEAN;
      scanner: TextMappers.Scanner;

   PROCEDURE Char (OUT ch: CHAR);
   PROCEDURE Int (OUT i: INTEGER);
   PROCEDURE LongInt (OUT l: LONGINT);
   PROCEDURE Name (OUT name: ARRAY OF CHAR);
   PROCEDURE Open;
   PROCEDURE OpenText (text: TextModels.Model; beg, end: INTEGER);
   PROCEDURE Real (OUT x: REAL);
   PROCEDURE Restart;
   PROCEDURE String (OUT str: ARRAY OF CHAR);

END i21sysIn.
```


Прилагаю текущий вариант i21sysIn (он во всех комплектах на предполагаемом диске, их я попозже отдельно выложу на сайте, пусть бета-тестеры трапы поищут, чтобы сразу исправить).