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