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

(.,.)u
Команда аннулирования восстанавливает буфер,
возвращая его в состояние, которое он имел перед
последней командой модификации буфера. Положение
текущей строки также восстанавливается. Команда-


144
АПК 00210-01 33 01-4

ми, модифицирующими буфер, являются "a, c, d, g,
i, k и v". При анулировании "g" и "v" рассматри-
ваются как одиночные команды модификации буфера.
Команда анулирования является инверсной по
отношению к самой себе. Когда редактору ed не
хватает памяти, полное аннулирование невозможно,
и команда "u" может аннулировать только влияние
последней подстановки в текущей строке. Такое
ограниченное аннулирование относится также и к
командным файлам редактора, когда ed вызывается
с ключем "-".

(1,$)v/регулярное выражение/список команд
Эта команда аналогична команде "g", за исключе-
нием того, что список команд выполняется при на-
чальной установке "." на каждую строку кроме
тех, которые соответствуют регулярному выраже-
нию.

(1,$)w имя_файла
Команда записи записывает адресуемые строки в
указанный файл. Если файл не существует, он соз-
дается. Имя файла запоминается, если еще не было
запомненного имени. Если имя файла не задается,
используется запомненное имя файла, если оно
имеется (см. команды "е" и "f"). Положение "."
не изменяется. Если данная команда выполнилась
успешно, печатается количество записанных симво-
лов.


145
АПК 00210-01 33 01-4

(1,$)W имя_файла
Эта команда аналогична команде "w", за исключе-
нием того, что адресуемые строки добавляются к
файлу.

(1,$)WQ имя_файла
Эта команда аналогична команде "w", за исключе-
нием того, что затем выполняется команда "q",
осуществляющая выход из редактора после записи
файла.

x Из стандартного ввода запрашивается строка с
ключом. Впоследствии команды "r", "e" и "w"
будут зашифровывать и расшифровывать текст с по-
мощью алгоритма "crypt", используя этот ключ.
Пустой ключ отменяет режим шифрации.

(.+1)z
или
(.+1)zn

Эта команда используется для просмотра буфера,
начиная с исходной строки. Распечатывается 22
(или "n", если указано) строки. Последняя напе-
чатанная строка становится текущей строкой. Зна-
чение "n" запоминается, т.е. оно становится
стандартным для последующих команд "z".

($)= Распечатывается номер строки для адресуемой
строки. Эта команда не меняет положения ".".

146
АПК 00210-01 33 01-4

!<команда языка управления заданиями>
Часть строки после "!" передается sh для выпол-
нения в качестве команды. Положение "." не меня-
ется.

(.+1,.+1) <конец строки>
Одиночный адрес в строке вызывает распечатку ад-
ресуемой строки. Пустая строка эквивалентна
".+1р". Это полезно для прохода по тексту. Если
указывается два адреса, не разделяемые точкой с
запятой, редактор ed распечатывает указанный ди-
апазон строк. Если они разделены точкой с запя-
той, распечатывается вторая строка.

Если посылается сигнал прерывания, редактор ed печата-
ет "?interrupted" ("?прерван") и возвращается в ко-
мандный режим.

Некоторые размерные ограничения: 512 символов в стро-
ке, 256 символов в списке команд для команды "g", 64
символа в имени файла. Предел количества строк зависит
от размера оперативной памяти: каждая строка занимает
2 слова.

При чтении файла ed отбрасывает символы nul кода КОИ-8
и все символы после последнего символа новой строки.

ФАЙЛЫ:
/tmp/e*
edhup

147
АПК 00210-01 33 01-4

При зависании терминала здесь сохраняется протокол вы-
полненной работы.

ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ:
sed, crypt

ДИАГНОСТИКА:
"?name" для недоступного файла.
"?" при прочих ошибках.

Для предотвращения потери ценной информации команды
"q" и "е" считаются ошибочными, если после последней
модификации буфера не была выдана команда "w". Повтор-
ная команда "q" или "е" выполняется всегда.

ЗАМЕЧАНИЯ:
Команда "l" неправильно обрабатывает символ "del"
("забой").

Команда аннулирования приводит к потере меток в
восстановленных строках.






148
АПК 00210-01 33 01-4

