Редактор текстов *edit

В мониторной системе Дубна имеется сервис, позволяющий редактировать тексты, расположенные на внешних носителях (лентах и дисках). Редактирование происходит в “пакетном” режиме. То есть вы составляете последовательность нужных команд редактирования, и формируете пакет карт с заданием для МС Дубна.

Вызов редактора производится картой *EDIT. За ней следуют команды редактирования. Последней командой должна быть карта *EE (end edit). Примерно так:

*NAME Редактор текстов
*EDIT
...
*EE
*END FILE

По своему назначению сервис *EDIT схож со известным потоковым редактором SED операционной системы Unix.

Команда чтения

  • *R:xxnnn – чтение с ленты/диска xx, начальная зона nnn
  • *R:1 – эквивалентно *R:03000, то есть читаем с барабанов 03-04
  • *R:2 – эквивалентно *R:05000, то есть читаем с барабанов 05-06
  • *R – то же самое, что *R:1
  • *RO – чтение из входного потока (read out), то есть берутся все последующие строки до карты *EE

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

Команда записи

  • *W:xxnnn – запись на ленту/диск xx, начальная зона nnn
  • *W:1 – эквивалентно *W:03000, то есть пишем на барабаны 03-04
  • *W:2 – эквивалентно *W:05000, то есть пишем на барабаны 05-06
  • *W – то же самое, что *W:1
  • *WO – запись не нужна (write out)
  • *WC – дозапись, с теми же параметрами что и *W, но текст дописывается в конец к имеющемуся на указанном носителе

В командах записи через запятую можно указывать максимальное количество зон, например *W:31000,100. Если файл окажется больше, будет выдана сообщение об ошибке и записано ровно указанное количество зон.

Вызов редактора должен иметь следующую структуру:

*EDIT
карта чтения
карта записи или дозаписи
другие карты, если необходимо
*EE

Пример: запись текста на диск 31 с нулевой зоны.

*EDIT
*RO
*W:31000
Записываемый
текст, не содержащий
управляющих карт
*EE

Пример: запись текста, содержащего управляющие карты.

*EDIT
*RO
*W:31000
*(((
Записываемый
произвольный текст
*)))
*EE

Пример: дозапись текста с одной ленты к тексту на другой ленте.

*EDIT
*R:32130
*WC:31151
*EE

При записи текста на носитель в конец автоматически добавляется строка *END FILE. При чтении эта строка распознаётся как конец файла и убирается.

Вместо управляющих скобок, строки текста, начинающиеся со звёздочки *, можно также защитить с помощью команды *L: или *L., например:

*EDIT
*RO
*W:31000
*L:*name задача
*L:*end file
*EE

Печать и перфорация

  • *LL – печать текста
  • *HL – печатать не весь текст, а для каждой фортранной или автокоднойподпрограммы её первую и последнюю строки
  • *LO – отмена печати
  • *Y – отменить печать текста из пакета редактирования
  • *YO – восстановить печать текста из пакета редактирования
  • *P – начать новую страницу печати
  • *LP – вместо печати выдать текст на перфокарты
  • *CP:имя – перфорация COSY-массива под указанным названием
  • *PO – отмена перфорации

Нумерация карт

Считается, что строка текста (карта) имеет размер 80 символов. Позиции 1-72 несут смысловую нагрузку, а позиции 73-80 содержат номер карты. Номер карты - это, вообще говоря, произвольный текст, но удобнее если он начинается с букв а заканчивается цифрами. Лучше, если каждая строка имеет уникальный номер. Редактор может в этом помочь.

  • *N:xxxxnnnn – перенумерация всех карт, начиная с указанного номера
  • *NI:xxxxnnnn – нумерация только новых вставляемых карт (number insert)
  • *NO - отмена нумерации (number out)

Исключение строк

  • *D:xxxxnnnn – исключение одной строки по номеру карты
  • *D:ааа,ббб – исключение группы строк от номера карты ааа до номера ббб включительно
  • *D.образ – исключение строки по образу, то есть по первым буквам строки, игнорируя пробелы
  • *DB.образ – исключить все карты, начиная с текущей карты чтения, до карты с данным образом, не трогая её (delete before)
  • *DA.образ – исключить все карты, начиная с текущей карты чтения, до карты с данным образом, и её тоже (delete after)
  • *DQ.nn – исключить указанное количество карт, начиная с текущей карты чтения (delete quantity)

Вставка строк

  • *I:xxxxnnnn – вставить последующие строки после карты с указанным номером
  • *B:xxxxnnnn – вставить последующие строки перед картой с указанным номером (before)
  • *I.образ – вставить последующие строки после карты с указанным образом
  • *B.образ – вставить последующие строки перед картой с указанным образом (before)
  • *IQ.nn – вставить последующие строки после указанного количество карт, начиная с текущей карты чтения (insert quantity)

Редактирование в пределах одной строки

Карту, которая требует правки, надо сделать текущей с помощью команд *D, *DB, *I или *B.

  • *D/образ – исключить указанный образ
  • *DB/образ – исключить все символы, начиная с текущего и до первого отличного от пробела символа указанного образа (delete before)
  • *Dnn/ – исключить указанное количество символов, начиная с текущего
  • *DF/ – исключить все символы, начиная с текущего и до конца карты
  • *I/образ – вставить вслед за указанным образом
  • *B/образ – вставить перед за указанным образом (before)
  • *Inn/ – вставить после указанного количества символов, начиная счёт с текущего символа
  • *IF/ – вставить после последнего отличного от пробела символа 1-71 позиций карты
  • *Z – переход к следующей карте
  • *M/образ – эквивалентно *IF/образ + *Z

Разное

  • *C:текст – показать произвольный текст в виде комментария
  • *U:имя – обработка текста программой пользователя с указанным именем
  • *T:ааа,ббб – взять из файла чтения строки от номера карты ааа до номера ббб включительно (take)
  • *TN:имя – взять из файла чтения фортранную или автокодную программу с указанныи именем (take name)