Выполнение команд-фильтров (команда <EXEC>)
Такие полезные операции над текстами, как сортировка,
выравнивание параграфов текста, структуризация текстов программ на "Си" и другие, выполняются командами операционной системы ДЕМОС. Редактор red позволяет использовать такие команды для переработки части файла с помощью команды <EXEC>. Например, для контекстной замены int на short в очередных 10 строках файла служит команда:
<ARG>10l rpl "int" "short"<EXEC>
После этого в очередных 10 строках произойдет замена текста
int на short, которую выполнит команда ДЕМОС "rpl", написанная специально для red. Можно вызывать любые команды, которые могут использоваться как фильтр. Например:
cb | - улучшение читаемости программы на Си, |
sort | - сортировка |
Команда <EXEC> может выполняться в одном из следующих форматов:
<ARG><ч.п> <команда> <с.п.><EXEC>
либо
<ARG>-<ч.c.><команда> <с.п.><EXEC>
либо
<ARG><ч.с.>l <команда> <с.п.><EXEC>
где <ч.п.> - число параграфов,
<ч.с.> - число строк,
<с.п.> - список параметров.
Причем <число строк> или <список параметров> могут отсутствовать.
Первый (необязательный) аргумент формата определяет число строк либо параграфов за текущей строкой в файле, которые будут обрабатываться командой. Параграфы - это группы непустых строк, разделенные одной или несколькими пустыми строками. Целое неотрицательное число указывает число параграфов. если число отрицательно или за ним следует буква l -
оно указывает число строк. Если первый аргумент опущен, то имеется в виду 1 параграф текста. Таким образом, -15 или 15l задают 15 строк текста, а 2 - 2 параграфа.
Второй аргумент - имя команды операционной системы, за которым могут идти ее аргументы, разделенные пробелами. Для включения пробелов в аргумент можно использовать кавычки ".
Действие <EXEC> состоит в том, что вызывается указанная команда операционной системы с указанными параметрами. На стандартный ввод ей подаются заданные строки. Если команда выполнилась нормально, то указанные строки в файле заменяются на стандартный вывод команды. Старые строки помещаются в CLOSE-буфер.