ИМЯ:
expand, unexpand - развернуть (свернуть) символы табу-
ляции.

ФОРМАТ:
expand [-табстоп] [-таб1, таб2, ..., табN] [файл ... ]
unexpand [-a] [файл ... ]

ОПИСАНИЕ:
Команда expand обрабатывает указанные файлы или стан-
дартный ввод и производит запись в стандартный вывод,
заменяя символы табуляции на пробелы. Символы возврата
на шаг в выводе сохраняются и уменьшают счетчик пози-
ций для связанных с табуляцией расчетов. Команда
expand полезна для предварительной обработки символь-
ных файлов, содержащих символы табуляции (перед сорти-
ровкой, просмотром определенных столбцов и т.п.).

Если задан единственный параметр "табстоп", размер та-
буляции устанавливается равным "табстоп" пробелам
вместо стандартного значения 8. Если задано несколько
табуляционных остановов, позиции табуляции устанавли-
ваются в указанных столбцах.

Команда unexpand заменяет последовательности пробелов
на символы табуляции, читая исходные данные из стан-
дартного ввода или (если заданы файлы) из указанных
файлов. Если задан ключ "-a", символы табуляции встав-
ляются везде,где это возможно. По умолчанию unexpand
заменяет на символы табуляции только первые пробелы.


149
АПК 00210-01 33 01-4

ИМЯ:
expr - вычисление параметров как выражения.

ФОРМАТ:
expr парам ...

ОПИСАНИЕ:
Параметры рассматриваются как выражение. После вычис-
ления результат записывается в стандартный вывод.
Каждый член выражения представляет собой отдельный па-
раметр.

Oперации и ключевые слова. Этот список составлен в по-
рядке возрастания старшинства операций.Oперации с оди-
наковым старшинством сгруппированы:

Выр ! выр
Выводит первое выражение "выр", если оно не пус-
тое и не равно "0", в противном случае выводит
второе выражение;

Выр & выр
Если ни одно из выражений не является пустым или
"0", выводит первое выражение, в противном слу-
чае выводит "0";

Выр опотн выр
"Опотн" представляет собой одну из операций от-
ношения <, <=, =, !=, >=, >. Выводит "1", если
указанное сравнение верно, и "0", если оно оши-
бочно. Если оба выражения являются целыми, срав-


150
АПК 00210-01 33 01-4

нение является численным, иначе оно является
лексикографическим;

выр + выр
выр - выр

Сложение или вычитание параметров;

Выр * выр
выр / выр
выр % выр

Умножение, деление или вычисление остатка от де-
ления параметров;

Выр : выр
Операция сравнивает строку, содержащуюся в
первом параметре, с регулярным выражением, со-
держащимся во втором параметре. Синтаксис регу-
лярного выражения такой же, как в редакторе ed.
Символы шаблона .) могут использоваться для вы-
бора части первого параметра. В остальных случа-
ях выводится количество символов, соответству-
ющих шаблону ("0", если сравнение неудачно);

( Выр )
Скобки для группировки.

ПРИМЕРЫ:
Увеличение на "1" переменной A языка управления зада-
ниями:

151
АПК 00210-01 33 01-4

A=`expr $A + 1`

Нахождения части имени файла (младшей части) из полно-
го имени файла, хранящегося в переменной A, которая
может содержать или не содержать "/":

expr $A : '.*/)' '|' $A

В последнем примере сдледует обратить внимание на то,
что операции команды expr, совпадающие с метасиволами
языка управления заданиями, взяты в апострофы.

ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ:
ed, sh, test

ДИАГНОСТИКА:
Команда expr возвращает следующие выходные коды:

0 - если выражение не пустое и не равно "0";

1 - если выражение пустое или "0";

2 - для неверных выражений.





152
АПК 00210-01 33 01-4

ИМЯ:
f77 - компилятор с языка ФОРТРАН-77.

ФОРМАТ:
f77 [ключ] ... Файл ...

ОПИСАНИЕ:
Команда f77 представляет собой компилятор с языка
ФОРТРАН-77. Распознаются параметры следующих типов:

