М.М. ГОРБУНОВ-ПОСАДОВ - Системное обеспечение пакетов прикладных программ (1184225), страница 20
Текст из файла (страница 20)
В предложениях редактирования используется понятиеномера строки. Номер строки представляет собой либо десятичное целоечисло из диапазона [0:К], где К - число строк редактируемого модуля, либосимвол Е, который можно использовать вместо номера последнегопредложения модуля. Все предложения считаются перенумерованными,начиная с 1 с шагом 1. Номера строк текста печатаются на листинге призаписи модуля в архив (STORE), при его распечатке (PRINT) илиперфорации (PUNCH).
Именно в терминах этих номеров производитсяредактирование текста. Номер строки 0 используется только для добавленияновых строк в начало текста. Диапазон строк имеет вид<номер строки 1>[-<номер строки 2>]Если <номер строки 2> опущен, то предполагается, что диапазон включаеттолько одну строку <номер строки 1>. Номера строк разделяются знаком«минус». Не требуется, чтобы номера строк, задаваемых в редактирующихдействиях, располагались в порядке возрастания или убывания, нозапрещается использовать пересекающиеся диапазоны строк.
Приобнаружении пересечения будет напечатано сообщение, например!!!!! ДИАПАЗОНЫ 135-155 И 140-144 ПЕРЕСЕКАЮТСЯСледует иметь в виду, что редактирующие действия выполняются поотношению к номерам строк исходного текста. Изменение номеров строк врезультате редактирования должно учитываться только при последующихприменениях к данному модулю операции EDIT.Добавляемые строки задаются в операциях ADD и REPL. Добавляемыек исходному тексту строки образуют группы. Концом группы служит либоочередное редактирующее предложение, либо начало следующего пунктазадания.Предложение TAKE.
Группы добавляемых строк, помимо явно заданныхстрок текста, могут содержать предложения TAKE, предназначенные длядобавления строк текста, расположенных в данном или в других модуляхархива. Предложение TAKE имеет вид<признак> TAKE [<тип>:]<архивное имя> [<диапазон>]и означает, что на его место подставляются строки модуля с заданнымархивным именем из указанного диапазона.
Если диапазон не задан, топодставляется текст всего модуля. Подстановка не будет произведена, еслине совпадают признаки модуля, который редактируется, и модуля, строкикоторого подставляются. В этом случае выдается сообщение!!!!! НЕСОВПАДЕНИЕ ПРИЗНАКОВПредложение ADD предназначено для добавления в текст модуля новыхстрок и имеет вид<признак> ADD <номер строки>Добавляемые строки текста, следующие непосредственно за предложениемADD, будут вставлены в текст редактируемого модуля вслед за строкой,задаваемой в заголовке предложения.Приведем фрагмент тела пункта EDIT с предложениями ADD.+EDIT MOD+ADD 37PRINT 1010 FORMAT ('END OF SOLUTION')+ADD 38CALL SAVE+ADD EС ——————————————————+TAKE ЧАСТЬ2С ——————————————————+TAKE ЧАСТЬЗ 5-ЕEND+ADD 0*FORTRANПервое предложение ADD задает добавление двух строк в текст модуляMOD после строки 37.
Второе - добавление одной строки после строки 38.По третьему предложению в конец редактируемого модуля добавляетсягруппа строк, составленная из заданных явно текстов комментариев, полноготекста модуля ЧАСТЬ2 и строк текста модуля ЧАСТЬЗ, начиная с пятой.Четвертое предложение задает вставку перед текстом модуля одной строки.Предложение EXCL служит для удаления строк из текста модуля иимеет вид<признак> EXCL <диапазон>Из текста редактируемого модуля удаляются строки из указанногодиапазона.Предложение REPL служит для замены (т.е. удаления группы строк идобавления на их место других строк) и имеет вид<признак> REPL <диапазон>Строки из указанного диапазона удаляются, и на их место подставляютсядобавляемые строки, следующие непосредственно за предложением REPL.Число удаляемых строк может не совпадать с числом добавляемых.
Болеетого, добавляемые строки могут отсутствовать, и в этом случае предложение REPL задает просто удаление строк. Можно сказать, чтопредложение REPL совмещает действие двух предложений: ADD и EXCL.Предложение ABS. Одна из наиболее неприятных ошибок,возникающих при пакетном редактировании, - повторное выполнениеодних и тех же редактирующих действий над одним модулем. Онавозникает, в частности, в случае повторного выполнения задания, ккоторому обычно прибегают операторы в случае сбоя машины. Дляпредупреждения ошибок такого рода в Сафре принято соглашение,согласно которому повторное применение к модулю пункта EDIT с тем жесамым телом рассматривается, вообще говоря, как некорректное и невыполняется.
При этом печатается сообщение, например!!!!! МОДУЛЬ MOD УЖЕ РЕДАКТИРОВАЛСЯЕсли все же повторное редактирование необходимо, надо записать в телесоответствующего пункта EDIT предложение ABS вида<признак> ABSПечать каталога архива (CATALOG). Каталог архива пакета Сафраможет быть распечатан с помощью пункта CATALOG, заголовок которогоимеет вид<признак> CATALOGТело пункта CATALOG пусто.В результате выполнения этого пункта в листинге задания вслед зазаголовком пункта CATALOG в алфавитном порядке имен печатаетсясписок хранящихся в архиве модулей.
Каждому модулю соответствует однастрока каталога. В ней, кроме архивного имени, печатаются следующиеданные: тип модуля; шифр пользователя, создавшего модуль; признак, скоторым создан модуль; число строк в модуле; число блоков памяти иликоличество слов памяти БЭСМ-6, занимаемых модулем; дата созданиямодуля; дата ивремя последнего изменения (редактирования) модуля; дата последнегоиспользования модуля; 40 первых символов первого предложения текстамодуля, которые могут служить неплохим комментарием, уточняющимназначение модуля.Кроме того, распечатываются дата печати каталога и координаты архивана внешнем носителе. В конце выдается сводная информация о состоянииархива: его размер, число свободных блоков и т.д.Такая организация распечатки каталога удовлетворяла пользователейСафры, пока архивы содержали порядка 200-300 модулей.
Однако современем число модулей в архиве росло, и средний архив Сафры сталсодержать около 1000 модулей. Текст каталога такого архива занимаетсвыше двух метров бумаги АЦПУ и неудобен для многих видовповседневной работы. Требуется предоставить пользователю возможностьраспечатки различных подмножеств каталога, задаваемых условиями,накладываемыми на атрибуты модулей, а также возможностьпереупорядочивать каталог по любому из атрибутов. Включение этихвозможностей в пакетную версию Сафры потребовало бы значительногоусложнения языка заданий, и поэтому они были реализованы только вдиалоговой Сафре.Перепись текстов модулей в Димон (DIMON) и в Краб (CRAB). Как ужеупоминалось, диалоговое редактирование текстов хранящихся в архивемодулей выполняется внешними по отношению к пакетной версии Сафрысредствами - с помощью диалогового монитора Димон или системы Краб.Редактирование предполагает выполнение следующих шагов.Шаг 1.
Посредством описываемых ниже операций DIMON и CRABтексты модулей переписываются в указанный пользователем файл Димонаили на сбойные зоны Краба.Шаг 2. Переписанные тексты редактируются средствами Димона илиКраба.Шаг 3. Отредактированные тексты переписываются в архив Сафрыпутем запуска из Димона или Краба задачи переписи.С точки зрения пользователя Сафры наибольшие неудобства вызываетзаминка с началом редактирования, вызванная необходимостью выполненияшага 1. Хотя шаг 1 выполняется и не всегда, поскольку тексты находящихсяв работе модулей обычно присутствуют уже и в архиве, и в редакторе, темне менее наличие встроенного диалогового редактора, позволяющегоизбавиться от выполнения этого шага, является одним из важнейшихпреимуществ диалоговой версии Сафры.Выполнение шага 3 осуществляется сравнительно легко, посколькутексты переписываемых модулей оформляются, как и в операцииперфорации PUNCH, в виде готовых фрагментов задания для записи в архивСафры.
В случае переписи в файл Димона эти фрагменты дополнительнообрамляются управляющими предложениями Димона «///***», позволяющими легко выделять тексты отдельных модулей.Для переписи в файл Димона служит пункт DIMON, заголовок которогоимеет вид<признак> DIMON <идпол>:<файл> <список архивных имен>где <идпол> - идентификатор пользователя Димона; <фаил> - имя файлаДимона, в который переписываются модули Сафры; <список архивных имен>- имена переписываемых модулей. Список имен может быть продолжен спомощью предложений MODULE.В результате выполнения пункта DIMON формируется задача, котораядописывает тексты модулей (дополняемые указанным выше образом) один задругим в «хвост» указанного файла Димона.Аналогично, для переписи модулей на сбойные зоны Краба служитпункт CRAB, заголовок которого имеет вид<признак> CRAB <список архивных имен>где <список архивных имен> - имена переписываемых модулей.