Редактор текстов *edit
Редактор текстов *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)