- Параметры, имена которых заканчиваются на ".f",
считаются исходными программами на языке
ФОРТРАН-77.Oни компилируются, и каждая об'ектная
программа помещается в файл текущего справочника
под именем, которое получается из имени исходно-
го файла путем замены ".f" на ".o";

- Параметры, имена которых заканчиваются на ".r"
или ".e", считаются исходными программами на
языках RATFOR или EFL соответственно.Oни сперва
преобразуются соответствующим препроцессором, а
затем компилируются с помощью f77;

- Аналогично, параметры, имена которых заканчива-
ются на ".c" или ".s", считаются исходными прог-
раммами на языке Си или ассемблере.Oни компили-
руются или ассемблируются, создавая файлы ".o".

Приведенные ключи имеют то же самое значение, что и в
команде cc. Описание ключей, задающих режимы загрузки
содержится в ld:


153
АПК 00210-01 33 01-4

-c Подавляет загрузку и создает файл ".o" для каж-
дого исходного файла;

-d Компилятор формирует дополнительные команды и
информацию в об'ектном файле для символьного от-
ладчика cdebug.

-p Подготовить об'ектные файлы для профилирования
(см. команду prof);

-O Вызвать оптимизатор об'ектного кода;

-S Скомпилировать указанные программы и оставить
ассемблерный выход в соответствующих файлах с
суффиксами ".s". (файлы ".o" не создаются);

-f Использовать интерпретатор плавающей запятой,
кроме того, подключается вариант компилятора,
который может работать на машинах без процессора
плавающей запятой.

-o вывод
Присваивает выходному файлу редактора связей ld
имя "вывод" вместо "a.out";

Следующие ключи являются специфическими для f77:

-onetrip
Компилирует циклы do, которые, получив управле-
ние, выполняются по крайней мере один раз. (В
ФОРТРАНе-77 циклы do вообще не выполняются, если
верхняя граница меньше, чем нижняя);


154
АПК 00210-01 33 01-4

-u Устанавливает тип неопределенных переменных
"undefined" вместо использования стандартных
правил языка ФОРТРАН;

-w Подавляет все предупредительные сообщения. Если
этот ключ имеет вид "-w66", подавляются только
предупредительные сообщения относительно совмес-
тимости с языком ФОРТРАН-66. Ключ "-wki" подав-
ляет предупредительные сообщения о русских
буквах в идентификаторах;

-U По умолчанию прописные буквы в идентификаторах и
в ключевых словах переводятся в строчные. Ключ
"-U" блокирует перевод, что позволяет различать
прописные и строчные буквы в идентификаторах.
Ключевые слова в этом случае записываются про-
писными буквами;

-O<цифра>
Разрешить вынесение переменных циклов на ре-
гистры с целью оптимизации. Одновременно включа-
ется режим "-O". <цифра> определяет число ре-
гистров: 1 или 2;

-I2 -I4 -Is
Флаги влияют на размер целых переменных: флаг
"-I2" устанавливает тип "integer" эквивалентным
"integer*2", "-I4" - "integer*4". По умолчанию
установлен режим "-I4" (в соответствии со стан-
дартом переменные типов "integer" и "real"


155
АПК 00210-01 33 01-4

должны занимать одинаковую память). Режим "-Is"
разрешает компилятору в режиме "-I4" вычислять
индексы в предположении, что они находятся в ди-
апазоне чисел типа "integer*2";

-v В этом режиме компилятор сообшает об начале оче-
редных этапов трансляции(F77PASS, PASS1, AS, LD,
C), а также выдает версию компилятора;

-V Отладочный режим работы компилятора. Распечаты-
ваются команды "shell", запускаемые в процессе
трансляции вместе со своими параметрами;

-T<символ><имя-компоненты>
Заменить какой то проход компилятора на указан-
ную программу. Служит для отладки компилятора
или вызова других его версий. <символ> обознача-
ет следующие компоненты транслятора:

"0" - f77 проход 0;
"1" - f77 проход 1;
"2" - c1 (си-компилятор, проход 1);
"o" - c2 (оптимизатор кода);
"a" - as (ассемблер);
"l" - ld (редактора связей);
"f" - головной раздел (вместо /lib/crt0);
"m" - макропроцессор m4.

Следует иметь в виду, что флаг "-f" переназнача-
ет компоненты "1" и "f".

