Программа zam Производит в файле замены по списку. zam <входной файл> <выходной файл> {<файл-список замен>[+]} [ключи] Формат списка замен: Первый же _видимый_ (старше пробела) символ является _для_данной_ замены разделителем. Если в следующей позиции он повторяется, то следующий символ является _для_данной_ замены апострофом кода, то есть, если в теле замены встретится такой символ и вслед за ним две шестнадцатеричные цифры, то эта последовательность рассматривается как один символ, код которого - число из этих двух цифр. По умолчанию апостроф кода - \. Однако, если третьим символом снова стоит ограничитель, т.е. если ограничитель является апострофом, то это уже не замена. Все оставшиеся символы в файле замен являются комментариями. Последовательность _байтов_ (0..255) до следующего разделителя является аргументом поиска. Последовательность _байтов_ (0..255) до следующего разделителя является аргументом замены. Далее разделитель теряет свою силу. Остаток строки после содержит дополнительную информацию о данной замене: Оператор сдвига вида <квадратная скобка><целое со знаком> определяет сдвиг относительно заменившей последовательности для начала следующего поиска замены. Открывающая квадратная скобка означает сдвиг относительно начала заменившей последовательности, закрывающая (может быть опущена) ─ относительно её конца. Число определяет величину сдвига. Отсутствие оператора сдвига равносильно оператору "]0". После оператора сдвига может следовать: {!выводимый текст}{?<ДН>заменить}{|X>60}комментарий Фигурные скобки в любом порядке. Последняя ─ условие выполнения замены. | ─ префикс-признак условия (ради будущего ─ может, будут и другие условия). X ─ переменная (пока единственная) ─ координата в строке начала образца замены. После X ─ (знак <, > или =) и целое число без знака. ... Условий может быть несколько (и-или?). Печатаемый текст направляется на стандартное устройство (>filename) если замена состоялась. Последующие за этим числом и все вообще невидимые символы между третьим разделителем и ближайшим за ним CR игнорируются как комментарий, т.е. следующая замена в списке описывается со следующей строки. Пример: строка "абв" преобразуется по списку /а/б/ а на б |б|в| б на в \в\г\ в на г в строку "бвг", по списку \а\б\-1 а на б \б\в\-1 б на в \в\г\-1 в на г в строку "ггг". Ограничения: длина файла замен произвольная длина входного файла ─ любая