156
АПК 00210-01 33 01-4

-F Обработать соответствующие файлы препроцессорами
RATFOR и EFL, поместить результат в файл с суф-
фиксом ".f", но не компилировать результат;

-m Применить к каждому файлу ".r" или ".e"
препроцессор м4 перед обработкой его препроцес-
сорами RATFOR и EFL;

-ex Использовать строку "x" как ключ для EFL при об-
работке файлов ".e";

-rx При обработке файлов с суффиксом ".r" использо-
вать строку "x" как ключ для препроцессора
RATFOR.

Прочие параметры считаются либо ключами загрузчика,
либо об'ектными программами, совместимыми с f77, либо
библиотеками программ. Эти программы вместе с резуль-
татами указанных компиляций загружаются (в заданном
порядке) для получения выполняемой программы с именем
"a.out".

Компилятор реализует полный Фортран-77 с некоторыми
расширениями, сделанными как для более эффективного
использования ЭВМ, так и для лучшей совместимости с
другими диалектами Фортрана. В версии компилятора для
ЭВМ без раздельных адресных пространств команд и
данных (а к ним относятся почти все отечественные ЭВМ,
за исключением Электроники-79) существуют некоторые
ограничения:

157
АПК 00210-01 33 01-4

- Не реализованы режимы "-Is" и "-C";

- В константных выражениях (размерности массивов и
т.д.) можно использовать только целые числа и
выражения целого типа (но не реальные или
комплексные);

- В списках ввода/вывода и параметрах циклов "do"
запрещено использование встроенных арифметичес-
ких функций и выражений, содержащих операции с
комплексными числами. Это требование распростра-
няется не на все случаи, но его нарушение может
приводить к сбою компилятора с диагностикой "не
найден сегмент ...".

- Компилятор работает довольно медленно, и исполь-
зует большие рабочие файлы в справочнике "/tmp".

- При работе на ЭВМ без процессора плавающей точки
усиливаются количественные ограничения на коли-
чество идентификаторов, плавающих констант, ко-
личество размерностей массивов в программах на
Фортране, причем превышение этих ограничений
может приводить к диагностике "out of memory" на
этапе трансляции. При работе на
ЭВМ с процессором плавающей точки эти ограниче-
ния уменьшаются.

Язык расширен по сравнению с Фортраном-77 следующим
образом:

158
АПК 00210-01 33 01-4

- Введены новые описатели размещения локальных пе-
ременных: "static", "automatic", "undefined"
(для оператора "implicit");

- В качестве ограничителя строк можно использовать
как одиночные, так и двойные кавычки.При этом
закрывающая кавычка должна быть такой же, как и
открывающая;

- В строках можно использовать обозначения управ-
ляющих символов, принятые в языке Си: 0 ,


- Введен оператор вставки текста include 'имя-
файла';

- Введены битовые, восьмеричные и шестнадцатерич-
ные константы, например:

b'001' - битовые;
o'725' - восьмеричные;
x'af5' - шестнадцатеричные;

- Введены операторы "accept" - эквивалентно
"read", "type" - эквивалентно "print", "byte" -
эквивалентно "character", для совместимости с
некоторыми диалектами языка Фортран-4;

- Введены функции "or", "and", "xor", "not" для
работы с целыми числами, функции "getarg" и
"iargc" для связи с системой;


159
АПК 00210-01 33 01-4

- По умолчанию каналы ввода/вывода настроены сле-
дующим образом:

0 - stderr (канал диагностик);
5 - stdin (стандартный ввод);
6 - stdout (стандартный вывод).

Остальные каналы связаны с файлами "fort.n", где
"n" - номер канала. Могут использоваться каналы
с номерами 0 - 9.

Существует два формата входного текста. Если в колон-
ках 1-6 стоит символ табуляции или в качестве признака
продолжения используется "&" в первой позиции, длина
входной строки может быть произвольной. Иначе исполь-
зуются только первые 72 символа входной строки. Символ
"!" является признаком внутристрочного комментария,
текст между "!" и концом строки пропускается. Однако
"!" не может быть единственным символом в строке.

Программы на Фортране-77 могут использоваться сов-
местно с программами на Си. Оператор Фортрана-77 call
x(a,b,c) эквивалентен (если a,b,c - простые перемен-
ные) оператору языка Си: x_(&a,&b,&c), то есть внешние
имена дополняются символом подчеркивания в конце, а
параметры передаются по адресу (если это не символьные
переменные и не функции). Подробнее см.описание языка
(86.24247-01 35 01).

ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ:

160
АПК 00210-01 33 01-4

prof, cc, ld, adb, cdeb.

ДИАГНОСТИКА:
Диагностические сообщения, выдаваемые непосредственно
компилятором f77, не требуют пояснений. Иногда могут
выдаваться сообщения загрузчика. Некоторые сообщения
об ошибке компилятора могут вызываться ошибками в
программах или превышением количественных ограничений.

ЗАМЕЧАНИЯ:
При работе на ЭВМ с малым об'емом адресуемой памяти
возникают некоторые ограничения на допустимый размер
программы. Кроме того, необходимость деления
компилятора на динамически загружаемые сегменты приво-
дит к увеличению времени его работы.

Отсутствие на установке команд плавающей арифметики не
является препятствием для использования компилятора,
но не следует удивляться, если время работы программы
резко возрастет (как и в программах на Си).

Большие программы (содержашие большое количество
меток) могут не пройти через оптимизатор об'ектного
кода (предупредительное сообщение "optimizer out of
space"). Система ввода/вывода языка Фортран довольно
велика и занимает около 050000(8) байтов оперативной
памяти. Для уменьшения размера программ и ускорения их
работы рекомендуется использовать флаги "-O1 -I2"
всегда, когда это возможно.

161
АПК 00210-01 33 01-4

Для отладки программ на Фортране могут использоваться
те же средства, что и для программ на Си : отладчики
"adb" и "cdeb". Отладчик "cdeb" понимает типы перемен-
ных в Фортране-77.

ФАЙЛЫ:
/usr/f77lib/f77pass0 - проход 0;

/usr/f77lib/f77p1 - проход 1;

/usr/f77lib/f77p1f - проход 1 для машин без процес-
сора плавающей точки;

/usr/f77lib/lib?77.a - библиотеки Фортран-77 на счете;

/tmp/f???.? - рабочие файлы.









162
АПК 00210-01 33 01-4

ИМЯ:
fc - компилятор ФОРТРАН.

ФОРМАТ:
fc [ -c ] sfile1.f ... ofile1 ...

ОПИСАНИЕ:
При вызове компилятора можно задавать параметры трех
типов:

- имена файлов с суффиксом ` .f' являются исходны-
ми текстами на ФОРТРАНЕ. Об'ектные файлы выво-
дятся (или читаются) в файл с суффиксом ` .o';

- Другие параметры (кроме ключа -c) рассматривают-
ся либо как ключи редактора связей, либо как
об'ектные программы, обычно создаваемые на пред-
шествующих проходах fc, либо как совместимые с
ФОРТРАНОМ программы. Эти программы, вместе сo
скомпилированными программами, обрабатываются
после чего получается исполняемый файл с именем
a.out;

- Задание ключа -c и любая синтаксическая ошибка
при трансляции приводит к тому, что сборка не
выполняется.

Приводим список различий между fc и стандартным
ФОРТРАНОМ-4:

1) В выражениях допустимо произвольное смешение

163
АПК 00210-01 33 01-4

типов. Но в настоящее время возможны не все комби-
нации типов. Допустимы все обычные преобразования,
включающие целый, действительный, двойной точности
и комплексный типы;

2) Возможны два варианта оператора implicit:
implicit integer /i-n/, либо implicit integer
(i-n);

3) Возможны типы doublecomplex, logcal*1, integer*2,
и real*8;

4) Символ "&" в первой позиции указывает на то, что
за ним следует продолжение оператора;

5) Символ "c" в первой позиции указывает на то, что
за ним следует комментарий;

6) Все операторы пишутся строчными буквами;

7) Понятие "седьмая колонка" не используется;

8) При использовании спецификации формата "g", ввод
производится в "свободном" формате.Предшествующие
пробелы пропускаются, первый пробел после числа
заканчивает поле;

9) При вводе, запятая является разделителем цифровых
или логических полей;

10) Управление переводом строки при выводе отсутству-
ет;

164
АПК 00210-01 33 01-4

11) Последовательность из N символов, заключенная в
двойные кавычки ` " ', эквивалентна Nh, за которы-
ми следуют эти символы;

12) В операторе data символьная строка может инициали-
зировать массив элементов или последовательность
элементов массива;

13) Число блоков памяти, запрашиваемых бесформатным
оператором read, должно совпадать с числом, содер-
жащимся в читаемой записи.

Для операторов ввода/вывода доступны номера устройств
с 0 по 19. Устройство номер N указывает на файл
fortNN. (например, устройству номер 9 соответствует
файл `fort09'). Читаемые файлы должны существовать-
.Если вывод производится в отсутствующий файл, файл
создается. Устройство номер 5 постоянно закреплено за
стандартным файлом ввода. Устройство номер 6 постоянно
закреплено за стандартным файлом вывода.

ФАЙЛЫ:
a.out результат работы;
f.tmp[123] временные файлы;
/usr/fort/fc1 собственно компилятор;
/lib/fr0.o старт прогона;
/usr/fort/filib.a библиотека интерпретатора ;
/usr/fort/libf.a встроенные функции;
/usr/fort/liba.a системная библиотека

165
АПК 00210-01 33 01-4

ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ:
ld, ierror, getarg, setfil

ДИАГНОСТИКА:
При компиляции, диагностика выдается по-английски.
Возможно указание номера ошибочной строки и номера
строки исходной программы, в которой имеется ошибка.
При выполнении программы выдается номер ошибки:

1 неверно задан аргумент функции log;

2 несоответствие количества аргументов в функции
amod;

3 несоответствие количества аргументов в функции
atan2;

4 лишний аргумент при cabs;

5 задан слишком большой экспонент в cexp;

6 несоответствие количества аргументов в функции
cmplx;

7 несоответствие количества аргументов в функции
dim;

8 лишний аргумент при exp ;

9 несоответствие количества аргументов в функции
idim;

10 несоответствие количества аргументов в функции

166
АПК 00210-01 33 01-4

isign;

11 несоответствие количества аргументов в функции
mod;

12 несоответствие количества аргументов в функции
sign;

13 недопустимый аргумент при sqrt;

14 неправильный переход по вычисляемому goto;

15 subscript out of range;

16 переполнение при вычислении real**real;

17 (отрицательный real)**real;

100 неверно задан номер устройства ввода/вывода;

101 неправильное использование устройства ввода/выво-
да;

102 не можем создать файл вывода;

103 не можем открыть файл ввода;

104 конец файла ввода;

105 неверный символ в операторе format;

106 оператор format не может начинаться с символа `('
;

107 не пустой список ввода/вывода при отсутствии спе-

167
АПК 00210-01 33 01-4

цификаций преобразования в формате;

108 лишние скобки в формате ;

109 неправильное определение формата;

110 запрещенный символ в поле ввода;

111 конец оператора format в h-спецификации;

112 неверный аргумент при setfil;

120 неверный аргумент при ierror ;

999 запрещенное преобразование ввода.

ЗАМЕЧАНИЯ:
В данной версии компилятора не реализованы следующие
возможности:

оператор-функция;

масштабный множитель в спецификции формата опе-
ратора ввода;

оператор backspace.






168
АПК 00210-01 33 01-4

ИМЯ:
file - определить тип файла.

ФОРМАТ:
file файл ...

ОПИСАНИЕ:
Команда file выполняет серию проверок для каждого па-
раметра и пытается классифицировать его. Если оказыва-
ется, что файл состоит из символов кода КОИ-8, команда
file исследует первые 512 байтов и пытается угадать
язык.

ЗАМЕЧАНИЯ:
Данная команда часто совершает ошибки. В частности,
она часто предполагает, что командные файлы являются
программами, написанными на языке Си.







169
АПК 00210-01 33 01-4

ИМЯ:
find - поиск файлов.

ФОРМАТ:
find список_полных_имен выражение

ОПИСАНИЕ:
Команда find рекурсивно понижает иерархию каталогов
для каждого имени пути в "списке_полных_имен" (т.е.